Diceware:サイコロはあなたより上手にパスワードを作る

公開日 著者 David Carrero

適当な単語を一つ思い浮かべてほしい。今すぐ、最初に浮かんだもので構わない。

それが何であれ、適当ではなかった。それはあなたの単語だ。今週どこかで読んだ 言葉、目の前にある物、自分の名前の頭文字。人間に「ランダムに」と頼むと、出てくる のは自伝である。そして自伝は当てられる。

パスワード問題のすべてが、ここに詰まっている。人が怠けているから――それもあるが ――ではなく、そもそも人間にはランダムを作る能力がない。好きな文字がある。 「ランダムっぽくない」という理由で同じ文字の連続を避ける。無意識に母音と子音を 交互に置く。数字を求められれば手近なものを引っ張ってくる。日付、年齢、意味のある 数。攻撃者はあなたが誰かを知る必要すらない。人間であることさえ分かればいい。

一人の技術者、5 個のサイコロ、そして 1 枚のリスト

1995 年、Arnold G. Reinhold が自分のウェブサイトで公開した手法が Diceware だ。発想があまりに単純で、わざわざ説明しなければならないことが少し 悔しくなるほどである。人間がランダムに選べないことが問題なら、人間から選択権を 取り上げればいい。

手順は全部で 3 行に収まる。

  1. サイコロを 5 個振り、出た順に書き留める。たとえば 4-2-6-1-3
  2. リストで 42613 を引く。
  3. それがあなたの単語。次の単語も同じことを繰り返す。

リストの項目数は 7,776。この数字に気まぐれはない。6⁵、つまりサイコロ 5 個の 出目の全パターンだ。11111 から 66666 までのすべての組み合わせが、それぞれ 別の項目を指す。余る項目もなければ、重なる項目もない。オリジナルのリストは短い 英単語に音節や数字、記号の断片を混ぜている。7,776 個もまともな単語を集めるのは 見た目より難しいからだ。

大事なのはリストではない。サイコロだ。

12.9 ビットが 12.9 ビットである理由

ここが、ほとんど誰も理解していない部分であり、唯一重要な部分でもある。

Diceware の 1 単語のエントロピーは log₂(7,776) = 12.9 ビット。これはセキュリ ティの話ではなく算数の話だ。結果が 7,776 通りあり、そのすべてがまったく同じ確率で 出る。

自分で選んだ場合と比べてみよう。7,776 語の辞書から 1 語選んでくれと頼めば、計算は 同じに見える。選択肢はやはり 7,776 通りある。だが違う。あなたはそれらを同じ確率 では選ばないからだ。よく使う単語、好きな単語、今日目にした単語を選ぶ。その辞書は 紙の上では 12.9 ビットでも、あなたの頭の中ではずっと少ない。そして攻撃者はリストを 頻度順に並べ替え、人がよく選ぶものから試す。エントロピーとは選択肢の数ではない。 あなたの好みについて攻撃者が知っている分を差し引いた後に残る選択肢の数だ。

サイコロには好みがない。記憶もない。前回 が出たことをサイコロは知らないので、 重複を避けもしなければ、変化をつけようともせず、似た書き出しの単語が 2 つ並んでも 恥ずかしがらない。だから Diceware の 12.9 ビットは正真正銘の 12.9 ビットであり、 パンフレットに載っている希望的な数字ではない。

そして計算がきれいに積み上がる。1 単語ごとに足し算だ。

  • 5 単語:約 64 ビット
  • 6 単語:約 77 ビット
  • 7 単語:約 90 ビット

魔法のかかった掛け算ではなく、素直な足し算である。各回の出目が互いに独立している からだ。Reinhold は 5 単語を下回らないことを、本当に大事なものには 6 単語以上を 推奨している。効果はジェネレーターで確かめられる。1 単語足せば、いつも 同じだけ増える。その「いつも」こそが、この発明のすべてだ。

秘密はリストではない

