第三十一个知识点:Game Hopping证明

关于安全证明, 目前主流的方法有安全归约证明 (由 single game 实现) 和 Game Hopping (由 game sequence 实现) 两种。

注意这篇博客是基于Douglas Stebila的论文An Introduction to Provable Security的部分3.3中书写的,通过这个链接下载论文:https://www.douglas.stebila.ca/files/teaching/amsi-winter-school/Lecture-2-3-Provable-security.pdf。

回顾公钥密码学中IND-CCA安全定义。如果一个人从攻击者处移除了解密问询,那么我们就得到了CPA安全概念。注意:移除加密问询不能改变攻击者的能力,因为攻击者一开始就有公钥,所以他可以自己进行加密。

在早期的博客中,我们描述了一个DDH问题。在这篇博客中,我们继续讨论一个叫‘game hopping’的技术,来证明如果DDH是难的,那么ElGamal加密方案是IND-CPA安全的。从广义上讲,我们将对ElGamal的IND-CPA博弈转换成DDH的博弈来证明攻击者的在第一个游戏的概率不会超过第二个。因此如果第二个的概率是非常小的,那么第一个博弈获胜的概率也会是非常小的。(证明加密方案是IND-CPA安全的)

首先,让我们描述一下ElGamal加密方案。我们预先给定一个交换群G,G的阶是素数q,生成器是g。(这里隐式的选择了安全参数 \(\lambda\)。当我们说一个变量是可忽略的时候,我们指的是对安全参数的一个可忽略函数。我们不在这里讨论细节。)明文和密文都是群中的元素。私钥是一个秘密的指数\(x \in Z_q\),公钥是\(X = g^x\)。加密消息\(M \in G\),应该先随机的选择一个\(y \in Z_q\),计算\(c_1 = g^y,c_2=MX^y\)。然后密文就是\((c_1,c_2)\) 。为了解密,我们知道\(c_2 = MX^y = M(g^x)^y = M(g^y)^x = Mc_1^x\)。因此使用私钥\(x\),我们能计算\(M = c_2c_1^{-x}\)。

