Chapter 2 可证明安全(Provable Security)基础

要想证明安全性,首先需要对安全进行定义,才能证明某一个方法能够保证什么安全性,或者说明它为什么不安全。毕竟密码学并不能解决所有安全问题。

文章目录

  • Chapter 2 可证明安全(Provable Security)基础
    • 一、安全定义(security definition)
      • 1、对称密钥密码
      • 2、正确性的定义
      • 3、安全性的定义
        • (1)基本概念
        • (2)安全性的两种定义
        • (3)两种安全性定义的关系
    • 二、如何证明不安全
    • 三、使用Hybrid方法证明安全性

一、安全定义(security definition)

1、对称密钥密码

定义2.1 对称密钥密码(symmetric-key encryption,SKE)通常由以下三个算法构成:

  • KeyGenKeyGenKeyGen:一个随机算法,生成一个密钥 k∈Kk \in Kk∈K(KKK称为密钥空间,下面类似)
  • EncEncEnc:加密算法,输入明文m∈Mm \in Mm∈M和密钥k∈Kk \in Kk∈K,输出密文c∈Cc \in Cc∈C
  • DecDecDec:解密算法,输入密文c∈Cc \in Cc∈C和(同一个)密钥k∈Kk \in Kk∈K,输出明文m∈Mm \in Mm∈M

上述三个算法的集合记为Σ\SigmaΣ,里面的元素可以如Σ.KeyGen\Sigma.KeyGenΣ.KeyGen表示。

2、正确性的定义

定义2.2 一个对称密钥密码算法是正确的,意味着对于所有的k∈Kk \in Kk∈K和m∈Mm \in Mm∈M,都满足:
Pr[Σ.Dec(k,Σ.Enc(k,m))=m]=1Pr[\Sigma.Dec(k, \Sigma.Enc(k, m))=m]=1 Pr[Σ.Dec(k,Σ.Enc(k,m))=m]=1
这个定义比较容易理解,就是用同一密钥解密密文后,必须得到的是原来的明文,才能是正确的。

3、安全性的定义

(1)基本概念

在正式介绍安全性的形式化定义前,先介绍一些概念。我们将把密码算法和偷听者的攻击视为一些程序,因此需要先了解以下概念。

定义2.3 一个库(library)LLL是一些子程序(也可以理解为函数)和私有变量(比如密钥)的集合。库的接口是其中所有子程序的名字、输入输出参数。如果一个程序(program)AAA调用了LLL中的一些子程序,那么A⋄LA\diamond LA⋄L就是实际调用后的输出结果(可以理解为程序AAA与函数库LLL链接,然后执行AAA)。

库可以理解为一些函数的源代码,对于偷听者而言是知道的;但是在执行过程中,那些私有变量的真实取值是不知道的——这是符合Kerckhoffs原则的。

定义2.4 库的等价性(Interchangeable):对于两个有相同接口的库Lleft,LrightL_{left},L_{right}Lleft​,Lright​,两者等价(Lleft≡LrightL_{left}\equiv L_{right}Lleft​≡Lright​)当且仅当对于所有输出结果为布尔值的程序AAA,都有
Pr[A⋄Lleft⇒true]=Pr[A⋄Lright⇒true]Pr[A\diamond L_{left} \Rightarrow true]=Pr[A\diamond L_{right} \Rightarrow true] Pr[A⋄Lleft​⇒true]=Pr[A⋄Lright​⇒true]
由定义可知,如果判断两个库相等,需要计算概率。不过在一些简单情况下,也可以根据库进行具体判断(相当于看库中的代码),比如输出结果可能与某些输入参数无关,或者有一些不可达的分支(如下所示)。

(2)安全性的两种定义

目前对于安全性有两种角度的理解。

第一种称为“real vs random”,也就是如果加密所得的真实密文的概率分布,看起来和随机(均匀)选取一个密文一样,那么偷听者将无法从密文中获取信息。下面是形式化定义:

定义2.5 一个密码算法Σ\SigmaΣ有一次性的均匀分布的密文(one-time uniform ciphertexts),当且仅当

图中的$符号代表其中含有的随机性。

第二种安全性的定义称为“left vs right”,也就是对于任意的两个明文,他们所得的密文的概率分布是一样的,因此无法区分。下面是形式化定义:

定义2.6 一个密码算法Σ\SigmaΣ有一次性安全性(one-time secrecy),当且仅当:

在第一章中提到的一次性密码本,就满足上述两种安全性的定义。

(3)两种安全性定义的关系

