“安全或无”IND-CPAIND-CCA1IND-CCA2的详细说明

Posted Kaladou~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“安全或无”IND-CPAIND-CCA1IND-CCA2的详细说明相关的知识,希望对你有一定的参考价值。

一、在”安全或无“意义下的安全性:

​ 已知加密算法和输出的一条密文,攻击者的目标是恢复出整条明文;或者说在加密算法的基础上,给定一组明-密文对,攻击者的任务是恢复出整个密钥。攻击者或者成功地完全得到想要的秘密,或者什么都没有得到。”无“,无论在攻击之前还是攻击之后,攻击者没有得到关于秘密的任何信息。

​ 综上,这是一种非常弱的公钥密码体制的安全性的概念,只考虑了被动攻击(攻击者不能操纵或修改密文),也可以说是不安全性的定义。因为明文数据很可能含有一些”先验消息“,攻击者可以知道这些消息。知道这些”部分的消息“,攻击者就很有可能得到所有的明文消息,而不是一无所获。

===>实际中,攻击者更有可能是主动的,同时还拥有被动窃听的能力。也就是说,攻击者可以用某种不确定的方式修改密文或者计算明文,将结果发给一个无心的用户以得到预言机服务。

二、IND-CPA安全性:

​ 为了保证更强的安全性,GoldWasser和Micali在1984年提出了概率加密,引入更强的安全目标:语义安全(理论证明,语义安全SS等价于密文不可区分性IND)。下面就**形式化**的描述密文不可区分性

敌手A和挑战者(随机预言机O)商定目标密码体制,选定加密密钥pk,然后进行以下两各阶段:

寻找阶段:敌手A选择两个等长的明文m0、m1,以及自认为有利攻击的辅助信息s;

猜测阶段:敌手被挑战者告知其中一个明文和随机数r得加密结果C*,当然这里得b是保密的
c 0 = 〖 E n c 〗 p k ( m 0 , r ) 若 b = 0 c0=〖Enc〗_pk (m0,r) 若b=0 c0=Encpk(m0,r)b=0

c 1 = 〖 E n c 〗 p k ( m 1 , r ) 若 b = 1 c1=〖Enc〗_pk (m1,r) 若b=1 c1=Encpk(m1,r)b=1
判断C*是c0还是c1。

​ 敌手A的目标是以大于一半的概率猜对b的值【也就是猜对的概率要比猜错的概率大1/2,】:

在这里插入图片描述

这个概率是可以忽略的,那么就说c0和c1不可区分。

​ 在给定明文对应的密文,任何多项式有界的攻击都不能获得有关的明文的任何先验消息。这种只能在密文攻击者是被动的情况下才是有效的,即针对CPA下才是有效的。如果CCA1或者CCA2下,这种安全性就不够好。

​ 【概率加密方案(主流做法):加密算法是一个概率算法。在公钥和明文之外,输入一个随机数,这样,同一个明文可以使用不同的随机数加密成不同的明文。】

三、IND-CCA1安全性(一个稍强的安全性):

​ CCA1是午餐攻击模型,因为午餐持续的时间短,所以敌手A没有足够的时间准备他需要提问的密文,当然这里准备的密文,攻击者肯定是要想办法构造与目标密文相关的密文,使得通过解密预言机之后可以得到与目标密文对应明文相关的明文。因此午餐时间敌手A提问的所有的密文都是午餐前准备的。

​ 基于IND-CPA游戏的基础之上,引入了对敌手A的解密帮助:

敌手A和挑战者(随机预言机O)商定目标密码体制,选定加密密钥pk,同时敌手A在午餐前准备好一些密文消息,然后进行以下两各阶段:

训练:敌手A向挑战者做解密服务(可多次),即取密文c给挑战者,挑战者返回解密结果给敌手A;

挑战:敌手A选择两个等长的明文m0、m1,再从挑战者接受mb的密文c*,b是随机值(0,1);

猜测阶段:敌手输出b’,如果b’=b,则敌手A成功。
c 0 = 〖 E n c 〗 p k ( m 0 , r ) 若 b = 0 c0=〖Enc〗_pk (m0,r) 若b=0 c0=Encpk(m0,r)b=0

