<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.12) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-justo-goe2ee-latest" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="GoE2EE">GoE2EE: An End-to-End Encryption Protocol with Flexible Server Key Retrieval</title>

    <author initials="R. D." surname="Justo" fullname="Rafael Dantas Justo">
      <organization>Teamwork.com</organization>
      <address>
        <postal>
          <country>Ireland</country>
        </postal>
        <email>rafael@justo.net.br</email>
      </address>
    </author>

    <date year="2026" month="July" day="20"/>

    <area>Security</area>
    
    <keyword>Internet-Draft</keyword> <keyword>end-to-end encryption</keyword> <keyword>Diffie-Hellman</keyword> <keyword>AEAD</keyword>

    <abstract>


<?line 60?>

<t>This document specifies GoE2EE, an application-layer protocol that provides
end-to-end confidentiality and integrity between a client and a server using an
ephemeral Elliptic Curve Diffie-Hellman (ECDH) key exchange and an
Authenticated Encryption with Associated Data (AEAD) cipher. The protocol aims
to provide a security level comparable to TLS 1.3 while allowing a shared secret
to be reused across multiple connections originating from the same host,
reducing handshake overhead. GoE2EE runs over either TCP or UDP and offers
several strategies for a client to retrieve and authenticate the server's
long-term public key, including a strategy based on the DNSSEC chain of trust.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-justo-goe2ee/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rafaeljusto/goe2ee"/>.</t>
    </note>


  </front>

  <middle>


<?line 72?>

<section anchor="introduction"><name>Introduction</name>

<t>Transport Layer Security (TLS) <xref target="RFC8446"/> is the dominant protocol for
securing communication on the Internet. It couples confidentiality and
integrity with an authentication model that, in its most common deployment,
relies on the Web Public Key Infrastructure (PKI) and X.509 certificates
<xref target="RFC5280"/>.</t>

<t>GoE2EE is an application-layer protocol that provides similar cryptographic
guarantees to TLS 1.3 but decouples two concerns that TLS binds tightly
together:</t>

<t><list style="numbers" type="1">
  <t>how peers agree on a shared secret and encrypt traffic; and</t>
  <t>how the client obtains and authenticates the server's long-term public key.</t>
</list></t>

<t>For the first concern, GoE2EE performs an ephemeral ECDH key exchange so that
the shared secret is never transmitted over the network, derives a symmetric key
from that secret, and protects every subsequent message with an AEAD cipher.</t>

<t>For the second concern, GoE2EE deliberately leaves the trust model pluggable. A
client MAY authenticate the server's public key through the Web PKI, through the
DNSSEC chain of trust, through a pre-provisioned key, or, when no authentication
is acceptable, by retrieving the key directly from the server in-band.</t>

<t>A distinguishing feature of GoE2EE is that a shared secret is bound to a
client-chosen identifier rather than to a single transport connection.
Consequently, several connections from the same host MAY reuse a previously
negotiated secret and skip the handshake entirely, which reduces latency and
allows the protocol to operate efficiently over connectionless transports such
as UDP.</t>

<t>This document specifies the wire format, the cryptographic constructions, the
handshake and message-exchange procedures, and the security considerations of
the protocol. It corresponds to protocol version 1.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?></t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The following terms are used throughout this document:</t>

<dl>
  <dt>Client:</dt>
  <dd>
    <t>The peer that initiates a session and originates request messages.</t>
  </dd>
  <dt>Server:</dt>
  <dd>
    <t>The peer that answers requests and holds a long-term signing key pair.</t>
  </dd>
  <dt>Global key:</dt>
  <dd>
    <t>The server's long-term ("global") signing key pair. The server's public
global key is used by the client to authenticate the handshake.</t>
  </dd>
  <dt>Session identifier (id):</dt>
  <dd>
    <t>A 16-octet identifier chosen by the client and associated with a shared
secret. It is carried in requests so that the server can locate the
corresponding secret.</t>
  </dd>
  <dt>Shared secret:</dt>
  <dd>
    <t>The secret produced by the ECDH exchange, from which the symmetric key is
derived.</t>
  </dd>
  <dt>Counter:</dt>
  <dd>
    <t>A per-secret, strictly increasing 64-bit value used to derive AEAD nonces and
to detect replays.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="protocol-overview"><name>Protocol Overview</name>

<t>A GoE2EE session has two logical phases: a handshake phase and a
message-exchange phase.</t>

<t>During the handshake, the client generates an ephemeral ECDH key pair, chooses a
session identifier, and sends its public key to the server (the Setup action,
<xref target="setup"/>). The server generates its own ephemeral ECDH key pair, computes the
shared secret, and returns its public key together with a signature over the
handshake transcript produced with the server's long-term global key. The client
verifies the signature using the server's public global key, which it obtained
beforehand through one of the retrieval strategies in <xref target="key-retrieval"/>, and then
computes the same shared secret.</t>

