12.1.2 良いパスワード

適切なパスワードとは一体何でしょうか? 安全性の観点からは,パスワードを推測しようとする攻撃者に推測されにくいものが,良いパスワードです.利便性の観点からは,使用者が覚えやすいものが良いパスワードです.両者を両立させる良いパスワードを用いましょう.

パスワード解析の手法

この問題を考えるために,逆に悪い人になったつもりでパスワードを解析する手段を考えてみましょう.まずターゲットが知り合いだった場合,次のような手法が考えられます.

  1. ターゲットの個人情報 (名前とか生年月日) など,関係ありそうなものを打ち込んでみる
  2. ターゲットがパスワードを打ち込んでいるところを後ろからのぞき込む
  3. パスワードをメモした紙を入手する

ではこのような手法が使えない場合,どうすれば良いでしょうか?そういう時も標準的な手法があって,たとえば次のような例があります.

  1. 全ての文字列に対して総当たりで試す (ブルートフォース攻撃)
  2. 辞書に載っている単語に対して総当たりで試す (辞書攻撃)

全ての文字列に対する総当たりというのは最も単純かつ確実な方法です.しかし,十分長いパスワードに対しては時間がかかり過ぎてしまうので,全ての文字列ではなく人間にとって使いやすい文字列だけを選んで総当たりをすることがあります.たとえば人間はパスワードを覚えるために,意味のある単語を使おうとします.そういう心理を突いたのが辞書アタックです.これ以外にも Markov 連鎖を用いる解析手法があります.今では John the Ripper や Ophcrack に代表されるフリーソフトを使うだけで簡単に総当たりが仕掛けられます.ですから私たちは,こういう手法で破られにくいパスワードを考える必要があるわけです.

caution 以下に悪いパスワードの例を挙げますので,絶対に真似しないでください.

他人が推測できるパスワード
生年月日などをパスワードに使っていると,当てずっぽうでパスワードが破られる恐れがあります.また,世の中には externalよく使われるパスワードランキング 500 というサイトがあります.安易で短いパスワードはすぐに破られてしまいます.
文字の種類が少ないパスワード
たとえば小文字のアルファベットだけを使った組み合わせた 8 文字以下のパスワードを総当たりで調べるには,最大で 268 回の攻撃が必要です.これは,計算機にとってはそれほど多くありません.数字だけの 8 文字以下のパスワードならば 108 回で済んでしまいます.一方,もし大文字と小文字と数値の組み合わせを調べるなら,最大で 628 回の攻撃が必要になります.記号も組み合わせればさらにアタックの回数が増えるので,パスワードは破りづらくなります.数値や記号を用いることができるならなるべく混ぜましょう.
短いパスワード
アルファベットの大文字小文字と数字をまぜると 62 文字ありますが,もしパスワードの長さが 1 文字だと 62 回以内の攻撃で容易に破れてしまいます.しかし 8 文字以下のパスワードを破るには総当たりで最大 628 回の攻撃が必要で,攻撃にかかるコストがだいぶ大きくなります.さらにパスワードが 8 文字から 10 文字になると攻撃の手間は最悪で 62*62 倍に増えます.文字数が増えるほど指数関数的に試行の回数が増えるので,総当たり攻撃への耐性が強くなります.
辞書に載っている単語
人間が用いる単語はアルファベットの組み合わせのごく一部です (大学受験までにいくつの単語を覚えたか見積もってください!).8 文字以下の英単語は 628 よりもずっと少ないのです.従って,辞書に載っている単語やその組み合わせは,辞書を利用した攻撃に弱くなります.

適切なパスワードの作り方

安全なパスワードはなるべくランダムに近いものです.攻撃する際のヒントがないほど,破る際に時間がかかるためです.従って,一般的に「パスワードの作り方」のようなガイドに従うことは危険と考えてください.というのは,ガイドに従って作ると攻撃する際のヒントになるため,その分だけ危険が増すためです. たとえば “todaitaro” は単純で危険なパスワードですが,o を 0 に,a を @ に変換した “t0Dait@ro” も同様に危険です.なぜならこれらの変換は広く知れ渡っているため, todaitaro を試すついでに t0Dait@ro を試すことは攻撃者にとって容易だからです.しかし,もしあなたのオリジナルの文字置換ルールがあるならば,それを併用するとより安全なパスワードになるかもしれません.

縦読み・斜め読み

もし日常的に持ち歩いている書物があるならば,そのお気に入りのページのある列を縦や斜めや数文字おきに読むことで比較的ランダムに近いパスワードを生成することができます.この場合くは,ユーザに再現が容易なことが利点です.ただし,縦読みをそのまま用いると,文字の出現頻度が攻撃の手がかりになります(英語なら e が多い,日本語をローマ字にした場合なら母音が多い,など).文字の変換ルールを併用すると,安全性が向上します.

tips書物を利用すると,あなたの愛読書や好きなフレーズを知っている人には,推測が可能になってしまうかもしれません.もし自分しか知らないエピソードで長文が作れるならば,書籍の代わりにそれを利用することもできます.例:「7 歳の時に訪れた xxx という都市で,実は yyy を落として困ってしまったのだが,偶然知り合った zzz の助けで両親に気づかれずに…」