【网络安全技术】对称密码体制、DES、AES

一、一些基础概念

1、分组密码[Block Encryption]和流密码[Stream Encryption]

分组密码就是一组一组的加密,流密码就是对每一bit加密。

2、分组密码加密的基本操作代换(Substitution)与置换(Transposition)

3、混淆(Confusion)与扩散(Diffusion)

混淆和扩散都是说密文中一位的改变应该影响原文中多个位的值。

混淆强调的是这种改变应该是不可预测的,扩散强调的是这种改变应该是均匀的分布在所有的原文中的。

二、Feistel密码结构

参数:

1、分组大小[Block size]:分组越大安全性越高,但是加解密速度会降低。

2、密钥大小[Key size]:密钥越长安全性越高,但是加解密速度会降低。

3、迭代轮数[Number of rounds]

4、子密钥产生算法[Sub-key generation algorithm]

5、轮函数[Round function]

三、DES

1、加密前会对明文进行分组,每一组长64,对每一组跑des加密,然后串起来就是整个的密文,密钥是64位,但实际的只有56位,有8位用于奇偶校验。

2、整体流程

IP置换就是把这64位放进一个置换盒里重新排列

3、16轮迭代

每轮都会按这个规则迭代,首先右边的32bit直接挪到左边,然后右边的要进一个置换(E表),32位会被扩散成48位。

然后再和子密钥去做代换(S盒),子密钥怎么来的呢,一开始是56bit密钥,一开始先要做一次置换(PC-1),然后再分成两个28bit,然后分别做循环左移位,什么叫循环左移位,就是每轮移完位保留移完位的结果,下一轮的移位从这个结果开始。移位完左右并起来,进压缩置换盒(PC-2),从56位变成48位。

这下有了48位从E表出来的,和48位的sub密钥,做一次异或,得到48位,出来分成8组,每组6位,进8个S盒。

这是一个s盒的例子,假如进S盒的是010110,首位和末位决定盒的行,中间四位决定s盒的列,那么这个输出就是第0行的第11列,出来就是12(十进制),换成二进制4bit输出就是1100.

48位进S盒,出来是8*4=32位,这32位再做一次置换(P盒),然后再和左边的32bit做一次异或,写进右边。

这样一轮就结束了。

等16轮结束之后再对这64bit做ip逆置换,就是密文。

四、DES改进

56bit密钥的DES已经被认为是不够安全的了,有几种DES的改进。

1、双重DES

DES的密钥空间是2的56次方,那么把同样的明文进行两次DES,不就有两个密钥,那要破解不就得穷举2的112次方种密钥情况吗。理论上是这样的,但是双重DES怕一种叫做途中相遇攻击的攻击。

已知明密文对,可以先穷举2的56次方个密钥,对明文加密,然后存起来这2的56次方个结果,然后再用这2的56次方个密钥对密文解密,如果加密的结果和解密的结果一样,那么密钥就出来了,这样理论只需要2^56+2^56次,也就是2^57次。密钥空间相当于只翻了一倍,没有达到预期的效果。

2、三重DES(TDEA)

加密:使用K1加密,使用K2解密,使用K3加密,得出密文。

解密:使用K3解密,使用K2加密,使用K1解密,得出明文。

这样密钥空间就是2^168,基本不可能破解了,但是加密解密的成本太高。

五、AES

不是feistal结构。分组大小只能是128bit,但是密钥大小可以是128、192、256.

这里以128bit密钥为例。先把明文和密钥都列优先写成byte矩阵形式

1、首先128bit明文先和密钥做异或。

2、进入循环,每轮循环有四件事,最后一轮循环只有三件事,没有列混合

1)byte代换:

拿上面的结果,对每一byte进行拆分,左4bit和右4bit,各为一个16以内的二进制数,再去一个16*16的代换矩阵里找结果,这里的例子,0100 0111,就是4和7,那么就直接拿代换矩阵的第4行第7列的byte替换。

2)行移位:

很简单,就是对刚才的结果,每行左移,第几行就左移几位

3)列混合:

大概是左乘了一个规定好的矩阵,这个矩阵如下,

但不同的是,这个矩阵乘法是在field GF(2^8)里进行的,所以不大一样,具体规则如下。

这个矩阵只有1、2、3,矩阵乘法的原则和原来还是大差不差,左矩阵的行乘右矩阵的列,再相加,只不过这里的加变成了二进制按位异或,这里的乘规则如下

乘1就相当于没乘;

乘2:

分情况,如果被乘数首位为0,那么就左移一位末位补0,如果被乘数首位为1,那么就左移一位末位补0,然后再和00011011异或。

乘3:就是2乘被乘数,再和被乘数做异或,就相当于做了个分配律。

4)轮密钥加:

上一轮得到的结果在和一个轮密钥矩阵做异或,这个轮密钥矩阵是一开始的密钥矩阵扩展来的,扩展规则如下。

首先明确,如果要进行10轮异或,那么就需要10张密钥矩阵,每张密钥矩阵都由4列字组成,1字=4byte。所以这也解释了,为什么128位密钥扩展之后要176byte,一张矩阵16byte,初始的矩阵一上来就用过了,所以加上后续10轮还需要用的,就是176byte。

然后,如何扩展,一列一列扩展,这列扩展的算法取决于该列列数是否为初始矩阵列数的倍数,以128位密钥为例,初始密钥矩阵列数位4列,那么在扩展时,就要考虑该扩展列是否为4的倍数。例如,一开始已经有了0、1、2、3列,该扩展第4列了,那么这个就是4的倍数。

算法如下,

如果不是4的倍数

如果是4的倍数

就是说,不是4的倍数的话,直接拿这两列异或就好,是的话还要对i-1列做一个T函数变换之后再异或。

T函数分三步:

a.字循环:将该列的字左移一个字节,例如原来09 cf 4f 3c,左移之后就变成cf 4f 3c 09。

b.字节代换:把该列的每个字节按照先前代换的逻辑,去那个16*16的S盒代换了去。

c.轮常量异或:要在和轮常量矩阵里的第j列做异或,j是轮数,从1开始。

这三步走完之后就是过了T的了,正常和第i-4列异或就是新列了。

至此,AES步骤就结束了

对着这张图总结一下,一开始上来先和密钥异或,然后走9轮4步骤拉满的,最后一轮是只有三步,没有列混合的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值