数字14 AES高级加密协议的动机阐述

最近在学习AES高级加密协议,我想写一篇文章阐述AES的各个操作的动机,也以此督促自己多多思考,多记录。

       如果不清楚AES的操作是什么。

可以参考这个博文,或者到最后我简单的说明。

AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes

AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客_aes

      

    AES的动机

我想阐述的是,AES的每个操作的理由,即为什么。

参考文档:《密码编码学与网络安全 原理与实践》第6版 ,斯托林斯著

       首先,我想以自己的见解举一个例子。

       假设我想要传输一段数字0101,我希望加密它,不让接收者以外的人识别到它,于是,我创造了一个密钥,我设置其等于1001,我对数字0101用密钥对它做一个异或运算,结果是,0101^1001=1100,于是,在传输通道上,它就是1100,就算有一个小偷得到了它,看到的也是1100而不是0101,这就起到了加密的作用。

这时有个问题,接收者得到的也是1100,但是我想给他看的是0101,怎么办呢?于是我要告诉接收者,密钥是0101,运算是异或的反向操作,让接收者自己做一个反异或运算,反异或其实就是异或,1100^1001=0101,这就得到了我想告诉它的数字。

到这里,其实可以知道,密钥是有加密作用的,然后,为什么使用异或运算呢?其实其他运算也可以,但是要基本符合2个要求,1是能够加密,2是存在逆运算。

为了进一步保证数据的安全,我希望在加密之前对数据0101做一些操作,这些操作没有加密的效果,但是会让数据更加混乱,例如,我将0101通过一个映射表,映射到另外一个数字上,到了接收端,再通过这个映射表的反向,映射回来。假设在这个表里0101映射为1011,再进行以上的运算,1011^1001=0010,那么,传输线上呈现的数据就是0010,这将会更进一步的增强加密的效果。

AES的轮密钥加,就是具有加密作用的操作。而其他几个操作,字节代换、行移位、列混合均是具有混淆效果的操作。两者相互结合,有效地增强加密效果。

字节代换

       字节代换,主要的作用是实现一种数据映射,他本身不具备加密的功能,其实整个AES就只有轮密钥加这一步骤有加密功能,其他步骤都是用于混淆数据,他们和 “轮密钥加“共同作用,增加解密的难度,是一种1+1>2的抽象过程。

       字节代换的核心是S盒映射,S盒的数据在AES是固定的,那么,这个S盒是怎么来的呢?为什么选择这样一个S盒呢?他的这种映射可以实现混淆吗?效果怎么样?

S盒的构造分为3步

第一个步骤是初始化操作

第二个步骤。

当我们考虑一种可以用于加密的映射,我们会想到基本的几点,如下:

       1、这一映射要在一定范围内。(0~(2^8)-1)。

2、每个数都要有映射结果。

3、每个数的映射结果是唯一的。

       这3点,其实是可以理解的,比如第3点,如果2个明文字节映射到同一个数据,那么其逆向的映射是不能够实现的,因为无法分辨逆向要映射到哪一个明文字节。前2点是映射的基础,肯定是要存在映射才能映射。

然后,再考虑更深层的条件。

1、映射间距尽量大

2、非线性尽量高

3、能够简单高效的被计算

比如,如果一个映射是(1->4,2->3,3->2,4->1)我们可以直观的感受到它是一种很有规律的映射,线性度高,我们可以认为这种映射不够混乱。

如果是(1->2,2->4,3->1,4->3),我们就会觉得混乱程度相对高一点。

为了找到一种混乱程度较好的映射,有文章专门进行了讨论。

 《Differentially-uniform-mappings-for-cryptography》这篇文章最终找到的是域GF(2^8)的乘法逆运算映射,也量化了它的性能。说明了乘法逆运算的最小相关度只有2^(-3),这是很小的。

S盒的第2步就是运用了这个映射关系。至于为什么乘法逆的映射为什么混乱程度高,具体参考文章内容。

再考虑第3个步骤,第3个步骤是让字节数据的每个位还要进行那一长串公式的运算

那么,为什么要这么做呢?为什么是这样一个公式呢?选择这个公式的理由有2个,这是我找到了作者原文

This affine transformation has no impact on the nonlinearity properties, but if properly chosen, allows SRD to have a complex algebraic expression. We have chosen an affine transformation that has a very simple description per se, but a complicated algebraic expression if combined with the transformation Inv8. Because this still leaves many possibilities for the choice of Aff8, we additionally imposed the restriction that SRD should

have no fixed points and no opposite fixed points:

分为2个点:

1、本身是简单的表达式,但是和乘法逆结合起来会变成复杂的代数运算,增加破解的难度。

2、由于满足前一条的映射方式还是有很多,于是多加了一个条件,就是让S-box表没有不动点,也没有反不动点,比如00不能对应00本身。(00的乘法逆运算结果是00本身)

以上是我的观点,书籍上的观点如下:

行移位

动机:增加混淆。

工作原理:由于明文和密钥计算都是以列为单位计算,因此期望混淆计算,行移位能够让一个列的元素分散到各个列。

以上是我的观点,书中的观点是:

列混合

动机:增加混淆。(基于码字间的最大距离的线性编码)

工作原理:矩阵乘法。固定矩阵如下

为什么设计了这样一个固定矩阵让它跟数据进行矩阵乘法呢?根据作者的描述如下

      

固定矩阵这样做的目的是,为了良好的扩散力,假设有一个列,只有一个非零字节,[0 0 0 1](它是个col)经过列混淆之后,会出现4个非零字节,也就是[1 1 3 2]。定义非零字节数量branch number=1+4=5,该矩阵就是为了设计得尽量让branch number足够大。

如果有有一个列,有2个非零字节,经过运算后,至少有3个非零字节。

例如[0 0 1 1 ],经过运算后是[0 2 1 3]。

依照这样的原则设计这一固定矩阵。

另外,还考虑到实现难度,只用1、2、3的固定矩阵实现起来相对简单。综合以上考虑,就设计了一个这样的固定矩阵。

书上的观点:

轮密钥加

密钥扩展

       密钥扩展的动机,其实可以参考以上操作去推导。

整体考虑

    AES是什么?

我在这里只进行简单的说明,AES是advanced encryption standard,是一种加密的方式。通常用来在数据传输之前进行加密,以达到保护数据安全性的作用。

      

       AES有5个主要步骤,分别为

n  密钥扩展

n  字节代换

n  行移位

n  列混合

n  轮密钥加

看一下AES的执行步骤

从图上还是挺直观可以看出整个步骤的。

其中5个主要步骤做的事情,简单描述如下。

密钥扩展:加密过程中,轮密钥加一共有11次,加密过程每一次的密钥都不一样,我们只需要输入一个密钥,然后用这个密钥扩展出10个密钥,这样加起来就有11个密钥了。扩展的方式如下

其中,T函数又分为3个步骤

a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0]。

b.字节代换:对字循环的结果使用S盒进行字节代换。

c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。

轮常量Rcon[j]是一个字,其值见下表。

字节代换:使用一个数据列表成为S盒,S盒是一个固定的数据表格,将横纵坐标对应的数据替换为表格中的数据,例如,S盒中第0行第0列的数字是0x63,那么当数据的其中一个字节为0x00时,经过字节代换后,它就变成了0x63。

行移位:将数据的第1行左移0个字节,第2行左移1个字节,第3行左移2个字节,第4行左移3个字节。

列混合:将数据和一个固定矩阵进行矩阵乘法。固定矩阵为

轮密钥加:将数据和当前轮的密钥进行异或。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值