オープンソースCMSでのパスワードのハッシュ化方法を調べてみた

ちょっと気になったので調べてみた。

調査結果

プロジェクト 手法 salt ファイル 関数、クラス、メソッド
WordPress 2.7.1 blowfish、拡張DES、md5*1 乱数 wp-includes/class-phpass.php PasswordHash*2
MovableType 4.25 crypt*3 乱数 lib/MT/Author.pm set_password
Geeklog 1.4 md5 なし system/lib-security.php SEC_encryptPassword
concrete 5.3.1 md5 固定乱数*4 concrete/models/user.php User->encryptPassword
habari 0.6 sha1, sha, sha512, md5 なし system/classes/utils.php Utils::crypt

先行研究

そういう観点から、メジャーなPHPオープンソースのパスワードハッシュ化の状況を調査してまとめてみた。

[PHP]オープンソースのパスワードハッシュ化状況調査 | ブログが続かないわけ
まとめ

[調査結果] 2007/11/06

プロジェクト 手法 salt ファイル
osCommerce 2.2 MS1 日本語版 MD5 変動乱数(2桁) catalog/includes/functions/password_funcs.php
ECCUBE 1.3.4 SHA1 固定 (31eafcbd7a81d7b401a7fdc12bba047c02d1fae6) data/conf/core.php
OpenPNE 2.8.5 MD5 なし webapp/lib/db/member.php
XOOPS 2.0.17.1 MD5 なし htdocs/kernel/member.php
NetCommons1.1.2(xoopsベース) MD5 なし html/kernel/member.php

*1:phpassと言うライブラリを2.5から使用しているらしい。それまではsaltなしのmd5だったとのこと。#2394 (Passwords are stored in an insecure un-salted form) – WordPress Trac) ちなみにphpassのblowfish、拡張DESは使ってはいけないcryptで生成している。こういう風に標準DES以外のために使うのであればcryptを使うのは悪いことではない。特にPHP 5.3.0以降では標準DES、拡張DES、MD5、blowfishのすべてがPHPで独自実装されるようになり環境依存もなくなっている。

*2:wp-includes/pluggable.phpのwp_check_password、wp_hash_passwordから呼び出される

*3:perlのcrypt. "# FIXME: use something besides 'crypt'"というコメント付き

*4:初期設定時にランダム文字列生成