浅析加密算法六AES密码

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析加密算法六AES密码相关的知识,希望对你有一定的参考价值。

文章目录

一、简介

AES 算法用来替代原先的DES D a t a E n c r y p t i o n S t a n d a r d Data Encryption Standard DataEncryptionStandard ),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于 2001 2001 2001 11 11 11 26 26 26 日发布于 F I P S P U B 197 FIPS PUB 197 FIPSPUB197 ,并在 2002 2002 2002 5 5 5 26 26 26 日成为有效的标准。 2006 2006 2006 年,高级加密标准已然成为对称密钥加密中最流行的算法之一 。
该算法为比利时密码学家 J o a n D a e m e n 和 V i n c e n t R i j m e n Joan Daemen和Vincent Rijmen JoanDaemenVincentRijmen 所设计,结合两位作者的名字,以 R i j d a e l Rijdael Rijdael 之名命之,投稿高级加密标准的甄选流程。( R i j d a e l Rijdael Rijdael 的发音近于 " R h i n e d o l l Rhine doll Rhinedoll "。)

二、原理

先说明一下无论是明文还是密钥(密钥可以是 192 192 192 256 256 256 位,我们这里只考虑 128 128 128 位的情况)还是密文都是 128 128 128 位一组的,也就是16个字节,那么我们就可以用一个 4 × 4 4\\times 4 4×4 的矩阵来表示这个数据。

大概的流程可以先看一下这个流程图:(建议看完下面的介绍后再回过来看一下)

