# 23、Https加密流量解析技术分析

LLMS index: [llms.txt](/wikis/llms.txt)

---

加密技术是最常用的安全保密手段，能够保护数据不被窥视，但是也产生了新的问题，一方面是应用系统业务流量加密后，企业自身基于流量内容分析的旁路安全设备将失效，另一方面，攻击者会借助加密流量实施恶意攻击，避开各类NTA产品的检测。

针对加密流量，目前主流的攻击分析手段包括解密后分析和不解密分析。现在网上大多数的文章都是针对“不解密条件下识别和阻断恶意流量”进行分析，在和客户沟通过程中，发现大家其实一直对“如何进行业务加密流量解密分析”存在疑问，只知道针对现有HTTPS的业务，将加密流量通过镜像的方式转发给安全设备探针，安全设备即使导入了证书和服务端私钥也没法解析出内容，却不知道为什么。另外，众多安全厂商宣称其Tap镜像网、数据防泄漏、邮件审计、流量分析产品有旁路解密方案，又是如何做到的？我们慢慢往下看。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/750f13ca450232800d21902d0264ca24_MD5.jpg)

本文主要针对HTTPS业务，解析安全设备对其流量进行解密的条件和原理，未尽之处，欢迎大家探讨指正。

**HTTPS加解密原理**

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/710da336f67553d06a487b9a10c6a4b7_MD5.png)

要知道HTTPS业务的流量加解密原理，首先要知道HTTPS业务的加解密方式和流程。如下图，HTTPS在HTTP的基础上，通过传输加密和身份认证来保证传输过程的安全性，利用TLS和SSL对通信协议进行加密。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/9fceea6632ce4899bde1d6f1c6a03d4c_MD5.jpg)

**为什么HTTPS要用对称+非对称加密？**

我们首先来复习一下对称加密、非对称加密和散列函数

对称加密指的是加密和解密使用同一个秘钥，对称加密只有一个秘钥。优点：计算量小、加密速度快、加密效率高，缺点：秘钥的管理和分发非常困难，不够安全。

非对称加密指的是加密和解密使用不同的秘钥，一把作为公开的公钥，另一把作为私钥，公钥加密的信息，只有私钥才能解密，私钥加密的信息，只有公钥才能解密，私钥只能由一方安全保管，不能外泄，而公钥则可以发给任何请求它的人。优点：安全性更高，公钥是公开的，秘钥是自己保存的，密匙分发和密匙管理相对简单。缺点：加密和解密花费时间长、速度慢，只适合对少量数据进行加密。

散列函数是一种单向密码体制，指的是对信息进行加密，生成不可逆的固定长度的哈希值，一般用于完整性验证和数字签名场景，如验证数据在传输过程中没有被篡改。

总的来说，对称加密算法效率高，可以防窃听，但是要解决密钥交换安全问题；非对称加密的加解密效率低，适合用于认证，不适合用于内容传输，可以防窃听和防仿冒；散列函数不可逆的特性可以防止信息被非法篡改。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/4e201050d2093fc247e6fbf9cd15ea45_MD5.jpg)

HTTPS将如上的技术整合，达到性能和安全的最大化。在HTTPS的交互流程中，客户端发起 HTTPS 请求，服务端返回CA证书，客户端对证书进行身份验证，验证通过后本地生成用于对称加密算法的随机数，通过CA证书中提取的服务器公钥对随机数进行加密传输到服务端，服务端接收后通过服务器私钥解密得到随机数，之后的数据交互通过对称加密算法，使用随机数生成的对称密钥进行加解密。

HTTPS通过非对称加密算法防止”中间人“攻击，同时可以为网站提供身份证明，并通过对称加密对HTTPS 的内容传输进行加密。

**HTTPS加解密和数据传输流程**

简单来说，HTTPS业务的加解密和数据传输流程可以分三个阶段：证书验证、密钥交换、数据交换。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/b412a1955e5bebe8761c9ffe72aee0bf_MD5.jpg)

从上图可以看出：

数据交换阶段主要用于应用系统业务数据的加解密，也就是我们常规理解的数据加密，而该阶段的对话密钥是通过密钥交换阶段计算生成的，对称加密算法实现了业务数据的高效加解密。

密钥交换阶段实现了对称密钥在不安全环境的安全交换，如DH算法，就是利用离散对数计算问题，通过对方的公开值和自己的私有值计算出对称密钥，实现密钥安全交换。

证书验证阶段通过CA证书和数字签名，验证服务器身份，此处使用了非对称加密和散列函数算法，防止用户文件被篡改或伪造。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/7398bd8a9c981aee23555e5013a2d6d0_MD5.jpg)



**为什么我有证书和私钥，**

**还是不能看加密镜像流量？**

在这里，回到最开始的第一个问题“**针对现有HTTPS的业务，将加密流量通过镜像的方式发给安全设备探针，安全设备即使导入了证书和服务端私钥也没法解析出业务数据内容**”，我们可以发现**关键节点在于密钥交换环节**，如果我们能够通过服务器私钥或者其他某种方式，将密钥交换环节中的保密随机数进行解析，就能获得整个数据交换环节的业务数据内容。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/965b2af971083282b7c7881e288cb8c9_MD5.jpg)

