2023年6月、Neal Agarwal というプログラマーが自分のサイト neal.fun に The Password Game というものを公開した。パスワードを入力しろと言われる。次に5文字以上。 次に数字をひとつ。次に大文字をひとつ。次に記号をひとつ。
ここまではゲームではない。あなたの銀行の入力フォームである。
そのあとから別のものが始まる。数字の合計を25にしろ。月の名前を含めろ。掛けて35になる ローマ数字を含めろ。今日の Wordle の答えを入れろ。写真に写っている国を当てて入れろ。 与えられた盤面の最善手を代数記譜法で入れろ。ルールは全部で35個あり、途中であなたの パスワードの中で Paul という名前の卵の絵文字が孵り、イモムシで餌をやらねばならず、 その間、炎が文字を食べていく。消し止めるのが遅れたら終わりだ。
このゲームが効くのは、居心地の悪い理由による。冗談の意味を誰かに説明してもらう必要が ないからだ。最初の1秒でわかる。その仕組みを人生の半分ずっと味わってきたからである。 Agarwal がしたのは、糸をさらに引っ張り続けたことだけだ。
そしてここが立ち止まるべきところだ。最初の四つのルールは、彼の発明ではない。
すでに知っていたルールはどこから来たのか
大文字ひとつ、数字ひとつ、記号ひとつ、そして最低文字数。これはインターネットの 民間伝承ではない。米国 NIST が 2003年 に公開した文書、Bill Burr が書いた SP 800-63 の実務的な翻訳である。そこから世界の半分のフォームへ降りてきて、そこから あなたの頭の中に入った。
全部はパスワードとは何かに書いた。Burr には実在の パスワードのデータがなかった——ほとんど存在しなかった——ので、もっともらしく見える方向へ 推論した。文字の種類が多いほど組み合わせが増え、安全になるはずだ、と。2017年、NIST 自身が方針を撤回し、Burr は Wall Street Journal に、自分の書いたものの大部分を 後悔していると語った。
つまり Agarwal のゲームは、セキュリティ方針を誇張してはいない。一行目からすでに 間違っていたリストを、そのまま続けているだけだ。「記号を含めること」と「数字の合計を 25にすること」の唯一の違いは、前者にあなたが慣れてしまっている点にある。
そのルールが一度も測らなかったもの
ここで冗談は笑えなくなる。測れてしまうからだ。
以下の数字は、このサイトのパスワードチェッカーから出ている。 公表しているモデルは、高速ハッシュに対するオフライン攻撃、毎秒 10¹² 回の試行である。 パンフレットの見積もりではない。同じ文字列をそこに打ち込めば、あなたにも同じものが出る。
| パスワード | 満たすルール | 試行回数 | 持ちこたえる時間 |
|---|---|---|---|
Password1! |
四つとも | 20,000 | 1秒未満 |
Natsu2026! |
四つとも | 1.0 × 10⁷ | 1秒未満 |
Zx9#kQ2m |
四つとも | 3.3 × 10¹⁵ | 55分 |
| サイコロで選んだ6語、すべて小文字 | ひとつも満たさない | 1.1 × 10²³ | 3,500年 |
最後の行だけはチェッカーではなく算術から出している。これは意図的だ。チェッカーには その6語がサイコロから出たものだと知る術がなく、別の数字を出してしまう。6回振れば ちょうど 77.5 ビット、毎秒 10¹² 回の試行に対して 77.5 ビットはおよそ三千五百年である。 最後にまた戻ってくる。
もう一度読んでほしい。Password1! は地球上のどのフォームも通り、キーを離す前に落ちる。
単語が辞書にあり、残りは誰もが付ける飾りだからだ——先頭に大文字、末尾に数字と記号。
そして最後の行、ありふれた小文字6語は、あなたが口座を持つサイトの半分では受け付けて
もらえない。大文字も数字も記号も入っていない。
Zx9#kQ2m には立ち止まる価値がある。これはルールにとっての最良のケースだからだ。
本当にランダムな8文字、四種類すべて入り。2003年の方針が模範的なパスワードと考えた
まさにそれである。55分。しかもこれは上限だ。チェッカーにはあなたがランダムに
打ったかどうか知る術がないので、疑わしきは罰せずで最良のシナリオを計算している。
そもそも誰もそんな打ち方はしない。人に「記号入りの8文字」を頼めば出てくるのは
Konnichiwa123! のようなもので——1.8 × 10⁷ 回、1秒未満だ。
ルールはこの二つを区別しない。フォームにとって Konnichiwa123! と Zx9#kQ2m は
同じパスワードである。 欠陥はそれで全部だ。構成ルールが測っているのは文字列の形であり、
強さは形にはない。
90日ルール、あるいは Aki2026! の生まれ方
2003年の遺産のもう半分は有効期限だ。90日ごとに変更せよ。
90日ごとに新しいパスワードを発明する人はいない。人がやること——あなたがやること、
私がやること——は、前のものを一段進めることだ。Natsu2026! が Aki2026! になって、
仕事は終わり。どちらも1秒未満しか持たない。攻撃者が前者を持っているなら、
後者を当てるのは攻撃ではない。空欄を埋める作業である。
NIST は2017年の SP 800-63B で強制的な定期変更を撤回した。2025年8月の改訂では 文言が強くなり、検証者が構成ルールを課したり定期変更を要求したりす「べきではない」と 書かれていたところが、いまは「してはならない」になった。変更を強制するのは、 そのパスワードが侵害された兆候がある場合だけである。
最初の撤回から9年経っても、あなたの勤務先は四半期ごとに大文字を要求してくる。
文字数の上限が、いちばん悪い兆候
Agarwal は、ゲームを作るきっかけになった最後の一押しが、アカウントを作ろうとして パスワードが長すぎると言われたことだった、と語っている。
ばかげたルールの中で、これだけは同時に悪い兆候でもある。
あなたのパスワードをきちんと保管するシステムは、パスワードを保管しない。ハッシュを 保管する。そしてハッシュは、8文字を入れようが800文字を入れようが常に同じ長さだ。 16文字という上限に、保管上の理由は存在しない。正当な技術的例外はきっちり一つだけ知られて いる——bcrypt は72バイトを超える部分を無視する——が、それは12文字で止まるフォームを 説明しない。
短い上限は、あなたのパスワードを平文で保管している証拠にはならない。しかしそれは、 誰かが固定長のデータベース列に押し込んだときにだけ現れる類の細部である。SP 800-63B 自身は逆を求めている。最低でも64文字を受け付けること。
本当に効くルールはフォームに収まらない
根っこにある居心地の悪さは、良い習慣が検証用のチェック欄として表現できないことだ。 「他のサイトで使っていないこと」や「直近の流出リストに載っていないこと」を確かめる 正規表現は誰にも書けない。
できるのは数えることだ。サイコロで選んだ単語を並べたフレーズ—— Diceware——は1語あたり 12.9 ビットをきれいに足していき、そのビットは本当にビットである。毎秒 10¹² 回という 同じモデルで:
- 5語は 64.6 ビット、およそ 164日。
- 6語は 77.5 ビット、およそ 3,500年。
二つとも言うべきで、後者だけを言うべきではない。5語のフレーズは「何世紀も持つ」と よく繰り返されるが、高速ハッシュに対しては何世紀も持たない。5か月半である。だから Reinhold は5語を下限とし、本当に大事なものには6語を勧めた。スケールを変えるのは 6語目であり、しかもそれは無料だ。
そしてどちらも、あなたの銀行のフォームは通らない。
このゲームが面白い理由
数字の合計を25にしろと言われて笑うのは、それがパスワードを安全にするものと何の関係も ない恣意的な条件だからだ。
記号をひとつ要求するのも、パスワードを安全にするものと何の関係もない恣意的な条件である。 違いは、そちらをインターネットの半分が配っていて、そちらには愛着が湧いてしまったことだけだ。
実務上の要約が欲しければ3行で足りる。ジェネレーターかサイコロを使い、結果を
パスワード管理ツールに入れ、フォームのルールは要求されたものを付け足して満たす。
ただしそれで何かから守られたと思わないこと。先頭の大文字と末尾の ! は通行料であって、
防御ではない。
残りはゲームだ。とてもよくできている。ゲームのままで終わっていればよかった。
出典: Neal Agarwal「The Password Game」(neal.fun、2023年6月27日)、その35のルールと、 パスワードが長すぎると告げたフォームについての著者自身の説明 · NIST SP 800-63(2003)、 SP 800-63B(2017)、SP 800-63B-4(2025年8月。構成ルールと有効期限について「べきではない」 から「してはならない」へ移行し、最低64文字の受け入れを求めている)· Bill Burr の Wall Street Journal への発言、2017年8月 · Arnold G. Reinhold、Diceware(1995)、 1語あたり 12.9 ビットの出どころ。表の時間はこのサイトのチェッカーで、公表モデルである 高速ハッシュに対する毎秒 10¹² 回の試行のもとで測定した。Diceware の数値は同じ速度で、 1語あたり log₂(7,776) から計算している。
写真: Olha Ruskykh · Pexels