concrete5 のパスワード保存方法について

菱川拓郎
菱川拓郎

大規模なパスワードの流出が話題になりました。concrete5 ではパスワードをどのように保存し、どのような対策を行なっているかを改めて整理してみました。

concrete5 では、パスワードをハッシュ化して保存していますか?

はい、ハッシュ化して保存しています。ハッシュ化と言う処理を行うことで、元のパスワードを元に不可逆な文字列を生成し、データベースに保存しています。

concrete5 が採用しているハッシュ化関数はなんですか?

bcryptを使用しています(PHPのデフォルトと同じです)。パスワードのセキュリティにおいては、仮にデータベースに保存されたハッシュが流出し、ハッシュ化に用いているアルゴリズムが分かっていたとしても、元のパスワードが分からないことが理想です。現代ではマシンスペックが向上しており、ハッシュ化されたパスワードであっても、総当たり攻撃を行うことで元のパスワードを探し出すことができてしまいます。bcryptは、ハッシュ化を非常に多い回数(concrete5 の初期設定では、2の12乗)繰り返すことでマシンスペックを意図的に消費し、総当たり攻撃への耐性を高めています。

concrete5 は、電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)にて推奨されているハッシュ関数を使っていますか?

CRYPTREC暗号リストにはSHA-256以上が掲載されていますが、SHA-256でもパスワードのハッシュ化には不適当と言われています。

参考記事:Choosing the right hashing algorithm - it’s all about slowness
https://www.novatec-gmbh.de/en/blog/choosing-right-hashing-algorithm-slowness/
SHA-256 でハッシュ化されたパスワードは11秒でクラックできるが、bcryptであれば3年かかる。

concrete5 は、パスワードの総当たり攻撃を防ぐ仕組みがありますか?

concrete5 は、標準機能で、指定した秒数内に指定した回数以上ログインに失敗すると、ログイン失敗した際のアクセス元IPアドレスを自動的にブロックする機能が備わっています。機械的なログイン試行をブロックすることで、外部からの総当たり攻撃を効果的に防ぐことができます。

以上