2.2.1 基于共享密钥的加密方法及技术

2.2.1 基于共享密钥的加密方法及技术

基于共享密钥的加密方法又称为对称密钥加密方法。对称密码学的基本思想是共享密钥。用户Alice和Bob相互通信,采用双方共享的密钥和对称密钥加密方法保护消息,攻击者Eve即使截获了密文,也因为没有适当的密钥不能得到任何关于通信内容的有效信息。

1.对称密码学的基本概念

对称密钥加密体制(Symmetric-key Encryption Scheme)由一个映射

E:M×K→C

构成,且对任意的k∈K,映射

Ek:M→C,m↦E(k,m)

是可逆的。其中,M为明文的集合,K为密钥的集合,C为密文的集合,m∈M为明文,k∈K为密钥。Ek为关于密钥k的加密函数,其逆函数为解密函数。假设存在有效算法计算Ek和Dk

加密算法Ek和解密算法Dk是公开的。只要知道密钥k,任何人都可以破译密文。因此,对于加密映射E的一个基本安全性要求是:不知道密钥k,就不可能计算出解密函数Dk的值。

通常使用流密码(Stream Cipher)和分组密码(Block Cipher)实现对称密码。设K为密钥的集合,M为明文的集合。一个流密码

E*:M*×K*→C*,E*(k,m):=c:=c1c2c3

利用密钥流k:=k1k2k3…∈K*(ki∈K)把明文序列m:=m1m2m3…∈M*(字符mi∈M)加密为密文序列c:=c1c2c3…∈C*(密文ci∈C)。因此,存在加密映射

Ek:M→C

使得对任意的密钥k,Ek是双射,且ci:=Eki(mi):=E(ki,mi),i=1,2,…。

分组密码满足M=C={0,1}n,n称为密码的分组长度。这是一个二元分组密码的概念,一般地,码元不限于二元,且M和C的长度不一定相等。对于密钥k,加密函数Ek是{0,1}n上的一个置换,消息空间由分组长度为n的2n个明文消息构成。分组密码的加密原理是,将明文按照某一规定的n比特长度分组,最后一组长度不够时要用规定的值填充,使其成为完整的一组,然后使用相同的密钥对每一分组分别进行加密。

2.流密码

流密码又称序列密码,是对称密码学中的重要体制之一,它的起源可以追溯到20世纪20年代的Vernam密码。Vernam密码简单且易于实现,Vernam密码的关键是生成随机的密钥序列。

设M:=K:=C:={0,1},并且

E:{0,1}×{0,1}→{0,1},(m,k)↦m⊕k

是消息比特和密钥比特的简单异或运算。为了加密消息m:=m1m2m3…,mi∈{0,1}需要一个密钥流k:=k1k2k3…,ki∈{0,1}。

加密函数定义如下:

E*(k,m):=c:=c1c2c3

其中ci:=mi⊕ki

解密函数定义如下:

D*(k,c):=m:=m1m2m3

其中mi:=ci⊕ki

例2-5 流密码应用示例。

流密码是一种方便快捷的加密方法,在现实中得到了广泛的应用。RC4密码是目前普遍使用的流密码之一,是美国麻省理工学院的Ron Rivest于1987年设计的密钥长度可变的流密码算法。RC4密码不仅已经应用于Microsoft Windows和Lotus Notes等应用程序中,应用于安全套接层(Secure Sockets Layer,SSL)保护因特网的信息流,还应用在无线局域网通信协议WEP(Wired Equivalent Privacy)以及蜂窝数字数据包规范中。在数字蜂窝GSM(Group Special Mobile)移动通信系统中,A5密码被用于加密从电话到基站的信息。

3.数据加密标准DES

1972年美国国家标准局公开征集用于保护商用信息的密码算法,并于1975年公布了数据加密标准DES。随后人们陆续设计了许多成熟的分组密码算法,如IDEA、SAFER系统、Skipjack、RC5、Blowfish、Rijndael等。分组密码的核心问题就是设计足够复杂的算法,以实现Shannon提出的混乱和扩散准则。DES是最著名的、使用最广泛的对称密钥分组加密算法。1977年1月15日美国联邦信息处理标准版46(FIPS PUB 46)中给出了DES的完整描述。DES算法首开先例成为第一代公开的、完全说明实现细节的商业级现代算法,并被世界公认。

DES处理n=64比特的明文分组并产生64比特的密文分组(如图2-6所示)。密钥的有效尺寸为56比特,更准确地说,输入密钥64比特,其中8个比特(8,16,…,64)可用作校验位。

图2-6 DES的工作原理

DES算法的明文和密钥输入分别是64比特和56比特(密钥的有效长度),输出密文是64比特:

DES:{0,1}64×{0,1}56→{0,1}64

若选好密钥k,则有

DESk:{0,1}64→{0,1}64,x↦DES(k,x)

DES加密过程要经过16圈迭代,子密钥生成算法从56比特的密钥生成16个子密钥k1,…,k16,每个子密钥ki的长度是48比特,在16圈迭代中使用。解密和加密采用相同的算法,并且所使用的密钥也相同,只是各个子密钥的使用顺序不同(如图2-7所示)。

