2016-09-27 137 views
0

我正在尝试使用SecKeyGeneratePair,并且已将该属性设置为kSecAttrTokenIDSecureEnclave以及将其留为空白。根据https://developer.apple.com/reference/security/ksecattrtokenid如果未设置kSecAttrTokenID,则该项目应存储在普通钥匙串数据库中。但是,无论是否设置它,keychain-2.db文件大小都不会更改。然而,我可以在没有任何错误的情况下将SecKeyRawSign()与生成的私钥一起使用。那么私钥在哪里存储?SecKeyGeneratePair在哪里存储密钥对?

回答

0

如果您设置kSecAttrTokenIDSecureEnclave,那么真正的私钥将存储在安全区域的某个位置,并且返回给您的私钥只是引用安全区域中的真实私钥。但是,就使用密钥而言,它没有任何区别。您以完全相同的方式使用您收到的SecKey。

如果您希望在应用程序的连续运行中使用相同的密钥对(如您最想要的那样),您必须将您收到的私钥存储在密钥链中,并在应用程序再次启动时从钥匙串中检索它,不管你是否使用这个令牌。如果你不这样做,那么你就没有SecKey,所以私钥仍然处于安全飞地,但你失去了访问它的任何方式。

看起来像这样:通常,SecKey是一个带有门钥匙或车钥匙的盒子。但是使用kSecAttrTokenIDSecureEnclave,SecKey是一个里面有一张纸的盒子,它告诉真正的密钥在安全区域的哪个位置。 iOS非常聪明,可以同时处理两种盒子。但是,您需要自行将各种盒子存储在钥匙串中。如果你没有照顾盒子,当你的应用程序重新启动时,它就会消失。

相关问题