在 Android 应用程序中存储用于条形码签名的私钥的最合适方法是什么?可能这里的大多数专家会说 - 只是不要这样做,因为它不安全......
但我想了解所提出的解决方案的“不安全”程度和风险。
PS商品智能手机承担。
PS我们可以不经常交换密钥。可以根据需要设计 App Backend API。但是永久的互联网连接和在服务器端签名的变体是不可能的。
在 Android 应用程序中存储用于条形码签名的私钥的最合适方法是什么?可能这里的大多数专家会说 - 只是不要这样做,因为它不安全......
但我想了解所提出的解决方案的“不安全”程度和风险。
PS商品智能手机承担。
PS我们可以不经常交换密钥。可以根据需要设计 App Backend API。但是永久的互联网连接和在服务器端签名的变体是不可能的。
所有 android 7+ 设备都配备了可信执行环境 (TEE) 作为 Google 应用许可的强制性要求。它是一个硬件支持的密钥库,可为加密 blob 提供隔离存储和数据处理。在 Qualcomm Snapdragon 和 Samsung Exynos SoC 中,TEE 基于ARM Trustzone。Pixel 和 iPhone 等一些设备有自己的独立 TEE(Google 的 Titan M 和 Apple 的 T2 芯片),称为strongbox。离散 TEE 比 ARM Trustzone 更加隔离,并且独立于所使用的 SoC。
您可以使用 android 密钥库提供程序 API
存储在密钥库中的每个密钥都可以设置以下参数:
您还可以使用它来加密用于登录的身份验证令牌、存储密码并加密用于加密应用程序的大型敏感数据的密钥。
“密钥是否应该由 StrongBox 硬件安全模块保护?(API 28)”在整体安全级别方面似乎非常重要。
对于 android 9+,应用程序可以通过调用来设置偏好以将密钥存储在保险箱中setIsStrongBoxBacked(true)
。如果它抛出,StrongBoxUnavailableException
那么应用程序应该回退到硬件支持的密钥库。Strongbox 不受 SoC CPU 中可能影响硬件支持的密钥库的关键侧通道漏洞的影响。硬件支持的密钥库的安全性落在了 SoC 的芯片制造商身上:高通安全世界移动保险库中的“漏洞”泄露了敏感数据。
硬件安全最佳实践推荐StrongBox Keymaster。该模块包含以下内容:
您的 Android 密钥库身份验证有多安全?(已过时,在 android 10 发布之前发布)