本文首发于本人的:能否通俗地解释下密码学中的归约证明? - ChainingBlocks的回答 - 知乎
https://www.zhihu.com/question/49441102/answer/1737942968

1 从问题出发

假设现在我们提出了一个密码学方案或者协议 [公式] ,我们需要证明它是安全的。怎么证明?

我们的协议一般是建立在已经被证明安全的协议/方案上面,或者建立在某些困难问题(记为Y)上面,比如RSA公钥加密算法就是建立在因数分解困难问题上。为了简化证明,站在巨人的肩膀上,我们希望通过搭建下面的逻辑命题关系来完成我们的证明。

条件命题1:只要Y是安全的,那么我们的方案 [公式] 就是安全的。换句话说,若Y被有效攻破,那么 [公式]就不再安全。

这样做的好处是,我们站在了巨人的肩膀上:我们不需要从头开始证明,而是从Y开始。大大简化我们的证明过程。

密码学中的归约证明(reduction proof)是密码学非常重要的知识。现代密码学中的几大公钥加密算法建立在几个困难问题假设上面,比如大整数因数分解困难问题(Integer factorization)和离散对数问题(Discrete log problem)。很多现代密码协议或者密码加密方案建立在这些困难问题上面,比如RSA公钥加密算法就是建立在因数分解困难问题上,因此,如果某一天该困难问题能被快速计算出来(多项式时间复杂度),那么所有建立在这个假设上面的协议/方案都变得不安全了。
根据离散数学的条件命题的逻辑等价式,若两个命题有如下关系: [公式] ,等价于 [公式] 。比如“只要晴天,我就去跑步”,等价于“如果我不去跑步,那么不是晴天”。这个命题等价式是“反证法”的基础。它被用在规约证明中证明某一个新提出的方案X的安全性(也即是下面的Thm),证明的形式为:

Thm(定理):Y 是安全的 [公式] X是安全的。

证明:

通过等价变换,也即是要证明(记为条件命题2):X不是安全的 [公式] Y不是安全的。

条件命题2进一步解释为:如果存在PPT的对手A可以攻破X,那么我们能构造一个PPT的敌手B来攻破Y。

其中,X是我们新提出的方案,Y某一个困难问题,PPT是多项式概率时间的英文缩写。“构造”一词可以理解为模拟。

如果我们能够让上面粗体的条件命题2成立,那么我们就完成了规约证明。这其实是一个反证法:若上面粗体的条件命题2成立,也意味着Thm成立,完成证明。

小结:现在我们明白了我们为什么要使用规约证明,以及使用规约证明的基本形式。接下来的问题是,如何来构造这个条件命题?

2 构造条件命题

我们将上面(B,Y)和(A,X)的关系表示成下图。其中A是试图攻破X的敌手;B是试图攻破Y的敌手。A作为B的一部分,B并不知道A是如何工作的。B是A的外部环境,它要模拟对A的输入和接收A的输出,让A完成对X的攻击游戏。密码学中经常使用Game的形式来定义一个协议的安全性。虽然A的外部环境是由B模拟的,但是,我们要求该模拟的环境等价于真实的A攻击X的game的环境(或者说A无法区分其外部环境是模拟的还是真实的)。因此,这里我们也叫B为模拟器。

除了B要完成上面的工作,它还需要应对别人(B的外部环境)对它的挑战:挑战B能否攻破Y。

结合下图,intuitively,在B接收到外部环境的挑战(chel)之后,将chel进行适当变换(图中红色部分,也即是进行模拟),将其输入给A,让A挑战X。B根据A的输出,适当地变换输出值,输出给外部环境,完成挑战。因此,B对Y的挑战转嫁到A对X的挑战上了。如果我们能够将下面条件关系关联起来,就完成了证明:A对X挑战成功[公式] B对Y挑战成功,或者说 只要X不安全 -> 那么Y就不安全。

如何建模“挑战成功”?我们使用概率。在二选一的Game中,如果A成功的概率为1/2+non-neg(n),那么A就是成功的。neg(n)表示很小的值;而non-neg表示不是很小的值。同理,如果B要赢这个挑战Y的Game,其成功的概率也需要1/2+non-neg(n)。

小结:

证明过程需要:

(1)PPT:A是PPT的;红色部分的计算复杂度是PPT的。具体“红色部分”是什么呢?不同的协议不一样,下面会给出example。

(2)模拟:B所模拟A的外部环境需要看起来像“挑战X的game”的外部环境。

