在我的應用程序中,我使用的是SecKeyGeneratePair
來生成RSA密鑰對。發佈應用程序後,我開始注意到在使用此功能時偶爾會出現errSecInteractionNotAllowed
錯誤(目前非常少見),至今只在iOS 10設備上出現。我不清楚爲什麼密鑰對生成失敗,或者我應該怎麼做才能解決這個問題。另外,我找不到任何關於密鑰對生成失敗的文檔。使用SecKeyGeneratePair在iOS中生成密鑰對失敗,errSecInteractionNotAllowed
這是我用來生成密鑰對代碼:
guard let access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,
[],
nil) else {throw Error(description: "Failed to create access control")}
let privateAttributes = [String(kSecAttrIsPermanent): true,
String(kSecAttrApplicationTag): keyTag + self.privateKeyExtension,
String(kSecAttrAccessControl): access] as [String : Any]
let publicAttributes = [String(kSecAttrIsPermanent): true,
String(kSecAttrApplicationTag): keyTag + self.publicKeyExtension] as [String : Any]
let pairAttributes = [String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
String(kSecAttrKeySizeInBits): self.rsaKeySize,
String(kSecPublicKeyAttrs): publicAttributes,
String(kSecPrivateKeyAttrs): privateAttributes] as [String : Any]
var pubKey, privKey: SecKey?
let status = SecKeyGeneratePair(pairAttributes as CFDictionary, &pubKey, &privKey)
此代碼後,我檢查了狀態,如果它不是errSecSuccess
,我與狀態從返回的記錄錯誤功能。這是我注意到errSecInteractionNotAllowed
錯誤的地方。 那麼,爲什麼密鑰對的生成或我可以做什麼來解決它?
感謝,
奧馬爾
謝謝!事實上,這是通過與蘋果支持交流解決的。問題在於標誌的使用不正確 - 它應該作爲關鍵參數之一傳遞(在數組中)。 –
嗨,奧梅爾,沒問題。我在調查iOS加密API時遇到了這個問題。一個問題:你的意思是'kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly'標誌嗎? 如果有某種討論和解決問題的論壇帖子,請在此處鏈接。也許它會在未來幫助別人;) –
不,對不起 - 它使用蘋果技術支持,而不是公開的。我現在回答這個問題並將其標記爲答案。 –