Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
YiRanCN committed Feb 22, 2024
1 parent c017d29 commit 3b1b92c
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 0 deletions.
53 changes: 53 additions & 0 deletions docs/study/encryption/对称加密-分组密码的模式.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
DES、3DES 和 AES 都属于分组密码,它们只能加密固定长度的明文。如果需要加密更长的明文,就需要对分组密码进行迭代,而分组密码的迭代方法称为分组密码的模式(Model)。简而一句话:分组密码的模式,就是分组密码的迭代方式。

分组密码有很多种模式,这里主要介绍以下几种:ECB、CBC、CFB、OFB、CTR。

### ECB 模式

ECB(Electronic CodeBook)模式,即电子密码本模式。该模式是将明文分组,加密后直接成为密文分组,分组之间没有关系。

ECB 模式是所有模式中最简单的一种,该模式的明文分组与密文分组是一一对应的关系,若明文分组相同,其密文分组也一定相同。因此,ECB 模式也是最不安全的模式。

### CBC 模式

CBC(Cipher Block Chaining)模式,即密码分组链接模式。该模式首先将明文分组与前一个密文分组进行 XOR 运算,然后再进行加密。只有第一个明文分组特殊,需要提前为其生成一个与分组长度相同的比特序列,进行 XOR 运算,这个比特序列称为初始化向量(Initialization Vector),简称 IV。

### CFB 模式

CFB(Cipher FeedBack)模式,即密文反馈模式。该模式首先将前一个密文分组进行加密,再与当前明文分组进行 XOR 运算,来生成密文分组。同样 CFB 模式也需要一个 IV。

### OFB 模式

OFB(Output FeedBack)模式,即输出反馈模式。该模式会产生一个密钥流,即将密码算法的前一个输出值,做为当前密码算法的输入值。该输入值再与明文分组进行 XOR 运行,计算得出密文分组。该模式需要一个 IV,进行加密后做为第一个分组的输入。

### CTR 模式

CTR(CounTeR)模式,即计数器模式。该模式也会产生一个密钥流,它通过递增一个计数器来产生连续的密钥流。对该计数器进行加密,再与明文分组进行 XOR 运算,计算得出密文分组。

## 分组密码的填充

在分组密码中,当数据长度不符合分组长度时,需要按一定的方式,将尾部明文分组进行填充,这种将尾部分组数据填满的方法称为填充(Padding)。

### No Padding

即不填充,要求明文的长度,必须是加密算法分组长度的整数倍。

### ANSI X9.23

在填充字节序列中,最后一个字节填充为需要填充的字节长度,其余字节填充 0。

### ISO 10126

在填充字节序列中,最后一个字节填充为需要填充的字节长度,其余字节填充随机数。

### PKCS#5PKCS#7

在填充字节序列中,每个字节填充为需要填充的字节长度。

### ISO/IEC 7816-4

在填充字节序列中,第一个字节填充固定值 80,其余字节填充 0。若只需填充一个字节,则直接填充 80。

### Zero Padding

在填充字节序列中,每个字节填充为 0。
7 changes: 7 additions & 0 deletions docs/study/encryption/对称加密算法总结.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
### 对称加密算法总结

- DES,已被破解,不建议使用,是对称加密算法的基石,具有学习价值
- 3DES,早于 AES 出现,用来代替 DES,计算秘钥时间太长,加密效率不高,所以基本不在使用,除非一些老的系统兼容
- AES,对称加密算法中性能最高的,速度快,安全级别高,是现在最流行的对称加密算法,Rijndael 算法是 AES 算法的基础,AES 算法是 Rijndael 算法的一个具体实现,AES 算法有 5 种密钥长度,分别是 128 位,192 位,256 位
- IDEA,常用的电子邮件加密算法
- PBE,不推荐使用
35 changes: 35 additions & 0 deletions docs/study/encryption/消息摘要算法总结.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向 Hash 加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。

消息摘要采用单向 Hash 函数将需加密的明文"摘要"成一串固定位数(如 128bit)的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这串摘要便可成为验证明文是否是“真身”的“指纹”了。

消息摘要具有不可逆性,在消息摘要生成过程中,会丢失很多原文的信息,而且无法找回。一个好的摘要算法,是极难产生 Hash 碰撞的,也就是找到另一段明文经计算后产生相同的摘要。

### MD5

MD 是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本 5),它由 MD2、MD3、MD4 发展而来,由 Ron Rivest(RSA 公司)在 1992 年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生 16 字节(128 位)的校验值,一般用 32 位十六进制数表示。MD2 的算法较慢但相对安全,MD4 速度很快,但安全性下降,MD5 比 MD4 更安全、速度更快。

