私は周りを見回しましたが、Androidがデバイスにパスワードを保存する方法に関する情報を見つけませんでした。特にGmailパスワード。Androidがパスワードを暗号化して保存する方法を学びたいですか?どのキーを使用し、このキーはどこに保存され、どの暗号化アルゴリズムを使用します。
私は周りを見回しましたが、Androidがデバイスにパスワードを保存する方法に関する情報を見つけませんでした。特にGmailパスワード。Androidがパスワードを暗号化して保存する方法を学びたいですか?どのキーを使用し、このキーはどこに保存され、どの暗号化アルゴリズムを使用します。
回答:
Gmailの公式アプリ はパスワードをデバイスに保存しません。このアプリを使用する場合、パスワードは100%安全です。
これがどのように機能するかです:パスワードはGoogleの認証サーバーによって初めて初めて使用されます。最初に認証に成功すると、ファイルにプレーンテキストとしてAuth Token
保存されているデバイスにダウンロードされaccounts.db
ます。以降のすべてのログインでAuth Token
は、元のパスワードではなく、これが使用されます。
そのため、デバイスが盗まれた場合、だれでも手に入れることができるのはAuth Token
、パスワードを変更すると無効になるだけです。だから、あなたは究極の指揮権を持つことになります。
究極のセキュリティを確保2-Factor Authentication
するDevice Specific Password
ために、デバイスを有効にして作成することをお勧めします。デバイスを失った後、必要なのはそのデバイスを無効にすることだけです。メインパスワードを変更する必要さえありません。
注: Gmail viz用のサードパーティのメールアプリを使用している場合、これらはすべて当てはまりません。ストックメールアプリ、K-9メールなど。IMAPまたはPOPプロトコルでは、毎回ユーザーを認証するために元のパスワードが必要です。そのため、サーバーに送信する前に、メールアプリでプレーンパスワードを使用できるようにする必要があります。そのため、ほとんどのメールアプリはパスワードをプレーンテキストで保存します(ハッシュ/暗号化キーはローカルに保存する必要があるため、ハッシュ/暗号化は役に立ちません)。この場合、デバイスの有効化2-Factor Authentication
と作成Device Specific Password
をお勧めします。デバイスを失った後、必要なのはそのデバイスを無効にすることだけです。
更新:
技術的には、暗号化キー/ハッシュキーをプレーンテキストでローカルに保持せずに、暗号化/ハッシュ形式でローカルにパスワードを保存することが可能です。指摘してくれた@JFSebastianに感謝します。残念ながら、Android向けのこのような実装はまだ利用できません。ICSを開始すると、AndroidはKeyChain APIを提供します。これを使用して、アプリはパスワードを安全な形式でローカルに保存できます。KeyChain APIを使用するアプリはほとんどありませんが、ストックメールアプリはそれを使用します(この情報は@wawaに感謝します)。そのため、画面がロックされている限り、ストックメールアプリでパスワードは安全になります。KeyChainは、デバイスがルート化されており、ICS以前のデバイスでは使用できない場合、安全ではないことに注意してください。
組み込みのメールアプリケーションで使用されるAndroidパスワードは、SQLiteデータベース内にプレーンテキストで保存されます。これは、Sachin Sekharの回答で説明されているように、認証トークンを使用するGmailアプリケーションとは対照的です。
Jelly Beanの場合、データベースの場所は次のとおりです。
/data/system/users/0/accounts.db
上記の場所は、Androidのバージョンによって異なります
ルート化されていないデバイス上のこの場所は、オペレーティングシステムによって保護および保護されています。
根ざしたデバイスでは、ユーザーは既に技術的に独自のセキュリティをクラックしており、プレーンテキストでなくても、キーをデバイスのどこかに存在させる必要があるため、解読するのは簡単です。
Android開発チームのメンバーが、今日まで適用される説明を投稿しました。
さて、この特定の懸念に関して。最初に明確にすることは、メールアプリがPOP3、IMAP、SMTP、およびExchange ActiveSyncの4つのプロトコルをサポートしていることです。非常にわずかな例外を除き、これらはすべてクライアントがサーバーにパスワードを提示する必要がある古いプロトコルですすべての接続で。これらのプロトコルでは、デバイスでアカウントを使用する限り、パスワードを保持する必要があります。新しいプロトコルはこれを行いません-これが、たとえば記事のいくつかがGmailと対照的である理由です。新しいプロトコルでは、クライアントは一度パスワードを使用してトークンを生成し、トークンを保存して、パスワードを破棄できます。
コメント#38にリンクされている記事を確認することをお勧めします。「隠蔽」パスワードと、それらを本当に「安全」にすることとの違いに関する非常に優れた背景を提供します。パスワード(base64など)を隠したり、他の場所に保存されたキーで暗号化しただけでは、パスワードやデータの安全性は向上しません。攻撃者はそれを取得できます。
(特に、平文でパスワードを保存しない他の電子メールクライアントの一部についていくつかの主張が行われています。これが真実であっても、パスワードがより安全であることを示すものではありません。デバイスが構成されたアカウントで電子メールを受信し始めると、パスワードは本当に安全ではありません。難読化されるか、別の場所に保存された別のキーで暗号化されます。
さらに、この問題は多くのAndroidユーザーを混乱させるように見えるので、Slashdot-平文で保存されたAndroidパスワードデータでこの議論に従うこともできます。
accounts.db
ファイルは以外のアカウントによる読み取りから保護されていますsystem
。