第3章 对称密码体制
主要内容 3.1分组密码 3.2数据加密标准DES 3.3高级加密标准AES 3.4序列密码 3.5其他对称加密算法
概述 对称密码体制就是在加密和解密是用到的密钥相同,或者加密密钥和解密密钥之间存在着确定的转换关系。 对称密码体制又有两种不同的实现方式,即分组密码和序列密码(或称流密码)。
流密码与分组密码 流密码每次加密数据流中的一位或一个字节。 分组密码,就是先把明文划分为许多分组,每个明文分组被当作一个整体来产生一个等长(通常)的密文分组。通常使用的是64位或128位分组大小。 分组密码的实质,是设计一种算法,能在密钥控制下,把n比特明文简单而又迅速地置换成唯一n比特密文,并且这种变换是可逆的(解密)。
3.1分组密码 分组长度m足够大(64~128比特) 密钥空间足够大(密钥长度64~128比特) 密码变换必须足够复杂(包括子密钥产生算法) 分组密码算法实际上就是在密钥的控制下,简单而迅速地找到一个置换,用来对明文分组进行加密变换,一般情况下对密码算法的要求是: 分组长度m足够大(64~128比特) 密钥空间足够大(密钥长度64~128比特) 密码变换必须足够复杂(包括子密钥产生算法)
分组密码的设计思想 扩散(diffusion) 混淆(confusion) 将明文及密钥的影响尽可能迅速地散布到较多个输出的密文中。产生扩散的最简单方法是通过“置换(Permutation)”(比如:重新排列字符)。 混淆(confusion) 其目的在于使作用于明文的密钥和密文之间的关系复杂化,是明文和密文之间、密文和密钥之间的统计相关特性极小化,从而使统计分析攻击不能奏效。通常的方法是“代换(Substitution)”(回忆恺撒密码)。
3.2 DES(Data Encryption Standard) 美国国家标准局NBS于1973年5月发出通告,公开征求一种标准算法用于对计算机数据在传输和存储期间实现加密保护的密码算法。 1975 年美国国家标准局接受了美国国际商业机器公司IBM 推荐的一种密码算法并向全国公布,征求对采用该算法作为美国信息加密标准的意见。 经过两年的激烈争论,美国国家标准局于1977年7月正式采用该算法作为美国数据加密标准。1980年12月美国国家标准协会正式采用这个算法作为美国的商用加密算法。
DES的实质 DES是一种对称密码体制,它所使用的加密和解密密钥是相同的,是一种典型的按分组方式工作的密码。其基本思想是将二进制序列的明文分成每64bit一组,用长为64bit(56bit)的密钥对其进行16轮代换和置换加密,最后形成密文。
3.2.1 简化的DES Simplified DES方案,简称S-DES方案。它是一个供教学而非安全的加密算法,它与DES的特性和结构类似,但参数小。 注:1.* 加密算法涉及五个函数: (1)初始置换IP(initial permutation) (2)复合函数fk1,它是由密钥K确定的,具有置换和代换的运算。 (3)置换函数SW (4)复合函数fk2 (5)初始置换IP的逆置换IP-1
(2) DES算法的主要过程 ① 初始置换: ② 子密钥生成: ③ 乘积变换: ④ 末置换: 初始置换(IP) 乘积变换 子密钥生成 ① 初始置换: ② 子密钥生成: ③ 乘积变换: ④ 末置换: 初始置换(IP) 乘积变换 子密钥生成 输入64位明文(密文) 64位密钥组 末置换(IP-1) 输出64位密文(明文)
P10 IP 移位 IP-1 P8 fk1 SW fk2 8bit密文 S-DES方案示意图 加密 解密 8bit明文 P10 IP 移位 IP-1 P8 fk1 SW fk2 8bit密文 K2 K1 加密 (1)初始置换IP(initial permutation) (2)复合函数fk1,它是由密钥K确定的,具有置换和代换的运算。 (3)置换函数SW (4)复合函数fk2 (5)初始置换IP的逆置换IP-1 S-DES方案示意图
2*. 加密算法的数学表示: IP-1*fk2*SW*fk1*IP 也可写为 密文=IP-1(fk2(SW(fk1(IP(明文))))) 其中 K1=P8(移位(P10(密钥K))) 试写出解密算法的数学表示 试证明加密算法的正确性
(1) S-DES的密钥生成: 设10bit的密钥为( k1,k2,…,k10 ) 几个重要的定义: P10(k1,k2,…,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6) P8= (k1,k2,…,k10)=(k6,k3,k7,k4,k8,k5,k10,k9 ) P10 P8 3 5 2 7 4 10 1 9 8 6 6 3 7 4 8 5 10 9
对S-DES的深入描述 LS-1为循环左移1位:abcdebcdea LS-2为循环左移2位: abcdecdeab
S-DES的密钥生成 10-bit密钥 P10 5 LS-1 P8 按照上述条件, 若K选为(1010000010), 8 K1 产生的两个子密钥分别为: K1=(1 0 1 0 0 1 0 0) K2=(0 1 0 0 0 0 1 1) K2
对S-DES的深入描述 --趁热打铁 若输入密钥K为(1001001010), 问产生的两个子密钥分别为: ? K1=( ) ? K2=( )
(2) S-DES的加密运算: 初始置换用IP函数: IP= 1 2 3 4 5 6 7 8 2 6 3 1 4 8 5 7 末端算法的置换为IP的逆置换: IP-1= 1 2 3 4 5 6 7 8 4 1 3 5 7 2 8 6
S-DES的加密运算: 试举例证明: IP-1是IP的逆置换
S-DES加密图 fk K1 F fk(L,R)=(LF(R,SK),R) IP E/P + S0 S1 P4 L R 4 8 8-bit 明文(n) fk(L,R)=(LF(R,SK),R) IP E/P + S0 S1 P4 L R 4 K1 8 fk F E/P 4 1 2 3 2 3 4 1 8-bit子密钥: K1=k11,k12,k13,k14, k15,k16,k17,k18, 与E/P的结果异或得: n4+k11 n1+k12 n2+k13 n3+k14 n2+k15 n3+k16 n4+k17 n1+k18 第一行输入进S-盒S0,第二行的4位输入进S盒S1,分别产生2-位的输出。
S-DES加密图(续) E/P + S0 S1 8 K2 P4 IP-1 8-bit 密文 4 F 2 SW fk
两个S盒按如下定义: E/P + S0 S1 8 K2 P4 IP-1 8-bit 密文 4 F 2 SW
2 4 3 1 它的输出就是F函数的输出。 S盒按下述规则运算: 将第1和第4的输入比特做为2- bit数,指示为S盒的一个行;将第2和第3的输入比特做为S盒的一个列。如此确定为S盒矩阵的(i,j)数。 例如:(P0,0, P0,3)=(00),并且(P0,1,P0,2)=(1 0) 确定了S0中的第0行2列(0,2)的系数为3,记为(1 1)输出。 由S0, S1输出4-bit经置换 P4 2 4 3 1 它的输出就是F函数的输出。
3.2.2 DES的基本加密流程 加密前,先将明文分成64bit的分组,然后将64bit二进制码输入到密码器中,密码器对输入的64位码首先进行初始置换,然后在64bit主密钥产生的16个子密钥控制下进行16 轮乘积变换,接着再进行末置换就得到64位已加密的密文。
DES 算法的一般描述
0.子密钥产生器 密钥(64bit) 除去第8,16,… ,64位,共8个校验位 置换选择1(PC-1) Ci(28bit) Di(28bit) 循环左移ti+1位 循环左移ti+1位 置换选择2(PC-2) Ki(48bit)
置换选择1
移位次数表 若 C1= c1c2…c28,D1= d1d2…d28 则 C2= c2c3…c28 c1, D2= d2d3…d28 d1。 第i次迭代 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 循环左移次数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 若 C1= c1c2…c28,D1= d1d2…d28 则 C2= c2c3…c28 c1, D2= d2d3…d28 d1。
置换选择2 置换选择PC-2将C中第9 18 22 25位和 D 中第7 9 15 26位删去,并将其余数字置换位置后送出48bit数字作为第i次迭代时所用的子密钥ki Ci Di= b1b2…b56 ,则ki= b14 b17 b11 b24…b36 b29 b32
1.初始置换 将64个明文比特的位置进行置换,得到一个乱序的64bit明文组,然后分成左右两段,每段为32bit 以L和R表示。
2.乘积变换 Li-1(32比特) Ri-1(32比特) 选择扩展运算E 48比特寄存器 子密钥Ki(48比特) 48比特寄存器 选择压缩运算S 32比特寄存器 置换运算P Li(32比特) Ri(32比特) Li=Ri-1 Ri=Li-1 F(Ri-1,Ki)
选择扩展运算E 1,2,…… ……32 E的输入(32bit) 1,2,…… ……32 32 1 2 3 4 5 4 5 6 7 8 9 8 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 1,2,…… ……48 选择扩展运算结果(48bit) E的输入(32bit) 对原第 32 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 各位重复一次得到数据扩展。
选择压缩运算S 将前面送来的48bit 数据自左至右分成8组,每组6bit。然后并行送入8个S盒,每个S盒为一非线性代换网络,有4个输出。
S盒的内部结构
S盒的内部计算 若输入为b1b2b3b4b5b6其中b1b6两位二进制数表达了0至3之间的数。b2b3b4b5为四位二进制数,表达0至15之间的某个数。 在S1表中的b1b6行b2b3b4b5列找到一数m(0≤m≤15),若用二进制表示为m1m2m3m4,则m1m2m3m4便是它的4bit输出。 例如,输入为001111,b1b6=01=1,b2b3b4b5 =0111=7,即在S1盒中的第1行第7列求得数1,所以它的4bit输出为0001。
关于S盒 S 盒是DES的核心,也是DES算法最敏感的部分,其设计原理至今仍讳莫如深,显得非常神秘。所有的替换都是固定的,但是又没有明显的理由说明为什么要这样,有许多密码学家担心美国国家安全局设计S盒时隐藏了某些陷门,使得只有他们才可以破译算法,但研究中并没有找到弱点。
置换运算P 对S1至S8盒输出的32bit 数据进行坐标变换 置换P输出的32bit数据与左边32bit即Ri-1诸位模2相加所得到的32bit作为下一轮迭代用的右边的数字段,并将Ri-1并行送到左边的寄存器作为下一轮迭代用的左边的数字段。
3.逆初始置换IP-1 1,2,…… ……64 置换码组(64bit) 将16轮迭代后给出的64bit组进行置换得到输出的密文组 1,2,…… ……64 40 8 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 密文(64bit) 置换码组(64bit) 将16轮迭代后给出的64bit组进行置换得到输出的密文组
3.2.3 DES的解密 解密算法与加密算法相同,只是子密钥的使用次序相反。
3.2.4 DES的安全性 DES在20多年的应用实践中,没有发现严重的安全缺陷,在世界范围内得到了广泛的应用,为确保信息安全做出了不可磨灭的贡献。 存在的安全弱点: 密钥较短:56位密钥空间约为7.2*1016。1997年6月Rocke Verser小组通过因特网利用数万台微机历时4个月破译了DES;1998年7月,EFF用一台25万美元的机器,历时56小时破译DES。 存在弱密钥:有的密钥产生的16个子密钥中有重复者。 互补对称性:C=DES(M,K),则C’=DES(M’,K’),其中,M’,C’,K’是M,C,K的非。
DES具有良好的雪崩效应 雪崩效应:明文或密钥的微小改变将对密文产生很大的影响。特别地,明文或密钥的某一位发生变化,会导致密文的很多位发生变化。 DES显示了很强的雪崩效应 两条仅有一位不同的明文,使用相同的密钥,仅经过3轮迭代,所得两段准密文就有21位不同。 一条明文,使用两个仅一位不同的密钥加密,经过数轮变换之后,有半数的位都不相同。
3.2.5 多重DES DES在穷举攻击下相对比较脆弱,因此需要用某种算法来替代它,有两种解决方法: 设计全新的算法; 用DES进行多次加密,且使用多个密钥,即多重DES。这种方法能够保护用于DES加密的已有软件和硬件继续使用。
二重DES 为了提高DES的安全性,并利用实现DES的现有软硬件,可将DES算法在多密钥下多重使用。 二重DES是多重使用DES时最简单的形式,如图3.8所示。其中明文为P,两个加密密钥为K1和K2,密文为: 解密时,以相反顺序使用两个密钥:
图3.8 二重DES
因此,二重DES所用密钥长度为112比特,强度极大地增加。然而,假设对任意两个密钥K1和K2,能够找出另一密钥K3,使得
那么,二重DES以及多重DES都没有意义,因为它们与56比特密钥的单重DES等价,好在这种假设对DES并不成立。将DES加密过程64比特分组到64比特分组的映射看作一个置换,如果考虑264个所有可能的输入分组,则密钥给定后,DES的加密将把每个输入分组映射到一个惟一的输出分组。否则,如果有两个输入分组被映射到同一分组,则解密过程就无法实施。对264个输入分组,总映射个数为 。
另一方面,对每个不同的密钥,DES都定义了一个映射,总映射数为256<1017。 因此,可假定用两个不同的密钥两次使用DES,可得一个新映射,而且这一新映射不出现在单重DES定义的映射中。这一假定已于1992年被证明。所以使用二重DES产生的映射不会等价于单重DES加密。但对二重DES有以下一种称为中途相遇攻击的攻击方案,这种攻击不依赖于DES的任何特性,因而可用于攻击任何分组密码。其基本思想如下:
如果有 那么(见图3.8)
如果已知一个明文密文对(P,C),攻击的实施可如下进行:首先,用256个所有可能的K1对P加密,将加密结果存入一表并对表按X排序,然后用256个所有可能的K2对C解密,在上述表中查找与C解密结果相匹配的项,如果找到,则记下相应的K1和K2。最后再用一新的明文密文对(P′,C′)检验上面找到的K1和K2,用K1和K2对P′两次加密,若结果等于C′,就可确定K1和K2是所要找的密钥。
对已知的明文P,二重DES能产生264个可能的密文,而可能的密钥个数为2112,所以平均来说,对一个已知的明文,有2112/264=248个密钥可产生已知的密文。而再经过另外一对明文密文的检验,误报率将下降到248-64=2-16。所以在实施中途相遇攻击时,如果已知两个明文密文对,则找到正确密钥的概率为1-2-16。
两个密钥的三重DES 抵抗中途相遇攻击的一种方法是使用3个不同的密钥做3次加密,从而可使已知明文攻击的代价增加到2112。然而,这样又会使密钥长度增加到56×3=168比特,因而过于笨重。一种实用的方法是仅使用两个密钥做3次加密,实现方式为加密\|解密\|加密,简记为EDE( encryptdecryptencrypt),见图3.9,即:
此方案已在密钥管理标准ANS X.917和ISO 8732中被采用。 图3.9 两个密钥的三重DES 此方案已在密钥管理标准ANS X.917和ISO 8732中被采用。
三个密钥的三重DES 三个密钥的三重DES密钥长度为168比特,加密方式为 令K3=K2或K1=K2,则变为一重DES。 三个密钥的三重DES已在因特网的许多应用(如PGP和S/MIME)中被采用。
分组密码的运行模式 分组密码在加密时,明文分组的长度是固定的,而实际应用中待加密消息的数据量是不定的,数据格式可能是多种多样的。为了能在各种应用场合使用DES,美国在FIPS PUS 74和81中定义了DES的4种运行模式:ECB,CBC,CFB,OFB.
电码本(ECB)模式 ECB(electronic codebook)模式是最简单的运行模式,它一次对一个64比特长的明文分组加密,而且每次的加密密钥都相同,如图3.10所示。当密钥取定时,对明文的每一个分组,都有一个惟一的密文与之对应。因此形象地说,可以认为有一个非常大的电码本,对任意一个可能的明文分组,电码本中都有一项对应于它的密文。
图3.10 ECB模式示意图
如果消息长于64比特,则将其分为长为64比特的分组,最后一个分组如果不够64比特,则需要填充。解密过程也是一次对一个分组解密,而且每次解密都使用同一密钥。图3.10中,明文是由分组长为64比特的分组序列P1,P2,…,PN构成,相应的密文分组序列是C1,C2,…,CN。
ECB在用于短数据(如加密密钥)时非常理想,因此如果需要安全地传递DES密钥,ECB是最合适的模式。
密码分组链接(CBC)模式 为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组,CBC(cipher block chaining)模式就可满足这一要求。 图3.11是CBC模式示意图,它一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文分组之间的固定关系,所以重复的明文分组不会在密文中暴露出这种重复关系。
图3.11 CBC模式示意图
解密时,每一个密文分组被解密后,再与前一个密文分组异或,即 设 因而产生出明文分组。
在产生第1个密文分组时,需要有一个初始向量IV与第1个明文分组异或。解密时,IV和解密算法对第1个密文分组的输出进行异或以恢复第1个明文分组。 IV对于收发双方都应是已知的,为使安全性最高,IV应像密钥一样被保护,可使用ECB加密模式来发送IV。保护IV的原因如下: 如果敌手能欺骗接收方使用不同的IV值,敌手就能够在明文的第1个分组中插入自己选择的比特值,这是因为:
用X(i)表示64比特分组X的第i个比特,那么 由异或的性质得 其中撇号表示比特补。上式意味着如果敌手篡改IV中的某些比特,则接收方收到的P1中相应的比特也发生了变化。
由于CBC 模式的链接机制,CBC模式对加密长于64比特的消息非常合适。 CBC模式除能够获得保密性外,还能用于认证。
密码反馈(CFB)模式 如上所述,DES是分组长为64比特的分组密码,但利用CFB(cipher feedback)模式或OFB模式可将DES转换为流密码。流密码不需要对消息填充,而且运行是实时的。因此如果传送字母流,可使用流密码对每个字母直接加密并传送。 流密码具有密文和明文一样长这一性质,因此,如果需要发送的每个字符长为8比特,就应使用8比特密钥来加密每个字符。如果密钥长超过8比特,则造成浪费。
图3.12是CFB模式示意图,设传送的每个单元(如一个字符)是j比特长,通常取j=8,与CBC模式一样,明文单元被链接在一起,使得密文是前面所有明文的函数。
图3.12 CFB模式示意图
加密时,加密算法的输入是64比特移位寄存器,其初值为某个初始向量IV。加密算法输出的最左(最高有效位)j比特与明文的第一个单元P1进行异或,产生出密文的第1个单元C1,并传送该单元。然后将移位寄存器的内容左移j位并将C1送入移位寄存器最右边(最低有效位)j位。这一过程继续到明文的所有单元都被加密为止。
解密时,将收到的密文单元与加密函数的输出进行异或。注意这时仍然使用加密算法而不是解密算法,原因如下: 设Sj(X)是X的j个最高有效位,那么 因此 可证明以后各步也有类似的这种关系。 CFB模式除能获得保密性外,还能用于认证。
输出反馈(OFB)模式 OFB(output feedback)模式的结构类似于CFB,见图3.13。不同之处如下:OFB模式是将加密算法的输出反馈到移位寄存器,而CFB模式中是将密文单元反馈到移位寄存器。
图3.13 OFB模式示意图
OFB(output feedback)模式的结构类似于CFB,见图3 OFB(output feedback)模式的结构类似于CFB,见图3.13。不同之处如下:OFB模式是将加密算法的输出反馈到移位寄存器,而CFB模式中是将密文单元反馈到移位寄存器。
OFB模式的优点是传输过程中的比特错误不会被传播。例如C1中出现1比特错误,在解密结果中只有P1受到影响,以后各明文单元则不受影响。而在CFB中,C1也作为移位寄存器的输入,因此它的1比特错误会影响解密结果中各明文单元的值。
OFB的缺点是它比CFB模式更易受到对消息流的篡改攻击,比如在密文中取1比特的补,那么在恢复的明文中相应位置的比特也为原比特的补。因此使得敌手有可能通过对消息校验部分的篡改和对数据部分的篡改,而以纠错码不能检测的方式篡改密文。
DES加密模式比较 模式 技术特点 应用 ECB 一组一密 加密短数据 CBC 当前明文与前密文为输入 加密分组数据,认证 CFB J比特流加密,密文反馈输入 数据流加密,认证 OFB 前次加密算法输出为本次加密算法输入 数据流加密(信道质量差)
3.3 高级加密标准AES 1997年1月,美国国家标准局NIST向全世界密码学界 发出征集21世纪高级加密标准(AES——Advanced Encryption Standard)算法的公告,并成立了AES标 准工作研究室,1997年4月15日的例会制定了对AES的 评估标准。
AES的要求 (1)AES是公开的; (2)AES为单钥体制分组密码; (3)AES的密钥长度可变,可按需要增大; (4)AES适于用软件和硬件实现; (5)AES可以自由地使用,或按符合美国国 家标准(ANST)策略的条件使用;
算法衡量条件 满足以上要求的AES算法,需按下述条件判断优劣 a. 安全性 b. 计算效率 c. 内存要求 d. 使用简便性 e. 灵活性。
AES的评审 1998年4月15日全面征集AES算法的工作结束。1998年8 月20日举行了首届AES讨论会,对涉及14个国家的密码学 家所提出的候选AES算法进行了评估和测试,初选并公布 了15个被选方案,供大家公开讨论。 CAST-256, RC-6, CRYPTON-128,DEAL-128, FROG, DFC, LOKI-97, MAGENTA, MARS, HPC, RIJNDAEL, SAFER+, SERPENT, E-2, TWOFISH。 这些算法设计思想新颖,技术水平先进,算法的强度都超 过3-DES,实现速度快于3-DES。
AES的评审 RC6TM(R. Rivest等,RSA Lab.), RIJNDEAL(J. Daemen,比), 1999年8月9日NIST宣布第二轮筛选出的5个候选算法为: MARS(C.Burwick等,IBM), RC6TM(R. Rivest等,RSA Lab.), RIJNDEAL(J. Daemen,比), SERPENT(R. Anderson等,英、以、挪威), TWOFISH(B. Schiener)。 2000年10月2日,NIST宣布Rijndael作为新的AES
AES加密数学基础 群:是一个代数系统,它由一个非空集合组成,在集合上定义了一个二元运算,其满足: 记作: 封闭性:对任意的 , ; 封闭性:对任意的 , ; 结合律:对任何的 ,有 ; 单位元:存在一个元素 (称为单位元),对任意元素有: ; 逆元:对任意 ,存在一个元素 (称为逆元),使得 。 记作:
交换群与有限群 若群还满足交换律,即对任何 ,有: , 则称为交换群(或加法群,阿贝尔群等)。 若集合G中只含有有限多个元素,则我们称 若群还满足交换律,即对任何 ,有: , 则称为交换群(或加法群,阿贝尔群等)。 若集合G中只含有有限多个元素,则我们称 为有限群,此时,把集合G中元素的个数称为有限群的阶。
群的性质 群中的单位元是惟一的; 消去律成立,即对任意的 : 如果 ,则 群中的每一元素的逆元是惟一的。
域 域是一个代数系统,它由一个(至少包含两个元素的)非空集合F组成,在集合F上定义有两个二元运算:加法与乘法,并满足下面条件: 记为 乘法在加法上满足分配律,即 记为
有限域 若集合F只包含有限个元素,则称这个域F为有限域。有限域中元素的个数称为该有限域的阶。 若有一任意的素数P和正整数 ,存在 阶有限域,这个有限域记为 。当 n=1时,有限域 称为素域。
GF(28)域上的多项式表示及运算 一个字节的 元素的二进制展开成的多项式系数为: 一个字节的 元素的二进制展开成的多项式系数为: 例如, 上的“37”(为十六进制),其二进制为“00110111”,对应多项式为:
GF(28)4域上的多项式表示及运算 一个四个字节的字(有32比特位)可以看作是域 上的多项式,每个字对应于一个次数小于4的多项式。 一个四个字节的字(有32比特位)可以看作是域 上的多项式,每个字对应于一个次数小于4的多项式。 两个 域上的元素相加时,将这两个元素对应多项式系数相加即得到结果,相加时采用比特异或来实现。 两个 域上的元素相乘时,要将结果对一个特定的多项式取模,以使相乘后的结果还是一个4字节的向量。
AES加密算法的具体实现 AES每轮要经过四次变换,分别是 进行变换前先放到一个4×4的矩阵中。如下页图所示: 字节代换运算(SubByte ()) ShiftRows()(行移位)变换 MixColumns()(列混合)变换 AddRoundKey() (轮密钥的混合)变换 我们用的128bit的密钥(循环次数为10),那么每次加密的分组长为128bit,16个字节,每次从明文中按顺序取出16个字节假设为a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15,这16个字节在 进行变换前先放到一个4×4的矩阵中。如下页图所示:
a0 a4 a8 a12 a1 a5 a9 a13 a2 a6 a10 a14 a3 a7 a11 a15 这个矩阵称为状态 (state) 以后所有的变换都是基于这个矩阵进行的,到此,准备工作已经完成。现在按照前面的顺序进行加密变换,首先开始第一次循环的第一个变换:字节代换(SubByte ())。
字节代换(SubByte ()) a0 a4 a8 a12 a1 a5 a9 a13 a2 a6 a10 a14 a3 a7 a11 a15 out0 out4 out8 out12 out1 out5 out9 out13 out2 out6 out10 out14 out3 out7 out11 out15 查表
字节代换-S盒变换(查表) S12={53},则X=5, Y=3, out9=ed
ShiftRows()(行移位)变换 S S′ s00 s01 s02 s03 s10 s11 s12 s13 s20 s21 s22 行变换示意图
MixColumns()(列混合)变换 S0c S’0c S1c S’1c S2c S’2c S3c S’3c 02 03 01 S’0c=({02} ● S0c)⊕({03} ● S1c)⊕ S2c⊕S3c,但这个结果可能会超出一个字节的存储范围,所以实际上还要对结果进行处理。
3.4 序列密码 (流密码) “一次一密”密码在理论上是不可攻破的。流密码则由“一次一密”密码启发而来。 3.4 序列密码 (流密码) “一次一密”密码在理论上是不可攻破的。流密码则由“一次一密”密码启发而来。 流密码目前的理论已经比较成熟,工程实现也比较容易,加密效率高,在许多重要领域得到应用。 “一次一密”密码使用的密钥是和明文一样长的随机序列,密钥越长越安全,但长密钥的存储、分配都很困难。
流密码的密钥流 密钥流 明文流 密文流 流密码的关键就是产生密钥流的算法,该算法必须能够产生可变长的、随机的、不可预测的密钥流。 保持通信双方的精确同步是流密码实际应用中的关键技术。由于通信双方必须能够产生相同的密钥流,所以这种密钥流不可能是真随机序列,只能是伪随机流。
流密码的结构 典型的流密码每次加密一位或一个字节明文。 将初始密钥(种子)输入到发生器,输出一个随机数(密钥)。 密钥K 密钥K 伪随机字节 (密钥流发生器) 伪随机字节 发生器 (密钥流发生器) k k 密文 字节流 C 明文 字节流 M 明文 字节流 M 异或加密 异或解密 11001100 明文 01101100 密钥流 10100000 密文
设计流密码需要考虑的因素 密钥流的周期要长。伪随机数发生器产生的并非完全随机的序列,它是一个产生确定的比特流的函数,该比特流最终将产生重复。重复的周期越长,相当于密钥越长,密码分析也就越困难。 密钥流应尽可能地接近于一个真正的随机数流的特征。例如1和0的个数应大致相同。密钥流越随机,加密所得的密文也越随机,分析就越困难。 伪随机数发生器的输出取决于输入的密钥的值。
RC4流密码 RC4是Ron Rivest为RSA公司在1987年设计的一种流密码。 它是一种可变密钥长度、面向字节操作的流密码。 用于SSL/TLS(安全套接字/传输层安全协议) 用于IEEE802.1无线局域网中的WEP协议。
RC4算法 输入:一个256个字节的表示0---255的状态矢量S、密钥K(长度为kenlen) 输出:密钥字节流 *初始化* For i=0 to 255 do S[i]=i; T[i]=K[i mod keylen]; //临时矢量T(256字节) *置换* j=0; j=(j+S[i]+T[i]) mod 256; Swap(S[i], S[j]); //S仍然包含所有值为0到255的元素
其他对称密码 IDEA CLIPPER密码 Blowfish Twofish CAST-128 GOST 由旅居瑞士的华人来学嘉和他的导师J.L. Massey共同开发的。IDEA使用128位密钥,明文和密文分组长度为64位。已被用在多种商业产品中。 CLIPPER密码 采用SKIPJACK算法,明文和密文分组长度为64位,密钥长度为80位。 Blowfish Blowfish允许使用最长为448位的不同长度的密钥,并针对在32位处理器上的执行进行了优化。 Twofish Twofish使用128位分组,可以使用128、192或256位密钥。 CAST-128 CAST-128使用128位密钥。它在更新版本的PGP中使用。 GOST GOST是为了回应DES而开发的俄罗斯标准,它使用256位密钥。