目录
1. Why 3
1.1 EDS的缺点 3
1.2 AES的优点 4
2. What 5
2.1 AES的出现 5
2.2 AES加解密流程图 5
2.3 扩展密钥 6
2.4字节替代 7
2.5 行位移 8
2.6 列混淆 8
2.7 轮密钥加 10
3 How 12
3.1 扩展密钥 12
3..2字节替换 13
3.3 行移动 13
3.4 列混淆 14
3.5 轮密钥加 15
4. 总结 15
1. Why
1.1 EDS的缺点
AES的是美国NIST组织2002年公布的高级加密算法,用来代替DES加密算法,这是为什么呢:
DES作为分组密码的加密单位仅有64比特,对于30年前年的计算机来说还是完全可以胜任的,但是30年后的今天在计算机不断更新换代之后,一张照片都能达到几十M的大小,一次只能加密64bit已经略显不足。
DES的密钥的位数太短,只有56比特,众所周知密钥的长度越长越不容易被破解,在今天ipv4 地址都即将分配完毕,并且需要被ipv6来解决地址饱和的问题,所以DES的密钥长度相对来已经可以被破解。
DES的安全性几乎全部依赖于S盒 ,我们都知道 DES算法主要的操作就是8个S盒的替换,通过复杂的S盒转换来达到加解密,这样造成的结果就是,只要S盒被破解那么所有基于S盒加密的文件都将失去保密性。
DES增加密钥长度, 则系统开销呈指数增长,由于最早设计DES的时候并没有预想到今天的硬件软件能够发展的这么快,所以DES密钥扩充就会造成大量的系统开销,得不偿失,所以迫切的需要一个更高级的加密标准来代替DES。
1.2 AES的优点
AES做为分组密码,分组长度128比特,相对于DES来说,这个长度刚好是俩倍但是难度确实呈指数级的增长,基于现在的就算计运算速度来说,可能需要几亿年的时间,那基本上就相当于无解。
AES三种可选的密钥长度 :128、192、256比特,,相对于DES来说,AES密钥长度并不是固定的,而是可以自己选择适合自己的长度。
AES的S盒能被代数的定义,,相对于DES来说,AES的S盒里面存在着非线性的变换,这就给破解的难度提高了几个级别。
AES 算法硬件实现的速度大约是软件实现的3 倍,给予以上的种种好处DES被AES所取代。
2. What
2.1 AES的出现
1997年,NIST开始了遴选DES替代者——AES的工作。要求AES有128比特的分组长度,并支持128、192和256比特的密钥长度,而且能在全世界免费使用
1998年从提交的21个算法中选出15个作为候选
1999年5个算法入围了最后决赛
2000年评选出最终结果Rijndael既AES, 2002年正式使用
2.2 AES加解密流程图
2.3 扩展密钥
这里说的是128bit的密钥: 主要是把初始的16字节划分为4个字,即一个字代表四个字节,然后把经过10轮扩展为44个字的扩展密钥。
密钥扩展图
AES加密过程涉及到4种操作 :字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)轮密钥加(AddRoundKey);解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中16字节的明文、密文和轮密钥都以一个4x4的矩阵表示。
2.4 字节替代
字节的替换主要根据一系列在域FG(2^8)的线性,非线性操作从而得到的一张16*16的表,根据一个字节的前四位(行)后四位(列)在表中找到替换字节进行替换。如下图所示 0x00 会被表中的0x63 所代替。解密过程也是一样的操作,只是需要一个该表的逆表即可。
2.5 行位移
行位移其实很简单,加密就是第一行向左移动0个位置,第二行向左移动1位,,第三行向左移动2位,第四行向左移动3位。解密就是向右移动,第三行向右移动3位,…… 第二行向右移动一位,第一行不移动。如下图
行移动
2.6 列混淆
补充域的概念在域GF(2^8)上做加法和乘法运算规则:
加法:各个值在相加时使用的是模2加法(相当于是异或运算)
乘法:将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011
乘法对加法满足分配率 例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,⊕(02·S0,0) ⊕(04·S0,0)
加密列混淆就是把明文的矩阵,左乘一个给定的矩阵,从而对列实现线性转变,并且乘法和加法都是在域GF(2^8)上进行的,,所以一定要使用上面提到的域的运算而不是平常的运算。解密裂列混淆其实乘以另外一个矩阵只是数值不同。下面的图是一个例子:
2.7 轮密钥加
扩展密钥只参与了这一步。根据当前加密的轮数用,扩展密钥w[]中4个字与矩阵的 4 个列进行按位异或, 一定要注意是按列亦或。
因为一个数和自己亦或后是0,所以加密和解密的亦或操作一样不需要做出改变。
3 How
3.1 扩展密钥
3..2 字节替换
逆运算也一样,只是把sSbox换成相对应的逆矩。
3.3 行移动
行的逆操作 只是一句代码不一样:
3.4 列混淆
加密列混淆
解密列混淆
3.5 轮密钥加
4. 总结
看书听讲粘贴复制的代码,代码也可以运行,但是有些东西不自己编写程序的话是体会不到的,只有自己亲自经历才会知道,别人成果的不易。我觉得现在软件行业为何工作不好找,工资低都是有原因的,你自己写的东西太少,只会粘贴复制,那你的工作就谁都能做,那你就不可能拿到高工资,所以我觉得学习一门课程就要爱一门课程,自己动手实现一个算法,肯定会有自己的收获我觉的。通过这次编程,我对基本的数据类型及其位操作、进制转换、各种文件的读取和写入都有了更进一步的了解,我相信如果以后我遇到类似的问题我自己就可以解决。最后谢谢蔡老师,我狠喜欢这种上课方式!
目录
1. Why. 3
1.1 EDS的缺点... 3
1.2 AES的优点... 4
2. What5
2.1 AES的出现... 5
2.2AES加解密流程图... 5
2.3扩展密钥... 6
2.4字节替代... 7
2.5行位移... 8
2.6列混淆... 8
2.7轮密钥加... 10
3 How.. 12
3.1 扩展密钥... 12
3..2字节替换... 13
3.3 行移动... 13
3.4 列混淆... 14
3.5轮密钥加... 15
4. 总结... 15
Ø AES的是美国NIST组织2002年公布的高级加密算法,用来代替DES加密算法,这是为什么呢:
Ø DES作为分组密码的加密单位仅有64比特,对于30年前年的计算机来说还是完全可以胜任的,但是30年后的今天在计算机不断更新换代之后,一张照片都能达到几十M的大小,一次只能加密64bit已经略显不足。
Ø DES的密钥的位数太短,只有56比特,众所周知密钥的长度越长越不容易被破解,在今天ipv4 地址都即将分配完毕,并且需要被ipv6来解决地址饱和的问题,所以DES的密钥长度相对来已经可以被破解。
Ø DES的安全性几乎全部依赖于S盒 ,我们都知道 DES算法主要的操作就是8个S盒的替换,通过复杂的S盒转换来达到加解密,这样造成的结果就是,只要S盒被破解那么所有基于S盒加密的文件都将失去保密性。
Ø DES增加密钥长度, 则系统开销呈指数增长,由于最早设计DES的时候并没有预想到今天的硬件软件能够发展的这么快,所以DES密钥扩充就会造成大量的系统开销,得不偿失,所以迫切的需要一个更高级的加密标准来代替DES。
Ø AES做为分组密码,分组长度128比特,相对于DES来说,这个长度刚好是俩倍但是难度确实呈指数级的增长,基于现在的就算计运算速度来说,可能需要几亿年的时间,那基本上就相当于无解。
Ø AES三种可选的密钥长度 :128、192、256比特,,相对于DES来说,AES密钥长度并不是固定的,而是可以自己选择适合自己的长度。
Ø AES的S盒能被代数的定义,,相对于DES来说,AES的S盒里面存在着非线性的变换,这就给破解的难度提高了几个级别。
Ø AES 算法硬件实现的速度大约是软件实现的3 倍,给予以上的种种好处DES被AES所取代。
Ø 1997年,NIST开始了遴选DES替代者——AES的工作。要求AES有128比特的分组长度,并支持128、192和256比特的密钥长度,而且能在全世界免费使用
Ø 1998年从提交的21个算法中选出15个作为候选
Ø 1999年5个算法入围了最后决赛
Ø 2000年评选出最终结果Rijndael既AES, 2002年正式使用
这里说的是128bit的密钥: 主要是把初始的16字节划分为4个字,即一个字代表四个字节,然后把经过10轮扩展为44个字的扩展密钥。
密钥扩展图
AES加密过程涉及到4种操作 :字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)轮密钥加(AddRoundKey);解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中16字节的明文、密文和轮密钥都以一个4x4的矩阵表示。
字节的替换主要根据一系列在域FG(2^8)的线性,非线性操作从而得到的一张16*16的表,根据一个字节的前四位(行)后四位(列)在表中找到替换字节进行替换。如下图所示 0x00 会被表中的0x63 所代替。解密过程也是一样的操作,只是需要一个该表的逆表即可。
行位移其实很简单,加密就是第一行向左移动0个位置,第二行向左移动1位,,第三行向左移动2位,第四行向左移动3位。解密就是向右移动,第三行向右移动3位,…… 第二行向右移动一位,第一行不移动。如下图
行移动
补充域的概念在域GF(2^8)上做加法和乘法运算规则:
Ø 加法:各个值在相加时使用的是模2加法(相当于是异或运算)
Ø 乘法:将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011
Ø 乘法对加法满足分配率 例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,⊕(02·S0,0) ⊕(04·S0,0)
加密列混淆就是把明文的矩阵,左乘一个给定的矩阵,从而对列实现线性转变,并且乘法和加法都是在域GF(2^8)上进行的,,所以一定要使用上面提到的域的运算而不是平常的运算。解密裂列混淆其实乘以另外一个矩阵只是数值不同。下面的图是一个例子:
扩展密钥只参与了这一步。根据当前加密的轮数用,扩展密钥w[]中4个字与矩阵的 4 个列进行按位异或, 一定要注意是按列亦或。
因为一个数和自己亦或后是0,所以加密和解密的亦或操作一样不需要做出改变。
逆运算也一样,只是把sSbox换成相对应的逆矩。
行的逆操作 只是一句代码不一样:
加密列混淆
解密列混淆
看书听讲粘贴复制的代码,代码也可以运行,但是有些东西不自己编写程序的话是体会不到的,只有自己亲自经历才会知道,别人成果的不易。我觉得现在软件行业为何工作不好找,工资低都是有原因的,你自己写的东西太少,只会粘贴复制,那你的工作就谁都能做,那你就不可能拿到高工资,所以我觉得学习一门课程就要爱一门课程,自己动手实现一个算法,肯定会有自己的收获我觉的。通过这次编程,我对基本的数据类型及其位操作、进制转换、各种文件的读取和写入都有了更进一步的了解,我相信如果以后我遇到类似的问题我自己就可以解决。最后谢谢蔡老师,我狠喜欢这种上课方式!