おれさまラボ

実際に手を動かして理解を深めるブログ。

セッション秘密鍵の生成方法

はじめに

SESSION_SECRET の生成方法がいつも分からなくなるので、備忘としてメモを残しておきます。

前提知識

SESSION_SECRETとは

SESSION_SECRET は、セッション情報を保護するために使われる秘密鍵です。 多くの Web フレームワークや認証ミドルウェアで使われており、以下のような用途があります。

  • セッションクッキーの署名
  • セッションIDの改ざん防止
  • CSRFトークンなどの内部生成値の保護

「十分にランダムで、推測できない値」であることが重要なので、よくある設定例として、32 bytes 以上(64 hex 文字)のランダム値が求められます。

手順

OpenSSL

openssl が入っていれば、bash ワンライナーで一発です。

openssl rand -hex 32

これで以下のような 64 文字の hex 文字列が出力されます。

9f3c2a8e5d1b4c0f8e6b9d2a7f1c3e4b5a6d8c9e0f1a2b3c4d5e6f7a8b9c0

これをそのまま .env に設定すればOKです。

SESSION_SECRET=9f3c2a8e5d1b4c0f8e6b9d2a7f1c3e4b5a6d8c9e0f1a2b3c4d5e6f7a8b9c0

PowerShell

Windows環境であればPowerShellも良いでしょう。

[Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Maximum 256 }))

urandom

opensslがない場合、/dev/urandom でも生成可能です。

head -c 32 /dev/urandom | xxd -p -c 256

Python

Pythonが使えるなら以下でも良いでしょう。

python3 -c "import secrets; print(secrets.token_hex(32))"

Node

Node が入っていればこれも手軽です。

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

おわりに

これでもう困らない。将来の自分、頑張れ。

以上。