パスワードゲームと、何も守らないルール

公開日 著者 David Carrero

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

← ブログに戻る