(4)AES分组加密算法(原理详解)

说明:本内容参考B站UP主“可厉害的土豆”的视频讲解,强烈推荐一下该宝藏UP主
【AES加密算法】| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安全_哔哩哔哩_bilibili

 本次内容讲解只针对数据加密,数据解密则是逆运算(主要是我还没整理,你先自行理解一下)

1.AES加密算法的设计流程 

(4)AES分组加密算法(原理详解)_第1张图片

AES属于分组加密算法,算法规定需要将明文划分成组,每组的数据长度位128位。而密钥长度可以是128位、192位、256位。其主要区别就是加密轮数不一样,128位的是10轮,192位的是12轮,256位的是14轮。本文以128位密钥为讲解用例。

2.初始变换
        1)串行转矩阵

(4)AES分组加密算法(原理详解)_第2张图片

 这里是以字节位单位,所以,16个单元就对应128位(128bit的密钥矩阵是4*4,如果是192位的则应该是4*6;256位的就是4*8)。这个转换是针对明文和密钥两者的,两者都得转才能进行后面的运算。

        2)初始化运算

(4)AES分组加密算法(原理详解)_第3张图片

 将第一组明文矩阵与对应的密钥矩阵进行异或运算,运算规则如上图所示

3.9轮循环运算
        1)字节代换(SubBytes

初始化运算后的矩阵A,将A矩阵中的每一位对应的查找表中数据取出,替换A矩阵上的值。即用检索结果替换检索值。

                ① 检索表

(4)AES分组加密算法(原理详解)_第4张图片

检索表是AES算法定义的,专业称呼为S盒,解码的时候所用的叫逆S盒, 

                 ② 检索值替换

(4)AES分组加密算法(原理详解)_第5张图片

 原矩阵上的数据作为索引值(index),检索到的结果作为替换后的值,如上图所示。

       

        2)行移位(ShiftRows)

规则:第一行保持不动,第二行左移一位,第三行左移两位,第四行左移三位。注意看下图矩阵数值的位置变化。

(4)AES分组加密算法(原理详解)_第6张图片

         

        3)列混合(MixColumns)

将输入的4*4矩阵左乘一个给定的4*4矩阵,但这里的矩阵相乘不是普通意义上的先相乘再相加。原先的相加运算更换成异或运算,原先的相乘也有相应变化,注意看下文介绍。

(4)AES分组加密算法(原理详解)_第7张图片

 乘法规则介绍:
        case1:(0000 0001)

        case2:(0000 0010)

(4)AES分组加密算法(原理详解)_第8张图片

        * 说明一下,这里异或上00011011是运算规则(跟GF(2^8)域运算有关系,后续会补充进来)。
        case3:(0000 0011)

 其他的数可以拆分成上述的情况,而后进行计算。

       

         4)轮密钥加(AddRoundKey)

(4)AES分组加密算法(原理详解)_第9张图片

子密钥矩阵产生:由最初的轮密钥矩阵扩展得来,例如10轮加密,每轮就会产生1个子密钥。

(4)AES分组加密算法(原理详解)_第10张图片

 w[i]计算规则:
        ●i不是4的倍数:w[i] = w[i-4] ⊕ w[i-1] (按照公式直接带入计算即可,此类情况比较简单)

        ● i是4的倍数:w[i] = w[i-4] ⊕ T(w[i-1])(T函数:字循环+字节替换+轮常量异或)
                ⑴ step1:字循环,将输入字[b0,b1,b2,b3]变换成[b1,b2,b3,b0](列操作)

(4)AES分组加密算法(原理详解)_第11张图片

                 ⑵ step2:字节代换,查找表,对应数替换

(4)AES分组加密算法(原理详解)_第12张图片

                 ⑶ step3:轮常量异或:上一环节所得到的结果与同轮常量R[j]进行异或,j表示轮数。而这个轮常量是给定的

(4)AES分组加密算法(原理详解)_第13张图片

 4.1轮最终轮

此环节就是那个10轮加密的最后一轮,而它与前面9轮加密的不同之处在于,四个环节中少了列混合这一环节,其他的都一样。(1-字节替换;2-行移位;3-列混合;4-轮密钥加)

5.密文输出

经过前面的加密过程就完成了一组数据的完整的AES算法加密。

你可能感兴趣的:(芯片安全,安全,AES,分组加密)