先に確認できること
- 生成にはブラウザ標準の
crypto.getRandomValues()を使用します。 - 文字の選択は、単純な剰余演算で生じる偏りを避けるため拒否サンプリングを行います。
- 選択した文字種を含めた後の並び替えにも、同じ暗号学的乱数源を使用します。
- 生成したパスワードを当サイトのサーバーへ送信・保存する処理はありません。
- 端末、ブラウザ拡張機能、クリップボード履歴、画面共有など、利用環境の安全性までは保証できません。
このツールは一般的なログインパスワードの候補を作るためのものです。暗号資産ウォレットの秘密鍵・復元フレーズ、サービス固有のAPIキー、電子証明書など、専用規格や発行・失効管理が必要な秘密情報の代替には使用しないでください。
1. 乱数源:Web Crypto API
JavaScript の Math.random() ではなく、Web Crypto API の crypto.getRandomValues() から32ビット符号なし整数を取得します。W3C仕様は、このAPIを暗号用途に適した疑似乱数値を得るための仕組みとして定義しています。ただし、物理現象から直接取得する「真の乱数」と同一であるとは表現しません。
const values = new Uint32Array(1)
crypto.getRandomValues(values)
// values[0] は 0 から 0xffffffff までのいずれか2. 剰余偏りを避ける拒否サンプリング
乱数をそのまま value % 文字数 にすると、232 が文字数で割り切れない場合に、先頭側の一部の文字がわずかに選ばれやすくなります。当サイトは、文字数で割り切れる最大の範囲だけを採用し、範囲外の値を取り直します。
const RANGE = 0x100000000 // 2^32
const limit = RANGE - (RANGE % size)
do {
crypto.getRandomValues(values)
} while (values[0] >= limit)
const index = values[0] % sizeこれにより、採用された範囲内では各インデックスが同じ個数の元の値に対応します。文字集合の大きさが変わっても同じ考え方を使います。
3. 必須文字種と安全なシャッフル
「大文字・小文字・数字・記号をすべて含める」が有効な場合は、各文字種から最低1文字を選び、残りを全体の文字集合から生成します。その後、Fisher–Yates方式で並び替え、各交換位置の選択にも拒否サンプリング済みの乱数を使います。
この制約を有効にした出力は「選択した各文字種を最低1文字含む」という条件付きの集合から生成されます。そのため、制約なしの単純な 文字集合サイズ^文字数 と完全に同じ分布・エントロピーであるとは扱いません。画面上の強度表示は目安であり、サービス側の保存方式、試行回数制限、MFA、フィッシング耐性も実際の安全性に影響します。
さらに、必須文字種を先に1文字ずつ選んでから残りを埋める実装は、条件を満たすすべての文字列を一様に選ぶ方式ではありません。表示するビット数は、選択した文字集合から独立に選ぶ場合の候補空間の目安(上限)として読み、暗号学的な証明値やサービスの安全性の保証とは解釈しないでください。
4. ブラウザ内処理とデータの範囲
| 処理 | 実行場所 | 当サイトのサーバーへの送信 |
|---|---|---|
| パスワード・PIN・ランダム文字列の生成 | 利用中のブラウザ | 送信しません |
| パスフレーズの単語選択 | 利用中のブラウザ | 送信しません |
| 強度の目安計算 | 利用中のブラウザ | 入力内容を送信しません |
| QRコード表示 | 利用中のブラウザ | 生成内容を送信しません |
| アクセス解析 | 同意設定に応じて外部サービス | 生成結果を解析イベントに含めません |
生成結果・履歴・QRコード・診断結果の表示領域には、検索結果の説明文へ動的な値が使われにくくなるよう data-nosnippet を設定しています。これは検索摘要の制御であり、端末上の他ソフトウェアから秘密を保護する機能ではありません。
5. 自動テストと確認範囲
現在のテストでは、次のような性質を確認します。
- 文字数と生成件数の最小・最大境界
- 選択した必須文字種が出力に含まれること
- 除外文字・類似文字が出力へ混入しないこと
- PIN、ランダム文字列、一括生成、覚えやすい形式が停止せず生成できること
- 弱いPINや一般的な危険パスワードの検出
- 固定単語リストの語数・重複・文字形式とパスフレーズの語数境界
テストが通ることは、端末全体の安全性や将来のブラウザ実装を保証するものではありません。仕様変更や生成処理の変更時にはテストと本ページを同時に更新します。
6. 参照した一次資料
- W3C Web Cryptography API:Crypto.getRandomValues()
- MDN:Crypto.getRandomValues()
- NIST SP 800-63B:Authentication and Authenticator Management
サイトの運営情報と更新方針は執筆・更新方針、アクセス解析と広告に関する情報はプライバシーポリシーで確認できます。