このページのコードが起動しませんでした。

index.htmlをフォルダから直接開くと、ブラウザがJavaScriptモジュールを読み込めません。そのため長さを選んでも何も起きません。フォルダはhttpで配信してください。

powershell -ExecutionPolicy Bypass -File serve.ps1

そのうえでhttp://localhost:8080/を開いてください。

パスワード・パスフレーズ — 強い乱数を、ブラウザの中で

作るのはこのページ、動くのは手元のブラウザ。どこにも送られず、保存もされず、履歴も残りません。

言語: 日本語
ソースを見る
パスワードとパスフレーズはブラウザー内で処理されます。処理のためのアップロードはありません。

どの一文字もcrypto.getRandomValues、つまりブラウザ自身の暗号用乱数から引かれ、どの単語もこのフォルダにあるsrc/wordlist.jsから引かれます。src/のどこにもfetchもXMLHttpRequestもsendBeaconもないので、ここで作られたパスワードが私たちにも誰にも届く経路がありません。保存もしないので、このページを再読み込みすれば、これまで表示したパスワードはすべて消えます。

いまの通信: 確認中…

オフライン: 確認中…

信じる必要はありません。開発者ツールを開き、ネットワークタブを見ながらもう一つ作るを好きなだけ押してみてください。結果の一文字を運ぶ通信は一つもありません。インターネットを切ってから作ってみるのでも構いません。

1 何を作るか選ぶ

パスワードは文字の並びです。短く、強く、パスワード管理ソフトにしまっておくものです。パスフレーズはリストから無作為に選ばれた単語の並びで、打つのは長くなりますが、覚えるのも読み上げるのもずっと簡単です。自分の頭から打ち込む必要がある数少ない秘密、つまりパスワード管理ソフト自身のパスワード、パソコンのパスワード、スマートフォンの復旧コードには、こちらが正解です。

2 設定する

長さ 長さがほかのすべてに勝ちます。94文字の文字集合に1文字足すほうが、どの文字を含めなければならないという規則よりも効きます。

どの記号を使うか これらです。。空白、二種類の引用符、バッククォート、バックスラッシュはどちらの集合からも意図的に外してあります。ほかの文字と同じくらいランダムではありますが、動いていたパスワードを問い合わせに変えるのはたいていこの五つだからです。

どの種類からも最低一文字 言い張る登録フォームのための設定です。これはパスワードを強くするのではなく弱くします。それまで可能だったパスワードの一部を除いてしまうからです。下の表示はその分をすでに差し引いてあります。

見分けにくい文字を使わない I l 1 |とO 0を外します。画面から読み取って別の場所へ打ち込むパスワード向けです。その分は長さを一文字か二文字足して埋めてください。

単語数 4単語は有名な例ですが、今日では使う価値のある水準を下回ります。大事なものなら6単語が妥当な下限で、ほかのすべてを守るパスワードなら7単語です。

単語リスト 長いリストは1単語あたりサイコロ5回、つまり12.9ビットです。短いリストは4回で10.3ビット、どの語も5文字以内で、どの語もほかの語の先頭になっていません。テレビのリモコンで打ち込む、あるいはスマートフォンの画面から読み取るパスフレーズには、こちらを使ってください。

単語のあいだ この中で強さが増えるのはランダムな数字だけです。継ぎ目ごとに新しく引かれる選択であって、規則ではないからです。ほかは貼り付ける欄が何を受け付けるかの話で、空白がいちばん読みやすく、いちばん壊されやすいものでもあります。

大文字 この三つはどれも強さを足しません。どれが効いているかはこのページを見れば誰にでも分かる規則で、攻撃者が当てなければならないものではないからです。大文字を求めてくるフォームのために置いてあります。

末尾に記号を付ける 同じく言い張るフォームのためのものです。数字は本当の選択で3.3ビット、記号は8個から引くので3ビットです。

どの文字から引くか

3 持ち出す

