SSHA1は安全か?

Mon, Dec 14, 2015

OpenLDAP と仲間たち Advent Calendar 2015 14日目。

OpenLDAPはパスワードを格納する際、既定ではSSHA1(Salt付きSHA1)を利用します。 OpenLDAP付属のslappasswdを実行すると、このSSHA1ハッシュ値が出力されます。

このSSHA1は現在も安全なのでしょうか? SSHA1の安全性について考えてみましょう。

従来、暗号化アルゴリズムやハッシュアルゴリズムの安全性について検討する際、 このアルゴリズムは解読するのに〇〇年かかるから安全だ。という説明をよく耳にしました。

しかし近年、クラウドコンピューティングやGPUの登場により状況が変わってきました。 計算リソースの省コスト化と並列化により、お金さえあれば膨大な計算を短縮することが出来るようになってしまったのです。

つまり安全性とは、ハッシュを破る(コリジョンを見つける)にはいくらお金がかかるかを求め。

情報の価値 < ハッシュを破るためのコスト

となればそのシステムは安全だと言うことができます。

著名なセキュリティ研究者であるBruce Schneierさんは2012年にAmazon EC2上でSHA1を破るコストを見積りました

  • 2015年: $700,000 ≒ 8547万円
  • 2018年: $173,000 ≒ 2112万円
  • 2021年: $43,000 ≒ 525万円

しかし実際に2015年になってみると、この予測はやや楽観的だったようです。 GPUの低コスト化と、新たな攻撃方法「freestart衝突」の登場により、現時点(2015年)で$75,000から〜$120,000(915万円〜1465万円)の費用でSHA1を破れると報告されています。

したがって、現時点では情報の価値が900万円を超えるようなシステムではSHA1ハッシュは安全ではないと言うことができます。

これが2018年2021年になると更に多くの犯罪組織の手が届く価格まで下がってゆくことが予想されます。 さらに、研究者は犯罪組織がAmazon AWSより多くの計算機を保有する可能性についても指摘しています。

根本的な問題は、SHA1が速すぎるために総当り攻撃に脆弱だということです。 SHAファミリーはパスワードを格納する用途として不適切であり、SHA2も同様の問題を抱えています。

それではどのような対策を行えば良いのでしょうか。

ひとつはイテレーションを行うハッシュアルゴリズムを利用することです。 イテレーションを行うハッシュ形式には以下のものが挙げられます。

  • PBKDF2
  • Bcrypt
  • Scrypt

これらはハッシュのイテレーションを行うことでブルートフォース耐性を持ったハッシュ形式です。

例えばイテレーションを1万回行えば攻撃者にとって費用が1万倍に増えるわけですから効果は抜群です。 また、これらのハッシュ方式は未来に適合するという特徴があります。 1万回で不十分となる時代に到達したら、10万回に増やせばよいわけです。

次回、OpenLDAPでPBKDF2を利用する方法を説明します。

参考資料