加密通信的最后一块拼图(先有鸡还是先有蛋?)

世界最大的 CDN 服务商 Cloudflare 发了一篇博客文章,宣称解决了”加密通信的最后一块拼图”。
网络安全从业者工作难度增加!!!

什么是加密的 SNI(ESNI)

加密的服务器名称指示(ESNI)是保护用户浏览数据的私密性的一项重要功能。它确保正在侦听的第三方无法监视 TLS 握手流程并以此确定用户正在访问哪些网站。顾名思义,ESNI 通过加密 TLS 握手的服务器名称指示(SNI)部分来实现其目的。

SNI 告诉 Web 服务器在客户端与服务器之间的连接开始时显示哪个 TLS 证书。SNI 是 TLS 协议的补充,它使服务器可以在同一 IP 地址上托管多个 TLS 证书。

可以将 SNI 视为邮寄地址的公寓号码:一栋大楼中有多间公寓,因此每间公寓都需要一个不同的编号来加以区分。类似地,虽然服务器由 IP 地址标示,但是客户端设备需要在其发送给服务器的第一条消息中包括 SNI,以指示其试图访问哪个网站(哪间公寓)。

底层逻辑

底层加密机制涉及使用Diffie-Hellman 密钥交换算法,该算法允许客户端和服务器通过不受信任的通道生成共享加密密钥。因此,加密的 SNI 加密密钥是在客户端使用服务器的公钥(实际上是 Diffie-Hellman 半静态密钥共享的公共部分)和由以下方法生成的临时 Diffie-Hellman 共享的私有部分来计算的:客户端本身是动态的,并在 ClientHello 发送到服务器后立即被丢弃。附加数据(例如客户端作为其 ClientHello 消息的一部分发送的一些加密参数)也混合到加密过程中以进行良好的测量。

然后,客户端的 ESNI 扩展将不仅包括实际加密的 SNI 位,还包括客户端的公钥共享、用于加密的密码套件以及服务器的 ESNI DNS 记录的摘要。另一方面,服务器使用自己的私钥共享和客户端共享的公共部分来生成加密密钥并解密扩展。

虽然这看起来过于复杂,但这确保了加密密钥以加密方式与其生成的特定 TLS 会话相关联,并且不能在多个连接中重复使用。这可以防止攻击者观察客户端发送的加密扩展,只需捕获它并在单独的会话中将其重播到服务器,以揭露用户尝试连接的网站的身份(这称为“剪切”)并粘贴”攻击)。

然而,服务器私钥的泄露将使从其生成的所有 ESNI 对称密钥面临危险(这将允许观察者解密之前收集的加密数据),这就是为什么 Cloudflare 自己的 SNI 加密实现每小时轮换服务器密钥以提高前向保密性,但会跟踪前几个小时的密钥,以允许 DNS 缓存和复制延迟,以便密钥稍微过时的客户端仍然可以毫无问题地使用 ESNI(但最终所有密钥都会被丢弃和遗忘)。

新的技术

Cloudflare 将免费启用加密 SNI,因此无需执行任何操作即可在 Cloudflare 网站上启用它。在浏览器方面,Firefox 预计本周将在Firefox Nightly中添加加密 SNI 支持

Tips:,加密 SNI 规范仍在开发中,因此还不稳定。


加密通信的最后一块拼图(先有鸡还是先有蛋?)
https://worisur.github.io/2023/10/26/2023-10-18.加密通信的最后一块拼图/
作者
worisur
发布于
2023年10月26日
许可协议