【发布时间】:2016-01-14 12:15:18
【问题描述】:
为了生成密钥对,我使用了 Secure Enclave (kSecAttrTokenIDSecureEnclave)。当尝试访问生成的密钥对时,iOS 系统会询问 TouchID。下面是我如何生成和访问密钥对的代码快照。
这里有没有一种设置属性/属性的方法,即 Secure Enclave 功能可以在没有 TouchID 和密码的情况下使用?
生成密钥对:
SecAccessControlRef sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenUnlocked,
kSecAccessControlUserPresence | kSecAccessControlPrivateKeyUsage, &error);
NSDictionary *parameters = @{
(__bridge id)kSecAttrTokenID: (__bridge id)kSecAttrTokenIDSecureEnclave,
(__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeEC,
(__bridge id)kSecAttrKeySizeInBits: @256,
(__bridge id)kSecPrivateKeyAttrs: @{
(__bridge id)kSecAttrAccessControl: (__bridge_transfer id)sacObject,
(__bridge id)kSecAttrIsPermanent: @YES,
(__bridge id)kSecAttrLabel: @“SecKey”,
},
};
SStatus status = SecKeyGeneratePair((__bridge CFDictionaryRef)parameters, &publicKey, &privateKey);
访问密钥对:
NSDictionary *query = @{
(__bridge id)kSecClass: (__bridge id)kSecClassKey,
(__bridge id)kSecAttrKeyClass: (__bridge id)kSecAttrKeyClassPrivate,
(__bridge id)kSecAttrLabel: @"SecKey",
(__bridge id)kSecReturnRef: @YES
};
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&privateKey);
【问题讨论】:
-
如果不使用用户身份验证,您如何建议提取详细信息?当然那只是钥匙链......
-
Secure Enclave 的全部意义在于它保存受 Touch ID 保护的数据。如果您不希望它受 Touch ID 保护,请不要将其放入 Secure Enclave。
-
你们中的一些人可以发布一个答案,然后我会接受它。
标签: ios objective-c keychain security.framework