目录
如果敌手的计算能力是无限的,某密码方案也是可证明安全的,则称之为完美保密(perfectly secret)。区别于经典密码学(classical cryptography),现代密码学(modern cryprography)都可以采用严格的数学方法来证明安全性。现代密码学起源于1970年,完美保密性是不依赖于未证明的计算性假设。
密码学的方案通常包含概率性试验和随机性算法。比如在私钥加密中(其实就是对称加密),通信的双方会产生随机的密钥。随机性对网络安全性影响巨大,接下来我们将简单解释下密码学中所用的随机性。
随机性来源于独立或均匀的随机比特,从而产生非确定性的算法。举个简单例子,我们可以通过手动抛硬币来产生少量的随机且均匀的比特串。
密码学中把产生随机数的模块叫做随机数生成器(random number generation),其内部的运行可以简单的分成两步。
第一步:高熵的数据源
我们知道事件不确定性越大,其熵也就越大。首先收集来自高熵源的数据,这些数据可以来源外部输入,比如网络延迟率,硬盘写入时间,键盘敲击次数,鼠标移动路径等等。当然也可以利用更加随机且不可预测的事件来作为熵源。从硬件角度来看,包括热噪声,散粒噪声(shot noise),放射性衰变(radioactive decay).部分因特尔处理器在芯片上利用率热噪声来产生高熵的数据源。硬件角度的随机数生成器比外部随机数源产生高熵数据的速率要更快。
第二步:产生均匀且随机的比特串
将高熵的数据源转为均匀且随机的比特串。
假设某个数据源产生1的概率为p,产生0的概率为1-p。在未知p的情况下,如何将该分布转变为均匀且随机的比特串,也就是产生1和0的概率均为0.5?
解:
如果看到10,则记作0,此概率为p(1-p)
如果看到01,则记作1,此概率为p(1-p)
如果看到00或11,则直接舍去
由此0的概率和1的概率,经过归一化后则都为0.5。
以上则是最经典的把高熵的数据源转变为均匀且随机的比特串。
密码学对随机性的要求非常严格,比如C语言库有个函数为rand(),这是产生的随机数是不满足密码学的安全性的。
密码学的方案包含三个基本的算法:
生成参数:Gen
加密算法:Enc
解密算法:Dec
部分参数也是需要提前给定的,比如说明文空间M,满足:
|M|>1
密钥生成算法Gen是一个概率性算法,该算法会根据某些分布来输出密钥k,将所有可能得密钥集合在一起则称之为密钥空间K。通常密钥空间是有限的。
从密钥中选择,从明文空间中选择,借助加密算法Enc则形成密文c。将以上过程写做:
加密过程也是一个概率性算法,也就是对于同一个密钥和明文,可能会输出不同的密文。在未给特殊说明时,密码学中的选取通常为均匀且随机的选择。
如果是确定性的加密过程,则会写做:
将所有的密文集合称之为密文空间C。这其中包含了明文空间,密文空间,加密时使用的随机性。
加密算法的输入是密钥k,密文c,输出是明文m(也写作message)。对于给定的密钥k和密文c,如果加密的正确率为1,则称之为完美正确性(perfect correctness)。写做:
很显然,明文只有一个m,所以解密算法肯定为确定性算法。
密码学包括密码编码学和密码分析学两部分。
密码编码学是研究设计构造一个符合规定安全要求的密码系统,即如何设计相应的加密和解密算法、密钥和安全协议,使得密码系统能够达到所需要的安全性。密码分析学是研究在解密密钥和密码体制未知的情况下如何恢复明文的科学。
这两部分既对立又统一,正是这两者的对立和统一推动了密码学的发展。密码分析学的具体内容涉及很多数学和网络安全的知识。
密码攻击的目标有不同的层次,可以分为如下4种:
1. 完全攻破(Total Break):发现密码系统所用的密钥,使得所有密文均可破译,并且攻击者可以按照自己的需要产生假冒的密文。
2. 全局演绎(Global Deduction):攻击者找到解密算法的一个等价算法,无须密钥便可进行解密。3. 局部演绎(Local Deduction):攻击者发现一个或多个密文所对应的明文,这将为发现实际使用的密钥提供线索,对有些算法还可实施完整性攻击。
4. 信息演绎(Information Deduction):密码分析者发现了与实际系统使用的密钥或明文有关的信息,如密钥的部分、明文的格式甚至是一些关键词等,这些信息将有助于进一步进行密码分析。
针对一种密码攻击方法的有效性和复杂性,主要从时间、空间、数据等几个方面的指标综合衡量,具体如下:
(1)时间复杂度:完成攻击所需要的时间,包括数据采集时间和分析处理时间,为统一不同设备运算频率的不同,一般用加解密的次数进行衡量。
(2)空间复杂度:用进行攻击所需要的存储空间大小进行衡量。
(3)数据复杂度:用攻击者所需要收集的数据总量进行衡量。
(4)成功概率:攻击者实施攻击后成功恢复密钥的概率。攻击的复杂性取决于以上因素的最小复杂度,在实际实施攻击时往往要考虑这种复杂性的折中,如存储需求越大,攻击可能越快。此外,计算复杂度越高也表示加密系统的安全性越好。在密码分析中,计算复杂度或攻击复杂度通常是指时间复杂度和空间复杂度。