显然，通过RSA算法进行密钥交换时，只要中间人拿到服务端私钥就可以实现明文解包，也就是说，如果我们的HTTPS业务使用的密钥交换算法是RSA，是可以将加密镜像流量进行解密的，那为什么实际业务中解密不了呢？

如上图， DH的加密算法创造的目的就是防止这种解密方式，所以只要了解DH的原理，就能回答这个问题。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/c83e213d972f8b37ba6c740abe1be1c6_MD5.jpg)

**DH算法原理介绍**

简单来说DH算法是双方协商用同一个大素数p和 素数p的原根q，各自生成随机数X,Y。请求方将q的X次方mod p产生的数值发送给接收方，接收方将q的Y次方mod p产生的数值发送给请求方。请求方再对接收的数值做X次方运算，接收方对接收的数值做Y次方运算，最终生成一样的共享密钥，完成密钥的交换。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/d3dca0419324cbbd3ceec3499d424312_MD5.jpg)

①A发给B：A的公钥

②B根据A的公钥，创建只针对A使用的公钥（AB-公）和私钥（AB-私）

③B发给A：AB-公

④A用自己的私钥和对方的公钥算出S：A的私钥+AB-公=S1=S

⑤B用自己的私钥和对方的公钥算出S：AB-私+A的公钥=S2=S

⑥A和B交互的数据，都可以用S解密。所以此时双方就可以正常加密通信了。



举个例子

①首先A和B协商一个随机二元组，q.p（3.7）。

A和B各自在（1，p-1）中取一个随机保密数da、db

并根据da、db算出pa、pb。

A和B所属范围（1,6）——da=05、db=6

pa=q^da mod p = 3^5 mod 7 = 5

pb=q^da mod p = 3^6 mod 7 = 1



②a和b对pa、pb值进行交互，并计算出共享秘钥S

S=pb^da mod p = pa^db mod p = 1

**DH如何防止流量被劫持后通过暴力破解的方式进行解密？**

中间人劫持流量能够拿到的信息有：q.p（3.7），pa、pb。中间人只需要算出da或者S就能对流量进行解密了。所以题目变成了：

已知公式：pa=q^da mod p，S=pb^da mod p

已知数：q、p、pa、pb

已知范围：da（q.p-1）

求S的值。

我们设N为mod后的商，商一定为整数。则可以得知：

da=log（q）（p*n+pa） 因为da（q.p-1）

所以n的取值范围为：（q^q-pa）/p到（q^（p-1）-pa）/p

因为pa是除以p的余数所以pa<p,< font="">可以忽略不计。

n的取值范围约等于q^q/p到（q^（p-1））/p

最终算出公式：s=pb^log(q)(p*n+pa) mod p，其中q、p、pa、pb为已知数，n为已知范围内的整数，看上去只需要进行遍历就可以破解秘钥了。

用q.p(3.7)套进去计算发现：

n为1-103 ，s唯一值=1,

但是当用q.p(3.1004535809)套进去计算发现：

n约有3^1004535809个，通过暴力破解的方式计算出来已经失去了时效性。甚至当p值更大时，这个值已经无法计算了。

**哪些情况下可以实现旁路解密**  
在目前实际HTTPS业务中，基本采用DH类具备前向安全性的密钥交换算法，所以通过服务端私钥解密的方式在目前基本行不通了，如下图是一个实际HTTPS业务从浏览器看到的内容，可以看出密钥交换算法是ECDHE（DH的升级版），签名加密算法是RSA，会话加密算法是AES。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/6099a040beab109b3ae52d4e5428ab47_MD5.jpg)

回到最开始的第二个问题，“众多安全厂商宣称其Tap镜像网、数据防泄漏、邮件审计、流量分析产品有旁路解密方案，又是如何做到的？”。我们来看看某厂商的《xx产品解密算法说明》。

![](/wikis/_resources/23%E3%80%81HTTPS%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E8%A7%A3%E6%9E%90%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90/347f7fefd765917c9f91695df7340736_MD5.jpg)

可以发现，里面列了一长串的支持协议，但是用于解密的关键——密钥交换协议都是RSA，如果用了dh之类的前向安全协议，旁路就解密不了，这个场景在现在来看还是比较少见的。

讲到这里，也就解答了“业务加密流量解密分析”涉及的一些技术原理，我们知道了流量解密的关键在于密钥交换使用的是RSA还是DH，我们知道目前大部分 HTTPS 流量用的都是 ECDHE 密钥交换，那我们对明文流量做分析可以怎么做呢？安全设备如何部署和发挥作用呢？我们下次再来回答这些问题，针对负载均衡、waf等具备解包功能的产品进行分析，详细了解其在不同密钥交换方式、不同部署方式下的区别。