<t>The full handshake is illustrated below.</t>

<figure title="Full handshake followed by message exchange."><artwork type="ascii-art"><![CDATA[
client                                             server
  |                                                  |
  |-- Setup: id + client ECDH public key ----------->|
  |                             (compute shared       |
  |                              secret, store by id) |
  |<-- Setup response: server ECDH public key + ------|
  |    hash-type + signature over transcript          |
  | (verify signature,                                |
  |  compute shared secret)                           |
  |                                                  |
  |== Process: id + counter + encrypted message ====>|
  |<===== Process response: counter + encrypted ======|
  |                                                  |
]]></artwork></figure>

<t>Because the shared secret is indexed by the session identifier and not by the
transport connection, a different connection from the same host that already
knows a valid secret and identifier MAY skip the handshake and issue Process
requests (<xref target="process"/>) directly.</t>

<figure title="Message exchange reusing a previously negotiated secret."><artwork type="ascii-art"><![CDATA[
client                                             server
  |                                                  |
  |== Process: id + counter + encrypted message ====>|
  |<===== Process response: counter + encrypted ======|
  |                                                  |
]]></artwork></figure>

<t>The server MUST maintain the mapping from session identifier to shared secret
(and the associated replay state, <xref target="replay"/>) for as long as it is willing to
accept messages for that session, which MAY outlive any individual transport
connection. The mechanism and lifetime of this state are implementation
choices.</t>

</section>
<section anchor="message-format"><name>Message Format</name>

<t>All messages are binary. Multi-octet integers are encoded in network byte order
(big-endian) unless stated otherwise.</t>

<section anchor="request-header"><name>Request Header</name>

<t>Every request begins with a single octet whose two 4-bit fields are the protocol
version and the action:</t>

<figure title="Request header."><artwork><![CDATA[
 0                   1
 0 1 2 3 4 5 6 7 8 9 ...
+-------+-------+---------------------------+
|version|action | message (variable)        |
+-------+-------+---------------------------+
]]></artwork></figure>

<dl>
  <dt>version (4 bits):</dt>
  <dd>
    <t>The protocol version. This document specifies version 1 (<spanx style="verb">0x1</spanx>). Up to 16
versions can be expressed.</t>
  </dd>
  <dt>action (4 bits):</dt>
  <dd>
    <t>An identifier that selects the request semantics. Up to 16 actions can be
expressed. This document defines the actions in <xref target="action-registry"/>.</t>
  </dd>
  <dt>message (variable):</dt>
  <dd>
    <t>Action-specific content. It MAY be empty.</t>
  </dd>
</dl>

<t>The fixed one-octet header, together with session identifiers carried inside
Process requests, is what allows a client to issue actions in any order and to
skip the handshake when a secret is already established.</t>

<t>The defined actions are:</t>

<texttable title="Actions defined in version 1." anchor="action-registry">
      <ttcol align='left'>Action</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Section</ttcol>
      <c><spanx style="verb">0x1</spanx></c>
      <c>Hello</c>
      <c><xref target="hello"/></c>
      <c><spanx style="verb">0x2</spanx></c>
      <c>Setup</c>
      <c><xref target="setup"/></c>
      <c><spanx style="verb">0x3</spanx></c>
      <c>Process</c>
      <c><xref target="process"/></c>
      <c><spanx style="verb">0x4</spanx></c>
      <c>Fetch Key</c>
      <c><xref target="fetch-key"/></c>
</texttable>

<t>A server that receives a request whose version it does not support MUST reply
with an error response (<xref target="error-response"/>) carrying error code
<spanx style="verb">0x04</spanx> (Unsupported version).</t>

</section>
<section anchor="success-response"><name>Success Response</name>

<t>When a request is processed successfully, the response begins with a single
octet whose most significant bit is set to 1:</t>

<figure title="Success response header."><artwork><![CDATA[
 0                   1
 0 1 2 3 4 5 6 7 8 9 ...
+-+-------------+---------------------------+
|1| reserved    | message (variable)        |
+-+-------------+---------------------------+
]]></artwork></figure>

<dl>
  <dt>success (1 bit):</dt>
  <dd>
    <t>Set to 1 to indicate success.</t>
  </dd>
  <dt>reserved (7 bits):</dt>
  <dd>
    <t>Reserved for future use. A sender MUST set these bits to 0 and a receiver
MUST ignore them.</t>
  </dd>
  <dt>message (variable):</dt>
  <dd>
    <t>Action-specific content. It MAY be empty.</t>
  </dd>
</dl>

</section>
<section anchor="error-response"><name>Error Response</name>

