AES加密

背景

全称Advanced Encryption Standard,即高级加密标准。又称Rijndael加密法。是一个用来替换DES的加密算法,在全世界已经广泛使用,官方文档

算法简述

AES算法支持的秘钥长度和明文块位128~256位(32位为步长),常用的组合是128位明文块和128位密文;128位明文块和256位密文。(严格地说,AES和Rijndael加密法并不完全一样,因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度均可以是128,192或256比特。)

AES密码使用了替换与置换思想,秘钥和明文块的长度决定了需要运行的轮数,最少是10轮,即秘钥和明文块都是128位。算法分为以下两个步骤

  1. 一次性初始化操作
  2. 轮次操作

本文以128位秘钥和128位明文块为标准介绍

一次性初始化操作

扩展秘钥

输入的秘钥长度为16字节,需要扩展到11个4*4的矩阵中。也就是说将16字节秘钥扩展为176字节。

秘钥扩展可以表示为下图

扩展出来的第一个矩阵就是输入矩阵,将输入矩阵每4字节记为一个字。以K0=a,k1=b,k2=c,k3=d为例,w0=abcd,依次类推。接着记w0,w1,w2,w3位w数组。用w数组扩展出剩余40个w。剩余40个w分别记为w4,w5,…,w43。其中每个wi都和w(i-1)以及w(i-4)有关,基本规则如下:

若i不是4的倍数,则wi = W(i-1) XOR w(i-4)。若i是4的倍数,wi = T(w(i-1)) XOR w(i-4).函数T流程如下图:

T函数分为3部分:旋转,代换,常量异或:

  1. 旋转:将一个字中的四个字节循环左移1字节,如abcd变为bcda
  2. 代换:使用s盒代换,把每个字节的高四位作为行值,第四位作为列值在S盒寻找输出,S盒如下

  1. 常量异或:有10个常量,每轮取一个进行异或,这几个常量如下:
轮数 1 2 3 4 5 6 7 8 9 10
常量值 01 02 04 08 10 20 40 80 1B 36

简单示例

假设初始秘钥分别为:00 01 02 ... 0F,则
w0 = 00 01 02 03
w1 = 04 05 06 07
w2 = 08 09 0A 0B
w3 = 0C 0D 0E 0F

为了计算w4,先计算T(w3):
旋转得:0D 0E 0F 0C
S盒替换得:D7 AB 76 FE
常量异或得:D6 AB 76 FE
将T函数输出再与w0异或得
w4 = D6 AA 72 FD

w5 = w4 XOR w1
w6 = w5 XOR w2
w7 = w6 XOR w3

明文初始化

由于明文块也是128位,即16字节,左移也将这16个字节写位4*4的矩阵,列优先。之后与第一个秘钥对应字节进行异或运算。

轮次运算

每一轮依次有以下几步

s盒替换

就是将输入的矩阵每个元素进行s盒替换

旋转

将矩阵第i行循环左移i个字节,如下列

1   5   9   13
2   6   10  14
3   7   11  15
4   8   12  16
旋转后
1   5   9   13
6   10  14  2
11  15  3   7
16  4   8   12

混合列操作

将上一步的结果与常量矩阵相乘,运算规则如下

有常量矩阵
    2   3   1   1
A = 1   2   3   1
    1   1   2   3
    3   1   1   2
有输入矩阵
    b1  b5  b9  b13
b = b2  b6  b10 b14
    b3  b7  b11 b15
    b4  b8  b12 b16
则A*b结果的第一列如下
c1 = (b1*2)XOR(b2*3)XOR(b3*1)XOR(b4*1)
c1 = (b1*1)XOR(b2*2)XOR(b3*3)XOR(b4*1)
c1 = (b1*1)XOR(b2*1)XOR(b3*2)XOR(b4*3)
c1 = (b1*3)XOR(b2*1)XOR(b3*1)XOR(b4*2)

实际上数学中的矩阵相乘类似,只不过相加改为了异或

结果还是一个4*4矩阵

秘钥异或

将上步输出的矩阵与该轮对应的秘钥进行异或运算

总体流程如下(注意最后一轮没有列混合运算)

解密流程也如上图所示,就是反过来,其中s盒的逆如下

解密的逆列混淆用的是如下常数矩阵去乘以密文矩阵:

0E  0B  0D  09
09  0E  0B  0D
0D  09  0E  0B
0B  0D  09  0E

题图来自unsplash:https://unsplash.com/photos/ARVFsI-32Uk