【问题标题】:iOS hardware-backed key attestationiOS 硬件支持的密钥证明
【发布时间】:2018-04-05 11:09:53
【问题描述】:

在 android 中,有一种方法可以知道密钥对中的公钥是否是在 TEE 内部生成的,因此是硬件支持的 (https://source.android.com/security/keystore/attestation)。我找不到在 iOS 中做到这一点的方法。有谁知道有办法吗?

【问题讨论】:

    标签: ios pki


    【解决方案1】:

    类似的服务可用于 iOS 14,DCAppAttestService

    https://developer.apple.com/documentation/devicecheck/dcappattestservice

    【讨论】:

    • 我认为,该服务不允许使用经过验证的密钥进行通用加密(仅用于签署真实性挑战)。从这个意义上说,它与 Android 密钥认证不匹配。
    • IIUC,此服务允许您验证应用程序的完整性,因此,如果您知道 (a) 应用程序未被修改,(b) 它运行在未修改的 Apple 硬件+操作系统上,并且(c) 你让它在安全飞地中生成密钥——然后你可以确定它在生成后发送到你的服务器的公钥确实是硬件支持的。不过,这里的限制是您无法向其他人证明这一点。
    【解决方案2】:

    注意:在此期间,我的回答不再是最新的了。请参阅上面 Tolga Okur 从 2020 年 6 月 23 日起的回答。出于历史目的,我不会删除它。


    我不知道有直接类似的可能性,但如果您的应用程序运行在未越狱的设备上,您可以create keys 并将它们存储在您的 iOS 设备的 Secure Enclave 中,并确保它们被安全地存储并且不能妥协。请注意,您只能存储 256 位椭圆曲线私钥。然后,您可以从密钥中获取公钥,例如SecKeyCopyPublicKey.

    TrailOfBits 创建了一个example project,您可以在其中查找与 Secure Enclave API 的更多交互。

    Secure Enclave 本身受到安全启动链的保护,以确保其单独的软件得到 Apple 的验证和签名。 见:https://www.apple.com/business/docs/iOS_Security_Guide.pdf

    【讨论】:

    • 您要解释的是如何在安全飞地内生成密钥对,但我想要的是能够确保从服务器端在安全飞地内生成密钥。 Android 使用存储在安全元素内的供应商提供的密钥来解决此签名公钥问题。
    • 是的,我知道,可惜苹果没有提供这种可能性。至少我不知道,文档没有提供任何关于该主题的提示。请注意,Android 中的 Attestation 是一个相对较新的功能,因为它需要 API 级别 24(Android 7,别名 Nougat)。
    猜你喜欢
    • 2017-07-03
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多