您现在的位置是:首页 > 学习笔记 > 密码学密码学
对称加密之DES、三重DES、AES
冰山2019-09-08【密码学】人已围观
简介1.DES加密
1.1定义
1.2 DES的加密与解密
2.三重DES
2.1定义
2.2 三重DES的加密与解密
3.AES加密
3.1AES的加密和解密
对称加密: 也称为对称密码, 是指在加密和解码时使用同一秘钥的加密方式。

DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS46.3)。DES一直以来被美国以及其他国家的政府和银行等广泛使用。
RSA公司举办过破泽DES密钥的比赛(DESChallenge),我们可以看一看RSA公司官方公布的比赛结果:
1)1997年的DES Challenge1中用了96天破译密钥
2)1998年的DES ChallengeIl-I中用了41天破译密钥
3)1998年的DES ChallengeII-2中用了56小时破译密钥
4)1999年的DES ChallengeIll中只用了22小时15分钟破译密钥
由于DES的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在我们不应该再使用DES了。
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。
DES是以64比特的明文为一个单位来进行加密的,这个64比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码(blockcipher),DES就是分组密码的一种。
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式(mode)。

DES已经可以在现实的时间内被暴力破解,因此我们需要一种用来替代DES的分组密码,三重DES就是出于这个目的被开发出来的,下面让我们来看看什么是三重DES。
三重DES(triple-DES)是为了增加DES的强度,将DES重复3次所得到的一种密码算法,通常缩写为3DES。
三重DES的加解密机制如图所示:
加密-->解密-->加密, 目的是为了兼容des


明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56比特,因此三重DES的密钥长度就是56×3=168比特, 加上用于错误检测的标志位8x3, 共192bit。
从上图我们可以发现,三重DES并不是进行三次DES加密(加密-->加密-->加密),而是加密-->解密-->加密过程。在加密算法中加人解密操作让人感觉很不可思议,实际上这个方法是IBM公司设计出来的,目的是为了让三重DES能够兼容普通的DES。
当三重DES中所有的密钥都相同时,三重DES也就等同于普通的DES了。这是因为在前两步加密-->解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密。也就是说,三重DES对DES具备向下兼容性。
如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是只使用两个DES密钥),这种三重DES就称为DES-EDE2。EDE表示的是加密(Encryption) -->解密(Decryption)-->加密(Encryption)这个流程。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。
尽管三重DES目前还被银行等机构使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。
AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中选出了一种名为Rijndael的对称密码算法,并将其确定为了AES。
Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设汁的分组密码算法,今后会有越来越多的密码软件支持这种算法。
Rijndael的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256比特三种)。
0123456789ABCDEF
ABCDEFGHIJKLMNOP
和DES—样,AES算法也是由多个轮所构成的,下图展示了每一轮的大致计算步骤。DES使用Feistel网络作为其基本结构,而AES没有使用Feistel网络,而是使用了SPN Rijndael的输人分组为128比特,也就是16字节。
首先,需要逐个字节地对16字节的输入数据进行SubBytes处理。所谓SubBytes,就是以每个字节的值(0~255中的任意值)为索引,从一张拥有256个值的替换表(S-Box)中查找出对应值的处理,也是说,将一个1字节的值替换成另一个1字节的值。
SubBytes之后需要进行ShiftRows处理,即将SubBytes的输出以字节为单位进行打乱处理。从下图的线我们可以看出,这种打乱处理是有规律的。
ShiftRows之后需要进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。
最后,需要将MixColumns的输出与轮密钥进行XOR,即进行AddRoundKey处理。到这里,AES的一轮就结東了。实际上,在AES中需要重复进行10 ~ 14轮计算。
通过上面的结构可以发现输入的所有比特在一轮中都会被加密。和每一轮都只加密一半输人的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytes,ShiftRows和MixColumns可以分别按字节、行和列为单位进行并行计算。

下图展示了AES中一轮的解密过程。从图中可以看出,SubBytes、ShiftRows、MixColumns分别存在反向运算InvSubBytes、InvShiftRows、InvMixColumns,这是因为AES不像Feistel网络一样能够用同一种结构实现加密和解密。

以上为DES、三重DES、AES的加密算法,使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击,这以上的所有算法都只能将一个固定长度的分组进行加密,当需要加密的明文长度超过分组长度时,就需要对密码算法进行迭代。赏

1.DES加密
1.1定义
DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS46.3)。DES一直以来被美国以及其他国家的政府和银行等广泛使用。
RSA公司举办过破泽DES密钥的比赛(DESChallenge),我们可以看一看RSA公司官方公布的比赛结果:
1)1997年的DES Challenge1中用了96天破译密钥
2)1998年的DES ChallengeIl-I中用了41天破译密钥
3)1998年的DES ChallengeII-2中用了56小时破译密钥
4)1999年的DES ChallengeIll中只用了22小时15分钟破译密钥
由于DES的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在我们不应该再使用DES了。
1.2 DES的加密与解密
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。
DES是以64比特的明文为一个单位来进行加密的,这个64比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码(blockcipher),DES就是分组密码的一种。
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式(mode)。

