Internet-Draft Aether Protocol July 2026
Fomicheva Expires 28 January 2027 [Page]
Workgroup:
Independent Submission
Internet-Draft:
draft-fomicheva-aether-00
Published:
Intended Status:
Informational
Expires:
Author:
V. Fomicheva
Aether Protocol Working Group

Aether: A Next-Generation L4 Transport

Abstract

This document specifies Aether, a transport-layer protocol (L4) designed for modern network environments requiring multiplexed streams without head-of-line blocking, mandatory encryption with post-quantum resistance, multi-path routing, and self-sovereign identity at the protocol layer. Aether operates entirely in userspace without kernel modifications.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 28 January 2027.

Table of Contents

1. Introduction

1.1. Motivation

Transport-layer protocols have evolved slowly. TCP [RFC9293] provides reliable, ordered delivery but suffers from head-of-line blocking and requires separate TLS for encryption. UDP [RFC768] is lightweight but unreliable. QUIC [RFC9000] addresses many of TCP's shortcomings but is tightly coupled to HTTP/3.

Aether is a general-purpose L4 transport protocol designed for:

  • Stream multiplexing without head-of-line blocking
  • Mandatory encryption with post-quantum resistance
  • Multi-path connections (seamless network switching)
  • Self-sovereign identity at the protocol layer
  • Userspace operation (no kernel modifications required)

1.2. Design Philosophy

Table 1: Design Principles and Application in Aether
Principle Application in Aether
Simple core Fixed 16-byte base header; features via extensions
Security non-optional AEAD encryption from first packet; no plaintext mode
Versioning First packet declares version and capabilities
Self-describing Protocol metadata embedded in handshake
Userspace-first No OS kernel modifications required

2. Wire Format

2.1. Base Header (16 bytes)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ver |  Type   |H|E|R|         Stream ID                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Offset (32 bits)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Length (32 bits)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Connection ID (32 bits, short header)             |
|         or Destination Connection ID (long header)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1
Table 2: Header Fields
Field Bits Description
Ver 4 Protocol version. Starts at 0.
Type 6 Packet type (see Section 2.3)
H 1 0 = Short header, 1 = Long header
E 1 Extensions present
R 2 Reserved (MUST be 0)
Stream ID 18 Stream identifier (0..262143)
Offset 32 Byte offset in stream
Length 32 Payload length (bytes)
Cnx ID 32/64 Short: 32-bit truncated CID. Long: 64-bit full Dest CID.

2.2. Long Header

Long header adds 8 additional bytes after the base header containing the Source Connection ID (64 bits). Total: Long Header = 24 bytes, Short Header = 16 bytes.

2.3. Packet Types

Table 3: Packet Types (6-bit Type field)
Code Name Purpose Header
0x00 Initial First packet, ClientHello Long
0x01 Handshake Crypto handshake Long
0x02 Data User stream data Short
0x03 Ack Packet acknowledgement Short
0x04 Close Connection close + code Short
0x05 Ping Keep-alive Short
0x06 PathChallenge Validate new path Short
0x07 PathResponse Confirm path Short
0x08 StreamOpen Open new stream Short
0x09 StreamClose Close stream (FIN) Short
0x0A-0x3F Reserved For future use -

2.4. Extension Chain

When bit E is set, a TLV extension chain follows the header. Chain terminates with Ext Type 0x00.

Table 4: Extension Types
Code Name Description
0x01 Timestamp Sender timestamp (64-bit, microseconds)
0x02 Priority Stream priority (8 bits)
0x03 Padding Anti-traffic-analysis padding
0x04 PathId Multi-path identifier
0x05 FlowControl Window update

3. Handshake

3.1. Handshake Phases

The handshake completes in 1-RTT:

Client                                  Server
  |                                       |
  |--- Initial (ClientHello) ------------>|
  |                                       |
  |<-- Initial (ServerHello) -------------|
  |                                       |
  |--- Handshake (ClientFinished) ------->|  Client can now send Data
  |                                       |
  |<-- Handshake (ServerFinished) --------|  Server can now send Data
  |                                       |
  |<======= Data (Encrypted) ===========>|
Figure 2

3.2. ClientHello

CBOR-encoded, inside AEAD-encrypted Initial packet payload. Contains: protocol version (0), 64-bit random client CID, supported version list, crypto parameters (Kyber768 + X25519, AES-256-GCM, SHA-256), capabilities (multipath, max_streams, max_stream_data, ack_frequency, idle_timeout_ms), and an Ed25519 identity public key.

