1、密码学 (1),黄 浩南京大学计算机系 2000年9月-2001年1月,1.1 熵的概念,有k个等概率随机事件的随机试验,随着k的增加,不确定程度随之增加。 不确定程度是k的函数: f(1) =0 f(hk) =f(h) + f(k) 若hk, f(h) f(k) f(k)=log k : 菲赫金哥尔兹,微积分学教程,第一卷,第一册。,1.1 熵的概念,随机试验U有k个随机事件A1,A2, Ak,它们的概率分别是p1,p2, , pk,则 事件Ai的信息量为: I(Ai) = -log pi, i=1, k. 随机试验U的熵为 H(U)= -log p1 -log p2 - - log pk,
2、1.1 熵的概念,例1:有25个外表完全相同的银币,其中24个重量完全相同,有一个较轻的伪币,用无砝码称。试问要多少次比较,能找到这块伪币。 V: 找伪币 log 25 U:天平一次称的结果 log 3 K ( log 25 )/ (log 3) =2.93 当消息被加密成密文时,为了获取明文需要解密的明文的位数。,1.1 熵的概念,例2:消息信息量:假设所有消息是等可能的,对消息中所有可能的值进行编码所需要的最少位数。 星期日:000 星期一:001 星期二:010 星期三:011 如果一条消息的所有可能的值有n种,则消息的信息量为log 2 n 。上例log 2 7= 2.807,星期四:
3、100 星期五:101 星期六:110,1.2 完全保密的密码系统,完全保密的密码系统:密文不会给出明文的任何消息。 M:明文空间;K:密钥空间;C:密文空间; c= E(m, k)。E: M C。 H(M), H(K) 完全保密的密码系统的必要条件: H(K) H(M) 卢开澄,计算机密码学,清华大学出版社。 只有一次一密乱码本的密码系统可获得完全保密。,1.2 完全保密的密码系统,密码系统的安全性 密码分析者的目的:获取密钥K或明文P。 首先获取关于P的一些统计信息:语音?德文?英文?然后确定域与之相伴的冗余度。 一个好的密码分析者利用这些冗余信息来确定明文。,密码分析的例:wklv ph
4、vvdjh lv qrw wrr kdug wr euhdn,T- - - -OT TOO - TO -,先考虑英语中的短词,如:am is to be he we , and are you she 等,空格给出了分词的重要信息(通常实用中将空格删除,甚至通常将字符分5个一组书写。),重要线索:wrr,英文中常用xyy结构的单词只有see和too,次常用的单词还有add,odd,off,特别生疏的单词woo和gee,单词lv是wklv的结尾,有可能是双字母单词SO,IS,IN等等.T-SO不可能;q=N, IN不可能。Lv可能是IS.,T- - - NOT TOO - TO -,T-IS -
5、 IS NOT TOO - TO -,1.2 完全保密的密码系统,密码分析者在加密明文前用压缩程序来减少明文的长度,减少语言的冗余度。,2. 对称密钥算法DES,DES加密算法的背景,发明人:美国IBM公司W. Tuchman 和 C. Meyer 1971-1972年研制成功。 产生:美国国家标准局(NBS)1973年5月到1974年8月两次发布通告,公开征求用于电子计算机的加密算法。经评选从一大批算法中采纳了IBM的LUCIFER方案。 标准化:DES算法1975年3月公开发表,1977年1月15日由美国国家标准局颁布为数据加密标准(Data Encryption Standard),于1
6、977年7月15日生效。,64位码,64位码,初始变换,逆初始变换,乘积变换,明文,密文,输入,输出,IP,IP-1,输入(64位),58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7,输出(64位),初始变换 IP,L0(32位),R0(32位),置换码组 输入(64位),40 8
7、48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25,输出(64位),逆初始变换 IP-1,加密函数 (A,Ki),A(32位),加密时A=Ri; 解密时A=Li;,48位结果,Ki,+,选择函数组 (S1S8),32位结果,(A,Ki),置换运算P,32位,左32位,右32位,Li-1,Ri-1
8、,48位(明文),64位密钥,作第i次迭代的 计算机子密钥Ki,密钥 程序表,48位(密钥),8组6位码,模2加,选择函数 输入:6位 输出:4位,+,32位,置换,32位,32位,Li,Ri,左32位,右32位,Ri-1,Li-1,模2加,+.+,乘积变换中的一次迭代,A,32位,32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1,选择运算E,选择运算E的结果,48位,加密函数的选择 运算E
9、,0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13,S1,1 0 1 1 0 0,10 2,0 0 1 0,输入6位,输出4位,使用选择函数S1 的例子,64位码,64位码,初始变换,逆初始变换,L0,明文,密文,输入,输出,IP,IP-1,R0,选择函
10、数的输出,(32位),16 7 20 21 29 12 28 171 15 23 265 18 31 102 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25,置换P,加密函数的结果,(32位),64位密钥,C0(28位),D0(28位),循环左移,循环左移,C1(28位),D1(28位),K1,(48位),(56位),循环左移,循环左移,Ci(28位),Di(28位),Ki,(48位),(56位),密钥表的计算逻辑,循环左移: 1 1 9 1 2 1 10 2 3 2 11 2 4 2 12 2 5 2 13 2 6 2 14 2 7 2 15 2 8 2 16
11、 1,57 49 41 33 25 17 91 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36,63 55 47 39 31 33 157 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4,置换选择1,密钥(64位),C0(28位),D0(28位),Ci(28位),Di(28位),14 17 11 24 1 53 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45
12、33 48 44 49 39 56 34 53 46 42 50 36 29 32,Ki(48位),置换选择2,L0R0 IP(明文)L1R0 R1 L0(R0,K1)L2R1 R2 L1(R1,K2) L16R15 R16 L15(R15,K16)密文 IP-1(R16L16),加密方程: L0R0 IP() LnRn-1 Rn Ln-1(Rn-1,Kn) IP-1(R16L16),解密方程: R16L16 IP() Rn-1Ln Ln-1 Rn(Ln,Kn) IP-1(L0R0),DES设计原理,重复交替使用选择函数S和置换运算P两种变换(confusion + diffusion) 使用
13、Feistel方法,DES算法的公开性与脆弱性,DES的两个主要弱点: 密钥容量:56位不太可能提供足够的安全性 S盒:可能隐含有陷井(Hidden trapdoors) DES的半公开性:S盒的设计原理至今未公布 由报道表明S盒在次序上、内容上是最优的。,Double-DES vs. Triple-DES,C =DES (K2, DES(K1, M) 仅达到257,而不是2112 C = DES(K1,DES-1(K2,DES(K1,M)M = DES-1(K1,DES(K2,DES-1(K1,C) C = DES (K3,DES (K2,DES(K1,M) DES是否构成一个群?到1992
14、年密码学家证明了DES不构成一个群。,K = K1K2,K = K1K2,K = K1K2K3,Triple-DES的四种模型,DES-EEE3:三个不同密钥,顺序使用三次加密算法 DES-EDE3:三个不同密钥,依次使用加密-解密-加密算法 DES-EEE2:K1=K3,同上 DES-EDE2:K1=K3,同上,DES算法存在的问题与挑战,强力攻击:255次尝试 差分密码分析法:247次尝试 线性密码分析法:243次尝试,对DES攻击结果及其启示,1997年1月28日美国RSA数据安全公司悬赏“秘密密钥挑战”竞赛 48位的RC5 313小时/3500台计算机 1997年3月13日Rocke
15、Verser设计一个攻击程序(DESCHALL),参加的志愿者有78516个,第96天(6月17日晚10:39)Michael Sanders破译成功,获1万美圆奖金。搜索量为24.6%。,密钥长度(bit) 穷举时间 40 78秒 48 5 小时 56 59天 64 41年 72 10,696年 80 2,738,199年 88 700,978,948年 96 179,450,610,898年 112 11,760,475,235,863,837年 128 770,734,505,057,572,442,069年,DESCHALL搜索速度估算,公钥密码体制RSA的算法分析,1990年6月20
16、日美国“数学家找到155位大数因子分解方法-美国加密体制受到威胁” 1994年4月26日“用计算机破译了最困难的密码”,RSA发明人17年前提出的一个数学难题:129位数的数字其中含有一条密语。当时预测用计算机需850万年才能分解成功。 RSA: Ronald L Rivest, Adi Shamir, Leonard Adleman, (A Method for Obtaining Digital Signatures and Public-key Cryptosystems, Communications of the ACM 21 No.2 pp120-126,1978),每个合数都可以
17、唯一地分解出素数因子6 = 2 3999999 = 333711133727641 = 131121从2 开始试验每一个小于等于27641 的素数。,素数:只能被1和它本身整除的自然数;否则为合数。,整数n的十进制位数 因子分解的运算次数 所需计算时间(每微秒一次)50 1.4x1010 3.9小时75 9.0x1012 104天100 2.3x1015 74年200 1.2x1023 3.8x109年300 1.5x1029 4.0x1015年500 1.3x1039 4.2x1025年,定义,RSA的密钥p和q是素数 (秘密的)r = pq(r) = (p-1)(q-1) (秘密的)SK是
18、秘密密钥(解密密钥) (秘密的)PK是公开密钥(加密密钥)X是明文 (秘密的)Y是密文且PK满足:(PK, (r) )=1; SK满足:SKPK = 1 mod (r) 同余 如果a和b都是整数,而m是一个固定的正整数,则当m能够整除a-b时,称a,b对模m同余,记为 ab(mod m),欧拉定理:a (r) 1 (mod r)其中: a对r必须是互素的; (r) =r(1-1/p1)(1-1/p2)(1-1/pn)p1,p2,pn是r的素数因子(r) 是r的欧拉函数,它确定1,2,r中有多少个是与r互素的因子。 例如:20=225,有两个素数2和5,这样,(20) =20(1-1/2)(1-
19、1/5)=8 即20中有8个整数与20是互素的,即它们没有2或5为因子:1, 3, 7, 9, 11, 13, 17, 19,推广欧拉定理:若a b (mod r) ,则对于任意幂m,有am bm (mod r)am (r) 1 (mod r)若a b (mod r) ,则对于任意的整数c,有ac bc (mod r)Xm (r)+1 X (mod r),设选择的公开密钥PK和秘密密钥SK,使得:PKSK=m (r) +1 或等价于:PKSK1 (mod (r) ) 则有:XPKSKX (mod r) 现在,我们可以建立加密和解密的表示:EPK(X)=Y XPK (mod r)DSK(Y) Y
20、SK (mod r) XPKSK (mod r) X (mod r) 由于乘法运算的可交换性质,SKPK=PKSK, 有:DSK(EPK(X)=EPK(DSK(X) X (mod r)注意:对任意整数m, XPK (mod r)(X+mr)PK (mod r),所以每一个明文X,X+r,X+2r, ,X+mr将产生同样的密文。 若限定X在集合1,2,r-1之内时,明文与密文就是一对一了。,RSA算法的加密方程与解密方程是:C=MPK mod rM=CSK mod r 其中r=pq, M0, r-1,实际计算时加密和解密变换可以采用重复平方 和乘法的快速指数算法(Fast Exponentiat
21、ion Algorithm)C=fastexp(M,PK,r)M=fastexp(C,SK,r)若p=2,q=3,则r=p*q=6, (r) =(p-1)(q-1)=2 根据欧拉定理,我们有:对于集合1,2,3,4,5中与r=6互素的数X,有X (r) 1 (mod r);对于集合1,2,3,4,5中所有的X,有X (r)+1 X (mod r);X X (r) (mod r) X (r)+1 (mod r)0 0 01 1 12 4 23 3 34 4 45 1 5,定理,定理1 若r=pq是两个素数因子的乘积,X限制在加密与解密所要求的集合0,1,r-1之中,则对于任何明文X 有X m(r
22、)+1 X (mod r) 证明: X=0的情况显然是成立的。 下面要证明X0的情况也是成立的: 若X不是与r=pq互素的,则X必须包括p或者q作为一个因子。设p为X的因子,对于某些正整数c,有关系式X=cp。 由于X限于集合0,1,r-1之中,且r=pq,从而可知X必定是与q互素的,否则X将包含q作为一个因子,在这种情况下X将越出r-1。 由欧拉定理有X (q) 1 (mod q),其中(q)=q-1,但 X m(p-1)(q) 1 m(p-1) 1 (mod q),对于任何整数m都成立,并且(p-1) (q)=(p-1)(q-1)= (r),因此有 X m(r) 1 (mod q),或对于
23、某些整数n,有 1= X m(r) +nq 用X=cp分别乘以等式的两端,得 X= X m(q)+1 +(nq)(cp)= X m(q)+1 +ncr 因此 X m(q)+1 X (mod r) 对于q为X的一个因子的情况,同理可证。,定理,定理 若d=(a,n)表示d为a,n的最大公约数gcd,则只要a,n的gcd能整除b,同余式aXb (mod n)就是可解的,而且在这种情况下同余式有d个解。 本定理给出了一种求解PK与SK的有效方法:若a与n分别定义为SK和(r),则当且仅当gcd(SK, (r)=1,即SK与(r) 互素时,gcd(SK, (r)才能整除1。当X定义为PK时,仅当SK与
24、(r) 互素,同余式SKX1 (mod (r)才有解。若a=PK,X的解将为SK。欧几里得算法(Euclid Algorithm)若a=bn+c,则gcd(a,b)=gcd(b,c)。 例:令a=38=2*19, b=26=2*13, gcd(a,b)=2; 用欧几里得算法,38=26*1+1226=12*2+212=2*6 其最后一个非零余数就是所求的gcd。,例:p=47, q=61, (r)=2760时 用欧氏算法计算:gcd(2760,167)=1。 PK公开密钥的计算: 1671223 mod (2760),用RSA算法加密与解密的过程: 例:明文=“RSA ALGORITHM” (
25、1) 明文用数字表示 空白=00, A=01, B=02, , Z=261819 0100 0112 0715 1809 2008 1300 (2) 利用加密变换公式 C=mPK mod r, 即C = 18191223 mod 2867=2756PK=1223=10011000111=210+27+26+22+21+20=1024+128+64+4+2+1C=18191223 (mod 2867)=18191024 1819128 181964 18194 18192 18191(mod 2867)=2756,2756 2001 0542 0669 2347 0408 1815,关于素数的分
26、布1 - 100 25101 - 200 21201 - 300 16301 - 400 16401 - 500 17501 - 600 14601 - 700 16701 - 800 14801 - 900 15901 - 1000 14,素数定理:当X变得很大时,从2到X区间的素数 数目(X)与X/ln(X)的比值趋近于1,即,(X),X/ln(X),= 1,lim x,X (X) X/ln(X),(X) X/ln(X),1000 168 145 1.15910,000 1,229 1,086 1.132100,000 9,592 8,686 1.104 1,000,000 78,498
27、72,382 1.084,10,000,000 664,579 620,421 1.071100,000,000 5,761,455 5,428,681 1.061 1,000,000,000 50,847,478 48,254,942 1.054,在 2到X的区间中,随机选择一个值为素数的概率近似等于(X)/(X-1)。可以证明,在找到一个素数之前,大约平均要进行(X-1)/ (X)ln(X)次实验。An Introduction to the Theory of Numbers1972, I. Niven, H.A. Zuckman,RSA算法描述如下: 选择两个大素数p和q,通常要求每个
28、均大于10100。 计算npq和z(p1)(q1)。 选择一与z互质的数、令其为d 。 找到一个e满足ed1 (mod z)。选好这些参数后,将明文划分成块,使得每个明文报文P长 度m满足0mn。加密P时,计算CPe(mod n),解密C时计 算PCd(mod n)。由于模运算的对称性,可以证明, 在确定的范围内,加密和解密函数是互逆的。为实现加密,需要公开(e, n),为实现解密需要(d, n)。,问题:(1)如何计算ab mod n(2)如何判定一个给定的整数是素数?(3)如何找到足够大的素数p和q ?Solovay和Strassen的启发式算法。,对RSA的攻击方法 1、强力攻击(穷举法
29、):尝试所有可能的私有密钥 2、数学分析攻击:各种数学方法,等价与两个素数乘积的因子分解 3、时间性攻击:取决于解密算法的运算时间,因子分解问题有三类方法: 1、分解n, n=pq, (n)=(p-1)(q-1) d = e-1 mod (n) 2、直接确定 (n), d = e-1 mod (n) 3、直接确定 d,选择明文攻击,e: 加密密钥,d:解密密钥。 c=me, m=cd mod n 已知c, 没有d, 求m,即求 m = cd mod n 随机选取一个数r,rn。 x= re mod n r=xd mod n y= xc mod n t r = 1 mod n,u=yd mod
30、n t u mod n =t yd mod n = t xd cd mod n = cd mod n,其它对RSA的攻击,对RSA公共模数的攻击 对RSA低加密指数的攻击 对RSA低解密密指数的攻击 对RSA的加密和签名的攻击 Bruce Cheiner, 应用密码学,机械工业出版社。,背包密码算法,S=b1*M1 + b2*M2+ +bn*Mn bi=0或1 1, 5, 6, 11, 14, 20 明文:1 1 1 0 0 1 背包:1 5 6 11 14 20 密文:1+5+6+20=32 超递增背包: 1,3,6,13,27,52 每一个数都比前面的数的总和大。超递增背包问题是容易问题,
31、背包密码算法,m1,m2, , mk: 超递增= 1,3,6,13,27,52 N 与m1, ,m2, , mk互素。 M m1+m2+mk m1*N mod M =M1 m2*N mod M =M2 mk*N mod M =Mk M1,M2, , Mk:难解的一般背包问题。,背包密码算法,明文:b1 b2 bk 密文:b1*M1+bk*Mk 求N使的 N*N =1 mod M (b1*M1+bk*Mk mod M)*N= b1*m1*N*N+bk*mk*N*N mod M= b1*m1+bk *mk mod M是易解的背包问题。,其它的公钥密码算法,Rabin 算法 Pohlig-Helman 算法 椭圆曲线算法,