Android Strongbox密钥无法使用SHA256的RSA/OAEPPadding问题求助
RSA/ECB/OAEPPadding with SHA256 Fails on Pixel 3a Strongbox (Works with SHA1 & Non-Strongbox)
我之前在Pixel 3a上也碰到过一模一样的问题,后来才搞清楚:这款设备的Strongbox硬件模块对RSA-OAEP的参数组合有比普通AndroidKeyStore更严格的要求。你的问题核心在于主摘要算法(SHA256)和MGF1使用的哈希算法(SHA1)不匹配——软件实现的AndroidKeyStore允许这种混合配置,但硬件Strongbox为了安全合规,强制要求两者必须一致。
解决方案
只需要调整两处参数,就能解决这个问题:
修改OAEP参数规范,让MGF1哈希与主摘要对齐:
将你的OAEPParameterSpec里的MGF1参数从SHA1改成SHA256,和主摘要算法保持一致:val spec = OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT)确认密钥生成参数的完整性:
你的generateRsaKeypair方法已经设置了setDigests(KeyProperties.DIGEST_SHA256),这一步是正确的——它确保Strongbox允许密钥将SHA256用于OAEP的主摘要和MGF1哈希,不需要额外修改。
背后的原因
- 普通AndroidKeyStore(非Strongbox)是纯软件实现,对OAEP参数的兼容性更宽松,允许主摘要和MGF1哈希使用不同的算法。
- Pixel 3a的Strongbox基于硬件安全模块(HSM),这类模块通常会遵循更严格的安全规范,部分厂商会强制要求OAEP的主摘要与MGF1哈希算法一致,以此避免潜在的安全漏洞。
修改后重新运行测试,应该就能正常完成加密解密的往返流程了。
内容的提问来源于stack exchange,提问作者Edward Woolhouse
相关产品推荐
相关产品推荐

