強力なパスワードを生成する方法
弱いパスワードは、消費者向けインターネットで最も悪用される単一の脆弱性です。年々、攻撃者が公開した侵害コーパスは同じ文字列を上位に示しています: 「123456」、「password」、「qwerty」、「admin」。あなたのアカウントのいずれかがその DNA を共有しているなら、それらは既にどこかのボットネットで実行されている辞書リストに座っています。強いパスワードは、展開できる最も安価で最速の防御であり、ジェネレーターでの数秒は、プレッシャー下で人間の脳が生み出すどんなものよりも優れています。
コンピュータパスワードの簡単な歴史
コンピュータパスワードは 1961 年に遡ります。MIT の Fernando Corbató のチームが Compatible Time-Sharing System(CTSS)に導入し、多くのユーザーが 1 つのメインフレームを共有しながらファイルをプライベートに保つことができました。システムは 1962 年に最初の侵害を受けました。博士課程の学生 Allan Scherr が、毎週 4 時間の割り当てを超えて計算時間を得るために、マスターパスワードファイルを印刷したのです。「保護するアカウントの隣に秘密を平文で保存することは悪い考え」というこの教訓を、この分野が完全に吸収するのに 20 年近くかかりました。
1979 年、Robert Morris と Ken Thompson は「Password Security: A Case History」を発表し、Unix Version 7 でソルト付き DES ハッシングを出荷しました: 12 ビットのランダムソルトに DES の 25 回の反復で、パスワードファイルはワンショットのトロフィーから中程度に高価なブルートフォースのターゲットになりました。レインボーテーブル、Alec Muffett の「Crack」(1991 年)、そしてどんどん高速になる GPU が最終的にこれらの防御を圧倒し、分野は意図的に遅いハッシュ関数に移りました: bcrypt(1999 年)、scrypt(2009 年)、Argon2(2015 年、現在の PHC 勝者)。
パスワードアドバイスのユーザー向け側面はもっとゆっくり動きました。NIST の 2003 年ガイドライン(主に Bill Burr が執筆)は、強制的な定期的ローテーションと必須の文字クラス混合を推奨し、このアドバイスは 15 年間企業のデフォルトになりました。Burr 自身は 2017 年のインタビューでそのルールを否認しました。同じ年、NIST SP 800-63B Revision 3 は定期的ローテーションと構成ルールの両方を正式に廃止し、2 つのよりシンプルなアイデアに置き換えました: 長い記憶された秘密を優先する、そして受け入れる前に候補パスワードを侵害コーパスに対してチェックする。
強いパスワードを作るもの
パスワードの推測への抵抗力は、ビット単位で測定される 1 つの量に還元されます: エントロピー。各ビットが探索空間を倍にします。4 桁の PIN は約 13 ビットのエントロピー(10,000 の組み合わせ)。16 文字の小文字のみの文字列は約 75 ビット。16 文字の大文字小文字混合 + 数字 + 記号の文字列は約 105 ビット。高速なソルト付きハッシュに対してハイエンドな消費者向け GPU が達成できる 100 GH/s では、50 ビットは数日で破れ、70 ビットは数千年かかります。
2 つの実用的な含意があります。
長さが複雑さを支配します。70 文字のアルファベットから 1 文字追加すると、探索空間は 70 倍になり、これは約 6.1 ビット追加するのと同じです。1 つの構成ルールを追加(たとえば長さを一定に保ちながら大文字小文字を混合)しても探索空間は 2 倍になるだけで、1 ビット余分です。12 文字のランダムな小文字は、8 文字の大文字小文字 + 記号を毎回打ち負かします。
ランダム性は譲れません。英単語から作られた 20 文字の文字列は 130 ビットのエントロピーではありません。本格的な攻撃者に対しては 40 ビットかもしれません。クラッキングツールはブラインドブルートフォースではなく、ワードリスト + マングルルールを実行するからです。生成されたパスワードは、文字ごとに完全なエントロピーを提供します。人間が選んだパスワードは、ほぼ決してそうではありません。
パスワードジェネレーターの仕組み
ブラウザベースのジェネレーターは、プラットフォームの暗号的に安全な乱数生成器(CSPRNG)である crypto.getRandomValues() を使用し、オペレーティングシステムのエントロピープールに支えられています。これは TLS セッションキーや AES 初期化ベクトルを導出するのに使用される同じソースです。はるかに古い Math.random() は暗号的に安全ではなく、パスワードやその他のセキュリティ目的に決して使用してはなりません。
3 つを選択します:
- 文字数の長さ
- 含める文字クラス(小文字、大文字、数字、記号)
- パスワードを声に出して読んだり手で書き写したりする必要がある場合の、視覚的に曖昧な文字(
l、1、I、O、0)のためのオプションの除外
ジェネレーターはその後、選択されたアルファベットから一様にサンプリングし、要求された長さに達するまで、バイアスもパターンもなく行います。
強いパスワードを生成する方法
- 長さを決定する。新しいアカウントには 12 文字が合理的な下限、お金や秘密を保持するアカウントには 16〜20 文字、マスターパスワードとルート資格情報には 25 文字以上。
- サイトが記号を拒否しない限り、すべての文字クラスを有効にする。隠れた構成ルールは数ビットのエントロピーを失わせるので、マネージャがフィールドを埋めてくれるなら、推測しにくい文字を含めればいいだけです。
- 生成して監査する。ほとんどのジェネレーターはエントロピーの見積もりを表示します。通常のアカウントには少なくとも 80 ビット、高価値には 100 以上を目指します。
- 貼り付ける前にパスワードマネージャに保存する。最初に保存しないと、タブを閉じるとパスワードは永遠に失われます。これは最も一般的な自爆ゴールです。
- ログインのラウンドトリップをテストする。少数だが実際の割合のサイトが、サーバー側で 16、20、または 32 文字でパスワードを密かに切り捨てたり、特定の記号を取り除いたりします。実際に受け入れられたものを確認するために、一度ログアウトしてログインし直してください。
長さ、アルファベット、エントロピー一覧
| 長さ | アルファベット | 組み合わせ | エントロピー(ビット) |
|---|---|---|---|
| 8 | 小文字のみ(26) | 2.1 × 10^11 | 38 |
| 12 | 小文字 + 数字(36) | 4.7 × 10^18 | 62 |
| 16 | 大文字小文字混合 + 数字(62) | 4.8 × 10^28 | 95 |
| 20 | 大文字小文字混合 + 数字 + 32 記号 | 4.5 × 10^37 | 125 |
| 25 | キーボード全体(約 94) | 2.0 × 10^49 | 164 |
64 ビットを下回るものは、決意のあるオフライン攻撃者に対して脆弱です。100 ビットを超えるものは、古典的なハードウェアに対する今後 10 年間は快適に将来性があります。量子攻撃は Grover のアルゴリズムを通じて実効エントロピーを半分にするため、100 古典ビットは 50 ポスト量子ビットを提供し、それでも実用的な脅威をはるかに上回ります。
代替としてのパスフレーズ
実際に覚える必要がある少数のパスワード(パスワードマネージャのマスターパスワード、デバイスのロック解除、緊急回復コード)には、パスフレーズがセキュリティを犠牲にせずに記憶のしやすさでランダム文字列を打ち負かします。古典的なレシピは Arnold Reinhold が 1995 年に発明した Diceware です: 5 つの物理サイコロを振り、7,776 エントリーのワードリスト(7,776 = 6^5)で 5 桁の数字を調べ、必要な単語数だけ繰り返します。各単語は約 12.9 ビットのエントロピーを追加するので、correct horse battery staple cargo lumen のような 6 単語のフレーズは約 77 ビットを提供し、ランダムな 13 文字の大文字小文字 + 数字の文字列と同等です。
2016 年、Electronic Frontier Foundation は、より長く、より覚えやすい単語(Reinhold の 4.3 に対して平均 7 文字)の更新された Diceware スタイルのワードリストを公開しました。依然として 7,776 エントリー、依然として単語ごとの同じエントロピー、タイプや電話での口述がより容易。どちらのリストも機能します。
パスフレーズのセキュリティを破壊する単一の間違いは、サイコロを振るのではなく自分で単語を選ぶことです。人間は 1,000〜2,000 の一般的な名詞や動詞に集中するので、自分で発明した 6 単語のフレーズは、実効エントロピーが 60 ビット近くであることがよくあり、ときには直接クラッカーのワードリストに含まれています(xkcd コミックによって普及した correct horse battery staple 自体は、今やすべての現代の辞書攻撃に含まれています)。
より良いパスワードのヒント
- すべてのアカウントに異なるパスワードを使用。再利用は最も収益性の高い攻撃ベクトル。1 つの侵害されたサイトが、資格情報を共有した他のすべてのアカウントを露出させます。
- 生成し、決して発明しない。脳はランダム性に弱く、コンピュータは非常に得意です。作業を外注してください。
- 長く、賢くではなく。
crypto.getRandomValuesからの 20 文字は、考案できるどんなパターンも打ち負かします。 - 一括貼り付け、決してタイプしない。20 文字のランダム文字列をタイプすると、タイプミスとショルダーサーフィンの両方を招きます。パスワードマネージャにフィールドを埋めさせてください。
- 既存のパスワードを侵害コーパスに対して監査する。haveibeenpwned.com の Pwned Passwords API は、k 匿名性プロトコルを使って約 8 億 5000 万の漏洩したハッシュに対して任意のパスワードをチェックし、完全なパスワードを送信することはありません。
- 信号があったときのみローテーション、スケジュールではなく。強制的な 90 日ローテーションは、
Spring2026!、次にSummer2026!のような予測可能なパターンにユーザーを押し込みます。現在の NIST ガイダンスは、侵害が疑われる場合のみローテーションすることです。 - セキュリティ質問を無効にするかランダム化する。「母親の旧姓」はほとんどの系図サイトで検索可能。答えを代替パスワードとして扱い、マネージャにランダム文字列を保存してください。
- 自動入力を使い、ドメインを確認する。類似ドメインで入力を拒否するパスワードマネージャは、フィッシング試行を無料でブロックしました。
よくある間違い
- パスワードの再利用。クレデンシャルスタッフィング攻撃は漏洩したメール/パスワードペアを数千のサイトに対して試します。1 つの再利用パスワードは完全なアカウント侵害です。
- 個人情報。ペットの名前、誕生日、子供の名前、住所、学校のマスコットなど、ソーシャルメディアから簡単に収集できます。
- 単純な置換。
P@ssw0rdやPa55wordはすべてのワードリストに含まれます。クラッキングツールはaを@、oを0、sを$にデフォルトマングルルールとして適用します。 - 短いパスワード。消費者向けハードウェアでソルト付き SHA-256 に対して 10 文字未満は、数時間、ときには数分で破られます。
- キーボードウォークとシーケンス。
qwertyuiop、1qaz2wsx、asdfghjkl、abcd1234は最初の 1000 試行で試されます。 - 平文で保存。付箋、
passwords.txt、マスターパスワードなしのブラウザ自動入力、すべて下流のジェネレーター強度を打ち消します。 - メールやチャットで共有。メールはプロバイダで保管され、しばしば受信者のデバイスバックアップにも保存されます。チャット履歴は無期限に存続します。
- 強度メーター単独を信頼。多くのメーターは長さとクラス構成をスコアリングし、明らかな辞書パターンを見逃します。
correct horse battery stapleは一部のメーターで「弱い」と評価されますが、エントロピーでは実際に強いです。 - 定期的な強制ローテーション。予測可能な派生に向かってユーザーを押し込み、人口平均を弱めます。
- MFA をオプションとして扱う。生成された 25 文字のパスワードでさえ、高価値アカウントには 2 番目の要素が必要です。パスワードはフィッシングされますが、2 番目の要素はバーを上げます。
パスワードを超えて: マネージャ、MFA、パスキー
パスワードマネージャはもはやオプションではありません。現実的な代替は、弱いパスワードの再利用か書き留めるかであり、どちらも信頼できるどんなマネージャよりも悪いです。主要オプションの簡単な比較:
| ツール | 価格 | 保存モデル | 注目すべき強み |
|---|---|---|---|
| Bitwarden | 無料 / 有料 | クラウド同期、セルフホストオプション | オープンソース、監査済み、寛大な無料層 |
| 1Password | 有料 | クラウド同期、エンドツーエンド暗号化 | 洗練された UX、ファミリー共有、トラベルモード |
| Dashlane | 有料 | クラウド同期 | ダークウェブモニタリング、VPN バンドル |
| KeePassXC | 無料 | ローカルファイル(好きな方法で同期) | 完全オフライン、ベンダーリスクなし |
| Proton Pass | 無料 / 有料 | クラウド同期、エンドツーエンド暗号化 | Proton アカウントと一括、エイリアスメール |
| Apple Keychain | Apple デバイスで無料 | iCloud 同期 | ネイティブ、無料、Apple エコシステムに限定 |
| ブラウザ組み込み | 無料 | ブラウザアカウント同期 | 無料で組み込み、ホスト上のマルウェアに対して弱い |
2 要素認証(2FA) は、盗まれたパスワードのコストを即座の乗っ取りから「攻撃者は 2 番目の要素もインターセプトしなければならない」に上げます。SIM スワップ攻撃に弱い SMS よりも、時間ベースワンタイムパスワード(認証アプリ Aegis、Raivo、または 2FAS を介した TOTP)を優先します。最高価値アカウントには、TOTP よりもハードウェアセキュリティキー(YubiKey、Titan、SoloKey)を優先します。
パスキー(FIDO2 / WebAuthn)はパスワードをデバイス結合の暗号鍵に置き換えます。Apple、Google、Microsoft は 2022 年 5 月に拡張されたパスキーサポートを共同で発表し、パスキーは現在 iOS 16+、Android、Chrome、Safari、Edge、Windows Hello で利用可能です。パスキーはフィッシング不可能です。なぜなら、ブラウザは登録されていないドメインでそれを使用することを拒否し、サーバー側データベースに漏洩する共有秘密がないからです。サイトがパスキーを提供している場合、有効にしてください。エコシステムが成熟する間、通常はフォールバックとしてパスワードを保持できます。
プライバシーとジェネレーター
パスワードジェネレーターは完全にブラウザ内で動作します。文字ごとに crypto.getRandomValues() を一度呼び出し、選択されたアルファベットからサンプリングし、結果をページにレンダリングします。ログ記録なし、サーバーに何も送信されず、移動後に何も保存されません。生成されたパスワードは、どこかに貼り付けることを選択しない限り、デバイスを離れません。アカウントの鍵のような基礎的なものには、ローカルのみのフローが正しいデフォルトです: テレメトリなし、分析なし、サードパーティスクリプトなし、キャッシュなし。ツール全体はページが読み込まれた後にオフラインで実行でき、ネットワークをオフにして再度生成をクリックすることで確認できます。
よくある質問
パスワードはどのくらいの長さにすべきですか?
適切なセキュリティのために 12 文字以上、機密性の高いアカウントには 16 文字以上を使ってください。文字を増やすたびに、パスワードを破るのは指数関数的に難しくなります。
特殊文字を含めるべきですか?
はい。大文字(A〜Z)、小文字(a〜z)、数字(0〜9)、特殊文字(!@#$%^&*)を組み合わせると、攻撃者が推測すべき文字セットが広がり、強度が大幅に上がります。
パスワードジェネレーターは安全ですか?
ブラウザ内で動作するなら安全です。ブラウザ側のジェネレーターはデバイスの暗号学的乱数生成器を使用し、パスワードをサーバーに送信することはありません。
どれくらいの頻度でパスワードを変更すべきですか?
現在のガイドライン(NIST など)では、漏洩の証拠がある場合のみ変更し、定期スケジュールでは変更しないことを推奨しています。強制的な定期変更は、覚えやすい単純なものを選ばせて結果的に弱いパスワードを生むためです。
Is a passphrase as good as a random password?
Yes, if it is long enough and the words are chosen randomly (for example with Diceware or the EFF wordlist). Six randomly-chosen words give about 77 bits of entropy, comparable to a 13-character random password. Self-invented phrases are usually much weaker because humans cluster around the same few thousand common words.