まとめて作ることもできます 保存されるのは、画面に出ているものからこのページが書き出したテキストファイルです。書き込むのは手元のブラウザで、書き込み先は手元のディスクで、それをどこかへ送るものはありません。とはいえ、ディスクの上のパスワードだらけのファイルは、やはりパスワードだらけのファイルです。パスワード管理ソフトへ移したら消してください。

— ビットのエントロピー

攻撃者が確実に見つけるには — 通りを試す必要があります。

この見積もりが前提にしていること

攻撃者がパスワードの保管されたファイルを盗み出し、自分の機材で毎秒1000億回の総当たりをかけている、という前提です。速いハッシュ関数に対してグラフィックボードを一ラック並べたくらいの規模で、漏えいのたびに見つかるのがまさにこの種のハッシュです。bcryptやArgon2のような、パスワード向けに正しく選ばれたハッシュ関数が相手なら、同じ機材でも毎秒数千回にとどまり、上のどの答えも25ビットほど固くなります。毎秒10回しか答えないログインフォームが相手なら、どれ一つとして届きません。

この数字は意図的に厳しいほうを取っていて、しかも確実に当てるまでの回数です。平均的な攻撃はその半分で答えに行き着くので、上の見積もりはそちらを使っています。

ここは何も覚えません

このページが作ったものは、保存もされず、一覧にも残らず、送信もされません。履歴を消す必要がないのは、そもそも履歴を取っていないからです。再読み込みすれば、これまで表示したパスワードはページ自身のメモリからも消えます。控えはあなたが取ったぶんだけ、つまりクリップボードと、頼んだ場合のテキストファイルだけです。

Markdownで表示

サイトに見られずに強いパスワードを作る手順

  1. パスワードかパスフレーズかを選びます。パスワードはランダムな文字の並びで、保管しやすく、打つのは面倒で、パスワード管理ソフトが代わりに入力してくれる何百というアカウントにはこれが正解です。パスフレーズはリストから無作為に引いた単語の並びで、長い代わりに覚えられて口に出せます。自分の頭から打ち込む必要がある数少ない秘密、つまりパスワード管理ソフト自身のパスワード、パソコンのパスワード、スマートフォンの復旧コードにはこちらです。
  2. 長さ、または単語数を決めます。効くのはこの設定で、ほかはたいていそうではありません。守る価値のあるものなら20文字、または6単語が妥当な下限です。ほかのすべてを再設定できてしまうアカウントなら、そこから上げてください。下の表示はつまみを動かすたびに変わるので、1文字増やすと何が増えるのかがその場で分かります。
  3. 登録フォームが言い張る規則を入れます。「各種類から最低一つ」、末尾に数字、どのサイトでも通る短い記号。どれも強くはしませんし、最初のものはむしろわずかに弱くします。それはこのページが既に差し引いてあります。ただ、六回作り直さずに登録フォームを抜けるにはこれが要ります。
  4. 色ではなく数字を読みます。ビット数は、その文字列を生み出した設定から数えています。文字集合の大きさと、引いた回数と、それだけです。これは本当の測定で、登録ページのメーターとは違います。あちらは目の前の文字に点をつけることしかできず、それを選んだのが人か生成ツールかを知る手立てがありません。
  5. 立ち去る前にコピーして、どこかに置きます。ここには履歴がなく、もう一度出してもらう方法もありません。再読み込みすれば消えます。まずパスワード管理ソフトに貼り、そのあとで登録フォームに貼ってください。覚えておく側が先に持っていれば、途中で何かあっても失われません。
  6. まとめて要るならまとめて作ります。一番下のつまみで一度に最大100個まで作れ、テキストファイルとして保存できます。中身は画面に出ているものからこのページが書き出したものです。アカウントをまとめて開くときや初期パスワードを配るときに便利ですが、より良い場所に移したらファイルは消してください。ディスクの上のパスワードだらけのファイルは、やはりパスワードだらけのファイルです。