反論は自然に出てくる。リストが公開されているなら、破るのは簡単なのでは?

そうではない。ここはゆっくり言っておきたい。12.9 ビットという数字は、攻撃者が リストを持っている前提ですでに計算されている。 さらに、あなたが Diceware を 使っていることも、フレーズが何単語なのかも、どの順番で書くのかも、攻撃者は知って いる前提だ。それらはすべて差し引き済みである。攻撃者が知らないのは、あなたの サイコロに何が出たかだけ。「77 ビット」と言うとき、数えているのはそれだけだ。

P@ssw0rd でやっていることの正反対である。あれは a@ に置き換えるなんて 誰も思いつかないだろう、という一点にすべての望みを託している。思いつく。辞書攻撃 ツールが最初に適用する変換規則の一つだ。試したくなったら チェッカーに入れて、何秒もつか見てほしい。

EFF と別のリストたち

2016 年、Electronic Frontier Foundation がサイコロ式フレーズ用の独自の単語 リストを公開した。ロングリストは 7,776 項目を維持している。サイコロは同じ 5 個、 1 単語は同じ 12.9 ビット。変えたのは中身のほうだ。見慣れない音節や記号を追い出し、 ありふれていて、打ちやすく、互いに紛れにくい単語を入れた。1,296 語のショート リストも公開されている(6⁴、サイコロ 4 個、1 単語 10.3 ビット)。一つは短くて 覚えやすい単語を集めたもの、もう一つは各単語が先頭の数文字で区別でき、補完が効く ように設計されたものだ。その代わり 1 回の出目の価値は下がり、振る回数は増える。

この話の美しいところは、算数が誰の好みにも左右されない点にある。決めるのは 項目数だけだ。自分でリストを作ってもいい。日本語でも、津軽弁でも、クリンゴン語 でも構わない。7,776 個の異なる項目があり、サイコロで選ぶ限り、1 単語は 12.9 ビットだ。リストを取り替えるときにあなたが決めているのは、出てきた結果がどれだけ 心地よいかであって、どれだけ安全かではない。

台無しにする 3 つの方法

Diceware が失敗するパターンは 3 つあり、その 3 つとも中身は同じ間違いだ。人間が また手を出している。

  • 「この単語は気に入らない」と振り直す。 結果を捨てた時点で、もうサイコロを 使ってはいない。小道具のサイコロを添えて自分の趣味で選んでいるだけだ。出たものが 出たものである。
  • 文章っぽく聞こえるように単語を並べ替える。 順番も出目の一部だ。
  • 末尾に !、先頭を大文字にして「強化」する。 人は末尾に ! を付けて先頭を 大文字にする、と知っている攻撃者に対しては何も足していない。くだらないポリシーを 満たす必要があるならやればいい。ただし、それでセキュリティが上がったと思っては いけない。上がったのは、もう一度サイコロを振ったときだ。

そして Reinhold が当時から書いていた注意点。市販のふつうのサイコロで十分だ (カジノ用のほうが精度は高いが、必要ない)。平らな面の上で振るのがよく、結果は 出たとおりに書き留める。

まとめ

サイコロで引いた 6 単語のフレーズは、P@ssw0rd より打つのに時間がかかり、 Tr0ub4dor&3 より覚えやすく、その両方より桁違いに破るのが高くつく。凝っている からではない。凝ってなどいない、ただの普通の単語 6 つだ。そうではなく、それが あなたのパスワードの中で、唯一あなたが決めていない部分だからである。

Diceware のオチはそこに尽きる。手に入る最良のパスワードとは、あなたの意見が一切 関与していないパスワードだ。


出典:Arnold G. Reinhold「The Diceware Passphrase Home Page」および 7,776 語の リスト(1995 年)· Electronic Frontier Foundation、サイコロ式パスフレーズ用単語 リスト(2016 年)· 算数は検算できる:6⁵ = 7,776、log₂(7,776) ≈ 12.92 ビット/単語。

← ブログに戻る