要构建 CPA 安全方案,我们首先需要引入伪随机函数的概念。
但首先我们将定义 3.22 (CPA已知明文攻击下的安全性定义)扩展到多重加密的情况。
伪随机函数
Pseudorandom function(PRF): a keyed, efficiently computable function that can’t be efficiently distinguished from a random function.一种带密钥的的、可高效计算的函数,无法有效地与真随机函数区分开来。
(通过oracle实验来证明安全性)
伪随机置换 Pseudorandom permutations
伪随机置换函数 Permn ⊂ Funcn,表示{0, 1}^n上的所有排列:
|Permn| = 2^n!
定理:
强伪随机置换
对于一个排列函数,反向查询也有很好的定义。即允许反向查询也是安全的 PRP 称为强 PRP。
在实际应用中,分组密码算法(AES,DES)是强PRP。
注:满足CPA安全的算法必须是概率加密算法。
(注:可使用归约证明)
PRG 与流密码 & PRP与分组密码
在现实世界中,PRG 是使用流密码实例化的。
PRP 使用块密码实例化。实际上,分组密码是 PRP 的别称。
PRG由于输出的长度固定,它是不灵活的:
在实践中用于实例化 PRG 的流密码提供了更大的灵活性:输出比特是按需逐渐产生的;形式上,流密码是一对确定性算法(Init,Next),其中:Init 将种子 s 和可选的初始化向量 IV 作为输入,并输出一些初始状态 st。Next 将当前状态 st 作为输入并输出位 y 以及更新状态 st' 。 流密码操作模式:同步模式和非同步模式
同步模式通常用于各方之间的单个通信会话,其中状态是可接受的并且消息按顺序接收而不会丢失。
分组密码操作模式:提供一种以较少(密文大小、随机性)开销加密任意长度消息的方法。
- ECB模式:将分组密码应用于每个明文块——确定性算法
- CBC模式:(类似同步流密码)——加密只能顺序进行。
- Chained CBC:重用最后一个密文块作为新的 IV。——“BEAST attack”
- OFB模式:(类似异步流密码)——可以使用任何 PRF 代替 PRP;明文长度不需要是n的倍数;与 CBC 不同,有状态变体(其中最后一个 yℓ 用作下一次加密的 IV)是安全的;仍然像 CBC 一样按顺序加密,但是可以在知道 mi之前计算 yi(预处理)。
- CTR模式:IV 和计数器(counter i)长度随意,只要它们总和为n。更长的 IV 会带来更好的具体安全性,但也会减少可加密的消息的最大长度。——可完全并行化;可解密单个块。
具体的安全性:使用块大小足够大的 PRF。
像 DES 中那样 n = 64 是不够的,因为 2^n/2 只有 ∼ 34GB 的明文,N = 128 的 AES 就足够了。