私はAndroid Googleが提供する指紋サンプルを試してみました。
https://github.com/googlesamples/Android-FingerprintDialog
私はセキュリティ基準に慣れていないので、次のことを理解できません。
キーストア、キー、CryptoObjectなどを使用する必要があるのはなぜですか?単純に、指紋マネージャーにユーザーの認証を要求すると、ステータス(成功/失敗)を返すだけです。
する必要はありません。 CryptoObject
なしで指紋認証を行うことができます。null
値を渡すだけです。その後、キーストアやその他のものをいじる必要はありません。
の のみ 指紋認証コンテキストでのCryptoObject
の使用は、ユーザーが最後に指紋で認証されてから新しい指紋が追加されたかどうかを知ることです。
各認証で毎回新しいキーを生成する必要がありますか?
新しい指紋が追加された場合、ユーザーのIDを確認するためにパスワードを要求し、新しいキーを生成する必要があります(新しいキーは無効になったため、指紋が追加されました)。
ここでも、null
CryptoObject
を渡せば、これらをいじる必要はありません。
指紋認証はCryptoObjectを必要としませんが、実際にはまったく逆です。
Androidで暗号化操作を行う場合、次のオブジェクトのいずれかを使用できます: Cipher 、 Signature 、 Mac (およびその他)。これら3つのうちの1つを使用して CryptoObject を構築できます。
これらのオブジェクトのキーを生成するとき、名前付きのメソッドsetUserAuthenticationRequired(boolean)
があり、ユーザーが持っている場合に有効なキーonlyを取得できます以前は指紋で認証されていました。
したがって、たとえばクライアント/サーバー通信の場合、クライアントがキーを使用できる場合、それは彼が指紋を介して認証され、彼の身元がわかっていることを意味します。
そうは言っても、私のライブラリをチェックすると、全体がずっと簡単になります。
キーストア、キー、CryptoObjectなどを使用する必要があるのはなぜですか?単に、>のように、フィンガープリントマネージャーにユーザーの認証を要求すると、単にステータス(成功/失敗)を返すことができます。
Androidの指紋について最初に読んだときも同じことを思いました。私の研究を通じて、私はCryptoObjectをわかりやすい英語で要約できると思います。技術的な説明は概念の理解に役立たないため、これはあなたが探しているものです。
CryptoObjectは、Androidキーストアのキーによって作成されます。これは、本質的に「安全」であると見なされます[1]。したがって、CryptoObjectをフィンガープリントマネージャーに渡すと、マネージャーは、指紋認証の結果は改ざんされていません。これは理論的には可能です[2]。
このように考えると、nullを渡すと、指紋マネージャーは指紋照合結果の結果を盲目的に信頼します。キーストアが原因でアプリケーションのみがアクセスできるキーによって作成された暗号オブジェクトを渡す場合、返される結果にはおそらく、アプリだけが正常に識別できるこのcryptoObjectが含まれます。これは、より一般的な意味を持つ別の引用です。
「CryptoObjectは、そのオブジェクトがKeyStoreによってサポートされていない場合、常に失敗するため、プロセスをより安全にします。」 [3]
[4]リンクの画像も参考になります。
[1] https://developer.Android.com/training/articles/keystore
[3] https://medium.com/@manuelvicnt/Android-fingerprint-authentication-f8c7c76c50f8
[4] https://infinum.co/the-capsized-eight/Android-fingerprint-security
あなたの質問の答えの一つ、
エイリアスでキーを作成し、エイリアスを使用してキーを取得します。 aliasはキーのキーです。アプリサンドボックスに保存されているエイリアスのリストがあります。同じエイリアスでキーを生成しようとする後続の試行でキーを取得します。