高级加密标准AES

【金山文档 | WPS云文档】 高级加密标准AES
https://kdocs.cn/l/ckICpLzrfKl8

密码学怎么学啊,感觉学不会啊,脑子转不过来哈哈哈哈

已疯。。。。

高级加密标准AES

有限域算术

AES中的有限域算术:

加法: 在GF(2^8)中,加法等同于异或(XOR)操作。这意味着两个元素相加是通过对应位进行异或操作来完成的。

减法: 在GF(2^8)中,减法也等同于异或操作,因为减去一个数等同于加上它的加法逆元,而在GF(2^8)中,一个数的加法逆元就是它本身。

乘法: 在GF(2^8)中,乘法更为复杂。它涉及到多项式乘法,然后对结果进行模一个不可约多项式的运算。AES使用特定的不可约多项式m(x) = x^8 + x^4 + x^3 + x + 1。这意味着任何乘法的结果都必须用这个多项式进行约化。

除法: 在GF(2^8)中,除法是通过乘以乘法逆元来实现的。每个非零元素都有一个乘法逆元,可以通过扩展欧几里得算法或其他方法来找到。

多项式表示和运算:

在GF(2^8)中,每个元素都可以表示为一个小于8次的多项式,系数为0或1。

加法是通过对应位的异或操作来完成的。

乘法是通过多项式乘法,然后对结果进行模不可约多项式m(x)的运算来完成的。

AES的结构

AES的总体结构

AES加密数据的分组大小固定为128位(16字节),但密钥长度可以是128位(16字节)、192位(24字节)或256位(32字节),分别对应AES-128、AES-192和AES-256。加密和解密过程都涉及多个轮次,轮数取决于密钥的长度:

AES-128:10轮

AES-192:12轮

AES-256:14轮

密钥长度(字/字节/位)

4/16/128

6/24/192

8/32/256

明文分组长度(字/字节/位)

4/16/128

4/16/128

4/16/128

轮数

10

12

14

每轮的密钥长度(字/字节/位)

4/16/128

4/16/128

4/16/128

扩展密钥长度(字/字节/位)

44/176

52/208

60/240

AES的详细结构

AES的加密过程包括以下四个主要步骤,每个步骤都在一个4x4的字节矩阵上操作:

初始变换(AddRoundKey):将输入的明文状态与密钥进行XOR操作。

字节代替(Substitute Bytes):使用S盒对每个字节进行非线性替换。

行移位(ShiftRows):对矩阵的行进行循环移位。

列混淆(MixColumns):基于有限域GF(2^8)的乘法,对矩阵的列进行混淆。

每轮加密后,除了最后一轮,都会再次进行轮密钥加(AddRoundKey)。

AES的轮密钥加(AddRoundKey)

在每轮的开始,当前状态与轮密钥进行XOR操作。轮密钥是从主密钥派生出来的,每轮的轮密钥都不同。

AES的密钥扩展

输入的密钥被扩展成一个更大的密钥数组,用于每轮的轮密钥加。对于128位的密钥,扩展密钥长度为176位(44个32位字)。

AES的可逆性

AES的每个操作都是可逆的,这意味着可以设计一个解密过程,按逆序执行相同的操作,最终恢复原始明文。

AES的解密过程

解密过程与加密过程类似,但操作顺序相反,并且使用逆变换。例如,字节代替使用逆S盒,列混淆使用逆列混淆操作。

AES的特点

AES不是Feistel结构,而是对整个数据分组作为一个矩阵进行处理。

AES的设计简单而高效,每轮都包括混淆和扩散操作,以及非线性替换。

AES的安全性来自于其结构的复杂性和密钥的使用。

AES的变换函数

字节代替变换

正向变换:

AES定义了一个S盒(Substitution box),它是一个16x16的矩阵,包含了8位所能表示的256个数的一个置换。

状态中的每个字节根据S盒进行查表替换,将该字节的高4位作为行值,低4位作为列值,从S盒中取出对应的元素作为输出。

十六进制{95}所对应的S盒的行值是9,列值是5,S 中在此位置的值是{2A}。

