Shi*_*ibo 6 security ios swift key-attestation
Apple 发布了一种在 iOS 14 测试版上证明生成的密钥对的方法,名为 Device Check App Attestation Service ( DCAppAttestService )。
我已经成功生成了一个密钥对,就像苹果记录的那样:
DCAppAttestService.shared.generateKey { keyId, error in
guard error == nil else { /* Handle the error. */ }
// Cache keyId for subsequent operations.
}
Run Code Online (Sandbox Code Playgroud)
在此调用之后,我以字符串的形式获取 keyId。但现在我不知道我是否遗漏了一些明显的东西,或者只是没有记录:我绝对无法弄清楚如何使用这个密钥标识符来检索对相关私钥的引用。
我知道它本身存储在 Secure Enclave 中,我无法直接获取它。但是我应该能够得到它的引用,一个 SecKey 对象,我可以用它来签名或加密数据,例如调用
var error: Unmanaged<CFError>?
guard let signature = SecKeyCreateSignature(privateKey, self.algorithm, data as CFData, &error) as Data? else {
/* Something went wrong */
return
}
Run Code Online (Sandbox Code Playgroud)
DCAppAttestationService 本身不提供任何使用 keyId 与密钥交互的方法(除了 attestKey 和 generateAssertion 方法)。提到的 attestKey 方法目前也只是返回一个 serverUnavailableError ,正如 Apple 自己在发行说明中所说的那样。
有没有人有这方面的经验?如何获得私钥引用以有效使用它?
小智 0
没有其他方法可以使用密钥对。您可以使用generateAssertion方法创建有效的签名。然而,这不仅仅是对您的数据的签名,而是对您的数据(哈希)加上 attestKey 方法中的一些 Apple 数据的签名。我已经通过多种方式与Apple就此进行了沟通,答案是使用generateAssertion方法来完成您需要的操作。需要明确的是:您无法获取密钥对的引用。