密码学进阶主题:从伪随机数生成到可证明安全性
1. 伪随机数生成器(PRNG)
伪随机数生成器是密码学中的重要工具,有一种构建 PRNG 的方法已被接受为公共标准。其操作步骤如下:
1. 从一个随机种子 S 和密码系统的密钥 K 开始,设 EK 为相关的加密函数。
2. 每次需要随机数时,利用一些系统参数(如计算机 CPU 返回的日期和时间)形成一个数字 D,使用密钥 K 对 D 进行加密,即 C = EK(D)。
3. 输出“随机”数 R = EK(C xor S),并将 S 替换为 EK(R xor C)。
PRNG 也可以用作对称密码。种子值 S 是 Alice 和 Bob 的私钥。为了发送消息 M,Alice 将 M 拆分为多个片段 M = M0 ∥M1 ∥M2 ∥···,然后对第 i 个片段进行加密,加密方式为 Ci = Mi xor Ri。由于 Bob 知道种子值 S,他可以计算出与 Alice 用于加密相同的伪随机字符串 R0∥R1∥R2∥···,从而通过 Mi = Ci xor Ri 恢复消息。
基于哈希函数(如 SHA)或对称密码(如 DES 或 AES)的 PRNG 速度快,并且据目前所知,在密码学上是安全的,但它们的安全性并非基于对一个众所周知的数学问题的归约。而有些 PRNG 的安全性可以归约为解决一个困难的数学问题(如因式分解),但这类 PRNG 速度要慢得多,因此在实际中很少使用。
2. 零知识证明
零知识证明涉及两个角色:证明者 Peggy 和验证者 Victor。非正式地说,零知识证明是一种允许 Peggy 让 Victor 相信某个事实为真,而不向 Victor 提供任何能