目录
1.对称加密和消息保密性
对称加密也被称为传统加密、密钥或单密钥加密,到目前为止,它仍然是两种加密类型(对称加密和公钥加密)中使用最广泛的一种
1.1对称加密原理
一个对称加密由5个要素构成
- 明文(Plaintext):作为输入被放入到算法中的原始消息或数据。
- 加密算法(Encryption algorithm):加密算法对明文执行各种替换和转换
- 密钥(Secret key):密钥作为一种参数也会被输入到加密算法中,该算法所执行的精确替换和转换取决于密钥.
- 密文(Ciphertext):这是作为输出而产生的加密过的消息(密文的产生取决于明文和密钥,明文相同密钥不同密文不同)。
- 解密算法(Decryption algorithm):这本质上是反向运行的加密算法,它取密文和相同的密钥,并产生原始的明文。
对称加密安全使用的两个要求:
有强大的加密算法:使对手无法破译密文或找到密钥,即使对手拥有大量密文以及产生每个密文的明文,他或她也不能解密密文或发现密钥
要保持该密钥的安全:发送方和接收方必须以一种安全的方式获得了该秘密密钥的副本,如果有人能发现密钥并知道算法,那么所有使用这个密钥的通信都是可读的.
⚠️:需要注意的是,对称加密的安全性取决于密钥的保密性,而不是算法的保密性,我们不需要对算法保密,我们只需要对密钥进行保密。
密码学:
密码学系统一般按照三个独立的维度进行分类:
- 用于将明文转换为密文的操作类型。所有加密算法都基于两个一般原则:替换,其中明文中的每个元素(比特、字母、比特组或字母)被映射到另一个元素;转位,其中明文中的元素被重新排列。基本要求是不丢失信息(即所有操作都是可逆的).大多数系统称为产品系统,涉及多个替换和换位阶段。
- 使用的密钥数:如果发送方和接收方都使用相同的密钥,则该系统称为对称、单密钥、秘密密钥或传统加密。如果发送方和接收方各自使用不同的密钥,则该系统称为非对称、双密钥或公钥加密
- 处理明文的方式:块密码每次处理一个元素块的输入,为每个输入块生成一个输出块。流密码连续处理输入元素,一次产生一个输出元素。
密码分析:
试图发现明文或密钥的过程被称为密码分析。密码分析人员使用的策略取决于加密方案的性质和密码分析人员可用的信息
下图总结了基于密码分析人员已知信息量的各种类型密码分析攻击
- 第一行是 纯密文攻击:对攻击者而言,最困难的情况是可用信息只有密文.因此,纯密文攻击是最容易防御的,因为对手拥有的信息最少。(攻击方法可以为蛮力破解,尝试所有可能的密钥或者通过各种统计检验,要使用这种方法,对手必须对隐藏的明文类型有一些一般的概念)
- 第二行是 已知明文攻击:分析人员可以捕获一个或多个明文消息以及它们的加密信息。或者分析人员可能知道某些明文模式会出现在消息中。例如以Postscript格式编码的文件总是以相同的模式开始,有了这些信息,分析人员就可以根据已知的明文被转换的方式来推断出密钥了。
⚠️:与已知的明文攻击密切相关的是probable-word攻击。如果对手正在处理一些普通散文消息的加密,他或她可能对消息中的内容一无所知。然而,如果对手在寻找一些非常具体的信息,那么部分信息可能是已知的。例如,如果整个会计文件正在传输,对手可能知道文件标题中某些关键词的位置。作为另一个例子,公司开发的程序的源代码可能会在某些标准化的位置包含版权声明
- 第三行是选择明文攻击:攻击者可以事先任意选择一定数量的明文,让被攻击的加密算法加密,并得到相应的密文。攻击者的目标是通过这一过程获得关于加密算法的一些信息,以利于攻击者在将来更有效的破解由同样加密算法(以及相关钥匙)加密的信息。
- 第四、五行是选择密文攻击和选择文本攻击:二者不常作为密码分析技术
如果由一个加密方案生成的密文满足以下其中一个或两个条件,则该加密方案在计算上是安全的:
- 破解密码的成本超过了加密信息的价值
- 破解密码所需的时间超过了信息的使用寿命。
不幸的是,很难估计成功地进行密码分析密文所需的工作量。然而,假设加密算法没有固有的数学缺陷,则提出了一种蛮力攻击:蛮力攻击包括尝试每一个可能的密钥,直到获得从密文到明文的可理解的转化方式。平均而言,必须尝试使用所有可能的钥匙中的一半才能取得成功.需要注意的是,蛮力攻击不仅仅是简单地尝试所有可能的密钥,为了补充暴力方法,需要对预期明文有一定程度的了解,还需要一些自动区分明文和乱码的方法。
Feistel密码结构:
许多对称块加密算法,包括DES,都有一个结构,下图就是Feistel密码结构.
左边是加密过程,右边是解密过程,分别进行了16轮.
笼统过程:加密算法的输入是一个长度为2w位的明文块和一个密钥k。明文块被分为两部分,LE₀和RE₀.数据的两半经过n轮处理,然后结合起来生成密文块。每一轮i都有来自上一轮的输入LEᵢ-₁和REᵢ-₁,以及来自整体K的子密钥Kᵢ(一般来说,子密钥Kᵢ与密钥K不同,子密钥之间也不同,并且子密钥由算法生成)
详细过程:每一轮都有相同的结构,以第1轮为例,先对RE₀应用循环函数F,得到一个结果,将其替换到数据左半部分成为LE₁.再通过将该结果与LE₀进行异或运算(⊕),得到结果为RE₁,填充到密文的右半部分.以此类推.循环函数对于每个循环具有相同的一般结构,但都被循环子密钥Kᵢ参数化.在此替换之后,执行一个由两部分数据的交换组成的置换,也就是上图中LE₁₆和RE₁₆会再次进行置换,得到LE₁₇和RE₁₇
数据块大小
- 密钥大小:更大的密钥大小意味着更大的安全性,但可能会降低加密/解密速度(常见密钥长度为128位)
- 轮数:单轮提供的安全性不足,但多轮提供了更高的安全性(常见轮数为10到16轮)
- 子密钥生成算法:该算法越复杂,对密码分析抵抗力越强
- 循环函数:循环函数越复杂,对密码分析抵抗力越强
- 易于软件快速加密解密:在许多情况下,加密以排除硬件实现的方式嵌入到应用程序或实用程序功能中。因此,算法的执行速度成为一个问题
- 算法易于分析:如果能够简明扼要地解释该算法,则更容易分析该算法的密码分析漏洞,从而对其强度提供更高级别的保证。
对称块密码的加密和解密本质上是相同的:使用密文作为算法的输入,但以相反的顺序使用子密钥Kᵢ。也就是说,第一轮使用Kₙ,第二轮使用Kₙ-₁,以此类推,直到最后一轮使用K₁。这是一个很好的特性,因为这意味着我们不需要实现两种不同的算法,一种用于加密,另一种用于解密。
1.2对称数据块加密算法
数据加密标准:
三重DES:
高级加密标准:
1.3随机数和伪随机数
随机数的使用
TRNG,PRNG和PRF
算法设计
1.4流式密码和RC4
流式密码结构
RC4算法
1.5操作中的密码块模式
电码本模式
密码块链接模式
密码反馈模式
计数模式
1.6关键术语
AES:高级加密标准(Advanced Encryption Standard)
CBC:密码块链接模式(Cipher Block Chaining mode)
CFB:密码反馈模式(Cipher Feedback mode)
CTR:计数器模式(counter mode)
DES:数据加密标准(Data Encryption Standard)
ECB:电子码本模式(Electronic Codebook mode)
3DES:三重数据加密标准(triple DES)
2.公钥密码学和消息认证
2.1消息认证的方法
使用常规加密进行认证
无消息加密的消息身份验证
2.2安全哈希函数
哈希函数要求
哈希函数的安全性
简单哈希函数
SHA安全哈希函数
SHA-3
2.3消息认证码
HMAC
基于块密码的MAC
2.4公钥密码学原则
公钥加密结构
公钥加密系统的应用程序
公钥密码学的要求
2.5公钥密码学算法
RSA公钥加密算法
迪菲-赫尔曼密钥交换
其他公钥密码学算法
2.6数字签名
数字签名的生成和验证
RSA数字签名算法
2.7关键术语
DSS:数字签名标准(Digital Signature Standard)
ECC:椭圆曲线密码学(eliptic-curve cryptography)
MAC:消息认证码(message authentication)
HMAC:哈希运算消息认证码(Hash-based Message Authentication Code)
MD5:信息摘要算法(Message-Digest Algorithm)
RSA:RSA算法
SHA-1:安全散列算法1(Secure Hash Algorithm 1)