秘密鍵の生成

APIキー・セッションの秘密鍵・パスワードのためのランダムな文字列を作ります。長さと使う文字の種類を選ぶと、その結果が実際に何ビットの情報量を持つかも出ます。

長さ

32文字

使う文字

記号: !#%*+-.:=?@^_~

個数

生成した鍵

約0ビット · 短めです。人が覚える必要がないなら、もっと長くしてください

    ブラウザの中で作られ、どこへも送られません。 乱数は crypto.getRandomValues から取っています — Math.random は予測できてしまうので、鍵には決して使ってはいけません。選んだ種類それぞれから少なくとも一文字を入れたうえで、全体を混ぜ直し、位置に偏りが出ないようにしています。

    長さと文字の種類

    長さは16・32・64のボタンか、スライダーで8から128まで決めます。種類は digits(10字)・lower(26字)・upper(26字)・symbols(14字)の四つで、オンにした種類からは必ず一文字は入ります — ただ引くだけだと、記号をオンにしたのに一つも無い鍵ができ、それを求めるシステムに弾かれるからです。個数は1・5・10で、複数なら「すべて写す」が改行でつなぎます。

    ビット数の数え方

    長さ × log2(使える文字数) を切り捨てた値です。四種類すべてなら76字で、一文字あたり約6.25ビットです。64ビット未満が「短め」、128ビット未満が「普通」、それ以上が「十分」です — 四種類で16字なら99ビット、32字は199ビットです。種類ごとに一文字を保証する規則は、この計算には入れていません。

    紛らわしい文字を除く

    オンにすると 0・O・1・l・I の五つをすべての種類から除きます。手で書き写す鍵のためのものです。文字が76字から71字に減るので、同じ長さでもビット数が少し下がります。

    ブラウザで作り、どこにも送りません

    乱数は crypto.getRandomValues から来ます。作った値はサーバーへ行かず保存もしないので、再読み込みすれば別の値が出て、前の値は取り戻せません。同じ設定でもう一度引くには「もう一度生成」を押します。

    よくある質問

    記号が少ないのはなぜですか

    貼り付けた先で生き延びる記号だけを入れているからです。シェルでは $ が変数として展開され、バッククォートはコマンドとして実行されます。引用符と逆斜線は文字列を終わらせ、/ はURLでは区切りです。.env ファイルでも同じことが起きます。使える文字は少し減りますが、長さを一つ二つ足せば十分に取り返せます。

    乱数は安全ですか

    crypto.getRandomValues を使っています。Math.random は予測できてしまい、鍵を作ってはいけません — 同じブラウザから数個の値を観察すれば、次の値が言い当てられます。ランダムなバイトを文字の集合へ写すときに生じる剰余の偏りも取り除いています。

    何ビットあれば足りますか

    128ビットを超えていれば安心で、64ビットを下回ると短めです。大文字・小文字・数字・記号をすべて入れると1文字あたり約6ビットなので、32文字で199ビットになります。設定を動かすと、この数字が画面に出ます。

    数字だけにすると「短め」と出るのはなぜですか

    数字は十個しか無いので、一文字あたり約3.32ビットです。16字なら53ビットで、64に届きません。数字だけで「普通」になるには20字、「十分」になるには39字が要ります。

    記号をオンにしたのに一つしか無いのはおかしいですか

    いいえ。種類ごとに一文字は保証しますが、それ以上は無作為です。記号は76字のうち14字なので、32字なら六つほどが平均で、一つだけということもあります。

    貼り付けたものはサーバへ送られますか

    送られません。すべてブラウザの中で動き、送信も保存もしません。だからこそ、ふつうならウェブページに貼り付けない社内の設定ファイルや本番のクエリにも使えます。通信を切ったままでも動きます。