当 Tor 客户端构建电路时,它会使用节点的 TLS 证书和公钥与它为其电路选择的每个节点协商 TLS 会话。每个 TLS 会话协商的结果是一个对称加密密钥,只有客户端和节点知道。
单独的 SSL/TLS(没有 PKI)无法防止主动 MITM 攻击,因此(看起来)能够拦截客户端传出流量的人可以获得每个 Tor 中继节点的对称密钥。
Tor 如何防止这种情况发生?是否有一些证书颁发机构负责验证和签署中继节点的证书?
当 Tor 客户端构建电路时,它会使用节点的 TLS 证书和公钥与它为其电路选择的每个节点协商 TLS 会话。每个 TLS 会话协商的结果是一个对称加密密钥,只有客户端和节点知道。
单独的 SSL/TLS(没有 PKI)无法防止主动 MITM 攻击,因此(看起来)能够拦截客户端传出流量的人可以获得每个 Tor 中继节点的对称密钥。
Tor 如何防止这种情况发生?是否有一些证书颁发机构负责验证和签署中继节点的证书?
Tor 项目托管一些称为目录服务器的引导服务器。它们包含一个列表(一个目录),其中包含有关当前在线的所有 Tor 中继的信息。有关每个中继的信息包括公钥。该目录使用目录密钥[1] 之一进行签名。这些密钥与您的 Tor 客户端副本一起分发[2]。
因此,您的问题的答案是:拥有受信任的第三方(类似于证书颁发机构)。Tor 中继(在论文中称为洋葱路由器)定期将其信息上传到目录[3]。当客户端连接到他们的保护节点时,他们会检查连接是否使用正确的密钥加密,如目录中所列。然后,当代理流量到中间节点(保护和出口节点之间)时,他们建立到该节点的加密连接,通过保护代理,并再次检查使用正确的密钥(而不是 MITM 密钥)使用目录。最终(退出)节点也是如此。
来源:https ://www.onion-router.net/Publications/tor-design.pdf
[1] “每个洋葱路由器维护一个长期身份密钥和一个短期洋葱密钥。身份密钥用于签署 TLS 证书,签署 OR 的路由器描述符(其密钥、地址、带宽、出口的摘要)策略等),以及(通过目录服务器)签署目录。”
[2] “客户端软件预先加载了目录服务器及其密钥的列表,以引导每个客户端的网络视图。”
[3] “Tor 使用一小组冗余的著名洋葱路由器来跟踪网络拓扑和节点状态的变化,包括密钥和退出策略。每个这样的目录服务器都充当 HTTP 服务器,因此客户端可以获取当前网络状态和路由器列表,因此其他 OR 可以上传状态信息。”
一般来说,SSL/TLS 确实提供 MITM 保护。它在数据离开您的计算机之前对其进行加密,只有端点可以解密,反之亦然。MITM 攻击对加密的 TLS 连接无效,因为即使您拦截了端点交换的公钥,它仍然不知道它们的私钥。
至于 Tor,它不会在节点级别加密您的数据。数据通过端点之间的握手进行加密,因此在传输过程中无法更改。Tor 使用这些 TLS 连接加密的是路由指令。发送数据的计算机建立一个受加密层保护的传送指令包。基本上,节点 A 解密了第一层,这告诉它节点 B 是谁,但其他所有内容仍然是加密的。节点 B 运行另一层解密以查找节点 C 并重复该过程直到到达端点。
因此,任何节点都可以访问的唯一数据是链中的下一个节点。其他一切仍然不可读。由于没有可操作的未加密数据,因此 CA 是无关紧要的。(也就是说,Luc 的回答表明 Tor 维护自己的 CA 只是为了确定。)