密码学基础学习总结-05

 

密码学基础学习总结-05不当鸽子了,继续填坑,这个坑算是持续的时间很长了高级加密标准 AES没错,就是大名鼎鼎鼎AES,高级加密标准,这个是非常重要的算法了,我们日常用的最多的怕就是这个算法了,当然AES还是对称加密算法,也是是块加密算法,但是对比DES,其S盒没那么“神秘”,结构我认为是很优雅的。概要From Wikipedia:高级加密标准(英语:Advanced Encryption ...

密码学基础学习总结-05

不当鸽子了,继续填坑,这个坑算是持续的时间很长了

高级加密标准 AES

没错,就是大名鼎鼎鼎AES,高级加密标准,这个是非常重要的算法了,我们日常用的最多的怕就是这个算法了,当然AES还是对称加密算法,也是是块加密算法,但是对比DES,其S盒没那么“神秘”,结构我认为是很优雅的。

概要

From Wikipedia:

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael为名投稿高级加密标准的甄选流程。(Rijndael的发音近于”Rhine doll”)

特点:

  • 128比特分组,128、192和256位密钥。如果密钥长度是128比特,则轮数是10,如果密钥长度是192比特,则轮数是12,如果密钥长度是256比特,则轮数是14.
  • AES和SPN网络结构非常的相似。每一轮都是用了密钥混合、代换和置换。AES在每一轮包括一个额外的线性变换“MixColumn”
  • AES的操作单元以字节为单位。
  • AES的S盒不是一个表,而是有限域上的操作。

加密算法

首先大致先看一下这个加密的流程,这里给出了我感觉应该还蛮多人用的动画(上课老师也用的是这个)动画下载地址,下面放一个Youtube的地址(B站没找到):

这个下载第二个下来之后就是AES的流程了,制作的还是不错(但是!严格地说,AES和Rijndaell加密法并不完全一样(虽然在实际应用中两者可以互换)),就用这个来大致描述一下这个复杂的过程:

输入

Input

这里给出了AES加密中的输入格式,这里有16个格子,每个格子里面如右下角显示的那样是1byte也就是8位,那么16*8=128,也就是这里的例子是AES-128的算法。

下一步

Input to process

可以看到这里进入了两个流程,下面是加密流程

encryption process

大家查看动画就会发现这里进行了10轮,也就是概要中所描述的,128位下进行10轮,下面就针对每一步进行分析:

AddRoundKey 步骤

在动画中被摆在了最后:

AddRoundKey

就是将现在的加密密钥,与现在状态下的state,对应来做异或操作,这就是第一步,这个地方的cipher key后面还需要讨论如何选择的问题。

SubBytes 步骤

subbyte 步骤

这里可以看到,state中的每一块都会被取出来,在S盒中进行替换,这样自然而然就会问,这个S盒是怎么计算出来的,后面回讨论这个S盒是如何计算出来的。

ShiftRows步骤

shiftrows 步骤

这里大家还是要看一下动画,描述的话就是:在此步骤中,每一行都向左循环位移某个偏移量。在AES中(区块大小128位),第一行维持不变,第二行里的每个字节都向左循环移动一格。同理,第三行及第四行向左循环位移的偏移量就分别是2和3。128位和192比特的区块在此步骤的循环位移的模式相同。经过ShiftRows之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。

MixColumns 步骤

MinColums 步骤

MixColumns步骤中,每一列的四个字节透过线性变换互相结合。每一列的四个元素分别当作的系数,合并即为中的一个多项式,接着将此多项式和一个固定的多项式下相乘。

结果

现在已经得到了一个加密的结果,之后我们会在谈密钥的生成,我们看完这个加密算法当然会产生疑问,难道每一个块我们都要生成一个128位的密钥?加上随机数那可真是大,搞的跟一次一密似的了,当然是有方法的,还有那个S盒是怎么生成的,这些下一篇来解释。