<t>Any request MAY produce an error response. An error response begins with a
single octet whose most significant bit is cleared to 0, followed by an error
code and an optional human-readable message:</t>

<figure title="Error response. resv = reserved bits, err = error, msg = message. Field widths in octets except where noted."><artwork><![CDATA[
+---+----------+--------------+--------------+---------------+
| 0 | resv (7) | err-code (4) | err-size (8) | err-msg (var) |
+---+----------+--------------+--------------+---------------+
]]></artwork></figure>

<dl>
  <dt>success (1 bit):</dt>
  <dd>
    <t>Cleared to 0 to indicate failure.</t>
  </dd>
  <dt>reserved (7 bits):</dt>
  <dd>
    <t>Reserved for future use; set to 0 on transmit and ignored on receipt.</t>
  </dd>
  <dt>error-code (4 octets):</dt>
  <dd>
    <t>An unsigned 32-bit integer identifying the error. Defined values appear in
<xref target="error-registry"/>.</t>
  </dd>
  <dt>error-message-size (8 octets):</dt>
  <dd>
    <t>An unsigned 64-bit integer giving the length in octets of the error message.</t>
  </dd>
  <dt>error-message (variable):</dt>
  <dd>
    <t>A UTF-8 diagnostic string of the indicated length. It MAY be empty and MUST
NOT be relied upon for automated decision-making.</t>
  </dd>
</dl>

<t>The defined error codes are:</t>

<texttable title="Error codes defined in version 1." anchor="error-registry">
      <ttcol align='left'>Error Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">0x00000001</spanx></c>
      <c>Malformed request</c>
      <c><spanx style="verb">0x00000002</spanx></c>
      <c>Server error</c>
      <c><spanx style="verb">0x00000003</spanx></c>
      <c>Unknown client</c>
      <c><spanx style="verb">0x00000004</spanx></c>
      <c>Unsupported version</c>
      <c><spanx style="verb">0x00000005</spanx></c>
      <c>Replay detected</c>
</texttable>

<t>A receiver MUST treat an error message whose declared size would exceed the
receiver's configured limits as a malformed response and abort the session. See
<xref target="dos"/>.</t>

</section>
</section>
<section anchor="cryptographic-constructions"><name>Cryptographic Constructions</name>

<section anchor="key-exchange"><name>Key Exchange</name>

<t>The ephemeral key exchange uses ECDH with the X25519 function <xref target="RFC7748"/>.
Public keys are exchanged encoded as a SubjectPublicKeyInfo structure in PKIX,
ASN.1 DER form (<xref section="4.1" sectionFormat="of" target="RFC5280"/>).</t>

<t>Each peer generates a fresh X25519 key pair for every handshake. The shared
secret is the X25519 output computed from one peer's private key and the other
peer's public key.</t>

</section>
<section anchor="key-derivation"><name>Key Derivation</name>

<t>The raw ECDH output MUST NOT be used directly as a symmetric key, as it is not
uniformly distributed. The symmetric key is derived using HKDF <xref target="RFC5869"/> with
SHA-256 <xref target="FIPS.180-4"/> as follows:</t>

<figure><artwork><![CDATA[
key = HKDF-SHA256(salt = "" (empty),
                  IKM  = ECDH shared secret,
                  info = "goe2ee/v1 aes-256-gcm",
                  L    = 32)
]]></artwork></figure>

<t>The <spanx style="verb">info</spanx> string provides domain separation and MUST be exactly the ASCII
string <spanx style="verb">goe2ee/v1 aes-256-gcm</spanx> for this version. The salt is empty (a string of
zero length). The output length L is 32 octets, producing a 256-bit key.</t>

</section>
<section anchor="authenticated-encryption"><name>Authenticated Encryption</name>

<t>Messages are protected with AES-256-GCM <xref target="FIPS.197"/> <xref target="NIST.SP.800-38D"/>, an
AEAD algorithm <xref target="RFC5116"/>, keyed with the 32-octet key from the previous
section. The authentication tag is 16 octets and is appended to the ciphertext.
The Associated Data is empty in this version.</t>

</section>
<section anchor="nonce"><name>Nonce Derivation</name>

<t>AES-GCM requires that a (key, nonce) pair never repeat. GoE2EE never transmits
nonces; instead each peer derives the 12-octet GCM nonce deterministically from
a direction octet and the message counter:</t>

<figure><artwork><![CDATA[
nonce[0]      = direction
nonce[1..3]   = 0x00 0x00 0x00
nonce[4..11]  = counter (64-bit, big-endian)
]]></artwork></figure>

<t>where the direction octet is:</t>

