Webサイトごとに別々の強力なパスワードを作ることは難しいのか?

広告

紙だけでサイトごとに異なるパスワードを生成する暗号、米研究者が考案」に関連して。

前から感じているのだけど、パスワードを使い回す人が多く、その理由はパスワードを覚えきれないからという。しかし、実のところサイトごとにバラバラで強力なパスワードを生成し、それを忘れない方法はあると思う。簡単にいうとパスワードを覚えるのではなく、パスワードを生成するルールを覚えておくのだ。

仮に http://www.example.comというサイトがあるとしよう。ここで仮にパスワード生成のルールに「ドメイン名にsaltを加えてMD5する」と決めておく。saltはonaneetにしようか。そうすればあとは必要なときにコンソールを叩くだけだ。

md5 -s "onaneetwww.example.com"
MD5 ("onaneetwww.example.com") = 0026093332b861b2e4c11df28aea3b66

ハッシュ関数はその一方向性ゆえ仮にパスワードが漏洩しても元の入力はわからない(はず)。またハッシュ関数でパスワードを生成しているということが知られたとしてもsaltを用いていれば復元は難しい。ハッシュ値からsaltを復元するのもまず無理だ。

こうして得られたパスワード0026093332b861b2e4c11df28aea3b66は十分に強いし、これをブルートフォース攻撃でクラックしようとしてもまず無理だろう。生年月日や電話番号ではないので想像も難しい。その割にMD5を計算できるパソコンがあればいつでもすぐにパスワードを復元できる。

この方法を使うときはsaltの内容とMD5を使ってパスワードを作っていることを他人に悟られないこと。別にMD5でなくてもいいんだけど。SHA1して先頭の24文字を採用するとかなんでもいい。

最近はGPUを使ってパスワードをクラックするなんて方法も流行っているらしい。たとえば「パスワード解析には、CPUよりもGPUの方が効率的!CPUでは解析に43年かかるパスワードもGPUでは48日で解析可能!」年単位かかるから安心だと思っていたのが日単位で済んでしまうというのは青天の霹靂だと思う。世の中では恐ろしいことが起きているのだ。参考:「MD5 Crack GPU (The fastest LGPL GPU MD5 password cracker)

GPUで力尽くであんなことや、こんなことをしたいときのキーワードはCUDAとかOpenCLで探すといい。

とはいえ、この方法で適切な運用をしてコリジョンに強いハッシュ関数を用いれば最新のGPUを4枚挿しみたいな環境であってもそうそうやられるものではないだろう。それでも心配ならHMACとかを使おう。