密码学中可证明安全CCA2

密码学中可证明安全CCA2

可证明安全推荐书目:

《密码学中的可证明安全性》杨波:: 清华大学出版社     

《Introduction to Security Reduction》Fuchun Guo;Willy Susilo;Yi Mu ::Springer

CCA1 与 CCA2 的区别

CCA2 与 CCA1 只有一个区别,那就是在生成挑战密文后,CCA2依然允许敌手进行解密询问(限制是不能允许敌手询问挑战密文的解密询问)。

                             

CCA2的必要性

在上一篇博客中,我们提到的这个抵抗CCA攻击的方案,是不能抵抗CCA2攻击的。

上一篇博客:https://blog.csdn.net/zmrlinux/article/details/107790419

原因如下:

新构造一个ZK系统,与之前的ZK系统不同的是,在P输出的末尾增加一个比特,V在验证时可以无视这个比特的存在,并且依然能够验证这个ZK,依然是适应性安全的非交互式零知识证明系统。

                                                             

其实,这里的ZK系统在《密码学中的可证明安全》书中,没有给出一个实例算法,应该是存在着一类ZK算法。我们暂时将这个ZK系统设定为黑盒来使用,因为这个方案本身也并不关乎ZK系统的细节内容。

但是,问题来了,在模拟者生成挑战密文后,敌手可以继续请求解密预言机,我们的唯一限制是敌手不能请求挑战密文的解密结果。原挑战密文描述如下:

                                                                       

如果说敌手请求这样一个解密请求:

                                                                        

可见,这两个请求的确满足我们只要求不能请求挑战密文的限制。但是如果解密预言机收到这个解密请求,则一定会进行解密,因为ZK是可以验证通过的,如此,就直接得到了挑战密文的明文内容。

Noar-Yung 方案被攻破!所以CCA2这个安全概念对于公钥密码来说是非常重要的。

CCA2的DDN方案

Noar-Yung 方案不能抵抗CCA2攻击的最为重要的原因是,适应性零知识证明系统不能保证挑战密文不存在相关的伪造,也就是说挑战秘密文必须保证不能被伪造出相关的合法密文。如果将此处对挑战密文增加一个更为强的其他证明系统就能产生CCA2安全的加密方案。

DDN方案使用一次性签名方案,适应性非交互零知识证明系统构成:描述如下:

秘钥生成算法:

                      

生成K比特长度对公私对,选择长度为k的随机数作为公钥的部分。

加密算法:

                                                                     

1. 生成签名的公司钥对。

2. 以签名验证公钥为索引,对M分别使用对应下标的公钥进行加密,共生成K个密文得到密文向量C。

3. 对秘密W 密文向量C 消息M 随机向量r 做零知识证明。

4. 对密文向量C和证明做签名。

5. 输出所有结果。

解密过程:

                                              

1.验证签名

2. 验证零知识证明

3. 返回解密内容

证明:

                         

安全模型:CCA2模型

证明方法:基于游戏跳跃的方法,构造游戏EXp1(对M0)进行加密。构造游戏EXp2(对M1)进行加密。然后证明这两个游戏不可区分。

Exp1 和 Expfin 除了加密的明文不同,其余的部分均相同,这里仅仅只列举第一部分的实验描述:

                          

1.生成实验A,替换ZK系统为模拟器。A 与 Exp1 不可区分,由ZK零知识性可得。

2.生成实验B,敌手使用挑战密文对应的验证秘钥,在实验设计中,如果询问挑战密文对应的签名验证秘钥,实验终止,除非敌手能够伪造一个新的签名。由于一次性签名的EU-CMA安全性,可知敌手伪造同秘钥签名概率可忽略。所以A 与 B 不可区分。

3.生成实验C,不使用Sk1 解密,使用Vk的其他比特对应的私钥解密,实质上这是在询问是否存在一个可以通过验证的证明,但是明文解密确不相同的情况。除非敌手能够伪造签名,才能发现B与C之间的区别。相当于CCA1的例子中将SK0 替换为SK1来进行解密。如果密文向量对应的明文都相同,则用任何的秘钥去解密都是一样的结果,都能得到对应的那个明文消息。如果密文向量对应不同的明文,则使用其他秘钥去解密,则可能得到不同的明文,区分出实验B,C。

4.生成实验D,将M0换成M1,由于CPA安全所以不可区分,所以D 与 C 不可区分。

5.生成实验E,将模拟器换成真实的零知识证明系统,E 与 实验 D 不可区分。

所以得到Exp0 与 Expfin 不可区分。

实例来源:《密码学中的可证明安全性》,推荐阅读!

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值