密码学笔记
密码学笔记
离散数学基础
详细内容见http://en.wikibooks.org/High_School_Mathematics_Extensions/Discrete_Probability
以平均分布、点分布为例,简单介绍了概率与分布。
事件与概率
lsb
最低有效位
对称加密
定义
密码由两个算法组成,分别是加密算法和解密算法。一个三元组(k, m, e),k为密钥空间,m为全体可能明文的集合,e为全体密文的集合,这定义了密码的环境。
通信双方除了共享的私钥k,其他所有的都是公开的,包括加密、解密算法。你应当使用业界验证很多年的公开加密算法,而不是使用私有加密算法。(如WEP,wifi的加密算法,非常不安全)
通信过程:
- 输入信息,即原文m;
- 输入密钥k,利用公开算法加密即E(k,m),得到函数值c;
- 将函数值c和密钥k作为公开算法解密的输入,得到原文m。
历史中典型对称加密用例:
- 替换密码(简单的字符映射):凯撒密码(no key,just shift by 3)-> 利用字母的频率进行破解,日常用语中字母频率相对固定。
- DES(Data Encryption Standard):keys = 256 , block size = 64 bits
- ……
OTP一次性密码本
同理,k=m⊕c,因此练习题中选择2
- 优点:计算快,加密解密速度快
- 缺点:密钥需要和明文一样长
对于一次性密码本安全性问题的研究,首先我们需要了解什么是安全的密码,即密码安全的定义
香农教授(Shannon)定义的密码安全性。(对于信息m0
和m1
只有一个前提,它们满足长度相同)
方框内的为该定义的主要内容,通俗即是如果攻击者截取到了一段密文c
,那么密文c出自E(k, m0)
的概率与出自E(k, m1)
的概率应该是相等的,此时攻击者无法得知密文来自于m0
还是m1
。
即密文中无法得知任何关于明文的信息,即对于完美安全的密码,任何惟密文攻击都是无效的
OTP(The One Time Pad,一次性密码本)就是完美安全的密码,只是实际应用上比较麻烦。
即只有一种映射关系。
OTP具有密码完美安全性的证明(不理解这个#是什么意思)
即如果它具有密码完美安全性则密钥数必须不小于明文数,或者说密钥长度必须不小于明文长度
Stream Ciphers 流密码
流密码(Stream Ciphers),OTP改良后的实用性密码。它利用伪随机数发生器(PRG,pseudo-random generator)取代了随机函数,用G表示该伪随机函数。
这个函数取一个种子为输入,我利用{0,1}^s 表示所有长度为s的字符串,这就是种子空间。它将s位种子映射到一个长的多的字符串{0,1}^n , n>>s,种子可能只有128位,我们将其拓展成了一个长得多的字符串。
注意:函数G本身没有随机性
上图表示了流密码的加密解密过程
上面提到了如果它具有密码完美安全性则密钥数必须不小于明文数,或者说密钥长度必须不小于明文长度,因此PRG不是完美安全的
一方面,PRG没有满足完美安全,另一方面,PRG是不可预测的(即给定明文的前缀,攻击者无法推导出整个原文)
针对流密码和一次密码本的攻击:
-
Attack:two time pad is insecure!!多次使用同密码本加密不同原文
得到
m0
和m1
的异或后是非常容易还原两个原文的。由于English和ASCII的冗余度,减少了计算的空间
多次使用流秘钥是错误的❌,历史中的反例:
-
Project Venona
-
MS-PPTP(Windows NT)
-
802.11b WEP(WIFI通信)
100w帧左右出现重复,改良如下:
PRG计算结果的不同部分来分别为不同帧的数据流加密(这种情况下密钥看起来是随机的),即IV参数应该是变化且不重复的。
-
-
Attack:no integrity(OTP is malleable)通过修改密文来对解密造成影响
原文
m
在解密后变成了m⊕p
。From: Bob
变成了From: Eve
,原文被修改了。
RC4
- RC4中不完全满足均匀分布,第二个字节为0的概率为2/256 而不是 1/256(如果不得不使用RC4,推荐从发生器产生的第257个字节开始,前面的字节是不均匀的)。
- RC4的一段长输出中,序列00的出现的可能性更大,1/2563 是偏差,大数据情况下这种偏差影响会更大。
- 根据key来做出攻击。我们以WEP为例,在WEP中key是严格可预测的,因为IV参数是从零开始递增的,所以可以根据key来做出攻击。同理RC4中也有这样的问题,使用的密钥之间紧密联系,导致容易还原出根密钥。
CSS
CSS是基于线性反馈移位寄存器(LFSR)的,原理如图:
线条标注的区域叫做出头,它只在特定单元出现。新单元是出头的异或,而最右单元被抛弃。
CSS使用两个寄存器,一个17-bit
另一个25-bits
。
17 = 1 + first 2bytes = 1 + 16 bits = 17bits
25 = 1 + last 3bytes = 1 + 24 bits = 25bits
eStream
Nonce是或Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值。
第一步的输入中有4个4-bytes
的常数τi (其中i = 0、1、2、3、4)以及16-bytes
的k,8-bytes
的计数器i,8-bytes
的r,函数h是一个双射函数
。
||
表示联结,而最后一步表示+
,按位相加。
eStream在x86的机器上运行速度特别快
定义了一个Advantage(优势),即伪随机数与随机数的相似性(在我看来,该结果越接近于0表示,伪随机数发生器生成的结果与随机数发生器生成的结果越相似、接近,即伪随机数发生器越好)
A close to 1 --》A can dist G from rand
A close to 0 --》A cannot dist
答案为0
msb
为最高有效位,因此Pr[ A(r) = 1 ] = 1/2
分组加密
k为密钥,k越长,算法运行越慢,但是也越安全。
分组加密中,输入和输出长度严格相等
R(k,m)
叫做回合函数,一个输入为密钥k
,另一个输入为当前的信息状态m
数字签名
实际上就是待签内容的函数值,因此数字签名的复制、粘贴方式是不可行的
匿名通信
如mixnet
,它的工作原理基本上是当Alice发出信息,信息通过一系列代理被适当加密、解密以至于Bob不知道对方的身份,且这种沟通方式是双向的。
安全多方计算
多个私密输入,一个计算函数F,一个可信任的第三方,由第三方公布函数值而不泄露输入内容。
而在密码学中,所有依赖可信任方的计算都可以变成完全不依赖第可信任方的计算,比如通过公有协议来实现。
私有外包计算
基于加密数据的Google搜索,得到的结果以加密的形式返回,其中Google并不知道Alice的搜索内容。
本文来自博客园,作者:sherlson,转载请注明原文链接:https://www.cnblogs.com/sherlson/articles/16042970.html