<texttable title="Nonce direction octets.">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Direction</ttcol>
      <c><spanx style="verb">0x00</spanx></c>
      <c>client to server</c>
      <c><spanx style="verb">0x01</spanx></c>
      <c>server to client</c>
</texttable>

<t>The direction octet ensures that the two halves of a conversation never derive
the same nonce from the same counter under the shared secret. The counter MUST
strictly increase for every message a peer sends under a given secret (see
<xref target="counter-rules"/>). Together these guarantee nonce uniqueness, which is required
for the security of AES-GCM.</t>

</section>
<section anchor="transcript"><name>Handshake Transcript Signature</name>

<t>The server authenticates the handshake by signing a transcript that binds both
ephemeral public keys and the session identifier. The transcript is the
concatenation:</t>

<figure title="Handshake transcript. clen/slen = client/server key size. Field widths in octets except where noted."><artwork><![CDATA[
+----------+------------+----------+------------+---------+
| clen (4) | client-key | slen (4) | server-key | id (16) |
+----------+------------+----------+------------+---------+
]]></artwork></figure>

<t>where <spanx style="verb">client-key</spanx> and <spanx style="verb">server-key</spanx> are the DER-encoded SubjectPublicKeyInfo
representations of the client and server ephemeral public keys, each prefixed by
its 32-bit big-endian length, and <spanx style="verb">id</spanx> is the 16-octet session identifier.</t>

<t>Signing the full transcript rather than the server key alone binds the signature
to both parties and to the specific session, so a valid signature cannot be
transplanted onto a different key exchange.</t>

<t>The signature is produced with the server's long-term global key. The signature
algorithm depends on the type of the global key (<xref target="key-registry"/>):</t>

<t><list style="symbols">
  <t>RSA keys: RSASSA-PKCS1-v1_5 <xref target="RFC8017"/> over the hash of the transcript.</t>
  <t>ECDSA keys: ECDSA over the hash of the transcript, with the signature encoded
as an ASN.1 DER sequence.</t>
  <t>Ed25519 keys: Ed25519 <xref target="RFC8032"/> over the transcript. Note that for Ed25519
the hash type carried in the response (<xref target="setup"/>) selects the digest applied
to the transcript before signing; the pure Ed25519 algorithm is used (not
Ed25519ph).</t>
</list></t>

<t>The hash function used to build the digest is signalled by the hash-type field
of the Setup response:</t>

<texttable title="Hash types." anchor="hash-registry">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Hash</ttcol>
      <c><spanx style="verb">0x2</spanx></c>
      <c>SHA-256</c>
      <c><spanx style="verb">0x3</spanx></c>
      <c>SHA-384</c>
      <c><spanx style="verb">0x4</spanx></c>
      <c>SHA-512</c>
</texttable>

<t>SHA-1 is intentionally omitted because it is cryptographically broken. A client
MUST reject a Setup response that specifies a hash type it does not support.</t>

</section>
</section>
<section anchor="actions"><name>Actions</name>

<section anchor="hello"><name>Hello</name>

<t>The Hello action is a liveness check. It carries no message body.</t>

<t>Request:</t>

<figure><artwork><![CDATA[
+-------+-------+
|  0x1  |  0x1  |
+-------+-------+
]]></artwork></figure>

<t>Response: a success response (<xref target="error-response"/> defines the failure form) with
an empty message body.</t>

</section>
<section anchor="setup"><name>Setup</name>

<t>The Setup action performs the key exchange. The client sends its session
identifier and ephemeral public key; the server replies with its ephemeral
public key and a signature over the transcript (<xref target="transcript"/>).</t>

<t>Request:</t>

<figure title="Setup request. pklen = public-key size. Field widths in octets except where noted."><artwork><![CDATA[
+-----+-----+---------+-----------+------------+
| 0x1 | 0x2 | id (16) | pklen (4) | public-key |
+-----+-----+---------+-----------+------------+
]]></artwork></figure>

<dl>
  <dt>id (16 octets):</dt>
  <dd>
    <t>A client-chosen identifier for the secret, formatted as a UUID <xref target="RFC4122"/>.
It MUST be unique per host so that the server can distinguish concurrent
sessions from the same host, including those traversing intermediaries such
as proxies. The client SHOULD choose it so that it is unpredictable to other
parties.</t>
  </dd>
  <dt>public-key-size (4 octets):</dt>
  <dd>
    <t>The length in octets of the following public key.</t>
  </dd>
  <dt>public-key (variable):</dt>
  <dd>
    <t>The client's ephemeral X25519 public key, DER-encoded SubjectPublicKeyInfo.</t>
  </dd>
</dl>

<t>Response:</t>