定理2.1 满足定义2.5则一定满足定义2.6,即Lots−realΣ≡Lots−randΣ⇒Lots−LΣ≡Lots−RΣL_{ots-real}^\Sigma \equiv L_{ots-rand}^\Sigma \Rightarrow L_{ots-L}^\Sigma \equiv L_{ots-R}^\SigmaLots−realΣ​≡Lots−randΣ​⇒Lots−LΣ​≡Lots−RΣ​

证明:第1步将其拆成了库的调用,主要是因为已知部分的输入只有一个参数。然后第2步是使用了条件(real和rand等价)。第三步是因为rand算法的结果与输入参数无关,因此可以换参数。第4步再次使用条件,最后得证。

这里的等价变化其实也是用了hybrid方法,详见本章的第三节

定理2.2 满足定义2.6不一定满足定义2.5

证明:只要给出一个反例即可。比如下面这个密码算法,它是在一次性密码本的基础上,密文末尾加了两个0。由于一次性密码本是满足定义2.6的,因此对于任意两个明文,末尾加0后,两者的密文的概率分布仍然相同,因此满足定义2.6。但是在当前的密文空间上,一个明文加密所得的密文必然以00结尾,不满足均匀分布,故不满足定义2.5。

这里并没有说哪一种安全性定义更优,而是应当看更关注定义中什么性质

二、如何证明不安全

无论是哪种安全性的定义,我们只需要找到一个程序AAA,使得安全性定义中的两个库的执行结果(概率)不一样,就能证明该密码算法是不安全的。下面给出一个简单的例子。

对于如下密码算法:

按照安全性定义2.5,需要证明如下两个库等价。显然,根据按位与的性质,对于real部分,如果输入的是全0,那么输出的密文一定是全0,这显然与右边的随机算法的输出的概率分布不同。

因此,可以找到如下的一个程序,这个程序将证明Pr[A⋄Lots−realΣ⇒true]=1,Pr[A⋄Lots−randΣ⇒true]=12λPr[A\diamond L_{ots-real}^\Sigma \Rightarrow true]=1,Pr[A\diamond L_{ots-rand}^\Sigma \Rightarrow true]=\frac{1}{2^\lambda}Pr[A⋄Lots−realΣ​⇒true]=1,Pr[A⋄Lots−randΣ​⇒true]=2λ1​,因此两个库不等价。

按照安全性定义2.6,需要证明如下两个库等价。

同样的思路我们可以找到如下的程序,证明两个库不等价。

三、使用Hybrid方法证明安全性

原文的词为Hybrid Technique,在此称为Hybrid方法。

根据安全性的定义,证明需要计算概率,如果密码算法十分复杂,那么可能难以计算。因此Hybrid方法是希望通过一些等价转换(中间的库就称为hybrids),将待证明安全的密码算法转化为已证明安全的密码算法,从而简化安全性的证明。在给出具体示例之前,先介绍一些引理。

第一个引理是(A⋄L1)⋄L2(A\diamond L_1) \diamond L_2(A⋄L1​)⋄L2​与A⋄(L1⋄L2)A\diamond (L_1 \diamond L_2)A⋄(L1​⋄L2​)的结果相同。前者可以理解为,程序AAA将一些L1L_1L1​的函数内联(就是把调用的子程序直接展开),生成一个只调用L2L_2L2​的程序。后者可以理解为是链接了一个复合库(compound library),即库L1L_1L1​可以调用库L2L_2L2​。

第二个引理则是等价库的性质:如果Lleft≡LrightL_{left}\equiv L_{right}Lleft​≡Lright​,则任意的库L∗L^*L∗,都有L∗⋄Lleft≡L∗⋄LrightL^*\diamond L_{left} \equiv L^*\diamond L_{right}L∗⋄Lleft​≡L∗⋄Lright​ 。证明如下:


这个引理将方便后续证明中,用已知的安全库的等价,对式子进行变换。

下面,给出一个简单的使用Hybrid方法证明安全性的例子:证明如下密码算法的安全性(定义2.5)。该密码算法是在一次性密码本(OTP)的基础上,多进行了一次加密(两次异或)。

证明:这里的思路是希望转化为已证明过安全性的一次性密码本(库的下标是otp,有Lotp−real≡Lotp−randL_{otp-real}\equiv L_{otp-rand}Lotp−real​≡Lotp−rand​)。因此第一步是转化为一次性密码本。第二步则利用了一次性密码本的安全性(等价),根据第二个引理进行替换。第三步是将库进行内联。最后简化无用代码。

值得注意的是,在使用Hybrid方法的时候,一定要注意每一步的等价性,否则将出错。

