最近在看《现代密码学——原理与协议》这一本,刚好看到计算安全和规约证明这一块,打算简单的做个笔记,以后也方便复习。
在证明一个加密方案是否安全,其必须在“实践上不可破译”。基于计算的方法包含了两种完美安全的概率:
(1)在对抗“有效的敌手”时,安全性存在,“有效的”是指在可行的时间内运行。
(2) 敌手潜在攻破方案的概率极小(小到几乎不关心是否会发生)。
为了精确的定义上面所述内容,常常使用以下两种方法:
具体方法:通过明确限定任一敌手在最多某个特定时间内的最大成功概率,对给定的密码学方案的安全性进行量化。
渐进方法:将敌手运行时间以及成功的概率视为某个参数的函数,而不是具体的数值。
可忽略优势
在密码学方案中,绝大部分证明都是使用渐进的方法。
现代的密码学中,一个再安全的加密方案,都存在被攻破的可能性。这里就引入了一个可忽略的成功概率:
一个方案能以非常小的概率被攻破,这个方案仍然被认为是“安全的”。
用一个通俗的例子来解释就是,我们走在马路上被一颗陨石砸到的概率。该概率不为0,但极小至可以忽略不计。
这样的概率被称为可忽略的,给定定义如下:
函数f是可忽略的,如果对于每个多项式p(·),存在一个N,使得所有的整数n>N,都满足f(n)<(1/p(n))。
我们通常将一个可忽略函数称为negl。
对于可忽略的函数negl1和negl2,存在下列特点:
(1)函数negl3被定义为negl3(n) = negl1(n) + negl2(n),则函数是可忽略。
(2)对于任何多项式p,函数negl4(n)被定义为negl4(n) = p(n) · negl1(n),则函数是可忽略的。
第二点可以理解为一个事件发生的概率是多项式的,那么这个实验重复多项式次,依旧是可以忽略的。例如,中彩票的概率是忽略不计的,那么我们买n个多项式次彩票,依旧是可以忽略的。
规约证明
有以下形式的定理:
若给定假设X是正确的,根据给定的定义,构造方案Y是安全的。
证明通常显示:如何将假设X规约到攻破构造方案Y,也就是说如何使用敌手攻破够着方案Y的方法导致一个与假设X的冲突。
翻译成人话就是:将一个密码方案的安全性建立在一个已知的困难问题上。
常见的困难问题有因数分解问题,离散对数问题,LWE问题等等,而密码学方案则是基于这些困难问题来构建的。
举个例子:
以ElGamal加密协议为例,它是基于离散对数问题(具体为判定Diffie-Hellman假设,DDH假设)的。其密文形式可以表示为
C
=
(
c
1
,
c
2
)
=
(
g
r
,
h
r
⋅
m
)
C=(c_1,c_2)=(g^r,h^r·m)
C=(c1,c2)=(gr,hr⋅m),其中
r
r
r为随机数,
h
=
g
x
h=g^x
h=gx,
x
x
x为密钥。
拥有密钥
x
x
x的人,可以进行解密
m
=
c
2
/
c
1
x
m=c_2/c_1^x
m=c2/c1x
DDH假设
选定一个 q q q阶循环群 G G G,其生成元为 g g g。给定3个随机元素 x , y , z ∈ Z q x,y,z\in Z_q x,y,z∈Zq。对于任意多项式时间敌手 A d v ( G , q , g , g x , g y , Z ) Adv(G,q,g,g^x,g^y,Z) Adv(G,q,g,gx,gy,Z),判断或 Z = g x y Z=g^{xy} Z=gxy者是 Z = g z Z=g^{z} Z=gz困难的。
证明之前,需要强调的是所有的困难性问题都只是假设,因为目前来说,没有人能够有效地解决它们,而一旦出现高效的算法可以在多项式时间内解决这些假设,那么基于这些假设所构造的密码学方案也就不攻自破了。
定理:如果在 G G G上的DDH问题是困难的,那么ElGamal方案在选择明文攻击下是不可区分安全的。
假设我们知道这个IND-CPA(indistinguishable under Chosen-Plaintext Attacks)的安全性定义(也称安全游戏)。那么其中,敌手的目标是识别出挑战密文 C ∗ C^* C∗中加密的是 m b ( b ∈ 0 , 1 ) m_b(b\in{0,1}) mb(b∈0,1)。
直接证明似乎有点难度,那不如转变一下思路。
假如对于多项式时间敌手A(以下所有敌手都是多项式时间敌手),它有一个DDH实例
G
,
q
,
g
,
g
x
,
g
y
,
Z
G,q,g,g^x,g^y,Z
G,q,g,gx,gy,Z。很明显,A是没有办法判断出Z的形式的,因为这个问题对于A来说是困难的。
A的trick就是用这样一组实例,构建一个正确的ElGamal安全游戏,与另一个敌手B进行交互。
在这个A构建的安全游戏中,Z的2种形式与加密选择的
m
0
m_0
m0或者
m
1
m_1
m1相对应。
当B拿到这个游戏的挑战密文时,可以用尽一切办法来猜测挑战密文中加密
C
∗
C^*
C∗的是
m
0
m_0
m0还是
m
1
m_1
m1,最后输出一个判断数组b’。如果没有敌手A能够以任意不同于
1
2
\frac{1}{2}
21的概率判断出消息
m
0
,
m
1
m_0,m_1
m0,m1中是哪一个被加密的(1/2即随机猜测概率),即b=b’,则方案是安全的。
不可区分性定义说明了:如果在实验中,任何PPT(PolynomialTime 多项式时间)敌手的成功概率最大值高于 1 2 \frac{1}{2} 21的部分可忽略,这一个加密方案是安全的。
定义:对于所有概率多项式时间敌手A,存在一个可忽略函数negl使得:
P
r
[
b
=
b
′
]
≤
1
2
+
n
e
g
l
(
n
)
Pr[b=b']\leq\frac{1}{2}+negl(n)
Pr[b=b′]≤21+negl(n)
如果B能够成功猜测出加密的密文,敌手A就可以借助B的力量去猜测出Z的形式。
但是!我们的前提是不可能存在任何敌手A可以攻破DDH,因此也就不可能有任何敌手B攻破ElGamal。