<figure title="Setup response. pklen = public-key size, htype = hash-type, siglen = signature size, sig = signature. Field widths in octets except where noted."><artwork><![CDATA[
+---+------+-----------+--------+-----------+------------+-----+
| 1 | resv | pklen (4) | pubkey | htype (1) | siglen (8) | sig |
+---+------+-----------+--------+-----------+------------+-----+
]]></artwork></figure>

<dl>
  <dt>public-key-size (4 octets):</dt>
  <dd>
    <t>The length in octets of the server's public key.</t>
  </dd>
  <dt>public-key (variable):</dt>
  <dd>
    <t>The server's ephemeral X25519 public key, DER-encoded SubjectPublicKeyInfo.</t>
  </dd>
  <dt>hash-type (1 octet):</dt>
  <dd>
    <t>The hash used to build the signed digest (<xref target="hash-registry"/>).</t>
  </dd>
  <dt>signature-size (8 octets):</dt>
  <dd>
    <t>The length in octets of the signature.</t>
  </dd>
  <dt>signature (variable):</dt>
  <dd>
    <t>The signature over the handshake transcript (<xref target="transcript"/>), produced with
the server's global key.</t>
  </dd>
</dl>

<t>On receiving the Setup response, the client MUST rebuild the transcript from its
own public key, the server's public key, and the session identifier, and MUST
verify the signature using the server's public global key. If verification
fails, the client MUST abort the session and MUST NOT send Process requests for
that identifier. On success, the client computes the shared secret from its
private key and the server's public key.</t>

</section>
<section anchor="process"><name>Process</name>

<t>The Process action exchanges application data protected by the shared secret.</t>

<t>Request:</t>

<figure title="Process request. E = expect-reply flag, r = reserved flags, ctr = counter, mlen = encrypted-message size, enc-msg = encrypted message. Field widths in octets except where noted."><artwork><![CDATA[
+-----+-----+---+------+---------+---------+----------+---------+
| 0x1 | 0x3 | E | r(7) | id (16) | ctr (8) | mlen (8) | enc-msg |
+-----+-----+---+------+---------+---------+----------+---------+
]]></artwork></figure>

<dl>
  <dt>E (expect-reply, 1 bit):</dt>
  <dd>
    <t>When set to 1, the client expects a response. When cleared to 0, the request
is fire-and-forget and the server SHOULD NOT send a response. This is useful
over UDP to avoid a return trip.</t>
  </dd>
  <dt>reserved-flags (7 bits):</dt>
  <dd>
    <t>Reserved for future use; set to 0 on transmit and ignored on receipt.</t>
  </dd>
  <dt>id (16 octets):</dt>
  <dd>
    <t>The session identifier chosen during Setup, identifying the shared secret.</t>
  </dd>
  <dt>counter (8 octets):</dt>
  <dd>
    <t>The per-secret message counter (see <xref target="counter-rules"/>), used both to derive the
nonce (<xref target="nonce"/>) and to detect replays (<xref target="replay"/>).</t>
  </dd>
  <dt>encrypted-message-size (8 octets):</dt>
  <dd>
    <t>The length in octets of the ciphertext (including the AEAD tag).</t>
  </dd>
  <dt>encrypted-message (variable):</dt>
  <dd>
    <t>The application payload encrypted with AES-256-GCM under the derived key,
using the nonce derived from direction <spanx style="verb">0x00</spanx> and this counter.</t>
  </dd>
</dl>

<t>If the server does not recognise the identifier, it MUST reply with error code
<spanx style="verb">0x03</spanx> (Unknown client). If the counter is a replay or falls before the replay
window, the server MUST reply with error code <spanx style="verb">0x05</spanx> (Replay detected). If
decryption or tag verification fails, the server MUST treat the request as
malformed (<spanx style="verb">0x01</spanx>).</t>

<t>Response (sent only when E is set):</t>

<figure title="Process response. Field widths in octets except where noted."><artwork><![CDATA[
+-+----------+-----------+---------------------+---------------+
|1| reserved |counter (8)| enc-msg-size (8)    | enc-msg (var) |
+-+----------+-----------+---------------------+---------------+
]]></artwork></figure>

<dl>
  <dt>counter (8 octets):</dt>
  <dd>
    <t>The counter from the request being answered. The server derives the response
nonce from direction <spanx style="verb">0x01</spanx> and this counter.</t>
  </dd>
  <dt>encrypted-message-size (8 octets):</dt>
  <dd>
    <t>The length in octets of the response ciphertext (including tag).</t>
  </dd>
  <dt>encrypted-message (variable):</dt>
  <dd>
    <t>The response payload encrypted under the same shared secret.</t>
  </dd>
</dl>

<section anchor="counter-rules"><name>Counter Rules</name>

<t>The counter is a property of the shared secret, not of a transport connection.
A client MUST ensure that every Process request it sends under a given secret
carries a strictly greater counter than any previous request under that secret.
When a secret is shared across several connections from the same host (see
<xref target="reuse"/>), the counter MUST be incremented atomically so that no value is ever
reused across those connections.</t>

