博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
密码学基础(二)
阅读量:4565 次
发布时间:2019-06-08

本文共 2871 字,大约阅读时间需要 9 分钟。

完美保密

一个在明文空间M上的加密方案(Gen,Enc,Dec),如果对于每个明文 m ∈ M,对每个密文c ∈ C,其中Pr[C=c]>0,有:

Pr[ M = m | C = c ] = Pr[ M = m ]

则称这种加密方案是完美保密,换句话说,即在“已知了密文的情况下,得到明文的概率”和“在不知道密文的情况下,得到明文的概率”是相等的。

引理:一个在明文空间M上的加密方案是完美保密的,当且仅当,对于每个明文m,m‘ ∈ M,以及每个密文 c ∈ C有:

Pr[ EncK (m) = c ] = Pr[ EncK (m′) = c ]

即加密不同的明文得到相同的密文的概率是一样的。

 引理的证明:

充分性:

如果Pr[M=m] = 0,那么Pr[M=m | C=c] = 0 = Pr[M=m]

如果Pr[M=0] > 0,则:

 必要性:

∵Pr[M=m | C=c] = Pr[C=c | M=m] * Pr[M=m] / Pr[C = c]

 且Pr[M=m | C=c] = Pr[M=m]

∴Pr[C=c | M=m] * Pr[M=m] / Pr[C=c] = Pr[M=m]

Pr[C=c | M=m] / Pr[C=c] = 1

Pr[C=c | M=m] = Pr[C=c]

Pr[C=c and M=m] / Pr[M=m] = Pr[C=c]

∴事件“M=m”与事件“C=c”是两个相互独立的事件

则任意m, m‘ ∈ M,有