逆向变换:

使用逆S盒进行查表替换,逆S盒是S盒的逆变换。

基本原理:

S盒的设计旨在提供高非线性度,以防止线性和差分密码分析攻击。

S盒的构造涉及有限域GF(2^8)中的乘法逆运算。

行移位(Shift Rows)

正向变换

状态的第一行保持不变。

第二行向左循环移动一个字节,第三行移动两个字节,第四行移动三个字节。

逆向变换

执行相反方向的移位操作,第二行向右循环移动一个字节,其他行类似。

基本原理:

行移位通过简单的循环移位操作,实现了状态中字节的列间移动,增加了混淆效果。

列混淆(Mix Columns)

正向变换:

对每列独立操作,每列中的每个字节通过一个固定的多项式 a(x)=03x3+01x2+01x+02 进行变换,操作在有限域GF(2^8)上进行。

逆向变换:

使用逆多项式 b(x)=0Bx3+0Dx2+09x+0E 进行变换,它是 a(x)在GF(2^8)上的逆。

基本原理:

列混淆通过多项式乘法和模 x4+1 的操作,实现了状态中字节的列间混淆,增加了扩散效果。

轮密钥加(Add Round Key)

正向变换:

将128位的状态与128位的轮密钥进行按位XOR操作。

逆向变换:

由于XOR操作是自逆的,逆向轮密钥加与正向操作相同。

基本原理:

轮密钥加通过与轮密钥的XOR操作,将密钥的影响分布到状态的每个字节中,增强了密钥的混淆效果。

AES的密钥扩展

密钥扩展算法步骤

输入和初始化:

输入是一个4个字(16字节)的原始密钥。

输出是一个44个字(176字节)的一维线性数组,这个数组将为加密过程中的每一轮提供4个字的轮密钥。

复制输入密钥:

将输入密钥直接复制到扩展密钥数组的前4个字。

扩展密钥数组:

对于扩展密钥数组中从第5个字开始的每个字,其值依赖于前一个字(w[i-1])和前第四个字(w[i-4])。

对于下标为4的倍数的元素,使用一个更复杂的函数来计算,这个函数包括字循环、字代替和与轮常量的异或操作。

函数g的子功能

字循环(RotWord):将一个字中的四个字节循环左移一个字节。例如,将[B0, B1, B2, B3]变换成[B1, B2, B3, B0]。

字代替(SubWord):利用S盒对输入字中的每个字节进行字节代替。

与轮常量异或:步骤1和步骤2的结果再与轮常量Rcon[j]相异或。

轮常量(Rcon)

轮常量是一个字,这个字最右边三个字节总为0。因此,与Rcon相异或的结果只是与该字最左的那个字节相异或。

每轮的轮常量均不同,其定义为Rcon[j] = (Rc[j], 0, 0, 0),其中RC[1] = 1, RC[i] = 2 * RC[i-1](乘法是定义在域GF(2^8)上的)。

伪代码

KeyExpansion(byte key[16], word w[44]) {

    word temp;

    for (i=0; i<4; i++)

        w[i] = (key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]);

    for (i=4; i<44; i++) {

        temp = w[i-1];

        if (i % 4 == 0)

            temp = SubWord(RotWord(temp)) XOR Rcon[i/4];

        w[i] = w[i-4] XOR temp;

    }

}

初始密钥:算法开始时使用初始密钥,根据安全级别,密钥长度可以是128、192或256位。

轮常数(Rcon):在密钥扩展过程中使用一组预定义的轮常数。

词大小:密钥被分成32位的词。

密钥调度:通过密钥扩展过程生成的轮密钥集合。

扩展轮:在每个扩展轮中,执行以下操作:

RotWord:将一个字的字节循环左移一个字节。

SubWord:使用AES的S盒对每个字节进行替换。

Rcon:使用轮常数与当前词进行XOR操作。

轮密钥:在所有扩展轮之后,数组W中包含了所有轮密钥,每个轮密钥用于AES加密或解密的相应轮次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值