使用SecKeyGeneratePair在iOS中生成密钥对失败,并且errSecInteractionNotAllowed

时间:2016-12-21 08:22:28

标签: ios swift keychain

在我的应用中,我使用SecKeyGeneratePair生成RSA密钥对。发布应用程序后,我开始注意到使用此功能时偶尔出现errSecInteractionNotAllowed错误(目前非常罕见),目前仅在iOS 10设备上发生。我不清楚为什么密钥对生成失败,或者我应该做些什么来解决这个问题。另外,我找不到任何关于为什么密钥对生成失败的文档。

这是我用来生成密钥对的代码:

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错误的地方。 那么,为什么密钥对生成或我可以做些什么才能解决它?

谢谢,

欧麦

0 个答案:

没有答案