<t>The server echoes the request counter in the response and derives the response
nonce from it with the server-to-client direction octet. Because request and
response use different direction octets, the same counter value in both
directions does not cause a nonce collision.</t>

</section>
</section>
<section anchor="fetch-key"><name>Fetch Key</name>

<t>The Fetch Key action lets a client retrieve the server's public global key
in-band. This method provides no authentication of the key and is therefore
vulnerable to man-in-the-middle attacks; it MUST NOT be used when an
authenticated retrieval strategy (<xref target="key-retrieval"/>) is available.</t>

<t>Request:</t>

<figure><artwork><![CDATA[
+-------+-------+
|  0x1  |  0x4  |
+-------+-------+
]]></artwork></figure>

<t>Response:</t>

<figure title="Fetch Key response. keyalg = key-algorithm, pklen = public-key size. Field widths in octets except where noted."><artwork><![CDATA[
+---+------+------------+-----------+------------+
| 1 | resv | keyalg (1) | pklen (4) | public-key |
+---+------+------------+-----------+------------+
]]></artwork></figure>

<dl>
  <dt>key-algorithm (1 octet):</dt>
  <dd>
    <t>The algorithm of the returned key, used to parse it (<xref target="key-registry"/>).</t>
  </dd>
  <dt>public-key-size (4 octets):</dt>
  <dd>
    <t>The length in octets of the public key.</t>
  </dd>
  <dt>public-key (variable):</dt>
  <dd>
    <t>The server's public global key.</t>
  </dd>
</dl>

<t>The defined key algorithms are:</t>

<texttable title="Global key algorithms." anchor="key-registry">
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">0x1</spanx></c>
      <c>RSA</c>
      <c><spanx style="verb">0x2</spanx></c>
      <c>ECDSA</c>
      <c><spanx style="verb">0x3</spanx></c>
      <c>Ed25519</c>
</texttable>

</section>
</section>
<section anchor="key-retrieval"><name>Server Public Key Retrieval</name>

<t>The security of the handshake rests on the client authenticating the server's
public global key. This document does not mandate a single trust model; it
defines the following strategies, of which a client MUST use an authenticated
one unless the deployment explicitly accepts the risk of an unauthenticated key:</t>

<dl>
  <dt>DNSSEC:</dt>
  <dd>
    <t>The client retrieves the key from a DNSKEY resource record of the server's
domain name and validates it through the DNSSEC chain of trust <xref target="RFC4033"/>.
To protect the resolution path between the client and the recursive resolver,
the client SHOULD use DNS over HTTPS <xref target="RFC8484"/>.</t>
  </dd>
  <dt>Web PKI:</dt>
  <dd>
    <t>The client obtains an X.509 certificate <xref target="RFC5280"/> for the server, for
example over an HTTPS connection to the server's domain, and validates it
against a trusted certification authority.</t>
  </dd>
  <dt>Pre-provisioned:</dt>
  <dd>
    <t>The key is provided to the client out of band, for example as a PEM file.</t>
  </dd>
  <dt>In-band (Fetch Key):</dt>
  <dd>
    <t>The client retrieves the key using the Fetch Key action (<xref target="fetch-key"/>). This
strategy is unauthenticated and is NOT RECOMMENDED.</t>
  </dd>
</dl>

<t>The choice of strategy is a local deployment decision and does not affect the
wire format of the handshake.</t>

</section>
<section anchor="reuse"><name>Secret Reuse and Connection Pooling</name>

<t>Because a shared secret is bound to a session identifier rather than to a
transport connection, a client MAY reuse an established secret for multiple
connections to the same host and MAY skip the handshake on those connections,
issuing Process requests directly. This reduces both round trips and
cryptographic work.</t>

<t>A client that reuses a secret across connections MUST coordinate the counter as
described in <xref target="counter-rules"/> so that nonces are never reused. Implementations
that pool connections SHOULD share a single counter, incremented atomically, per
secret.</t>

<t>The server retains the association between identifier, shared secret, and replay
state independently of any connection, so it can serve Process requests for a
known identifier that arrive on a fresh connection.</t>

</section>
<section anchor="transport-considerations"><name>Transport Considerations</name>

<t>GoE2EE operates over either TCP or UDP. Over TCP, the transport provides
ordering and delivery guarantees. Over UDP, the protocol imposes none: messages
may be lost, reordered, or duplicated.</t>

<t>The replay window (<xref target="replay"/>) tolerates limited reordering, and the
deterministic nonce derivation (<xref target="nonce"/>) does not require in-order delivery.
The fire-and-forget mode of the Process action (<xref target="process"/>) is particularly
suited to UDP, where avoiding a return trip can significantly reduce overhead
for small payloads.</t>

