Skip to content

Commit

Permalink
feat: update block cipher
Browse files Browse the repository at this point in the history
  • Loading branch information
liuzhuan committed Nov 4, 2024
1 parent f65b8e4 commit 1e8966a
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion _posts/2024-11-01-on-crypto-101.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,34 @@ $$ P = D(k, C) $$

由于解密和加密使用同样的密钥,因此这种加密模式也被称作**对称密钥加密***symmetric-key encryption*)或**密钥加密**(secret-key encryption)。

将来你会见到更多的加密模式,比如**公钥加密算法***public-key encryption*),它的加密和解密使用的密钥是不同的。这类加密模式也被称作**非对称密钥加密***asymmetric-key encryption*)。
将来你会见到更多的加密模式,比如**公钥加密算法***public-key encryption*),它的加密和解密使用的密钥是不同的。这类加密模式也被称作**非对称密钥加密***asymmetric-key encryption*)。

分块加密是**基于密钥的排列置换***keyed-permutation*)。也就是说,密钥一旦确定,相同的明文总是会映射为相同的密文。如果密钥改变,输出的密文也会随之改变。

目前常用是分块加密标准是 **AES***Advanced Encryption Standard*,即高级加密标准)。AES 经过层层选拔,在众多加密算法中脱颖而出,2001 年成为美国国家标准与技术研究所(National Institute of Standards and Technology,简称 NIST)的推荐加密标准。

在成为 NIST 标准之前,AES 的原名叫 *Rijndael*,这个名称源自它的两位作者名称,比利时的密码学家 *Vincent Rijmen**Joan Daemen*

原始 Rijndael 算法定义了一系列分块加密算法,块大小和密钥大小可以是 128 比特到 256 比特范围的任意 32 的倍数。成为 AES 后,通过标准化限定了参数长度,块大小固定为 128 比特,而密钥大小只有 128,192 和 256 比特三个标准。密钥越长,加密轮数越多,安全强度也高,但带来的运算开销也就越大。

AES 之前的加密标准是 **DES***Data Encryption Standard*,即数据加密标准),这是 NIST 1977 年颁布的加密标准,也是最早的广泛使用的分块加密算法之一。

DES 的密钥长度只有 56 比特(DES 算法中密钥占据了 64 比特的长度,但其中 8 比特是奇偶校验位,所以有效的密钥长度只有 56 比特),使用现代计算机硬件,DES 可以在一天内被暴力破解。因此,普遍认为 DES 已不再具有安全性,不应该在新的系统中使用它。

为了延长 DES 算法的寿命,发挥 DES 配套硬件的余热(毕竟花钱买的硬件,扔了确实心疼),人们发明了 **3DES** 算法。

3DES 就是用 DES 算法把消息处理三遍。第一遍用于加密,第二遍解密,第三遍再加密。

$$ C = E_{DES}(k_1, D_{DES}(k_2, E_{DES}(k_3, p))) $$

如果三次的密钥完全一样,即 \\(k_1 = k_2 = k_3\\),第二遍的解密抵消了第一遍的加密,3DES 的效果仅仅是第三遍的加密,这和 DES 的效果完全一样,可以实现与旧硬件的兼容性。

如果三次密钥不一样,就能实现更好的安全强度。

尽管 3DES 比 DES 相对安全,但不建议在新系统中使用它。因为它的安全强度不如 AES,但消耗的计算资源要远大于 AES。

据说,3DES 依然是金融领域的主力军。因为金融领域是技术相对保守的行业,数据安全大于技术升级。除非密码学有重大突破,证明 3DES 已完全不可靠,否则 3DES 应该还会持续存在很多年。

分块加密存在一些问题。首先,消息长度有限,比如 AES 消息长度限定为 128 比特。如果想处理更长的消息,或者没有固定长度的消息,需要采用其他的加密技术,比如**数据流加密***stream cipher*)。

另外,如果密钥丢失,加密将失去意义。如何在不安全的信道上传输密钥,也是一个需要解决的问题。这个问题将通过**密钥交换协议***key exchange protocol*)解决。

0 comments on commit 1e8966a

Please sign in to comment.