Pr[C=c | M=m] = Pr[C=c | M=m']

Pr[Enck(m)=c] = Pr[Enck(m')=c]

完美不可区分

 关于完美不可区分性的定义是基于一个涉及对手A的实验,并形式化了A无法区分一种明文加密和另一种明文加密;因此我们称之为对抗性的不可分辨性。

窃听实验(PrivKeavA, Π):

  1. 敌手A输出一对明文m0,m1 ∈ M
  2. 运行Gen生成一个随机密钥k,并选择一个统一的bit b∈{0,1}。计算密文c←Enck(mb),并返回给A。
  3. A输出一个比特b’
  4. 这个实验的输出为 1 ,当 b=b‘ 的时候;否则输出 0 。记PrivKeavA, Π =1,如果实验输出 1,并且在这种情况下,称A成功猜中了密文对应的明文。

完美不可区分的定义:一个在明文空间M上的加密方案:Π = (Gen, Enc, Dec)是完美不可区分性的,当且仅当对每个敌手A都有:

Pr[PrivKeavA, Π =1] = 1/2

引理:一个加密方案 Π 是完美保密的,当且仅当它是完美不可区分的。

实例:证明维基尼尔加密不是完美不可区分的,至少对于某些确定的参数

设 Π 为两个长度为 2 的字符串的明文空间上的维基尼尔加密方案,并且密钥周期一致地在{1,2}中选择。

敌手 A 的实验策略:

输出两条明文m0 = aa,m1 = ab

对于返回的密文c = c1c2,敌手的输出策略为:如果c1 = c2,则输出 0 (即认为被加密的明文是m0);否则输出 1

敌手 A 实验成功的概率:

Pr[PrivKeavA, Π =1] = ( Pr[A outputs 0 | M=m0] + Pr[A outputs 1 | M=m1] ) / 2

所以可以分两种情况进行讨论:

  • M=m0

如果密钥的周期为1,那么敌手输出 0 的概率为1

如果密钥的周期为2,那么只有当密钥的第一个字母和第二个字母恰好相等的情况下敌手才能输出 0 ,即在这种情况下敌手输出 0 的概率为1/26

∴ Pr[A outputs 0 | M=m0] = ( 1/2 + 1/2 * 1/26 ) = 27/52

  • M=m1

Pr[A outputs 1 | M=m1] = 1 - Pr[A outputs 0 | M=m1]

如果被加密的明文为m1,那么只有当密钥的周期为2,并且密钥的第二个字母恰好比第一个字母小 1 的时候,敌手才会输出 0 。

∴Pr[A outputs 0 | M=m1] = 1/2 * 1/26

∴Pr[A outputs 1 | M=m1] = 1 - Pr[A outputs 0 | M=m1] = 51/52

综上:Pr[PrivKeavA, Π =1] = ( Pr[A outputs 0 | M=m0] + Pr[A outputs 1 | M=m1] ) / 2 = 3/4 > 1/2

所以在此参数下的维基尼尔加密方案并不是完美保密的

One-Time Pad

One-Time Pad加密方案的构造:

选择一个确定的整数 l > 0,那么加密方案的明文空间,密文空间,以及密钥都是长度为 l 的01串

  • 密钥生成算法Gen:生成一个长度为 l 的01串
  • 加密算法Enc:输入一个长度为 l 的01串密钥 k ,以及一个长度为 l 的01串明文 m,输出密文 c = k ⊕ m
  • 解密算法Dec:输入一个长度为 l 的01串密钥 k ,以及一个长度为 l 的01串密文 c ,输出明文 m =k ⊕ c

加密方案的正确性验证:Deck( Enck(m) ) = k ⊕k ⊕m = m,所以这是一个正确的加密方案

证明One-Time Pad加密方案是完美保密的:

首先计算:Pr[C=c | M=m],对任意的c∈C以及任意的m∈M有:

对任意的c ∈ C

 

由贝叶斯定理得:

 ∴此加密方案是完美保密的

完美保密的局限性

  • 完美保密的加密方案的密钥长度至少要和明文的长度一样大

定理:如果一个在明文空间 M 且密钥空间K的加密方案Π(Gen, Enc, Dec)是完美保密的,则|K| ≥ |M|

证明:反证法,假设 |K| < |M| 

设集合M(c) = {m | m = Deck(c),for some k ∈ K}

∵|K| < |M|

∴存在一些m‘ ∈ M,m’ ∉ M(c)

则Pr[M=m' | C=c] = 0 ≠ Pr[M=m]

所以根据完美保密的定义可知,在此种加密方案并不是完美保密

  • 密钥只能被使用一次

假设有两个明文使用了相同的密钥进行加密

如果一个敌手通识获取了c = m ⊕ k 以及c′ = m′ ⊕ k ,那么可以计算:c ⊕ c′ = (m ⊕ k) ⊕ (m′ ⊕ k) = m ⊕ m′ 

敌手因而可以获取两个明文m和m‘的异或取值,而完美保密要求敌手无法通过密文获取任何关于明文的信息

香农定理

假设对明文空间M上的加密方案Π(Gen, Enc, Dec)有|M| = |K| = |C|,则这种加密方案是完美保密当且仅当:

  1. 对任意密钥k ∈ K,k 被选中的概率都相等,都等于 1/|K|
  2. 对于任意的明文m ∈ M,以及任意的密文c ∈ C,则存在一个唯一的密钥 k ∈ K使得Enck(m) = c

转载于:https://www.cnblogs.com/Hahahang/p/11527610.html

你可能感兴趣的文章
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>
MyEclipse 检出新项目后,如果项目名称签名有个红色感叹号
查看>>
Java开发环境系列:一篇能解决你99%问题的排雷日记
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
Shell成长之路
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
OpenCV中的split函数
查看>>
MongoDB divide 使用之mongotempalte divide
查看>>
SSH不允许进行DNS解析
查看>>
Git(介绍和安装)
查看>>
磁盘管理
查看>>
重写与重载
查看>>
Python 爬取qqmusic音乐url并批量下载
查看>>