隧道构建消息选项

Proposal 143
Rejected
Author zzz
Created 2018-01-14
Last Updated 2022-01-28

注意

该提案未按指定实现, 然而,ECIES 长短构建消息(提案 152 和 157)设计了可扩展的选项字段。 请参见 Tunnel Creation ECIES 规范 查看官方规范。

概述

在隧道构建和隧道构建回复消息中,添加一个灵活、可扩展的机制,用于 I2NP 隧道构建记录中的选项。

动机

有一些尚未记录的提案即将设定隧道构建消息中的选项或配置, 因此隧道的创建者可以将一些参数传递给每一个隧道跳。

TBM 中有 29 个备用字节。我们希望在保持灵活性的同时,也能明智地利用空间。 使用“映射”结构每个选项至少会使用 6 个字节(“1a=1b;")。 严格定义更多的选项字段可能会在以后引起问题。

本文档提出了一种新的、灵活的选项映射方案。

设计

我们需要一个既紧凑又灵活的选项表示,以便我们可以将多个不同长度的选项容纳在 29 字节内。 这些选项尚未定义,目前也没有定义的必要。 不要使用“映射”结构(它编码了一个 Java 属性对象),因为这太浪费。 使用一个数字来表示每个选项和长度,从而实现紧凑而灵活的编码。 选项必须在我们的规范中按数字注册,但我们也将保留一个范围用于实验选项。

规范

初步 – 下面描述了几种替代方案。

如果标志(字节 184)中的第 5 位设置为 1,则只有在这种情况下才会出现。

每个选项为两个字节的选项编号和长度,后跟长度字节数的选项值。

选项从字节 193 开始,并最多持续到最后一个字节 221。

选项编号/长度:

两字节。位 15-4 是 12 位选项编号,1 - 4095。 位 3-0 是后续选项值字节的数量,0 - 15。 一个布尔选项可以没有值字节。 我们将在规范中维护一个选项编号的注册表,并且还定义一个范围用于实验选项。

选项值是 0 到 15 字节,需由需要该选项的内容解释。未知的选项编号应被忽略。

选项以一个编号/长度为 0/0 的选项结束,也就是两个 0 字节。 如果有剩余字节,应像往常一样用随机填充填满。

这种编码为我们提供了 14 个 0 字节选项或 9 个 1 字节选项或 7 个 2 字节选项的空间。 另一种方法是仅使用一个字节来表示选项编号/长度, 或许使用 5 位表示选项编号(最多 32),3 位表示长度(最多 7)。 这将把容量增加到 28 个 0 字节选项、14 个 1 字节选项或 9 个 2 字节选项。 我们还可以使其可变,其中 5 位选项编号为 31 表示读取 8 更多位以获取选项编号。

如果隧道跳需要向创建者返回选项,我们可以在隧道构建回复消息中使用相同的格式, 并在前缀中添加一些几个字节的魔数(因为没有定义标志字节来指示选项的存在)。 TBRM 中有 495 个备用字节。

注意

这些更改适用于隧道构建记录,因此可以用于所有构建消息风味 - 隧道构建请求、可变隧道构建请求、隧道构建回复和可变隧道构建回复。

迁移

隧道构建记录中的未使用空间用随机数据填充并且目前被忽略。 该空间可以转换为包含选项而不会出现迁移问题。 在构建消息中,选项的存在通过标志字节表示。 在构建回复消息中,选项的存在通过一个多字节魔数表示。