AES 算法简介

?xml version="1.0" encoding="UTF-8"?

美国国家标准技术研究所在 2001 年发布了高级加密标准(AES)。AES 是一个对称分组密码算法,旨在取代 DES 成为广泛使用的标准。

根据使用的密码长度,AES 最常见的有 3 种方案,用以适应不同的场景要求,分别是 AES-128、AES-192 和 AES-256。本文主要对 AES-128 进行介绍,另外两种的思路基本一样,只是轮数会适当增加。

1 算法流程

AES 加解密的流程图如下:

AES 加密过程涉及到 4 种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。

解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。

加解密中每轮的密钥分别由初始密钥扩展得到。算法中 16 字节的明文、密文和轮密钥都以一个 4x4 的矩阵表示。

接下来分别对上述 5 种操作进行介绍。

1.1 字节替代

字节代替的主要功能是通过 S 盒完成一个字节到另外一个字节的映射。S 盒的详细构造方法可以参考文献[1]。

下图(a)为 S 盒,图(b)为 S-1(S盒的逆)。

S 和 S-1 分别为 16x16 的矩阵。假设输入字节的值为 a=a7a6a5a4a3a2a1a0,则输出值为 S[a7a6a5a4][a3a2a1a0],S-1 的变换也同理。

例如:字节 00 替换后的值为(S[0][0]=)63,再通过 S-1 即可得到替换前的值,(S-1 [6][3]=)00。

1.2 行移位

行移位的功能是实现一个 4x4 矩阵内部字节之间的置换。

1.2.1 正向行移位

正向行移位的原理图如下:

实际移位的操作即是:第一行保存不变,第二行循环左移 1 个字节,第三行循环左移 2 个字节,第四行循环左移 3 个字节。

假设矩阵的名字为 state,用公式表示如下:

state’[i][j] = state[i][(j+i)%4]; 其中 i、j 属于 [0,3]

1.2.2 逆向行移位

逆向行移位即是相反的操作,用公式表示如下:

state’[i][j] = state[i][(4+j-i)%4]; 其中 i、j 属于 [0,3]

1.3 列混淆

列混淆:利用 GF(28) 域上算术特性的一个代替。

1.3.1 正向列混淆

正向列混淆的原理图如下:

根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的 4 个值有关系。此处的乘法和加法都是定义在 GF(28) 上的,需要注意如下几点:

1) 将某个字节所对应的值乘以 2,其结果就是将该值的二进制位左移一位,如果该值的最高位为 1(表示该数值不小于 128),则还需要将移位后的结果异或 00011011;[1]

2) 乘法对加法满足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)

3) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模 2 加法(相当于是异或运算)。


假设某一列的值如下图,运算过程如下:




同理可以求出另外几个值。

1.3.2 逆向列混淆

逆向列混淆的原理图如下:


由于:


说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文。

1.4 轮密码加

任何数和自身的异或结果为0。加密过程中,每轮的输入与轮密钥异或一次;因此,解密时再异或上该轮的密钥即可恢复输入。

1.5 密钥扩展

密钥扩展的原理图如下:


密钥扩展过程说明:

1)  将初始密钥以列为主,转化为 4 个 32 bits 的字,分别记为 w[0…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 的流程说明:

4)  将 w 循环左移一个字节;

5)  分别对每个字节按 S 盒进行映射;

6)  与 32 bits 的常量(RC[j/4],0,0,0)进行异或,RC 是一个一维数组,其值如下。(RC 的值只需要有 10 个,而此处用了 11 个,实际上 RC[0] 在运算中没有用到,增加 RC[0] 是为了便于程序中用数组表示。由于 j 的最小取值是 4,j/4 的最小取值则是 1,因此不会产生错误。)

RC = {00, 01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}

2 源码

  在 GitHub 上找到的 AES 实现代码,感觉写得不错。

  https://github.com/dhuertas/AES/blob/master/aes.c

3 参考文献

[1] William Stallings著;王张宜等译. 密码编码学与网络安全——原理与实践(第五版)[M]. 北京:电子工业出版社,2011.1.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • 目录一、对称加密 1、对称加密是什么 2、对称加密的优点 3、对称加密的问题 4、对称加密的应用场景 5、对称加密...
    意一ineyee阅读 61,892评论 8 110
  • 上次的文章中对常用的加密算法进行了一些简单的介绍,这次我们就挑一个出来说说,今天的主角的是对称加密中的当头大哥AE...
    张囧瑞阅读 23,744评论 10 31
  • 转:https://www.cnblogs.com/luop/p/4334160.html 我们知道数据加密标准(...
    right_33cb阅读 1,279评论 1 1
  • 引用 AES加密算法原理AES加密算法的C++实现密码算法详解——AES(高级加密算法) 1. 前言 本文针对加密...
    码梦的一生阅读 15,607评论 2 3
  • 《小狗钱钱》讲的是一个叫吉娅的小女孩在一条会说话的小狗钱钱的帮助下,学会如何赚钱、理财,并用金钱实现自己愿望的故事...
    会飞的鱼_flyfish阅读 390评论 1 3