詳しい解説

オンラインのパスワード生成ツールを使っても安全ですか? その疑いは正しい、だから検証する:ブラウザの乱数はどこから来るのか、生成ページは何を間違えうるのか、そして目の前のページが作ったものを保持できるかどうかを見分ける検査。

よくある質問

パスワードはどこかに送られたり、保存されたりしますか。

パスワードはブラウザーで生成し、コードはアップロードや履歴保存をしません。コピーや保存は本人の選択です。共通のページ枠は設定や言語切替用の一時設定を保持できますが、生成された秘密の出力は含めません。CSPは接続先を制限し、許可済みリクエストの内容を証明するものではありません。コードと通信を確認してください。

乱数はどこから来ますか。

crypto.getRandomValuesです。暗号用途のためにブラウザが用意している乱数で、手元のOSのエントロピープールが種を与え、与え直しています。ブラウザがTLSの鍵素材を引くのと同じ出どころです。この道具ではMath.randomをどこでも使っていません。これは細かい話ではなく、Math.randomは速い算術的な乱数で、内部状態は連続した数個の出力から丸ごと復元できます。それで作られたパスワードは、ランダムに見えるだけで、一つ見た人にはすべて列挙できてしまいます。

ブラウザで作ったパスワードは、パソコンのソフトで作ったものと同じくらい良いですか。

乱数に関しては同じです。どちらもOSの同じ出どころに、別の入口から届いているだけです。違うのは、同じ部屋に何がいるかです。ブラウザのタブは拡張機能と隣り合って動きますし、ページを読む権限のある拡張機能はこのページも読めます。これはこのページを含むあらゆるウェブ上の生成ツールに言えることで、手元にパスワード管理ソフトがあるならその内蔵の生成機能を使うべき正直な理由でもあります。算術は同じで、隣に立っているものが少ないだけです。このページは、それが手元にないときのためのものです。

パスワードとパスフレーズ、どちらを使うべきですか。

管理ソフトが代わりに打ってくれるものはすべてパスワードで構いません。二度と目にしませんし、長さはただですから。自分の頭から打つか、声に出して伝える必要がある数少ないものにはパスフレーズです。管理ソフトのマスターパスワード、ディスク暗号化の鍵、遠隔で設定する機器などです。長いリストから6単語で77ビット、12文字のランダムなパスワードより強く、しかも午前4時に打ち間違えず入力できる度合いが桁違いです。

パスワードは何文字にすべきですか。

全部の文字集合で20文字ならおよそ130ビットで、長さを気にする段階はとうに過ぎています。16文字でも十分です。失って困るものの下限が12文字で、これは下限であって目標ではありません。それより短いと、サイトが正しく保管していることに賭けることになりますが、この20年の漏えい通知はその賭けを勧めていません。長さはこのページのどの設定にも勝ちます。1文字増やすほうが、どの文字を含めという規則より効きます。

パスフレーズは何単語にすべきですか。

長いリストから6単語、他のパスワードを守るものなら7単語です。有名な4単語の絵は2011年のもので51ビット、今日では本気のオフライン攻撃の射程に入ります。5単語で64、6単語で77です。普通のアカウント一つに攻撃者が費やす額を超えています。長いリストの1単語ごとに12.9ビット増え、増えるのは単語だけです。ハイフンも大文字も増やしません。

「ビット」とは何で、なぜこのページはそれを数えるのですか。

1ビットは倍になることです。60ビットとは、このページが出しえた同じ確からしさの結果が2^60通りあったということで、仕組みを完全に知っている相手でも、なおそれだけ試す必要があります。これは文字列の性質ではなく手順の性質です。このページは選んだ当人で、何回選んだかを知っているので、正確に言えます。そこが登録フォームの色付きバーとの違いで、あちらは文字を読んで当てているだけです。あのバーではcorrect horse battery stapleは評価が低く実際は44ビット、P@ssw0rd!は評価が高く実際はほぼ無価値です。

