先週、我々は「パスワードは本当にSHA-1+saltで十分だと思いますか?」という記事を再掲載した。

  パスワードに関するこの話題を続けると:コードでパスワードハッシュを実装する際、適切なIteration Countを使用するだけでなく、同じことがKeePass.のようなパスワード管理ソフトにも当てはまる。

  強力なパスワードは記憶するのが難しいため、多くの人がKeePassや他のパスワードマネージャを使用することを選択し、そのパスワードマネージャを、一つあるいは他の動機サービスにコピーする。パスワードはデスクトップやラップトップ、携帯電話、タブレットなど、あらゆるデバイスで利用可能になる。しかしこれは潜在的な問題をもたらす。デバイスの一つに障害が起きるか、盗まれるか、あるいは動機サービスがハッキングされれば、パスワードファイルが悪の手に渡る結果になる可能性が高いのだ。

  そのための明白な防御は、パスワードデータベースファイルで強力なパスワードを使用することだ。しかし強力なパスワードの入力は、携帯電話では面倒だ。そのため多くの人がより短いパスワードを使用することになる。14文字以上のパスワードもしくはパスフレーズが適切だが、我々は皆、多くの人がそうはしないことを知っている。

  パスワードマネージャの設定で、Key Iteration Countを調整することにより、モバイル使用における短いパスワードの問題を軽減することができるかもしれない。一般的にはIteration Countを設定すれば、使用中の最も遅いデバイスで、パスワード認証が約1秒になる。

  たとえば、KeePassを使用しているなら、デフォルトの鍵導出Iteration Countは6,000だ。典型的な携帯電話では、1秒間におよそ200,000の反復が行われる。よって、適切なKey Iteration Countを設定することで、攻撃者にとってパスワードクラッキングを33倍、高くつくものにすることができる。もちろん、パスワードに1文字プラスすれば、同等の保護を与えることになり、2文字追加すれば、1024倍良い保護になる。しかしそれは、Key Iteration Countを途方もなく低い、デフォルトの値にしておく理由ではない。

  以下はWindowsラップトップのKeePassで、値は4,279,296に設定されている:

Number of key encryption rounds

  そしてモバイルパスワードマネージャを開発している人への助言は:モバイル端末のCPUパワーが低いことで、Key Iteration Countを妥当な数値(何十万というレベルではなく、400万から600万であるべき)に設定することは非常に難しい。では携帯電話のGPUをパスワード導出に使用したらどうだろう? それを使用して、鍵導出のための適切なIteration Countが獲得でき、GPUアクセラレーションを使用するパスワードクラッカーに対して、より有利になる。

Post by — @jarnomn