NTCP 混淆

Proposal 106
已拒绝
Author zzz
Created 2010-11-23
Last Updated 2014-01-03
Superceded by: 111

概述

本提案旨在改进 NTCP 传输,以提高其对自动识别的抵抗力。

动机

NTCP 数据在第一条消息后加密(并且第一条消息看起来是随机数据),从而防止通过“有效载荷分析”进行协议识别。然而,它仍然容易通过“流量分析”进行协议识别。这是因为前四条消息(即握手)是固定长度的(288、304、448 和 48 字节)。

通过向每条消息添加随机量的随机数据,我们可以大大增加识别的难度。

NTCP 的修改

这相当复杂,但它可以防止 DPI 设备的任何检测。

将以下数据添加到 288 字节的消息 1 的末尾:

  • 一个 514 字节的 ElGamal 加密块
  • 随机填充

ElG 块是用 Bob 的公钥加密的。当解密到 222 字节时,它包含:

  • 214 字节的随机填充
  • 4 字节保留的 0
  • 2 字节后续的填充长度
  • 2 字节的协议版本和标志

在消息 2-4 中,填充的最后两个字节现在将指示后续填充的长度。

请注意,ElG 块没有完美的前向保密性,但其中没有有趣的信息。

我们可以修改我们的 ElG 库,使其能够加密更小的数据显示大小,如果我们认为 514 字节太多了?每个 NTCP 设置的 ElG 加密会不会过多?

对此的支持将通过选项“version=2”在 netdb RouterAddress 中进行广告。如果消息 1 中仅接收到 288 字节,则假定 Alice 是版本 1,并且在后续消息中不发送填充。请注意,如果 MITM 将 IP 分片到 288 字节(根据 Brandon 的说法,可能性很小),通信可能会被阻止。