第三章对称密码体制计算机科学与技术学院对称密码体制§1、对称密码体制简介§2、典型的对称密码算法§3、数据加密标准DES§4、高级数据加密标准AES§5、密码分析§6、分组密码的工作模式§7、流密码简介23§对称密码体制(私钥):加密密钥和解密密钥相同,且都需要保密。
•优点:加密算法比较简便、高效、密钥简短,对方破译极其困难,且经受住时间的检验和攻击;•缺点:密钥必须通过安全的途径传送。
•系统的机密性主要取决于密钥的安全性。
•加密的方式:§按字符逐位加密(流密码)§将明文消息分组(分组密码)•常用算法:DES•适用范围:数据加密、消息认证1、对称密钥体制简介2、典型的对称加密算法1、DES加密算法§定义:DES 全称为Data Encryption Standard即数据加密算法,它是IBM公司于1975年研究成功并公开发表的,1977年,美国把DES用于国家非保密机关。
§DES是一种采用传统加密方法的分组密码。
它的算法是对称的,既可用于加密又可用于解密。
§基本思想:DES对64比特二进制数据加密,产生64比特等长的密文数据。
使用的密钥为64比特,实际密钥长度为56比特(有8比特用于奇偶校验)。
5典型的对称加密算法§2、IDEA算法•IDEA(International Data Encryptdri Algorithm),即“国际数据加密算法”。
•IDEA采用基于“相异代数群上的混合运算”的设计思想,其算法的明、密文组位长度为64位,密钥长度为128位。
§3、FEAL-8密码•FEAL密码算法家族是日本NTT(日本电报电话公司)设计的。
密钥组位长度为64比特,明、密文组位长度为64比特。
作为一种分组密码,与DES相比,其增加了每一轮迭代的算法强度,因此可以通过减少迭代次数而提高运算速度。
6典型的对称加密算法§4、LOKI算法•LOKI算法作为DES的一种潜在替代算法于1990年在密码学界首次亮相。
LOKI以64位二进制分组加密数据,也使用64位密钥(只是其中无奇偶校验位),所有64位均为密钥,迭代次数为16。
§5、Khufu和Khafre算法•1990年由默克尔设计的这对算法具有较长的密钥,适合于软件实现,比较安全可靠。
Khufu算法的总体设计类似于DES,明、密文组位长度为64位,只是拥有512位(64字节)的密钥。
73、数据加密标准DES•DES是一种块加密算法,每次处理64比特的明文块,输出64比特的密文块。
•算法使用一个56比特的主密钥,包括16次迭代过程,每次迭代使用一个不同的48比特子密钥,子密钥从主密钥中生成。
•DES加密和解密使用相同的算法,两者的不同只是子密钥的次序刚好相反。
•DES的缺点:密钥长度不够长,迭代次数不够多。
8数据加密标准DES 分析§算法流程:DES 算法大致可以分成四个部分:1.初始置换§DES 算法的入口参数•Key :为8个字节共64位,是DES 算法的工作密钥;•Data :为8个字节64位,是要被加密或被解密的数据;•Mode :为DES 的工作方式,有两种:加密或解密。
2.迭代过程3.逆置换4.子密钥生成§DES 算法安全性§穷举搜索法:56位长的密钥的穷举空间为256。
§差分密码分析法:搜索空间为247个密文对。
§线性密码分析法:搜索空间为243个密文对。
9DES 处理过程初始换位第1轮变换第2轮变换第16轮变换逆初始换位56比特密钥64 比特明文64 比特密文(a)L i-1R i-1L i-1⊕f(R i-1,K i )L i R i(b)(a)DES 算法过程(b)一轮变换过程11对DES 攻击结果及其启示§1997年1月28日美国RSA 数据安全公司悬赏“秘密密钥挑战”竞赛•48位的RC5 313小时/3500台计算机•1997年3月13日Rocke Verser 设计一个攻击程序(DESCHALL ),参加的志愿者有78516个,第96天(6月17日晚10:39)Michael Sanders 破译成功,获1万美圆奖金。
搜索量为24.6%。
12密钥长度(bit)穷举时间4078秒48 5 小时5659天6441年7210,696年802,738,199年88700,978,948年96179,450,610,898年11211,760,475,235,863,837年128770,734,505,057,572,442,069年DESCHALL搜索速度估算13DES算法的安全性1.64位密钥短采用三重DES。
E(E(E(m,k1),k2),K1)2.弱密钥在DES所有密钥中,有几个特别的密钥,变换后任意一周期的密钥都是相同的,会降低DES的安全性使用者一定要避免。
0101 0101 0101 0101 (校验位)0000000 00000001F1F 1F1F 1F1F 1F1F 0000000 FFFFFFFE0E0 E0E0 E0E0 E0E0FFFFFFF 0000000FEFE FEFE FEFE FEFE FFFFFFF FFFFFFF3.半弱密钥这些密钥只产生2个不同的子密钥。
01FE 01FE 01FE 01FE FE01 FE01 FE01 FE0101E0 01E0 01F1 01F1 E001 E001 F101 F1014.S-盒可能隐含有陷门S-盒的设计者并没公开算法设计的原理和所有的技术细节,专家认为S-盒可能隐含有陷门。
有人论证采用56位密钥,DES可以已知明文攻击下通过穷举搜索被破译。
5.攻击:差分攻击、线性攻击、相关密钥攻击等。
1415DES k1DES DES k2k3p C 数据加密标准DES 分析§多重DES §二重DES 算法§三重DES 算法3DES 简介3DES的模式3DES有三种不同的模式DES-EDE3,使用3个不同的密钥,对数据进行加密、解密、再加密。
4、高级加密标准(AES)§AES的起源§AES的设计原则§AES算法描述19 1. AES的起源§1997年9月,NIST征集AES方案,以替代DES。
§1999年8月,以下5个方案成为最终候选方案:MARS, RC6, Rijndael, Serpent,Twofish。
§2000年10月,由比利时的Joan Daemen和Vincent Rijmen提出的算法最终胜出。
(Rijndael 读成Rain Doll。
)§http://www.esat.kuleuven.ac.be/~rijmen/ rijndael/202. AES 的设计原则§能抵抗所有已知的攻击;§在各种平台上易于实现,速度快;§设计简单。
Rijndael 是一个分组密码算法,其分组长度和密钥长度相互独立,都可以改变。
213. AES算法的一般描述233.AES 算法加密部分的实现明文分组和密钥的组织排列方式01234567891011121314150481215913261014371115Fig 1. 以明文分组为128bits 为例组成的阵列25一些相关的的术语定义和表示§状态(State ):密码运算的中间结果称为状态。
§State 的表示:状态用以字节为基本构成元素的矩阵阵列来表示,该阵列有4行,列数记为Nb 。
Nb=分组长度(bits )÷32Nb 可以取的值为4,6,8,对应的分组长度为128,192,256 bits 。
§密码密钥(Cipher Key )的表示:Cipher Key 类似地用一个4行的矩阵阵列来表示,列数记为Nk 。
Nk=密钥长度(bits )÷32Nk 可以取的值为4,6,8,对应的密钥长度为128,192,256 bits 。
27Fig 4.分组长度和密钥长度均为128 bits时的Rijndael 加密算法框图Data / Key Addition Rnd 0Rnd 1Rnd 8Final RndKey Schedule CipherTextKey PlainText29用伪代码表示的Rijndael轮变换一般的轮变换Round(State, RoundKey) {ByteSubstitution;ByteRotation;MixColumn;AddRounKey;}结尾轮变换FinalRound(State,RoundKey){ByteSubstituion;ByteRotation;AddRoundKey;}31ByteSubstitution(字节替代)ByteSubstitution是一个非线性的字节替代,独立地在每个状态字节上进行运算。
它包括两个变换。
1. 在有限域GF(28)上求乘法逆,‘00’映射到它自身。
2. 在GF(2)上进行下面的仿射变换:32y0 1 1 1 1 1 0 0 0 x0 0y1 0 1 1 1 1 1 0 0 x1 1y2 0 0 1 1 1 1 1 0 x2 1y3 0 0 0 1 1 1 1 1 x3 0y4 = 1 0 0 0 1 1 1 1 x4 +0y5 1 1 0 0 0 1 1 1 x5 0y6 1 1 1 0 0 0 1 1 x6 1y7 1 1 1 1 0 0 0 1 x7 133ByteRotation(字节移位)在ByteRotation变换中,状态阵列的后3行循环移位不同的偏移量。
第1行循环移位C1字节,第2行循环移位C2字节,第3行循环移位C3字节。
偏移量C1、C2、C3与分组长度Nb有关,如下表所示:Nb C1C2C341236123813435MixColumn(列混合)将状态的列看作是有限域GF(28)上的多项式a(x),与多项式c(x) = 03 x3 + 01 x2 + 01 x+02相乘(模x4+1)。
令b(x) = c(x) ×a(x),写成矩阵形式为:b0 02 03 01 01 a0b1 = 0102 03 01 a1b2 01 0102 03 a2b3 03 01 01 02 a337AddRoundKey(轮密钥加)将轮密钥与状态按比特异或。
轮密钥是通过Key Schedule过程从密码密钥中得到的,轮密钥长度等于分组长度。
39Fig 7. Rijndael 加密及解密的标准结构Block , Key Length = 128 bitsPlaintext(128 bits)ByteSubstitution MixColumn +Ciphertext(128 bits)K 0Kii=10ByteRotation for i=1 to 10Ciphertext(128 bits)K 10InvMixCoumnInvByteRotationInvByteSubstitution ++K i+Plaintext(128 bits)i = 9for i=9 to 0加密解密41用伪代码表示的Rijndael 加密算法Rijndael ( State, CipherKey ){KeyExpansion ( CipherKey, ExpandedKey );AddRoundKey ( State, ExpandedKey );For ( i=1; i<Rnd; i++ )Round ( State, ExpandedKey + Nb*i );FinalRound ( State, ExpandedKey + Nb*Rnd );}42AES的密钥调度密钥调度包括两个部分:密钥扩展和轮密钥选取。