> For the complete documentation index, see [llms.txt](https://article.paperclip.eu.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://article.paperclip.eu.org/jbcz/bing-fei-zhi-you-jia-mi-he-jie-mi-mi-ma-xue-ji-chu-gai-nian-shu-li.md).

# 并非只有加密和解密 —— 密码学基础概念梳理

**并非只有加密和解密 —— 密码学基础概念梳理**

“密码学的研究目标是保障信息安全，但仅有加密和解密是不够的。如何确认发信人的身份？如何确保消息未经篡改？在密码学的世界里，一切皆不可轻易信任。”

***

历史上有记载的密码形式，最早可以追溯至公元前 2500 年的一块巴比伦泥板上。泥板上的象形文字描述的是一种制作涂釉陶瓷的方法，单词都被去掉了第一个辅音，还使用了一些不常见的变异字符，目的可能是保护商业秘密。

自 1949 年香农发表《保密系统的信息理论》后，密码学开始成为一门科学，并发展至今。而密码学的各种基础概念，可以从三个代称开始讲起：Alice，Bob 和 Eve。

### 经典密码加解密场景

![img](https://jibencaozuo.com/static/media/01.795ae079.png)

密码加密解密场景图

在大部分的密码学教材中，你都可以看到这个典型的密码传递图。其中，Alice 是信息的发送者，也就是**加密者**，会将明文加密成密文；Bob 是信息的接收者，也就是**解密者**，会将明文解密成密文。

Alice 用于加密的算法就是**加密密钥**，Bob 用于解密的算法就是**解密密钥**。如果密钥是对外公开的，就称为**公钥**；反之，就称为**私钥**。如果加解密时使用了同样的密钥，这就是一个**对称密码**；如果是不一样的密钥，就是**非对称密码**。如果加密密钥公开，而解密密钥不公开，那么这就是一个**公开密钥密码。**

而 Eve 是敌对的第三方窃听者，试图在这个信息传递过程中截获密文，但又不仅限于截获。如果 Eve 试图找出密钥、解读密文，这就是**密码分析。她也可能篡改**这条信息，甚至**伪装**成 Alice 和 Bob 通信。可见，判断一个密码算法是否安全，不能只看密文是否可以不被破译。

### 密码系统在保护什么？

在现代密码学中，有一个基础假设，即只对密钥保密，而不对算法保密 —— 这就是密码学中著名的 **Kerckhoffs 准则**。在现实中，算法的完全保密往往很难实现，因为开发密码算法的人一般不是使用密码的人。因此，对密钥的保密是密码系统安全性的核心，即使窃听者得知算法和密文，也无法找出密钥，破译出明文。

一个合格的密码系统，应该能够保护信息的以下特性：

1、**机密性**：即 Eve 无法解读 Alice 传递给 Bob 的密文。

这是密码系统最基础的功能，也是给加密者给信息加密的基本意义。

2、**数据完整性**：Alice 传递给 Bob 的密文未经篡改，也没有在传递过程中出错。

一个典型的例子，是在网络上下载免费软件。为了防止软件被篡改，有安全意识的软件发布者会用单向散列函数计算出散列值（也称哈希值），并与软件同时发布。下载软件的人可以自行计算所下载文件的散列值，再与发布者公布的散列值进行比对，如果相同，则证明两份软件是相同的，未经篡改。

3、**可认证性**：Bob 能够确认密文是由 Alice 本人发出的，而非由他人伪造或盗用身份后发出。

这种验证通常需要用到消息认证码，这是一种确认完整性并进行认证的技术。它的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥，然后输出固定长度的数据。要计算出这个数据，就必须用到共享密钥 —— 消息认证码正是利用这一性质来完成认证的。

![img](https://jibencaozuo.com/static/media/02.7c0847a3.png)

将玛丽女王送上断头台的信，即为沃尔辛厄姆篡改并伪造身份后发出 | 《成为一名密码朋克》

4、**不可否认性**：Alice 不能否认信息是由她发送的。

在现实情况中，也存在发送者事后试图否认自己的行为的情况，特别是在商业往来中。此时，「数字签名」就能很好地防止这种情况。除此之外，它还能用来确保数据完整性和提供认证。

和消息认证码不同，Alice 和 Bob 各自使用不同的密钥，且各自保密。Alice 发送消息时，用她的密钥生产一个「签名」，而 Bob 手中的密钥虽然无法根据消息生成签名，却可以对 Alice 的签名进行验证，看它是否是通过 Alice 的密钥计算出来的。

那么，如何实现对这四个特性的保护呢？这就是密码编码学要做的事情。

### 如何打败一套密码？

**密码编码学**是建立加密系统的科学，研究如何对信息进行编码，实现对信息的隐蔽；**密码分析学**则与之相对，是在不使用密钥的情况下，破解加密系统的科学，主要研究加密消息的破译或消息的伪造。这两者一起构成了广义上的**密码学**。

在密码分析中，有四种攻击方式，从易到难依次是：

1、**唯密文攻击**：Eve 手中只有密文，尝试将其恢复成明文，或者找出密钥。

在《成为一名密码朋克》EP 01「玛丽女王之死」 中，沃尔辛厄姆破译玛丽女王密信的方法，就是一种唯密文攻击。而你在这一章节中用电脑完成的**暴力破解**，也属于唯密文攻击。

![img](https://jibencaozuo.com/static/media/03.3be6fd40.png)

2、**已知明文攻击**：Eve 知道至少一组明文和密文的对照组，尝试找出密钥，或尝试破译其他密文。

在《成为一名密码朋克》EP 04 「一个时代的终结」中，盟军正是依靠密文中常见的天气信息和「希特勒万岁」，破译了 Enigma。

![img](https://jibencaozuo.com/static/media/04.0d131cf8.png)

3、**选择明文攻击**：Eve 占据了加密机，能够将明文编译成密文，但不知道密钥，需要尝试找出密钥。

这一攻击方式的典型例子来自二战中的中途岛海战。美军破译了日军的部分密码，得知日军将要实施一个攻击计划，却无法确认具体攻击目标「AF」是指中途岛还是阿留申群岛，于是通过无线电向珍珠港报告一则关于中途岛的假消息。不久后，截获的日军密电中出现了「AF」的字样，因此，美军确定了日军的目标即为中途岛。

4、**选择密文攻击**：Eve 占据了解密机，能够得到任意密文对应的明文，以此来找出密钥。

这种攻击方式主要用于攻击公开密钥密码。

从抵抗攻击的角度看，只有经得起选择明文攻击和选择密文攻击的密码系统，才能称得上是安全的。而抵抗攻击，仅仅避免了 Eve 对密文的解读，无法防止篡改、伪装和否认。那么，一个密码系统怎样才算安全？

### 怎样的密码系统才算安全？

如何判断一个密码系统的安全程度？在《密码学——加密演算法》中，讨论了以下三种定义：

1、一个密码系统为**无条件安全**，指即使接收到无限密文，也无法确定其密钥。

这种情况很难实现，除了使用一次性密码本，只能在密文的长度与密钥长度大致相同的情况下成立。

**一次性密码本**是将明文转换成二进制，再和一串至少等长的随机二进制数进行异或运算（异或运算的相关介绍，可见《成为一名密码朋克》EP 05「密码标准的阴谋」），且只使用一次。设正面为 0，反面为 1，那么这个随机的二进制数可以通过不断地抛硬币实现，它必须是一种真正的随机。这样，即使用暴力破解遍历整个密钥空间，这个一次性密码本也无法被破译，它的安全性已由克劳德·香农证明。

2、一个密码系统为**计算上安全**，就是指该密码系统满足破解密文的花费远远大于所加密信息的价值，而且破解密文所花费的时间远远多于该信息的有效时间。

在盟军破解 Enigma 的最初尝试中，因为每条密文的有效期只有 24 小时，而盟军又无法在这样短的时间内找到正确密钥，此时的 Enigma 就可以视为是在计算上安全的。

![img](https://jibencaozuo.com/static/media/05.a41124c3.png)

3、一个密码系统为**可证明安全**，指该密码安全性问题可转化成某个研究人员公认的困难问题。

**公开密钥密码系统 RSA** 就是一种可证明安全的密码系统，它的安全性一般可以转化为对一极大整数做因数分解的问题，而找到解决这个问题的算法的可能性是非常小的。目前为止，世界上还没有任何可以可靠地攻击 RSA 的方式。关于这个算法的更多信息，请期待《成为一名密码朋克》即将推出的新章节。

以上就是关于密码学基础概念的简单梳理。

密码学不仅仅是破译密码的科学，也是创立密码、验证密码的科学，核心目的是从方方面面保障信息安全。随着密码学从古典进入现代，密码系统更多地隐藏在数字和计算之间，变成 0 和 1 的幽灵。《成为一名密码朋克》这个交互视频项目，就是希望在不失专业性的前提下，把密码学的学习过程变得有趣。

祝你学得开心，玩有所得。

封面：Nick MgvhZNdAfDo on unsplash

### 参考资料

(1) **邓安文. (2006).** 密码学——加密演算法. 中国水利水电出版社.

(2) **胡国胜，张迎春，宋国徽. (2019).** 信息安全基础（第2版）. 电子工业出版社.

(3) **西蒙·辛格. (2018).** 码书：编码与解码的战争. 江西人民出版社.

(4) **克雷格·鲍尔. (2019).** 密码历史与传奇：真相比故事更精彩. 人民邮电出版社.

(5) **琼·戈麦斯. (2021).** 数学家、间谍与黑客：密码与解码. 中信出版社.

(6) **Wiki. (2021).** One-time pad. <https://en.wikipedia.org/wiki/One-time\\_pad>

(7) **XianMu. (2017).** Attack models in cryptography. github. <https://xianmu.github.io/posts/2017-06-30-attack-models-in-cryptography.html>

[值得一看！《机器学习：一个人工智能的诞生》全系列参考资料](https://jibencaozuo.com/zh-Hans/dataBank/3)
