Kit — パスワード生成

パスワード生成

長さと文字種を選ぶだけ。乱数はブラウザの暗号用API(crypto.getRandomValues)から取り、偏りが出ないように処理しています。強度はエントロピー(bits)と、前提を明記した解読時間の目安で表示します。生成したものは送信も保存もしません。

同じ強さを狙うなら、文字種を増やすより長くするほうが効きます。

引用符・バックスラッシュ・空白は、シェルやCSVで壊れやすいため記号に含めていません。

紙に書き写す・口頭で伝える場面向け。候補が減るぶん、同じ長さなら強度は下がります。

「大文字と数字を含めること」といった要件があるサイト向け。条件を満たさない組み合わせが除かれるため、実際の強度は上の計算値をわずかに下回ります(短いほど差が大きくなります)。

生成結果

生成中…

強度(計算値)
候補の文字数
89 種類
エントロピー
129.5 bits
目安
かなり高め
平均解読時間(仮定つき)
約 10^19 年

計算式: 20 × log₂(89) ≈ 129.5 bits

前提: 漏洩したハッシュを手元で毎秒1兆回試せる攻撃者。ハッシュ方式で桁が変わります(bcryptやArgon2ならずっと長く、専用ハードウェアを並べればずっと短く)。あくまで目安の計算値です。

生成したものは保存も送信もしていません。ページを閉じると消えるので、使うならコピーしてから閉じてください。

この処理はブラウザ内で完結します。ファイルはどこにも送信されません。

このツールの作り

暗号用の乱数を、偏らせずに使う

Math.random() は使っていません。crypto.getRandomValues から取った値を「文字種の数で割った余り」で丸めると特定の文字がわずかに出やすくなるため、範囲外の値は捨てて引き直す方式(棄却サンプリング)にしています。

「各文字種を1つ以上」を後から差し替えない

生成後に先頭の数文字を上書きする実装は、その位置に必ず数字が来るなど分布を歪めます。ここでは必要な文字種から先に1文字ずつ引き、残りを埋めてから全体をシャッフルします。

どこにも送らず、どこにも残さない

生成はページの中だけで完結します。サーバーに送っていないので、こちらには何も残りません。ブラウザにも保存しないため、タブを閉じた時点で消えます。

強度の読み方

エントロピー(bits)とは?「長さ × log₂(候補の文字数)」で計算する、当てるまでに必要な試行回数の目安を指数で表したものです。1 bit 増えると必要な試行回数は2倍になります。ランダムに生成した場合の値なので、自分で考えた文字列には当てはまりません。
解読時間の数字はどこまで信じられる?「攻撃者が漏洩したハッシュを手元で毎秒1兆回試せる」と仮定した場合の平均値です。前提が変われば桁が変わります。bcrypt や Argon2 のように意図的に遅いハッシュならずっと長くなり、専用ハードウェアを大量に並べればずっと短くなります。目安として見てください。
長さと文字種、どちらを増やすべき?長さのほうが効きます。1文字あたりの情報量は文字種を26から89に増やしても4.7 bits から6.5 bits にしかなりませんが、長さを1文字増やすとその6.5 bits がそのまま加算されます。英小文字だけの20文字(約94 bits)は、4種類すべてを使った10文字(約65 bits)より計算上は上、ということです。
「紛らわしい文字を除く」と弱くなる?候補が減るぶん、同じ長さなら少し下がります。どれだけ下がるかは画面の bits 表示に出ます。ただし紙に書き写す・電話で読み上げるといった場面では、読み間違いによる事故のほうが実害になりやすいので、用途で選んでください。

よくある質問

生成したパスワードは保存されますか?

保存していません。サーバーにも送信していませんし、ブラウザにも残していません。ページを開き直すと新しいものが生成され、前のものは取り出せません。使う場合は必ずコピーしてから閉じてください。

パスワードマネージャは必要ですか?

このツールは作るところまでで、保管や同期はしません。サイトごとに違うパスワードを使うには置き場所が必要になるので、パスワードマネージャやOS標準のキーチェーンと組み合わせて使うのが現実的です。

同じパスワードを使い回すとなぜ危険なのですか?

どこか1つのサービスから流出すると、そのメールアドレスとパスワードの組み合わせが他のサイトでも自動で試されます(リスト型攻撃)。この試行は総当たりではないため、パスワードがどれだけ長くても効きません。使い回しをやめることが唯一の対策です。

パスフレーズとパスワード、どちらを選べばいい?

入力する場面で決めるのがおすすめです。パスフレーズは同じ bits でも打ちやすく読み上げやすい代わりに長くなるため、文字数制限のあるサイトでは入らないことがあります。手で打つ機会がなく、マネージャに入れるだけならランダムな文字列で構いません。乱数の作り方はどちらも同じです。