TLS层如何使用非对称加密保护数据安全

TLS层

TLS(Transport Layer Security)传输层安全,为网络流量提供了一种通用可行的加密方案。大量应用的网络连接加密方案均使用TLS,包括HTTPS、SMTPS、Open VPN、MySQL等常见应用,且开发者也可以轻松为自己的网络应用添加TLS支持。目前其最新版本为TLS v1.3。

TLS采用非对称加密技术来避免流量被中间人窃听或篡改,本文仅会在下面简单介绍其数学原理,不会过多讨论。

目前主流的非对称加密方案,都是基于计算机计算大质因数分解或求解离散对数的复杂性的,例如我们可以轻易算出487358143418387 * 362528313977273 = 176681126036561847184048318651,但反过来将该数分解为两个质数相乘却异常困难。

随着量子计算机的发展,这类基于大质因数分解和离散对数复杂性的非对称加密方式有可能被将来诞生的量子计算机破解,所以近年出现了基于容错学习的格密码的非对称加密方式,但由于其诞生较晚,安全性尚未被广泛验证,所以浏览器会混合使用传统方案与新方案,以提供最大的安全性保障。

本文仅会讲解基于RSA和DH的密钥交换方案,其分别代表了加密传输共享密钥与计算共享密钥,其他密钥交换方式大同小异,主要差异来源于其中的数学原理。

非对称加密

在了解RSA之前,先了解一下什么是非对称加密。顾名思义,非对称加密是与对称加密相对的一个概念。例如我将Hello中的每个字母都替换为其后面的第5个字母,这串消息就被加密为了Mjqqt,而解密方法则是同样用5这个数字向前替换即可,数字5则是这次加密里的密钥。这种加密方和解密方共用一个密钥的加密方式,就是对称加密。电子计算机出现前人类上千年的密码史中,从凯撒密码到Enigma,所使用的加密方案都是对称加密。现代计算机常用的对称加密方式有AES、chacha20等。

非对称加密则是一种反直觉的加密方式,是直到电子计算机面世后才出现相关的研究。在非对称加密中,密钥并非是双方共享的,而是分为了公钥和私钥。相比对称加密使用同一个密钥进行加解密,非对称加密性质则更为特殊:公钥加密的数据,公钥本身无法解密,只有私钥才能解密;而私钥加密的数据,私钥自身也无法解密,只有公钥才能解密。

在实际使用时,公钥会向所有人公开,而私钥则由密钥的创建者保留,此后我们可以将密钥创建者称为服务器。当有人希望给服务器发消息时,他可以先向服务器申请其公钥,并用该公钥将信息加密并发送。由于公钥加密的消息只有私钥能够解密,公钥自身也无法解密,所以即使中间人获得了公钥与被加密的信息,也无法破解。当然,如果中间人可以修改通信内容为自己的公钥,就需要用到本文后面提到的公钥基础设施了。

此时,我们就已经基于非对称加密实现了基本安全、基本可用的安全传输方式了。当然,事实上的TLS协议并不会这么简单,我们需要根据实际情况,一步步完善,看看TLS究竟是如何构建网络世界的铜墙铁壁的。

让我们来看看我们刚才实现的最简陋的安全传输模型。

  1. 服务端生成一对密钥。
  2. 客户端向服务端请求公钥。
  3. 客户端用公钥加密信息。
  4. 客户端将被加密的信息发给服务端。

现在,一个只能监听的中间人就看不到客户端发给服务端的消息了,但是服务端却无法安全地给客户端回复消息,因为服务端没从客户端那里得到什么可用于加密的信息。为了能让服务端也可以安全地给客户端回复消息,我们需要引入密钥交换机制。

密钥交换

为了让服务端能够安全地给客户端回复消息,我们可以让客户端也有一对非对称加密密钥,服务端再从客户端获取密钥,然后如法炮制。

  1. 服务端与客户端各生成一对密钥。
  2. 客户端向服务端请求公钥。
  3. 客户端用服务端公钥加密信息。
  4. 客户端将客户端的公钥与被加密的信息发给服务端。
  5. 服务端用客户端公钥加密信息,并发给客户端。

问题确实解决了,但是非对称加密密钥的性能并不好,这种方式很浪费性能。我们注意到,客户端第一次向服务端发送数据时,这些数据就已经是加密的了,所以,我们完全可以让客户端给服务端发送一个客户端生成的对称密钥,并且将来的会话中就使用该对称密钥,这样双方就不必总是使用消耗性能的非对称加密了。这就是RSA密钥交换的雏形。

RSA密钥交换

在RSA密钥交换下,客户端和服务端使用交换得到的对称密钥进行沟通,其流程如下。

  1. 服务端生成一对密钥。
  2. 客户端向服务端请求公钥。
  3. 客户端生成一个对称密钥K
  4. 客户端用公钥加密K,并发给服务端。
  5. 客户端与服务端使用对称加密进行交流。

DH密钥交换

公钥基础设施

CA机构

证书结构

证书链

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2025 Ytyan

请我喝杯咖啡吧~