2.1 明文加密流程

  • 初始变换(其实就是 轮密钥加 操作)
  • 九轮轮函数操作
    • 字节代换( S u b B y t e s SubBytes SubBytes
    • 行位移( S h i f t R o w s ShiftRows ShiftRows
    • 列混淆 ( M i x C o l u m n s MixColumns MixColumns
    • 轮密钥加( A d d R o u n d K e y AddRoundKey AddRoundKey
  • 最终轮运算(实际上是 除去 列混淆的轮操作函数)

如图:

2.2 子密钥生成流程

我们的初始密钥也是 128 128 128 位的,那么我们以 一列 作为一个单位进行变化,每新增一个子密钥,我们所谓的列的数量就增加 4 4 4 于是密钥拓展的核心就是:

  • 如果当前拓展的列 i i i 不是 4 4 4 的倍数,那么第 i i i 列由如下等式确定:(其中 W [ i ] W[i] W[i] 表示的就是第 i i i 列的数据)
    W [ i ] = W [ i − 4 ]   X o r   W [ i − 1 ] W[i]=W[i-4] \\ Xor \\ W[i-1] W[i]=W[i4] Xor W[i1]
  • 如果当前拓展的列 i i i 4 4 4 的倍数,那么第 i i i 列由如下等式确定:
    W [ i ] = W [ i − 4 ]   X o r   T ( W [ i − 1 ] ) W[i]=W[i-4] \\ Xor \\ T(W[i-1]) W[i]=W[i4] Xor T(W[i1])

关于这个 T T T 函数,我们下面仔细讲解

2.3 字节代换

一般来说我们会给一个 16 × 16 16\\times 16 16×16 S S S 盒子,然后我们将每一个字节的前 4 4 4 位(转化为16进制)作为 X X X 轴的坐标,然后后 4 4 4 位作为 Y Y Y 轴的坐标,然后进行一个值的替换,最终我们将所有字节都替换完成即可

这里借用一个图:

2.4 行位移

此时我们需要将每一行数据想象成一个环形

  • 对于第一行,我们保持不变
  • 对于第二行,我们向左循环移动 1 1 1 个字节
  • 对于第三行,我们向左循环移动 2 2 2 个字节
  • 对于第四行,我们向左循环移动 3 3 3 个字节

可以参考下图:

2.5 列混淆(混合)

我们将会给当前的这个矩阵 左乘 一个 指定矩阵 但是注意的是这里的矩阵乘法不是普通意义上的,而是有限域 G F ( 2 8 ) GF(2^8) GF(28) 上的乘法,我们知道矩阵的乘法是左边的行乘上右边的列,那么对于每一个字节而言,都有 8 8 8 位,在有限域的乘法中,乘法变为了多项式乘法,例如:

然后加法变成了异或运算,例如,我们现在左边矩阵第一行的元素都是 a i a_i ai ,右边的矩阵元素都是 b i b_i bi ,顺序如下:

B矩阵同理,那么我们想算出新矩阵 C C C 的第一个字节的值就为:

c 1 = ( a 1 × b 1 ) ⊕ ( a 2 × b 5 ) ⊕ ( a 3 × b 9 ) ⊕ ( a 4 × a 13 ) c_1 = (a_1 \\times b_1) ⊕ (a_2 \\times b_5) ⊕ (a_3 \\times b_9) ⊕ (a_4 \\times a_13) c1=(a1×b1)(a2×b5)(a3×b9)(a4×a13)

2.6 轮密钥加变换

轮密钥加就是直接将一个 指定矩阵 和当前的待加密矩阵进行对每个字节 按位异或 操作即可

大概操作如图:

2.7 密钥拓展中的T函数

T T T 函数由三个部分组成: 字循环字节代换轮常量异或

2.7.1 字循环

2.7.2 字节代换

这里的代换和上面提到的是一样的,就是 S S S 盒子代换,前 4 4 4 位 作为查找的 X X X 坐标,后 4 4 4 位作为查找的 Y Y Y 坐标,然后再盒子(字节表)中查找替换即可

2.7.3 轮常量异或

将前两步的结果同轮常量 R c o n [ j ] Rcon[j] Rcon[j] 进行异或操作,其中的 J J J 表示的是轮数,注意的是这里的轮常量是 给定的 ,这样我们会发现,如果说当前的列数是 4 4 4 的倍数的时候,我们需要进行 两次 列异或操作

三、优缺点

3.1 优点

  • 安全性高,稳定的数学基础、没有算法弱点、算法抗密码分析强度高
  • 性能好,能在多个平台上以较快的速度实现
  • 存储空间小,不能占用大量的存储空间和内存
  • 灵活性、硬件、软件适应性、算法的简单性等
  • 很好的抵抗差分密码分析及线性密码分析的能力。
  • AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特,所以用穷举法是不可能破解的。

3.2 缺点

目前尚未存在对AES 算法完整版的成功攻击,但已经提出对其简化算法的攻击。

四、对比DES

4.1 相同之处

  • 两者的轮函数都是由三部分构成,非线性层、线性混合层、子密钥异或,只不过顺序不同
  • AES的子密钥异或对应于DES S S S 盒子之前的子密钥异或
  • AES的列混淆运算的目的是为了让不同的字节相互影响,而DESF函数的输出于左边一半数据相加也有类似的效果
  • AES的非线性运算是字节代替(ByteSub),对应于DES中的非线性运算 S S S 盒子
  • 行位移运算保证了每一行的字节不仅仅影响其他行对应的字节,而且影响其他行所有的字节,这与 DES 中的置换 I P IP IP 相似

4.2 不同之处

  • AES 的密钥长度( 128 128 128 位、 192 192 192 位、 256 256 256 位)是可变的,而 DES 的密钥固定长度为 56 56 56
  • DES 是面向比特运算的,而 AES 是面向字节运算的
  • AES的加密运算和解密运算不一致,因而加密器不能同时作为解密器,而DES则无此限制

五、代码实现

留坑(但是感觉不会填,后面看情况吧)

以上是关于浅析加密算法六AES密码的主要内容,如果未能解决你的问题,请参考以下文章

AES算法特点简述

密码学基础(二):对称加密

浅析DES与AESRSA三种典型加密算法的比较

浅析AES与RSA的区别

密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)

密码学第三讲-对称加密算法AES原理及实现