터널 빌드 메시지 옵션

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 Properties 객체를 인코딩함); 너무 낭비가 심합니다. 각 옵션과 길이를 표시하기 위해 숫자를 사용하며, 이는 컴팩트하고 유연한 인코딩을 제공합니다. 옵션은 우리의 사양에 따라 번호로 등록되어야 하지만, 실험용 옵션을 위한 범위도 예약할 것입니다.

명세

예비 - 여러 대안이 아래에 설명되어 있습니다.

이 옵션은 플래그(바이트 184)의 비트 5가 1로 설정된 경우에만 존재합니다.

각 옵션은 2바이트 옵션 번호와 길이, 그리고 뒤에 오는 길이 바이트의 옵션 값으로 구성됩니다.

옵션은 바이트 193에서 시작하여 최대 마지막 바이트 221까지 계속됩니다.

옵션 번호/길이:

2바이트입니다. 비트 15-4는 12비트 옵션 번호이며, 1 - 4095입니다. 비트 3-0은 뒤에 오는 옵션 값 바이트의 수입니다, 0 - 15. 불리언 옵션은 0 값 바이트를 가질 수 있습니다. 옵션 번호의 레지스트리를 우리의 사양에 유지할 것이며, 실험용 옵션을 위한 범위도 정의할 것입니다.

옵션 값은 0에서 15 바이트이며, 해당 옵션을 필요로 하는 것에 의해 해석됩니다. 알 수 없는 옵션 번호는 무시해야 합니다.

옵션은 0/0 옵션 번호/길이로 결론지어지며, 이는 두 개의 0 바이트입니다. 남은 29바이트, 만약 있다면, 일반적인 대로 랜덤 패딩으로 채워져야 합니다.

이 인코딩은 14개의 0바이트 옵션, 또는 9개의 1바이트 옵션, 또는 7개의 2바이트 옵션에 대한 공간을 제공합니다. 대안으로, 아마도 옵션 번호 5 비트(최대 32)과 길이 3 비트(최대 7)만을 사용하는 방법이 있습니다. 이렇게 하면 28개의 0바이트 옵션, 14개의 1바이트 옵션, 9개의 2바이트 옵션을 수용할 수 있습니다. 또한, 옵션 번호 31이 추가 옵션 번호를 읽도록 의미하는 5 비트 옵션 번호로 가변적일 수 있습니다.

터널 홉이 생성자에게 옵션을 반환해야 하는 경우, 우리는 몇 바이트의 매직 넘버로 접두어가 붙은 터널 빌드 응답 메시지에서 동일한 형식을 사용할 수 있습니다 (플래그 바이트에 옵션이 있음을 나타내는 정의된 바이트가 없으므로). TBRM에는 495개의 여유 바이트가 있습니다.

노트

이 변경사항은 터널 빌드 레코드에 적용되며, 따라서 모든 빌드 메시지 종류 - 터널 빌드 요청, 가변 터널 빌드 요청, 터널 빌드 응답, 가변 터널 빌드 응답에서 사용할 수 있습니다.

마이그레이션

랜덤 데이터로 채워진 터널 빌드 레코드의 사용되지 않은 공간은 현재 무시됩니다. 이 공간은 마이그레이션 문제가 없이 옵션을 포함하도록 변환될 수 있습니다. 빌드 메시지에서는 플래그 바이트에 옵션의 존재가 표시됩니다. 빌드 응답 메시지에서는 여러 바이트의 매직 넘버로 옵션의 존재가 표시됩니다.