4

私はユーザー認証方法(厳密には指紋)を試しており、Android KeyStoreも検討しています。私はユーザーが自分のサーバーにユーザーをログインさせる指紋を設定できるようにするシステムを構築しようとしています。現在、サーバーには有効なユーザー名とパスワードの組み合わせが必要なPOST要求が必要です。Android KeyStoreを使用してユーザー認証資格情報を保存する

初心者がFingerprint APIとKeyStoreの仕組みを理解しているだけなので、これがどのように機能するかについていくつか質問があります。

1)私は指紋の入力を求めて、成功した応答を返すときに(これは簡単に達成できます) - POSTリクエストを開始するには、有効なユーザー名とパスワードに変換するにはどうすればいいですか? KeyStoreにユーザ名とパスワードの両方を保存する必要がありますか?

2)KeyStoreを設定するとき、どのくらい正確に見えますか?ユーザー名とパスワードの両方のエイリアスを設定する必要がありますか? "myapp_user"、 "myapp_pass"など

3)ユーザ名とパスワードの値をKeyStoreに保存するにはどうすればよいですか?

4)正しい方法でこの問題に近づいていますか?指紋をユーザー名とパスワードの組み合わせに安全にリンクするには、より良い方法がありますか?

ありがとうございました!

+0

AndroidKeyStoreのバージョンが4.4から現在のバージョン(多くの場合、RSAキーのみが保存可能)が大幅に変更されました。したがって、あなたは常に最小限のSDKをターゲットにしていることに注意する必要があります。 – Robert

+0

十分な@ロバート。私の質問はAPI 23をターゲットにしていましたが、私はこれを<23で扱う方法を学ぶことにも興味があります。 –

答えて

3

AndroidKeystoreを使用する一般的なプロセスは、AndroidKeyStoreにキーを生成することです。そのキーはキーストアを離れることはありません(エクスポートできません)が、特定のアルゴリズムを使用している限り使用できます(すべてサポートされているわけではありません)。 Androidバージョンがどの暗号化タイプをサポートしているのがhereを確認できます。

Android API 23+では、(AndroidKeyStore内の)AESキーを直接生成し、そのAESキーを使用して、あなたが言及したユーザーの資格情報のような使用データを暗号化できます。

追加の手順が必要です。まず、AndroidKeyStoreにRSA​​キーを生成し、AndroidKeystoreの外側にランダムなAESキーを生成します(内部のAESはサポートされていません)。生成されたAESキーをAndroidKeyStoreで生成したRSAキーで暗号化し、暗号化されたAESキーをプライベートアプリデータディレクトリに保存します。

その後、オプション1では、生成されたAESキーを使用してユーザーの資格情報を暗号化することができます。

+0

私の問題はプロセスを理解することだと思います。私は簡単に新しいエイリアスを作成し、公開鍵/秘密鍵のペアを生成することができます。しかし、どこのユーザー名とパスワードを保存するのですか?値を暗号化してSharedPreferencesなどに入れますか?標準的なプラクティスは何ですか?私は、実際にはユーザー名とパスワードをKeyStoreに配置し、キーストアを返す必要があると思っていました。キーストアがやろうとしていることが間違っているかもしれません。 –

+0

参考までに、検索で以下の例を確認しました。 http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ https://www.sitepoint.com/securing-your-android-apps-with-the- fingerprint-api/ 最初の例はテキストを暗号化/復号化するだけですが、どこにも保存しません。 2番目の例では、暗号化されたテキストをSharedPreferencesに格納します。 –

+1

@h_k:キーストアは、暗号鍵を格納するためのものです。任意のデータを保存することはできません。あなたがデータを暗号化したいのであれば、それを記述し、どこかに保存してください(例えば、設定)。使用されたAESキー(API23 +)を保存しないで、Android用にRSA暗号化してAPI23まで保存します。 – Robert

0

私は同じ種類の要件を持っています。

  1. フィンガープリントオプションを登録している間、ユーザーはユーザー名パスワードと指紋を提供します。
  2. アンドロイドストアで鍵を生成し、それをサーバに渡す必要があります(ユーザ名、パスワード、生成された鍵)。
  3. サーバーでは、ユーザー名とパスワードに対応するこのキーを保存します。
  4. ユーザーがfinger pintでログインしようとするたびに、クライアント側から指紋認証が成功したら、そのキーを取得してサーバーに渡す必要があります。
  5. サーバーでは、そのキーが既に保存されているテーブル行(サーバーDB)をチェックし、対応するユーザー名とパスワードを使用します。

疑いの余地はありませんが、そのキーは変わりません。ユーザー名のパスワードとともに指紋tを登録しながら、サーバー側に鍵を渡しています。したがって、ユーザーがログインしてキーを作成しようとすると、同じままです。

関連する問題