3.3. ServerHello

CBOR-encoded response containing: echoed client CID, server CID, Kyber768 ciphertext, X25519 ephemeral public key, server capabilities, and server Ed25519 identity with proof (signature of transcript).

3.4. Key Derivation

After ClientHello and ServerHello exchange:

shared_secret = Kyber768.Decapsulate(kem_ciphertext)
                || X25519.DH(client_ephemeral, server_classical_pk)

transcript = ClientHello || ServerHello

session_key = HKDF-Expand(
    HKDF-Extract("AETHER-v0", shared_secret),
    transcript,
    256 bits
)

client_tx_key = HKDF-Expand(session_key, "client-tx", key_len)
server_tx_key = HKDF-Expand(session_key, "server-tx", key_len)
Figure 3

ClientFinished and ServerFinished carry HMAC-SHA256(session_key, transcript). Symmetric keys are destroyed after 3x PTO following connection close, providing Perfect Forward Secrecy.

4. Streams

Each stream identified by 18-bit Stream ID (0..262143). Stream ID 0 reserved for control. Client opens streams with EVEN IDs; server with ODD IDs. Streams are independent: loss in one stream does not block others.

Stream lifecycle: IDLE -> (StreamOpen) -> OPEN -> (StreamClose FIN) -> HALF-CLOSED -> (StreamClose ACK) -> CLOSED.

Flow control operates at two levels: Connection-level (total in-flight data) and Stream-level (in-flight data per stream). Initial windows: Stream = 1 MiB, Connection = 16 MiB. Each Data packet carries an Offset (byte position). Receivers send Ack frames with received offset ranges. Unacknowledged packets are retransmitted with exponential back-off up to MAX_RETRANSMISSIONS (10).

5. Multi-Path

Connections are identified by Connection ID, not IP address. This enables path migration:

  1. Client detects a new network interface (e.g., 5G after Wi-Fi).
  2. Client sends PathChallenge from new IP to server.
  3. Server responds with PathResponse, confirming the new path belongs to the same connection.
  4. Server begins sending data on both paths.
  5. Client may duplicate data on both paths for reliability.

Each path has a unique Path ID (Extension Type 0x04). Packets from different paths are multiplexed onto common streams; the receiver reassembles by Offset. When one path is lost, data automatically flows through remaining paths without connection interruption.

6. Congestion Control

The default congestion control algorithm is Aether-CC, a hybrid of BBRv3 [BBR] and NewReno [RFC6582], optimized for high-latency satellite links, variable-bandwidth mobile networks, and noisy channels (distinguishing loss from congestion).

Bandwidth estimation: delivery_rate = bytes_acked / time_delta; max_bw = max(max_bw, delivery_rate). RTT estimation: min_rtt = min(min_rtt, latest_rtt) over 10-second window. Congestion window: cwnd = max_bw * min_rtt * gain (gain: 1.25 during probing, 0.75 during drain).

Loss classification: loss with low RTT and rising delivery_rate indicates congestion; loss with high RTT and stable delivery_rate indicates channel noise (window not reduced). Pluggable algorithms: "aether-cc" (default), "bbrv3", "cubic", "none" (testing).

7. Security Considerations

Aether has no plaintext mode. All packets are encrypted: Initial packets with AEAD key derived from initial salt, Handshake packets with AEAD keys derived from shared_secret, Data packets with AEAD session_key.

The handshake uses Kyber-768 [FIPS203] as primary KEM with X25519 [RFC7748] as classical fallback, providing post-quantum resistance as long as at least one algorithm remains secure.

Metadata protection: Connection ID in short header is a 32-bit truncated value; Padding extension (0x03) allows random bytes for packet size obfuscation; Multipath data streams complicate passive traffic analysis.

Each connection generates ephemeral keys. Compromise of an identity key does not reveal past sessions (Perfect Forward Secrecy).

8. Identity Layer

Aether introduces cryptographic identity at the transport layer. Each node has an Ed25519 [RFC8032] key pair. Identity is: identity = SHA-256("AETHER-ID-" || Ed25519_public_key). During handshake, the node proves key ownership by signing the transcript.

Advantages: DNS/CA/PKI independent (self-sovereign identity), IP mobility (IP changes do not affect identity), decentralized (no central registry required), W3C DID compatible (identity representable as a DID).

