苹果发布了一种在iOS 14测试版上验证生成的密钥对的方法,名为设备检查应用程序验证服务(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与密钥交互的方法(除了certificKey和generateAssertion方法(。正如苹果自己在发布说明中所说的那样,上面提到的certificKey方法目前也只是返回了一个serverUnavailable错误。
有人有这方面的经验吗?如何获得私钥引用以有效使用它?
没有其他方法可以使用密钥对。您可以使用generateAssertion方法创建有效的签名。然而,这不仅仅是对您数据的签名,而是对您的数据(哈希(加上来自certificKey方法的一些苹果数据的签名。我已经通过多种方式与苹果公司进行了沟通,答案是使用generateAssertion方法来做你需要的事情。需要明确的是:您无法获得对密钥对的引用。