差分

移動先: 案内検索

パスワードファイル

1,166 バイト追加, 2015年7月27日 (月) 19:26
/* パスワードの生成 */
 
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。
== パスワードファイル /etc/passwd ==
* シェルパス : 利用するシェルのパス、もしくはシェルに相当するコマンド
<pre>
/etc/passwd の エントリー例
hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash
</pre>
パスワードのフィールドは"x"が入っています。
これは利用しているシステムがシャドーパスワードを導入しているからです。
そのため現状のGNU/Linuxディストリビューションでは、一般ユーザが(ハッシュ値となっている)パスワードを直接参照することはありません。
=== パスワードの保管 パスワードの生成 ===
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、
そこから元のパスワードを逆算することはできません。
総当たりで見つける方式しか使えません。パスワードが完全なランダムであった場合<ref>ただし辞書攻撃などが可能な類推可能な文字からなるパスワードであれば、現在ではほぼ一瞬で見つけることが出来ます。</ref>、総当たりで見つける方式しか使えません。
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、LinuxLinuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、[http://www.linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinuxpam.org/ Linux-PAM]と呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。近年ではメジャーなディストリビューションの多くはLinux-PAMを採用しています。
<ref> CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 </ref>
を一方向性ハッシュ関数として利用してます。
<ref>このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ , http://www.cypherpunks.ca/~iang/pubs/crypt3-asia00.pdf を参照のこと。</ref>
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。
[[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]
撹拌のモデル (Cipher-Block-Chain方式) +----------+ V |(回数分) パスワード+Salt---->[ハッシュ関数]-->+----------> 暗号化されたパスワード; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」あるいは「パスワードのMAC値」です。
=== パスワードの保管 ===
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。
<pre class="bash">
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 789 Oct 22 2003 /etc/shadow
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 24616 Nov 3 04:56 /usr/bin/passwd
$ ls -l /usr/bin | grep shadow
-rwxr-sr-x 1 root shadow 32584 Nov 3 04:56 chage
-rwxr-sr-x 1 root shadow 15976 Nov 3 04:56 expiry
-rwxr-sr-x 1 root shadow 6628 Jun 28 05:20 kcheckpass
</pre>
== 脚注 ==