AES 加密算法基本原理

AES 是 Advanced Encryption Standard 的缩写,是最常见的对称加密算法。AES 在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。

AES基本原理

AES 的加密公式为 C=E(K,P),其中 K 为密钥,P 为明文,C 为密文。

AES 加密明文的过程是,首先对明文进行分组,每组的长度都是 128 位,然后一组一组地加密,直到所有明文都已加密。密钥的长度可以是 128、192 或 256 位。

在加密函数 E 中,会执行一个轮函数,除最后一次执行不同外,前面几轮的执行是相同的。以 AES-128 为例,推荐加密轮数为 10 轮,即前 9 轮执行的操作相同,第 10 轮执行的操作与前面不同。不同的密钥长度推荐的加密轮数是不一样的,具体见下面的表格。


加密时,明文按照 128 位为单位进行分组,每组包含 16 个字节,按照从上到下、从左到右的顺序排列成一个 4 × 4 的矩阵,称为明文矩阵。AES 的加密过程在一个大小同样为 4 × 4 的矩阵中进行,称为状态矩阵,状态矩阵的初始值为明文矩阵的值。每一轮加密结束后,状态矩阵的值变化一次。轮函数执行结束后,状态矩阵的值即为密文的值,从状态矩阵得到密文矩阵,依次提取密文矩阵的值得到 128 位的密文。

以 128 位密钥为例,密钥长度为 16 个字节,也用 4 × 4 的矩阵表示,顺序也是从上到下、从左到右。AES 通过密钥编排函数把密钥矩阵扩展成一个包含 44 个字的密钥序列,其中的前 4 个字为原始密钥用于初始加密,后面的 40 个字用于 10 轮加密,每轮使用其中的 4 个字。密钥递归产生规则如下:

(1) 如果 i 不是 4 的倍数,那么由等式 w[i] = w[i-4] ⊕ w[i-1] 确定;

(2) 如果 i 是 4 的倍数,那么由等式 w[i] = w[i-4] ⊕ T(w[i-1]) 确定。

加密的第 1 轮到第 9 轮的轮函数一样,包括 4 个操作:字节代换、行位移、列混合和轮密钥加。最后一轮迭代不执行列混合。另外,在第一轮迭代之前,先将明文和原始密钥进行一次异或加密操作。 


AES 加密的轮函数操作

字节代换 SubBytes

矩阵中的各字节通过一个 8 位的 S-box 进行转换。这个步骤提供了加密法非线性的变换能力。S-box 与 GF(2^8)上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box 结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。此外在建构 S-box 时,刻意避开了固定点与反固定点,即以 S-box 替换字节的结果会相当于错排的结果。



行位移 ShiftRows

在此步骤中,每一行都向左循环位移某个偏移量。在 AES 中(区块大小 128位 ),第一行维持不变,第二行里的每个字节都向左循环移动一格。同理,第三行及第四行向左循环位移的偏移量就分别是 2 和 3。128 位和 192 位的区块在此步骤的循环位移的模式相同。经过 ShiftRows 之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。Rijndael 算法的版本中,偏移量和 AES 有少许不同;对于长度 256 比特的区块,第一行仍然维持不变,第二行、第三行、第四行的偏移量分别是 1 字节、2 字节、3 字节。除此之外,ShiftRows 操作步骤在 Rijndael 和 AES 中完全相同。



列混合 MixColumns

在 MixColumns 步骤,每一列的四个字节通过线性变换互相结合。每一列的四个元素分别当作 1 , x , x^2 , x^3 的系数,合并即为GF(2^8)中的一个多项式,接着将此多项式和一个固定的多项式 c(x)=3x^3+x^2+x+2 在 modulo x^4 + 1 下相乘。此步骤亦可视为 Rijndael 有限域之下的矩阵乘法。MixColumns 函数接受 4 个字节的输入,输出 4 个字节,每一个输入的字节都会对输出的四个字节造成影响。因此 ShiftRows 和 MixColumns 两步骤为这个密码系统提供了扩散性。



轮密钥加 AddRoundKey

回合密钥将会与原矩阵合并。在每次的加密循环中,都会由主密钥产生一把回合密钥(通过 Rijndael 密钥生成方案产生),这把密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或(⊕)加法。



分享学习笔记和技术总结,内容涉及 Java 进阶、架构设计、前沿技术、算法与数据结构、数据库、中间件等多个领域,欢迎关注。本文首发于微信公众号“后端开发那点事儿”。

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

推荐阅读更多精彩内容