(3) 概率:通过概率计算出下面命题成立,来证明“A对X挑战成功 [公式] B对Y挑战成功”:P(A) = 1/2+non-neg(n) [公式] P(B) =1/2+non-neg(n)(它的逆反命题是:只要Y是安全 -> 那么X就是安全)

3 一个通俗的例子

3.1 scenario:

下面我们通过一个伪随机生成器(PRG)来构造一个单次定长的加密算法。具体为下图所示。本文默认读者知道这个知识点。需要注意的是,伪随机生成器的结果是确定的,也即是在下图s不变时,两次调用PRG得到的结果是一样的。其中s是伪随机数。

该PRG-base Enc加密方案(记为X)的intuition是,如果PRG的生成结果G(k)是随机的,那么通过与消息m异或,得到随机的密文c。

这里我们要证明命题条件:

Thm: G是安全的PRG [公式] X在Eavesdropping攻击下安全。

3.2 具体证明过程

因为B的外部环境跟A的外部环境是不一样的,所以需要B通过上图中红色的代码将B所接收到的输入进行适当转换完成模拟,再输入给A(转嫁挑战)。

红色部分的代码解释为:B接收A传来的两个消息,m0和m1,随机地选择消息m0或者m1来与r异或得到密文c。将c输入给A(转嫁挑战),A完成对X的挑战输出b’,然后B根据b和b’的关系决定B它自己对Y的挑战的结果R或者PR。R表示完全随机的,PR表示伪随机的。具体地,如果b’=b,说明A此次挑战成功,说明方案X安全性不够高,也即不是完全随机的(伪随机PR的),因此B输出PR;反之,若b’!= b,说明A此次挑战失败,说明X安全性高,完全随机的,因此B输出R。

表示X是不安全的,A挑战成功的概率为:

Pr[b’ = b] = 1/2 + non-neg(n) (1)

表示Y是不安全的,概率表示为:

Pr[B 输出 R | r is R] = Pr[B 输出R | r is PR] [公式] non-neg(n) (2)

为了将(1)和(2)联系起来,构造我们前面“只要…就…”的条件命题,于是做如下变换,我们将式(2)中的“B输出R”换成"b’[公式]b",并根据式(1)计算出式(2)变换后的概率:

等式(2)左边部分等价于 Pr[b’[公式]b | r is R] = 1/2 (请结合上面图片红色部分代码看). (3)

等式(2)右边部分等价于Pr[b’[公式]b | r is PR] = 1/2 - non-neg(n),也即是A此次挑战失败,即用1减去式(1)得到。(4)

式(3)减(4)得到Pr[b’[公式]b | r is R] - Pr[b’[公式]b | r is Pr] = non-neg(n) (记为式(5)),它是non-negligible的,表示Y是不安全的。至此,我们推出了:只要X是不安全的(式(1)) [公式] 那么Y是不安全的(式(5))。这样我们就完成了Thm的逆反条件命题。根据条件命题等价关系,Thm得证。

------------------------内容添加-------------------------

其实不使用反证法也是可以证明X是安全的。具体为:

当输入的r是完全随机的,那么B挑战Y成功的概率是:

Pr[B® = 1] = 1/2; (6)

当输入的r是使用PRG产生的,即r=G(s), 那么B和A分别挑战Y和X成功的概率相等,因为A作为B的一部分所看到的视角,与A不作为B的一部分,在游戏中所看到的视角是一样的。即

| Pr[B(G(s)) =1] = Pr[A© = 1] | (7)(注意这里A接收输入是密文c)

因为G是伪随机生成器,并且B是PPT的,所有B无法区分完全随机的r和G(s),所有下面两个概率只差的绝对值不大于neg(n):

| Pr [B® = 1] - Pr [B(G(s)) = 1] | <= neg(n). (8)

将式(6)和式(7)代入式(8),得到:

|1/2 - Pr[A© = 1]| <= neg(n). (9)

这推出Pr[A© =1] <= 1/2 + neg(n). 又因为A是PPT的,所以在eavesdropper下,A无法区分协议X是随机的还是伪随机的,得证。

这个证明方式参考书Introduction to Modern Cryptography, second edition, Page 69.

小结:反证法不是必须的。

reference

(梯子自备) https://www.youtube.com/watch?v=zHMecblCmAM&list=PL4wmOqlgHT2lBQfChNbkNaTlJOXrqIlHe&index=3
2. 《Introduction to Modern Cryptography, second edition》, page 65.

