开放的互联网怎么保障数据安全?

Jun 18, 2024·
Sam.C
Sam.C
· 8 min read

互联网是一个联通世界的桥梁,天量的信息一刻不停息的在互联网上穿梭传递,互联网是怎么保障数据安全的呢?

今天来回顾一下其中一项最基础也最重要的安全保障设施——TLS(Transport Layer Security) ,这是一项结合了对称加密和非对称加密优点的设计:

握手阶段: 使用非对称加密协商出一个对称密钥(会话密钥)。 数据传输阶段: 使用协商出的对称密钥进行加密,保证速度和效率。

TLS 的安全性主要取决于以下因素:

  • 密钥长度: 密钥越长,破解难度越大。目前 TLS 通常使用 256 位或更高的密钥。
  • 算法选择: 选择安全的加密算法。TLS 支持多种算法,应选择经过验证且未被攻破的算法。
  • 实现方式: 正确的实现和配置至关重要。错误的实现可能引入漏洞,降低安全性。

以现代计算机算力破解 TLS 加密非常困难。即使使用最强大的超级计算机,破解 256 位密钥也需要天文数字般的时间,这个数字可能远超宇宙年龄。

非对称加密是有一个公钥,一个私钥,公钥用于加密,但是不能解密,只能通过私钥解密。公钥可以公之于众,私钥必须妥善保存,一旦私钥泄露就有被非法利用的风险,需要及时的更换。 对称加密是加密解密都只需要一个密钥,通信双方使用一致的加密套件(cipher suite)和一个一样的随机数(Pre-Master Secret)计算出一个会话密钥,然后使用这个会话密钥进行加密和解密数据。

TLS 在交换随机数(Pre-Master Secret)时使用证书携带的公钥加密 Pre-Master Secret ,加密后只能由有对应私钥的服务器解密,这是非对称加密的部分。 服务器和客户端使用在非对称加密时协商好的 cipher suite (cipher suite定义了使用的加密算法、密钥交换算法、MAC 算法和伪随机函数 (PRF) )和 Pre-Master Secret 生成一个会话密钥,这个密钥是各自生成的,不经过网络传输,就不会发生泄露的风险,所以就可以安全的进行数据传输。

有 TLS 加持的 http 称为 https ,虽然现代网络安全仅靠 https 不能完全保证安全,但是没有 https 保护的信息传输肯定是不安全的:

  • 保护数据机密性: 防止数据在传输过程中被窃听。
  • 确保数据完整性: 防止数据在传输过程中被篡改。
  • 验证服务器身份: 确保用户访问的是真正的网站,而非钓鱼网站。

TLS 的实现过程

要使暴露在互联网上资源被 https 保护,需要向证书颁发机构 (CA) 提交公钥和其他身份信息,申请数字证书,并把证书安装在提供 http 服务的服务器器上。

Let’s Encrypt 是一家免费、开放、自动化的公益性证书颁发机构(CA), 由互联网安全研究组(ISRG)运作。有一个工具certbot可以全自动的申请、部署、续期 Let’s Encrypt 的证书。

数字证书是一个包含了服务器公钥和其他身份信息的数据结构(并非加密的密文),并由可信的证书颁发机构(CA)进行数字签名的文件。

数字证书包含以下关键信息:

  • 服务器公钥: 用于加密会话密钥或验证服务器签名。
  • 服务器身份信息: 域名、组织名称等。
  • 证书颁发机构信息: 颁发证书的 CA 的名称和签名。
  • 证书有效期: 证书的起始和结束日期。
  • 其他信息: 序列号、指纹、扩展字段等。

数字证书的签名过程:

  1. 服务器生成一对公钥和私钥。
  2. 服务器将公钥和其他身份信息打包成证书签名请求(CSR)。
  3. 服务器将 CSR 发送给 CA。
  4. CA 验证服务器的身份信息。
  5. CA 使用自己的私钥对 CSR 进行签名,生成数字证书。
  6. CA 将数字证书发送给服务器。