目前在互联网上进行大文件传输时,都要得用 MD5 算法产生一个与文件匹配的、存储 MD5 值的文本文件(后缀名为 .md5 或.md5sum),这样接收者在接收到文件后,就可以利用与 SFV 类似的方法来检查文件完整性,目前绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。与 MD5 相关的工具有很多,如 WinMD5 等。

### SHA

SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构——美国国家标准技术研究院(NIST)制定的,SHA 系列算法的摘要长度分别为:SHA-1 为 20 字节(160 位)、SHA-224 为 32 字节(224 位)、SHA-256 为 32 字节(256 位)、SHA-384 为 48 字节(384 位)、SHA-512 为 64 字节(512 位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此较之 MD5 更为安全,它是未来数据摘要算法的发展方向。由于 SHA 系列算法的数据摘要长度较长,因此其运算速度与 MD5 相比,也相对较慢。

目前 SHA1 的应用较为广泛,主要应用于 CA 和数字证书中,另外在目前互联网中流行的 BT 软件中,也是使用 SHA1 来进行文件校验的。

### MAC

MAC 算法 (Message Authentication Codes 消息认证码算法) 含有密钥的散列函数算法,兼容了 MD 和 SHA 算法的特性,并在此基础上加上了密钥。因此 MAC 算法也经常被称作 HMAC 算法。消息的散列值由只有通信双方知道的密钥来控制。此时 Hash 值称作 MAC。

经过 MAC 算法得到的摘要值也可以使用十六进制编码表示,其摘要值得长度与实现算法的摘要值长度相同。例如 HmacSHA 算法得到的摘要长度就是 SHA1 算法得到的摘要长度,都是 160 位二进制数,换算成十六进制的编码为 40 位。

流程分析:

甲乙双方进行数据交换可以采取如下流程:

1.甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)

2.甲乙双方按照约定构造密钥,双方拥有相同的密钥(一般是一方构造密钥后通知另外一方,此过程不需要通过程序实现,就是双方约定个字符串,但是这个字符串可不是随便设定的,也是通过相关算法获取的)

3.甲方使用密钥对消息做摘要处理,然后将消息和生成的摘要消息一同发送给乙方

4.乙方收到消息后,使用甲方已经公布的摘要算法+约定好的密钥 对收到的消息进行摘要处理。然后比对自己的摘要消息和甲方发过来的摘要消息。甄别消息是否是甲方发送过来的。
39 changes: 39 additions & 0 deletions docs/study/encryption/非对称加密算法总结.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
本文将详细介绍几种常见的非对称加密算法,包括它们的工作原理、优缺点和应用场景。

### 一、RSA 算法

算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和 Leonard Adleman。

RSA 算法是最早的非对称加密算法之一,也是目前使用最广泛的非对称加密算法。

它基于大数因子分解问题,提供了良好的安全性。但由于其运算复杂,效率相对较低。

RSA 算法被广泛应用于网络通信、电子签名、SSL/TLS 等领域。

### 二、ECC(Elliptic Curve Cryptography)

ECC 是基于椭圆曲线数学的一种非对称加密算法。相比于 RSA,ECC 在提供相同安全性的情况下,需要的密钥长度更短,这使得 ECC 在处理速度和存储空间上都比 RSA 更优秀。

ECC 常被用于移动设备、嵌入式系统等资源受限的环境,也被用于 SSL/TLS、IPSec 等网络安全协议。

### 三、Diffie-Hellman 算法

Diffie-Hellman 算法是一种密钥交换协议,它允许双方在公开通道上生成一个共享的密钥。虽然 Diffie-Hellman 算法本身不是用来加密或签名的,但它在许多非对称加密和数字签名算法中起到了关键作用。

Diffie-Hellman 算法被广泛应用于 VPN、安全通信等场景。

### 四、ElGamal 算法

ElGamal 算法是另一种基于离散对数问题的非对称加密算法,它可以用于加密和数字签名。

ElGamal 加密的安全性在于求解离散对数问题的困难性,但是其运算效率相对较低。

ElGamal 算法在电子邮件加密(例如 OpenPGP)和电子签名等领域有应用。

### 五、DSA(Digital Signature Algorithm)

DSA 是一种主要用于数字签名的非对称算法,它是 NIST 制定的 DSS(Digital Signature Standard)的一部分。

DSA 的安全性基于离散对数问题。

DSA 算法被广泛应用于数字签名、证书认证等领域。

0 comments on commit 3b1b92c

Please sign in to comment.