安全な鍵を生成する方法
適切なランダム性を使って、AES、RSA などのアルゴリズム用の暗号鍵を生成します。
问题
暗号鍵が必要ですが、十分なエントロピーと正しいサイズで生成されていることを確認したい。
前提条件
- 暗号学的乱数の理解
- 対象アルゴリズムの鍵長に関する知識
ステップ
-
1. Choose the key type and size
For AES, choose 128, 192, or 256 bits. For RSA, choose at least 2048 bits (3072+ recommended). For HMAC, the key should be at least as long as the hash output. Match the key size to your security requirements.
入力AES-256输出32 bytes (256 bits) -
2. Use a cryptographically secure RNG
Generate the key using a cryptographically secure random number generator (CSPRNG). In browsers, use crypto.getRandomValues. In Node.js, use crypto.randomBytes. Never use Math.random or other non-secure PRNGs for keys.
入力crypto.randomBytes(32)输出32 secure random bytes -
3. Store the key securely
Store the key in a secure key store, environment variable, or hardware security module. Never commit keys to source control. If deriving from a password, use a KDF like PBKDF2 or scrypt with a high iteration count and a random salt.
入力key + secure storage输出key available at runtime, not in code
期待される結果
正しいサイズの暗号論的乱数鍵。安全に保存され、ソースコードには決して露出しません。
よくあるエラー
- Using Math.random for key generation
- Math.random is not cryptographically secure. Always use crypto.getRandomValues or crypto.randomBytes.
- Deriving a key with a single hash of a password
- Use a proper KDF (PBKDF2, scrypt, or Argon2) with a high iteration count and a random salt to resist brute force.
トラブルシューティング指引
- If keys are predictable, verify the RNG source is a CSPRNG and not seeded with a known value.
- Check that the key length matches the algorithm requirement exactly.
セキュリティ上の制限
- Keys generated on this tool stay in your browser. No key material is transmitted or stored remotely.