客户端如何验证数字证书:

  1. 客户端获取服务器的数字证书。
  2. 客户端使用 CA 的公钥验证证书的签名。
  3. 如果签名有效,说明证书是由可信的 CA 颁发的,并且证书内容未被篡改。
  4. 客户端从证书中提取服务器的公钥,用于后续的密钥交换和通信。

数字证书的安全性依赖于以下几个方面:

  • CA 的可信度: CA 必须是受信任的机构,其根证书已预装在操作系统或浏览器中。
  • 私钥的保密性: CA 的私钥必须严格保密,否则攻击者可以伪造证书。
  • 证书链的完整性: 证书链从根证书到服务器证书的路径必须完整且可信。

TLS 握手阶段的目的是安全地协商出一个对称密钥(会话密钥)。具体过程如下:

  1. Client Hello: 客户端向服务器发送 Client Hello 消息,其中包含客户端支持的 TLS 版本、加密套件(Cipher Suite)等信息。
  2. Server Hello: 服务器回复 Server Hello 消息,确认 TLS 版本和选择的加密套件,并发送自己的数字证书(包含公钥)。
  3. 密钥交换(以下两种方式依协商的加密套件 (Cipher Suite)择一使用):
  • RSA 密钥交换: 客户端生成一个随机数(Pre-Master Secret),用服务器的公钥加密后发送给服务器。服务器用自己的私钥解密得到 Pre-Master Secret。
  • Diffie-Hellman 密钥交换: 客户端和服务器各自生成一个随机数,并通过一系列计算,在不直接传输 Pre-Master Secret 的情况下,安全地协商出相同的 Pre-Master Secret。
  1. 会话密钥生成: 双方根据 Pre-Master Secret 和之前交换的随机数,通过伪随机函数生成相同的会话密钥。
  2. 加密通信开始: 从此以后,双方使用会话密钥进行对称加密通信,保证数据的机密性和完整性。

会话密钥是服务器和客户端各自生成的,如果客户端和服务器使用的伪随机函数 (PRF) 不一样,那么它们将无法生成相同的会话密钥,从而无法进行安全的通信。

TLS 协议如何保证 PRF 一致:

  • 加密套件协商: 在 TLS 握手阶段,客户端和服务器会协商出一个双方都支持的加密套件 (Cipher Suite)。加密套件定义了使用的加密算法、密钥交换算法、MAC 算法和 PRF。因此,一旦协商出加密套件,双方就确定了要使用的 PRF。

  • 标准化 PRF: TLS 协议标准化了一些常用的 PRF,如 HMAC-SHA256、HMAC-SHA384 等。这些 PRF 的实现是公开的,客户端和服务器可以根据标准实现相同的 PRF。

如果 PRF 不一致会发生什么?

  • 握手失败: 在握手阶段,双方会交换一些验证信息,这些信息是用协商好的 PRF 计算得到的。如果 PRF 不一致,验证信息就会不匹配,导致握手失败。

  • 通信无法解密: 即便握手成功,后续通信中的数据也是用会话密钥加密的。如果 PRF 不一致,双方生成的会话密钥就会不同,导致无法解密对方发送的数据。

如何确保 PRF 一致:

  • 使用标准的 TLS 库: 大多数 TLS 库都遵循 TLS 协议标准,正确实现了标准化的 PRF。因此,使用这些库可以确保 PRF 的一致性。

  • 避免自定义 PRF: 除非有特殊需求,否则应尽量避免自定义 PRF。自定义 PRF 可能存在安全风险,且难以保证与其他 TLS 实现的兼容性。

TLS 协议通过加密套件协商和标准化 PRF,确保客户端和服务器使用相同的 PRF,从而生成相同的会话密钥,实现安全的通信。如果 PRF 不一致,TLS 握手将失败,或者后续通信无法解密。

“伪随机函数” (Pseudo-Random Function, PRF) 这个名称可能会引起误解。

