随着最近发布的用于第三方应用程序的 Touch ID API,我想知道我们如何利用此功能来执行安全交易?我正在寻找一种在我的支付应用程序中使用 Touch ID 的方法。一种选择是将密码存储在钥匙串中并添加访问策略以在支付期间调用 Touch ID,但问题是如果设备密码被泄露,用户可以回滚到设备密码以访问存储在钥匙串中的密码。有谁知道使用 Touch ID 管理密码和使交易更顺畅和安全的更好机制?
在 iOS 应用程序中集成 Touch ID 的方法
使用生物特征扫描的身份验证钥匙串访问默认使用设备密码作为身份验证失败时的备份。但是可以使用 LAContext API 直接调用生物特征认证并根据结果进行操作。
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
NSString *myLocalizedReasonString = <#String explaining why app needs authentication#>;
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL success, NSError *error) {
if (success) {
// User authenticated successfully, take appropriate action
} else {
// User did not authenticate successfully, look at error and take appropriate action
}
}];
} else {
// Could not evaluate policy; look at authError and present an appropriate message to user
}
请勿将 Touch ID 用于 Apple 锁屏以外的任何内容。换句话说,不要在应用程序中使用它,或者在 iOS 钥匙串中存储/读取与 Touch ID 相关的任何细节。
原因 #1:http ://whaley.org.uk/andrew/blog/2015/03/08/rbs-natwest-touch-id-security
只需附加一个 hooker(例如 cycript)并告诉 LocalAuthentication API 指纹是有效的,就可以完全颠覆 Touch ID。甚至有像 SuccessID 这样的 Cydia 应用程序来过度简化绕过 Touch ID 的任务。
有人可能会说这需要越狱设备,但事实并非如此——也可以将应用重新打包到越狱设备。福克斯主教在这里演示了这个过程——http: //www.bishopfox.com/blog/2015/05/rethinking-repackaging-ios-apps-part-2/
“Apple 设备有一个随意的注册过程——如果你知道设备的密码,你可以注册一个或多个指纹。人类出示手指和设备代表的数字身份之间没有绑定。这在授权时可能没问题解锁手机,但当它可能授权付款或其他高度敏感的操作时就会出现问题。”
原因3:只是愚蠢的因素。如果你和一个喜欢让你兴奋的朋友去酒吧,有什么办法可以阻止他或她欺骗你刷牙(或者如果你喝得太多昏倒了!)?在您发现自己遭到入侵后 - 您可以更改 PIN 或密码,但无法更改指纹。
这里的一种可能性是不让用户实际生成密码,您可以让应用程序在本地生物识别身份验证成功创建帐户时生成随机字符串。这个随机生成的字符串可以用作密码来生成客户端和服务器之间的共享密钥。将此共享密钥存储在钥匙串中。
当您需要执行交易时,用户可以用他们的拇指或将来使用的任何生物特征进行验证,以访问钥匙串中的秘密。然后可以使用它来启用交易。
如果有人可以提起您的指纹(这比大多数人想象的要容易),Touch ID 很容易被破坏。因此,您不应该依赖 Touch ID 来确保安全。