Skip to content

第2章:一次一密、伪随机性与分组密码

一次一密

取均匀随机密钥 k{0,1}k\in\{0,1\}^\ell,加密 c=mkc=m\oplus k。对任意消息和密文,恰有一个密钥使它们对应,因此

P(C=cM=m)=2,P(C=c\mid M=m)=2^{-\ell},

与消息无关。密文分布不改变攻击者对消息的先验,这是完美保密。

结论要求密钥独立、均匀、足够长且只用一次。若复用密钥,c1c2=m1m2c_1\oplus c_2=m_1\oplus m_2,消息间关系立即泄露。一次一密也不提供完整性:翻转密文位会翻转对应明文位。

从短密钥扩展

伪随机生成器把短随机种子扩展成较长串,使有效攻击者难以区分输出和真随机串。把输出用作掩码得到计算保密,而不是信息论保密。

流密码必须避免重复使用同一密钥流。nonce 可用来为同一密钥区分不同消息;nonce 通常不需要保密,但其唯一性或其他要求由具体构造决定。

PRF 与 PRP

伪随机函数 PRF 模拟随机函数,允许不同输入碰巧同输出。伪随机置换 PRP 对固定长度块是双射,典型分组密码属于此类设计目标。

AES 是分组密码,不是完整的大消息加密协议。直接把各块独立加密的 ECB 会暴露相同块的重复模式;知道轮函数复杂并不能消除这种模式泄露。

CTR 的条件

CTR 用互不重复的计数器输入产生掩码:

ci=miEk(ctri).c_i=m_i\oplus E_k(\mathrm{ctr}_i).

计数器通常由 nonce 与块序号组织。要求同一密钥下所有这些输入不重复,不只是单条消息中序号递增。若两条消息复用了同一段计数器,便重现一次一密复用问题。

CTR 可并行计算,并支持随机访问,但依旧可篡改。工程上应采用标准认证加密方案,并严格遵守 nonce、长度和调用次数限制。

练习

  1. 用两条 4 bit 消息展示复用一次一密密钥泄露异或关系。
  2. 为什么 nonce 公开不等于密钥流公开?
  3. ECB 泄露的是明文值本身,还是至少泄露某些关系?区分两者。

上次更新: