第一章 环游密码世界
1.3 对称密码和公钥密码
1.3.1 密码算法
加密、解密的算法合在一起称为密码算法
1.3.3 对称密码与公钥密码
- 对称密码:加密和解密时使用同一个秘钥
- 公钥密码:也是非对称密码,加密和解密时使用不同的秘钥
第三章 对称密码
3.3 从文字密码到比特序列密码
3.3.1 编码
将现实世界中的东西映射为比特序列的操作称为编码。
子密钥指的是本轮加密使用的密钥,在 Feistel 络中,每一轮都需要使用一个不同的子密钥。
一轮的具体步骤如下:
- 将输入的数据等分为左右2侧
- 将输入的右侧直接发送到输出的右侧
- 将输入的右侧发送到轮函数
- 轮函数根据右侧数据和子密钥计算出一串看上去是随机的比特序列
- 将步骤4中得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧
从这个过程中可以发现,一轮后右侧的数据没有加密,因此在每轮之间需要将左侧和右侧的数据对调。
如下展示了一个三层的 Feistel 络:
有多轮的情况也一样,解密时只要按照相反的顺序来使用子密钥就可以了。
明文经过三重DES处理才能变成最后的密文,DES秘钥的长度实际上是56比特,因此三重DES的秘钥长度就是168比特。
三重DES的过程为什么是:加密 -> 解密 -> 加密 呢是为了兼容普通的DES加密,如果三重的秘钥都相同,那么三重DES也就等同于普通DES了。
3.7 AES的选定过程
3.7.1 什么是AES
AES:Advanced Encryption Standard,是取代其前任标准(DES)而成为新标准的一种对称加密算法。
全世界提供了多个对称密码算法作为AES的候选,最终从这些候选中选出了一种名为 Rijndael 的对称加密算法。
3.8 Rijndael
Rijndael 也是分组密码。
3.8.2 Rijndael的加密解密
Rijndael 算法也是多轮的,但每一轮中,Rijndael使用了SPN结构。
加密
每一轮中的步骤大致如下:
其中的 InvMixColumns, InvShiftRows, InvSubBytes 分别为 MixColumns, ShiftRows,SubBytes 的反向运算。
第四章 分组密码的模式–分组密码是如何迭代的
在第三章介绍的DES和AES都属于分组密码,它们只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方式就称为分组密码的 模式。
4.2 分组密码的模式
4.2.1 分组密码与流密码
- 分组密码:每次只能处理特定长度的一块数据的一类密码算法,一个分组的比特数就称为分组长度。
- 流密码:对数据流进行连续处理的一类密码算法,流密码中一般以1比特,8比特或32比特为单位进行加密和解密。
4.2.2 什么是模式
分组密码的主要模式有以下5种:
- ECB模式:Electronic CodeBook Mode(电子密码本模式)
- CBC模式:Cipher Block Chaining mode(密码分组链接模式)
- CFB模式:Cipher FeedBack mode(密文反馈模式)
- OFB模式:Output FeedBack mode(输出反馈模式)
- CTR模式:CounTer mode(计数器模式)
4.2.3 明文分组与密文分组
- 明文分组:分组加密算法中作为加密对象的明文
- 密文分组:使用分组密码算法将明文分组加密之后所生成的密文
4.2.4 主动攻击者 Mallory
窃听者Eve只能被动地进行窃听,而主动攻击者则可以主动介入发送者和接收者之间的通信过程,进行阻碍通信或者篡改密文等活动。
4.3 ECB模式
将明文分组直接加密的方式就是ECB模式,这种模式非常简单,但是因为存在弱点因此一般不会使用。
4.3.1 什么是ECB模式
在ECB模式中,明文分组加密之后的结果将直接成为密文分组。
使用ECB模式时,相同的明文分组会被转化为相同的密文分组,也就是说,我们可以将其理解为一个巨大的 明文分组 -> 密文分组 的对应表,因此ECB模式被称为电子密码本模式。
当最后一个明文分组的长度小于分组长度时,需要用一些特定的数据进行填充。
4.3.3 对ECB模式的攻击
假设攻击者Mallory能够改变密文分组的顺序,当接收者对密文进行解密时,由于密文分组顺序被改变,相应的明文分组顺序也会被改变,即Mallory无需破译密码即可操纵明文。
假设分组长度为128比特,某银行的转账请求数据由以下3个分组构成:
- 分组1:付款人的银行账
- 分组2:收款人的银行账
- 分组3:转账金额
我们可制作一个从 A-5374 账 向 B-6671 账 转账1亿元的转账请求,用16进制数据表示如下:
Mallory只需将分组1和分组2的密文调换一下顺序,即可将转账请求篡改成 从 B-6671 账 向 A-5374 账 转账1亿元。
Mallory对密文进行的篡改,可以通过第8章介绍的消息认证码检测出来,不过如果使用其他模式,这种攻击从一开始就是不可能实现的。
4.4 CBC模式
4.4.1 什么是CBC模式
CBC模式是将前一个密文分组与当前明文分组的内容混合起来(XOR运算)进行加密。
4.7 CTR模式
CTR模式是一种将逐次累加的计数器进行加密来生成密钥流的流密码。
4.7.1 计数器的生成方法
每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值,当分组长度为128比特时,计数器的初始值可能是像下面的形式:
4.8 应该使用哪种模式
第五章 公钥密码
5.3 密钥配送问题
5.3.1 什么是密钥配送问题
Alice给Bob发邮件时,不发送密钥,Bob无法解密,发送密钥,Eve也可以解密。
解决密钥配送问题的方法:
- 事先共享密钥
- 通过密钥分配中心
- 通过 Diffie-Hellman 密钥交换
- 通过公钥密码
5.3.3 密钥分配中心
- Alice向密钥分配中心发出想要和Bob通信的请求
- 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice和Bob本次通信中临时使用的密钥
- 密钥分配中心从数据库中取出Alice和Bob的密钥
- 密钥分配中心用Alice的密钥加密会话密钥,发送给Alice;用Bob的密钥加密会话密钥,发送给Bob
- Alice用自己的密钥解密,得到会话密钥
- Alice用会话密钥加密邮件,发送给Bob
- Bob对来自分配中心的消息进行解密(用自己的密钥),得到会话密钥
- Bob用会话密钥对Alice的邮件进行解密
- Alice和Bob删除会话密钥
5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题
这个在第11章中详述
5.3.5 公钥密码
发送者使用公钥密码进行加密,接收者使用私钥进行解密。
5.4 公钥密码
5.4.1 什么是公钥密码
公钥密码中,加密密钥一般是公开的,但是解密密钥一定不能公开。
5.4.3 公钥通信的流程
RSA的密文是对代表明文的数字的E次方求mod N的结果。
E和N是RSA加密的密钥,也就是说,E和N的组合就是公钥,一般写成公钥是(E, N)。
5.6.3 RSA解密
RSA的解密可以用下面的公式来表达:
5.7 对RSA的攻击
5.7.4 中间人攻击
Mallory混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者。
Alice准备向Bob发送一封邮件:
- Alice向Bob索取公钥
- Mallory拦截了Bob的邮件,使其无法发送给Alice。Mallory把Bob的公钥保存起来,然后把自己伪装成Bob,把自己的公钥发给Alice
- Alice用收到的公钥(Mallory的公钥)加密邮件,发送给Bob
- Mallory拦截了邮件,用自己的私钥解密邮件。
- Mallory篡改邮件后,再用Bob的公钥进行加密,然后伪装成Alice,发送给Bob
- Bob接收到邮件解密后,就看到了Mallory篡改后的邮件,但是他以为是Alice发送的
要防御中间人攻击,还需要一种手段来确认收到的公钥是否真的来自Bob,这就是认证。
第六章 混合密码系统
混合密码系统用对称密码来加密明文,用公钥密码来加密对称密码中所使用的密钥。
混合密码系统解决了公钥密码速度慢的问题(因为相比消息的长度,密钥的长度较短),对称加密中的密钥配送问题。
络上的密码通信所使用的 SSL/TLS 都运用了混合密码系统。
- 数字签名:由单向散列函数和公钥密码组合而成
- 证书:由公钥和数字签名组合而来
- 消息认证码:由单向散列函数和密钥组合而成
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!