1.多项式加法
系数异或
2.多项式乘法
不可约多项式=既约多项式
这里的不可约多项式X^8+ X4+X3+X+1
3.系数在GF(X^8)上的多项式计算
乘法
在AES中,使用的模数多项式取:M(x)=x^4+1,M(x)是可约多项式,不是所有多项式都有对应可逆多项式,但AES选择了一个有逆元的固定多项式:(03,01,01,02)
1991年开始试用EES:不公开算法,只提供芯片;新密码设计要求:算法是安全的,但通过法律允许可破译监听;民众要求公开算法,并去掉法律监督
AES加密算法采用分组密码体制,每个分组数据的长度为128位 16个字节,密钥长度可以是 128位16个字节、192位或256位。AES 的密钥长度与加解密轮数Nr之间的变动,如果密钥长度为 128 位,则 Nr=10;如果密钥长度为 192 位,Nr=12;如果密钥长度为 256 位,则 Nr=14。不是对合算法,加解密使用不同的算法。
字节代替变换ByteSub( ) 是一个关于字节的非线性变换。 S盒变换是AES唯一的非线性变换,也是AES安全的关键。AES使用16个相同的S盒,DES使用8个不同的S盒压缩。
(1)一个字节在GF(2^8)上用乘法逆元T替代
(2)使用仿射变换Y=MxT+B 【M是8x8矩阵,T是列矩阵】
特点: 1. S盒第1步就是把各字节用其乘法逆元来代替,是一种非线性变换; 2. 系数矩阵每一行都含有5个1,说明输出中的每1位,都与输入中的5位 相关; 3. 系数矩阵每一列都含有5个1,说明改变输入中的任1位,将影响输出 中的5位发生变化; 4. 相当于DES中的S盒,它为算法提供非线性变换。
行移位(ShiftRows) 变换中,状态矩阵中的每一行将以字节为单位,循环左移不同的位移量 。【第一行左移0个字节,第二行左移1个字节,…】
列混合变换MixColumns() 对一个状态逐列进行变换, 它将一个状态的每一列视为有限域GF(2^8)上的一个多项式。
轮密钥加法变换AddRoundKey( ) 简单地将输入阵列和一个轮密钥进行简单的按位异或(模2加)运算,轮密钥按顺序取自扩展密钥,而扩展密钥又是由原始工作密钥经过扩展后得到的。
(1)初始轮密钥加法;
(2)中间轮轮变换;
先进行字节替换,再行位移,再列混合,再轮密钥加法变换。
Square结构,每一轮由三层组成:
(1)非线性层:由16个S盒并置而成
(2)线性混合层:确保高度扩散
(3)密钥加层:子密钥简单地异或到中间状态下
(3)最后轮的轮变换;
先进行字节替换,再行位移,再轮密钥加法变换
轮密钥是由密钥经过一个扩展算法产生的,其长度是由加解密轮数决定,具体地说,轮密钥有(分 组长度)*(Nr + 1)位。例如:AES-128的加解密轮数为10,则轮密钥共有128 * (10 + 1) = 1408 位。 密钥扩展算法以一个字(即4个字节)为基本单位。
Rotkey(A,B,C,D),Subkey(S(A),S(B),S©,S(D))
字节替代,行变换,列混合【使用{03,01,01,02}的逆{0E 0B 0D 09}】
1.AES的字节替换和行位移可以交换顺序运算
2.列混合操作是线性变换,【轮密钥加法可以交换运算顺序,密钥换成MRK】
AES的解密过程使用的子密钥相同,但使用的顺序相反
1.安全问题:AES尚无已知的安全性的攻击,可以很好的抵抗差分攻击与线性攻击;
2.效率问题:运算速度快,无论在有无反馈模式的计算环境下,AES的硬件、软件实现都表现出了良好的性能。S盒和行位移是并行的,方便并行计算。相对来说,解密代价会比加密代价高一些(列混淆的逆矩阵)
分组密码算法SM4的分组长度和密钥长度都是128bit。32轮非线性迭代算法
SM4比AES的S盒多一个仿射变换
实际上一轮只处理了一个字(32bit)
加密和解密的变换结构相同,不同的只是轮密钥的使用顺序.
算法具有对合特性:解密算法和加密算法结构相同,只是轮密钥反序使用(与DES类似)
密码结构:非对称Feistel结构
经过了国内众多的安全性评估;