カギバコ

パスワードもファイルも、送らずに作る・確かめる

コマンドでパスワードを生成する

設定に合わせてコマンドを組み立てます。これらはお使いの端末の中で完結し、ネットワークを通りません。このページ自体も、コマンドを組み立てるために通信することはありません。

macOS / Linux

/dev/urandom

tr -dc は指定した文字集合に含まれないバイトを捨てます。これは棄却サンプリングそのもので、出現確率に偏りが出ません。LC_ALL=C はロケールによって文字クラスの解釈が変わるのを防ぎます。

macOS / Linux

openssl

openssl rand は暗号用途の乱数を生成します。base64 は 3 バイトを 4 文字に変換するため、必要な文字数から逆算してバイト数を指定しています。このコマンドだけは上の文字種の指定が反映されません(長さのみ反映されます)。base64 の文字集合になるため、記号は + と / の 2 種類だけが含まれ得ます(= は取り除いています)。

Python 3

secrets

secrets モジュールは認証情報の生成のために用意されたものです。random モジュールは再現性のために設計されており予測可能なので、パスワードには使わないでください。

Windows

PowerShell

Get-Random は暗号学的に安全な乱数源であることが保証されていないため使いません。RandomNumberGenerator::GetInt32 は上限を指定した偏りのない整数を返します。

これらのコマンドはお使いの端末の中で完結し、ネットワークを通りません。このページ自体も、コマンドを組み立てるために通信することはありません。

よくある質問

なぜ /dev/urandom や openssl rand を使うのですか?

どちらも暗号用途に設計された乱数源(CSPRNG)だからです。シェルの RANDOM や多くの言語の標準的な乱数関数は、速度と再現性のために設計されており予測可能な場合があります。パスワードには使わないでください。

PowerShell の Get-Random を使わないのはなぜですか?

Get-Random は暗号学的に安全な乱数源であることが保証されていません。このページが出力する PowerShell のコマンドは System.Security.Cryptography.RandomNumberGenerator を使います。

tr -dc を使う方法に偏りはありませんか?

ありません。tr -dc は指定した文字集合に含まれないバイトを捨てる動作で、これは棄却サンプリングそのものです。逆に、乱数を文字数で割った余りを使う方法(配列の添字に剰余を使う実装)は文字ごとの出現確率が偏るため避けてください。

パスワードを返す Web API は用意していないのですか?

意図的に用意していません。API はサーバー側で値を生成して通信で返すため、生成した値がサーバーと通信経路を通ります。本サイトは「生成したものを外に出さない」ことを前提に作っているので、その前提を崩す機能は置かないことにしました。使い捨てのテストデータが必要な場合も、上のコマンドをそのままスクリプトに埋め込むほうが速く、かつ安全です。