网站首页 > 技术文章 正文
01
AES算法简介
美国政府在1997年公开征集高级加密标准(Advanced Encryption Standard: AES)替代DES加密算法。AES得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。
点击添加图片描述(最多60个字)
02
AES的基本结构
AES为分组密码,把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:
AES
密钥长度(32位比特字)
分组长度(32位比特字)
加密轮数
AES-128
4
4
10
AES-192
6
4
12
AES-256
8
4
14
接下来,我们以AES-128为例,介绍AES算法的流程。
03
AES算法流程
AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
下图给出了AES加解密的流程,从图中可以看出:
1)解密算法的每一步分别对应加密算法的逆操作
2)加解密所有操作的顺序正好是相反,保证了算法的正确性。
另外,加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。
点击添加图片描述(最多60个字)
3.1 字节替代
字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。AES定义了一个S盒和一个逆S盒,用于提供密码算法的混淆性。
S盒:
点击添加图片描述(最多60个字)
逆S盒:
点击添加图片描述(最多60个字)
S和S-1分别为16x16的矩阵,完成一个8比特输入到8比特输出的映射,输入的高4-bit对应的值作为行标,低4-bit对应的值作为列标。假设输入字节的值为a=a7a6a5a4a3a2a1a0,则输出值为S[a7a6a5a4][a3a2a1a0],S-1的变换也同理。
例如:字节00000000B替换后的值为(S[0][0]=)63H,再通过S-1即可得到替换前的值,(S-1 [6][3]=)00H。
3.2 行移位
行移位是一个4x4的矩阵内部字节之间的置换,用于提供算法的扩散性。
1) 正向行移位
正向行移位用于加密,其原理图如下。其中:第一行保持不变,第二行循环左移8比特,第三行循环左移16比特,第四行循环左移24比特。
假设矩阵的名字为state,用公式表示如下:state’[i][j] = state[i][(j+i)%4];其中i、j属于[0,3]。
点击添加图片描述(最多60个字)
2) 逆向行移位
逆向行移位即是相反的操作,即:第一行保持不变,第二行循环右移8比特,第三行循环右移16比特,第四行循环右移24比特。
用公式表示如下:state’[i][j] = state[i][(4+j-i)%4];其中i、j属于[0,3]。
3.3 列混淆
1) 正向列混淆
正向列混淆的原理图如下:
点击添加图片描述(最多60个字)
根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的4个值有关系。
下面举一个例子,假设某一列的值如下图,运算过程如下:
点击添加图片描述(最多60个字)
点击添加图片描述(最多60个字)
在计算02与C9的乘积时,由于C9对应最左边的比特为1,因此需要将C9左移一位后的值与(0001 1011)求异或。同理可以求出另外几个值。
2) 逆向列混淆
逆向列混淆的原理图如下:
点击添加图片描述(最多60个字)
由于:
说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文。
3.4 轮密钥加
这个操作相对简单,其依据的原理是“任何数和自身的异或结果为0。加密过程中,每轮的输入与轮子密钥异或一次;因此,解密时再异或上该轮的轮子密钥即可恢复。
3.5 密钥扩展算法
密钥扩展的原理图如下:
点击添加图片描述(最多60个字)
密钥扩展过程说明:
1) 将种子密钥按图(a)的格式排列,其中k0、k1、……、k15依次表示种子密钥的一个字节;排列后用4个32比特的字表示,分别记为w[0]、w[1]、w[2]、w[3];
2) 按照如下方式,依次求解w[j],其中j是整数并且属于[4,43];
3) 若j%4=0,则w[j]=w[j-4]⊕g(w[j-1]),否则w[j]=w[j-4]⊕w[j-1];
函数g的流程说明:
1) 将w循环左移8比特;
2) 分别对每个字节做S盒置换;
3) 与32比特的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,其值如下。(RC的值只需要有10个,而此处用了11个,实际上RC[0]在运算中没有用到,增加RC[0]是为了便于程序中用数组表示。由于j的最小取值是4,j/4的最小取值则是1,因此不会产生错误。)
RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36}
04
小结
密码算法要求是可逆的,这样解密算法才能正确的恢复明文。拿AES来说,在密钥固定的情况下,明文和密文在整个输入空间是一一对应的。因此算法的各个部件也都是可逆的,再将各个部件的操作顺序设计成可逆的,密文就能正确的解密了。
- 上一篇: 浅谈固态硬盘AES加密功能
- 下一篇: AES加密技术在工业SSD端到端数据安全中的非常的重要作用
猜你喜欢
- 2025-05-24 网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理
- 2025-05-24 常见加密方式及Python实现
- 2025-05-24 pdf怎么加密
- 2025-05-24 aes256 加密 解密 (python3) 「二」
- 2025-05-24 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 2025-05-24 Springboot实现对配置文件中的明文密码加密
- 2025-05-24 JavaScript常规加密技术
- 2025-05-24 信息安全人人平等 谷歌推出低性能安卓手机加密技术
- 2025-05-24 SpringBoot与Jasypt整合,实现数据库字段自动加密解密功能
- 2025-05-24 安全性能爆表!Win10 TH2引入XTS-AES加密算法
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 522℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 516℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 486℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 484℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)