密码学场景必须使用 CSPRNG(密码学安全伪随机数生成器),要求输出不可预测——攻击者知道之前所有输出也无法推测下一个。普通 PRNG(Math.randomjava.util.Random、C 的 rand())种子可猜(常为时间戳),用于生成 token、密钥、nonce 时会被预测。历史教训:Debian OpenSSL 弱随机事件。正确选择:Java SecureRandom、Python secrets、Node crypto.randomBytes、浏览器 crypto.getRandomValues

密钥管理原则:1)密钥不出现在代码、配置仓库和日志中(硬编码密钥是泄露重灾区,GitHub 扫描机器人分钟级捡漏);2)用 KMS/Vault/HSM 集中托管,运行时按身份动态获取,采用 KEK 加密 DEK 的信封加密;3)定期轮换,泄露可快速吊销;4)不同用途密钥隔离(加密/签名/MAC 不混用);5)内存用完即清,备份同样加密。易错点:nonce 可以公开但不能重复,密钥必须保密。追问方向:信封加密、HSM 与 KMS 区别、密钥派生函数(HKDF)。