第三十一个知识点: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. 日常Java 2021/10/31

    泛型类 泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分.和迈型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开.一个泛型参数,也被称为一个类型变量, ...

  2. abide, able, abnormal

    abide 近/反义词:1. 忍受: bear, endure, put up with, stand, tolerate2. 遵守(abide by): accept, comply, confor ...

  3. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  4. 如何通过 User-Agent 识别百度蜘蛛

    如果有大量的百度蜘蛛抓取网站就需要注意了:有可能是其他爬虫伪造百度蜘蛛恶意抓取网站. 如果遇到这种情况,这时候就需要查看日志来确定是不是真正的百度蜘蛛(baidu spider).搜索引擎蜘蛛.用户访 ...

  5. Excel 数据验证:分类选择及输入限制

    几个简单设置让你的数据不再出错 如何快速选择某一大类中的细分小类 多级菜单 注意:引用可以创建二级目录,但是引用前应先用公式定义名称,然后引用,引用只能在本sheet操作.

  6. 软件测试人员必备的linux命令

    1 目录与文件操作1.1 ls(初级)使用权限:所有人功能 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录). 参数 : -a 显示所有档案及目录 (ls内定将档案名或目录名称开头为 ...

  7. 【Linux】【Basis】Kernel

    Linux Kernel:               CentOS启动流程:POST --> Bootloader(BIOS, MBR) --> Kernel(initrd) --> ...

  8. 【Java 8】Optional 使用

    一.前言 如果要给 Java 所有异常弄个榜单,我会选择将 NullPointerException 放在榜首.这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null ...

  9. noVNC实现浏览器远程访问Windows桌面

    一.简介 1.VNC介绍 VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件.VNC 是在基于 UNIX 和 Linux 操作系统的免费 ...

  10. Xpath 使用技巧

    使用xpath 简介 常见语法 选取节点 谓语 通配符 选取多个路径 运算符 其他用法 使用contains选取包含属性 使用tostring()将对象转换为字符串 使用starts-with 使用n ...