计算机网络与信息安全课件第4章 密码学Word文件下载.docx
《计算机网络与信息安全课件第4章 密码学Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机网络与信息安全课件第4章 密码学Word文件下载.docx(40页珍藏版)》请在冰豆网上搜索。
目前数字签名的研究内容非常丰富,包括普通签名和特殊签名。
特殊签名有盲签名,代理签名,群签名,不可否认签名,公平盲签名,门限签名,具有消息恢复功能的签名等,它与具体应用环境密切相关。
数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS),部分州已制定了数字签名法。
法国是第一个制定数字签名法的国家,其他国家也正在实施之中。
在密钥管理方面,国际上都有一些大的举动,比如1993年美国提出的密钥托管理论和技术、国际标准化组织制定的X.509标准(已经发展到第3版本)以及麻省理工学院开发的Kerboros协议(已经发展到第5版本)等,这些工作影响很大。
密钥管理中还有一种很重要的技术就是秘密共享技术,它是一种分割秘密的技术,目的是阻止秘密过于集中,自从1979年Shamir提出这种思想以来,秘密共享理论和技术达到了空前的发展和应用,特别是其应用至今人们仍十分关注。
文摘函数主要用于完整性校验和提高数字签名的有效性,目前已经提出了很多方案。
美国已经制定了Hash标准-SHA-1,与其数字签名标准匹配使用。
由于技术的原因,美国目前正准备更新其Hash标准,另外,欧洲也正在制定Hash标准。
近年来,我国学者在文摘函数方面的研究上做出了重大的突破,2004年,以山东大学的王小云为首的团队破解了MD5、SHA-1两大文摘算法,震惊了世界。
在身份识别的研究中,最令人瞩目的识别方案有两类:
一类是1984年Shamir提出的基于身份的识别方案,另一类是1986年Fiat等人提出的零知识身份识别方案。
随后,人们在这两类方案的基础上又提出了一系列实用的身份识别方案,比如,Schnorr识别方案、Okamoto识别方案、Guillou-Quisquater识别方案、Feige-Fiat-Shamir识别方案等。
目前人们所关注的是身份识别方案与具体应用环境的有机结合。
美国早在1977年就制定了自己的数据加密标准(DES,一种分组加密算法),但除了公布具体的算法之外,从来不公布详细的设计规则和方法。
随着美国的数据加密标准的出现,人们对分组密码展开了深入的研究和讨论,设计了大量的分组密码,给出了一系列的评测准则。
其他国家,如日本和苏联也纷纷提出了自己的数据加密标准。
但在这些分组密码中能被人们普遍接受和认可的算法却寥寥无几。
何况一些好的算法已经被攻破或已经不适用于技术的发展要求。
比如DES已经于1997年6月17日被攻破。
美国从1997年1月起,开始征集、制定和评估新一代数据加密标准(称作AES)。
2001年由两位比利时密码学家设计的Rijdael算法最后胜出。
AES活动使得国际上又掀起了一次研究分组密码的新高潮。
同时国外为适应技术发展的需求也加快了其他密码标准的更新,比如SHA-1和FIPS140-1。
目前最为人们所关注的实用密码技术是PKI技术。
国外的PKI应用已经开始,开发PKI的厂商也有多家。
许多厂家,如Baltimore、Entrust等推出了可以应用的PKI产品,有些公司如VeriSign等已经开始提供PKI服务。
网络许多应用正在使用PKI技术来保证网络的认证、不可否认、加解密和密钥管理等。
尽管如此,总的说来PKI技术仍在发展中。
按照国外一些调查公司的说法,PKI系统仅仅还是在做示范工程。
IDC公司的Internet安全资深分析家认为:
PKI技术将成为所有应用的计算基础结构的核心部件,包括那些越出传统网络界限的应用。
B2B电子商务活动需要的认证、不可否认等只有PKI产品才有能力提供这些功能。
目前国际上对非数学的密码理论与技术(包括信息隐形,量子密码,基于生物特征的识别理论与技术等)非常关注,讨论也非常活跃。
信息隐藏将在未来网络中保护信息免于破坏起到重要作用,信息隐藏是网络环境下把机密信息隐藏在大量信息中不让对方发觉的一种方法。
特别是图象叠加、数字水印、潜信道、隐匿协议等的理论与技术的研究已经引起人们的重视。
1996年以来,国际上召开了多次有关信息隐藏的专业研讨会。
基于生物特征(比如手形、指纹、语音、视网膜、虹膜、脸形、DNA等)的识别理论与技术已有所发展,形成了一些理论和技术,也形成了一些产品,这类产品往往由于成本高而未被广泛采用。
1969年美国哥伦比亚大学的Wiesner创造性地提出了共轭编码的概念,遗憾的是他的这一思想当时没有被人们接受。
十年后,源于共轭编码概念的量子密码理论与技术才取得了令人惊异的进步,已先后在自由空间和商用光纤中完成了单光子密钥交换协议,英国BT实验室通过30公里的光纤信道实现了每秒20k比特的密钥分配。
近年来,英、美、日等国的许多大学和研究机构竞相投入到量子密码的研究之中,更大的计划在欧洲进行。
到目前为止,主要有三大类量子密码实现方案:
一是基于单光子量子信道中测不准原理的;
二是基于量子相关信道中Bell原理的;
三是基于两个非正交量子态性质的。
但许多问题还有待于研究。
比如,寻找相应的量子效应以便提出更多的量子密钥分配协议,量子加密理论的形成和完善,量子密码协议的安全性分析方法研究,量子加密算法的开发,量子密码的实用化等。
总的来说,非数学的密码理论与技术还处于探索之中。
密码技术特别是加密技术是信息安全技术中的核心技术,国家关键基础设施中不可能引进或采用别人的加密技术,只能自主开发。
我们必须要有我们自己的算法,自己的一套标准,自己的一套体系,来对付未来的挑战。
目前我国在密码技术的应用水平方面与国外还有一定的差距。
4.2分组加密算法
密码学的基本目标是使两个在不安全信道中通信的人,通常称为Alice(A)和Bob(B),能够保密通信,也就是使窥探者无法理解通信的内容。
A向B发送的信息称为明文,A使用事先商量好的密钥对明文进行加密,加密的结果称为密文。
在传送密文的过程中,窥探者即使窃听到密文,也无法得到明文。
而由于B知道密钥,则他对密文解密得到明文。
对称密钥加密算法在加密和解密时使用同一密钥。
对称密钥加密算法包括分组加密算法和流加密算法。
分组加密算法每次对固定长度的明文加密。
流加密算法每次加密的单位是字节。
对称密钥加密系统的模型如图4-1所示。
A将明文x通过以密钥k为参数的加密函数E变换成密文y=E(k,x),B得到密文y,通过以密钥k为参数的解密函数D变换成明文x=D(k,y)。
图4-1对称密钥加密模型
当今大多数分组加密算法都是迭代型加密算法。
迭代型加密算法定义了一个轮函数和一个密钥扩展算法,对一个明文块的加密结果是通过多轮(Nr)迭代调用轮函数对明文加密得到的。
下面看一下一个典型的迭代型加密算法是如何加密的。
设加密算法的输入是块w,密钥为K。
首先通过密钥扩展算法将K扩展为一组等长的轮密钥:
K1,K2,…,KNr。
轮函数g以当前状态wi-1和轮密钥Ki作为输入。
下一个状态定义为:
wi=g(wi-1,Ki)。
初始状态w0设为明文x,密文y定义为经过所有Nr轮后的状态。
整个加密过程如下:
w0←x
w1←g(w0,K1)
w2←g(w1,K2)
.
wNr-1←g(wNr-2,KNr-1)
wNr←g(wNr-1,KNr)
y←wNr
为了能解密,轮函数g在密钥固定的条件下,必须是单射函数,这等价于存在函数g-1,对于所有的w和y,有g-1(g(w,y),y)=w。
解密过程如下:
wNr←y
wNr-1←g-1(wNr,KNr)
w1←g(w2,K2)
w0←g(w1,K1)
x←w0
对称密钥加密算法的主要参数是密钥长度和块长度。
密钥的长度对应着算法抵抗密钥穷举蛮攻击的能力。
上世纪70年代美国的数据加密标准(DES)算法的密钥长度是56位。
随着计算能力提高,DES的加密强度已经不能满足安全的需要,因此在上世纪90年代出现了一批128位密钥长度的算法,其中包括IDEA、RC2、RC5、CAST5和BLOWFISH等。
而最新的高级数据加密标准AES的候选算法的密钥长度更是达到了256位以上。
4.2.1IDEA算法
IDEA(InternationalDataEncryptionAlgorithm)是由中国学者来学嘉和著名密码学家JamesMassey于1990年联合提出,后于1992年修改完成。
它的明文与密文块长度都是64位,密钥长度为128位。
加密与解密使用相同算法,但使用的子密钥不同。
这是与多数分组加密算法不同的。
子密钥由算法的128-bit密钥通过密钥扩展生成。
IDEA算法的的加解密运算是8重循环。
IDEA的加密循环如下图:
图4-2IDEA算法,M1~M4是由64bit明文块经字节顺序变换生成的4个16bit整数,C1~C4为加密结果,是4个16bit整数,可经过反变换的到密文(字节顺序变换在4.5节介绍)。
Ki,j代表密钥,其中i代表该密钥在哪一轮被使用。
IDEA使用的三种计算操作是异或,模65536加法和模65537乘法。
65537是一个质数,以它为模保证了取模乘法的可逆性。
IDEA算法的128-bit密钥通过密钥扩展算法生成52个加密子密钥,其中每个加密循环使用6个,最后的变换用4个。
IDEA算法的密钥扩展将128-bit密钥看作一个环形,从第二个字节向后每次取16-bit作为一个加密子密钥,直到全部得到52个加密密钥。
解密子密钥和加密子密钥是不同的,可通过加密子密钥得到,其对应关系如下:
加密密钥:
K1,1K1,2K1,3K1,4
K1,5K1,6
K2,1K2,2K2,3K2,4
K2,5K2,6
:
:
K8,1K8,2K8,3K8,4
K8,5K8,6
K9,1K9,2K9,3K9,4
解密子密钥
K9,1-1-K9,2-K9,3K9,4-1
K8,1-1-K8,2-K8,3K8,4-1
K2,1-1-K2,2-K2,3K2,4-1
K1,1-1-K1,2-K1,3K1,4-1
4.2.2IDEA算法的可逆性
IDEA算法的加密过程与解密过程相同,但使用不同的密钥。
这有助于减少硬件实现的器件数量。
设X1,X2,X3,X4为最后一个IDEA加密循环的输入,密钥为K8,1K8,2K8,3K8,4K8,5K8,6,X1’X2’X3’X4’为此循环的输出。
由算法可知:
A=(X2⊕X4+(X1⊕X3)*K8,5)*K8,6
B=(X1⊕X3)*K8,5+A
X1’=X1⊕A
X2’=X3⊕B
X3’=X2⊕A
X4’=X4⊕B
C1=X1’*K9,1
C2=X2’+K9,2
C3=X3’+K9,3
C4=X4’*K9,4
解密时使用同一算法,但使用不同的密钥。
在解密过程第一轮的密钥为K9,1-1,-K9,2,-K9,3,K9,4-1,K8,5,K8,6,输入为C1~C4,则解密运算为:
C1*K9,1-1=X1’
C2-K9,2=X2’
C3-K9,3=X3’
C4*K9,4-1=X4’
由IDEA算法可知:
(X2’⊕X4’+(X1’⊕X3’)*K8,5)*K8,6=(X2⊕X4+(X1⊕X3)*K8,5)*K8,6=A
(X1’⊕X3’)*K8,6+A=(X1⊕X3)*K8,6+A=B
因此:
X1’⊕A=X1
X3’⊕B=X2
X2’⊕A=X3
X4’⊕B=X4
结果为IDEA加密循环倒数第二轮的输出。
由此上推,可以证明IDEA算法的解密过程的最终结果是明文M1~M4。
因此可知IDEA算法是正确的。
4.2.3IDEA算法的实现
在IDEA算法中最耗时的一种操作是模65537乘法,提高此操作的速度是提高IDEA算法实现速度的关键。
下面给出几种提高模65537乘法速度的方法。
1高低算法
两个十六位的整数相乘结果为32-bit的整数,设为p。
其高16位为a,低16
位为b,则p=a(216+1)+(b-a),即b-a=pmod65537。
如果b<
a,
则b-a=b-a+216+1=b-a+1mod65537。
2查表法
预计算指数表和对数表:
1计算3的指数表。
即:
计算从30(mod65537)到365536(mod65537)。
2根据3的指数表计算1到65536在模65537乘法下的底数为3的对数表。
基于指数对数表的两个16位整数A,B的乘法算法为:
1查对数表得到LOG3(A),LOG3(B)。
2将二数相得到LOG3(A*B)。
3由LOG3(A*B)查指数表得到A*B
这样模65537乘法就变成了三次查表一次相加。
在当今的CPU上只须很少的指令周期,而65537乘法则至少20个指令周期。
由于预计算量很大,两个表存储空间需求很大,因此要根据具体情况来决定是否采用这种算法。
IDEA算法是128-bit算法中安全性最好的,它在设计期间就考虑了如何抵抗各种现有攻击方法。
因此IDEA算法能够抵御现有的攻击方法。
到目前还未有对IDEA算法的成功攻击的报道。
已知的IDEA的缺点是算法存在251个弱密钥。
但IDEA有2128个密钥,通过简单的方法就可以避免使用这些弱密钥。
IDEA算法在理论和应用上都是安全的,并且被广泛深入地研究。
4.3高级加密标准
1977年颁布的数据加密标准DES算法,其56位长的密钥空间在计算技术高速发展的今天,越来越不适应安全需求。
1997年9月美国国家标准技术研究所(NIST)提出了征求新的加密标准---AES(AdvancedEncryptionStandard)的建议,作为一种取代DES的二十一世纪加密标准技术。
其目标是:
(1)执行速度快;
(2)易于设计;
(3)从大型计算机到智能IC卡(CPU卡)都可实现。
在1998年8月举行的第一次AES会议(AES1)上,宣布了来自12个国家的15种候选AES算法。
于1999年8月举行的第二次AES会议(AES2)上,从中筛选出5个候选算法,下边列出了这些算法,每个条目的内容为:
算法名,作者,(国家)。
(1)MARSIBM(美国)
(2)RC6RSALaboratories(美国)
(3)RijndaelJohnDanemen,VincentRijmen(比利时)
(4)SerpentRossAnderson(英国),EliBihan(以色列),LarsKnudsen(挪威)
(5)TwofishBruceSchneier,JohnKelsey,DougWhiting,DavidWagner,ChrisHall,NidsFerguson
经过大量的分析及评估后,NIST最终选择了Rijndael。
这是在考虑安全,性能,效率,易用和灵活等诸多方面做的一种权衡选择,正如NIST在其报告中称:
"
将这五种算法的任何一个作为AES都是安全的"
。
Rijdael的设计中贯穿着三个标准:
∙能够抵抗现有的各种攻击;
∙在各种平台上都可高速度实现,并且代码占用空间小;
∙简单。
Rijndael之所以最后当选是由于它集安全性、性能、效率、可实现性以及灵活性于一身。
4.3.1AES数学基础知识
AES的许多运算是字节运算,还有一些运算是按32位字定义的。
其中一个字节看成是有限域GF(28)中的一个元素,一个4字节的字看成是系数在GF(28)中并且次数小于4的多项式。
有限域GF(28)中的元素可以用许多种不同的方式来表示,但不同的表示方式对实现的复杂度是有影响的。
AES选择用多项式表示有限域GF(28)中的元素。
GF(28)中的所有元素为所有系数在GF
(2)中并且次数小于8的多项式。
字节b=b0b1b2b3b4b5b6b7对应于如下多项式:
b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0
例如:
字节‘57’(01010111)对应多项式:
x6+x4+x2+x+1.
运算
有限域GF(28)中的两个元素相加,结果是一个多项式,其系数是两个元素中对应多项式的系数的模2加。
显然,有限域GF(28)中两个元素的加法与两个字节的按位模2加法是一致的。
两个字节的按位模2加用⊕表示,例如:
‘57’⊕‘83’=‘D4’,对应的多项式加法为:
(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2.
有限域GF(28)中两个元素的乘法为模为GF
(2)上的一个8次不可约多项式的多项式乘法,乘法用·
表示。
一个多项式是不可约的,如果它除1和其自身之外没有其他的因子。
对于AES,这一不可约多项式选取为:
m(x)=x8+x4+x3+x+1
1.加法
在多项式表示中,两个元素的和是一个多项式,其系数是两个元素的对应系数的模2加(即异或)。
例如:
“57”和“83”的和为:
53+87=D4
或者采用其多项式记法:
(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2
显然,该加法与简单的以字节为单位的比特异或是一致的。
2.乘法
例如:
57*83=C1,或者:
3.乘x
如果我们用多项式x乘以b(x),我们有
b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x
将上面的结果进行模m(x)化简就得到x*b(x)。
如果b7=0,则x*b(x)本身就是化简得结果。
如果b7=1,则必须减去m(x)(或者说是异或m(x))。
由此乘x运算可以用字节内左移和紧接着的—个与{1b}的有条件的(有进位发生)比特异或来实现。
该运算记为xtime()。
与x的高次幂相乘可通过与x多次相乘得到。
通过中间结果的相加,我们可以用xtime()实现任意常数乘法。
计算57*13=FE
GF(28)域上的多项式
一个(4字节)字可以看作是GF(28)域上的多项式,每个字对应于一个次数小于4的(四项)多项式。
对相应的系数简单相加就可以实现多项式的相加。
由于GF(28)中的加法为比特异或,因此,两个向量的加法是一个简单的异或。
乘法则比较复杂。
假设我们有GF(28)上的两个多项式:
a(x)=a3x3+a2x2+a1x+a0和b(x)=b3x3+b2x2+b1x+b0
它们的乘积c(x)=a(x)*b(x)由下面给出:
显然,c(x)不能再被表示为4字节向量。
我们通过一个4次多项式取模来对c(x)进行化简,这样,乘法的结果可以化简为一个次数小于4次的多项式。
在AES中,使用的模数多项式取为M(x)=x4+1。
由于
ximodx4+1=ximod4
记a(x),b(x)相乘的结果为d(x)=a(x)⊕b(x),因此
一个固定的多项式a(x)和b(x)相乘所构成的运算可以写成矩阵乘法:
其中的矩阵是一个循环矩阵。
由于x4十1不是GF(28)上的不可约多项式,所以被一个固定多项式相乘不一定是可逆的。
AES选择了一个有逆元的固定多项式。
乘x
考虑用多项式x乘b(x).显然结果为:
b3x4+b2x3+b1x2+b0x
使用x4+1取模得到:
b2x3+b1x2+b0x+b3
用矩阵乘法形式表示为
因此,用x或x的方幂乘GF(28)上的多项式等价于一个4字节字的左循环移位.
4.3.2.AES的输入输出及中间状态
AES的分组长度为128位.对于128位的输入,经AES加密或解密处理后得到的输出也为128位。
在AES中,各种运算是以字节为单位来进行处理的。
AES加密和解密过程中的中间各步的结果称为一个状态。
每个状态也是128位.表示为一个4×
4的字节矩阵。
对于128bit的明文x,包含16个字节:
x0,…,x15,则x对应的state为:
x0
x4
x8
x12
x1
x5
x9
x13
x2
x6
x10
x14
x3
x7
x11
x15
在AES中有三种可选的密钥长度,分别为128bit、192bit和256bit。
密钥的长度常以4字节字为单位来表示.密钥长度记为Nk,Nk=4,6或8.这就是说密钥的长度为4个字、6个字或8个字.AES的分组长度记为Nb,Nb=4.这就是说AES的分组长度为4个字,即128位.在AES中,加密或解密过程中的轮变换的数目记为Nr.轮变换的数日Nr与密钥的长度Nk有关,如表4-1所示.
表4-1轮变换的数目Nr与密钥的长度Nk