通俗地解释下密码学中的归约证明相关推荐

  1. [react] 解释下react中component和pureComponent两者的区别是什么?

    [react] 解释下react中component和pureComponent两者的区别是什么? 组件的state或者props更新都会触发render(),同时也会导致子组件render()重新渲 ...

  2. 通俗的解释下音视频同步里pcr作用

    PCR同步在非硬件精确时钟源的情况还是谨慎使用,gstreamer里面采用PCR同步,但是发现好多ffmpeg转的片儿,或者是CP方的片源,pcr打得很粗糙的,老是有跳帧等现象. 音视频同步,有三种方 ...

  3. 用通俗的话解释下offsetHeight

    offsetHeight包括边框和内部空白补丁.但超出元素的内容则不被计算.也就是说只返回元素的可见高度值.如果看得着边框,从上边框到下边框的距离则是offsetHeight返回的值. 经过测试无论在 ...

  4. 密码学归约证明——定长对称加密密钥的敌手不可区分性

    1. 前言 针对任伟译<现代密码学--原理与协议>这本书中,将reduction一词翻译成"规约",根据笔者在网上查阅资料,最终认为翻译成"归约"更 ...

  5. c java python html_如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处

    世界上本来没有计算机,工程师创造了它. 为了让告诉计算机需要做什么事情,工程师发明了程序设计语言. 简单粗暴的编程: C语言:用来学编程: C++语言:用来使劲儿学编程: C#:用来在windows操 ...

  6. 如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处

    世界上本来没有计算机,工程师创造了它. 为了让告诉计算机需要做什么事情,工程师发明了程序设计语言. 简单粗暴的编程: C语言:用来学编程: C++语言:用来使劲儿学编程: C#:用来在windows操 ...

  7. java反射通俗解释,谁来帮用通俗易懂的语言解释下java的反射机制

    谁来帮用通俗易懂的语言解释下java的反射机制以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 谁来帮用通俗易懂的语言解释 ...

  8. 为什么用线程池?解释下线程池参数?线程池处理流程?阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理?

    为什么用线程池?解释下线程池参数? 1.降低资源消耗:提高线程利用率,降低创建和销毁线程的消耗. 2.提高响应速度:任务来了,直接有线程可用可执行,而不是先创建线程,再执行. 3.提高线程的可管理性: ...

  9. 密码学加密算法分类_密码学中的国际数据加密算法(IDEA)

    密码学加密算法分类 Introduction 介绍 International Data Encryption Algorithm (IDEA) is a type of cryptography a ...

最新文章

  1. 如何设计一个高可用系统?要考虑哪些地方?
  2. Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局
  3. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
  4. VUE 解决:Method “xxx“ has already been defined as a data property.
  5. IDEA自动生成功能
  6. TM2008 Preview体验
  7. XShell 与 xftp 官网免费下载(亲测有效)
  8. java g1 配置_项目G1 jvm 常规参数配置
  9. 微软阿根廷服务器解锁,XBOX阿根廷服购买教程
  10. JavaScript 原生js实现鼠标拖拽移动盒子图片
  11. [C++] printf pitfall
  12. js:网页中的高和宽(document)
  13. Python爬取猫眼电影榜单评分,以及评论
  14. 关于图片以及格式UTI
  15. 就业寒冬到来?“全面停止社招”,这是谁造的谣?
  16. c语言文学研究助手报告,文学研究助手数据结构报告.doc
  17. 论文阅读VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training
  18. IT人物之《Netty权威指南》中文作者 专访华为李林锋:我与Netty那些不得不说的事
  19. 从大数据到“智能数据” MindSphere将重新塑造中国锂电制造的未来
  20. python对象可分为什么_Python是面向对象的编程语言,而对象拥有各种特性、功能,专业术语称之为____...

热门文章

  1. mysql数据库导出数据乱码问题_Mysql数据库导出来的是乱码如何解决
  2. 什么是嵌入式培养?要不要选嵌入式培养?
  3. Unity HDRP中解决抗锯齿问题
  4. SAP系统Sizing的原理
  5. 腾讯云服务器查看防火墙规则,腾讯云云防火墙的常见问题
  6. 能编程100行的c语言题目,C语言编程100题
  7. IDEA 快捷键 代码上移一行 下移一行 快捷键 try catch 块 快捷键
  8. python实现单词的简单爬取
  9. 小福利,采用excel函数制作大屏可视化,用sumifs函数快速统计汇总数据,锁行锁列以及锁列不锁行
  10. 你可以把Linux内核当成一家软件外包公司的老板