mkpasswdのSHA512ソルトハッシュがオンラインバージョンと一致しません。

mkpasswdのSHA512ソルトハッシュがオンラインバージョンと一致しません。

Linux(Ubuntu)の/ etc / shadowに格納されているハッシュ(ASCII)コードについて混乱しています。

ケースを想定し、パスワードを次のように設定します。「試験」、塩は「Zem197T4」

次のコマンドを実行して、

$ mkpasswd -m SHA-512 test Zem197T4

長いASCII文字列を生成します(実際にはLinuxがそれを/ etc / shadowに保存する方法です)。

$6$Zem197T4$oCUr0iMuvRJnMqk3FFi72KWuLAcKU.ydjfMvuXAHgpzNtijJFrGv80tifR1ySJWsb4sdPJqxzCLwUFkX6FKVZ0

オンラインSHA-512ジェネレータを使用する場合(例:http://www.insidepro.com/hashes.php?lang=eng)、生成される内容は以下のように16進コードです。

オプション1)パスワード+ソルト

8d4b73598280019ef818e44eb4493c661b871bf758663d52907c762f649fe3355f698ccabb3b0c59e44f1f6db06ef4690c16a2682382617c6121925082613fe2

オプション2)塩+パスワード

b0197333c018b3b26856473296fcb8637c4f58ab7f4ee2d6868919162fa6a61c8ba93824019aa158e62ccf611c829026b168fc4bf90b2e6b63c0f617198006c2

私はこの16進コードがmkpasswdによって生成されたASCIIコードと「同じ」でなければならないと思います。しかし、彼らはどのように関連していますか?

誰かが私に気付くことを願っています。

ベストアンサー1

Ubuntu / Debianではmkpasswdパッケージの一部です。誰ですか?そしてここで実装されているのは、mkpasswd.c実際にはcrypt()glibcで宣言された関数の複雑なラッパーですunistd.h。 crypt() は、パスワードとソルトラという 2 つのパラメータを使用します。この例では、パスワードは「test」で、ソルトプレフィックスはSHA-512ハッシュ「$6$」です(参照:SHA暗号化) したがって、 "$6$Zem197T4" が crypt() に渡されます。

-Rおそらくオプションによってmkpasswdラウンドの数が決まるという事実に気づくでしょう。ドキュメントでは、デフォルトは5000ラウンドであることがわかります。これは、なぜ結果がソルトとパスワードの単純な接続に等しくなく、一度だけハッシュされないのかについての最初のヒントです。実際に合格すると、-R 5000同じ結果が得られます。この場合、 "$6$rounds=5000$Zem197T4" が crypt() に渡され、glibc(Debian/Ubuntu の場合 libc) 実装はここからメソッドとラウンド番号を抽出します。

crypt()内で何が起こるのかは、単一のハッシュを計算するよりも複雑で、結果はBase64でエンコードされます。したがって、表示される結果には、SHA-512ハッシュの一般的な16進文字列の[0-9a-f]だけでなく、最後の "$"の後のすべての種類の文字も含まれます。アルゴリズムはすでに述べたセクションで詳しく説明されています。SHA暗号化文書。

おすすめ記事