I2P의 Transport
I2P에서 “transport"는 두 router 간의 직접적인 지점 대 지점 통신을 위한 방법입니다. Transport는 외부 공격자로부터 기밀성과 무결성을 제공해야 하며, 동시에 연결된 router가 주어진 메시지를 받아야 할 올바른 대상인지 인증해야 합니다.
I2P는 여러 전송 방식을 동시에 지원합니다. 현재 구현된 전송 방식은 세 가지입니다:
각각은 인증, 흐름 제어, 확인 응답 및 재전송 기능을 갖춘 “연결” 패러다임을 제공합니다.
- I2NP 메시지의 신뢰할 수 있는 전달. 전송 계층은 I2NP 메시지 전달만을 지원합니다. 범용 데이터 파이프가 아닙니다.
- 모든 전송 계층에서 메시지의 순차적 전달이 보장되지는 않습니다.
- router가 전역 연락처 정보(RouterInfo)로 게시하는 router 주소 집합을 유지합니다. 각 전송 계층마다 하나 이상의 주소를 가지며, IPv4 또는 (버전 0.9.8부터) IPv6 주소일 수 있습니다.
- 각 발신 메시지에 대한 최적의 전송 계층 선택
- 우선순위별 발신 메시지 대기열 처리
- router 설정에 따른 발신 및 수신 대역폭 제한
- 전송 연결의 설정 및 해제
- 지점 간 통신 암호화
- 각 전송 계층의 연결 제한 유지, 이러한 제한에 대한 다양한 임계값 구현, 그리고 상태에 따른 운영 변경을 할 수 있도록 router에 임계값 상태 전달
- UPnP(Universal Plug and Play)를 사용한 방화벽 포트 개방
- 협력적 NAT/방화벽 통과
- UPnP, 들어오는 연결 검사, 네트워크 장치 열거 등 다양한 방법을 통한 로컬 IP 감지
- 전송 계층 간 방화벽 상태와 로컬 IP, 그리고 이들의 변경 사항 조정
- 방화벽 상태와 로컬 IP, 그리고 이들의 변경 사항을 router와 사용자 인터페이스에 전달
- NTP의 백업으로 router의 시계를 주기적으로 업데이트하는 데 사용되는 합의 시계 결정
- 각 피어의 상태 유지, 연결 여부, 최근 연결 여부, 마지막 시도에서 도달 가능 여부 포함
- 로컬 규칙 집합에 따른 유효한 IP 주소 검증
- router가 유지하는 자동 및 수동 금지된 피어 목록을 준수하고, 해당 피어에 대한 발신 및 수신 연결 거부
I2P의 전송 하위 시스템은 다음과 같은 서비스를 제공합니다:
전송 서비스
- router가 공개된 주소를 가지지 않아서 “숨겨진” 것으로 간주되며 들어오는 연결을 받을 수 없습니다
- router가 방화벽으로 보호되어 있어서, NAT 통과를 도와줄 협력 피어나 “introducer” 목록을 포함하는 SSU 주소를 공개합니다 (자세한 내용은 SSU 사양 을 참조하세요)
- router가 방화벽으로 보호되지 않거나 NAT 포트가 열려 있어서, 직접 접근 가능한 IP와 포트를 포함하는 NTCP와 SSU 주소를 모두 공개합니다.
전송 하위시스템은 router 주소 집합을 유지하며, 각 주소는 전송 방법, IP, 포트를 나열합니다. 이러한 주소들은 광고된 연결 지점을 구성하고, router에 의해 netDb에 게시됩니다. 주소는 또한 임의의 추가 옵션 집합을 포함할 수 있습니다.
전송 주소
각 전송 방법은 여러 router 주소를 게시할 수 있습니다.
일반적인 시나리오는 다음과 같습니다:
- 전송 선호도 구성
- 전송이 이미 피어에 연결되어 있는지 여부
- 다양한 연결 제한 임계값과 비교한 현재 연결 수
- 피어에 대한 최근 연결 시도가 실패했는지 여부
- 서로 다른 전송이 서로 다른 크기 제한을 갖기 때문에 메시지의 크기
- RouterInfo에서 광고된 바와 같이 피어가 해당 전송에 대한 수신 연결을 수락할 수 있는지 여부
- 연결이 간접적(introducer가 필요함)인지 직접적인지 여부
- RouterInfo에서 광고된 바와 같이 피어의 전송 선호도
전송 시스템은 I2NP 메시지 만을 전달합니다. 메시지에 대해 선택된 전송 방식은 상위 계층 프로토콜 및 내용(router 또는 클라이언트 메시지, 외부 애플리케이션이 I2P에 연결하기 위해 TCP 또는 UDP를 사용했는지 여부, 상위 계층이 스트리밍 라이브러리 또는 데이터그램 을 사용했는지 여부 등)과는 독립적입니다.
전송 방식 선택
각 송신 메시지에 대해 전송 시스템은 각 전송 방식으로부터 “입찰"을 요청합니다. 가장 낮은(최적) 값으로 입찰한 전송 방식이 입찰에서 승리하고 배송을 위해 메시지를 받습니다. 전송 방식은 입찰을 거부할 수 있습니다.
transport가 입찰하는지 여부와 어떤 값으로 입찰하는지는 다음과 같은 여러 요인에 따라 달라집니다:
일반적으로 bid 값은 두 router가 한 번에 하나의 전송 방식으로만 연결되도록 선택됩니다. 그러나 이는 필수 요구사항은 아닙니다.
- TLS/SSH와 유사한 전송 방식
- 모든 다른 router에서 접근할 수 없는 router를 위한 “간접” 전송 방식 (“제한된 경로"의 한 형태)
- Tor 호환 플러그형 전송
다음을 포함하여 추가적인 전송 방식들이 개발될 수 있습니다:
새로운 전송 방식과 향후 작업
각 전송 방식의 기본 연결 제한을 조정하는 작업이 계속되고 있습니다. I2P는 “메시 네트워크"로 설계되어 있으며, 모든 router가 다른 모든 router에 연결할 수 있다고 가정합니다. 이러한 가정은 연결 제한을 초과한 router들과 제한적인 상태 방화벽 뒤에 있는 router들(제한된 경로)에 의해 깨질 수 있습니다.
- TLS/SSH와 유사한 전송 방식
- 다른 모든 라우터로부터 접근할 수 없는 라우터를 위한 “간접” 전송 방식 (“제한된 경로"의 한 형태)
- Tor와 호환되는 확장 가능한 전송 방식(pluggable transports)
현재 연결 제한은 NTCP 연결의 메모리 요구사항이 SSU보다 높다는 가정에 기반하여 SSU가 NTCP보다 더 높게 설정되어 있습니다. 그러나 NTCP 버퍼는 부분적으로 커널에 있고 SSU 버퍼는 Java 힙에 있기 때문에, 이러한 가정을 검증하기는 어렵습니다.
Breaking and Improving Protocol Obfuscation 를 분석하고 전송 계층 패딩이 어떻게 상황을 개선할 수 있는지 확인해보세요.
프로토콜 난독화의 해제 및 개선 을 분석하고 전송 계층 패딩이 어떻게 상황을 개선할 수 있는지 살펴보세요.