首页
登录 | 注册

《图解密码技术》[02] 对称密码


所谓对称密码,是指在加密和解密时使用的都是同一密钥,比如之前提到的恺撒密码。而非对称密码,也称之为公钥密码,是指在加密和解密时使用不同密钥的方式。

本章会主要介绍几种对称密码,如DES、三重DES、AES等,在这之前,要先了解一下什么是比特序列运算。

1、比特序列运算

在这之前,我们先来看一个异或运算(不同取1,相同取0,以下称XOR),假如有二进制数01001100为A,10101010为B,则两者XOR结果为C:
A 0100 1100 
B 1010 1010
C 1110 0110

将结果C和B再进行XOR运算,结果又会变回A:
C 1110 0110
B 1010 1010
A 0100 1100

上面的计算,就和加解密的步骤非常相似:
  • A是明文,B是密钥,C是密文
  • 发送者将A通过密钥B加密得到C,接收者将收到的C通过密钥B解密得到A

而我们知道,计算机的操作对象并不是文字,而是由0和1排列组成的比特序列所以加密的过程,实际上就是将表示明文的比特序列,转换为表示密文的比特序列

由于同一个比特序列进行两次XOR运算后会回到最初的状态,不妨来一个由很多点组成的图像“字母D”,如下图,白点作为0,黑点作为1:
《图解密码技术》[02] 对称密码

由此看到,这里使用的蒙版就是一个比特序列,使用XOR运算将原来的图像进行了掩盖。 当然,这里只是为了形象地表示,实际上在计算机中,图片虽然也是0和1的序列,但并不是按如上使用0和1进行类似像素描点来展示的。但不论如何我们已经知道,数据可以通过一个随机的比特序列进行XOR运算,达到加密的目的。



2、DES

Data Encryption Standard 是1977年美国联邦信息处理标准中采用的一种对称密码,但是随着计算机的进步,DES已经能够在数小时能被暴力破解,所以我们现在也不应该再使用DES了。

DES是一种将64比特的明文加密成64比特的密文的对称密码算法,这里的64比特的单位成为分组。DES的密钥长度为56比特,另外还有7比特用于设置错误检查。由于其基本结构是由Horst Feistel设计,因此也称为Feistel网络

2.1 Feistel网络的加密

Feistel网络中,加密的各个步骤称之为“轮”,整个加密过程就是进行若干次轮循环。
《图解密码技术》[02] 对称密码
 
Feistel网络中,每一轮都需要使用不同的密钥,因为它只是一个局部密钥,所以称为子密钥。加密算法如上图,明文被分为左侧和右侧两部分,轮函数根据右侧数据和子密钥,计算出一串比特序列,用该序列和左侧数据进行XOR运算,作为加密后的左侧数据。

但这样一来右侧根本就没有加密,所以在下一轮需要将左右侧数据对调,再换一个子密钥继续进行加密,说白了,就是把之前没加密的右侧数据也加密。每轮处理32比特,最后一轮结束后不需要对调。

如下图加密96比特明文,即进行三轮加密:
《图解密码技术》[02] 对称密码
 

2.2 Feistel网络的解密

不论轮函数具体是什么,根据XOR运算的特性,Feistel网络的解密,只需要把每轮加密的结果使用相同的子密钥重新运算一次,即可还原为明文,如下图:
《图解密码技术》[02] 对称密码

多轮情况下也是一样的,解密操作只要按照相反的顺序来使用子密钥就可以了:
《图解密码技术》[02] 对称密码
(笔者注:对于上图3-6的解密3轮,还是没理解,脑子转不过来)
 

2.3 Feistel网络的性质

  • 无论使用任何轮函数都可以正确解密
  • 加密和解密可以用完全相同的结构来实现,只是循环次数不同

2.4 三重DES

三重DES就是将DES重复三次得到的一种密码算法,通常缩写为3DES。它的加密机制如下图所示:
《图解密码技术》[02] 对称密码
 
由于DES密钥长度为56比特,所以三重DES的密钥长度则为56*3=168比特。