64比特明文经过初始置换IP后,分成左半部和右半部两块,每块22比特,进入16圈迭代。在DES的16圈迭代中,映射

f:{0,1}32×{0,1}48→{0,1}32

是建立分组的基础之一。f取决于22比特的明文和48比特的密钥。它由一个替换S和一个置换P构成:

22比特的明文x经

图2-7 DES算法框图

x↦E(x)

扩展为48比特,并与48比特的密钥k异或,然后把所得的48比特分成8组,每组6比特,并被S替换为4比特。最后,将得到的22比特进行P置换。

对每一个子密钥ki,可得

fi:{0,1}32→{0,1}32,x↦f(x,ki),i=1,2,…,16

在16圈迭代中,左半部和右半部的22比特明文对i=1,2,…,16定义如下:

φi:{0,1}32×{0,1}32→{0,1}32×{0,1}32,(x,y)↦(x⊕fi(y),y)

则有

φi◦φi(x,y)=φi(x⊕fi(y),y)=(x⊕fi(y)⊕fi(y),y)=(x,y)

因此φi是双射,φi-1i,且φi与f的选择无关。

函数DESk由φ1,…,φ16

μ:{0,1}32×{0,1}32→{0,1}32×{0,1}32,(x,y)↦(y,x)

组合而成。即

DESk:{0,1}64→{0,1}64

DESk(x)=IP-1◦φ16◦μ◦…μ◦φ2◦μ◦φ1◦IP(x)

其中IP是公开的已知置换。

由于及μ-1=μ,因此,对所有的明文消息x∈{0,1}64,恒有

DES是使用16个不同的密钥通过16轮相同类型的加密而得到密文,其中,16个密钥是由56比特的初始密钥生成的,φi称为第i轮加密函数,除了最后一轮,每一轮加密后左半部和右半部都互换。DES算法的密码强度取决于f的设计,特别是8个著名的处理替换的S盒的设计。

例2-6 DES加密示例。

设明文m=“computer”,密钥k=“program”,相应ASCII码用二进制表示为:

m=01100011 01101111 01101101 01110000

01110101 01110100 01100101 01110010

k=01110000 01110010 01101111 01100111

01110010 01100001 01101101

因为k只有56位,必须插入第8,16,24,22,40,48,56,64位奇偶校验位,合成64比特位,当然,这8位对加密过程没有影响。

m经过IP置换后得到

L0=11111111 10111000 01110110 01010111

R0=00000000 11111111 00000110 10000011

k经过子密钥生成过程得到第1轮48位子密钥

k1=00111101 10001111 11001101 00110111 00111111 00000110

m经过16轮迭代以后,再经过逆置换,得到密文

c=0xb2dcc2be594c571d

相应的二进制表示为

c=10110010 11011100 11000011 10111110

01011001 01001100 01010111 00011101

4.三重DES

三重DES加密算法是一种改进的DES算法,它使用3组密钥k1、k2、k3对同一组明文进行多重加密(如图2-8所示),密钥长度为168(56×2)比特。

图2-8 三重DES的工作原理

加密算法定义如下:

解密算法定义如下:

在DES的标准报告FIPS46-2中推荐使用k1=k2进行多重加密,此时密钥长度为112(56×2)比特。

加密算法定义如下:

解密算法定义如下:

例2-7 三重DES加密示例。

设明文m=“computer”,密钥k=“programgramproprogram”,经过三重DES加密之后,得到密文c=0x95c560a2a9591798。

5.AES和IDEA

DES已走到了它生命的尽头,其56比特密钥实在太小,三重DES只是在一定程度上解决了密钥长度的问题。另外,DES的设计主要针对硬件实现,而今在许多领域都需要有软件方法来实现它,在这种情况下,DES效率相对较低。1997年4月15日,美国国家标准技术研究所发起征集高级加密标准(AES)算法的活动,并成立了AES工作组,目的是确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护21世纪政府的敏感信息。AES的基本要求是比三重DES快,至少和三重DES一样安全,分组长度为128比特,密钥长度为128/192/256比特。

2000年10月,美国国家标准技术研究所选择Rijndael密码作为高级加密标准。Rijndael密码是一种迭代型分组密码,由比利时密码学家Joan Daemon和Vincent Rijmen设计,使用了有限域F28上的算术运算。数据分组长度和密钥长度都可变,并可独立指定为128比特、192比特或256比特,随着分组长度不同迭代次数也不同。Rijndael密码可在很多处理器和专用硬件上高效地实现。

国际数据加密算法(International Data Encryption Algorithm,IDEA)是由瑞士联邦理工学院的Xuejia Lai和James Massey于1990年提出的,能够抵抗差分密码分析。IDEA算法使用128比特的输入密钥k,将64比特的明文分组m加密成64比特的密文分组c。著名的电子邮件安全软件PGP(Pretty Good Privacy)就采用了IDEA算法进行数据加密。