1:设计原则
1) 分组长度和密钥长度——明文分组长度和密钥长度尽可能大
2) 扰乱原则——应使得密钥和明文以及密文之间的依赖关系相当复杂
3) 扩散原则——应使得密钥的每一位影响密文的许多位
针对实现的原则——软件实现和硬件实现
2:评估——安全性、性能、算法和实现特性
3:分组密码常见的设计方法
1) Feistel结构
明文P=LR,L是P的左边n位,R是P的右边n位;进行r轮完全相同的运算,第i轮的运算为 Li=Ri-1 Ri=Li-1(异或)F(Ri-1,Ki);F()是轮函数,K1...Kr是由种子密钥生成的子密钥
方法特点
(1) 加解密是完全一样的,除了所使用的子密钥的顺序正好相反,有利于硬件实现
(2) 扩散比较慢,至少要两轮才能改变输入的每一位,从而导致轮数比较多
2) SPN结构
Xi-1到Xi需要经历两层,第一层为S层(替换层,起扰乱作用);第二层为P层(置换层,起扩散作用)
该方法扩散快,但加解密通常不相似
4:数据加密标准(DES)
明文分组为64位、有效密钥56位、输出密文64位的,具有16轮迭代的分组对称密码算法,DES由初始置换、16轮迭代和初始逆置换组成
存在争议的几点
1) S-盒的设计准则
2) 56的有效密钥太短
3) 弱密钥和半弱密钥
4) 代数结构存在互补对称性
5:高级加密标准(AES)
三种可选的密钥长度,且密钥长度决定轮数Nr
密钥长度为128,轮数为10;密钥长度为192,轮数为12;密钥长度为256,轮数为14
1) 给定一个明文M,将State初始化为M,并将轮密钥与State异或(轮密钥的长度=分组长度*(Nr+1))
2) 对前Nr-1轮中的每一轮,用S-盒进行一次替换(SubBytes);对替换的结果State做行移位操作(ShiftRows);再对State做列混合变换(MixColumns),然后进行AddRoundKey操作
3) 最后一轮进行SubBytes、ShiftRows和AddRoundKey操作
4) 将State定义为密文C
注意S-盒的构造过程;xy——映射为逆——转换为二进制表示、并进行放射变化得到(需用到11000110)
行移位变换——第一行保持不动,第二行循环左移一个字节,第三行循环左移两个字节,第四行循环左移三个字节
列混合变换——把每一列看成一个四项多项式,再与固定多项式a(x)进行模x^4+1乘法运算
AES的解密:需要用到逆S-盒,以及InvShiftRows变换和InvMixColumns变换
6:分组密码的工作模式
1) 电子本模式(ECB模式):直接利用加密算法分别对每个明文分组使用相同密钥进行加密(容易暴露明文数据的固有格式)
2) 链接模式(CBC模式):加密算法的输入是当前的明文分组Mi和上一次产生的密文分组Ci-1的异或,输出为密文分组Ci
3) 密码反馈模式(CFB模式):加密函数处理结果的最高s位与明文的第一个分组M1进行异或产生密文分组C1;同时,移位寄存器的值向左移动s位,并用C1替换寄存器的最低s位
4) 输出反馈模式(FOB模式)
5) 计数器模式(CTR模式):将一个计数器输入到寄存器中,对寄存器中的值进行加密后与明文M异或得到密文;每一个分组完成加密后,计数器都要增加某个常数
具有随机访问特性、高效率