从上图我们可以看出,3DES并不是进行三次加密,而是进行了加密、解密、加密。这里加入解密是为了兼容原来的DES,将三重加密都使用相同密钥,那么在加密和解密后得到的还是明文,再进行第三次加密,即和原来的DES效果相同。因此,以前DES加密的秘闻,也可以通过3DES解密。

  • 如果所有密钥都相同,则结果和普通的DES等价
  • 如果密钥1、3相同,2不同,则称为DES-EDE2
  • 密钥完全不同,则称为DES-EDE3

3DES的解密过程和加密过程正好相反,是以密钥3、2、1的顺序执行 “解密、加密、解密” 的操作。

尽管3DES目前还被银行等机构使用,但是其处理速度不高,且安全性方面也逐渐显现了一些问题。



3、AES

DES的安全性逐渐出现了一些问题,自然就出现了取代它的 Advanced Encryption Standard,这种加密算法是从众多候选算法中评选出的名为Rijndael的对称密码算法,确定其成为AES。Rijndael没有使用Feistel网络,而是使用了SPN结构。

DES的分组是64比特,而Rijndael的分组则是128比特,也就是16字节,它的算法首先需要逐个字节地进行SubBytes处理,所谓SubBytes,即以每个字节的值(0~255中任意值)为索引,从一张拥有256个值得替换表中找出对应值的处理,也就是说,把一个1字节的值替换为另一个1字节的值,这类似于简单替换密码,不过是256个字母的版本。

SubBytes之后要进行ShiftRows处理,即将SubBytes的输出以字节为单位进行打乱,这种打乱是有规律的。ShiftRows之后进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另一个4字节值。

最后,将MixColumns的输出与轮密钥进行XOR运算(Rijndael算法也是和Feistel一样是采取轮的),即进行AddRoundKey,到这里,Rijndael的一轮就结束了。实际上,在Rijndael中需要重复进行10~14轮计算。这种算法和之前的Feistel相比,因为输入的所有比特都会被加密,而不是每轮只加密一半,所以优势在于加密所需要的轮数更少。

小结一下加密过程就是:
  • SubBytes:16个字节,每个字节进行替换表替换
  • ShiftRows:平移行(有规律平移,如下图,第一个字节移动到对应MixColumns的第一个字节,第二个字节对应第二个MixColumns的第二个字节,第三个对应第三个MixColumns的第三个,以此类推)
  • MixColumns:对每4字节进行比特运算,变成另外的4字节值
  • AddRoundKey:与轮密钥进行XOR运算

《图解密码技术》[02] 对称密码
 
解密过程则分别存在反向运算InvSubBytes、InvShiftRows、InvMixColumns,这是因为Rijndale不像Feistel网络一样可以使用同种结构实现加密和解密。
《图解密码技术》[02] 对称密码
 
在书中提到,Rijndael还没有出现针对性的有效攻击,但因其背后有着严谨的数学结构,从明文到密文的计算过程可以全部用公式表达,意味着能够通过数学方法进行破译,这为新的攻击方式产生了可能。

尽管作者提到DES已能在数小时内破译,但可能涉于篇幅对于DES也没有案例进行破译讲解。所以DES和AES这部分的知识点大概也就这样理解吧,了解就行。核心还是在于对称密码的特点,即加密和解密使用相同的密钥,这里的两个算法都涉及以XOR运算作为基础。



相关文章

  • ERP不规范,同事两行泪
    最近的很多次对外交流,都聊到了ERP建设的话题,并且无一例外的不那么让人省心,回想我这么多年走过的ERP坑坑路,在这里也写下经验和总结,希望能给正在或者即将走上ERP建设路的企业一些思考和帮助. 导读 1.几个瞎眼而普遍的案例 2.ERP的 ...
  • WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法
    WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNormalMaterial MeshNorm ...
  • 计算机基础 01 计算机基础之编程 02 计算机组成原理 03 计算机操作系统 04 编程语言分类 Python解释器 05 Python和Python解释器 06 执行Python程序的两种方式 07 Python集成开发环境 变量 08 ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.076 s.
京ICP备10005923号