首页 > 其他分享 >如何写好Simulation证明(一): 语义安全

如何写好Simulation证明(一): 语义安全

时间:2024-05-09 12:34:25浏览次数:15  
标签:定义 语义 敌手 证明 mathcal Simulation

密码学中很多证明需要用到Simulation, 尤其是ZK, MPC等等. 对于初学者来说, 涉及Simulation的证明往往不容易理解, 更别说自己独立证明, 所以有必要学习一下如何写这样的证明.
文章主要参考Yehuda Lindell的讲义: How to simulate it.

1. Introduction

什么是Simulation? 中文翻译成模拟. 在证明中, 我们需要用Simulation去说明, 某件事在"真实世界"和"理想世界"中是差不多的. 理想世界就是secure by definition, 是安全性定义里的安全.

举个例子, 语义安全性(semantic security)中, 要求接收到密文的敌手和什么都没有接收到的敌手学到的东西一样. 后者就是理想世界. 显然理想世界中的敌手学到的东西为0, 所以实际上需要证明的东西就是现实世界中敌手学到的东西为0. 可能会有人觉得这样定义很冗余. 但是事实上这样的定义能够formal地说明, 现实世界的敌手"learned nothing".

2. The Basic Paradigm: Semantic Security

基于复杂性的密码学就诞生于Semantic Security的定义. 这个定义形式化的表达了"nothing be learned".

2.1 定义

在给出定义前, 我们先做一些解释. 这个定义允许敌手在之前获得一些额外的关于明文的消息 \(h\) (可能是通过各种方式泄露出去的), 增强定义的鲁棒性.

语义安全性的正式定义如下:

