短い答え
この問いの奥にある疑いは、まさに正しい疑いです。手放さないでください。パスワードを作るページは、受け取るべき機微なものを何も持たず、保持しうる機微なものだけを持つ、ウェブでただひとつのページです。その出力こそが秘密であり、作ったものを送信する生成ツールは、弱い道具ではなくパスワードの収集装置です。問いは、生成ページが信頼できそうに見えるかどうかでは決してありません。その気になればパスワードを保持できてしまうのかどうか。そしてそれは、珍しいことに、検証できるのです。
決め手は三つ。乱数がどこから来るか。結果がページを離れられるか。結果のどこかが予測可能か。三つとも、訪問者が自分で確かめられる正直な答えを持っています。誰ものぞけないウィンドウの中で生成する、ダウンロードしたアプリについて言えることより、これは多いのです。
ブラウザの乱数はどこから来るか
ブラウザの中のまともな生成ツールは、みなひとつの井戸から汲みます。crypto.getRandomValues。ブラウザの暗号学的乱数生成器で、OSがハードウェアの雑音から種を与え、与え続けます。ブラウザがTLSの鍵材料を汲むのと同じ源です。あなたの銀行との通信が乗っている、あの暗号の源。デスクトップのプログラムがウェブページより良い乱数に触れられるという意味のある言い方は存在しません。どちらも同じOSの井戸に行き着くのですから。
ページが使ってはならないのはMath.random()、サイコロを振るための日用関数です。ブラウザはこれを高速な生成器で実装しており、その内部状態は連続した出力を一握り見れば再構成できます。つまり、その上に築かれたパスワードは、乱数に見えて、ひとつでも見た者には計算できるのです。机上の話ではありません。出回っている生成ツールに対して、一度ならず実証されています。しかも外からは見えません。これが、コードを読める生成ツールを推す最強の論拠です。二つの関数の違いは、ソースの中のたった一語なのですから。
その先に、もう一段細かい丁寧さがあります。ランダムな32ビットの語から単純な剰余で「26未満の数」を作ると、若い文字のほうへごくわずかに偏ります。丁寧な生成器は剰余を取る代わりに引き直します。ここの生成ツールはそうしています。避けている偏りはおよそ1億6500万分の1。使う分には見えませんが、仕事のために作られた道具と、掲示板から貼られた断片とを分けるのは、まさにこの種の細部です。
悪い生成ページにできること
失敗のかたちを名指ししておきます。どれも検証できるからです。
- パスワードを送り出す。ページはローカルで生成し、それから作ったものを送ります。クリックと同時に、計測と一緒に、後でまとめて。これが失格となる型で、そして見えます。ネットワークリクエストでなければならず、リクエストは見張れるのです。
- サーバーで生成します。パスワードがネットワークを出ていく代わりに、ネットワークからやって来る。つまり運営者が先に見ており、どう作られたかについてあなたは何も知りようがありません。同じ検査の、逆向きです。
- 弱く生成します。
Math.random、時刻を種にする、数百語のリストを強いと称します。これはネットワークタブでは捕まりません。読めるソースだけが捕まえます。あるいは、実際の設定から数えた正直な強度表示が。 - 履歴を持つ。親切のつもりで直近二十個のパスワードを覚えておく。タブより長生きする保存領域に、共用かもしれない機械の上で。
このサイトのパスワード・パスフレーズ生成ツールは、四つすべてに対して作りからして備えています。crypto.getRandomValuesのみ、生成はページの中、いかなる保存もなし、履歴もなし、そしてあなたの設定で何通りの結果がありえたかを正確に数えて報告する強度の行。パスフレーズの単語リストはEFFのダイスウェアのリストで、道具自身のフォルダーに、無改変で同梱されています。
どの生成ツールも検査するやり方。これも含めて
方法の全文はアップロードのガイドにあり、どのページより先に適用すべきなのがこのページです。
- まずプラグを抜く。ページを読み込み、オフラインにして、それから生成します。接続なしで作られたパスワードは、外から取り寄せられたはずがなく、作られた瞬間に送られたはずもありません。このページはオフラインでも動き続けます。それが存在意義です。
- 生成しながらネットワークタブを見る。ボタンを押して一覧を読む。何も発ってはいけません。次にパスワードをコピーして、もう一度見る。コピーこそ、不正直なページが選ぶ瞬間です。
- 収集装置に必要なものを探す。アカウント、同期機能、「最近生成したもの」の一覧。記憶を持つ生成ツールは、写しを持っています。
正直な但し書きを最後に。検査が教えるのは、あなたが見ているあいだにページが何をしたかです。公開され、読める形で配られるコード——このサイトのすべてがそうであるように——が教えるのは、ページが一般に何をするかです。残るのは機械そのもの。乗っ取られたブラウザやキー入力を盗む何かからパスワードを守れるウェブページは存在せず、生成ツールも例外ではありません。検査が買ってくれるものはもっと小さく、そして本物です。どのサーバーも一度も見なかったパスワード。読むことを許された算術が作ったパスワードです。