410 字
2 分钟
伪随机生成器与流密码:用短密钥保护长消息
一次一密要求密钥与消息等长,现实系统难以承担这种分发成本。伪随机生成器(PRG)提供了另一条路线:由短种子确定性地产生很长、计算上难以区分于随机数的序列。
PRG 的形式
其中 是种子长度、 是输出长度。相同种子必然产生相同输出;它的安全要求不是“真正随机”,而是有效攻击者无法在计算上将输出与真正随机序列区分开。
短种子 → PRG → 长伪随机密钥流流密码如何加密
流密码将 PRG 生成的密钥流与明文逐位或逐字节异或:
解密使用同一密钥流再次异或即可恢复明文。它的结构与 OTP 相似,核心差异在于密钥流来自短密钥和算法,而非等长真随机密钥。
| 维度 | 一次一密 | 流密码 |
|---|---|---|
| 密钥材料 | 真随机、与消息等长 | 短密钥与 nonce/IV |
| 安全基础 | 信息论安全 | 计算安全 |
| 可扩展性 | 很差 | 很好 |
密钥流不能复用同一密钥和 nonce/IV 组合绝不能加密两条消息。复用后会产生与 OTP 密钥复用相同的问题:攻击者可通过两个密文的异或得到两个明文的异或。
实践建议
不要自行组合“PRG + XOR”实现加密。工程中优先使用带认证的成熟方案,例如 ChaCha20-Poly1305 或 AES-GCM,并由可靠库负责 nonce、标签验证与密钥管理。
伪随机生成器与流密码:用短密钥保护长消息
https://blog.xqcherry.top/posts/cryptography/prg-and-stream-ciphers/