PRF 的特点:

  1. 确定性: PRF 是确定性的函数,给定相同的输入,它总是会产生相同的输出。这与真正的随机函数不同,真正的随机函数每次调用都会产生不同的结果。
  2. 伪随机性: PRF 的输出在计算上与真正的随机序列不可区分。也就是说,没有有效的计算方法可以将 PRF 的输出与真正的随机序列区分开来。
  3. 密钥依赖: PRF 的输出不仅取决于输入,还取决于一个密钥。只有知道密钥的人才能计算出正确的输出。

为什么叫“伪随机”:

PRF 被称为“伪随机”,是因为它的输出虽然不是真正随机的,但具有足够的随机性,可以用于密码学应用。在实际应用中,PRF 的输出通常被视为随机数,用于生成密钥、初始化向量 (IV) 等。

在 TLS 协议中,PRF 用于从 Pre-Master Secret 生成会话密钥、MAC 密钥和 IV。由于 PRF 是确定性的,客户端和服务器只要使用相同的 Pre-Master Secret 和 PRF,就能生成相同的密钥材料,从而保证通信的安全性。

PRF 的安全性取决于以下因素:

  • PRF 算法的安全性: TLS 协议使用 HMAC (Hash-based Message Authentication Code) 作为 PRF。HMAC 是一种基于哈希函数的消息认证码,具有良好的安全性。
  • 密钥的保密性: PRF 的输出依赖于密钥,因此密钥的保密性至关重要。如果攻击者获取了密钥,就能计算出 PRF 的输出,从而破解通信。
  • 种子的随机性: PRF 的输入通常包含一个随机数作为种子。种子的随机性越好,PRF 的输出就越难以预测。

PRF 虽然不是真正随机的,但具有足够的随机性,可以用于密码学应用。在 TLS 协议中,PRF 起着至关重要的作用,确保客户端和服务器能够生成相同的密钥材料,实现安全的通信。

TLS 发展过程中的贡献卓著的伟大的人

TLS 的设计确实是一项天才的杰作,它汇集了众多密码学专家的智慧和努力。以下是 TLS 发展过程中的一些关键人物和事件:

早期发展:

  • Whitfield Diffie 和 Martin Hellman: 1976 年,他们发表了关于公钥密码学的开创性论文,提出了 Diffie-Hellman 密钥交换算法,为非对称加密奠定了基础。
  • Ron Rivest, Adi Shamir 和 Leonard Adleman: 1977 年,他们发明了 RSA 算法,这是第一个广泛应用的公钥加密算法,至今仍在 TLS 中使用。

SSL 协议的诞生:

  • Netscape Communications: 1994 年,Netscape 公司开发了 SSL (Secure Sockets Layer) 协议的早期版本,用于保护网络通信。SSL 1.0 从未公开发布,SSL 2.0 也因安全漏洞被弃用。

TLS 协议的演进:

IETF (Internet Engineering Task Force): 1999 年,IETF 将 SSL 3.0 标准化并更名为 TLS 1.0。此后,TLS 协议不断发展,陆续发布了 TLS 1.1、TLS 1.2 和 TLS 1.3。

密码学家和安全专家: 许多密码学家和安全专家为 TLS 协议的发展做出了贡献,包括:

  • Tim Dierks: OpenSSL 的主要开发者之一,对 TLS 的实现和普及做出了重要贡献。
  • Eric Rescorla: TLS 1.3 的主要设计者之一,推动了 TLS 协议的现代化。
  • Hugo Krawczyk: HMAC 算法的设计者之一,HMAC 在 TLS 中用于生成密钥和消息认证码。

TLS 1.3 的突破:

  • TLS 1.3 工作组: 一个由密码学家和安全专家组成的团队,共同设计了 TLS 1.3。
  • TLS 1.3 的改进: TLS 1.3 在安全性、性能和隐私性方面都有显著提升,成为目前最先进的 TLS 版本。

总结:

TLS 协议的发展是一个漫长而复杂的过程,涉及到众多密码学专家、安全研究人员、标准化组织和软件开发者的共同努力。正是他们的智慧和奉献,才使得 TLS 成为保护互联网通信安全的重要基石。