14.4. DES, MD5 と Crypt

改訂: Bill Swingle.

訳: 花井 浩之 , 12 September 1996.

訳改訂: 日野 浩志 , 12 March 2001.

Unix システムにおけるすべてのユーザは、そのアカウントに対応し た一つのパスワードを持っています。それらのパスワードはユーザ本人 と本当のオペレーティングシステムのみが知っているべきであるという ことは明らかでしょう。それらのパスワードを秘密に保っておくために、 パスワードは“一方向ハッシュ”として知られる方式で暗 号化されます。一方向ハッシュとは、簡単に暗号化はできるが解読は難 しいという方法です。言葉を換えると、先ほど明らかであると書いたの は実は正しくないのです: オペレーティングシステム自身は本当はパスワードを知らないのです。その代わりに 暗号化された形でのみパスワードを知っていま す。“素のテキスト”としてパスワードを得る唯一の方法は、 可能な限りのパスワード空間を検索するという力任せの方法です。

不幸なことに、Unix が生まれようとしているときにパスワードを 安全な形で暗号化できる方式は DES (Data Encryption Standard) に基づいたものだけでした。このことは米国に住んでいるユーザにとって は大して問題ではありませんでしたが、DES のソースコードを米国外に 輸出することはできないという問題がありました。そのために、 FreeBSD は、米国の法律を守ることと、未だに DES を使っていた他の Unix 一族との互換性を保つこととを両立する方法を探し出す必要がありました。

その解決方法は、米国のユーザは DES のライブラリをインストー ルして DES を使用できるが、米国外のユーザは国外に輸出可能な他の ひとつの暗号化方式を使用することができる、というように暗号化ライ ブラリを分割することでした。これが FreeBSD がデフォルトの暗号化 方式として MD5 を使うようになったいきさつです。MD5 は DES よりも より安全であると考えられているため、DES をインストールする一番の 理由は互換性を保つためといえます。

14.4.1. 暗号化機構を理解する

FreeBSD がどの暗号化方式を使うようにセットアップされている かを判断するのは簡単です。 /etc/master.passwd ファイルの中の暗号化さ れたパスワードを調べてみるのが一つの方法です。MD5 ハッシュで暗 号化されたパスワードは、DES ハッシュで暗号化されたパスワードよ りも長く、$1$ という文字で始まるという特徴を持っています。 DES のパスワードはこ れといって識別可能な特徴は持っていませんが、MD5 のパスワードよ りは短く、そして $ という文字を含ま ない 64 文字のアルファベットを使って表現されているので、比較的 短い文字列でドル記号で始まっていないものはおそらく DES のパス ワードでしょう。

同様の方法で、ライブラリはパスワードを識別します。結果とし て、DES のライブラリは MD5 パスワードを識別でき、そして MD5 を 使って MD5 で暗号化されたパスワードをチェックし、その他のパス ワードには DES を使ってチェックします。DES のライブラリは MD5 も含んでいるのでこのようなことが可能なのです。残念なことに、反 対は真ではありません。MD5 のライブラリは DES で暗号化されたパ スワードを認証することができません。

あなたのシステムでプログラムがどちらのライブラリを使ってい るかを調べるのは非常に簡単です。crypt を使うプログラムは libcrypt をリンクしています。そしてそれぞれのライブラリに対す る適切な実装へのシンボリックリンクとなってい ます。たとえば、DES 版を使っているようなシステムにおいては次のようになっています:

% ls -l /usr/lib/libcrypt*
lrwxr-xr-x  1 root  wheel  13 Mar 19 06:56 libcrypt.a -> libdescrypt.a
lrwxr-xr-x  1 root  wheel  18 Mar 19 06:56 libcrypt.so.2.0 -> libdescrypt.so.2.0
lrwxr-xr-x  1 root  wheel  15 Mar 19 06:56 libcrypt_p.a -> libdescrypt_p.a

MD5 に基づいたライブラリを使っているシステムにおいては、同 じようなリンクが 見られるでしょうが、そのターゲットは libdescrypt ではなく libscrypt になっているでしょう。

もし DES 機能を持った crypt ライブラリ libdescrypt をインストールしたのなら (つ まり "crypt" ディストリビューションをインストールした場合)、新 規パスワードがどちらのパスワード形式になるかは、 /etc/login.conf の中の “passwd_format” ログインケーパビリティによって制 御されます。その値としては、“des” または “md5” を設定することができます。ログインケーパビ リティに関するより詳細な情報は、login.conf(5) マニュアルページ をご覧ください。