9

MD5(ソルトなし)でユーザーパスワードをハッシュしているシステムで作業しています。SHA-512 とソルトを使用して、パスワードをより安全に保存したいと考えています。

これは将来のパスワードを実装するのに十分簡単ですが、できればすべてのユーザーにパスワードの変更を強制することなく、既存の MD5 ハッシュ化されたパスワードも改造したいと考えています。私の考えは、SHA-512 と適切なソルトを使用して、既存の MD5 ハッシュをハッシュすることです。次に、プレーン テキストからハッシュされたパスワードと、MD5 ハッシュからハッシュされたパスワードを示すフラグをデータベースに設定できます。または、ユーザーを認証するときに両方を試すこともできます。または、新しいパスワードを MD5 でハッシュしてから SHA-512/salt でハッシュするだけでも、古いパスワードと同じように扱うことができます。

プログラム的には、これが問題になるとは思いませんが、SHA-512/salt ハッシュをすでに MD5 ハッシュされたパスワード。私の最初の本能は、どちらかといえばもっと強く、非常に軽いキーのストレッチだろうということです。

私の第 2 の本能は、何を言っているのかよくわからないので、アドバイスをもらった方がいいということです。何かご意見は?

4

4 に答える 4

5

暗号化プリミティブを使用した関数合成は危険であり、回避できる場合は行うべきではありません。あなたのタイプの問題の一般的な解決策は、可能な場合は新しいハッシュを使用し、古いパスワードを透過的にアップグレードすることで、移行期間中両方のハッシュを保持することです (パスワードをチェックして一致する場合は、新しいアルゴリズムで再ハッシュして保存します)。

プレーンテキストのパスワードを表示できないチャレンジ/レスポンス ベースのスキームがある場合、これは機能しませんが、変更されないソルトが保存されているように見えるため、アプリケーションがハッシュを行うと仮定します。

于 2012-04-05T12:26:04.087 に答える
4

最初に MD5 でハッシュすると、MD5 (128 ビット) の広がりしかありません。SHA512 のスペースの大部分はパスワードでカバーされません。したがって、SHA512 を利用することはありませんが、MD5 よりも悪くはありません。

誰かがSHA512ハッシュを取得し、ソルトを知らない場合(これは何らかの方法で強制する必要があります)、ハッシュを調べてパスワードを取得できないという利点があります-あなたが持っているMD5データベースで可能になる何か今。

そうです、既存の MD5 パスワードを再ハッシュするだけです。しかし、最初の段落で説明したように、MD5 をすべての新しいパスワードにも適用してから、それらを SH512 としてハッシュすることはお勧めできません。簡単な実装は、データベース内のハッシュの隣にブール値の「salted」フィールドを作成することです (ただし、そこにソルトを配置しないでください)。

于 2012-04-05T12:22:03.443 に答える
1

第二の本能を信頼してください。独自のライブラリを作成するのではなく、パスワードのハッシュ専用に作成された既存のライブラリを使用してください。

おそらく、新しいパスワードを MD5 でハッシュしてから、MD5 をパスワード ハッシュ ライブラリでハッシュします。そうすれば、古いパスワードとの下位互換性を維持できます。

つまり password_hash(すべての古い md5 のパスワード) と password_hash( md5(新しいパスワード) )

(警告: 私は暗号化の専門家ではありません)

http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

于 2012-04-05T12:11:55.167 に答える
0

ほとんどの銀行や高セキュリティの人々がどのようにパスワードを変更するかを見ると. それらのほとんどは基本的に、古い暗号化方式を使用している人に新しいパスワードを作成するように依頼します。既存のすべての古い MD5 パスワード ユーザーにフラグを立て、新しいパスワードを作成し、ゆっくりと新しいシステムに移行する必要があることを通知する最初の解決策だと思います。そうすれば、何か問題が発生した場合にシステムのトラブルシューティングを行うときに、これが新しいユーザーなのか古いユーザーなのかを尋ねる必要がなくなります。ダブルハッシングですか、それともシングルですか?MD5('abc') => 123, SHA('NO') => 123 の場合、誰かが間違ったパスワードを入力した可能性があるため、可能な答えとして 2 つのハッシュを比較しないでください。

于 2012-04-05T12:26:30.693 に答える