貌似博客园的“草稿”支持,而“发布文章”不支持数学公式的markdown语法,如果你想要更好的阅读体验请移步我的Hugo个人博客 一、概述
美国政府在1997年9月12日公开征集更高效更安全的替代DES加密算法,第一轮共有15种算法入选,其中5种算法入围了决赛,分别是MARS,RC6,Rijndael,Serpent和Twofish。又经过3年的验证、评测及公众讨论之后Rijndael算法最终入选。
Rijndael算法之所以最终能够被选为AES的原因是其安全、性能好、效率高、实用灵活。
Rijndael算法支持多种分组及密钥长度,介于128-256之间所有32的倍数均可,最小支持128位,最大256位,而AES标准支持的分组大小固定为128位,密钥长度有3种选择:128位、192位及256位。
二、AES算法的数学基础Rijndaels算法中的许多运算是按字节和4字节的字来定义的。把一个字节看成是在有限域GF(2^8)上的一个元素。有限域(Finite Field)又名伽罗瓦域(Galois field),简单言之就是一个满足特定规则的集合,集合中的元素可以进行加减乘除运算,且运算结果也是属于此集合。
1. AES的基础域是有限域 GF(28)一个字节的全体256种取值构成一个GF(28)
一个GF(2)上的8次既约多项式可生成一个 GF(28)
GF(28)的全体元素构成加法交换群、线性空间。
GF(28)的非零元素构成乘法循环群。
2. AES的GF(28)表示有限域GF(2^8)上的元素有多种表示方法,为了方便,Rijndaels算法采用多项式表示法,下面是与还表示方法相关的几个定义
定义1 : 一个由比特位b7b6b5b4b3b2b1b0 组成的字节可表示成系数为(0, 1)的二进制多项式:b7X7 + b6X6 + b5X5 + b4X4 + b3X3 + b2X2 + b1X + b0
例:字节57=01010111的多项式表示为: $$x^6 + x^4 + x^2 + x + 1$$
定义2 : 在GF(28)上的加法定义为二进制多项式的加法,其系数按位模2加。
例: 57+83=D4等价于 $$(x6+x4+x2+x+1)⊕(x7+x+1)= x7+x6+x4+x2$$
定义3 : 在GF(28)上的乘法定义为二进制多项式的乘积模一个次数为8的不可约多项式 $$m(x) = x8+x4+x^3+x+1$$
其系数的十六进制表示为11B
例: 57×83=C1等价于
\[(x^6+x^4+x^2+x+1)×(x^7+x+1) \ mod \ m (x) = x^{13 }+ x^{11}+x^9+x^8+x^6+x^5+x^4+x^3+1 \ mod \ x^8+x^4+x^3+x+1 = x^7+x^6+1 \]