c 1 = 〖 E n c 〗 p k ( m 1 , r ) 若 b = 1 c1=〖Enc〗_pk (m1,r) 若b=1 c1=Encpk(m1,r)b=1
判断C*是c0还是c1。

敌手A的目标是以大于一半的概率猜对b的值【也就是猜对的概率要比猜错的概率大1/2,】:

〖 A d v 〗 A = ∣ P r [ b ′ = b ] − 1 / 2 ∣ 〖Adv〗_A=|Pr[b' = b]-1/2| AdvA=Pr[b=b]1/2

如果这个概率可忽略,那么就说这个密码体制在非适应性选择密文攻击下具有不可区分性。称为IND-CCA1安全。

​ 午餐攻击是一个非常受限的攻击模型,敌手A只能在很短的时间内获得提供给他的解密服务,就好像“午餐”以后解密盒被永久的关闭一样。

【这里有个好奇的地方就是,实际中,谁会为敌手A提供解密服务呢?】

====>比如说,在某个密码协议中,要求用户一旦收到询问消息,就用她的私钥进行解密,并将结果返回,这种询问-应答机制就常见的“天真”的解密人。

​ 实际中,这种天真的用户会永远保持天真,所以这种IND-CCA1的安全性并不合理,只考虑短暂的用户“天真”,即短暂的解密服务,之后就不提供了。

四、IND-CCA2安全性(一个更强的安全性):

​ 在IND-CCA1的基础上,去掉了只能在短时间内得到解密帮助这个不现实的条件,即在这个更强安全性的攻击模型中,对敌手A的解密帮助在午餐攻击前后的可以得到,我们去一个“美丽的”名字------凌晨攻击

敌手A和挑战者(随机预言机O)商定目标密码体制,选定加密密钥pk,同时敌手A准备好一些密文消息,然后进行以下两各阶段:

训练1:敌手A向挑战者做解密服务(可多次),即取密文c给挑战者,挑战者返回解密结果给敌手A;

挑战:敌手A选择两个等长的明文m0、m1,再从挑战者接受mb的密文c*,b是随机值(0,1);

训练2:敌手A继续向挑战者做解密服务(可多次),即取密文c(c不等于c*)挑战者,挑战者解密后发送给敌手A;

猜测阶段:敌手输出b’,如果b’=b,则敌手A成功。
c 0 = 〖 E n c 〗 p k ( m 0 , r ) 若 b = 0 c0=〖Enc〗_pk (m0,r) 若b=0 c0=Encpk(m0,r)b=0

c 1 = 〖 E n c 〗 p k ( m 1 , r ) 若 b = 1 c1=〖Enc〗_pk (m1,r) 若b=1 c1=Encpk(m1,r)b=1

判断C*是c0还是c1。

敌手A的目标是以大于一半的概率猜对b的值【也就是猜对的概率要比猜错的概率大1/2,】:
〖 A d v 〗 A = ∣ P r [ b ′ = b ] − 1 / 2 ∣ 〖Adv〗_A=|Pr[b' = b]-1/2| AdvA=Pr[b=b]1/2
如果这个概率可忽略,那么就说这个密码体制在适应性选择密文攻击下具有不可区分性。称为IND-CCA2安全。

​ 如果一个密码系统能抵抗适应性选择密文攻击,那么他则可以抵抗其余几种攻击(非适应性选择密文攻击、适应性选择明文攻击、非适应性选择明文攻击、已知明文攻击、唯密文攻击)。

目前普遍认为,任何新提出的公钥加密算法都应该在适应性选择密文攻击下达到语义安全性,即IND-CCA2

以上是关于“安全或无”IND-CPAIND-CCA1IND-CCA2的详细说明的主要内容,如果未能解决你的问题,请参考以下文章

“完全或无”IND-CPAIND-CCA1IND-CCA2的详细说明

可迭代对象迭代器生成器之间的关系

在锁定/替代外壳中控制窗口音量

三种方式都能生成同样的列表

Android NDK: 如何编译JNI为指定的指令集(armeabi/arm64)

Python3基础 index 全列表查找与指定索引范围查找