調べて分かる道具箱

パスワード生成

暗号用の乱数で作ります。長さと文字を選べます。作った値はこの機器から出ません。

長さ文字
使う文字
紛らわしい文字

使える文字は82種類20文字なら127ビットとても強い)で、 1秒に100億回試されても平均300,000,000,000,000百万年かかります。

よくある質問

何文字にすればよいですか?

米国 NIST のガイドライン(SP 800-63B)は、そのパスワード1つでログインする用途なら15文字以上を求めています。二段階認証と組み合わせる場合でも8文字以上です。この道具の既定は20文字にしてあります。覚える必要がなく、パスワード管理ソフトに保存するなら、長くして困ることはありません。

記号は必ず入れるべきですか?

いいえ。NIST は「大文字・数字・記号を混ぜること」のような文字種の強制を禁じています(SHALL NOT)。理由は、人がその要求に予測できる形で応じるためです。password を選ぼうとした人は、大文字と数字を求められると Password1 にし、記号も求められると Password1! にするだけで、攻撃側はその変形をすでに知っています。文字種を増やすより長くするほうが、はるかに効きます。

定期的に変えたほうがよいですか?

いいえ。NIST は定期的な変更を求めてはならないと定めています(SHALL NOT)。定期変更を課すと、人は Pass01 → Pass02 のように予測できる変え方をするため、かえって弱くなります。変えるべきなのは、漏れた疑いがあるときです。

この道具で作った値は安全ですか?

ブラウザの暗号用の乱数(crypto.getRandomValues)を使っています。Math.random は予測できるため使っていません。また、作った値はお使いの機器の中だけで生まれ、通信は一切していません。ただし画面に表示している以上、共有の端末や、後ろから見られる場所では気をつけてください。

紛らわしい文字を外すと弱くなりませんか?

少しだけ弱くなります。5文字ぶん減るので、たとえば94種類が89種類になり、20文字なら約1.7ビット下がります。紙に書き写す場合など、l と I と 1、0 と O を読み違える危険のほうが大きい場面では、外したうえで1〜2文字長くするのが確実です。

「大文字・数字・記号を1つずつ」は、もう勧められていません

米国 NIST のデジタル・アイデンティティ・ガイドライン(SP 800-63B)は、 パスワードに文字種の組み合わせを強制してはならないと定めています。 推奨しない、ではなくSHALL NOT(してはならない)です。

理由は、人がその要求に予測できる形で応じるからです。 同文書はこう説明しています ── password を選ぼうとした利用者は、 大文字と数字を求められれば Password1 を選びやすく、 記号も求められれば Password1! にするだけだ、と。 攻撃側はその変形をとうに知っているので、規則を課しても強さはほとんど増えません。

同じ文書は、定期的な変更を求めてはならないとも定めています。 定期変更は Pass01 → Pass02 のような予測できる変え方を生むためで、 変えるべきなのは漏れた疑いがあるときだとされています。

効くのは長さです

文字種を増やすことと長くすることのどちらが効くか、数で比べられます。 総当たりの手間は「文字の種類数の、長さ乗」なので、長さは指数のほうに乗ります

総当たりで何通りあるか(2を底とした桁数)
作り方何ビットか
数字だけ4桁暗証番号約13ビット(1万通り)
4種類すべてを使った8文字よくある「複雑さの規則」を満たしたもの約52ビット
小文字だけ16文字記号も数字も大文字も無し約75ビット。文字種を絞っても、長いほうが上
4種類すべてを使った20文字この道具の既定約131ビット

「小文字だけ16文字」が「4種類で8文字」より強いのが、この話の要点です。 覚えられる形にしたいなら、記号を混ぜるより語をいくつも並べて長くするほうが、 覚えやすさと強さの両方で勝ちます。