差分

移動先: 案内検索

ユーザ権限とアクセス制御

813 バイト追加, 2013年6月1日 (土) 11:02
/* パスワードの保管 */
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードの値だけ持っていても、したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、
そこから元のパスワードを逆算することはできません。
いろいろな入力値を一方向性ハッシュ関数に与えて、総当たりで見つける方式しか使えません。その出力結果と手元にあるパスワードファイルの内容とを比較する方法、ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。つまり、総当たり攻撃でしか探すことはできません。パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。そのため、同じパスワード入力が同じハッシュ値にならないようにSalt(塩)と呼ぶランダムな初期値を加えます。
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。
 
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MACを一方向性ハッシュ関数として利用してます。
<ref>このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと</ref>
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。
<ref>これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。</ref>
実際のパスワードの生成は入力された文字列にシステムが用意したSalt(塩)と呼ぶ初期値を加えたものを一方向性ハッシュ関数に与え、
何度か繰り返し計算をしてビットのパターンを何度も撹拌します。 
一方向性ハッシュ関数には、暗号化するためのDESを一方向性ハッシュ関数として代用するもの(UNIX オリジナルの方法)、
一方向性ハッシュ関数MD5やSHA1を使うものがあります。
DESを使う場合は25回繰り返して計算します。
一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。
<ref>暗号学的には繰り返す必要はありません。</ref>
現在のGNU/Linuxで標準的に使われるパスワード認証のための環境Linux-PAMではMD5/SHA1を使っての撹拌が行われています。
いずれも暗号学的には十分な強度が得られていると言えます。
+----------+
V |(回数分)
パスワード+Salt---->[ハッシュ関数]-->+----------> 暗号化されたパスワード  ;補足: 2010年12月現在最新であるglibc2.9 をチェックすると、一方向性ハッシュ関数にMD5、SHA256、SHA512が使えるようになっています。  しかし、ある文字列を暗号化して、その出力をパスワードファイルの中にある変換後のパスワードと比較することはできます。かくして、大量の文字列を処理し、パスワードと同じ文字列を探すことが可能になります。
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードです。そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。
匿名利用者