现在有对称加密方案 \((G, E, D)\), 若对于任意的 nuPPT \(\mathcal A\), 都存在 nuPPT \(\mathcal A'\), 使得对于任意的prob. ensemble \(\{X_n\}_n\), \(|X_n| < poly(n)\), 对于任意的 poly-bound 函数 \(f, h\), 所有多项式 \(p()\), 当 \(n\) 足够大时, 下面的不等式成立, 则该方案是语义安全的.

\[\begin{aligned} &\Pr_{k \gets G(1^n)} [\mathcal{A}(1^n,E_k(X_n),1^{|X_n|},h(1^n,X_n))=f(1^n,X_n)] \\ <&\Pr\Big[\mathcal{A}'(1^n,1^{|X_n|},h(1^n,X_n))=f(1^n,X_n)\Big]+\frac{1}{p(n)}. \end{aligned} \]

定义中涉及符号比较多, 我们简单解释一下. \(\mathcal A\) 是获得了密文的敌手, 它的输入中有 \(E_k(X_n)\). \(\mathcal A'\) 是没有获得密文的人, 输入为明文 \(X_n\) 的长度. 其中函数 \(h\) 表示的是一些附加信息. \(\mathcal A\) 和 \(\mathcal A'\) 都分别尝试去猜函数 \(f(1^n,X_n)\) 的值, 要求他们猜的结果是几乎一样的.

2.2 分析

我们对语义安全性的定义进行分析. 虽然定义中并没有明确提出Simulation, Real world这些字眼, 但是实际上暗含了这个意思. 我们想 \(\mathcal A'\) 其实就是理想世界, 他获得的东西只有 \(h\) 和 \(X_n\) 的长度. 所以他能学到的知识就是从这两个东西中来的. 而 \(\mathcal A\) 就是真实世界, 他们两个学到知识的比较, 其实就是real world 与 ideal world的比较.

下面我们看如何使用定义证明一个加密方案是语义安全的. 主要的问题就是如何构造一个 \(\mathcal A'\), 与 \(\mathcal A\) 以几乎相同的概率输出 \(f(1^n, X_n)\). 方法就是让 \(\mathcal A'\) simulate \(\mathcal A\) 的执行, 然后输出 \(\mathcal A\) 的输出. 但还有一个问题, 就是 \(\mathcal A\) 真的接收到了一个密文, 但是显然 \(\mathcal A'\) 是没有的. 解决方法是 \(\mathcal A\) 喂给 \(\mathcal A\) 一堆垃圾. 下面是具体的模拟.

Simulator \(\mathcal A'\) with input \((1^n,1^{|X_n|},h(1^n,X_n))\):

  1. Run \(G(1^n)\) to get \(k\)(secret key).
  2. Compute \(c = E_k(0^{|X_n|})\).
  3. Run \(\mathcal A(1^n, c,h(1^n,X_n))\) and output what \(\mathcal A\) outputs.

这个simulation可行的前提是: 该加密方案是indistinguishable的. 这样的话 \(\mathcal A\) 无论是收到什么消息的加密, 输出都是一样的. 否则 \(\mathcal A\) 就能区分消息的加密了.

2.3 总结

这个证明实际上是一个典型的simulation proof. 我们通过构造一个模拟器simulator, 他的内部调用敌手运行敌手的程序. 然后证明这个simulator的输出和敌手的输出是不可区分的. 在这个例子中, 我们让simulator给敌手一堆不可区分的垃圾, 以此完成构造.

标签:定义,语义,敌手,证明,mathcal,Simulation
From: https://www.cnblogs.com/yangm17/p/18181868

相关文章

  • 制作语义分割数据集(VOC格式)
    环境:python3.8labelme=5.0.11、使用labelme标注工具直接在命令行安装或者在anaconda下面新建虚拟环境安装(避免污染环境,不用的时候可以直接delete该环境)直接命令行(base)安装 pipinstalllabelmelabelme创建虚拟环境安装,python版本选择3.8.x,打开AnacondaPromptconda......
  • §3. 收敛定理的证明
    不做要求。有能力的同学掌握贝塞尔不等式、黎曼-勒贝格定理和收敛定理的证明。  贝塞尔(Bessel,FriedrichWilhelm,1784~1846)德国天文学家,数学家,天体测量学的奠基人之一。1784年7月22日生于明登,1846年3月17日卒于柯尼斯堡。15岁辍学到不来梅一家出口公司当学徒,在学习航海术......
  • 逆向学习-证明自己吧
     PeiD查看一下,无壳IDA打开静态分析,提示key就是输入的值 F5反汇编看下伪代码,发现sub_401060函数是逻辑判断的关键  可以看到想要正确返回有2个条件,但第一个条件只是把v5变成空值,但并不能得到什么内容跟输入的值有关,还是要看第二个条件看下整个函数注意运输逻辑1.首先......
  • 最高院---发包人对质量问题单方委托第三方单位的,第三方单位所作意见不足以单独对抗竣
    (2020)最高法民申3438号  银川双兴昇工贸有限公司、长枫建设集团有限公司建设工程施工合同纠纷再审审查与审判监督申请人主张:双兴昇公司申请再审称,1.一、二审判决认定事实错误。长枫公司、长枫宁夏分公司在合同履行过程中存在偷工减料、未按图施工的违约行为,案涉钢结构厂房不符......
  • verilog 语义理解
    在verilog使用过程中,产生以下几个问题wire和reg的语义是什么,有什么不同?阻塞赋值和非阻塞赋值的语义是什么?assign和always语义是什么?弄清语义是为了正确的使用,不仅是结果正确,比如有时候可能两种写法得到的结果是一样的但是从语义来看会有一种是更适合当前语境的......
  • 一些组合数学的证明
    广义二项式系数\(\dbinom{a}{n}=\dfrac{a^\underline{n}}{n!}\)证明:\(\dbinom{a}{n}=C_a^n=\dfrac{a!}{n!(a-n)!},\dfrac{a^\underline{n}}{n!}=\dfrac{\frac{a!}{(a-n)!}}{n!}=\dfrac{a!}{n!(a-n)!}\)对称公式\(\dbinom{n}{m}=\dbinom{n}{n-m}\)证明:......
  • 零知识证明与同态加密:隐私计算的双剑
    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。在数字时代,隐私保护已成为全球关注的焦点。隐私计算作为解决数据隐私问题的关键技术,其核心目标是在不泄露个人或敏感信息的前提下,实现数据的计......
  • Project0 Nbody-simulation
    讲义:NBodySimulation|CS61BSpring2018为什么使用Git命令+javac??答:这样可以单独的编译和运行某一个程序,而IDE编译一个程序的时候还会编译其它的程序,会很烦人翻译时绕过数学公式goole浏览器按F12进入网页控制台,输入$('math,.math,.MathJax').attr('translate','no');j......
  • 梯度下降法的两个收敛性证明
    **梯度下降法:** 对于无约束最优化问题:$$\mathop{min}_{x}f(x)$$其中$f$是可微函数,梯度下降法的更新方式如下: $$x_{k+1}=x_k-\alpha_k\nablaf(x_k)$$ 步长$\alpha_k$有多种选择方式,普通的梯度法就选择固定步长$\alpha$。 下面介绍固定步长的梯度下降法在凸函数以及强凸函数......
  • C++ 多态与虚拟:Class 语法语义
    1.object与class:在object-orientedprogramming编程领域,对象(object)有更严格的定义。对象是由数据结构和用于处理该结构的过程(称为methods)组成的实体(instance)。这些方法由对象接收的消息激活。一个对象的内部数据结构与其他对象完全隔离(此属性称为“encapsulation”)。对象是基于模......