サードパーティアプリ向けのTouch ID APIの最近の発表で、私はこの機能をどのように活用して安全なトランザクションを実行できるのか疑問に思っています。支払いアプリケーションでTouch IDを使用する方法を探しています。 1つのオプションは、キーチェーンにパスワードを保存し、支払い中にTouch IDを呼び出すアクセスポリシーを追加することですが、問題は、デバイスのパスワードが侵害された場合、ユーザーがデバイスのパスワードにロールバックして、キーチェーンに保存されたパスワードにアクセスできることです。パスワードを管理し、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
}
Apple lockscreenを超えるものにはTouch IDを使用しないでください。つまり、アプリでそれを使用したり、iOSキーチェーンのTouch IDに関連する詳細を保存/読み取ったりしないでください。
理由#1: http://whaley.org.uk/andrew/blog/2015/03/08/rbs-natwest-touch-id-security
タッチIDは、フッカー(cycriptなど)を接続し、指紋が有効であることをLocalAuthentication APIに通知するだけで完全に覆すことができます。 Touch IDをバイパスするタスクを簡素化するSuccessIDなどのCydiaアプリもあります。
これにはジェイルブレイクしたデバイスが必要だと言う人もいますが、それは事実ではありません-アプリを刑務所に入れられたデバイスに再パッケージすることもできます。ビショップフォックスはここでそのプロセスを示しています- http://www.bishopfox.com/blog/2015/05/rethinking-repackaging-ios-apps-part-2/
「Appleデバイスには通常の登録プロセスがあります。デバイスのパスコードがわかっている場合は、1つまたは複数の指紋を登録できます。指を提示している人間とデバイスが表すデジタルIDとの間に拘束力はありません。これは、電話のロックを解除しますが、支払いやその他の非常に機密性の高いアクションを許可する可能性がある場合は問題になります。」
理由#3:ただ愚かな要素。あなたを驚かせるのが大好きな友人と一緒にバーに行く場合、彼または彼女があなたをだましてスワイプするのを止めるのに何が必要ですか(または、あなたが飲み過ぎて気を失ったら!)?侵害されたことが判明したら、PINまたはパスコードを変更できますが、指紋は変更できません。
Touch IDは簡単です 壊れている 誰かがあなたの指紋を持ち上げることができる場合(ほとんどの人が考えるよりも簡単です)。したがって、セキュリティのためにTouch IDに依存すべきではありません。
ここでの1つの可能性は、ユーザーが実際にパスワードを生成しないようにすることです。ローカルの生体認証がアカウントの作成に成功したときに、アプリにランダムな文字列を生成させることができます。このランダムに生成された文字列は、クライアントとサーバー間の共有秘密を生成するためのパスワードとして使用できます。この共有シークレットをキーチェーンに保存します。
トランザクションを実行する必要がある場合、ユーザーは親指またはキーチェーン内のシークレットにアクセスするために将来使用される任意の生体認証機能で検証できます。これは、トランザクションを有効にするために使用できます。