【问题标题】:Android - Secure storageAndroid - 安全存储
【发布时间】:2011-07-08 12:26:11
【问题描述】:

我如何将密钥存储在 Android 设备中,并且只能使用该密钥,而不是检索它。例如:我从应用程序导入私有/生成 RSA 密钥对或对称密钥到此“安全存储”。现在,NOBODY 应该能够检索密钥,甚至是原始应用程序。 (密钥的非秘密部分 - RSA 密钥对的公钥 - 但对称密钥的任何部分 - 仍应可检索,尤其是在安全存储中生成密钥时)

密钥库现在应该充当黑匣子,为加密数据提供输入,为解密数据提供输出,例如,我提供要解密的加密值,然后取回解密的值。

如果这是在 android 设备的硬件安全芯片中实现的,这是一个很大的优势,例如智能卡芯片,它是防篡改的,即使设备被植根和克隆也可以保证密钥的安全。

有没有什么安卓手机有这样的防篡改芯片? 关于如何使用这种存储的任何想法?

找到了一个类似的问题:Android Secure Storage,但这并不能回答我的问题。

【问题讨论】:

  • 所以你得到的唯一答案就是告诉你这是完全不可能的。也许你应该重新考虑一下。

标签: android security encryption key


【解决方案1】:

了解如何在 Android 上获得安全存储:

您需要购买一张符合 ASSD 规范(高级安全 SD)的安全 MicroSD 卡。 那是一张包含安全元件的 MicroSD 卡,通常是 PKI 解决方案,您可以在其中在卡上生成私钥,因此无法提取私钥,但可以提取公钥并使用它来加密只有MicroSD卡可以解密。

两个例子是 CertGate MicroSD(作为消费者版本提供,称为“SmartCard-HSM Android”)和一个不再在消费者版本中提供的例子是 G&D 移动安全卡。

这使它成为一个安全的存储,不能被有根手机破解,也不能被复制,根据定义是不可能的。 唯一的方法是如果您正确点击,则使用公钥作为验证来暴力破解私钥。但如果你使用 RSA-2048,这在技术上也是不可能的。

原因是手机制造商似乎将内置的手机安全元件锁定在制造商批准的应用程序中,因此您不能随意使用它。唯一的方法是实际上以 MicroSD 卡的形式在手机中添加一个安全元件。

(此答案仅对 5.0 之前的 Android 版本有效)

【讨论】:

    【解决方案2】:

    我会回答这个问题,但有保留。

    https://developer.android.com/training/articles/keystore.html

    "密钥材料可能绑定到 Android 设备的安全硬件(例如,可信执行环境 (TEE)、安全元件 (SE))。为密钥启用此功能时,其密钥材料为从未暴露在安全硬件之外。”

    因此,您启用了密钥的功能。然而,

    “如果 Android 操作系统被攻破或攻击者可以读取设备的内部存储,攻击者可能能够在 Android 设备上使用任何应用的 Android Keystore 密钥,但不能从设备。”

    这是由于 Android 允许在没有本质上不安全的秘密的情况下使用密钥。因此我的预订。

    在回答带有安全芯片的 android 设备时,我会对搜索说。 似乎 TEE sos 已经存在了一段时间。

    秘密:[ ______________ ]

    【讨论】:

    • 是的。这在 Android 6.0 中有所改变。我已经在我的新身份验证应用 QRSA Authentication 中成功实现了该功能。当这个问题得到回答时,Android 6.0,甚至 5.0 都不存在。由于 Android 架构的变化,我会将答案状态更改为您的答案。这正是我问这个问题时搜索的内容。
    • 不,允许“随机应用程序”使用密钥并不是那么不安全,因为只要密钥材料不暴露在安全硬件之外,这意味着用户应该锻炼良好的逻辑和设备的物理控制。如果设备受到威胁,密钥的安全存储意味着设备可以不受损害,而无需更改或替换密钥材料。像车钥匙一样思考。任何人都可以使用它,即使是未经授权的个人,但只要它不能被复制,车钥匙就可以通过收回来不受损害。
    • KeyStore 依赖于安全的 uid 系统。如果它被泄露并且用户不需要输入秘密(或密码)来使用密钥,则被欺骗的应用程序可以使用该密钥而无需任何用户输入。良好的逻辑或物理控制无济于事。
    • 重要的是这里的“不妥协”部分。如果 uid 系统被入侵,是的,攻击者可能会使用该密钥。就像攻击者可能能够使用您的车钥匙来使用您的汽车一样。这里重要的是密钥材料本身的安全性。如果密钥材料本身不可访问,则密钥本身是不可复制的,因此很容易从受损状态中恢复。但是,如果密钥材料本身被泄露,则可以随时认为密钥被泄露,即使受到密码保护(因为有人可能复制了密钥并偷偷摸摸)
    • 因此,恢复需要更改密钥,这意味着您必须不断更改密钥。与车钥匙比较。如果有人可以复制您的车钥匙,您将不得不随时重新编程您的汽车系统。但是,如果车钥匙不可复制,您只需确保无法访问它即可从妥协中恢复。即使有人可能已经能够使用密钥,也没关系。只要您控制了密钥(在 Android 中,例如打开飞行模式并清除任何 RAT),密钥就不会受到影响。
    【解决方案3】:

    你问的是不可能的。拥有越狱设备的用户比您对设备有更多的控制权。没有地方可以隐藏任何东西,而且永远不会有。你要找的是“(in)Security Though Obscurity”。

    【讨论】:

    • Rook:不,这不是不可能的。如果特定设备内部具有硬件防篡改安全芯片,如智能卡芯片,但嵌入到实际手机中,那么即使是越狱手机也无法以任何方式提取密钥。我正在寻找这样的设备和可能使用来自 android 的安全芯片。
    • @sebastian nielsen 那么什么智能卡也很容易被破解。 youtube.com/watch?v=tnY7UVyaFiQ
    【解决方案4】:

    您可以查看CertStoreKeyStore,虽然我不知道它们是如何在Android 上实现的。我进行了一些搜索,但找不到任何有希望的示例,实际上在 Android-Security-Discussions 组上找到了 post,表明这甚至可能不适用于 Android。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2014-07-08
      相关资源
      最近更新 更多