4

我需要在 iOS 钥匙串上安全地存储/检索项目。

从 Apple KeyChainServicesReference 文档(https://developer.apple.com/library/ios/documentation/security/Reference/keychainservices/Reference/reference.html)我使用 SecItemCopyMatching 调用检索钥匙串项目。后者会弹出一个系统提示,用于针对允许使用指纹或 4 位电话密码的本地钥匙串进行身份验证。

虽然我认为使用指纹进行身份验证是安全的,但正是 4 位 PIN 选项降低了我当前的安全性。所以,我的问题是:有没有办法只用指纹选项查询钥匙串(没有密码选项,如果指纹验证失败,它只是失败,没有回退到 4 位密码)

我已经研究过 LocalAuthentication ,尽管后者提供了我需要的确切流程,但 LA 没有让我访问钥匙串,因此 LA 对我没有用

非常感谢提前

4

3 回答 3

1

在 LAContext.h 中:

/// Fallback button title.
/// @discussion Allows fallback button title customization. A default title "Enter      Password" is used when
///             this property is left nil. If set to empty string, the button will be hidden.
@property (nonatomic, copy) NSString *localizedFallbackTitle;

此代码删除按钮,用户可以使用手指或取消:

LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = @"";
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics ...
于 2014-08-26T00:13:47.463 回答
1

没错,在 iOS 8 中,您无法将项目存储在 Keychain 中,并且只有在成功的 Touch ID 身份验证后才能访问它。iOS 8 中添加的kSecAccessControlUserPresence访问控制标志使项目可以在 Touch ID 或 Passcode 身份验证后访问。

但这现在可以在 iOS 9 中完成。添加了两个与 Touch ID 相关的标志kSecAccessControlTouchIDAny和。kSecAccessControlTouchIDCurrentSet

因此,您需要做的就是在为钥匙串项目(带功能)创建访问控制对象时使用这两个标志中的任何一个,并在添加带功能的项目时SecAccessControlCreateWithFlags将该对象分配给属性。kSecAttrAccessControlSecItemAdd

苹果有一个例子可以证明这一点;见addTouchIDItemAsync方法。

另请参阅这篇文章,了解 iOS 9 中其他与安全相关的更改的概述。

于 2015-10-25T17:04:57.730 回答
0

我还没有深入研究 iOS 8 钥匙串,但请记住,4 位密码是由用户设置的。苹果建议用户在开启 TouchID 时,也要开启更复杂的密码,称“由于安全性只与它的最薄弱点一样安全,你可以选择使用复杂的字母数字密码来增加 4 位密码的安全性” 。” http://support.apple.com/kb/HT5949

因此,用户仍然可以选择使用比 4 位密码更复杂的东西。你只是不能强迫他们这样做。如果真要强求,听起来就不得不放弃 Touch ID 的便利性。

于 2014-07-28T20:10:47.653 回答