|
次のページ
前のページ
目次へ
2. shadow パスワードを使うべき理由現在はほとんどの Linux のパッケージでは Shadow Suite は標準で はインストールされません。Slackware 2.3, Slackware 3.0 や他のポピュラー なパッケージでそうなっています。この理由の一つはオリジナルの Shadow Suite の著作権表示は、無料配布でない場合について不明確 だからです。Linux は CD-ROM のような配布に便利なメディアへパッケージ化 し、これに対する報酬を受け取ることが行いやすい GNU Copyright (Copyleft とも言われますが)を採用しています。 現在Shadow Suiteをメンテナンスしている, Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> 氏は元の作者から、再配布のできる BSD スタイルの著作権のもとにソースコー ドを受け取っています。現在は著作権の問題は解決しているので、将来は標準 で Linux のパッケージに Shadow Suite が含まれることになるでしょ う。それまでは、ユーザが自分自身でインストールしなければなりません。 パッケージを CD-ROM からインストールする場合には、パッケージ自体は Shadow Suite をインストールしなくても、Shadow Suite のインストー ルに必要なファイルは CD-ROM に含まれていることがあります。 しかし、バージョン3.3.1, 3.3.1-2の Shadow Suite と shadow-mk では login プログラムとroot に suid されたプログラムでセキュリティ 上の問題を起こします。ですから、これらを使ってはいけません。 必要なファイルは anonymous FTP や WWW を利用して入手することができます。 Shadow Suite がインストールされていない Linux システムではパ
スワードを含めたユーザ情報は ここでパスワードをエンコードするために用いられるアルゴリズムは、技術的 には単方向のハッシュ関数と言われるものです。これは、ある方向 には計算しやすいけれど、その逆方向の計算は非常に難しいというアルゴリズ ムです。実際のアルゴリズムについてのより詳しい説明は 2.4節か crypt(3) のマニュアルを参照して下さい。 ユーザがあるパスワードを決めた場合、このパスワードはランダムに決められ た salt と呼ばれる値を用いてエンコードされます。こうすること で一つの文字列がエンコードされた結果として取りうる結果は 4096 通りにな ります。salt の値はエンコードされたパスワードと一緒に記録され ます。 ユーザがログイン時にパスワードを入力すると、まず salt がエン コードされているパスワードから取り出されます。そして、入力されたパスワー ドを salt を用いてエンコードしてその結果をエンコー ドされた文字列と比較します。これが一致した場合に正しいユーザとし て認証します。 ランダムにエンコードされたパスワードを入手し、元のパスワード を復元することは計算の点から困難です(不可能ではない)。しかし、複数以上 の人が使うシステムでは少なからずのパスワードはありふれた単語(あるいは ありふれた単語を少し変えただけのもの)になっています。 クラッカーはこのような事情をよく知っているので 4096 個全ての salt を用い
て辞書の単語とよく使われそうなパスワードをあらかじめエンコードしておき
ます。そして、 ある 8 文字からなるパスワードは 、13 文字から成る 4096 通りの文字列のど
れかにエンコードされます。したがって、基本語や固有名詞とそれに簡単な変
化をつけたものを集めて作った400,000 語程度の辞書は 4GB のハードディス
クに十分収まるくらいの大きさです。クラッカーはこれらをソートしておき、
また、クラッカーが最初にあなたの 大量のディスクがなくても crack(1) のようなユーティリティを用いれば、あ る程度以上の数のユーザがいるシステムの少なくとも一つはパスワードを破る ことができます。(ユーザは自分で各自のパスワードを決めるものとします。)
Shadow Suite はパスワードを別の場所に移すことでこの問題を解決
します(通常は パスワードを 加えて、Shadow Suite は以下のような特長を持っています:
Shadow Suit をインストールすることでシステムのセキュリティを 強化することができますが、Linux システムのセキュリティをより強化するた めには、他にもやるべきことは数多くあります。セキュリティ強化の方法とセ キュリティに関係する話題について解説する Linux Security HOWTO シリーズ がそのうちできることでしょう。 既知のセキュリティホールについての警告など、 Linux のセキュリティにつ いての最新の情報を得るためには Linux Security ホームページ を参照して下さい。 2.1 shadow パスワードを使わないほうが良い場合Shadow Suiteをインストールすることがかならずしも良いことでは ない環境やシステム構成もあります。
2.2 /etc/passwd ファイルのフォーマットshadow 化されていない
ここで、
例えば次のようになります:
ここで、第2フィールドの Np は salt で、ge08pfz4wuk
はエンコードされたパスワードです。同じパスワードでも、salt/パ
スワードの組み合わせは kbeMVnZM0oL7I のようになる場合もありま
す。ある一つのパスワードに関してエンコードされ得る可能性は 4096通りで
す。(この例で用いた 'password' というパスワードは破られやすい点におい
て非常に悪いパスワードです。)
Shadow suite がインストールされると、
この場合の2番目のフィールドの 'x' は単に場所を埋めているだけ
です。エンコードされたパスワードは含まれなくなりますが、
/etc/passwd ファイルのフォーマット自体は変わりません。従って、
/etc/passwd ファイルを読むけれどパスワード認証は行わないプロ
グラムは以前の通りに動作します。
パスワードは shadow ファイル(通常 2.3 shadow ファイルのフォーマット
内容は以下のような意味を持ちます:
さきほどと同じ例では
2.4 crypt(3) の概要crypt(3) のオンラインマニュアルより: "cryptはパスワードの暗号化関数である。これは Data Encryption Standard (DES) のアルゴリズムに、特にキー検索のハード ウェア実装をしにくくすることを特に意図した変化をつけたものに基づいてい る。 キーはユーザの入力したパスワードである。 [エンコードされた文字列はすべ てNULLである。] salt は [a-zA-Z0-9./] の中から2文字を選んだ文字列である。この 文字列はアルゴリズムの中で4096通りの異なる結果から一つを適当に選び出す ために用いられる。 キーの各文字の下位7ビットを取り出すことで 56ビットのキーが得られる。こ の56ビットのキーは定数文字列(通常は全て0の文字列を含む)を繰り返し暗号 化するために用いられる。戻し値は暗号化されたパスワードへのポインタであ り、このパスワードは13文字の ASCII 文字である(最初の2文字はsaltそのも のである)。戻し値のポインタが指す領域は呼び出しごとに上書きされる静的 なデータである。
警告:キー空間は 2の56乗(=7.2e16)個の値を取ることができる。この
キー空間は大量の並列計算機を用いれば全探索することが可能であ
る。また、 DES アルゴリズム自体には癖があるので、 ほとんどの Shadow Suites パッケージにはパスワードを16文字に倍
長化するコードが含まれています。しかし
もし、読者が暗号化についての良い本を探しているなら、筆者は以下の本を推 薦しておきます: "Applied Cryptography: Protocols, Algorithms, and Source Code in C" by Bruce Schneier <schneier@chinet.com> ISBN: 0-471-59756-2 次のページ 前のページ 目次へ |
[ |