強力なパスワードを生成する方法

· 9 分で読めます

弱いパスワードは、消費者向けインターネットで最も悪用される単一の脆弱性です。年々、攻撃者が公開した侵害コーパスは同じ文字列を上位に示しています: 「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 つを選択します:

ジェネレーターはその後、選択されたアルファベットから一様にサンプリングし、要求された長さに達するまで、バイアスもパターンもなく行います。

強いパスワードを生成する方法

  1. 長さを決定する。新しいアカウントには 12 文字が合理的な下限、お金や秘密を保持するアカウントには 16〜20 文字、マスターパスワードとルート資格情報には 25 文字以上。
  2. サイトが記号を拒否しない限り、すべての文字クラスを有効にする。隠れた構成ルールは数ビットのエントロピーを失わせるので、マネージャがフィールドを埋めてくれるなら、推測しにくい文字を含めればいいだけです。
  3. 生成して監査する。ほとんどのジェネレーターはエントロピーの見積もりを表示します。通常のアカウントには少なくとも 80 ビット、高価値には 100 以上を目指します。
  4. 貼り付ける前にパスワードマネージャに保存する。最初に保存しないと、タブを閉じるとパスワードは永遠に失われます。これは最も一般的な自爆ゴールです。
  5. ログインのラウンドトリップをテストする。少数だが実際の割合のサイトが、サーバー側で 16、20、または 32 文字でパスワードを密かに切り捨てたり、特定の記号を取り除いたりします。実際に受け入れられたものを確認するために、一度ログアウトしてログインし直してください。

長さ、アルファベット、エントロピー一覧

長さアルファベット組み合わせエントロピー(ビット)
8小文字のみ(26)2.1 × 10^1138
12小文字 + 数字(36)4.7 × 10^1862
16大文字小文字混合 + 数字(62)4.8 × 10^2895
20大文字小文字混合 + 数字 + 32 記号4.5 × 10^37125
25キーボード全体(約 94)2.0 × 10^49164

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 自体は、今やすべての現代の辞書攻撃に含まれています)。

より良いパスワードのヒント

よくある間違い

パスワードを超えて: マネージャ、MFA、パスキー

パスワードマネージャはもはやオプションではありません。現実的な代替は、弱いパスワードの再利用か書き留めるかであり、どちらも信頼できるどんなマネージャよりも悪いです。主要オプションの簡単な比較:

ツール価格保存モデル注目すべき強み
Bitwarden無料 / 有料クラウド同期、セルフホストオプションオープンソース、監査済み、寛大な無料層
1Password有料クラウド同期、エンドツーエンド暗号化洗練された UX、ファミリー共有、トラベルモード
Dashlane有料クラウド同期ダークウェブモニタリング、VPN バンドル
KeePassXC無料ローカルファイル(好きな方法で同期)完全オフライン、ベンダーリスクなし
Proton Pass無料 / 有料クラウド同期、エンドツーエンド暗号化Proton アカウントと一括、エイリアスメール
Apple KeychainApple デバイスで無料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.