/etc/shadowファイルの二番目のセクションについて、同じパスワードを指定したにもかかわらず、別の値が記憶されるのはなぜですか?


例:hina1981とhina1982に「pass」というパスワードを設定したときの/etc/shadowファイル
hina1981:$1$lc6eEU3Z$7tlNIqq7xN7yMmzof8eD3.:13420:0:99999:7:::
hina1982:$1$alflJd8x$YEM3dR6tPQL1SRVtjALez1:13420:0:99999:7:::

続きはコメント欄を見てください。

回答の条件
  • 1人3回まで
  • 登録:2006/09/29 10:31:14
  • 終了:2006/09/29 15:46:56

ベストアンサー

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/09/29 10:45:12

ポイント30pt

salt(塩…味付けを変える調味料みたいなイメージだからですかね)という乱数と込みでハッシュ計算されるからです。

http://piza.2ch.net/log/unix/kako/957/957802927.html

2ちゃんの過去ログですがここに説明されています。

http://www.icepp.s.u-tokyo.ac.jp/~sensha/software/Linux/JF/Shado...

ユーザがあるパスワードを決めた場合、このパスワードはランダムに決められた salt と呼ばれる値を用いてエンコードされます。こうすることで一つの文字列がエンコードされた結果として取りうる結果は 4096 通りになります。salt の値はエンコードされたパスワードと一緒に記録されます。

id:hina1981

ありがとうございます。

ということは、同じ名前のユーザアカウントを4097個作ったら、最低一つはハッシュ関数の設定値が同じになるということですね。

2006/09/29 15:41:30

その他の回答(2件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852006/09/29 10:45:12ここでベストアンサー

ポイント30pt

salt(塩…味付けを変える調味料みたいなイメージだからですかね)という乱数と込みでハッシュ計算されるからです。

http://piza.2ch.net/log/unix/kako/957/957802927.html

2ちゃんの過去ログですがここに説明されています。

http://www.icepp.s.u-tokyo.ac.jp/~sensha/software/Linux/JF/Shado...

ユーザがあるパスワードを決めた場合、このパスワードはランダムに決められた salt と呼ばれる値を用いてエンコードされます。こうすることで一つの文字列がエンコードされた結果として取りうる結果は 4096 通りになります。salt の値はエンコードされたパスワードと一緒に記録されます。

id:hina1981

ありがとうございます。

ということは、同じ名前のユーザアカウントを4097個作ったら、最低一つはハッシュ関数の設定値が同じになるということですね。

2006/09/29 15:41:30
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/09/29 11:12:48

ポイント30pt

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html

こちらの 説明およびGNU拡張の欄に詳細があります。

先頭の数文字が再ハッシュ化の為のキーになっているわけですね。

id:hina1981

ありがとうございます。

Cのヘッダファイルとして用意されてるのですね。

時間があったら、プログラムを作ってみたいと思います。

2006/09/29 15:46:20
id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/09/29 12:01:31

ポイント30pt

shadow - 暗号化されたパスワードファイル用ルーチン

http://www.linux.or.jp/JM/html/shadow/man3/shadow.3.html

>MD5では、一つの文字列から複数のハッシュ値を生成することが

>可能なのでしょうか?

MD5は文字列をハッシュするだけ約束なので

違う文字が生成できない。 

違う文字を生成するために、shadowの一部に重複を

防止するためにsaltと呼ばれる部分をランダムな

値に書き換えを行うので、同じになる確率はまずない。

 http://oku.edu.mie-u.ac.jp/~okumura/c/auth.html

id:hina1981

ありがとうございます。

ログイン時に入力したパスワードがpassであったとしたら、

aapass

abpass

acpass

という文字列をひたすら(4096回)MD5で変換し、shadowファイルの値を比べているのですね。

saltがaaでshadowファイルに登録された人と、ZZで登録された人だと、後者の方が(ほんの少しでしょうが)ログインが遅くなりそうなカンジですが……。

2006/09/29 15:45:25
  • id:hina1981
    /etc/shadowファイルの二番目のセクションについて、同じパスワードを指定したにもかかわらず、別の値が記憶されるのはなぜですか?

    例:hina1981とhina1982に「pass」というパスワードを設定したときの/etc/shadowファイル
    hina1981:$1$lc6eEU3Z$7tlNIqq7xN7yMmzof8eD3.:13420:0:99999:7:::
    hina1982:$1$alflJd8x$YEM3dR6tPQL1SRVtjALez1:13420:0:99999:7:::

    $1$で始まる場合には、MD5で暗号化されるとのことだったので、MD5について簡単に調べてみたのですが、一つの文字列から複数のハッシュ値を作成できるとの文はありませんでした。
    http://ja.wikipedia.org/wiki/MD5
    http://e-words.jp/w/MD5.html
    http://e-words.jp/w/E3838FE38383E382B7E383A5E996A2E695B0.html

    ユーザ名などを乱数の種のような形で利用し変換(?)しているのかと思い、下記のように書き換えてみても、今までと同様な動作をしました。
    (hina1981の二番目のセクションの値をhina1982の二番目のセクションにコピー)
    hina1981:$1$lc6eEU3Z$7tlNIqq7xN7yMmzof8eD3.:13420:0:99999:7:::
    hina1982:$1$lc6eEU3Z$7tlNIqq7xN7yMmzof8eD3.:13420:0:99999:7:::

    確かに、他人と同じパスワードを設定して同じ値が記録されるようでは、セキュリティ上の問題が発生すると思うのですが、どのような仕組みになっているのでしょうか?

    MD5では、一つの文字列から複数のハッシュ値を生成することが可能なのでしょうか?
  • id:kurukuru-neko


    >字列をひたすら(4096回)MD5で変換し、shadowファイルの値を>比べているのですね。

    DESのSALTが2文字 , MD5はSLATは8文字です。
    以下のサイトの一番したでDES/MD5のハッシュ化
    サンプルがあります。
    http://www.rescue.ne.jp/~rescue/cgi/md5/

  • id:znz
    ログイン時にsaltを総当たりで試すわけではなく、「$1$lc6eEU3Z$7tlNIqq7xN7yMmzof8eD3.」なら「lc6eEU3Z」の部分がsaltになっていて、生パスワードとsaltを元にMD5を使って求めた値(単純につなげてMD5をとっているわけではなさそう)が「7tlNIqq7xN7yMmzof8eD3.」になるかどうかで認証しています。

この質問への反応(ブックマークコメント)

トラックバック

  • /etc/shadowについて調べてみた。 chroot環境のscp、sftpについて調べてたんだけど、少し脱線して調べたので書いておく。 CentOSでユーザーパスワードが未設定の場合、/etc/shadowのパスワード部分
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません