【问题标题】:Is it possible to secure the Android KeyChain with an HSM?是否可以使用 HSM 保护 Android KeyChain?
【发布时间】:2020-08-01 06:54:41
【问题描述】:

出于安全原因,我想将我的私钥存储在 HSM 中,然后通过 KeyChain 与另一个应用程序共享私钥。 KeyStore 提到它可以得到 HSM 的支持,但我没有找到任何说明 KeyChain 可以支持的文档。

基于the KeyChain documentation,KeyChain 是应用之间共享的正确方式:

如果您需要系统范围的凭据,请使用 KeyChain API。当一个 应用通过 KeyChain API 请求使用任何凭证,用户 可以通过系统提供的 UI 选择安装的哪个 应用程序可以访问的凭据。这允许多个应用程序使用 经用户同意的同一组凭据。

那么,是否可以使用 HSM 保护 Android KeyChain?

【问题讨论】:

    标签: android android-keystore hsm


    【解决方案1】:

    找了好久,终于发现答案是肯定的,有可能。

    Android 4.3 changelog 似乎是唯一记录它的地方:

    Android 现在还支持您的 KeyChain 的硬件支持存储 凭据,通过使密钥不可用来提供更高的安全性 用于提取。也就是说,一旦密钥在硬件支持的密钥库中 (安全元素、TPM 或 TrustZone),它们可用于 加密操作,但私钥材料不能 出口。甚至操作系统内核也无法访问此密钥材料。


    我用代码对此进行了测试,似乎一旦将KeyPair 导入KeyChain,它就会自动放入安全硬件中。这是我跑来测试的 Kotlin 代码:

    GlobalScope.launch {
        context?.let { it1 ->
            val privKey = KeyChain.getPrivateKey(it1, "device_certificate")
            Log.d("App", privKey.toString()) // Shows that this is an AndroidKeyStoreRSAPrivateKey
            val keyFactory: KeyFactory = KeyFactory.getInstance(privKey?.algorithm, "AndroidKeyStore")
            val keyInfo: KeyInfo = keyFactory.getKeySpec(privKey, KeyInfo::class.java)
            if (keyInfo.isInsideSecureHardware()) {
                Log.d("App", "The key is in secure hardware!")
            }
            else {
                Log.d("App", "The key is not in secure hardware!")
            }
        }
    }
    

    打印“密钥在安全硬件中!”。

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多