概述
本提案旨在改进 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 的说法,可能性很小),通信可能会被阻止。