web-dev-qa-db-ja.com

md5passとmd5sumの違い

この質問は正気ではないかもしれませんが、ハッシュアルゴリズムの定義により、ハッシュアルゴリズムは可変長入力を受け入れて暗号化する何らかの種類の関数であり、出力は常に固定長であり、同じ入力で同じ出力を持ちますか?次の結果を考慮してください。

root@kali:~# echo "ENDER" | md5pass
$1$rdMOD9CB$LJtbTfwAM3aLuI8L2xOb5.
root@kali:~# echo "ENDER" | md5pass
$1$yINoNkna$Z26YKnZj2foWdTxSGfHOv0
root@kali:~#
root@kali:~#
root@kali:~# echo "ENDER" |md5sum
0ffe655d9777b70867a75c7562657317  -
root@kali:~# echo "ENDER" |md5sum
0ffe655d9777b70867a75c7562657317  -

暗号化md5passハッシュプログラムは同じ入力ですべての出力を変更するので、Ubuntuログインなどのログインシステムは、どの入力で正しいパスワードを検出するのでしょうか?

最後に、このようなハッシュ関数について、説明はできますが、簡単に説明してもらえますか?または、この2つを区別するのに役立つその他の何かはありますか?ほんとありがと。

1
user3679015

最初のMD5は、ファイル/文字列/入力データ全体を読み取り、デフォルトで128ビット長の16進形式のハッシュを生成するハッシュ関数です。ファイルまたは指定された文字列が同じ場合、そのハッシュは常に同じです。

ユーティリティでmd5passあなたはまったく同じことをしますが、ハッシュは「塩漬け」されます。暗号化では、「塩」は、エントロピーを高めるためにパスワードまたはパスフレーズをハッシュする一方向関数への追加入力として使用されるランダムデータです。それが理由です md5passは常に異なる値を出力します。

なぜ塩漬け?

問題は、ユーザーが同じパスワードを持っているとき、同じハッシュを持っていることです。ハッシュがランダムにソルトされる場合、すべてのパスワードに異なるハッシュ値が設定されます。パスワードを検証するために必要なため、ソルトは別のテーブルに個別に保存する必要があります。 md5pass saltを定義できます(2番目の引数として)。塩が定義されていない場合、システムはランダムな塩を生成します。

もう1つの利点は、MD5またはSHA Rainbow tables の場合、ソルトなしではハッシュ値を1回だけ計算する必要があるため、ソルトなしの場合の効果が低いことです。すべてのパスワードに対して。

4
chaos