<t>Applications that require reliable, ordered delivery SHOULD use TCP or provide
their own reliability layer above GoE2EE.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="server-authentication-and-trust-model"><name>Server Authentication and Trust Model</name>

<t>The confidentiality of a GoE2EE session depends entirely on the client
authenticating the server's public global key before trusting the handshake
signature. If a client accepts an unauthenticated key -- notably one obtained
through the Fetch Key action (<xref target="fetch-key"/>) -- an active attacker can mount a
man-in-the-middle attack, presenting its own key and relaying or reading all
traffic. Deployments SHOULD use an authenticated retrieval strategy
(<xref target="key-retrieval"/>).</t>

</section>
<section anchor="handshake-integrity"><name>Handshake Integrity</name>

<t>The server signs a transcript (<xref target="transcript"/>) that includes both ephemeral
public keys and the session identifier. This binds the signature to the specific
key exchange and session, preventing a signature captured from one handshake
from being replayed into another. The client MUST verify this signature and MUST
abort on failure.</t>

<t>The protocol as specified does not authenticate the client to the server at the
cryptographic layer; any client that can present a valid identifier and correctly
encrypted messages will be served. Deployments that require client
authentication MUST provide it at the application layer or by another mechanism.</t>

</section>
<section anchor="nonce-uniqueness"><name>Nonce Uniqueness</name>

<t>AES-GCM catastrophically fails if a (key, nonce) pair is ever reused: an
attacker who observes two messages encrypted with the same key and nonce can
recover the authentication subkey and forge messages <xref target="NIST.SP.800-38D"/>.
GoE2EE relies on the strictly increasing per-secret counter and the direction
octet (<xref target="nonce"/>) to guarantee uniqueness. Implementations MUST ensure the
counter never repeats or goes backwards for a given secret, including across
pooled connections (<xref target="counter-rules"/>), and MUST stop using a secret before the
64-bit counter would wrap.</t>

</section>
<section anchor="replay"><name>Replay Protection</name>

<t>The server maintains, per secret, a sliding-window replay filter in the style of
the IPsec anti-replay algorithm <xref target="RFC6479"/>. The window tracks the highest
counter seen and a bitmap of the 64 counter values immediately below it. A
message is accepted only if its counter has not been seen before and is not older
than the window; otherwise the server rejects it with error code <spanx style="verb">0x05</spanx> (Replay
detected). This bounds the reordering the server tolerates over unreliable
transports while preventing an attacker from replaying captured Process
requests.</t>

<t>Because replay state is per secret and outlives connections, an implementation
that reuses a secret across connections shares one replay window for all of
them, consistent with the shared counter requirement.</t>

</section>
<section anchor="forward-secrecy"><name>Forward Secrecy</name>

<t>Each handshake uses fresh ephemeral X25519 key pairs, so the compromise of a
server's long-term global key does not by itself reveal the shared secrets of
past sessions. However, reusing a shared secret across many connections
(<xref target="reuse"/>) enlarges the amount of data protected by a single key and the impact
of that secret's compromise. Deployments SHOULD bound the lifetime and volume of
data associated with any single secret and re-run the handshake periodically.</t>

</section>
<section anchor="dos"><name>Denial of Service</name>

<t>Several fields are length-prefixed with sizes up to 64 bits. A malicious peer
could advertise an enormous size to force large allocations. Implementations
MUST enforce sane upper bounds on the sizes of public keys, signatures, and
encrypted messages before allocating, and MUST reject messages that exceed those
bounds as malformed. The server also holds per-secret state indexed by
client-chosen identifiers; an implementation SHOULD bound the number of
concurrent sessions and expire idle state to limit memory exhaustion.</t>

</section>
<section anchor="downgrade-and-versioning"><name>Downgrade and Versioning</name>

<t>The version field (<xref target="action-registry"/>) allows future evolution. A server MUST
reject unsupported versions (<spanx style="verb">0x04</spanx>). Because the version and action occupy a
single unauthenticated header octet at the start of each request, deployments
concerned with downgrade across versions SHOULD ensure that any future version
that changes the cryptographic constructions also changes the HKDF <spanx style="verb">info</spanx> label
so that keys are not shared across versions.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

<t>The actions (<xref target="action-registry"/>), error codes (<xref target="error-registry"/>), hash types
(<xref target="hash-registry"/>), and key algorithms (<xref target="key-registry"/>) defined here are
namespaces internal to the protocol and are not requested for registration in
any IANA registry by this document. Should this protocol be standardized, the
creation of IANA registries for these code points would be appropriate.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC4122">
  <front>
    <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <author fullname="M. Mealling" initials="M." surname="Mealling"/>
    <author fullname="R. Salz" initials="R." surname="Salz"/>
    <date month="July" year="2005"/>
    <abstract>
      <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4122"/>
  <seriesInfo name="DOI" value="10.17487/RFC4122"/>
