パスワードはどれだけ強ければよいか

エントロピーのビット数が実際に何を測っているのか、記号を混ぜるより長さが効く理由、使い回しがどれほどの代償を招くか、そしてパスフレーズとパスワードマネージャーの位置づけを解説します。

失いたくないアカウントには、ランダムに生成した 16 文字以上のパスワードか、ランダムに選ばれた 5 語以上のパスフレーズを使い、それを 1 つのサイトだけで使ってください。これで 65 ~ 95 ビットのエントロピーになり、総当たり攻撃の射程からは十分に外れます。そして「1 つのサイトだけ」という部分は、強度そのものより重要です。以下は、これらの数字の根拠です。

ビットで測るエントロピー

エントロピーは、そのパスワードが等確率のどれだけの候補から選ばれたかを 2 のべき乗で表したものです。40 ビットのエントロピーとは 2^40 通り、およそ 1 兆通りのうちの 1 つという意味で、1 ビット増えるごとに推測の手間は倍になります。式は ビット数 = 長さ x log2(文字集合の大きさ) です。したがって小文字だけなら 1 文字 4.7 ビット、英数字なら 5.95 ビット、印字可能な ASCII 全体なら 6.57 ビット、7,776 語のリストから選んだ 1 語なら 12.9 ビットになります。

パスワードエントロピー
小文字 8 文字38 ビット
英数字 12 文字71 ビット
ASCII 全体から 12 文字79 ビット
英数字 16 文字95 ビット
ランダムな 5 語65 ビット
ランダムな 6 語78 ビット

この計算が成り立つのは、パスワードが実際にランダムな過程から生まれた場合だけです。Tr0ub4dor&3 は 95 文字の集合から取った 11 文字なので、式の上では 72 ビットになります。しかし実際には辞書に載っている単語に予測しやすい置き換えを施しただけのものであり、解析ツールははるかに早く到達します。エントロピーが記述しているのは文字列ではなく、生成器のほうです。

そのビット数で何が買えるか

推測の速さは、サイトがパスワードをどう保存していたかで決まります。レート制限のある実際のログインフォームが相手なら、攻撃者は 1 時間に数回しか試せません。盗まれたデータベースが相手なら、ハッシュ次第です。MD5 や SHA-1 のような高速なハッシュは、民生用のグラフィックスハードウェアで途方もない速度で試せます。一方、bcrypt や Argon2 のようなパスワード専用のハッシュは、何桁も遅くなります。

以下は最悪の場合、つまりソルトのない高速なハッシュに対して毎秒 100 億回の推測を仮定したものです。曲線がどれほど急に折れ曲がるかを示すためのもので、実測値ではありません。

エントロピー全空間を探索し尽くす時間
40 ビット約 2 分
50 ビット約 1 日
60 ビット数年
70 ビット数千年
80 ビット数百万年

平均すれば、攻撃者はその半分の時間で成功します。実務的な読み方はこうです。50 ビット未満はオフライン攻撃に対してほとんど意味がなく、60 ~ 70 ビットならたいていの用途で十分、80 ビット以上なら当分は安心していられます。

長さは記号の寄せ集めに勝る

英数字 12 文字のパスワード (71 ビット) を考えてみます。記号を加えて文字集合を 62 文字から 95 文字に広げると 79 ビットになります。代わりに英数字をあと 2 文字足すと 83 ビットになります。1 文字増やすごとに探索空間は文字集合の大きさの倍数で広がりますが、文字集合を広げても、すでにある 1 文字あたり約 0.6 ビットしか増えません。長さが勝ちますし、勝ち続けます。

構成規則 (「大文字、数字、記号をそれぞれ含めること」) は、人を狭いパターンの集合へ追い込みます。先頭に大文字、末尾に数字と感嘆符、といった具合です。解析ツールはこうした変形を真っ先に試します。NIST のデジタルアイデンティティのガイドラインが構成規則と定期的な変更の強制から離れ、長さと、既知の漏洩パスワードリストとの照合を重視するようになった理由の 1 つが、これです。

本当の危険は使い回し

総当たり攻撃でアカウントを乗っ取られる人は、ほとんどいません。実際に起きているのはクレデンシャルスタッフィングです。防御の弱いサイトが侵害され、メールアドレスとパスワードの組が公開され、自動化されたツールがその組を他の数百のサービスに対して試します。侵害されたフォーラムとメールで同じパスワードを使っていたなら、その強度は無関係です。推測されたのではなく、手渡されたのですから。

フィッシングも同じ理屈です。よくできた偽のログインページに入力された 30 文字のパスワードの価値は、password1 とまったく同じです。したがって、重要な順に並べると次のようになります。

  1. サイトごとに異なるパスワードを使う。
  2. 重要なものにはすべて二要素認証を設定する。とりわけメールには必ず設定する。メールは他のすべてのリセット経路だからです。
  3. オフラインでの解析が絶望的になるだけの長さを確保する。

パスフレーズ

パスフレーズとは、リストからランダムに選んだ数個の単語です。たとえば harvest-cobalt-mural-drift-plinth のようなものです。1 語あたり 12.9 ビットなので、5 語で 65 ビット、6 語で 78 ビットになります。

これが機能するには条件が 2 つあります。単語は自分で選ぶのではなく、サイコロかソフトウェアによってランダムに選ばれていなければなりません。そして強さは単語の数から来るのであって、区切り文字や 1 文字を大文字にすることから来るのではありません。歌詞や引用句にはほとんどエントロピーがありません。人が口にすることという小さな集合から取られているからです。

パスフレーズが本領を発揮するのは、記憶から入力する数少ないパスワードです。端末へのログイン、パスワードマネージャーのマスターパスワード、ディスクの暗号化などがそれにあたります。

パスワードマネージャーの位置づけ

パスワードマネージャーは「一意なパスワードを 200 個考えて覚える」という課題を「長いパスフレーズを 1 つ覚える」に変えてくれます。高エントロピーの文字列を生成し、正しいドメインでのみ入力します。似せただけのアドレスでは自動入力しないので、フィッシングの効き目も鈍ります。

リスクが 1 か所に集中するという指摘は妥当ですが、それでもなお有利な取引です。長いパスフレーズと第 2 要素で守られた 1 つの保管庫は、品質の分からない数十のサイトで共有された 1 つのパスワードに勝ります。

ハッシュについての注記

ハッシュはログインのもう一方の側にあります。まともに作られたサービスは、パスワードそのものではなく、意図的に低速なアルゴリズムで作ったソルト付きのハッシュを保存します。そのため、漏洩がただちに平文につながることはありません。SHA-256 のような汎用のハッシュは高速に作られており、そのためファイルのチェックサムには最適ですが、パスワードの保存には不向きです。「強くするため」に自分のパスワードをハッシュしても、何も得られません。結果の推測しにくさは、入力の推測しにくさを超えないからです。