ブラウザでのパスワードセキュリティ:生成・暗号化・ハッシュ化・強度チェック — サーバー不要
ブラウザベースのパスワード・暗号化ツール実践ガイド — 強力なパスワードの生成、AES-256によるテキスト暗号化、PBKDF2によるパスワードハッシュ化、パスワード強度の即時チェックが可能です。
開発者やセキュリティ意識の高いユーザーなら、いつか必ず同じツール群が必要になります。強力なパスワードの生成、機密テキストの暗号化、ストレージ用パスワードのハッシュ化、ハッシュの一致確認などです。以前はOpenSSLや専用アプリのインストールが必要でしたが、今日ではWeb Crypto APIが十分に強力になり、サーバーへの通信ゼロ、デバイス外へのデータ送信ゼロで、すべてをブラウザ内で処理できます。
ここでは、必須ツールとそれぞれの効果的な使い方を紹介します。
1. パスワードジェネレーター:正しいパスワードの作り方
人間はランダムなパスワードを作るのが苦手です。無意識にパターンを使ってしまいます — 辞書の単語、名前、年号、qwerty123 のようなキーボードの並びなどです。真のランダムパスワードジェネレーターはこれらをすべて回避します。
パスワードジェネレーターでは、あらゆる最新ブラウザに組み込まれた暗号学的に安全な乱数生成器である crypto.getRandomValues() を使用しています。Math.random() との違いは以下の通りです。
Math.random()は擬似乱数列 — シードが分かれば予測可能crypto.getRandomValues()はOSレベルのエントロピーから生成 — 真に予測不可能
推奨設定:
| ユースケース | 長さ | オプション |
|---|---|---|
| Webサイトのログイン | 16文字以上 | 大文字・小文字・数字・記号 |
| データベースのパスワード | 24文字以上 | すべての文字セット |
| 暗号化キーのパスフレーズ | 32文字以上 | すべての文字セット |
| PIN(デバイスロック解除) | 8桁以上 | 数字のみ |
避けるべきこと:
- 12文字未満のパスワード(現代のGPUでブルートフォース可能)
- 記号のみのパスワード(多くのサービスで拒否される)
- 以前どこかで使用したパスワード
2. パスワード強度チェッカー:送信前に確認する
パスワードを設定する前、または既存のパスワードを監査する際は、パスワード強度チェッカーで確認しましょう。以下の項目を評価します。
- 長さのスコア — 長いほど常に有利
- 文字セットの多様性 — 小文字・大文字・数字・記号
- よくあるパターン — 辞書の単語、キーボードの並び、繰り返し文字
- エントロピービット数 — 推測の困難さを数学的に示す指標
エントロピースコアが最も正直な指標です。128ビットエントロピーのパスワードは、現在の計算速度でブルートフォース攻撃しても、宇宙の年齢より長い時間がかかります。
"password" → エントロピー: ~11ビット ❌ 最悪
"P@ssw0rd" → エントロピー: ~18ビット ❌ まだ最悪(パターンあり)
"correct-horse-bat" → エントロピー: ~44ビット ⚠ 中程度(辞書の単語)
"Kx9#mP2$vL7nQw" → エントロピー: ~87ビット ✅ 強力
"mQ3$kX9#nP7&vL2@" → エントロピー: ~104ビット ✅ 非常に強力
3. AES-256暗号化:軍事グレードの暗号化でテキストを保護
秘密のメモを保存したり、設定値を暗号化したり、安全でないチャネルで機密テキストを送信したりする必要がありますか?AES 暗号化 / 復号化ツールは AES-256-GCM を使用しています — 銀行、政府機関、エンドツーエンド暗号化メッセージアプリで使われているのと同じ暗号方式です。
AES-256-GCMの仕組み(簡略版)
- パスフレーズは PBKDF2 で200,000回のイテレーションを経て256ビットキーに変換されます
- 暗号化ごとにランダムな IV(初期化ベクトル) が生成されます — 同一の平文でも毎回異なる暗号文が生成されます
- 平文が暗号化され、認証タグ が生成されます — 改ざんを検出します
- 出力はbase64エンコードされます:
IV + tag + ciphertext
平文: "API_KEY=sk_live_abc123"
パスフレーズ: "my-strong-passphrase"
↓
暗号文: "a3Fm9K2...base64...Xp7nQ=="
セキュリティ特性:
- ✅ ゼロナレッジ — いかなるサーバーにも送信されません
- ✅ 認証付き暗号化 — 暗号文が改ざんされた場合、復号化に失敗します
- ✅ ソルト + IVのランダム化 — 同じ入力でも毎回異なる出力が生成されます
- ✅ 200,000回のPBKDF2イテレーション — パスフレーズのブルートフォース攻撃に耐性があります
実際の使用例:
- メモアプリに保存する前に
.envの値を暗号化する - メール/Slackで同僚にパスワードを共有する(暗号文を送り、パスフレーズは別のチャネルで共有)
- 日記や個人的なメモを暗号化する
- スプレッドシートにAPI keyを暗号化した形で保存する
4. パスワードハッシュジェネレーター:安全なストレージのためのPBKDF2
ユーザーパスワードを保存するアプリを構築する場合、平文パスワードはもちろん、MD5/SHA-1のような弱いハッシュも絶対に保存してはいけません。パスワードハッシュジェネレーターは PBKDF2-SHA256 を使用して安全なパスワードハッシュを生成します。
なぜPBKDF2でMD5/SHA-256ではないのか?
| ハッシュ | 1回の推測にかかる時間(GPU) | イテレーション | 評価 |
|---|---|---|---|
| MD5 | 0.001ms | 1 | ❌ 危殆化済み |
| SHA-256 | 0.002ms | 1 | ❌ 速すぎる |
| PBKDF2-SHA256 | 200ms以上 | 200,000 | ✅ 適切 |
| bcrypt(コスト12) | 300ms以上 | アダプティブ | ✅ 適切 |
パスワードハッシュの本質は、1回の推測を高コストにすることです。高速なハッシュはパスワードに対して致命的に危険です。
ハッシュ出力形式:
pbkdf2$200000$<salt>$<hash>
ソルトはハッシュごとにランダムに生成されるため、同じパスワードでも毎回異なるハッシュが生成されます — レインボーテーブル攻撃を防ぎます。
5. TOTP / 2FAジェネレーター:認証コードのテスト
TOTP / 2FAジェネレーターは、Google Authenticator、Authy、およびRFC 6238準拠の認証アプリと互換性のある時間ベースのワンタイムパスワードを生成します。Base32のシークレットキーを入力すると、カウントダウン付きの現在の6桁コードが表示されます。
ユースケース:
- サーバーのTOTP実装が正しいコードを生成しているか確認する
- ユーザーにデプロイする前に2FAセットアップをテストする
- 既に登録済みのシークレットのコードを生成する(バックアップ方法として)
TOTPコードは30秒ごとに変わり、現在のUTC時刻に紐付けられており、シークレットキーなしでは数学的に予測不可能です。
6. ダイスウェアパスフレーズ:記憶しやすく数学的に強力
ダイスウェアパスワードジェネレーターは、EFFワードリストからパスフレーズを生成します — マスターパスワードやディスク暗号化キーにセキュリティ研究者が使用するのと同じアプローチです。
例: correct-horse-battery-staple-voyage
マスターパスワードにおいて、パスフレーズがランダム文字パスワードより優れている理由:
| パスワード | エントロピー | 記憶しやすさ |
|---|---|---|
Kx9#mP2$(8文字) |
~52ビット | 非常に困難 |
correct-horse-battery(3単語) |
~58ビット | 簡単 |
correct-horse-battery-staple(4単語) |
~77ビット | 普通 |
correct-horse-battery-staple-voyage(5単語) |
~96ビット | 扱いやすい |
パスワードマネージャーのマスターパスワード — 暗記必須で書き留め不可 — には、5単語のダイスウェアパスフレーズがセキュリティと記憶しやすさの最良バランスです。
セキュリティチェックリスト
認証システムをデプロイする前に確認してください:
- ✅ パスワードジェネレーターでパスワードを生成する —
crypto.getRandomValues()を使用 - ✅ パスワード強度チェッカーで強度を確認する — 特権アカウントは80ビット以上のエントロピーを目指す
- ✅ 保存するパスワードはPBKDF2、bcrypt、またはArgon2でハッシュ化する — パスワードハッシュジェネレーターで出力形式を確認
- ✅ 保存する機密値はAES 暗号化で暗号化する — AES-ECBではなくAES-256-GCMを使用
- ✅ 2FAを有効にしてTOTPジェネレーターでコードをテストする
- ✅ マスターパスワードにはダイスウェアジェネレーターを使用する — 最低5単語以上
重要なポイント:このリストのすべてのツールは完全にブラウザ上で動作します。パスワード、平文、ハッシュはいずれもデバイス外に出ることはありません。これは機能ではなく、セキュリティツールとして最低限満たすべき基準です。