2016-09-27 134 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非常聰明,可以同時處理兩種盒子。但是,您需要自行將各種盒子存儲在鑰匙串中。如果你沒有照顧盒子,當你的應用程序重新啓動時,它就會消失。

相關問題