在 Android 应用程序中保存私钥的安全方式

信息安全 公钥基础设施 安卓 手机
2021-08-21 10:32:58

在 Android 应用程序中存储用于条形码签名的私钥的最合适方法是什么?可能这里的大多数专家会说 - 只是不要这样做,因为它不安全......

但我想了解所提出的解决方案的“不安全”程度和风险。

PS商品智能手机承担。

PS我们可以不经常交换密钥。可以根据需要设计 App Backend API。但是永久的互联网连接和在服务器端签名的变体是不可能的。

1个回答

所有 android 7+ 设备都配备了可信执行环境 (TEE) 作为 Google 应用许可的强制性要求。它是一个硬件支持的密钥库,可为加密 blob 提供隔离存储和数据处理。在 Qualcomm Snapdragon 和 Samsung Exynos SoC 中,TEE 基于ARM TrustzonePixel 和 iPhone 等一些设备有自己的独立 TEE(Google 的 Titan M 和 Apple 的 T2 芯片),称为strongbox离散 TEE 比 ARM Trustzone 更加隔离,并且独立于所使用的 SoC。

您可以使用 android 密钥库提供程序 API

存储在密钥库中的每个密钥都可以设置以下参数:

  • 别名 - 用于标识密钥。
  • 密钥大小(API 23)。
  • 目的——加密/解密(API 23)。
  • 加密模式、算法和填充(API 23)。
  • 密钥在使用前是否应该通过密钥库进行身份验证?(API 23)。
  • 成功验证后可以使用密钥的持续时间(API 23)。
  • 是否应该在新指纹注册时使密钥失效?(API 24)
  • 密钥库是否应该要求在执行加密操作之前解锁屏幕?(API 28)
  • 密钥是否应该受到 StrongBox 硬件安全模块的保护?(API 28)

您还可以使用它来加密用于登录的身份验证令牌、存储密码并加密用于加密应用程序的大型敏感数据的密钥。


“密钥是否应该由 StrongBox 硬件安全模块保护?(API 28)”在整体安全级别方面似乎非常重要。

对于 android 9+,应用程序可以通过调用来设置偏好以将密钥存储在保险箱中setIsStrongBoxBacked(true)如果它抛出,StrongBoxUnavailableException那么应用程序应该回退到硬件支持的密钥库。Strongbox 不受 SoC CPU 中可能影响硬件支持的密钥库的关键侧通道漏洞的影响。硬件支持的密钥库的安全性落在了 SoC 的芯片制造商身上:高通安全世界移动保险库中的“漏洞”泄露了敏感数据

硬件安全最佳实践推荐StrongBox Keymaster该模块包含以下内容:

  • 自己的CPU
  • 安全存储
  • 真正的随机数生成器。
  • 防止包篡改和未经授权的应用程序侧载的附加机制。

Android 密钥库系统

您的 Android 密钥库身份验证有多安全?(已过时,在 android 10 发布之前发布)