现在考虑下面的博弈,\(A\)是一个PPT(概率多项式时间)攻击者。

  • \(x \overset{\$}{\leftarrow} \mathbb{Z}_q, X \leftarrow g^x\),生成公私钥对。
  • \((M_0,M_1) \overset{\$}{\leftarrow} \mathcal{A}(X)\)。攻击者产生两个消息。
  • \(b \overset{\$}{\leftarrow} \{0,1\}\)。
  • \(y \overset{\$}{\leftarrow} \mathbb{Z}_q, c_1 \leftarrow g^y, Z \leftarrow X^y, c_2 \leftarrow M_bZ\)
  • \(b^{'} \overset{\$}{\leftarrow} \mathcal{A}(c_1,c_2)\)。
  • 如果\(b = b^{'}\),就返回1,否则返回0 。

如果上述博弈返回1,我们说\(\mathcal{A}\)获胜。从Ana的博客来看,如果\(\mathcal{A}\)的概率\(2|Pr[\mathcal{A} \space wins \space Game_0]-1/2|\)。

接下来,考虑一个新博弈\(Game_1\)。唯一和\(Game_0\)不同的是它把第四步替换了,从

\[Z \leftarrow X^y
\]

变成了

\[z \overset{\$}{\leftarrow} Z_q,Z \leftarrow g^z
\]

因此新的密码就变成了\((c_1, c_2) = (g^y, M_bg^z)\)。

我们观看第二个博弈,我们发现z是随机选择的,我们攻击者就不知道关于b的任何信息,于是他猜测成功的概率是1/2。

我们对比两个博弈,观察其中的不同。一个用的是\(g^{xy}\),一个用的是\(g^z\)。很容易发现问题和DDH问题相关。攻击者必须分区\(g^x,g^y,g^{xy}\)和\(g^x,g^y,g^z\)。为了保证两个博弈的链接,我们使用\(\mathcal{A}\)来构造一个攻击者\(\mathcal{B}\),来对抗DDH:

  • 一旦输出\((X,Y,Z)\),运行$\mathcal{A} \(输入\)X\(。接收到挑战对\)(M_0,M_1)$。
  • 随机选择一个比特\(b\)。然后计算\(m_bZ\)。
  • 给攻击者\(\mathcal{A}\)出密文\((Y,m_bZ)\)然后其输出一比特\(b^{'}\)。
  • 如果\(b = b^{'}\),攻击者就获胜了。

如果\(B\) 被给定的三元组是\((g^x,g^y,g^{xy})\),那么上述就是一个\(A\) 的完美的模拟。因此之前两个博弈的差距完全在于B和DDH对抗的概率。

结合上面的分析,我们可以很容易地得到A对ElGamal的IND-CPA安全性的优势并不大于B对DDH的优势。因此,如果DDH对于所有多项式时间的对手都是困难的(这意味着它们的优势可以忽略不计),那么ElGamal必须是IND-CPA安全的。

第三十一个知识点:Game Hopping证明的更多相关文章

  1. 第十一个知识点:DLP,CDH和DDH问题都是什么?

    第十一个知识点:DLP,CDH和DDH问题都是什么 这是第11篇也是数学背景的第二篇.主要关注群操作如何被用于设计密码基础. 就像你现在知道的那样,密码学经常依赖于'难问题'.这也就是说,如果我们假设 ...

  2. 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)

    转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...

  3. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  4. COJ969 WZJ的数据结构(负三十一)

    WZJ的数据结构(负三十一) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 A国有两个主基站,供给全国的资源.定义一个主基站 ...

  5. NeHe OpenGL教程 第三十一课:加载模型

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. 三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网 ...

  7. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  8. Java进阶(三十一) Web服务调用

    Java进阶(三十一) Web服务调用 前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd5 ...

  9. Gradle 1.12用户指南翻译——第三十一章. FindBugs 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

随机推荐

  1. Kubernetes:应用自动扩容、收缩与稳定更新

    在前面我们已经学习到了 Pod 的扩容.滚动更新等知识,我们可以手动为 Deployment 等设置 Pod 副本的数量,而这里会继续学习 关于 Pod 扩容.收缩 的规则,让 Pod 根据节点服务器 ...

  2. Android 高级UI组件(三)

    一.popupWindow 1.AlertDialog和PopupWindow最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManage ...

  3. archive后upload to app store时遇到app id不可用的问题

    问题如下图 出现此问题的原因有两种: 1.此app id在AppStore中已经存在,也就是说你使用别人注册的app ID ,  如果是这样,你只能更换app ID 2.此app ID是自己的,突然之 ...

  4. vue 键盘事件keyup/keydoen

    使用: <!DOCTYPE html> <html> <head> <title></title> <meta charset=&qu ...

  5. BigDecimal中要注意的一些事

    一.关于public BigDecimal(double val) BigDecimal中三个主要的构造函数 1 public BigDecimal(double val) 将double表示形式转换 ...

  6. Synchronized和Lock接口

    关于synchronized字段,不管该关键字是修饰方法还是修饰同步代码块,synchronzed拿到的都是对象. 当synchronized修饰的是方法时,synchronized所拿到的是调用该方 ...

  7. Apifox(1)比postman更优秀的接口自动化测试平台

    Apifox介绍 Apifox 是 API 文档.API 调试.API Mock.API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter.通过一套系 ...

  8. 隐藏和显示div的两种方法

    方式一 style="visibility: none;" visiblity:visible -------->可见 visiblity:hidden -------> ...

  9. mrctf2020_shellcode_revenge(可见符shellcode)!!!!

    第一次碰到这种题目,需要用可见符shellcode来做 题目我就不放了,我认为网上大佬会比我说的更加详细 [原创]纯字母shellcode揭秘-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pedi ...

  10. hitcontraining_magicheap

    拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...