引言:可证安全即用数值去衡量证明这个东西的安全性。当你把一个东西锁进保险箱里,你要怎么去证明你的保险箱是安全的呢?只有你有钥匙这个保险箱就是安全的吗?如果我拿原子弹去轰炸,是不是就能打开保险箱?通俗来讲,如果你能证明有一堵墙,原子弹也没办法炸毁它,那么你在这堵墙后面做任何事情,都是安全的,这个安全性也可以被证明——连原子弹都无法炸毁的安全性。
先从扔硬币的案例讲起
——区分两个分布
1、假如有一枚“正常”的硬币,无论怎么扔都是正面朝上。同时有一枚“异常”的硬币,无论怎么扔都是反面朝上。假设抛出正面b为1,抛出反面b为0.那么如何判断D(X)算法的优势呢?
这个答案很简单
用D来判断正确的概率Pr(b'=b)
b=1时,x1=1,D(x1)输出1.
b=0时,x2=0,D(x2)输出0;
那么这个算法的正确率为1,Pr(b'=b)=1。
D的优势(Advantage):
Adv(D) = |Pr(b=b')-1/2|
如果这个算法总是猜对或者猜错,优势都是1/2。
如果这个算法完全随机,那么概率就是1/2,Adv(D)=0
为什么要减去1/2?一般而言,瞎猜也有一半的机率是对的,所以要减去1/2。
为什么猜错优势也是1/2呢?打个比方,如果有个人买大小,他总是能买到错的那一个,那么你只要跟着他反着买,你就能赢。这是一种反向思维。
2、假如有一枚“正常”的硬币,出现正面反面的概率都是1/2,异常的硬币反面是2/3,正面是1/3。假设抛出正面b为1,抛出反面b为0.那么如何判断D(X)算法的优势呢?
仍然是求Pr(b’=b)的概率,进而求出Adv(D)
D1 | D2 | D3 | D4 | |
---|---|---|---|---|
X1 | 0 | 1 | 0 | 1 |
X2 | 0 | 1 | 1 | 0 |
Adv(D) | 0 | 0 | |-1/12| | 1/12 |
虽然D3和D4的Adv(D)值一样,但是我们根据直觉会认为D4更好(不用反着选)
加密算法安全性(CPA)
上面的两个分布通过计算优势来证明它的安全性,优势越接近1/2,这个算法越安全。
加密算法而言,这个结果越难被计算机计算出来,那么它就越安全,具体的衡量指标为比特计算。
ElGamel加密:
困了……看这个文章吧……
https://www.jiamisoft.com/blog/20564-elgamal.html