9. Connection Close

Graceful close: Sender -> Close (NO_ERROR), Receiver -> Close (NO_ERROR). Keys destroyed after 3x PTO.

Table 5: Error Codes
Code Name Description
0x00 NO_ERROR Normal closure
0x01 INTERNAL_ERROR Internal error
0x02 PROTOCOL_VIOLATION Protocol violation
0x03 CRYPTO_ERROR Cryptographic error
0x04 FLOW_CONTROL_ERROR Flow control limit exceeded
0x05 TIMEOUT Idle timeout
0x06 VERSION_NEGOTIATION Incompatible version
0x07 REFUSED Connection refused
0x08 IDENTITY_REJECTED Identity not accepted

10. Discovery

Local discovery (LAN): Multicast group 224.0.0.251:9000 (IPv4), ff02::fb:9000 (IPv6). Periodic announcements every 30 seconds. Announcement format: Initial packet with type "Announce" in extensions.

Global discovery (WAN): Kademlia-based DHT (as in libp2p). DHT key = peer identity. DHT value = set of (IP, port, Connection ID) tuples. Enables peer location by identity without a centralized server.

11. Constants

Table 6: Protocol Constants
Constant Value Description
AETHER_DEFAULT_PORT 9000 Default port
AETHER_VERSION 0 Current protocol version
MAX_PACKET_SIZE 1400 Max packet size (MTU safe)
MAX_STREAM_ID 262143 Max Stream ID (18 bits)
IDLE_TIMEOUT_MS 30000 Connection idle timeout (ms)
PTO_BASE_MS 100 Base Probe Timeout (ms)
MAX_RETRANSMISSIONS 10 Max retransmit attempts
INITIAL_CWND 10 * MSS Initial congestion window
INITIAL_STREAM_WINDOW 1048576 Initial stream window (bytes)
INITIAL_CONNECTION_WINDOW 16777216 Initial connection window (bytes)

12. Comparison with Existing Protocols

Table 7: Protocol Comparison
Feature TCP UDP QUIC SCTP Aether
Reliable Yes No Yes Yes Yes
Multiplexing No No Yes* Yes Yes
Encryption No** No Yes No** Yes
Multi-path No No v2 Yes Yes
Userspace No Yes Yes No Yes
Identity layer No No No No Yes
PQC-ready No No WIP No Yes
NAT friendly Yes No Yes No Yes
HOL blocking Yes No Per stream No No

* HTTP-tied. ** Requires separate TLS/DTLS layer.

13. IANA Considerations

This document requires no IANA actions. Future revisions may request a well-known port assignment for port 9000.

14. Reference Implementation

A reference implementation of Aether Protocol v0.1 is available in the Rust programming language at https://github.com/nikaafo/aether-protocol.

Components:

License: MIT OR Apache-2.0.

15. References

15.1. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, , <https://www.rfc-editor.org/rfc/rfc2119>.
[RFC5869]
Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)", RFC 5869, , <https://www.rfc-editor.org/rfc/rfc5869>.
[RFC7748]
Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves for Security", RFC 7748, , <https://www.rfc-editor.org/rfc/rfc7748>.
[RFC8032]
Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC 8032, , <https://www.rfc-editor.org/rfc/rfc8032>.
[RFC8446]
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, , <https://www.rfc-editor.org/rfc/rfc8446>.
[RFC9000]
Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed and Secure Transport", RFC 9000, , <https://www.rfc-editor.org/rfc/rfc9000>.
[FIPS203]
NIST, "Module-Lattice-Based Key-Encapsulation Mechanism Standard", FIPS 203, .

15.2. Informative References

[RFC6582]
Henderson, T., Floyd, S., Gurtov, A., and Y. Nishida, "The NewReno Modification to TCP's Fast Recovery Algorithm", RFC 6582, , <https://www.rfc-editor.org/rfc/rfc6582>.
[RFC768]
Postel, J., "User Datagram Protocol", STD 6, RFC 768, , <https://www.rfc-editor.org/rfc/rfc768>.
[RFC9293]
Eddy, W., "Transmission Control Protocol (TCP)", STD 7, RFC 9293, , <https://www.rfc-editor.org/rfc/rfc9293>.
[BBR]
Cardwell, N., "BBR: Congestion-Based Congestion Control", ACM Queue , .

Author's Address

Veronika Fomicheva
Aether Protocol Working Group