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 …