パスワードエントロピーを増やすためにアプリケーションで使用する前にパスワードをハッシュしても安全ですか?
アプリケーション自体でPBKDFが使用されている場合、これによりエントロピーが増加しますか、それともPBKDF自体がパスワードエントロピーを増加させますか?
ランダムなパスワードがmd5でハッシュされている場合、出力は128ビットのエントロピーを提供しますか?
編集:ハッシュ関数の結果を、AES-256、電子メール、コンピューターシステムへのアクセスなどの暗号化機能やアプリケーションのパスワードとして使用するためのものです。
使用される手順は、パスワード->パスワードのハッシュ->アプリケーションです。
編集2:たとえば、登録中に電子メールアプリケーションがパスワードを要求した場合、目的のパスワードは、提供される前にローカルでハッシュされます。
いいえ、1回、2回、または10回ハッシュしてエントロピーを増やしません。エントロピーは、出力ではなく入力から見えるため、考慮してください。結果のエントロピーはカウントされないため、確定的プロセスを使用してエントロピーを追加することはできません。
次のようなコードがある場合でも、
$password = "123456";
$result = md5($password) . sha1($password) . hash('gost', $password);
echo $result; // e10adc3949ba59abbe56e057f20f
// 8941b84cdecc9c273927ff6d9cca1ae75945990a2cb1f
// 81e5daab52a987f6d788c372
そして、あなたは恐ろしい136バイトの文字列になり、パスワードは123456
のままであり、ハッシュされたパスワードを総当たり攻撃する攻撃者は、123456
が最上位であるため、平均して1回だけ試行する必要があります。ほとんどすべてのリストで最悪のパスワード。
ランダムなパスワードがmd5でハッシュされている場合、出力は128ビットのエントロピーを提供しますか?
いいえ、MD5は確定的であるため、攻撃者が文字列がMD5ハッシュであることを知っている場合、そのエントロピーは指定したランダムパスワードのエントロピーです。
パスワードをより安全にするには、適切なキーの導出を使用して( PBKDF2 が適切です)、ユーザーに長いパスワードを要求し、ユーザーが基本的なパスワードルールに従っているかどうかを確認します(文字が繰り返されていない)行、適切な長さ、数字と文字の混在、大文字と小文字の混在など)。
キー導出関数はエントロピーを増加させませんが、それは物事をより安全にします。 KDFには次の機能があります。
1000000000000000
をキーとして使用すると、暗号化アルゴリズムにセキュリティの問題が発生する可能性があります。 KDFはパスワードをランダムに見えるキーにスクランブルします。TL; DR
パスワードを一部のサーバーに送信する前に不正なパスワードをハッシュすると、単純なパスワードマネージャーよりも時間がかかり、不快で安全ではなくなります。
質問は、ハッシュアルゴリズムを非常に単純なパスワードマネージャーとして誤用することを目的としているようです。
実際のパスワードマネージャを使用してください。
私はあなたの例を使って、なぜそれが悪い考えになるのかを示します:
これで、攻撃者は何らかの方法でパスワードがクリアテキストのデータベースを取得します(以前は頻繁に発生していました)。そして、なぜ彼がプレーンテキストを知っているハッシュを誤ってそこに検索するのでしょうか(それほど「エントロピーが豊富な」パスワードはその1つです)。これで彼は、ユーザー名/メールアドレスを持つユーザーが「1111111111111」を使用し、次にパスワードとしてMD5を使用することを知っています。次に、あなたが持っている利点は何ですか?誰かがもう一歩踏み出す必要がありますが、セキュリティに関しては、実際の違いはありません。
ここで、現実の世界で何が起こったかの違い:
あなたのやり方で:
ClearText-MD5-> HashedClearText-サーバーに送信(HTTP(S))-> | |-MD5/SHA */...-> HashedHashedClearText
通常の方法:
ClearText-サーバーに送信(HTTP(S))-> | | -MD5/SHA */...-> HashedClearText