上QQ阅读APP看书,第一时间看更新
二、加密技术
(一)加密技术概述
密码学的起源可以追溯到人类刚刚出现并开始尝试实现秘密通信的时候,而历史上有记录的最早采用一些技术手段对信息进行加密隐藏的则可以追溯到公元前的古希腊时期。当时的斯巴达人采用一种叫scytale的棍子(图2-16)来传递加密信息。发信人先将羊皮纸或皮革缠绕在scytale棍子上,然后再沿着棍子在羊皮纸上横向写下要传递的信息,接着将羊皮纸取下展开由送信人交给收信人。收信人收到羊皮纸之后再将它缠绕在scytale棍子上即可读出有意义的信息。但是若是被其他人得到这张羊皮纸,由于不知道发信人采用的棍子宽度(过细或过粗),也依然无法正确解读出羊皮纸上混乱信息所代表的意义。
图2-16 缠着羊皮纸的scytale棍子
后来,罗马的恺撒大帝采用一种将字母用字母表中处于该字母后三位位置的字母替代的方式对军事秘密信息进行加密再传送,这种方式虽然简单但是因为其新颖性从而在当时军事战争中为恺撒大军取得了巨大的优势。恺撒密码也因此成为密码学史上相当经典的一个基本范例。下面用一个具体例子说明恺撒密码的加密过程:
例:明文M=KAI SA MI MA,移位量k=3。
解:明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
对应的密文字母表:DEFGHIJ KLMNOPQ RST UVW XYZ ABC
则可得到密文C=NDL VD PL PD
接下来给出恺撒密码的数学表达式。首先将字母用数字代替,A= 0,B = 1,C = 2,……,Z=25,偏移量k,
加密过程即为: E k(x)=(x+k)mod 26
解密过程即为: D k(x)=(x-k)mod 26
理论上k可取任意整数值,而取值为3时即为经典的恺撒密码。
随着对加密技术的不断研究完善,至今可用的各式加密技术已数不胜数,如DES、RSA、维吉尼亚密码等。不过后世的各种加密方式均衍生于基本的置换密码和替换密码。
加密技术由两个元素构成:算法和密钥。对应在恺撒密码中,采用的替换方式便是算法,具体的偏移量k便是密钥。由此可见,加密技术中算法的实现方法和密钥的选取共同决定了加密技术的各方面性能。而现代信息的网络传递等特点对加密技术的性能提出了更高的要求,像恺撒密码这样的早期密码在现在借助于计算机高运算量的辅助下极易被破解而不再具备高效的保密性。
基于现在对加密技术更高的要求,对各种新式密码的需求不断增加。结合传统密码与现代密码的特征,现在我们一般将密码分为两类:对称型密码(或单钥密码)和非对称型密码(或双钥密码)。接下来就以这种分类方式对几种典型的现代密码进行分析。
(二)对称加密
对称加密密码也称传统密码。它的主要特点是:加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导得出解密密钥,反之亦然。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。它的特点是:安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。另外,对称加密算法公开、计算量小、加密速度快、加密效率高。
图2-17中给出了对称型密码原理框架图,其中M表示明文,K表示密钥,C表示密文,E表示加密算法,D表示解密算法,K’表示窃密者掌握的密钥信息,M’表示窃密者推导出的明文。
图2-17 对称型密码原理框架
在本节中对对称型密码体系中的典型方法的介绍选取了DES(数据加密标准)为例。
1973年,美国国家标准局NBS在认识到建立数据保护标准的需要的情况下,开始征集联邦数据加密标准方案,1975年3月17日,NBS公布了IBM公司提供的密码算法,以标准建议的形式在全国范围内征求意见。经过两年多的公开讨论之后,1977年7月15日NBS宣布接受这个建议,并作为联邦信息加密标准46号,即DES正式颁布,供民用、商业和非国防性政府部门使用。
图2-18给出了DES加密算法的流程图。图中的Li,Ri等表示第i次迭代时原64位数据的左半部分和右半部分,⊕表示“异或”操作,Ki表示由原始密钥得到的子密钥序列,f函数表示在每一次迭代中都要进行的处理过程。
由流程图2-18可见,DES是分组乘积密码,每一次的处理对象都是一组64位的明文数据。它用56位密钥将这64位的明文转换为64位密文,其中密钥总长为64位,另外8位是奇偶校验位。它的具体步骤流程如下:
图2-18 DES加密算法流程
1.通过初始换位 IP,首先将输入的二进制明文块T变换成T0= IP(T)。
2. T0按排列顺序分为左右两部分,得到L0和R0。
3.然后将R0经函数f处理之后与L0进行“异或”并将结果置为R1,而L1由原来的R0直接复制得到。
4.重复上一个步骤15次完成迭代,最后一次迭代与上述类似,只是最后处理R15并与L15“异或”后得到的作为L16,而R16由原来的L15得到。
5.最后将左右两部分L16和R16重新组合起来并通过逆初始换位 IP -1得到64位二进制密文输出。
图2-19 获取子密钥序列过程
其中由密钥K得到子密钥序列的过程如下:
图2-19中所示的K为密钥,PC-1表示换位函数,经此过程可以将K的奇偶校验位出去并将各位打乱,C0和D0表示密钥处理过程中的数据块的左右两半,LSi为第i次处理时的循环左移位变换,其中LS1,LS2,LS9和LS16为循环左移1位变换,其余的LSi为循环左移2位变换。
接下来给出的是函数f的具体作用过程,如图2-20中所示:
1.首先将每一个32位的输入数据块Ri-1经过位选择表E扩充成48位的二进制块E(Ri-1)。
2.对E(Ri-1)和Ki进行“异或”操作。
3.然后将得到的48位数据块分成8个6位二进制块。经过函数盒子Si的处理之后得到8个4位二进制块。
4.最后将这些二进制块合成32位二进制块后用换位表P处理得到32位二进制块输出。
图2-20 函数f作用过程
至此,DES的所有相关逻辑流程图均已给出。而其中的初始换位 IP,逆初始换换位 IP -1,位选择表E,换位表P,以及选择函数Si盒子等均是依据DES标准中设定的特殊值,是为了将信息更加充分的打乱以提高非法破译的难度,只要密钥选取合适就能保证该密码的鲁棒性。
同时,它的解密算法和加密算法大体相同,只不过第一次迭代时用子密钥K16,第二次迭代用的是子密钥K15……第十六次迭代用的是K1,因为最终换位IP -1是初始换位IP的逆变换,且Ri-1=Li,Li-1=Ri⊕f( Li,Ki)。而且在解密过程中只是使用子密钥的顺序颠倒了,但是算法本身并没有改变。
除了DES,对称型密码中较为典型的方法还包括IDEA(国际数据加密算法)、RC6、SERPENT、Rijhdael算法等。
(三)非对称加密
相对于对称加密,非对称型密码的特点是加密密钥和解密密钥在本质上和算法上是不同的,即知道其中一个密钥,不能够有效地推导出另一个。所以这种密码也可以称为双钥密码。非对称加密算法需要的两个密钥:公开密钥和私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。同时,由于加解密密钥不同,密钥的分发不需要额外的通道,因此可以公开加密密钥,而只需要保密解密密钥使得仅有密钥持有人可以加解密,所以这种密钥同时可以称为公开密钥密码。非对称加密算法的特点是:安全保密性好,它消除了最终用户交换密钥的需要,但加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。经典的非对称加密算法有RSA、Elgamal、ECC算法等。非对称加密的典型应用是数字签名。
图2-21中给出了非对称型密码原理框架图,其中M,C,E,D,K',M’与对称型密码原理框架图中表示的意义相同,而这里的K1表示来自公开密钥空间的加密密钥,K2表示来自私密钥空间的解密密钥。
图2-21 非对称型密码原理框架
在这里对于非对称型密码的介绍以RSA密码为例。
1978年,R. Rivest,A. Shamir和L. Adleman提出一种用数论构造的RSA算法,它是迄今为止在理论上最为成熟完善的公钥密码体制,该体制已经得到广泛的应用和实践。
在这里也还是首先给出RSA的相关流程如下:
1.选两个大素数p和q。
2.计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)表示n的欧拉函数值。
3.再选择一个值e,满足1<e<φ(n),且gcd(φ(n),e)= 1。
4.计算d,满足d×e=1modφ(n),即d是e在模φ(n)下的乘法逆元,因为e与φ(n)互素,由模运算可知,它的乘法逆元一定存在。
5.除了p、q和d要保管起来外,将e和n公开作为公钥。
6.加密:将明文比特串分组,使得每个分组对应的十进制值小于n,即分组长度小于 。然后对每个明文分组m做加密运算:c=m θmod n。
7.解密:m=c dmod n。
例如:令p=7,q = 17,求n =p×q = 119,φ(n)=(p-1)(q-1)= 96。取e = 5,满足1<e< φ(n),且gcd(φ(n),e)= 1。确定满足d×e=1mod96的d,因为77×5=385= 4×96+1,所以d 位77。设明文m=119,则由加密过程得密文为:
c=19 5mod 119= =2476099mod 119=66
解密为:
66 77mod 119=19
由上述RSA的具体流程可以看出RSA解密的合理性事基于欧拉定理,而安全性则主要是基于分解大整数的困难性假定,之所以为假定是因为至今在理论上和实践中还未能证明分解大整数就是NP问题,当然也许还存在尚未发现的多项式分解算法。所以若是RSA的密钥选取足够大而超出计算机的运算量的话,则该加密方式可以被视为是不可解的。
所以为了保证RSA算法的安全性,一般对p和q提出以下要求:
1. p和q的长度相差不能太大。
2. p-1和q-1都应该有大素因子。
3. gcd(p-1,q-1)应较小。
此外,研究结果表明,如果e<n且d<n 1/4,则d能被很容易确定,即容易被破解。
(四)数字签名
加密技术在军事、国防等方面的重要性显而易见,而就目前而言,尤其是电子化生活的日益流行,加密技术与人们的日常生活也更加的息息相关。其中一个很明显的例子便是基于加密技术的数字签名的实现。
在网络传送中,信息的接收方可以伪造一份报文,并声称是由发送方发过来的,从而获得非法利益。例如银行通过网络传送一张电子支票,接收方就可能改动支票的金额,并声称是银行发送过来的。同样地,信息的发送方也可以否认发送过相关内容,从而获得非法利益。如客户给委托人发送一份进行某项股票交易的报文,结果这项股票交易亏损了,客户为了逃避损失否认了发送交易的报文。或者是更贴近大众人群的网购时款项支付的过程。在这些通信过程中否认、伪造、冒充、篡改等争端的解决中,数字签名技术起到了重要作用。
数字签名通过如下流程进行:
1.采用散列算法对原始报文进行运算,得到一个固定长度的数字串,称为报文摘要,不同的报文与不同的报文摘要一一对应。从而保证只要改动报文中任何一位,得到报文摘要就会不同,实现报文的不可更改性。
2.发送方生成报文的报文摘要,用自己的私有密钥对摘要进行加密来形成发送方的数字签名。
3.这个数字签名将作为报文的附件和报文一起发送给接收方。
4.接收方首先从接收到的原始报文中用同样的算法计算出新的报文摘要,再用发送方的公开密钥对报文附件的数字签名进行解密,比较两个报文摘要,如果值相同,就说明该数字签名确实来自发送方,否则就认为收到的报文是伪造的或被篡改过。
随着信息时代的到来,数字签名的方式也渐渐取代着传统的相关人员在文件或书信上亲笔签名或用印章的方式来鉴别文件或书信的真伪,用来保证信息传输过程中信息的完整性和提供信息发送者的身份的确认证。
在数字签名中,还有一个基本的概念就是数字证书。数字证书类似于生活中的驾驶执照、护照和会员电子卡等。持有者可以通过出示电子数字证书来证明自己的身份或获得访问在线信息或使用服务的权利。
数字证书采用公开密钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一特定的仅为本人所知的私有密钥,用它进行解密和签名;同时设定一公共密钥并由本人公开,为一组用户所共享,用于加密和验证签名。
采用数字证书,可以确保信息是由签名者发送的,签名者无法否认;同时也可以确保签过名的信息是真实信息,非伪造或被篡改过。所以,数字证书与加密一起使用,可以提供一个更加完整的解决方案,确保交易中各方的身份。