FIRST CH TOOLS / 37 PASSWORD GENERATOR

安全なパスワード生成

長さと文字の種類を決めて、推測されにくいパスワードを最大50件まとめて発行します。0 と O、1 と l のような紛らわしい文字を外す・記号の種類を絞るといった、貼り付け先の都合に合わせた調整ができます。乱数はこのブラウザの暗号用乱数生成器から取り出しており、生成したパスワードはどこにも送信されず、URLにも残りません。

長さ
使う文字
長さ(文字)
選べる文字の数
強度(エントロピー)
判定

生成結果
強度の内訳
項目意味

How to Use

  1. 長さを決める迷ったら 16文字から始めてください。長さは文字種を増やすより効きます。パスワード管理ソフトに預けるなら20文字以上、手で打ち込む必要があるものは12〜16文字が現実的です。
  2. 文字の種類を選ぶ記号を受け付けないサービスなら記号を外し、特定の記号だけ弾かれるなら「使う記号」から消します。紙に書き写したり口頭で伝えたりするパスワードは、紛らわしい文字を除くを入れたままにしてください。
  3. 生成してコピー「生成する」を押すとその場で並びます。行ごとの「コピー」で1件だけ、「すべてコピー」で全件をクリップボードへ。強度は上のビット数と、下の表の「解読までの目安」で確認できます。

About This Tool

乱数は crypto.getRandomValues() =ブラウザの暗号用乱数生成器から取っています。Math.random() は使っていません。Math.random は速度を優先した実装で、出力をいくつか観測すると内部状態を復元でき、以降の値が予測できます。パスワードは「予測できないこと」そのものが価値なので、この違いは決定的です。加えて、文字を選ぶときの剰余のかたより(modulo bias)も取り除いています。32bitの乱数を文字数で単純に割った余りで選ぶと、割り切れない分だけ先頭側の文字がわずかに出やすくなるため、上限を超えた乱数は捨てて引き直しています。

強度は「文字の種類」より「長さ」で決まります。選べる文字が N 種類・長さが L 文字なら、組み合わせの数は NL = 強度は L × log2(N) ビットです。記号を足して N を 62 から 94 に増やしても1文字あたり 5.95→6.55 ビットにしかなりませんが、長さを1文字足せばその分がまるごと増えます。8文字は記号を混ぜても約52ビットで、漏えいしたハッシュをGPUで殴られる状況では数日〜数時間の世界です。12文字で約79ビット、16文字で約105ビットになり、ここまで来ると総当たりは現実的でなくなります。

「各種類を1文字以上入れる」は強度をわずかに下げます。この指定は「大文字が1つも入っていない候補」を除外するため、候補の総数が減るからです。このツールはその減少分を包除原理で計算して差し引いたビット数を表示しています(多くのツールは L × log2(N) のままで、実際よりやや高く出ます)。とはいえ減るのは1ビット未満から数ビット程度で、「大文字・数字・記号を各1文字以上」という要件を課すサービスに通すための実務上の必要経費です。なお1文字目に大文字が固まらないよう、確保した文字は Fisher-Yates シャッフルで混ぜています。

紛らわしい文字の除外は、書き写す前提のときだけ使ってください。除外すると選べる文字が減り、同じ長さでの強度がわずかに下がります(94→87種類で1文字あたり0.11ビット減)。パスワード管理ソフトにコピー&ペーストで預けるなら、除外せずに使うほうが素直です。逆に、初期パスワードを紙で渡す・電話で伝える・別端末で手打ちするといった場面では、0O1lI の取り違えによる問い合わせのほうが実害になります。

生成したパスワードは、この端末の外に出ません。サーバーへ送信しないだけでなく、URLパラメータにも入れていません(URLはブラウザの履歴・ブックマーク・共有リンク経由で残るため、パスワードを載せる場所として不適切です)。このページに渡せるのは設定だけです: /password/?length=24&count=3&symbols=0length=4〜128count=1〜50upper/lower/digits/symbols=0|1similar=1 で紛らわしい文字を除外・each=1 で各種類を1文字以上・symbolset= 使う記号・exclude= 使わない文字)。ファイルとして保存する機能はあえて用意していません(平文のテキストがダウンロードフォルダに残るのを勧めないため)。生成後はパスワード管理ソフトへ直接貼り付け、共有が必要なら期限付きの安全な経路を使ってください。

使い回しをやめることが、強度を上げることより先です。どれだけ強いパスワードでも、複数のサービスで同じものを使えば、1か所の漏えいで芋づる式に破られます(クレデンシャルスタッフィング)。サービスごとに別のパスワードを作り、管理ソフトに預け、可能なところはパスキーや二要素認証を併用してください。定期変更は、NIST SP 800-63B が「漏えいの兆候がない限り強制すべきでない」としています(機械的な変更は Pass1!Pass2! のような予測しやすい変化を招くためです)。

Other Tools