おおよそのUNIX-likeシステムでは、パスワードファイルはMD5でハッシュされるのが一般的だ(った)。
しかし、MD5は1996年に脆弱性が見つかって以来、あまり推奨される方式ではなくなっている。
[Wikipedia](http://ja.wikipedia.org/wiki/MD5)で調べてみても「パソコンレベルで、数10分程度で、同一ハッシュ値の非ユニークなデータ列を生成できる実装が広まっている」などと恐ろしい事が書かれている。
つまり暗号化されていてもMD5ハッシュだと総あたりで易々と破られてしまうということになる。
こういった情勢のもと、多くのシステムでは、パスワードファイルのハッシュ方法を変えたり、または自由に変えられるようになっているので、もしお前らがUNIX-likeシステムを管理しているなら、いますぐ確認しろ。
じゃあ何に変えたらいいの→SHA-2かBlowfishおすすめ。
代替のハッシュ方法としては、[Blowfish](http://ja.wikipedia.org/wiki/Blowfish), [SHA-2](http://ja.wikipedia.org/wiki/SHA)などが挙げられ、強度としてはBlowfishの方が高いようだが、そのアルゴリズムがNIST(アメリカ国立標準技術研究所)の承認をまだ受けてない事から、SHA-2を選択するケースが多い。
そのシステムがどのハッシュを採っているかは、ハッシュ文字列先頭から判断できる。
$1$: MD5
$2?$: Blowfish. ?はaかyかx.
$5$: SHA-2(SHA-256)
$6$: SHA-2(SHA-512)
FreeBSD 9.1-RELEASEはsha512(SHA-2)がデフォルト。手元にLinuxがないので確認できないのだが、UbuntuはまだMD5のよう。
しかしFreeBSDはCVSを見ると2012年の7/15に[変わっている](http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/login.conf.diff?r1=1.54;r2=1.54.2.2)。9系列で言えば9.1-RELEASEからデフォルトが変更されているようだ。
なお、9.1-RELEASEだから安心と思ったあなた。もしあなたが9.0以前から使い続けているなら注意が必要だ。これについては後述。
FreeBSDでハッシュ方法を変えるには
FreeBSDでは/etc/login.confで制御する。
以下の行を書き換えればOK。
:passwd_format=sha512:\
md5ならmd5, SHA-2ならsha512, Blowfishならblfである。
書き換えた後、以下のコマンドでlogin.conf.dbを作り直すこと。
パスワードを再設定しないと新ハッシュになりません!
注意。上記設定をしたあと、もう一回パスワード設定しないと反映されません。
なんと不親切な、と思ったけど、よく考えたらそらそうだ。
もし自動的に変更しようとしたら、たとえばmd5でハッシュされた文字列を、いったん元に戻す必要がある。
元に戻させないようにわざわざハッシュしているんだから、自動でできるわけがない。
だから面倒でも、passwordコマンドを叩いて再設定すること。
同じパスワードであっても構わないが、まあ今回の作業の性質を考えると、このタイミングでパスワード変えた方がいいと思う。
9.0以前から使い続けていた人は注意
ということで、もしあなたのFreeBSDが9.1で、デフォルトのハッシュがSHA-2になっていたとしても、9.0以前にパスワード設定してそのままなら、ハッシュはmd5のままである。
実際に俺のマシンは9.0で新規インストールし、ついこの間9.1にアップグレードした。
$ uname -a
FreeBSD sylph 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
$ grep passwd /etc/login.conf|grep -v "^#"
:passwd_format=sha512:\
とまあこの通り、SHA-2になっている。しかし以下のログで示すように、先頭が$1$になっておりMD5ハッシュであることを示している。
cap_mkdbしても同じ。(なおハッシュの核心部分はさすがにマスクしている)
$ sudo grep harukiya /etc/master.passwd
パスワード:
harukiya:$1$xxxxxxxx:1001:1001::0:0::/home/harukiya:/usr/local/bin/bash
$ sudo cap_mkdb /etc/login.conf
$ sudo grep doe /etc/master.passwd
harukiya:$1$xxxxxxx:1001:1001::0:0::/home/harukiya:/usr/local/bin/bash
で、passwdコマンドでパスワードを設定してやると、めでたく先頭が$6$に変化した。
(なおここではマスクしているが、実際にやってみるとハッシュがmd5に比べて長くなっていることが分かる)
$ passwd
Changing local password for harukiya
Old Password:
New Password:
Retype New Password:
$ sudo grep harukiya /etc/master.passwd
harukiya:$6$xxxxxxxxxx:1001:1001::0:0::/home/harukiya:/usr/local/bin/bash
このままでもいいけど、せっかくだからblowfishに変更。/etc/login.confでsha512をblfへ。
めでたくハッシュ先頭が$2a$に。
$ sudo cap_mkdb /etc/login.conf
$ passwd
Changing local password for harukiya
Old Password:
New Password:
Retype New Password:
$ sudo grep harukiya /etc/master.passwd
harukiya:$2a$xxxxxxxxxx:1001:1001::0:0::/home/harukiya:/usr/local/bin/bash
もちろん、このあとrootのパスワードも設定しました。