web-dev-qa-db-ja.com

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

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

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

9
C. Ross

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

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

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

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

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

crypt()エンコーディングがこの文字セットを使用している間:./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

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

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

「MD5に関連するMD5-cryptでのパスワードハッシュ」「SHA512-cryptとMD5-cryptの実装」 " 、より完全な説明。

5
Marco

$の間のハッシュの最初の部分は、使用されているアルゴリズムを示しています。

さまざまな値の意味の一覧については、 http://en.wikipedia.org/wiki/Crypt_%28Unix%29 を確認してください。

4
3dinfluence

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

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

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

ウィキペディア( Crypt_(Unix) )のページを参照するか、「crypt unix」または「crypt linux」についてはgoogleから詳細を取得できます。

2