使い方
「生成方式」で「ランダムな文字」か「パスフレーズ(単語の組み合わせ)」のどちらかを選びます。ページを開いた時点ですでに5個できていて、設定を1つでも変えると一覧がまるごと作り直されます。設定はそのままで別の値がほしいときだけ「再生成」を押します。
- ランダムな文字のとき:「長さ」は8〜128文字(初期値は16文字)です。「含める文字の種類」で「小文字(a-z)」「大文字(A-Z)」「数字(0-9)」「記号」をオン・オフします。最初にオフになっているのは記号だけです。「記号」をオンにすると「記号一覧(編集可能)」の欄を書き換えられます。
- パスフレーズのとき:「単語数」は3〜10個(初期値は4個)です。「区切り文字」は単語の間に入れる文字で、4文字まで指定でき、初期値はハイフン(-)です。「各単語の先頭を大文字にする」と「末尾に数字を追加(0〜99)」は最初からオンなので、
Maroon-Cymbal-Tiger-Harbor-60のような形になります。 - まとめて作る数:「一度に生成する個数」は1〜20個です。
「生成結果」の上には、「強度: 非常に強い · 推定エントロピー 約95ビット」のように、いまの設定の強度とビット数が1行で出ます。一覧の値はどれも同じ設定で作ったものなので、どれを選んでも強度は変わりません。1つだけコピーすることも、「すべてコピー」でまとめてコピーすることもできます。「.txtでダウンロード」を押すと、1行に1つずつ書かれた passwords.txt(パスフレーズのときは passphrases.txt)が保存されます。
作った値はどこにも残しません。ページを再読み込みすると別の値に変わるので、使う値はその場でコピーしておいてください。ダウンロードした .txt ファイルにはパスワードがそのまま書かれています。パスワードマネージャーに移したあとは消しておくほうが安全です。
1文字ずつ選ぶ仕組み
ランダムな文字は、次の3段階で作ります。
- オンにした文字の種類ごとに、その種類から1文字ずつ先に選びます。数字をオンにしていれば、数字が少なくとも1つは入るのはこのためです。
- 残りの文字は、オンにした種類をすべて合わせた文字の集まりから1文字ずつ選びます。
- 全体の並びをランダムに混ぜます。先に選んだ文字がいつも先頭に来てしまうのを防ぐためです。
パスフレーズは、英単語256個のリストから互いに異なる単語を「単語数」の数だけ選び、「区切り文字」でつなぎます。
どちらの方式でも、乱数はブラウザの crypto.getRandomValues から受け取ります。前の値から次の値を推測される余地がある Math.random() は使いません。また、受け取った数を文字の種類数で割った余りをそのまま使うと、前のほうの文字がごくわずかに出やすくなります。このツールはそうした偏りを生む数を捨てて選び直し、どの文字も同じ確率で出るようにしています。
推定エントロピーと強度の読み方
エントロピーは、同じ設定で作れるパスワードが何通りあるかをビットで表した値です。1ビット増えるごとに、その数は2倍になります。ランダムな文字の推定エントロピーは「長さ × log2(使える文字の数)」で計算します。小文字・大文字・数字をオンにすると文字は62種類、記号もオンにすると初期設定の記号27個が加わって89種類です。
このツールが付ける強度は次のとおりです。あくまでこのツールが決めた区分で、強度の名前が特定の攻撃に対する安全を保証するものではありません。
| 強度 | 推定エントロピー |
|---|---|
| 弱い | 40ビット未満 |
| 普通 | 40ビット以上60ビット未満 |
| 強い | 60ビット以上80ビット未満 |
| 非常に強い | 80ビット以上 |
長さごとに画面に出る値は次のようになります。
| 長さ | 小文字・大文字・数字(62種類) | 記号あり(89種類) |
|---|---|---|
| 8文字 | 約48ビット、普通 | 約52ビット、普通 |
| 12文字 | 約71ビット、強い | 約78ビット、強い |
| 14文字 | 約83ビット、非常に強い | 約91ビット、非常に強い |
| 16文字 | 約95ビット、非常に強い | 約104ビット、非常に強い |
文字の種類を増やすより、長さを伸ばすほうがよく効きます。16文字に記号を加えると約8ビット増えますが、記号なしで2文字伸ばすだけでも約12ビット増えます。数字だけにすると8文字で約27ビット(弱い)で、24文字まで伸ばしてようやく「非常に強い」に入ります。「紛らわしい文字を除外(0 O 1 l I |)」をオンにすると62種類が57種類に減り、16文字で約95ビットだったものが約93ビットになります。
この値は推定です。種類ごとに1文字を先に入れる決まりがあるぶん、実際に出る組み合わせは計算より少しだけ少なくなりますが、差が小さいので計算には入れていません。
パスフレーズの単語数と強度
単語リストは256個なので、単語1つが加えるエントロピーは8ビットに少し届きません。同じ単語を2回選ばないため、2つ目の単語は255個、3つ目は254個の中から選ぶことになるからです。「末尾に数字を追加(0〜99)」は約6.6ビットを加えます。「各単語の先頭を大文字にする」と「区切り文字」は決まった規則なので、計算には入れていません。
| 単語数 | 数字なし | 数字あり |
|---|---|---|
| 3個 | 約24ビット、弱い | 約31ビット、弱い |
| 4個 | 約32ビット、弱い | 約39ビット、弱い |
| 5個 | 約40ビット、普通 | 約47ビット、普通 |
| 6個 | 約48ビット、普通 | 約55ビット、普通 |
| 7個 | 約56ビット、普通 | 約63ビット、強い |
| 8個 | 約64ビット、強い | 約70ビット、強い |
| 9個 | 約72ビット、強い | 約78ビット、強い |
| 10個 | 約80ビット、非常に強い | 約86ビット、非常に強い |
初期設定(4単語に数字を追加)は約39ビットで「弱い」です。ランダムな文字12文字と同じくらいの強さがほしいなら、8〜9単語が必要です。
単語をつないでパスワードにするやり方は、サイコロで単語を選ぶダイスウェア(Diceware)と考え方が同じです。ただしダイスウェアのリストは7,776語あり、単語1つが12.9ビットになります。ダイスウェアの案内ページは、そのリストを使う場合でも用途によって6単語以上をすすめています。このツールのリストはそれよりずっと小さいので、同じ単語数ならエントロピーは低くなります。単語数は上の表のビット数を見て決めてください。
ランダムな文字とパスフレーズ、どちらを使うか
パスワードマネージャーに保存して貼り付けるだけのアカウントには、ランダムな文字が向いています。16文字あれば「非常に強い」になり、覚える必要がないので読みにくくても困りません。
端末のロック解除やパスワードマネージャーのマスターパスワードのように、自分で覚えて手で打つ場面にはパスフレーズが楽です。その代わり、上の表のとおり単語がいくつも必要になります。
どちらを使うにしても、サイトごとに別の値にしてください。あるサイトから漏れたパスワードを、ほかのサイトのログインにそのまま試してみる攻撃(クレデンシャルスタッフィング)があるため、同じパスワードを使い回していると1か所の漏えいが残りのアカウントにも広がります。「一度に生成する個数」を増やせば、複数のアカウントで使う値を一度に作れます。
