使い方
- スライダーまたは数値の入力欄で「長さ」を設定します。パスワードマネージャーで管理するパスワードなら、16 文字以上を目安にするとよいでしょう。
- 文字の種類として「大文字(A-Z)」「小文字(a-z)」「数字(0-9)」「記号(!@#$...)」を選びます。「選択した種類をすべて含める」は初期設定でオンになっており、どのパスワードにも選択した種類の文字が 1 つ以上ずつ含まれます。
- 必要に応じて、「似た文字を除外(i l 1 L o 0 O)」で l、1、O などの似た文字を、「紛らわしい記号を除外」で紛らわしい記号を除外します。サイトで使えない特定の文字は「除外する文字」に入力します。
- 「生成」をクリックし、「強度」の評価とエントロピーを確認してから、パスワードを 1 つずつコピーするか、「すべてコピー」でまとめてコピーします。
強いパスワードの条件
ランダムに生成したパスワードの強度は、エントロピーで表します。エントロピーは 長さ × log2(使用文字数) ビットで、使用文字とはパスワードの文字を選び出す元になる文字の集合です。1 ビット増えるごとに、必要な推測回数は 2 倍になります。長さはエントロピーに掛け算で効きますが、使用文字を増やしても 1 文字あたりのエントロピーはわずかしか増えないため、長さのほうが重要です。小文字だけの 16 文字のパスワードは、4 種類すべてを混ぜた 8 文字のパスワードよりも、組み合わせの数が約 1100 万倍多くなります。
| 長さ | 文字の種類 | 使用文字数 | エントロピー |
|---|---|---|---|
| 4 | 数字(PIN) | 10 | 13.3 ビット |
| 8 | 小文字 | 26 | 37.6 ビット |
| 8 | 4 種類すべて | 89 | 51.8 ビット |
| 12 | 英字と数字 | 62 | 71.5 ビット |
| 16 | 小文字 | 26 | 75.2 ビット |
| 16 | 4 種類すべて | 89 | 103.6 ビット |
| 20 | 4 種類すべて | 89 | 129.5 ビット |
このツールでは、4 種類すべてを選んだときの使用文字数は 89 です(26 + 26 + 10 + 記号 27)。エントロピーは小数点以下を切り捨てた整数のビット数で表示されます。これらの数値はランダムなパスワードにのみ当てはまります。人が考えたパスワードのエントロピーは、長さから想像されるよりもはるかに低くなります。
NIST SP 800-63B の推奨事項
米国連邦政府のデジタル認証に関するガイドラインである NIST SP 800-63B は、パスワードを検証するサービス側を対象としています。現行版の SP 800-63B-4 では、サービスについて次のように定めています。
- パスワードが唯一の認証要素である場合は 15 文字以上、他の要素と併用する場合は 8 文字以上を必須としなければならず、少なくとも 64 文字までは使えるようにするべきです。
- 「大文字、数字、記号をそれぞれ 1 つ以上」のような構成ルールや定期的な変更を課してはなりません。ただし、漏えいの証拠がある場合は変更を強制しなければなりません。
- 新しいパスワードを、よく使われるパスワード、推測されやすいパスワード、漏えいしたパスワードのブロックリストと照合しなければなりません。
- 印字可能なすべての ASCII 文字とスペースを受け付け、パスワードマネージャーが使えるように貼り付けを許可するべきです。
利用者にとっての教訓も同じです。重要なのは長さとランダム性であり、P@ssw0rd1 のような予測しやすい置き換えは役に立ちません。
パスワードマネージャーとパスフレーズ
使い回しているパスワードは、短いパスワード以上に危険なことがよくあります。情報漏えいが起きると、攻撃者は流出したメールアドレスとパスワードの組み合わせを他のサイトで試すからです(クレデンシャルスタッフィング、いわゆるパスワードリスト攻撃)。アカウントごとに異なるランダムなパスワードを使い、覚えるのはパスワードマネージャーに任せてください。そうすれば、20 文字のパスワードも 8 文字のパスワードと変わらない手間で使えます。
パスワードマネージャーのマスターパスワードのように、記憶して入力する数少ないパスワードには、パスフレーズのほうが便利です。パスフレーズは、たとえばサイコロと EFF の長い単語リスト(EFF long word list)を使って、ランダムに選んだ単語を並べたものです。7,776 語のリストから選んだ単語 1 つにつき約 12.9 ビット加わるため、6 語で約 77.5 ビットになります。このツールが作成するのは文字によるパスワードで、パスフレーズではありません。API キーなど、機械が使うシークレットにはランダム Base64 生成ツールを使用してください。
このパスワード生成ツールのしくみ
パスワードは、ブラウザに組み込まれた暗号論的に安全な乱数生成器 crypto.getRandomValues() を使ってお使いのデバイス上で作成され、送信も保存もされません。単純に剰余を取る方法では一部の文字がわずかに出やすくなるため、このツールでは棄却サンプリングを使っています。32 ビットの乱数のうち、使用文字数の倍数のうち最大のもの以上の値は引き直すため、すべての文字がまったく同じ確率で選ばれます。
似た文字を除外は i l 1 L o 0 O を取り除きます。Wi-Fi のパスワードのように、読み上げたり紙を見ながら入力したりする場合に便利です。紛らわしい記号を除外は、各種の括弧、スラッシュ、チルダ、, ; : . を取り除きます。これらは一部のフォーム、シェル、設定ファイルで正しく扱われないことがあるためで、残る記号は ! @ # $ % ^ & * - _ = + ? です。どちらのオプションも使用文字が減るので、1~2 文字長くして補ってください。
よくある質問
パスワードは何文字にすべきですか?
パスワードだけで保護されているアカウントなら、15 文字以上にしてください。これは NIST SP 800-63B-4 が単一要素のパスワードに定めている最小文字数です。パスワードマネージャーを使うなら、16~24 文字のランダムなパスワードにしても手間は増えません。頻繁に入力するパスワードには、ランダムな 5~6 語のパスフレーズを検討してください。
Web サイトで生成したパスワードを使っても安全ですか?
crypto.getRandomValues() を使ってすべてブラウザ内で動作し、パスワードが送信、記録、保存されることはありません。必要なパスワードは、そのままパスワードマネージャーにコピーしてください。エントロピーのビット数は何を意味しますか?
現在の設定で生成されうるパスワードの総数の、2 を底とする対数です。80 ビットなら 2 の 80 乗通りのパスワードがありうることを意味し、1 ビット増えるごとに推測に必要な手間は 2 倍になります。エントロピーはパスワードの生成方法を表す値なので、ランダムなパスワードにのみ当てはまります。
パスワードは定期的に変更すべきですか?
決まった周期で変更する必要はありません。定期的な変更を求められると、人は予測しやすい変化で対応してしまうため、NIST SP 800-63B-4 はサービスに対して定期的な変更を強制しないよう求めています。サービスから漏えいの通知があったとき、パスワードが流出データに含まれていたとき、他人に知られた疑いがあるときに変更してください。
「選択した種類をすべて含める」を使うとパスワードは強くなりますか?
いいえ。初期設定でオンになっているこのオプションは、構成ルールのあるサイトでパスワードが受け付けられるようにするためのものにすぎません。ツールは選択した種類が欠けているパスワードを破棄して生成し直すため、一部の組み合わせが除外され、実際のエントロピーはわずかに下がります(短いパスワードほど顕著です)。そのため、表示される数値は上限値です。強度を高めるには、長さを増やすほうが効果的です。