【Joy of Cryptography 读书笔记】Chapter 2 可证明安全(Provable Security)基础相关推荐

  1. 【Joy of Cryptography 读书笔记】Chapter 6 伪随机函数(Pseudorandom Function)分组密码(Block Cipher)

    Chapter 6 伪随机函数(Pseudorandom Function)&分组密码(Block Cipher) 文章目录 Chapter 6 伪随机函数(Pseudorandom Func ...

  2. 【Joy of Cryptography 读书笔记】Chapter 1 一次性密码本(one-time pad)Kerckhoffs原则

    Chapter 1 一次性密码本(one-time pad)&Kerckhoffs原则 文章目录 Chapter 1 一次性密码本(one-time pad)&Kerckhoffs原则 ...

  3. 【Joy of Cryptography 读书笔记】Chapter 8 分组密码的工作模式(Modes of Operation)

    Chapter 8 分组密码的工作模式(Modes of Operation) 文章目录 Chapter 8 分组密码的工作模式(Modes of Operation) 一.常见的工作模式 1.EBC ...

  4. 【Joy of Cryptography 读书笔记】Chapter 4 基于难解计算(Intractable Computation)的密码学

    Chapter 4 基于难解计算(Intractable Computation)的密码学 John Nash提出一个观点:如果破解一个密码算法的计算耗费时间很长,那么这个密码算法从实用的角度上是安全 ...

  5. 《C++捷径教程》读书笔记--Chapter 16--模板(完结)

    //--<C++捷径教程>读书笔记--Chapter 16--模板(完结) //--Chapter 16--模板 //--04/16/2006 Sun. //--Computer Lab ...

  6. 《C++捷径教程》读书笔记--Chapter 14--继承(完结)

    //--<C++捷径教程>读书笔记--Chapter 14--继承(完结) //--Chapter 14--继承 //--04/14/2006 Friday //--Computer La ...

  7. 《C++捷径教程》读书笔记--Chapter 10--结构与联合

    //--<C++捷径教程>读书笔记--Chapter 10--结构与联合 //--Chapter 10--结构与联合 //--11/24/2005 Thurs. //--Computer ...

  8. [The Path to QUANT] 《Volatility Trading》by Euan Sinclair 读书笔记 Chapter 3

    <Volatility Trading> by Euan Sinclair Chapter 3 收益率和波动率的典型事实 典型事实列表 波动率并非常数 收益率分布 成交量和波动率 波动率分 ...

  9. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第五章 着色基础 Shading Basics

    写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了.不对之处甚多,以后理解深刻了,英语好了再回来修改.相信花在本书上的时间和精力是值得的. -- ...

最新文章

  1. 利用mem数组完成MM32 的 MicroPython中UART1的(REPL)的交互
  2. Mac-使用技巧之快捷键
  3. c语言 宏 变长参数,科学网—C/C++中处理变长参数函数(Variadic Function)的几个宏 - 彭彬的博文...
  4. RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景?
  5. asp建站系统源码_【服务器安全】windows系统安全注意事项
  6. linux window nginx性能,Nginx负载均衡搭建(Window与Linux)
  7. 用最简单的例子理解策略模式(Strategy Pattern)
  8. radio切换控制div显示_JavaScript连载31图片动态切换以及关闭图片案例
  9. Atitit.输入法配置说明v1 q229
  10. 技术能力和工作能力的联系和区别
  11. javascript(JS)---立即执行函数(immediately-invoked function expressions,IIFE)
  12. 标注线段长度批量lisp_晓东CAD家园-论坛-每日插件-求批量多线段长度标注-求批量多线段长度标注插件!万分感谢!!! - Powered by Discuz!...
  13. Boxy SVG for Mac版矢量图编辑软件
  14. Unity游戏配置存储方案
  15. I-SVM SVM增量学习
  16. pdo mysql 教程_PDO入门教程
  17. 【Hive】常用日期格式转换和计算
  18. YOLOv3 物体识别显示中文标签
  19. C#怎么修改生成的EXE文件图标
  20. Word 插入图片后只剩一点?如何解决

热门文章

  1. python编写一个班级类 点名簿_班级小游戏
  2. 器件 — ISOLATION AMPLIFIER — ISO124 Precision Lowest Cost ISOLATION AMPLIFIER
  3. 单行文本溢出和多行文本溢出省略...
  4. 二代身份证读取-微调版
  5. 交叉熵损失函数(softmax分类器)
  6. For macOS.百度网盘 破解SVIP、下载速度限制~
  7. python链表合并去重_合并两个链表并去重(php实现)
  8. c语言ni保存成tdms文件,使用C++读写TDM以及TDMS文件
  9. java读取pdf多表格_在Java中使用tabula提取PDF中的表格数据
  10. 浙江省职业技能考试大纲计算机,浙江高校招生职业技能考试大纲:计算机类