密码学学习记录|aes 加解密算法

密码学学习记录 14 / 18

维基百科

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音: [ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael为名投稿高级加密标准的甄选流程。

参考资料

Tips:本文 aes 算法原理图来自看雪论坛帖子

AES 算法描述

AES 有多种实现方式。1、标准法,2、查表法,3、白盒 AES。本文主要分享标准法的实现

AES 没有使用经典的 Feistel 结构,而是分组算法。

在 AES 标准规范中,分组长度只能是 128 位,也就是说,每个分组为 16 个字节。密钥的长度可以使用 128 位、192 位或 256 位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

AES 密钥长度 加密轮数
128 4 10
192 6 12
256 8 14

本文主要分享 AES-128,ECB

AES 加密算法

AES 加密过程是在一个 4×4 的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte)。(Rijndael 加密法因支持更大的区块,其矩阵的“列数(Row number)”可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

  • 1、AddRoundKey 矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

  • 2、SubBytes 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

  • 3、ShiftRows 将矩阵中的每个横列进行循环式移位。

  • 4、MixColumns 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。

加密算法整体流程

  • 1、密钥扩展

  • 2、明文按照 16 个字节进行分组,4x4 矩阵

  • 3、密钥加法层(取密钥的 0-3 进行计算)

  • 4、循环 1...加密轮数

  • 5、每次循环都需要操作,字节替换(S盒替换),行移位,列混淆,密钥加法

  • 6、循环结束在操作,字节替换(S盒替换),行移位,密钥加法

密钥扩展

前面说到过,密钥长度不同,加密轮数也就不同。每轮加密都是 4x4 矩阵操作。例如输入的密钥为 16 个字节(4x4,四行四列),那就需要扩展到 4 x (1 + 10),44行。如果是 32 字节,那就需要扩展 4 x (14 + 1),60行。具体流程如下图

  • 1、首先将 16 字节的密钥,依次放到 w[0..3] 里

  • 2、剩下的 40 个,再按照一定的迭代计算规则依次存储

  • 3、迭代计算规则。循环 4...44 次

  • 4、判断 i 是否是四的倍数

  • 5、否:w[i] = w[i - 4] ^ w[i - 1]

  • 6、是:w[i] = w[i - 4] ^ G(w[i - 1])

  • 7、G函数:循环左移一位,使用 S盒 字节替换,轮常量 Rcon 异或

轮密钥加(AddRoundKey)

即,输入跟密钥进行异或,如下图

字节替换(SubBytes)

即,输入明文矩阵跟 S盒进行置换,高位为行,低位为列。如下图:

行移位(ShiftRows)

如下图:

列混淆(MixColumns)

这是 aes 算法中,最复杂的一步。对 4x4 矩阵中的每个元素,都进行,有限域 GF(256) 运算

AES 解密算法

解密算法整体流程

就是加密算法,反向操作。tips: 此图是从下往上看

轮密钥加(AddRoundKey)

跟加密逻辑相同

逆字节替换(INV-SubBytes)

即,输入明文矩阵跟 逆S盒进行置换,高位为行,低位为列。如下图:

逆行移位(INV-ShiftRows)

如下图:

逆列混淆(INV-MixColumns)

跟加密逻辑相同,不过运算矩阵不同。参考图示


全部代码

您需要先支付 39.9元 才能查看此处内容!立即支付

注意该订单不支持退款,如有问题可联系博主

暂无评论
本文作者:
本文链接: https://www.qinless.com/?p=1410
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

发表评论

返回顶部