web-dev-qa-db-ja.com

Androidアプリケーションに資格情報(パスワード)を安全に保存する方法は?

安全な場所で開発している金融アプリケーションでの署名に使用するパスワードを保存したい。ネットサーフィンをした後、次のオプションを見つけましたが、それぞれに欠点があります。

1)KeyChain。
OSバージョン4でのみ使用可能。

2)共有設定。
データを暗号化しても、アプリケーションコードを逆コンパイルすると暗号化キーが危険にさらされる可能性がありますが、データはプレーンテキストで保存されます。

3)キーストアデーモンにアクセスし、その中にクレデンシャルを保存します。
http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html )記憶するには別のパスワードが必要です。

Android IPhone KeyChainのようなアプリケーションで資格情報を保護するためのより良い方法を提案してください。

42
Noor

これはAndroidのiPhoneのKeyChainと同等ではありません。何かを秘密にしておきたい場合は、デバイスに保存しないでください。または、少なくとも、キー/パスワードを保存しないでください。デバイス上で暗号化されています。

さらに:

1)ICSでも、KeyChainを直接使用してアプリケーションの秘密を保存することはできません(3)のブログ投稿を参照)

2)これは、ルート化された電話、または誰かがデバイスに物理的にアクセスできる場合のみの問題です。

3)複数のパスワードを記憶しようとするよりも、すべての資格情報を保護して単一のパスワードを記憶する方がはるかに優れています。さらに、ICSでは、個別のパスワードはありません。資格情報ストレージは、デバイスのロック解除パスワードによって保護されます。

17
Nikolay Elenkov

Hashingは、共有設定または任意のメディアにプレーンテキストとして資格情報を保存しないソリューションです。

パスワードをソルトしてハッシュした後、sharedPreferencesまたはいくつかの埋め込みdbに保存することができます。

これがどのように機能するかです:

Online

  1. ログインに成功すると、プレーンパスワード(ハッシュなし)が認証と承認のためにサーバーに送信されます。

  2. ソルトは、サーバーからクライアントに生成して返すか、クライアントで生成できます。

  3. 次に、それをソルトとして保存し、パスワードをハッシュして保存します。

Offline

  1. 保存したソルトを使用して、ユーザーが入力したパスワードをハッシュします

  2. ログイン成功時に保存したハッシュと比較します

  3. 両方が等しい場合、ユーザーを許可します。それ以外の場合は許可しません。

利点:

  1. したがって、バージョンの互換性について心配する必要はありません。

  2. デバイスがルート化されていても、ハッシュをブルートフォースするのは非常に困難です。

  3. 誰かがアプリを逆コンパイル/クラックしても、リバースエンジニアリングは非常に困難です

7
Durai Amuthan.H