「記号を必ず含める」がパスワードを弱くするのはなぜですか。

規則は可能性を減らすことしかできないからです。各種類から最低一つを求めると、たまたま一つも入らなかったパスワードがすべて除かれます。ありうるパスワードの集合が小さくなれば、探す範囲も小さくなります。効きは小さく、普通の長さでおよそ0.5ビットですが、それは実在します。このページは自分に都合のよい数字を出さずに、これを差し引いています。しかも、規則が実際に許すパスワードの数を数えて正確に求めています。

この単語リストは何で、攻撃者がダウンロードできることは問題になりませんか。

Electronic Frontier Foundationのdicewareリストを、そのまま同梱しています。長いほうが7,776語、短いほうが1,296語です。まさにこの用途のために作られていて、不快な語がなく、同音異義がなく、つなげると別の語になってしまう組み合わせがなく、短いリストではどの語も他の語の先頭になっていません。そして、リストが公開されていることは問題になりません。ここに書かれた強さは、攻撃者がリストを持ち、このページのソースを読み、使った設定をすべて知っている前提で計算しています。分からないのは、毎回7,776語のどれが出たかだけです。その前提こそが、この数字を信用できるものにしています。

パスフレーズは辞書攻撃を待っているようなものではありませんか。

こういう選び方をしている限り違います。辞書攻撃が効くのは人が考えたフレーズです。人は互いに馴染む語を、意味の通る順で、日ごろ使う数千語の中から選ぶからです。このページは固定されたリストから、一語ずつ独立に、均等に引き、読み心地は一切考えません。だからたいてい読み心地は悪くなります。リストも単語数も知っている攻撃者の前に残るのは、7,776の単語数乗です。

ページを離れたあとで、パスワードを取り戻せますか。

できませんし、そうしてあります。どこにも書き留めないので、取り戻すものがありません。履歴の画面も、「最近作ったもの」の一覧も、キャッシュもありません。先週の火曜のパスワードを見せられる生成ツールとは、それを保存していた生成ツールです。自分が取り出せる場所に保存されているということは、ほかの何かも取り出せる場所に保存されているということです。離れる前にパスワード管理ソフトへコピーしてください。

クリップボードにコピーしても安全ですか。

ごく普通の危険で、恐れるより知っておくほうが役に立ちます。クリップボードは同じ利用者として動いているすべてと共有され、たいてい次にコピーするまで残り、設定によっては端末間で同期されます。だから貼るべき場所にすぐ貼って、その後に別のものをコピーするのがよいのであって、代わりに弱いパスワードを手で打つ理由にはなりません。このページはクリップボードを読めません。書き込めるだけで、しかもボタンを押したときだけです。

同じものを複数の場所で使ってもいいですか。

いけません。これはこのページのどの助言よりも上に来る唯一の一つです。乗っ取られるアカウントのほとんどは、先に別の場所で正しかったパスワードで乗っ取られます。あるサイトが破られ、一覧が公開され、同じアドレスと同じパスワードがあらゆる場所で試されるからです。サイトごとに違うパスワードにすれば、漏えいの被害は全部ではなく一つで済みます。パスワード管理ソフトを使う理由はここにあるのであって、中に入っている個々のパスワードの強さではありません。

無料ですか。アカウントは要りますか。

無料です。アカウントもログインも試用期間もなく、いくつ作ってもかまいません。このサイトは広告で成り立っていますが、広告にはこのページが作るものについて何も渡りません。長さも強さも渡りません。

オフラインでも動きますか。

動きます。一度ページを読み込んでからインターネットを切っても、パスワードは作り続けられます。乱数は手元の端末から来ますし、単語リストはすでにページの中にあります。これは、何も取りに行かず何も送っていないことの一番簡単な証明でもあります。数字をサーバーに取りに行く生成ツールなら、線を抜いた瞬間に止まります。