Linuxがパスワードをハッシュする方法を理解しようとしているので、始めに、これをopenssl passwd -1 -salt xyz test
としましょう。これは$1$xyz$jAlmRpcFe.aiPOIXET9GG/
を出力します。今私が理解していること:
$1$
はmd5
アルゴリズムですxyz$
は、$
記号が付加されたソルトですjAlmRpcFe.aiPOIXET9GG/
は、md5
などでハッシュ化された実際のパスワードです。最後の部分は私が理解していないものです、このハッシュは他に何を使って計算されますか?
Poul-Henning Kampは、MD5メッセージダイジェストアルゴリズムに基づいて、バロック式の(当時は)計算コストの高いアルゴリズムを設計しました。 ...
最初にパスフレーズとソルトがハッシュされ、MD5メッセージダイジェストが生成されます。次に、新しいダイジェストが作成され、パスフレーズ、ソルト、および最初のダイジェストがすべて複雑な形式でハッシュされます。次に、このダイジェストは関数の1,000回の反復を通過し、パスフレーズとソルトを使用して、ラウンド間で変化する方法で再ダイジェストされます。これらのラウンドの最後の出力は、結果のパスフレーズハッシュです。
これは、pw + saltの(単一の)ハッシュを実行しているだけではなく、それほど正確ではないことを示しています。幸い、OpenSSLはオープンソースであるため、 https://github.com/openssl/openssl/blob/master/apps/passwd.c#L322 (または、任意のバージョンの任意のコピーではapps/passwd.c何十年も利用されてきたソースの)は、正確なアルゴリズムを示しています。それは確かにバロックであり、それについて具体的な質問がない限り、私が説明しようとする以上のものです。