ランダムキー生成
Random Key Generator
暗号学的な乱数バイトを指定した長さで16進・Base64・Base64URLとして生成し、アプリのシークレットに使えるようにします。
`SECRET_KEY`やJWTの署名鍵には、決められた長さの無作為なバイト列を、決められた符号化で置く必要があります。よくあるその場しのぎ、つまりキーボードを適当に叩いたもの、UUID、プロジェクト名のハッシュは、どれも見た目よりエントロピーが足りません。ここではそのバイト列を生成して符号化します。
ランダムなシークレット
muku2V-eL-RMqLypbBA5sbhBIm_uIl5Q0kuK1VO-HdcJWK(oct)として見る
{
"kty": "oct",
"k": "muku2V-eL-RMqLypbBA5sbhBIm_uIl5Q0kuK1VO-Hdc",
"ext": true
}WebCrypto の鍵
本物の CryptoKey を JWK として書き出したものです。crypto.subtle にそのまま渡せます。
どのバイトも crypto.getRandomValues から出ていて、このタブの外には出ません。サーバーで作ることも、サーバーへ送ることもありません。
使い方
バイト数を選びます
32バイト(256ビット)でほとんどのものは足ります。HMAC-SHA256、AES-256、セッションの鍵などです。これらについては、長くしても強くはなりません。役に立つ長さはアルゴリズムが決めます。
設定が求める符号化を選びます
16進は曖昧さがなく、長さは2倍になります。Base64URLは`+`、`/`、`=`を避けるので、URLやヘッダー、あるいは何かが解析する`.env`ファイルに置くならそちらです。
リポジトリではなく、秘密の保管場所に置きます
一度コミットされた鍵は、そのコミットをどれだけ速く取り消しても、差し替えなければならない鍵です。環境ごとに別の鍵を生成してください。
よくある質問
無作為さはどこから来ていますか。
ブラウザのCSPRNGである`crypto.getRandomValues`で、OSから種を得ています。送信されるものも保存されるものもありません。
ブラウザで作った鍵は`openssl rand`で作った鍵と同じくらい良いものですか。
無作為さの質は同じです。どちらもOSから引いています。違うのは、鍵がどこに表示されるかです。画面の上であり、その画面は同期しているブラウザかもしれませんし、DOMを見ている拡張機能が入っているかもしれません。自分の管理下にない端末では、コマンドラインを使ってください。
これをUUIDに使えますか。
代わりにUUID生成を使ってください。UUIDv4は決まった配置を持ち、6ビットをバージョンとバリアントに使うので、素の無作為な文字列は正しいUUIDになりません。
ここから渡せます
UUID生成
UUID Generator
UUIDのv1・v4・v5・v7をまとめて作り、v1やv7に埋まっている時刻を取り出します。
ULID・NanoID生成
ULID & NanoID Generator
並べ替えのきくULIDや短いNanoIDを、使う文字と長さを決めて作り、衝突の確率も示します。
HMAC生成
HMAC Generator
ハッシュの種類と鍵の符号化を決めてメッセージのHMACを計算し、Webhookの署名確認に使えます。
テキストの暗号化・復号
Text Encrypt & Decrypt
パスフレーズからAES-GCMでメッセージを暗号化し、それだけで完結するBase64の塊にします。
次の一手
このツールが出したものをそのまま受け取れる道具です。
.envの解析・変換
.env Parser & Converter
.envファイルを解析して、JSON・YAML・シェルのexport・Docker・Kubernetesの形式に変換します。
HMAC生成
HMAC Generator
ハッシュの種類と鍵の符号化を決めてメッセージのHMACを計算し、Webhookの署名確認に使えます。
パスワード生成
Password Generator
長さ・使う文字種・紛らわしい文字を除く規則を決めて、必要な本数だけランダムなパスワードを作ります。
UUID生成
UUID Generator
UUIDのv1・v4・v5・v7をまとめて作り、v1やv7に埋まっている時刻を取り出します。
怪しいURLの確認
Suspicious URL Check
開く前にリンクの形(紛らわしい文字・IPそのままのホスト・@のごまかし・深いサブドメイン・妙なポート・短縮サービス)を調べ、望めばリダイレクトをたどってドメインの登録時期も引きます(評判データベースは使いません)。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。