パスワードファイル
パスワードファイル /etc/passwd
ユーザIDとアカウント名を対応させているのがパスワードファイル /etc/passwdです。パスワードファイルのフォーマットは次の通りです。
- パスワードエントリのフォーマットのフィールドは":"で区切られる
- アカウント名 : ログイン時に使用するアカウント名
- パスワード : パスワードをハッシュ値に置き換えたもの
- ユーザID : ユーザを認識するための数値
- グループID : グループを認識するための数値
- コメントフィールド(GECOSフィールド) : 名前等の情報を記述するフィールド
- ホームディレクトリ : ホームディレクトリ
- シェルパス : 利用するシェルのパス、もしくはシェルに相当するコマンド
/etc/passwd の エントリー例 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。
パスワードのフィールドは"x"が入っています。
これは利用しているシステムがシャドーパスワードを導入しているからです。
元々のパスワードファイルには2つの情報が入っています。
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。
その知られてはいけない情報とはパスワードの情報です。
パスワードの保管
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。 したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、 そこから元のパスワードを逆算することはできません。 総当たりで見つける方式しか使えません。 ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。 パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。 そのため、同じパスワード入力が同じハッシュ値にならないようにSalt(塩)と呼ぶランダムな初期値を加えます。
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MACを一方向性ハッシュ関数として利用してます。 [1] glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。 オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。 [2]
撹拌のモデル (Cipher-Block-Chain方式) +----------+ V |(回数分) パスワード+Salt---->[ハッシュ関数]-->+----------> 暗号化されたパスワード
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。 攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。
$ 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
脚注
- ↑ このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps を参照のこと。
- ↑ これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。
目次へ