kniost

谁怕,一蓑烟雨任平生

0%

网络通信安全详细解析,还原Alice和Bob的通信加密的进化史

网络安全是非常重要的,正所谓知其然,还要知其所以然,了解一些常用的安全基础也非常重要。下面从基础加密到 HTTPS/SSL 协议来逐步讲解 Alice 和 Bob 的秘密通信发展史,本文不会深入协议的细节,而是更希望通过介绍一些些常用概念帮助读者更加好的去理解网络安全加密设计的方法和目的,以及所考虑的问题。

1、何为安全的通信

在密码学中,经常用 Alice 和 Bob 两个人指代通信双方,本文也不例外。我们首先假设AliceBob是一对秘密情人,他们之间的情书报文(Message)要在一个不安全的媒体(比如网络)上进行传递,中间有窃听者Trudy可以在通信中截获、修改、插入和删除他们的通信报文。为了不避免被发现,他们必须要保证通信的安全性,那么在仅考虑通信过程中的安全时,需要确保以下几点:

  1. 机密性(Confidentiality) :只有发送方和所期望的接收方能够理解传输报文的内容,也就是需要加密。通俗来说,Alice 写的情书,只有 Bob 能看懂到底写的什么,Trudy 拿到了也看不懂具体的内容。
  2. 报文完整性(Message Integrity) : Alice 和 Bob 需要确保双方通信的内容再传输中不被篡改或者意外改动。
  3. 端点鉴别(End-point Authentication) :Alice 要知道自己确实是跟 Bob 进行了通信,而不是 Trudy 伪装成的 Bob

2、从密码学开始

要达到安全通信的第一个目标,必须要使用密码技术,密码技术由来已久,但是目前应用的技术都是近 40 年间发明的。密码技术可以让发送方伪装数据,而入侵者无法从截取到的数据中获取任何信息,而接收方可以从伪装的数据中恢复出原始数据。 一个典型的框图如下:

密码学2-1

也就是 Alice 拥有一个密钥$K_A$,加密算法以$K_A$和明文信息$m$为输入,以密文为输出。用符号$K_A(m)$表示用密钥$K_A$加密明文信息$m$后的输出。
同样的,Bob 也有一个密钥 $K_B$,在接收到密文$K_A(m)$后,将密钥$K_B$和密文利用解密算法计算,得到明文$m$。
这样,即使 Trudy 获取到了传输过程中的密文,也无法直接获取信息。

人类历史上的诸多加密方式,一般都是采用对称加密的方式,这种方式要求加密方和解密方拥有相同的密钥,也就是$K_A$和$K_B$必须保持相同并且对外界是保密的。在二战时期,情报机构就需要互相窃听和计算对方的加密密钥以获取情报。

但是,在对称加密中存在一个问题:如果要传递密钥,首先就要经过传输,那么如何确保这种传输是安全的呢?在 1976 年,两位科学家 Diffie 和 Hellman 论证了一个解决这个问题的算法,并开创了公开密钥加密系统的先河。下面我将分别介绍两种加密方式。

Tips: 这个字有多个读音,但是在密钥中念yuè而不是 yào,事实上,除了钥匙中念 yào 之外,其他基本都念 yuè,比如北门锁钥这类成语。

2.1 对称密钥体系

整个对称密码的发展史,便是引入随机性的过程。

2.1.1 古老的凯撒密码

凯撒密码的原理非常简单, 也就是将某个字符固定地替换成偏移为 k 的相应的字符。对于英文文本来说,一共 26 个字母,那么凯撒密码就是一个 25 种可能性的密钥(可以偏移的值从 1~25,允许循环偏移)。
比如一个明文 bob, i love you,使用密钥$C(k=3)$,就可以变成 ere, l oryh brx。但是,一旦了解了传输过程中使用了凯撒密码,就非常容易破解了,毕竟只有 25 种可能性直接采用暴力方法即可破解。

2.1.2 改进版的凯撒密码——单码替代密码

如果不止使用偏移,而是固定的有一个字母表,针对每一个字母对应一个无规律的新的字母,这样加密的安全性就大大提高了。比如一个明文 bob, i love you,通过一个固定的对应表,就可以变成 nkn, s gktc wky。对于英文来说,密钥的长度就是 26 位,可能性有$26! \approx 10^{26}$种,要直接暴力破解是非常难的。

那这样是不是就够了呢,毕竟暴力计算太过复杂了。不不不,还不够,毕竟语言文本是有规律的,比如说字母 e 的出现频率在英文文本中是 13%,字母 t 是 9%,而且还有许多常用的词有相同的组合,比如 “in”、”it”、”the”、”ing”这类。这些信息量能够大大缩小搜索的范围,搜索难度发生了数量级的缩小。根据攻击者所了解的信息程度,下面是可能的几种攻击方式。

  • 唯密文攻击 当攻击者不了解明文内容的任何信息时,他只能去猜测字母的对应方式,而英语中的字母统计信息可以帮助其破解。
  • 已知明文攻击 如果攻击者知道明文或者密文中的一些固定匹配时,就可以确定许多信息。比如知道 Alice 给 Bob 发的信息中必然存在 “alice” 这五个字母时,就能获取到 5 个字母的对应模式。使破解工作减轻许多。
  • 选择明文攻击 如果攻击者能够让发送方固定发送一个明文报文,并且得到明文报文的密文时,就能快速破解出所有的对应字母。比如如果 Trudy 能让 Alice 发送一个包含所有字母的句子 _”The quick fox jumps over the lazy dog”_,那么就能直接破译出所有的对应字母。

2.1.3 多码替代密码

多码替代密码是对单码替代密码的一种改进,它的基本思想就是使用多个单码替代密码,并在明文报文的特定位置使用特定的单码替代密码。举一个简单的例子,使用两个凯撒密码,$C_1(k=3)$和$C_2(k=17)$,对一个英文文本,奇数位使用$C_1$加密,偶数位使用$C_2$加密,这样也能大大增强安全性。

这里推荐一部本尼迪克特(神探夏洛克中夏洛克扮演者)表演的电影《模拟游戏》,讲的是二战期间图灵破解德军通信密码的故事,在此可以更深刻地感受到加密和破解之间的较量。

2.1.4 块密码

下面把目光转向现代,计算机时代数据的传输都是通过二进制进行的,所以不能简单地对 0 和 1 做单码替代加密。那应该怎么办呢?

那便是对比特块进行加密,也就是将一个长度为$k$的明文比特块对应到一个长度为$k$的密文比特块上。比如,在$k=3$时,明文有$2^3=8$种可能,那么其单码替代密码有$8!=40320$种可能,这种程度的运算,一台现代的电脑能很快算完,也就是说,$k=3$是不靠谱的。

每当选取一个大小为$k$的比特块时,密码表的长度是$2^{k}$个,可能性有$2^k!$种,当 k 是 64 的时候,虽然加密性已经不错了,但此时密码表的大小已经到达了一个天文数字,通信双方直接存储整个密码表是不现实的。我们换一种思路来想,如果需要知道某个比特块的映射比特块,而又不能负担存储所有映射可能性,那选择就只有一个了——使用函数

目前流行的块密码,包括 DES(Data Encryption Standard)和 AES(Advanced Encryption Standard) 均是采用的函数。比如 AES 使用 128 比特块,可以使用 128、192、256 比特长的密钥进行操作。

未完待续