文章目录
计算性安全
- 要求:
- 该安全仅对在限制时间且限制计算能力下保证安全。
- 攻击者有极小的概率可以攻击成功
- 方法:
- 具体方法:显式地限制任何对手运行在一定特定时间内的最大成功概率(通过投资计算)。其中(t,ε)-secure,如果攻击者在最多t时间内以最多ε的概率成功地打破了方案,那么方案是安全的。如果密钥的长度为 n,敌手在时间 t 内能够有ct/2n的概率破解这个加密方案,其中 c 为一个固定的常数。
- 渐进方法:对于任何PPT,对手以最多可以忽略的概率打破了该方案,那么该方案是安全的(该方案是渐进的,因为安全性依赖于n)。这种方法植根于复杂性理论,引入了一个整数值安全参数(用n表示),它参数化了加密方案和所有相关方(即通信方和攻击方)。现在将敌手的运行时间以及其成功的概率看作一个带参数的函数,而不是一个具体的时间。
- n:安全性参数,由参与安全协议的所有相关方参数化获得
- PPT:概率多项式时间
- 渐进方法会随着大家计算机运行速度的提升越来越强,再部署于实践时还是要转化为具体方法
- negl:成功概率可以忽略不计的函数。一个从自然数映射到非负实数的函数 f 是可以忽略的,如果对于每个多项式 p 都有一个 N 对于所有整数n > N使得 f(n) < 1/p(n)。
- 若negl3(n) = negl1(n)+negl2(n),那么negl3(n)是可忽略的
- 对于任意正多项式p,negl4(n) =p(n) *negl1(n),那么negl4(n)是可忽略的。(暗示如果某一事件在某一实验中发生的概率只可以忽略不计,那么即使实验多项式重复多次,该事件发生的概率也可以忽略不计。)
对称加密的计算性安全
- 定义:对称加密方案是概率多项式时间算法的一个元组(Gen、Enc、Dec),其中包括:
- Gen:将1n作为输入(即,安全参数为一元),输出密钥 k ;我们写 k←Gen(1n) (需要强调Gen是随机算法)。不失一般性,假设Gen(1n)输出的任何密钥 k 满足 |k|≥n。
- Enc:将密钥 k 和明文 m ∈ {0,1}* 作为输入,然后输出密文 c ;考虑到Enc可能会被随机化,可以写成 c←Enck(m)。
- Dec:将密钥 k 和密文 c 作为输入,输出明文 m 或者一个错误;假设Dec是确定的,则可以写成 m := Deck© ,(假设Dec不会返回一个错误),并且用\bot来表示错误。
- 正确性要求:对每个 n ,由Gen(1n)生成的每个密钥 k 以及每个明文 m ∈ {0,1}*,都有Deck(Enck(m)) = m。
无状态的加密方案:Enc(和Dec)的每次调用都独立于所有先前的调用。
有状态的加密方案:发送方(可能还有接收方)需要在多次调用中维护状态
窃听者存在下的不可区分性的定义:一个加密方案是窃听者存在下的不可区分性的或者是窃听安全的,当且仅当对所有运行在PPT上的敌手 A,存在一个可忽略函数 negl ,对所有 n 有:Pr[PrivKeavA, Π (n)=1] ≤ 1/2 + negl(n),换言之即敌手成功的概率和失败的概率相差一个可忽略函数
- 被动攻击下的窃听实验(PrivKeavA, Π (n)):
1. 敌手A获取了1^n,输出一对明文m0, m1,其中|m0| = |m1|。
2. 通信方通过运行Gen(1^n)生成密钥k(),并选择一个统一的bit b∈{0,1}。密文 c←Enck (mb) 返回给敌手A;
3. A输出一位猜想b '。
4. 如果b ' = b,则定义实验输出为1,否则为0。 如果PrivKeavA, Π (n)=1,则A成功了。
5. Gen(1^n)表示将{0,1}^n作为参数输入
加密与明文长度:当使用加密算法的时候需要考虑是否会泄露明文的长度(虽然大部分加密不要求不泄露)
- 如果可以加密任意长度的明文则不可能隐藏所有关于明文的信息
- 如果泄露了明文的长度则会带来一些新的问题。
语义安全
-
定义:一个对称密钥加密方案(Gen , Enc, De功 。 如果对于每个概率多项式时间算法A,存在一个概率多项式时间算法A’,使得对所存的有效可采样的分布X = (X1 , … ) 以及所有多项式时间 可计算的函数f和h, 存在一个可忽略函 数negl满足
- 有效可采样,Sn = S与{0, 1 }^n,对于输入1 ^n,输出Sn中1个均匀分布的元素,那么S是有效可采样的
- f(m):攻击者想要计算的明文函数,本身是任何多项式时间可计算函 数
- h(m):攻击者已经知道的外部明文信息
- 等式的含义:攻击者在知道h(m)和密文c,敌手A试图去猜测f(m)的值,我们找的算法A’也试图去猜测f (m)的值, 但仅给予h (m),当两者猜中的概率是一样的,那么加密方案是语义安全的(即从密文中找不到任何信息)
-
定理:一个加密方案是具有不可区分性,当且仅当其在窃听者存在下是语义安全的
构造安全的加密方案
伪随机发生器 (PRG, pseudorandom generator)
- 定义:设 l 是一个多项式,G是一个多项式时间的算法,并且G对于任何输入s∈{0, 1}^n,其输出的结果的长度为 l(n) ,称G是伪随机生成器,如果其满足以下两个条件:
- 扩张性:对于任意的 n 有 l(n)>n.
- 伪随机性:对于任意的PPT上的算法D,存在一个可忽略函数 negl 有:
| Pr[D(G(s))=1] - Pr[Dr( r)=1] | ≤ negl(n),其中的第一个概率就是区分器D以G输出为输入而输出1的概率,第二个概率就是D以一个均匀的01串为输入而输出1的概率。 - 注意:在进行伪随机测试的时候区分器并不能知道种子 s 的内容。
- 反例1:确定性函数:假设某个伪随机生成器G(s)的算法结构为在输入字符串的最后一位添加一位,这一位是前面 n 位的异或结果。则该伪随机生成器的扩张因子就为 l(n)=n+1。则区分器可以采取以下策略:对于一个输入的字符串w,当且仅当w的最后一位等于前面n位的异或结果时才输出1。
- 反例2:错误的构造方法:定义一个新的伪随机生成器G’(s) = G(s1, …, sfloor(n/2))
l’(n) > 2*floor(n/2),当n为偶数时,l’(n) > n;当n为奇数时,l’(n) > n-1;所以G’(s)并不满足为随机生成器的扩张性,因此G’(s)不是伪随机生成器。(即通过原有的伪随机数生成器来构造一个新的,有可能会有错)
在这种情况下:Pr[D(G(s))=1] = 1,Pr[D®=1] = 1/2,Pr[D(G(s))=1] - Pr[D®=1] = 1/2,这是不可忽略的,所以G并不是一个伪随机生成器。
- 作用:将一个称为种子的短的字符串转换为一个较长的“看起来均匀”(或“伪随机”)字符串
- 伪随机串:由伪随机生成器输出的一个字符串。
- 均匀的串:根据均匀分布采样的字符串。
- 好的PRG得标准:需要通过所有的统计测试,即对于任何高效率的统计测试(或者区分器)D,当接收PRG的输出的串后输出1的概率,需要接近和接收一个均匀的串后输出1的概率。换句话说,PRG的输出应该对于每一个区分器都“看起来像”一个均匀的串
流密码
将流密码看作一对确定的算法(Init, GetBits),其中
- Init:将种子 s 和可选初始化向量 IV 作为输入,输出初始状态st0
- GetBits:将状态信息 sti 作为输入,然后输出一个比特 y ,然后更新一个状态sti+1。
- 流程:
如果某个流密码算法没有初始向量IV,并且对于任何一个大于 n 的多项式 l(n) ,这个流密码算法是以 l(n) 为扩张因子的伪随机生成器。 则这个流密码是安全的
Proof by Reduction
果想要证明一个给定的算法是计算性安全的,则必须依赖一个未经证明的(P≠NP)假设;除非这个算法是理论上信息安全的。
步骤如下:
- 假设某个高效率的敌手攻击加密方案Π,用ε(n)表示敌手成功破解的概率。
- 造一个算法A‘,将其称为“约简”,其试图利用敌手A作为子程序来解决某个数学难题 X ,但 A’ 除了知道 A 在攻击Π以外什么都不知道。所以对于数学难题 X 的某些实例输入 x ,算法A’ 将A模拟为加密方案 Π 的一个实例:
- 当A作为A‘的子程序的时候的运行环境应该和当A和Π进行互动的时候的运行环境一致。
- 如果A’ 成功模拟的A破解加密方案Π,则A‘解决以x作为实例输入的数学难题X的概率为1/p(n)。
- 在2(1)和2(2)的前提下,A’ 成功解决数学难题X的概率为ε(n)/p(n)。
- 所以如果ε(n)是可忽略的函数,那么ε(n)/p(n)也是可忽略的函数。
- 然而,如果A是一个高效率的敌手,则A‘ 可以以一个不可忽略的函数的概率解决数学难题X,但这与前提相矛盾。
- 综上所述,没有一个运行在PPT上的敌手能够以一个不可忽略函数的概率破解 Π (Π是计算安全性的
构造计算性安全的加密方案
设G是一个扩张因子为 l 的伪随机生成器,定义一个用于加密长度为 l 的明文的私钥加密方案为:
- Gen:对于输入1n,均匀选择k ∈ {0,1}n作为密钥
- Enc:对于输入的密钥 k ∈ {0,1}^n,以及明文m∈ {0,1}^l(n),输出的密文为:c := G(k)⊕m
- Dec:对于输入的密钥 k ∈ {0,1}^n, 以及密文c ∈ {0,1}^l(n),输出的明文为:m := G(k)⊕c
定理:如果G是PRG,则上述的固定长度私钥加密方案是不可区分的。
证明:通过敌手 A 构造一个区分器 D ,将 D 的区分G的输出和一个随机字符串的能力直接与 A 分辨 Π 加密明文的能力建立联系
- 区分器 D :D 获得一个输入字符串w ∈ {0, 1}l(n)
- 运行A(1^n)来获取一对明文m0, m1 ∈ {0, 1}^l(n)
- 随机的选择一个比特b∈{0, 1},计算密文c := w ⊕ mb
- 将c返回给 A 然后获取A输出的b‘,如果b=b’,则输出1;否则输出0
其实将G(k)替换成一个随机的长度为 l(n) 字符串,那么就还原成了一个One-Time Pad,使用G(k)不过是对概率上来说多了一个negl(n)
更强的安全概念
多明文下的窃听实验(PrivKmultA,Π(n))
- 敌手得到输入1^n,然后输出一对等长的明文序列M0=(m<0,1>, …, m<0,t>)以及M1=(m<1,1>, …, m<1,t>),其中对于所有 i 都有:|m<0,i>| = |m<1,i>|
- 通过运行G(1^n)获得一个密钥,然后随机的选择一个比特b∈{0,1}。然后对所有 i ,密文 ci ← Enck(mb,i),最终将密文C=(c1, …, ct)返回给A
- A输出一个比特b’
- 如果b’ = b,则该实验的输出为1,否则为0。
同样的,如果某个多明文加密方案满足Pr[PrivKmultA,Π(n)=1] ≤ 1/2 + negl(n),则称这个加密方案具有多明文加密下不可区分性。
定理:如果某个私钥加密方案是不可区分性的,那么在多明文加密下就不具备不可区分性。原因显而易见,同一个密钥可以对多个明文使用,但是概率加密可以防止产生这类情况。
选择明文攻击
定义:敌手有能力选择某些明文进行加密,其目的在于推断出关于使用相同的密钥加密的明文的信息。
选择明文攻击窃听实验(PrivKcpaA,Π(n)):
- 通过运行G(1^n)获得密钥k
- 敌手得到输入1^n,以及一个加密预言机Enck( . ),然后输出一对等长的明文m0, m1。
- 通信者随机的选择一个比特 b∈{0,1},将密文c ← Enck(mb)返回给敌手A
- 敌手通过访问预言机Enck( . )然后输出一个比特b’
- 如果b’=b,则该实验的输出为1,否则为0。
同样的,如果某个私钥加密方案满足Pr[PrivKcpaA,Π(n)=1] ≤ 1/2 + negl(n),则称这个加密方案具有选择明文攻击下的不可区分性或者CPA安全的。但上面的加密方案在CPA攻击下并不具有不可区分性。
原因:计算c := G(k)⊕m并返回给敌手A,于是敌手可以通过计算 G(k) = c ⊕ m得到G(k),在这种情况下,敌手相当于就获取了密钥,无论返回什么密文都可以通过 m := G(k)⊕c,而得到明文。
多明文下的选择明文攻击:
定义:在上面的定义的基础上,允许敌手访问一个“左或右”预言机,这个预言机对于输入的一对等长明文m0, m1,计算密文 c←Enck(mb) 并且将 c 返回给敌手。如果b=0,则加密“左边”的明文,否则就加密“右边”的明文。
多明文下的选择明文窃听实验(PrivKLR-cpaA,Π(n)):
- 通过运行G(1^n)获得密钥k
- 随机的选择一个比特 b∈{0,1}
- 敌手得到输入1^n,以及一个上面所定义的预言机LRk,b( . ,.),输出挑战明文(m<0,1>, …, m<0,t>)以及(m<1,1>, …, m<1,t>),将密文LR<k,b>(m<0,1>, m<1,1>), …, LR<k,b>(m<0,t>, m<1,t>)返回给敌手。
- 敌手输出一个比特b’
- 如果b’=b,则该实验的输出为1,否则为0。
如果某个多明文加密的私钥加密方案满足Pr[PrivKLR-cpaA,Π(n)=1] ≤ 1/2 + negl(n),则称这个加密方案具有多明文下选择明文攻击不可区分性或者说是对于多明文具有CPA安全性。
定理:任何一个CPA下安全的私钥加密方案在多明文加密下也是CPA安全的
构造一个CPA安全的私钥加密方案
-
伪随机函数
- 作用:n比特字符串随机映射到n 比特字符串,所以对固定函数,谈伪随机性是没有意义的
- 带密钥的函数:设F: {0, 1}* × {0, 1}* → {0, 1}*,是一个接收两个输入的函数,第一个输入即密钥,用 k 表示,第二个输入即正常输入,用 x 表示。一般密钥固定了,这个函数就固定了,一般|k|=|x|=Fk(x)。如果 F 能够在给定k和x,多项式时间内计算出F(k, x),则称这个函数的有效的。
- 伪随机函数的非形式化定义:如果一个函数Fk,对于任意的密钥 k 都是与具有相同定义域和值域的所有函数集合中均匀随机选择的函数不可区分的,则称这个函数是伪随机的。
- Fk与密钥k的长度有关,也就是说如果密钥k的长度为n,那么就可能有2^n个Fk,f所属的集合Func的大小推断如下:可以将任何一个函数 f 的映射关系用一张表来表示,这个表中的第 x 行中存储着对应的 f(x),所以对于n比特的输入,映射表应该有2^ n个行,而每一行中是一个n比特的01串,由此可以将任何一个函数用一个长度为n2^n的串来表示。此外,还要考虑到 f 是一个双射函数,也就是说任何一个长度为n2^n的串都唯一的表示一个函数 f ,所以Funcn的大小就是这个长度为n2n对应的实际数值,即|Func| = 2^{n2 ^n}
- 伪随机函数的正式定义:设F: {0, 1}* × {0, 1}*→{0, 1}*是一个高效率且长度保留的带密钥的函数。F 是一个伪随机函数,如果对于任何一个运行在概率多项式时间上的区分器 D 都存在一个可忽略函数 negl 有:
即对于每个多项式时间 的区分器D,接收到一个伪随机函数凡的描述,输出1的概率几乎和它接收到一个随机函数f的描述,输出1的概率相同
-
基于伪随机函数的 CPA 安全加密
- 构造方法:令F是伪随机函数, 定义一个消息长度为n的对称密钥加密方案如下
- Gen : 输入1^n, 均匀随机地选择k ← {0,1}^n
- Enc : 输入一个密钥k ∈{0,1}^n, 以及一个消息 m ∈{0, 1 }^n, 均匀随机地选择r←{0, 1 }^n 并且输出 密文
- Dec: 输入一个密钥k ∈{0,1}^n,以及一个密文c =<r,s> , s是密文信息
对于一个随机映射来说,CPA是无法攻击成功的,那么CPA如果攻击成功,那么就说明他能区分伪随机函数和随机函数,这显然是很困难的
缺陷:密文长度至少是明文长度的两倍,因为密文中包含r和s
- 构造方法:令F是伪随机函数, 定义一个消息长度为n的对称密钥加密方案如下
-
伪随机置换:
- 定义:令 F : {0,1}*× {0,1}* → {0,1}*是 有效 的 、 长度保留的、 带密钥的函数。 如果对每个k , 函 数Fk(.)是单射 ( 因为 F是长度保留的, 因而Fk实际上是双射 ) 。 把F称作一个带密钥的置换 。 如果给定k,x 。存在一个多项式时问算法能够计算Fk(x),也存1个多项式时间算法能够计算Fk^-1(x), 则这个带密钥的置换是有效的。
- 强伪随机置换:即 Fk和一个随机置换是不可区分的, 即使区分器可以使用逆置换预言机 。定义如下:
加密操作模式
分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
操作模式是使用分组密码(即伪随机置换 )来加密任意长度消息的基本方法。注意到通过在尾部添加一个 1 , 然后使用足够多 的0填充 , 可将任意长度的消息填充为总长度为分组大小的倍数
-
Electronic Code Book 电子密码本(ECB):
主要缺陷是不能抵御CPA,再有窃听者情况下不是不可区分的
-
Cipher Block Chaining 密码分组链接(CBC)
set c0 := IV,and then, for i = 1 to l, set ci:= Fk(ci−1 ⊕ mi).最终密文为<c0,c1…cl>
主要缺陷是加密必须依次执行, 因为要加密明文分组mi, 我们需要密文分组Ci-1.且IV会成为密文的一部分 -
输出反馈 Output Feedback(OFB ):
Define y0 := IV ,and set the ith block yi of the stream to be yi:= Fk(yi−1).ci:= yi ⊕ mi
加密和解密都必须依次执行,但相对于CBC有个优点是是伪随机流的计算能够独立于实际加密消息进行。 -
Counter 计数器( CTR):
a uniform value ctr ∈ {0, 1}n is first chosen.Then, a pseudorandom stream is generated by computing yi:= Fk(ctr + i),where ctr and i are viewed as integers and addition is done modulo 2^n. The ith ciphertext block is ci:= yi ⊕ mi
相比于OFB,CTR加密和解密都能完全并行,只解密第i个密文分组而不解密任何其他的密文是可能的 , 该特点被叫做随机访问
未完待续。
Chosen-Ciphertext Attacks 选择密文攻击
CCA不可区分的实验:即掌握了加密机和解密机
一个对称密钥加密方案H满足如下条件: 对所有的概率多项式时间敌于A , 存在一个可忽略的函数negI, 使得
则称其为选所择密文攻击条件下不可区分加密 ( 或者是 CCA 安全的 ) 其中概率来源于实验中的所有其他因素
本文上诉提到的所有方案都不是CCA安全的,因为掌握了解密机,那就可以将挑战密文简单修改后利用解密机得到对应的明文,再和真实明文做对比。