パスワードについての話

ちょっと友人から質問されたけどシリーズ。
「パスワードが数字8ケタだと1時間で解読されちゃうって言われたけど大丈夫?」的なことを聞かれたので検証。
個人的に8桁1分は無理だと思ったけど確認しないと不安なのでー。
それといくつか考察とか。

とりあえず質問への回答、数字8桁1時間は可能?

(なぜか1分と勘違いして執筆してたので削除)
明日検証予定。
追記
4時間ほど放置しましたがだめでしたので中断。
(研究室のサーバなのであんまり長時間やりたくなかったのです)
 

数字4ケタとかの場合

わかりやすい例として数字4ケタの場合で実際に解読を行ってみる。
番号式の鍵とか思い浮かべると実感がわくと思うけど、数字の3,4桁は案外簡単に解けます。
暇つぶしに3桁の番号鍵とかいじってれば、番号を知らなくても1時間しないうちに鍵が外れると思う。
ぐるぐる回すのに1番号3秒かかっても000から999まで1000種類、3000秒 50分です。

解析実験

じゃあPCの場合はどうだろう?
というわけで実験してみた。
自前のwebサイトに認証を設けて数字4ケタのパスワードやぶりに挑戦
使ったのは Bruterというツール
http://www.darknet.org.uk/2008/01/bruter-10-released-parallel-windows-password-brute-forcing-tool/
認証はhttpのBasic認証
一度に5個ずつ、500ms間隔で試行(デフォルト値)
数字4ケタのパスワードの解読にかかった時間は・・・
 
5分10秒
 
数字・4ケタという事前情報があるからこその値ですが、あっという間です。
(とはいえ、これより長い8桁が1分以内は無理ですね)
 

じゃあ数字4桁の暗証番号は危険?

 
総当たりでうまくやれば5分程度で認証を突破できることを確認しました。
ところで、数字4ケタと言えば暗証番号が思い浮かびますがどうでしょう?
みんな平気で使っていますが、危ないと思いますか?
まあ、ATMとかに限って言えば、おおむね安全です。
ご存じのとおり総当たりを邪魔する方策があるので。
 
銀行のATMといえど、総当たりで試されればいつかは突破されます。
でも実際に突破されたという話を聞かないのは、総当たりがなかなかできないからです。
銀行のATMの場合、3回ほど暗証番号を間違えると取引がいったん凍結されます。
実際やらかしたことがないのでわかりませんが、凍結解除には窓口に行く必要があるはずです。
これがあるため、攻撃者が総当たりを試そうとしても、失敗は2回までしかできなくなります。
おかげで、3/10000の確立を突破されない限り大丈夫といえます。
こういう運用方法なら、数字4ケタでもあまり心配はいらないといえます。
 
Webサイトでも同様で、たとえばとあるオンライン証券のサイトはパスワードを3回間違えると以後24時間ログインができなくなります。(おかげで困りました)
認証を続けるためにヒューマンテスト(人間であること・プログラムによる総当たりでないことを証明するため画像に書かれた文字を読めとか言われる)が科せられる場合もあります(wikipediaなど)。
これらの措置がされている場合、機械的に総当たりをするにしてもコストがかかりすぎるため、攻撃者も手を出しにくくなります。
 
もちろん、4ケタより5ケタのほうが安全なのは言うまでもなく、数字だけでなく英字や記号を混ぜればさらに安全なパスワードになります。
しかしながら、数字4ケタのようなシンプルなパスワードでも、運用方法ではそれなりに安全に使えるわけです。

総当たり以外の場合

 
前節では、運用次第では数字4ケタでも大丈夫だよと言いましたが、あくまで総当たりの場合の話です。
たとえば、あらかじめ予想される候補が絞られていれば、上記のような運用がなされていてもあまり意味をなしません。
 
「暗証番号に誕生日を使うな」という警告を例にとりましょう。
暗証番号に誕生日。日付はちょうど数字4ケタなのでわかりやすく、覚えやすく、便利です。
でも容易に想像できるとおり、誰でも思いつきます。そして誕生日にお祝いしてくれる人なら皆知っています。
こういう、ピンポイントで狙われやすいものを暗証番号・パスワードにするのは危険です。
誕生日・電話番号・車のナンバー このあたりを使っている人なら3回以内での正解も余裕です。
 
そしてパスワードが長くても同じようなことが言えます。
ユーザ名=パスワード は論外として
名前+生年月日とか、好きなアスリートの名前とか、余裕で想像されます。
英数字8文字とかでも、決め打ちで来られたら正解率がぐんと上がってしまいます。

まあ良くいわれる話ではありますが、念のため。

パスワードの決め方について

 
以上良くある話ですが、パスワードの安全性と危険性についてでした。
じゃあどんなパスワードがナイスなのかというのを最後に書いて終わりにします。
 
よいパスワードの要件としてよくいわれるのはいかの4つです

  • 推測されにくいこと
  • 総当たりされない程度に長いこと(あるいは総当たりされないような運用がされていること)
  • 自分が覚えやすいこと
  • (可能ならば)サービス毎に違うものを使うこと

 
このうち難しいのは「自分が覚えやすい」ってことです。
複雑すぎて覚えられなくてメモ書き とかよくある笑い話ですが、ぶっちゃけリアルにやられると笑えません。
覚えやすく複雑なパスワード、しかもサービス毎に変える となると結構大変です。
 
そこで個人的にお勧めなのが
「パスワードを決めずにルールを決める」
ってやつです。
 
具体的には、パスワードを決めるためのルールだけ作っておいて、必要に応じてそのルールに従ってパスワードを作るという方策です。
 
たとえば
「サービスの名前の末尾4文字+サービス提供会社の所在地(番地)」
のようにサービスに日もづけたルールならサービス毎に変わるし、覚えなくとも毎回確認できます。
(ちなみに末尾4文字なのは全部だったり頭文字だったりは推測されやすいから)
 
「親の旧姓の前半分+サービス提供会社の設立年+親の旧姓の後ろ半分」
のように、他人があまり知らないパーソナルな情報を混ぜるのもよいです。
(旧姓を分けるのは上に同じ理由。人名+番号のみで総当たりとか言うアプローチもありうるので)
 
さらに確実なのは あらかじめランダムな文字列を覚えておき、
「サービス関連の何か」+「ランダムな文字列」+「サービス関連の何か」
というふうにランダムな文字列が含まれるルールでしょうけれど、これはちょっと覚えるのに手間がかかります。
 
まあ何にしても、それなりに複雑なパスワードを生み出せるルール を決めるのがパスワード管理を楽に行う一案だと思います。
 
 
なんか、どこにでもある情報の寄せ集めになってますがこの辺で。