シャドウパスワードファイルでパスワードハッシュはどのようにエンコードされますか?


11

Linuxのパスワードセキュリティについて学習しています(何よりも好奇心が強い)。実際のパスワードはハッシュされ、シャドウパスワードファイルに保存されることを理解しています。私が確信が持てず、簡単なグーグル検索で見つけることができなかったのは、ハッシュ値(およびソルトの値)をエンコードするために使用されるエンコードです。明らかに16進数ではなく、:文字を除いてテキストです。ここの誰かがそのエンコーディングが何であるかを教えてもらえますか?

編集:私はハッシュ(MD5、SHA-X)、ソルト、およびハッシュ指定子を理解しています。私が探しているのは、ハッシュ結果(バイト配列(byte []))をファイルに表示される文字のシーケンス、つまりエンコードに変換する方法です。


あなたの質問はこの質問
Broam 2009年

ソースを使用する:sourceware.org/git/?p
James

回答:


11

MD5 crypt()の場合、saltは[a-zA-Z0-9./]からの最大8文字のランダムな文字列です。

次に、saltとパスワードがハッシュされ、強化関数に渡され、Base64のバリアントを使用してエンコードされます。

  • MD5状態(128ビット)がシャッフルされ、それぞれが3バイトを含む6つのグループに分割されます(最後のグループには2バイトのゼロパディングが含まれます)。
  • 3バイトの各グループは、それぞれ6ビットの4つのブロックに分割されます。
  • 最後に、各6ビットグループが[a-zA-Z0-9./]の範囲の文字にマップされます。

8

パスワードのエンコード方法だけを知りたい場合、crypt()は特殊なBase64タイプのエンコードを使用します。

Base64エンコーディングは次の文字セット使用します:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

ながらのcrypt()エンコードが ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:この文字セットを使用しています

また、Base64とは異なり、「=」パディングはありません。

一方、MD5、SHA-Xなどのcrypt()実装は、ランダムなソルトを生成してハッシュ関数を実行し、以前のエンコーディングを使用してそれをエンコードするだけではありません。

より完全な説明についてMD5に関連するMD5-cryptを使用したパスワードハッシュ」「SHA512-cryptとMD5-cryptの実装」の 2つの素晴らしい記事を読むことをお勧めします



2

使用されているアルゴリズムを探していますか?

伝統的に、Unixと初期のLinuxバリアントは、最大8文字のパスワードに基づいて弱められたDESを使用していました。最近のほとんどのLinuxインストールでは、パスワードにMD5ハッシュを使用しており、一部はSHAをサポートしています。さらに、Blowfishを含む、追加のアルゴリズムに対するより多くのモジュールサポートが表示されています。ほとんどのLinuxで使用されているGNU libcは、DES、MD5、およびSHAをサポートしており、いくつかのオプションがあります。

使用される特定のタイプのハッシュアルゴリズムは、パスワードの先頭に$ DIGIT $として指定されます。たとえば、$ 1 $はMD5です。

ウィキペディア(Crypt_(Unix)のページを参照)またはgoogleから 'crypt unix'または 'crypt linux'の詳細を取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.