2.三重DES
从上面的RSA举办比赛所破解的时间来看,DES被破解的速度越来越快,其安全性受到威胁。DES已经可以在现实的时间内被暴力破解,因此我们需要一种用来替代DES的分组密码,三重DES就是出于这个目的被开发出来的,下面让我们来看看什么是三重DES。
2.1定义
三重DES(triple-DES)是为了增加DES的强度,将DES重复3次所得到的一种密码算法,通常缩写为3DES。
2.2 三重DES的加密与解密
三重DES的加解密机制如图所示:
加密-->解密-->加密, 目的是为了兼容des


明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56比特,因此三重DES的密钥长度就是56×3=168比特, 加上用于错误检测的标志位8x3, 共192bit。
从上图我们可以发现,三重DES并不是进行三次DES加密(加密-->加密-->加密),而是加密-->解密-->加密过程。在加密算法中加人解密操作让人感觉很不可思议,实际上这个方法是IBM公司设计出来的,目的是为了让三重DES能够兼容普通的DES。
当三重DES中所有的密钥都相同时,三重DES也就等同于普通的DES了。这是因为在前两步加密-->解密之后,得到的就是最初的明文。因此,以前用DES加密的密文,就可以通过这种方式用三重DES来进行解密。也就是说,三重DES对DES具备向下兼容性。
如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是只使用两个DES密钥),这种三重DES就称为DES-EDE2。EDE表示的是加密(Encryption) -->解密(Decryption)-->加密(Encryption)这个流程。密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。
尽管三重DES目前还被银行等机构使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。
3.AES加密
AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中选出了一种名为Rijndael的对称密码算法,并将其确定为了AES。
Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设汁的分组密码算法,今后会有越来越多的密码软件支持这种算法。
Rijndael的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,密钥长度只有128、192和256比特三种)。
3.1AES的加密和解密
0123456789ABCDEF
ABCDEFGHIJKLMNOP
和DES—样,AES算法也是由多个轮所构成的,下图展示了每一轮的大致计算步骤。DES使用Feistel网络作为其基本结构,而AES没有使用Feistel网络,而是使用了SPN Rijndael的输人分组为128比特,也就是16字节。
首先,需要逐个字节地对16字节的输入数据进行SubBytes处理。所谓SubBytes,就是以每个字节的值(0~255中的任意值)为索引,从一张拥有256个值的替换表(S-Box)中查找出对应值的处理,也是说,将一个1字节的值替换成另一个1字节的值。
SubBytes之后需要进行ShiftRows处理,即将SubBytes的输出以字节为单位进行打乱处理。从下图的线我们可以看出,这种打乱处理是有规律的。
ShiftRows之后需要进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。
最后,需要将MixColumns的输出与轮密钥进行XOR,即进行AddRoundKey处理。到这里,AES的一轮就结東了。实际上,在AES中需要重复进行10 ~ 14轮计算。
通过上面的结构可以发现输入的所有比特在一轮中都会被加密。和每一轮都只加密一半输人的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytes,ShiftRows和MixColumns可以分别按字节、行和列为单位进行并行计算。

下图展示了AES中一轮的解密过程。从图中可以看出,SubBytes、ShiftRows、MixColumns分别存在反向运算InvSubBytes、InvShiftRows、InvMixColumns,这是因为AES不像Feistel网络一样能够用同一种结构实现加密和解密。

以上为DES、三重DES、AES的加密算法,使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击,这以上的所有算法都只能将一个固定长度的分组进行加密,当需要加密的明文长度超过分组长度时,就需要对密码算法进行迭代。
微信扫一扫~
支付宝扫一扫~
很赞哦! ()
随机图文
SSL/TLS
1.SSL/TLS 1.1客户端与服务器 1.2 用SSL/TLS承载HTTP 1.3 HTTPS 1.3.1 HTTP和HTTPS 1.3.2 HTTPS优缺点消息认证码
1.消息认证码 1.1 什么是消息认证码 1.2 消息认证码的使用步骤 1.3 HMAC 1.3.1 HMAC介绍 1.3.2 Go中对HMAC的使用 1.4 消息认证码的密钥配送问题 1.5 消息认证码无法解决的问题 1.6 对第三方证明 1.7 防止否认 1.8总结非对称加密
1.非对称加密 1.1 非对称加密通信流程 1.2 RSA 1.2.1 RSA加密 1.2.2 RSA解密 1.3Go语言中实现生成公钥和私钥 1.3.1生成私钥操作流程 1.3.2生成公钥操作流程 1.4Go语言中使用RSA进行加密、解密 1.4.1公钥加密操作步骤 1.4.2私钥解密操作步骤证书
1.证书 1.1 证书的应用场景 1.2 证书标准规范X.509 1.2.1 证书规范 1.2.2 证书格式 1.2.3 CA证书 1.3 公钥基础设施(PKI) 1.3.1 什么是公钥基础设施 1.3.2 PKI的组成要素 1.3.3 各种各样的PKI