第三十一个知识点: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. python 多态、组合、反射

    目录 多态.多态性 多态 多态性 鸭子类型 父类限制子类的行为 组合 面向对象的内置函数 反射 多态.多态性 多态 多态通俗理解起来,就像迪迦奥特曼有三种形态一样,怎么变还是迪迦奥特曼 定义:多态指的 ...

  2. 安全相关,xss

    XSS XSS,即 Cross Site Script,中译是跨站脚本攻击:其原本缩写是 CSS,但为了和层叠样式表(Cascading Style Sheet)有所区分,因而在安全领域叫做 XSS. ...

  3. jQuery无限载入瀑布流 【转载】

    转载至 http://wuyuans.com/2013/08/jquery-masonry-infinite-scroll/ jQuery无限载入瀑布流 好久没更新日志了,一来我比较懒,二来最近也比较 ...

  4. 【leetcode】1293 .Shortest Path in a Grid with Obstacles

    You are given an m x n integer matrix grid where each cell is either 0 (empty) or 1 (obstacle). You ...

  5. oracle加密encrypt,解密decrypt

    目录 oracle加密encrypt,解密decrypt 加密 解密 oracle加密encrypt,解密decrypt 有的oracle版本没有加解密函数,以下操作可以手动添加 oracle数据使用 ...

  6. Python实战之MySQL数据库操作

    1. 要想使Python可以操作MySQL数据库,首先需要安装MySQL-python包,在CentOS上可以使用一下命令来安装 $ sudo yum install MySQL-python 2. ...

  7. 【Linux】【Shell】【Basic】Bash

    命令历史:shell进程会在其会话中保存此前用户提交执行过的命令: ------------------------------------------------------------------ ...

  8. 【JAVA】【Basic】概念

    1. 历史 1.1. Sun, Green Project, 90年代初,为机顶盒提供一个统一的语言层,oak-->Java, James Gosling, Sun World 1995:JAV ...

  9. 对于React各种状态管理器的解读

    首先我们要先知道什么是状态管理器,这玩意是干啥的? 当我们在多个页面中使用到了相同的属性时就可以用到状态管理器,将这些状态存到外部的一个单独的文件中,不管在什么时候想使用都可以很方便的获取. reac ...

  10. spring切面-单线程简单权限判定

    spring切面简单模拟用户权限判定 需求: 游客:仅注册用户 用户:修改,注册 管理员:删除,查询,修改,注册 1,文件配置 导包 src下创建applicationContext.xml文件配置如 ...