パスワード生成
パスワード生成は、文字種と長さを指定して強力なパスワードを作る無料ツールです。生成にはブラウザの暗号用乱数(crypto.getRandomValues)を使い、作られたパスワードがサーバーに送られることは一切ありません。
こんな場面で
- 新しいサービスに登録するとき — 使い回しをやめたいが自分では思いつかない、という場面。生成してそのままパスワードマネージャーに貼り付けます。
- 共有のWi-Fiや機器の初期パスワード — 人に読み上げて伝える必要があるなら「紛らわしい文字を除く」を入れておくと、0とO、1とlの取り違えが起きません。
- 記号が使えないサービス向け — 記号のチェックを外し、そのぶん長さを伸ばして強度を確保します。
- 一時的な受け渡し用 — 相手に渡してすぐ変更してもらう前提の、短命なパスワードを作るとき。
エントロピー(bit)の読み方
bit は「作りうるパスワードの総数を2の何乗で表したか」を示します。1bit増えるごとに、総当たりで試す手間が2倍になります。10bit違えば約1,000倍、20bit違えば約100万倍の差です。
このページの表示値は「長さ × log2(選んだ文字種の合計文字数)」で計算しています。英小文字26・英大文字26・数字10・記号24の4種すべてを選ぶと合計86文字なので、16文字なら 16 × log2(86) ≒ 103bit です。なお実際には各文字種を最低1文字含める調整をしているため、厳密な強度はこの理論値よりわずかに小さくなります。
長さと文字種、効くのはどちらか
このページの計算で実際に比べてみます。
- 8文字・4種すべて(86文字から選択) … 約51bit
- 12文字・4種すべて … 約77bit
- 16文字・英数字のみ(記号なし・62文字) … 約95bit
- 16文字・4種すべて … 約103bit
- 20文字・英小文字だけ(26文字) … 約94bit
注目してほしいのは3行目です。記号を足した12文字(77bit)より、記号を使わない16文字(95bit)のほうが強いことになります。英小文字だけでも20文字あれば94bitに届きます。つまり覚えにくい記号を足すより、4文字伸ばすほうが効きます。記号の入力を弾くサービスに当たったときは、長さで補ってください。
「80bit以上」という目安について
このページの強度ラベルは60・80・100bitを境に「普通・強い・非常に強い」と表示しています。ただし80bitという数字は業界で慣用的に使われている目安であって、公的機関が定めた基準ではありません。米国NISTの現行のパスワード指針(SP 800-63B)は、利用者が自分で考えたパスワードのエントロピーを見積もること自体が困難だとして、複雑さではなく長さを中心に据える方針を採っています。同指針は、パスワード単独で認証する場合は15文字以上を求めること、文字種の組み合わせを強制しないこと、定期的な変更を強制しないこと(漏えいの形跡があるときは変更させること)、漏えい済みパスワードの一覧と照合することを挙げています。このページで作るパスワードは機械が一様に選んだ乱数なので理論値の計算が成り立ちますが、目安の数字を絶対視せず、まずは長さを確保するのが実際的です。
仕様・安全性
- 乱数は暗号用の
crypto.getRandomValuesを使用し、剰余の偏り(modulo bias)を避けて選んでいます。 - 選んだ文字種をそれぞれ最低1文字含むように調整します(長さが文字種数以上のとき)。
- 強度の目安はエントロピー(bit)で表示します。60bit未満が「弱い」、60以上で「普通」、80以上で「強い」、100以上で「非常に強い」です。この区切りは慣用的な目安で、公的な基準ではありません。
- 長さは4〜64文字の範囲で指定できます。記号は
!@#$%^&*()-_=+[]{};:,.?/の24種類です。 - 「紛らわしい文字を除く」を入れると、0・O・o・1・l・I や
,.;:などが候補から外れ、4種すべてを選んだ場合の文字数は86から76に減ります。16文字での強度は約103bitから約100bitになります。読み上げや手書きで渡すなら、この3bitと引き換えに取り違えを防ぐ価値があります。 - 生成したパスワードは保存も送信もされません。コピー後は安全な場所(パスワードマネージャー等)で管理してください。