
パスワードジェネレーターです。
文 ゆめさく公開 更新
作ったパスワード
ブラウザの中で作っています。
強さの目安とても強い102.6 ビット
1 秒に 1 兆回試せる相手が、すべての並びを試し切るのにかかる時間は 約 2,413 億年です。
計算のしかた
式は 長さ × log2(使える文字の数) です。いまの指定では 16 × log2(86) = 102.8 になります。「文字の種類を必ず含める」や「同じ文字を使わない」を入れると、作れる並びが少し減るので、並びの数を数え直した 102.6 ビットを表示しています。
この数は、値をこの道具のように乱数で作ったときだけ成り立ちます。自分で考えた並びには当てはまりません。
使い方
- 長さを
決めます。 迷ったら 初期値の 16 文字のままで 足ります。 サービスに 上限が ある ときは、 その 長さに 合わせます。 - 使う
文字の 種類と 条件を 選びます。 サイトが 受け付けない 記号が あれば、 「使う 記号」の 欄から 消します。 - 「コピーする」を
押して、 パスワードマネージャーか、 サイトの 入力欄へ 貼ります。 値は 記録されないので、 貼る 前に この 頁を 閉じないでください。 - まとめて
必要な ときは 個数を 増やし、 「全部 コピーする」か 「テキストで 保存する」を 使います。
この パスワード生成のしくみ
この
作った
通信が 出ない ことの確かめ方
ブラウザの
乱数は crypto.getRandomValues から取る
乱数にはcrypto.getRandomValues を使い、Math.random は
余りの 偏りを出さない
乱数を
文字の 種類を 必ず 含める作り方
「選んだ
強さの 目安と ビット数の見方
強さは、
文字の
強さ (ビット) = 長さ × log2(
たとえば
この
| 指定 | 使える文字の数 | 強さ (ビット) | 目安 | すべてを |
|---|---|---|---|---|
| 4 桁の | 10 | 13.3 | 弱い | 1 秒未満 |
| 数字だけ 8 文字 | 10 | 26.6 | 弱い | 1 秒未満 |
| 英小文字だけ 8 文字 | 26 | 37.6 | 弱い | 1 秒未満 |
| 英数字 8 文字 | 62 | 47.2 | ふつう | 約 3 分 |
| 英数字と | 86 | 50.4 | ふつう | 約 24 分 |
| 英小文字だけ 12 文字 | 26 | 56.4 | ふつう | 約 1 日 |
| 英数字と | 86 | 76.7 | 強い | 約 3,798 年 |
| 英数字 16 文字 | 62 | 95.2 | 強い | 約 14 億年 |
| 英数字と | 86 | 102.6 | とても強い | 約 2,413 億年 |
| 英数字と | 86 | 128.4 | とても強い | 約 1,417 京年 |
| 英数字と | 86 | 205.6 | とても強い | 約 10 の |
最後の
設定の 選び方と、 強さへの影響
基準は
| 変えた設定 | 使える文字の数 | 強さ (ビット) | 基準との差 |
|---|---|---|---|
| 初期設定 (16 文字、 | 86 | 102.6 | 基準 |
| 1 文字長く | 86 | 109.0 | +6.5 |
| 4 文字短く | 86 | 76.7 | -25.9 |
| 記号を外す | 62 | 95.2 | -7.4 |
| 見間違えやすい | 80 | 100.8 | -1.7 |
| 同じ | 86 | 100.5 | -2.1 |
| 必ず | 86 | 102.8 | +0.2 |
- 長さを
足すのが いちばん 効きます。 使える 文字が 86 種類の とき、 1 文字足すと 約 6.4 ビット増えます。 - 記号の
初期値は 24 個です。OWASP の一覧の 32 個から、 貼り付けで 壊れやすい 8 個 (引用符、 バッククォート、 バックスラッシュ、 山括弧、 アンパサンド、 縦線) を 引きました。 サイトが 受け付けない 記号が ある ときは、 使う 記号の 欄から 消し、 外した 分は 長さで 補います。 - 見間違えやすい
文字を 除くのは、 紙に 書き写す、 電話で 伝える、 画面を 見て 手で 打つ、といった 場面の ためです。 強さは 少し 下がります。 - 同じ
文字を 使わない 設定は、 作れる 並びを 減らします。 サイトが 求めていない 限り、 入れない ほうが 強くなります。 - 個数を
増やすと、 同じ 設定で まとめて 作れます。 何個作っても、 それぞれは 独立に 作られます。
強い パスワードの 条件は、 NIST の 指針では こうなっています
米国の
- パスワードだけで
認証するなら 15 文字以上、 多要素認証の 一部として 使うなら 8 文字以上を、 最低の 長さに すること。 - 64 文字以上の
長さを 受け付ける ことが 望ましいこと。 - 大文字や
数字を 混ぜる ことなど、 文字の 種類の 組み合わせの 規則を 課さないこと。 - 定期的な
変更を 求めない こと。 ただし、 漏えいの 証拠が ある ときは 変えさせること。 - 新しい
パスワードを、 よく 使われる 値や 漏えいした値の 一覧と 照合すること。
定めるべきなのは
作った あとの置き場所
作った
多要素認証が
コードで作るなら
同じ
Python の例
make_password.py
import secrets
import string
SYMBOLS = "!#$%()*+,-./:;=?@[]^_{}~"
ALPHABET = string.ascii_letters + string.digits + SYMBOLS
def make_password(length=16):
while True:
password = "".join(secrets.choice(ALPHABET) for _ in range(length))
# 4 つの種類が 1 つずつ入るまで作り直す
if (
any(c.islower() for c in password)
and any(c.isupper() for c in password)
and any(c.isdigit() for c in password)
and any(c in SYMBOLS for c in password)
):
return password
print(make_password())実行すると
出力の例
R,Nac*U+$aIf.Sy6JavaScript の例
make-password.mjs
const ALPHABET =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%()*+,-./:;=?@[]^_{}~";
// 0 以上 max 未満の整数。割り切れない端の値は捨てて引き直す
function randomInt(max) {
const limit = Math.floor(2 ** 32 / max) * max;
const buf = new Uint32Array(1);
do {
crypto.getRandomValues(buf);
} while (buf[0] >= limit);
return buf[0] % max;
}
function makePassword(length = 16) {
return Array.from({ length }, () => ALPHABET[randomInt(ALPHABET.length)]).join("");
}
console.log(makePassword());こちらも
コードを
よくある質問
パスワードジェネレーターとは何ですか
パスワードジェネレーター (パスワード生成ツール) は、
安全な パスワードの 条件は何ですか
長い
何文字に すれば よいですか
この
大文字、 小文字、 数字、 記号は 混ぜた ほうが よいですか
混ぜると
作った パスワードは どこかに 送られますか
送られません。
Math.random では、 なぜパスワードを 作ってはいけないのですか
Math.random は
同じ パスワードを 使い回すと、 何が 危険ですか
ある
パスワードは 定期的に 変えた ほうが よいですか
NIST の
覚えられない ときは どう すれば よいですか
覚えようと
記号の 初期値は、 どう 選びましたか
初期値は
見間違えやすい 文字を 除くと、 弱くなりますか
使える
「同じ 文字を 使わない」は 入れた ほうが よいですか
サービスが
数字だけの 暗証番号も 作れますか
作れます。
何個も まとめて 作れますか
作れます。
書き手と 日付と出典
- 書き手
- ゆめさく
- 公開日
- 更新日
NIST SP 800-63B Digital Identity Guidelines Authentication and Authenticator Management
第 4 版 (2025 年 7 月に最終版として公開) ・ に本文を読んで確かめました
パスワードだけで
認証するなら 15 文字以上、 多要素認証の 一部なら 8 文字以上を 最低の 長さに する こと。 64 文字以上の 長さを 受け付ける ことが 望ましい こと。 文字の 種類の 組み合わせの 規則を 課さない こと。 定期的な 変更を 求めず、 漏えいの 証拠が ある ときは 変えさせる こと。 新しい パスワードを、 よく 使われる 値や 漏えいした値の 一覧と 照合する こと。 ほかの サイトで 漏れた パスワードを 使う password stuffing を 避ける ために、 サービスごとに 別の パスワードを 使うことが 大切だと、 パスワードの 使い勝手の 節に 書かれていること。 OWASP Password special characters
OWASP Foundation のコミュニティの頁 (版や公開日の表記は無し) ・ に本文を読んで確かめました
標準的な
US キーボードに ある 記号として、 空白を 含めて 33 個を 表に 挙げている こと ( 空白を 除くと 32 個)。 OS や アプリケーションに よっては、 使える 記号が 制限される ことがあると 書かれていること。 MDN Web Docs の英語版 ・ に本文を読んで確かめました
Math.random() は
暗号論的に 安全な 乱数を 返さないので、 セキュリティに 関わる ことには 使わず、 Crypto.getRandomValues() を 使うよう 書かれていること。 MDN Web Docs Crypto.getRandomValues()
MDN Web Docs の英語版 ・ に本文を読んで確かめました
暗号論的に
強い 乱数を 返す こと。 実装は 十分な エントロピーで 種を 与えた 疑似乱数生成器で、 暗号の 用途に 向くこと。 Python 3 ドキュメント secrets 秘密を扱うための安全な乱数
Python 3 の英語版 ・ に本文を読んで確かめました
secrets は
パスワードなどの 秘密を 扱うのに 向いた、 暗号論的に 強い 乱数を 作る こと。 random モジュールより secrets を 使うよう 書かれていること。
関係する 道具とレッスン
次の一歩
パスワードを