【实习笔记】AES 加密算法原理简单解析

  高级加密标准(AES,Advanced Encryption Standard)是最常见的对称加密算法,被很多游戏在进行加密传输的时候采用,所谓对称加密也就是加密和解密用相同的密钥。我在大二的时候,学过一门叫《密码学原理》的课,但当时对 AES 加密算法只是做了简单的介绍,没有深入讲解其原理,现在我决定来重新学习一下。

一、AES 的基本结构

  因为 AES 为分组密码,即把明文分为长度相等的不同组,每次加密一组数据。在 AES 中,分组长度只能是128位,即16个字节。密钥长度则可以是128位、192位或256位,根据密钥的长度,加密轮数也有所不同(比如 AES-128,密钥长度32位,分组长度32位,加密轮数10轮),下面简单讲解 AES-128。

  AES 在加密一组明文的时候,会执行10次轮函数,这个轮函数前9次操作是一样的,只有第10次有所不同,而 AES 的核心即为这个轮函数。

  AES 处理的单位是字节,128位明文分组 P 和 密钥 K 都被分成16个字节,分别记为 P = P0 P1 ... P1 和 K = K0 K1 ... K15。明文分组一般用字节为单位的正方形矩阵描述,称为状态矩阵:

状态矩阵

  假设明文分组 P = abcdefghijklmnop,则状态矩阵为:

状态矩阵

  同理,128位密钥也可以这么表示,矩阵的每一列为1个32位比特字,通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列 W[0] W[1] ... W[43],该序列的前4个元素 W[0] W[1] W[2] W[3] 是原始密钥,用于加密运算中的初始密钥加;后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加:

密钥序列

二、AES 加解密过程

AES 加解密过程

  加解密互相是对方的逆操作。图上 W[0, 3] 是指 W[0] W[1] W[2] W[3] 串联组成的128位密钥。加密的第1轮到第9轮的轮函数一样,包括4个操作:字节代换、行位移、列混合和轮密钥加。最后一轮迭代不执行列混合。另外,在第一轮迭代之前,先将明文和原始密钥进行一次异或加密操作。

三、字节代换

  AES 的字节代换是一个简单的查表工作。AES 定义了一个 S 盒和一个逆 S 盒。状态矩阵中的每一个元素(含1个字节)将字节高4位作为行值,低4位作为列值,取 S 盒中的元素作为输出。而字节代换逆操作也就是查逆 S 盒来变换。

四、行移位

  AES 的行移位也是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节:

行移位

  而行移位的逆操作则是进行相反的移位操作。

五、列混合

  列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵(注意:其运算中涉及的加法和乘法都是定义在 GF(2^8)上的加法和乘法,目的就是为了确保运算结果不会溢出定义域):

列混合
列混合逆操作

六、轮密钥加

  轮密钥加是将128位轮密钥 Ki 同状态矩阵中的数据进行逐位异或操作。如下图,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算:

轮密钥加

  轮密钥加的逆运算同正向的轮密钥加运算完全一致,这是因为异或的逆操作是其自身。轮密钥加非常简单,但却能够影响S数组中的每一位。

七、密钥扩展

  AES 密钥扩展算法的输入值是4个字(16字节),输出值是一个由44个字组成(176字节)的一维线性数组,轮常量取不同值就是为了消除不同轮密钥产生方式上的对称性或相似性。以下伪码描述了这个扩展:

  KeyExpansion(byte key[16], word w[44]){

    word temp

for(i=0; i<4; i++)  //将输入的密钥直接复制到扩展密钥数组的前四个字

      w[i]=word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]);

    temp = w[i-1];

if(i mod 4 == 0)  //对w数组下标为4的倍数的元素采用更复杂的函数来计算

temp = SubWord(RotWord(temp))⊕Rcon[i/4];

w[i] = w[i-4] + temp; //每一个新增的字w[i]依赖于w[i-1] 和w[i-4]

  }

  RotWord的功能是字循环,即使一个字的4个字节循环左移1个字节。

SubWord是利用S盒对输入字的每个字节进行字节代替。

Rcon[i]是轮常量,代表一个字,这个字最右边三个字节总是0,因此字与Rcon异或,其结果只是与该字最左边的那个字节相异或。每一轮的轮常量都不相同,其定义为

Rcon[i] = (RC[i],0,0,0),其中RC[1] = 1,RC[i] = 2•RC[i-1]乘法是定义在域GF(28)上的。

RC[i]的值按照十六进制表示为

RC[i]

八、参考

AES加密

AES加密算法的详细介绍与实现

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

推荐阅读更多精彩内容