</reference>
<reference anchor="RFC5280">
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname="D. Cooper" initials="D." surname="Cooper"/>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="W. Polk" initials="W." surname="Polk"/>
    <date month="May" year="2008"/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5280"/>
  <seriesInfo name="DOI" value="10.17487/RFC5280"/>
</reference>
<reference anchor="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>
<reference anchor="RFC7748">
  <front>
    <title>Elliptic Curves for Security</title>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="January" year="2016"/>
    <abstract>
      <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7748"/>
  <seriesInfo name="DOI" value="10.17487/RFC7748"/>
</reference>
<reference anchor="RFC5116">
  <front>
    <title>An Interface and Algorithms for Authenticated Encryption</title>
    <author fullname="D. McGrew" initials="D." surname="McGrew"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5116"/>
  <seriesInfo name="DOI" value="10.17487/RFC5116"/>
</reference>
<reference anchor="NIST.SP.800-38D" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf">
  <front>
    <title>Recommendation for block cipher modes of operation :GaloisCounter Mode (GCM) and GMAC</title>
    <author fullname="M J M JDworkin" initials="M J" surname="Dworkin"/>
    <author>
      <organization abbrev="NIST">National Institute of Standards and Technology</organization>
      <address>
        <postal>
          <country>US</country>
          <city>Gaithersburg</city>
        </postal>
      </address>
    </author>
    <date year="2007"/>
  </front>
  <seriesInfo name="NIST Special Publications (General)" value="800-38d"/>
  <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38d"/>
</reference>

<reference anchor="FIPS.180-4" target="https://csrc.nist.gov/pubs/fips/180-4/upd1/final">
  <front>
    <title>Secure Hash Standard (SHS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 180-4"/>
</reference>
<reference anchor="FIPS.197" target="https://csrc.nist.gov/pubs/fips/197/final">
  <front>
    <title>Advanced Encryption Standard (AES)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2001" month="November"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 197"/>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC6479">
  <front>
    <title>IPsec Anti-Replay Algorithm without Bit Shifting</title>
    <author fullname="X. Zhang" initials="X." surname="Zhang"/>
    <author fullname="T. Tsou" initials="T." surname="Tsou"/>
    <date month="January" year="2012"/>
    <abstract>
      <t>This document presents an alternate method to do the anti-replay checks and updates for IP Authentication Header (AH) and Encapsulating Security Protocol (ESP). The method defined in this document obviates the need for bit shifting and it reduces the number of times an anti-replay window is adjusted. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6479"/>
  <seriesInfo name="DOI" value="10.17487/RFC6479"/>
</reference>
<reference anchor="RFC4033">
  <front>
    <title>DNS Security Introduction and Requirements</title>
    <author fullname="R. Arends" initials="R." surname="Arends"/>
    <author fullname="R. Austein" initials="R." surname="Austein"/>
    <author fullname="M. Larson" initials="M." surname="Larson"/>
    <author fullname="D. Massey" initials="D." surname="Massey"/>
    <author fullname="S. Rose" initials="S." surname="Rose"/>
    <date month="March" year="2005"/>
    <abstract>
      <t>The Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System. This document introduces these extensions and describes their capabilities and limitations. This document also discusses the services that the DNS security extensions do and do not provide. Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4033"/>
  <seriesInfo name="DOI" value="10.17487/RFC4033"/>
</reference>
<reference anchor="RFC8484">
  <front>
    <title>DNS Queries over HTTPS (DoH)</title>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="P. McManus" initials="P." surname="McManus"/>
    <date month="October" year="2018"/>
    <abstract>
      <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8484"/>
  <seriesInfo name="DOI" value="10.17487/RFC8484"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8017">
  <front>
    <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
    <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
    <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
    <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
    <author fullname="A. Rusch" initials="A." surname="Rusch"/>
    <date month="November" year="2016"/>
    <abstract>
      <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
      <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
      <t>This document also obsoletes RFC 3447.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8017"/>
  <seriesInfo name="DOI" value="10.17487/RFC8017"/>
</reference>
<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>



    </references>

</references>


<?line 767?>

<section numbered="false" anchor="acknowledgements"><name>Acknowledgements</name>

<t>The design of GoE2EE draws on the architecture of TLS 1.3 <xref target="RFC8446"/> and on
established constructions for key derivation <xref target="RFC5869"/>, authenticated
encryption <xref target="NIST.SP.800-38D"/>, and anti-replay <xref target="RFC6479"/>.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

