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.
}
在这个调用之后,我得到了字符串形式的 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
}
DCAppAttestationService 本身不提供任何使用 keyId 与密钥交互的方法(除了 attestKey 和 generateAssertion 方法)。提到的 attestKey 方法目前也只是返回一个 serverUnavailableError,正如 Apple 自己在发行说明中所说的那样。
有人有这方面的经验吗?如何获得私钥参考以有效使用它?