1. 现代密码学大事记
1949年商农(香农)(C. D. Shannon)发表了《保密系统的通信理论》(Communication Theory of Secrecy Systems),把密码学置于坚实的数学基础之上,标志着密码学作为一门学科的形成。
1976年W. Diffie和M. Hellman提出公开密钥密码,从此开创了一个密码新时代。
1977年美国联邦政府颁布数据加密标准(DES),这是密码史上的一个创举。
1994年美国联邦政府颁布数字签名标准(DSS);
2001年美国联邦政府颁布高级加密标准(AES)。
2004年的国际密码讨论年会(CRYPTO)尾声,王小云及其研究同工展示了MD5、SHA-0及其他相关杂凑函数的杂凑冲撞。
2. 密码技术内含和外延
研究密码编制的科学称为密码编制学(Cryptography),研究密码破译的科学称为密码分析学(Cryptanalysis),而密码编制学和密码分析学共同组成密码学(Cryptology)。密码技术主要有三大技术即加密技术、认证技术和密钥管理技术。
2.1 密码分析
一个基本假设(Kerckhoff假设):假定密码分析者拥有所使用的算法的全部知识,密码系统的安全性完全寓于密钥中。
密码分析者攻击密码的方法主要有三种:
(1) 穷举攻击
穷举密钥。如1997年6月18日Rocke Verser等通过数万台微机,历时4个多月,穷举攻破DES。
(2) 统计分析攻击
分析密文和明文的统计规律。
(3) 数学分析攻击
分析加解密算法的数学基础和密码特性。
2.2 密码设计
商农建议采用扩散(Diffusion)、混淆(Confusion)和乘积迭代的方法设计密码(如:DES,AES)。Two methods (other than recourse to ideal systems) suggest themselves
for frustrating a statistical analysis. These we may call the methods of diffusion
and confusion. 所谓扩散是将第一位明文和密钥数字的影响扩散到尽可能多的密文数字中。理想的情况是明文和密钥的每一位都影响密文的每一位;所谓混淆就是使密文和密钥之间的关系复杂化。
密码的设计应当遵循公开设计原则,密码体制的安全公应依赖于对密钥的保密,而不应该依赖于对算法的保密。
2.3 密码分类
根据密钥的特点,将密码体制分为对称和非对称密码体制。对称密码体制又称为单钥或私钥或传统密码体制,非对称密码体制又称为双钥或公钥密码体制。
按加密方式分又可将私钥密码体制分为流密码和分组密码。现在的大多数公钥密码属于分组密码。
3 密码算法举例
3.1 古典密码
3.1.1 置换密码
即把明文中的字母重新排列,最简单的置换密码是把明文中的字母顺序倒过来然后截成固定长度的字母组。
例如:MING CHEN WU DIAN FA DONG FAN GONG
密文:GNOGN AFGNO DAFNA IDUWN EHCGN IM
3.1.2 代替密码
首先构造一个或多个密文字母表,然后用密文字母表中的字母或字母组来代替明文字母或字母组,各字母或字母组的相对位置不变。
著名的凯萨(Caesar)密码属于其中一种(单表代替),其密文字母表是将明文字母表循环右移3个字母得到。
例如:MING CHEN WU DIAN FA DONG FAN GONG
密文:PLQJ FKHQ ZX GLDQ ID GRQJ IDQ JRQJ
恩尼格玛密码机(德语:Enigma,又译哑谜机,或谜,实质是多表替换密码),1926年和1928年,德国海军和陆军先后采用了恩尼格玛机C型,空军后来也这样做了。1932年,波兰密码学家马里安•雷耶夫斯基,杰尔兹•罗佐基和亨里克•佐加尔斯基破译了这种机器的密码。1939年中期,英国和法国得到了破译此密码的方法。实际上,盟军能够破译它的密码,完全是因为德国犯了一些大错误(如加密员的失误,使用步骤错误、机器或密码本被缴获等等)。
3.2 现代密码
3.2.1 分组密码
DES
DES的设计目标是:用于加密保护静态存储和传输信道中的数据,安全使用10~15年。
特点:
1)是一种分组密码,明文、密文和密钥的分组长度都是64位;
2)面向二进制的密码算法,能够加密任何形式的计算机数据;
3)对合运算,加密和解密共用同一算法。
整体结构如图:
其中单步迭代算法如图
DES存在的安全弱点:
1)密钥较短(56bit, 1999年要24小时,)
2)存在弱密钥
3)存在互补对称性
3DES
特点:总密钥长度达112bit,可抵抗穷举攻击
缺点:软件实现算法速度较慢(比DES慢得多)
AES
美国政府于1997年开始公开征集新的数据加密标准算法AES,以取代1998年底废止的DES,经地三轮筛选,最终选出比利时密码学家Joan Daemen和Vincent Rijmen提出的一种密码算法RIJNDAEL
特点:安全(目前它能有效抵抗已知攻击),性能好,效率高(在200MHZ的Pentium机上加密10M以上/S,硬件加密速度可达3G以上),实用,灵活(128,192,256bit可选)
RIJNDAEL算法框图
另外SMS4是中国的在2006年公布的第一个商用分组密码算法标准。
分组密码在应用时还涉及到工作模式。
3.2.2 流密码(序列密码)
RC4算法
RSA数据安全公司1997年公布RC4算法
它以一个足够大的数据表为基础,对表进行非线性变换,产生非线性的密钥序列。
3.3 公开密钥算法
公钥密码体制就是一种陷门单向函数。我们说一个函数f 是单向函
数,若对它的定义域中的任意x 都易于计算f(x),而对f 的值域中的几乎所有的y,即使当
f 为已知时要计算f ^(-1)(y)在计算上也是不可行的。若当给定某些辅助信息(陷门信息)时易于计算f ^(-1)(y),就称单向函数f 是一个陷门单向函数。
传统密码应用上的主要障碍是密钥管理。公钥密码主要为解决此问题。
RSA加解密算法
1) 随机选择两个大素数p,q
2) 计算n=qp, 将n公开;
3) 计算FAI(n)=(p-1)(q-1),对FAI(n)保密;
4) 随机地选取一个正整数e,1<e<FAI(n)且(e, FAI(n)) =1,将e公开;
5) 根据ed=1mod FAI(n),求出d;
6) 加密运算:C=M^e mod n
7) 解密运算:M=C^d mod n
安全性:
破译RSA密码的困难性大于等于对n进行因子分解的困难性。(1999年成功分解140位大合数RSA-140,因此现在普遍认为n应取大于等于1024bit,最好2048bit)
完全可以认为只要合理地选择参数,正确地使用,RSA就是安全的。
参数的选择包括:p, q应是足够大的强素数,e不能太小等等
ElGamal
ElGamal密码建立在离散对数求解的困难之上。
即:Y=a^X mod p, 1<=X<=p-1,p为素数
X=log(a) Y, 1<=X<=p-1
加解密过程:
随机选择一个大素数p,且要求p-1有大素数因子,再选择一个模p的本原元a,将p与a公开。用户随机地选择一个整数d(1<=d<=p-2)计算y=a^d mod p
加密:M(0<=M<=p-1)
随机选取一个整数k, 1<=k<=p-2计算
U=y^k mod p; C1=a^k mod p; C2=UM mod p
取(C1, C2)作为密文
解密:V=C1^d mod p; M=C2 V^(-1) mod p
为了安全p应为150位以上的十进制数。(目前无求解离散对数的有效算法,因此可认为安全)
椭圆曲线密码ECC(有限域GF(p)上的椭圆曲线的一些点构成交换群,在此群上定义的ElGamal密码)
4. 数字签名(Digital Signature)
数字签名利用密码技术进行,其安全性取决于密码体制的安全性,因而
DSS
DSS签名算法称为DSA(1994年最初公布)使用参数如下:
1) p为素数,要求2^(L-1)<p<2^L,其中512<=L<=1024且为64的倍数
2) q为一素数,它是(p-1)的因子
3) g=h^((p-1)/q) mod p,其中1<h<p-1,且满足使h^((p-1)/q) mod p > 1
4) x为一随机数,0<x<q
5) y=g^x mod p
6) k为一随机数,0<k<g
签名产生:
对数据M的签名为数r和数s,它们分别如下计算产生:
R = (g^k mod p) mod q
S = (k^(-1) (SHA(M) + xr)) mod q
其中,SHA是安全HASH函数。
验证签名:
1) 首先检验是否有0<rP<q,0<sP<q,若其中之一不成立,则签名为假
2) 计算:w=(sP^(-1)) mod q
U1=(SHA(MP)w) mod q
U2=((rP)w) mod q
V =((g^(U1)y^(u2)) mod p) mod q
3) 若v=rP,则签名为真,否则签名为假。
认证(Authentication)又称鉴别、确认,它是证实某事是否名符其实或是否有效的一个过程。
认证的基本思想是通过验证称谓者(人或事)的一个或多个参数的真实性和有效性(严格的对应关系),来达到验证称谓者是否名符其实的目的。
MAC(Message Authentication Code)
消息码认证
HASH函数
目的是要产生文件、报文或其他数据块的“指纹”。HASH函数要能够用于报文论证,它必须可应用于任意大小的数据块并产生定长的输出,对任何给定的数据报文,硬件和软件均比较容易实现。它应满足以下三个性质:
1) 意向性:任何给定的HASH码h,找到满足H(x)=h的x在计算上不可行。
2) 抗弱碰撞性:对任何给定的分组x,找到满足y不等于x且H(x)=H(y)的y在计算上是不可行的。
3) 抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x, y)在计算上不可行。
MD5
MD5报文摘要算法是由MIT的Ron Rivest提出的,输入是任意长的报文,输出为128bit的报文摘要(按512位分组处理)。
算法步骤:
1) 填充报文
2) 初始化缓冲区
3) 执行算法主循环
4) 输出。
MD5算法抗密码分析的能力较弱
SHA-1(FIPS PUB 180-1,与MD5有些类似)
输入为长度小于2^64位的报文,输出为160位的报文摘要(512位分组处理)
5. 可能的发展方向:
量子密码具有可证明的安全性,同时还能对窃听行为方便地进行检测。(2003)
混沌密码;
生物密码。
量子密码
量子密码术是密码与量子力学结合的产物,它利用了系统所具有的量子性质。首先想到将量子物理用于密码的是美国科学家威斯纳。威斯纳于1970年提出,可利用单量子态制造不可伪造的“电子钞票”。
「海森堡侧不准原理」是量子力学的基本原理,说明了观察者无法同时准确地侧量待侧物的「位置」与「动量」。「单量子不可复制定理」是海森堡测不准原理的推论,它指在不知道量子状态的情况下复制单个量子是不可能的,因为要复制单个量子就只能先作测量,而测量必然改变量子的状态。
2007年4月2日,中国科学技术大学透露,我国第一个量子密码网络系统测试运行成功,其中的量子路由器具有完全知识产权。这是迄今为止国际公开报道的唯一无中转、可同时、任意互通的量子密码通信网络,标志着量子保密通信技术从点对点方式向网络化迈出关键性的一步。
Quantum cryptography, or quantum key distribution (QKD), uses quantum mechanics to guarantee secure communication. It enables two parties to produce a shared random bit string known only to them, which can be used as a key to encrypt and decrypt messages.
地址http://www.answers.com/topic/quantum-cryptography
量子密码学也被称为量子密钥分配,使用量子力学保证一个安全的交流。它能让两方产生一个共享的、随机的、且不被其它人知道的二进制位串,可以用作一个密钥来加密或解密数据。
也就是说,量子密码学只是负责生产密钥的,到最后,还是需要使用AES之流来对数据加密。当然,如果量子密码分配技术能够足够快的分配密钥的话,使用一次一密乱码本是更好的选择。在一个连原文和密文都没有被提及的技术里,你相信这个技术是一种加密算法吗?
6. 附
王小云故事
王小云于1966年生于中国山东省诸城。她在1987年取得学士学位,1990年取得硕士学位,并于1993年取得山东大学博士学位。毕业后,王小云于1993年起于山东大学数学系任教,至1995年升至助理教授一职,并于2001年正式成为教授。现今王小云在山东大学数学及系统科学系出任研究员及教授。
2004年的国际密码讨论年会(CRYPTO)尾声,王小云及其研究同工展示了MD5、SHA-0及其他相关杂凑函数的杂凑冲撞。所谓杂凑冲撞指两个完全不同的讯息经杂凑函数计算得出完全相同的杂凑值。根据鸽巢原理,以有长度限制的杂凑函数计算没有长度限制的讯息是必然会有冲撞情况出现的。可是,一直以来,电脑保安专家都认为要任意制造出冲撞需时太长,在实际情况上不可能发生,而王小云等的发现可能会打破这个必然性。
2005年2月,王小云与其同事提出SHA-1杂凑函数的杂凑冲撞。由于SHA-1杂凑函数被广泛应用于现今的主流电脑保安产品,其影响可想而知。王小云所提的杂凑冲撞算法只需少于269步骤,远少于一直以为所需的280步。
2005年8月,王小云、姚期智,以及姚期智妻子姚储枫(即为Knuth起名高德纳的人)联手于国际密码讨论年会尾声部份提出SHA-1杂凑函数杂凑冲撞算法的改良版。此改良版使破解SHA-1时间缩短为263步(原来需要280步)。
2006年6月8日,于中国科学院第13次院士大会和中国工程院第8次院士大会上以“国际通用Hash函数的破解”获颁陈嘉庚科学奖信息技术科学奖。(维基百科)
一个“优良”的hash函数 f 应当满足以下三个条件:
- 任意y,找x,使得f(x)=y,非常困难。
- 给定x1,找x2,使得f(x1)=f(x2),非常困难。
- 找x1,x2,使得f(x1)=f(x2),非常困难。
上面的“非常困难”的意思是除了枚举外不可能有别的更快的方法。比如第3条,根据生日定理,要想找到这样的x1,x2,理论上需要大约2^(n/2)的枚举次数。
几乎所有的hash函数的破解,都是指的破坏上面的第三条性质,即找到一个碰撞(前两条都能被破坏的hash函数也太弱了点,早就被人抛弃了)。在密码学上还有一个概念是理论破解,指的是提出一个算法,使得可以用低于理论值得枚举次数找到碰撞。
王小云的主要工作是给出了MD5,SHA-0的碰撞,以及SHA-1的理论破解,她证明了160位SHA-1,只需要大约2^69次计算就能找出来,而理论值是2^80次。
(http://zhiqiang.org/blog/posts/preliminary-computer-theory-xiao-yun-wang-from-the-hash-function-to-crack-md5.html, http://keilt.blogbus.com/logs/27179841.html)
另外,公开密钥基础设施PKI(public key infrastructure)技术和虚拟专用网VPN(virtual private network)技术是目前最为人们所关注的两种基于密码的技术。所谓PKI 就是一个用公钥概念和技术实施和提供安全服务的具有普适性的安全基础设施。VPN 是利用接入服务器(access server)、广域网上的路由器或VPN 专用设备在公用的WAN上实现虚拟专网的技术。
7. 参考书目:
[1] C. E. Shannon. Communication theory of secrecy system. Bell System Technical Journal 1949. 27(4): 656~715
[2] 张焕国,刘玉珍. 密码学引论. 武汉大学出版社. 2003.10
等等