<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<rfc category="std"
    consensus="true"
     docName="draft-ietf-ipsecme-eesp-ikev2-02"
     ipr="trust200902"
    sortRefs="true"
    submissionType="IETF"
    symRefs="true"
    tocDepth="3"
    tocInclude="true"
    version="3">
  <front>
    <title abbrev="EESP IKEv2 negotiation">IKEv2 negotiation for Enhanced Encapsulating Security Payload (EESP)</title>
<author initials='S.' surname='Klassert' fullname='Steffen Klassert'><organization abbrev="secunet">secunet Security Networks AG</organization>
<address><email>steffen.klassert@secunet.com</email></address>
</author>
<author initials='A.' surname='Antony' fullname='Antony Antony'><organization abbrev="secunet">secunet Security Networks AG</organization>
<address><email>antony.antony@secunet.com</email></address>
</author>
<author initials='T.' surname='Brunner' fullname='Tobias Brunner'><organization abbrev="">codelabs GmbH</organization>
<address><email>tobias@codelabs.ch</email></address>
</author>
<author initials='V.' surname='Smyslov' fullname='Valery Smyslov'><organization abbrev="">ELVIS-PLUS</organization>
<address><email>svan@elvis.ru</email></address>
</author>
  <date/>
    <area>SEC</area>
    <workgroup>IPSECME Working Group</workgroup>
<keyword>EESP</keyword>
<keyword>IKEv2</keyword>
<abstract><t>This document specifies how to negotiate the use of the Enhanced
Encapsulating Security Payload (EESP) protocol using the Internet Key
Exchange protocol version 2 (IKEv2). The EESP protocol, which is
defined in <xref target="I-D.ietf-ipsecme-eesp"/>, provides the same security
services as Encapsulating Security Payload (ESP), but has richer
functionality and provides better performance in specific
circumstances. This document specifies negotiation of version 0 of
EESP.</t></abstract>
  </front>
  <middle>

<section title="Introduction">
<t>The Enhanced Encapsulating Security Payload (EESP), specified in
<xref target="I-D.ietf-ipsecme-eesp"/>, introduces enhancements to the
Encapsulating Security Payload (ESP) defined in <xref target="RFC4303"/>. These
improvements address evolving requirements in modern IPsec
deployments. EESP offers increased flexibility for hardware
offloads at the packet level. It adds a Session ID (e.g., to
support CPU pinning and QoS support based on the inner traffic
flow) and enables the establishment of Sub SAs with independent
keys and sequence number spaces. Additionally, it
supports the use of 64-bit sequence numbers transmitted in each
packet or the omission of sequence numbers when the Replay Protection
service is not needed or cannot be achieved (e.g. in some multicast
scenarios). EESP packets carry a version number, enabling easier
support for future extensions.</t>

<t>This document specifies the negotiation of EESP Security
Associations (SAs) within the Internet Key Exchange Protocol
Version 2 (IKEv2) protocol <xref target="RFC7296"/>. It details the creation,
rekeying, and deletion of EESP SAs, as well as the negotiation of
EESP specific transforms and properties.</t>

<t>The extensions defined here enables EESP SAs to coexist with ESP SAs,
while introducing new capabilities to enhance IPsec's performance
and versatility in modern use cases.</t>

<t>This document does not obsolete or update any existing RFCs. While
stateless implementations of EESP are referenced, their negotiation,
which is similar to <xref target="PSP"/>, is outside the scope of this document.</t>
<section title="Requirements Language">
<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.</t>

</section>
<section title="Terminology">
<t>It is assumed that readers are familiar with IKEv2
<xref target="RFC7296"/>, IPsec architecture <xref target="RFC4301"/> and ESP <xref target="RFC4303"/>.
This document uses a notation and conventions from IKEv2 [RFC7296].</t>

<t>This document uses the following terms defined in <xref target="RFC2992"/>:
Equal-cost multi-path (ECMP)</t>

</section>

</section>
<section title="EESP Overview">
<section title="EESP Version">
<t>Each EESP packet carries the EESP Base Header version, which is
specified in Section "Fixed Base Header" of <xref target="I-D.ietf-ipsecme-eesp"/>. EESP
version determines the format of the EESP packet and its processing
rules. The initial version specified in
<xref target="I-D.ietf-ipsecme-eesp"/> is version 0.</t>

</section>
<section title="EESP Sub SA" anchor="sec-eesp-sub-sa">
<t>Existing mechanisms for establishing Child SAs, as described in
<xref target="RFC7296"/>, yield pair of SAs. High-speed IP traffic is often
asymmetric. Creating multiple pairs of Child SAs, e.g. for multiple
resources (<xref target="RFC9611"/>), or for DSCP to carry asymmetric traffic,
is inefficient.</t>

<t>To deal with this limitations EESP introduces the concept of Sub SAs.
An EESP Sub SA is an unidirectional SA derived from
the same-direction EESP SA of the pair of SAs negotiated using
IKEv2. Each Sub SA derives its own keying material and
maintains independent sequence number spaces and IV spaces from the
parent Child SA; all other characteristics of Sub SAs (algorithms,
traffic selectors etc.) are identical to the EESP SA they belong to.</t>

<t>Each Sub SA is identified by a Sub SA Id, which is a number in the
range from zero up to the maximum Sub SA ID indicated by the
receiver of the Sub SA during EESP SA negotiation via IKEv2 (see
<xref target="sec-announcing-maximum-sub-sa-id"/>). The Sub SA ID is carried
in the Session ID field of the EESP base header (see Section "Session ID as Sub SA ID" of
<xref target="I-D.ietf-ipsecme-eesp"/>). The Sub SA ID MUST be unique for
all Sub SAs in the context of an EESP SA.</t>

<t>If a peer receives an EESP packet with a Sub SA ID greater than the
maximum value it announced during EESP SA setup, that peer MAY drop
this packet without further processing.</t>

<t>Use of Sub SAs is optional in EESP and can be negotiated using IKEv2.</t>

</section>
<section title="EESP Sequence Numbers">
<t>Unlike ESP, the EESPv0 header transmits 64-bit sequence numbers if
replay protection is used. In addition, the Sequence Number field in
the EESPv0 header is optional and can be omitted from the packet if
replay protection is not needed. Note that while possible, disabling
replay protection is generally NOT RECOMMENDED and should only
be done in case of multicast scenarios or if the upper level protocol
provides this service. See <xref target="sec-security-considerations"/> for details.</t>

</section>

</section>
<section title="EESP SA Negotiation in IKEv2">
<t>Current EESP specification <xref target="I-D.ietf-ipsecme-eesp"/> defines
version 0 of the EESP protocol. Consequently, this document limits
its scope to only deal with EESPv0. If other EESP versions are
defined in future, their negotiation using IKEv2 should be covered by
separate documents.</t>

<t>EESP Security Associations (SAs) are negotiated in IKEv2 similarly
to ESP SAs - as Child SAs in the IKE_AUTH or the CREATE_CHILD_SA
exchanges. For this purpose a new Security Protocol Identifier EESPv0
(&lt;TBD1&gt;) is defined. This protocol identifier is placed in the
Protocol ID field of the Proposal Substructure in the SA Payload
when peers negotiate EESP version 0. It is possible for the initiator
to include both ESP and EESPv0 proposals in the SA
payload to negotiate either ESP or EESP.</t>
<section title="EESP Specific Transform Types and Transform IDs">
<section title="Sub SA Key Derivation Function Transform">
<t>This document defines a new Sub SA Key Derivation Function (SSKDF)
transform type, that is used to negotiate a key derivation function
for Sub SAs as described in <xref target="sec-eesp-sub-sa"/>.</t>

<t>This document creates a new IKEv2 IANA registry for the Key
Derivation Functions transform IDs. The initially defined Transform
IDs are listed in the table below.</t>

<table>
<name>Sub SA Key Derivation Functions</name>
<thead><tr><th align="right">Value</th><th>Algorithm</th></tr>
</thead>
<tbody><tr><td align="right">0</td><td>NONE</td></tr>
<tr><td align="right">1</td><td>SSKDF_HKDF_SHA2_256</td></tr>
<tr><td align="right">2</td><td>SSKDF_HKDF_SHA2_384</td></tr>
<tr><td align="right">3</td><td>SSKDF_HKDF_SHA2_512</td></tr>
<tr><td align="right">4</td><td>SSKDF_AES256_CMAC</td></tr>
</tbody>
</table>

<t>These algorithms are defined as follows:</t>

<ul>
<li><t>SSKDF_HKDF_SHA2_256, SSKDF_HKDF_SHA2_384 and SSKDF_HKDF_SHA2_512
use HKDF-Expand defined in <xref target="RFC5869"/> with the indicated hash
functions, that is, SHA-256, SHA-384 or SHA-512, respectively, with
corresponding key sizes of 32, 48 and 64 octets. SSKDF is then
defined as:</t>

<t>SSKDF(K, S, L) = HKDF-Expand(K, S, L)</t></li>

<li><t>SSKDF_AES256_CMAC is currently undefined</t></li>
</ul>

<t>Other key derivation functions may be added after the publication of
this document. Readers should refer to <xref target="IKEv2-IANA"/> for the latest
values.</t>

<t>The type of the Sub SA Key Derivation Function transform is &lt;TBA2&gt;.</t>

</section>
<section title="New Transform IDs for Sequence Numbers Transform Type">
<t>This document defines two new Transform IDs for the Sequence Numbers
transform type: '<tt>64-bit Sequential Numbers</tt>' (&lt;TBD5&gt;) and '<tt>None</tt>' (&lt;TBD6&gt;).</t>

<t>To enable the presence of sequence numbers in the EESP header and
enabling replay protection, the initiator MUST propose SN = (64-bit
Sequential Numbers) in the Proposal Substructure inside the Security
Association (SA) payload. When the responder selects 64-bit Sequential
Numbers, the Sequence Number field MUST be included into the EESP
header and peers MUST perform replay protection.</t>

<t>To disable sequence numbering, and thus replay protection based on
sequence numbers, the initiator MUST propose SN=None (&lt;TBD6&gt;).
When the responder selects None, the Sequence Number field is omitted
from the EESP header.</t>

</section>

</section>
<section title="Transforms Consistency">
<t>IKEv2 limits transform types that can appear in the Proposal
substructure based on its Protocol ID field (see Section 3.3.3 of
<xref target="RFC7296"/>). For EESPv0 the following transform types are allowed:</t>

<table>

<thead><tr><th>Protocol</th><th>Mandatory Types</th><th>Optional Types</th></tr>
</thead>
<tbody><tr><td>EESPv0</td><td>ENCR, SN</td><td>KE, SSKDF</td></tr>
</tbody>
</table>

<t>For the ENCR transform type only those transform IDs that define use
of AEAD cipher mode are allowed in case of EESPv0.
Transform IDs that define pure encryption MUST NOT be used in the
context of EESPv0.</t>

<t>Note, that '<tt>64-bit Sequential Numbers</tt>' and '<tt>None</tt>' transform IDs are
unspecified for ESP and MUST NOT be used in ESP proposals.
On the other hand, currently defined transform IDs for the
Sequence Numbers transform type (32-bit Sequential Numbers and
Partially Transmitted 64-bit Sequential Numbers)
are unspecified for EESPv0 and MUST NOT be used in EESPv0 proposals.</t>

<t>Implementations MUST ignore transforms containing invalid
values for the current proposal (as if they are unrecognized,
in accordance with Section 3.3.6 of <xref target="RFC7296"/>).</t>

<t>The use of the '<tt>None</tt>' Transform ID for the SN transform
if further limited by the ENCR transform. In particular,
if the selected ENCR transform defines use of implicit IV
(as transforms defined in <xref target="RFC8750"/>), then the value '<tt>None</tt>' MUST
NOT be selected for the SN transform.</t>

</section>
<section title="Example of SA Payload Negotiating EESP">
<t>Below is the example of SA payload for EESP negotiation.</t>

<figure anchor="eesp-sa-proposal">
<name>EESPv0 SA proposal</name>
<sourcecode><![CDATA[
SA Payload
   |
   +--- Proposal #1 ( Proto ID = EESPv0(<TBD1>), SPI size = 4,
   |     |            5 transforms,      SPI = 0x052357bb )
   |     |
   |     +-- Transform ENCR ( Name = ENCR_AES_GCM_16 )
   |     |     +-- Attribute ( Key Length = 256 )
   |     +-- Transform ENCR ( Name = ENCR_AES_GCM_16 )
   |     |     +-- Attribute ( Key Length = 128 )
   |     +-- Transform SSKDF ( Name = SSKDF_HKDF_SHA2_256 )
   |     +-- Transform SSKDF ( Name = SSKDF_HKDF_SHA2_512 )
   |     +-- Transform SN ( Name = 64-bit Sequential Numbers )
]]></sourcecode></figure>

</section>
<section title="Use of Notifications in the Process of EESP Negotiation">
<t>IKEv2 Notify Message Status Type USE_WESP_MODE, <xref target="RFC5840"/>, is not
supported when negotiating EESP SA, because the WESP functionality
is part of EESP protocol. If this notification is received it
MUST be ignored.</t>

<t>The ESP_TFC_PADDING_NOT_SUPPORTED, <xref target="RFC7296"/>, notification is not
supported in EESP, instead use IP-TFS, USE_AGGFRAG, <xref target="RFC9347"/>.
If this notification is received it MUST be ignored.</t>

</section>
<section title="Announcing Maximum Sub SA ID" anchor="sec-announcing-maximum-sub-sa-id">
<t>In the process of establishing the EESP SA, each peer MAY inform the
other side about the maximum value of Sub SA ID that it can
accept as a receiver. The other side MUST choose IDs for its outgoing
Sub SAs in the range from zero to this value (inclusive). Thus,
announcing the maximum value for Sub SA ID effectively limits the
number of Sub SAs the sending side is ready to handle as a Sub SA
receiver.</t>

<t>Note that this is not a negotiation: each side can indicate its own
value for the maximum Sub SA ID. In addition, sending side is not
required to consume all possible Sub SA IDs up to the indicated
maximum value - it can create fewer Sub SAs. In any case, when
creating Sub SAs as a sender an endpoint has to consider that Sub SA
IDs MUST NOT repeat for a given EESP SA and MUST NOT exceed the value
sent by the peer in this notification. The actual number of Sub SAs
can be different in different directions.</t>

<t>A new notify status type EESP_MAX_SUB_SA_ID (&lt;TBD3&gt;) is defined by
this document. The format of the Notify payload for this notification
is shown below.</t>

<figure anchor="max-sub-sa-notify">
<name>Maximum Sub SA Notification</name>
<sourcecode><![CDATA[
                    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
+-+-----------------------------+-------------------------------+
! Next Payload  !C!  RESERVED   !         Payload Length        !
+---------------+---------------+-------------------------------+
!  Protocol ID  !   SPI Size    !      Notify Message Type      !
+---------------+---------------+-------------------------------+
!      Maximum Sub SA ID        |
+-------------------------------+
]]></sourcecode></figure>

<ul>
<li><t>Protocol ID (1 octet) - MUST be 0. MUST be ignored if not 0.</t></li>
<li><t>SPI Size (1 octet) - MUST be 0. MUST be ignored if not 0.</t></li>
<li><t>Notify Status Message Type (2 octets) - set to EESP_MAX_SUB_SA_ID (&lt;TBD3&gt;).</t></li>
</ul>

<ul>
<li><t>Maximum Sub SA ID (2 octets, integer in network byte order)
-- specifies the maximum value for the EESP Sub SA ID the
sender of this notification is expecting to receive</t></li>
</ul>

<t>The maximum number of Sub SAs the sender of this notification can
handle as a receiver can be calculated as the value of the Maximum
Sub SA ID field plus 1. For example, value 0 in the Maximum Sub SA ID
field means that only one Sub SA (with Subs SA ID = 0) can be
handled.</t>

<t>If a peer doesn't have any restrictions on the number of the incoming
Sub SAs, then it MAY omit sending this notification. As a consequence,
if this notification was not received by a peer, that peer can assume
that it can create as many outgoing Sub SAs as it needs (provided
that Sub SA IDs not repeat).</t>

<t>If no SSKDF transform was negotiated, this notification MUST be
ignored by peers.</t>

</section>
<section title="Announcing Maximum Crypt Offset" anchor="sec-announcing-maximum-crypt-offset">
<t>Each peer MAY inform the other side about the maximum offset they
accept in the EESP '<tt>Crypt Offset</tt>' option. The other side MUST NOT
use a Crypt Offset exceeding this value (inclusive).</t>

<t>Note that this is not a negotiation: each side can indicate its own
value for the maximum Crypt Offset. If a valid EESP packet is
received where the Crypt Offset exceeds the announced maximum, it
MUST be dropped, and the Child SA SHOULD be deleted.</t>

<t>A new notify status type EESP_MAX_CRYPT_OFFSET (&lt;TBD4&gt;) is defined by
this document. The format of the Notify payload for this notification
is shown below.</t>

<figure anchor="max-crypto-offset-notify">
<name>Maximum Crypt Offset Notification</name>
<sourcecode><![CDATA[
                    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
+-+-----------------------------+-------------------------------+
! Next Payload  !C!  RESERVED   !         Payload Length        !
+---------------+---------------+-------------------------------+
!  Protocol ID  !   SPI Size    !      Notify Message Type      !
+---------------+---------------+-------------------------------+
! Maximum C. O. |
+---------------+
]]></sourcecode></figure>

<ul>
<li><t>Protocol ID (1 octet) - MUST be 0. MUST be ignored if not 0.</t></li>
<li><t>SPI Size (1 octet) - MUST be 0. MUST be ignored if not 0.</t></li>
<li><t>Notify Status Message Type (2 octets) - set to EESP_MAX_CRYPT_OFFSET (&lt;TBD4&gt;).</t></li>
<li><t>Maximum Crypt Offset (1 octet)
-- specifies the maximum value for the CryptOffset field in the
EESP Crypt Offset option the sender of this notification is
accepting (measured in 4-octet units). Note that the field in the
option is only 6 bits wide.</t></li>
</ul>

<t>If a peer doesn't allow the use of the Crypt Offset option, instead
of sending the value 0, the notification SHOULD be omitted entirely.
That is, if this notification was not received by a peer, that peer
MUST not use a Crypt Offset when sending EESP packets. If a packet
with Crypt Offset option is still received, it MUST be dropped, and
the Child SA SHOULD be deleted.</t>

</section>

</section>
<section title="Key Derivation for Sub SAs">
<t>When an EESP SA is using Sub SAs, each Sub SA (including the one
with Session ID 0) uses separate keys. This allows each Sub SA to use
its own independent Sequence Number and IV space.</t>

<t>In order to derive these keys, a Sub SA Key Derivation Function
(SSKDF) MUST be negotiated as part of the proposal of the EESP SA
using Transform Type &lt;TBD2&gt;. This SSKDF is independent of the PRF
negotiated for IKEv2.</t>

<t>If no Sub SAs are to be used for an EESP SA, Transform Type &lt;TBD2&gt;
SHOULD be omitted in the proposal, but it MAY be NONE. If it's
omitted or NONE is selected by the responder, Sub SAs cannot be
created by either peer and the key derivation for the in- and
outbound EESP SAs of the Child SA are done as described in section
2.17 of <xref target="RFC7296"/>.</t>

<t>If an SSKDF is selected as part of the proposal, instead of directly
taking keys for the Sub SAs from KEYMAT, as described in section 2.17
of <xref target="RFC7296"/>, only one '<tt>root</tt>' key is taken for each EESP SA of the
Child SA. Their length is determined by the key size of the
negotiated SSKDF. The root key for the EESP SA carrying data from
the initiator to the responder is taken before that for the SA going
from the responder to the initiator.</t>

<t>The root key and SSKDF are configured as properties of an EESP SA,
which derives the keys for individual Sub SAs as specified in
<xref target="I-D.ietf-ipsecme-eesp"/>.</t>

<t>Because individual Sub SAs can't be rekeyed, the complete EESP Child
SA MUST be rekeyed when either a cryptographic limit or a time-based
limit is reached for any individual Sub SA.</t>

</section>
<section title="IANA Considerations">
<section title="Changes in the Existing IKEv2 Registries">
<section title="IKEv2 Security Protocol Identifiers registry">
<t>This document defines new Protocol ID in the
"IKEv2 Security Protocol Identifiers" registry:</t>

<table>

<thead><tr><th>Protocol ID</th><th>Protocol</th><th>Reference</th></tr>
</thead>
<tbody><tr><td>&lt;TBD1&gt;</td><td>EESPv0</td><td>[this document]</td></tr>
</tbody>
</table>

</section>
<section title="IKEv2 Transform Type Values">
<t>This document defines a new transform type in the "Transform Type
Values" registry:</t>

<table>

<thead><tr><th>Type</th><th>Description</th><th>Used In</th><th>Reference</th></tr>
</thead>
<tbody><tr><td>&lt;TBD2&gt;</td><td>Sub SA Key Derivation</td><td>(EESPv0)</td><td>[this document]</td></tr>
<tr><td>&#xa0;</td><td>Function (SSKDF)</td><td>&#xa0;</td><td>&#xa0;</td></tr>
</tbody>
</table>

<t>Valid Transform IDs are defined in a new registry listed in
<xref target="tbl-sskdfids"/>.</t>

<t>This document also modifies the "Used In" column of existing
"Encryption Algorithm (ENCR)" transform type by adding EESPv0 as
allowed protocol for this transform and adding a rederence to this
document.</t>

</section>
<section title="IKEv2 Notify Message Status Types registry.">
<table>

<thead><tr><th>Value</th><th>Notify Message Status Type</th><th>Reference</th></tr>
</thead>
<tbody><tr><td>&lt;TBD3&gt;</td><td>EESP_MAX_SUB_SA_ID</td><td>[this document]</td></tr>
<tr><td>&lt;TBD4&gt;</td><td>EESP_MAX_CRYPT_OFFSET</td><td>[this document]</td></tr>
</tbody>
</table>

</section>
<section title="Sequence Number">
<t>This document defines two new values in the IKEv2 "Transform Type 5</t>
<ul>
<li><t>Sequence Numbers Properties Transform IDs" registry:</t></li>
</ul>

<table>

<thead><tr><th>Value</th><th>Name</th><th>Reference</th></tr>
</thead>
<tbody><tr><td>&lt;TBD5&gt;</td><td>64-bit Sequential Numbers</td><td>[this document]</td></tr>
<tr><td>&lt;TBD6&gt;</td><td>None</td><td>[this document]</td></tr>
</tbody>
</table>

</section>

</section>
<section title="New IKEv2 Registries">
<t>A new set of registries is created for EESP on IKEv2
parameters page <xref target="IKEv2-IANA"/>. The terms
Reserved, Expert Review and Private Use are to be applied as defined
in <xref target="RFC8126"/>.</t>
<section title="Transform Type &lt;TBD2&gt; - Sub SA Key Derivation Function Transform IDs">
<t>This documents creates the new IKEv2 registry "Transform Type &lt;TBD2&gt; -
Sub SA Key Derivation Function Transform IDs". The initial values of
this registry are:</t>

<table anchor="tbl-sskdfids">
<name>"Transform Type &lt;TBD2&gt;" Registry</name>
<thead><tr><th align="right">Number</th><th>Name</th><th>Reference</th></tr>
</thead>
<tbody><tr><td align="right">0</td><td>NONE</td><td>[this document]</td></tr>
<tr><td align="right">1</td><td>SSKDF_HKDF_SHA2_256</td><td>[this document]</td></tr>
<tr><td align="right">2</td><td>SSKDF_HKDF_SHA2_384</td><td>[this document]</td></tr>
<tr><td align="right">3</td><td>SSKDF_HKDF_SHA2_512</td><td>[this document]</td></tr>
<tr><td align="right">4</td><td>SSKDF_AES256_CMAC</td><td>[TBD]</td></tr>
<tr><td align="right">5-1023</td><td>Unassigned</td><td>[this document]</td></tr>
<tr><td align="right">1024-65535</td><td>Private use</td><td>[this document]</td></tr>
</tbody>
</table>

<t>Changes and additions to the unassigned range of this registry are
by the Expert Review Policy <xref target="RFC8126"/>.</t>

</section>
<section title="Guidance for Designated Experts">
<t>In all cases of Expert Review Policy described here,
the Designated Expert (DE) is expected to ascertain the existence of
suitable documentation (a specification) as described in <xref target="RFC8126"/>
and to verify that the document is permanently and publicly
available. The DE is also expected to check the clarity of purpose
and use of the requested code points. Last, the DE must verify that
any specification produced outside the IETF does not conflict with
work that is active or already published within the IETF.</t>

</section>

</section>

</section>
<section title="Implementation Status">
<t>[Note to RFC Editor: Please remove this section and the reference to
<xref target="RFC7942"/> before publication.]</t>

<t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of this
Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.
The description of implementations in this section is intended to
assist the IETF in its decision processes in progressing drafts to
RFCs. Please note that the listing of any individual implementation
here does not imply endorsement by the IETF. Furthermore, no effort
has been spent to verify the information presented here that was
supplied by IETF contributors. This is not intended as, and must not
be construed to be, a catalog of available implementations or their
features. Readers are advised to note that other implementations may
exist.</t>

<t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the benefit
of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented protocols
more mature. It is up to the individual working groups to use this
information as they see fit".</t>

<t>Authors are requested to add a note to the RFC Editor at the top of
this section, advising the Editor to remove the entire section before
publication, as well as the reference to <xref target="RFC7942"/>.</t>

</section>
<section title="Security Considerations" anchor="sec-security-considerations">
<t>The EESP Crypt Offset Option (see Section "EESP Crypt Offset Option" of
<xref target="I-D.ietf-ipsecme-eesp"/>) allows controlled exposure of leading
bytes of the inner packet for specific deployments (e.g., data
center telemetry/processing). Its use and the maximum allowed
Crypt Offset are negotiated (see <xref target="sec-announcing-maximum-crypt-offset"/>).</t>

<t>When an EESP receiver implementation uses Stateless Decryption, it
may not rely on single Security Policy Database (SPD) as specified in
the IPsec Architecture document <xref target="RFC4301"/>, section 4.4.1. However,
the receiver MUST validate the negotiated Security Policy through
other means to ensure compliance with the intended security
requirements. For by adding Security Policy to the socket or route
entry. Also comply with ICMP processing specified in section 6 of
<xref target="RFC4301"/>.</t>

<t>If the replay protection service is disabled, an attacker can
re-play packets with a different source address. Such an attacker
could disrupt the connection by replaying a single packet with a
different source address or port number.
In this case the receiver SHOULD NOT dynamically modify ports or
addresses without using IKEv2 Mobility <xref target="RFC4555"/>.</t>

<t>Additional security relevant aspects of using the IPsec protocol are
discussed in the Security Architecture document <xref target="RFC4301"/>.</t>

</section>
<section title="Acknowledgments">
<t>TBD</t>

</section>
</middle>
<back>
<references title="Normative References">
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/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>
<reference anchor="RFC5840" target="https://www.rfc-editor.org/info/rfc5840">
  <front>
    <title>Wrapped Encapsulating Security Payload (ESP) for Traffic Visibility</title>
    <author fullname="K. Grewal" initials="K." surname="Grewal"/>
    <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
    <author fullname="M. Bhatia" initials="M." surname="Bhatia"/>
    <date month="April" year="2010"/>
    <abstract>
      <t>This document describes the Wrapped Encapsulating Security Payload (WESP) protocol, which builds on the Encapsulating Security Payload (ESP) RFC 4303 and is designed to allow intermediate devices to (1) ascertain if data confidentiality is being employed within ESP, and if not, (2) inspect the IPsec packets for network monitoring and access control functions. Currently, in the IPsec ESP standard, there is no deterministic way to differentiate between encrypted and unencrypted payloads by simply examining a packet. This poses certain challenges to the intermediate devices that need to deep inspect the packet before making a decision on what should be done with that packet (Inspect and/or Allow/Drop). The mechanism described in this document can be used to easily disambiguate integrity-only ESP from ESP-encrypted packets, without compromising on the security provided by ESP. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5840"/>
  <seriesInfo name="DOI" value="10.17487/RFC5840"/>
</reference>
<reference anchor="RFC4303" target="https://www.rfc-editor.org/info/rfc4303">
  <front>
    <title>IP Encapsulating Security Payload (ESP)</title>
    <author fullname="S. Kent" initials="S." surname="Kent"/>
    <date month="December" year="2005"/>
    <abstract>
      <t>This document describes an updated version of the Encapsulating Security Payload (ESP) protocol, which is designed to provide a mix of security services in IPv4 and IPv6. ESP is used to provide confidentiality, data origin authentication, connectionless integrity, an anti-replay service (a form of partial sequence integrity), and limited traffic flow confidentiality. This document obsoletes RFC 2406 (November 1998). [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4303"/>
  <seriesInfo name="DOI" value="10.17487/RFC4303"/>
</reference>
<reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296">
  <front>
    <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
    <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="Y. Nir" initials="Y." surname="Nir"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
    <date month="October" year="2014"/>
    <abstract>
      <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="79"/>
  <seriesInfo name="RFC" value="7296"/>
  <seriesInfo name="DOI" value="10.17487/RFC7296"/>
</reference>
<reference anchor="RFC4301" target="https://www.rfc-editor.org/info/rfc4301">
  <front>
    <title>Security Architecture for the Internet Protocol</title>
    <author fullname="S. Kent" initials="S." surname="Kent"/>
    <author fullname="K. Seo" initials="K." surname="Seo"/>
    <date month="December" year="2005"/>
    <abstract>
      <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer. This document obsoletes RFC 2401 (November 1998). [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4301"/>
  <seriesInfo name="DOI" value="10.17487/RFC4301"/>
</reference>
<reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="I-D.ietf-ipsecme-eesp" target="https://datatracker.ietf.org/doc/html/draft-ietf-ipsecme-eesp-02">
  <front>
    <title>Enhanced Encapsulating Security Payload (EESP)</title>
    <author fullname="Steffen Klassert" initials="S." surname="Klassert">
      <organization>secunet Security Networks AG</organization>
    </author>
    <author fullname="Antony Antony" initials="A." surname="Antony">
      <organization>secunet Security Networks AG</organization>
    </author>
    <author fullname="Christian Hopps" initials="C." surname="Hopps">
      <organization>LabN Consulting, L.L.C.</organization>
    </author>
    <date day="19" month="October" year="2025"/>
    <abstract>
      <t>This document describes the Enhanced Encapsulating Security Payload (EESP) protocol, which builds on the existing IP Encapsulating Security Payload (ESP) protocol. It is designed to modernize and overcome limitations in the ESP protocol. EESP adds Session IDs (e.g., to support CPU pinning and QoS support based on the inner traffic flow), changes some previously mandatory fields to optional, and moves the ESP trailer into the EESP header. Additionally, EESP adds header options adapted from IPv6 to allow for future extension. New header options are defined which add Flow IDs and a crypt-offset to allow for exposing inner flow information for middlebox use.</t>
    </abstract>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-ipsecme-eesp-02"/>
</reference>
</references>
<references title="Informative References">
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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="RFC9347" target="https://www.rfc-editor.org/info/rfc9347">
  <front>
    <title>Aggregation and Fragmentation Mode for Encapsulating Security Payload (ESP) and Its Use for IP Traffic Flow Security (IP-TFS)</title>
    <author fullname="C. Hopps" initials="C." surname="Hopps"/>
    <date month="January" year="2023"/>
    <abstract>
      <t>This document describes a mechanism for aggregation and fragmentation of IP packets when they are being encapsulated in Encapsulating Security Payload (ESP). This new payload type can be used for various purposes, such as decreasing encapsulation overhead for small IP packets; however, the focus in this document is to enhance IP Traffic Flow Security (IP-TFS) by adding Traffic Flow Confidentiality (TFC) to encrypted IP-encapsulated traffic. TFC is provided by obscuring the size and frequency of IP traffic using a fixed-size, constant-send-rate IPsec tunnel. The solution allows for congestion control, as well as nonconstant send-rate usage.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9347"/>
  <seriesInfo name="DOI" value="10.17487/RFC9347"/>
</reference>
<reference anchor="RFC9611" target="https://www.rfc-editor.org/info/rfc9611">
  <front>
    <title>Internet Key Exchange Protocol Version 2 (IKEv2) Support for Per-Resource Child Security Associations (SAs)</title>
    <author fullname="A. Antony" initials="A." surname="Antony"/>
    <author fullname="T. Brunner" initials="T." surname="Brunner"/>
    <author fullname="S. Klassert" initials="S." surname="Klassert"/>
    <author fullname="P. Wouters" initials="P." surname="Wouters"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>In order to increase the bandwidth of IPsec traffic between peers, this document defines one Notify Message Status Types and one Notify Message Error Types payload for the Internet Key Exchange Protocol Version 2 (IKEv2) to support the negotiation of multiple Child Security Associations (SAs) with the same Traffic Selectors used on different resources, such as CPUs.</t>
      <t>The SA_RESOURCE_INFO notification is used to convey information that the negotiated Child SA and subsequent new Child SAs with the same Traffic Selectors are a logical group of Child SAs where most or all of the Child SAs are bound to a specific resource, such as a specific CPU. The TS_MAX_QUEUE notify conveys that the peer is unwilling to create more additional Child SAs for this particular negotiated Traffic Selector combination.</t>
      <t>Using multiple Child SAs with the same Traffic Selectors has the benefit that each resource holding the Child SA has its own Sequence Number Counter, ensuring that CPUs don't have to synchronize their cryptographic state or disable their packet replay protection.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9611"/>
  <seriesInfo name="DOI" value="10.17487/RFC9611"/>
</reference>
<reference anchor="RFC2992" target="https://www.rfc-editor.org/info/rfc2992">
  <front>
    <title>Analysis of an Equal-Cost Multi-Path Algorithm</title>
    <author fullname="C. Hopps" initials="C." surname="Hopps"/>
    <date month="November" year="2000"/>
    <abstract>
      <t>Equal-cost multi-path (ECMP) is a routing technique for routing packets along multiple paths of equal cost. The forwarding engine identifies paths by next-hop. When forwarding a packet the router must decide which next-hop (path) to use. This document gives an analysis of one method for making that decision. The analysis includes the performance of the algorithm and the disruption caused by changes to the set of next-hops. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2992"/>
  <seriesInfo name="DOI" value="10.17487/RFC2992"/>
</reference>
<reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8750" target="https://www.rfc-editor.org/info/rfc8750">
  <front>
    <title>Implicit Initialization Vector (IV) for Counter-Based Ciphers in Encapsulating Security Payload (ESP)</title>
    <author fullname="D. Migault" initials="D." surname="Migault"/>
    <author fullname="T. Guggemos" initials="T." surname="Guggemos"/>
    <author fullname="Y. Nir" initials="Y." surname="Nir"/>
    <date month="March" year="2020"/>
    <abstract>
      <t>Encapsulating Security Payload (ESP) sends an initialization vector (IV) in each packet. The size of the IV depends on the applied transform and is usually 8 or 16 octets for the transforms defined at the time this document was written. When used with IPsec, some algorithms, such as AES-GCM, AES-CCM, and ChaCha20-Poly1305, take the IV to generate a nonce that is used as an input parameter for encrypting and decrypting. This IV must be unique but can be predictable. As a result, the value provided in the ESP Sequence Number (SN) can be used instead to generate the nonce. This avoids sending the IV itself and saves 8 octets per packet in the case of AES-GCM, AES-CCM, and ChaCha20-Poly1305. This document describes how to do this.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8750"/>
  <seriesInfo name="DOI" value="10.17487/RFC8750"/>
</reference>
<reference anchor="RFC4555" target="https://www.rfc-editor.org/info/rfc4555">
  <front>
    <title>IKEv2 Mobility and Multihoming Protocol (MOBIKE)</title>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="June" year="2006"/>
    <abstract>
      <t>This document describes the MOBIKE protocol, a mobility and multihoming extension to Internet Key Exchange (IKEv2). MOBIKE allows the IP addresses associated with IKEv2 and tunnel mode IPsec Security Associations to change. A mobile Virtual Private Network (VPN) client could use MOBIKE to keep the connection with the VPN gateway active while moving from one address to another. Similarly, a multihomed host could use MOBIKE to move the traffic to a different interface if, for instance, the one currently being used stops working. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4555"/>
  <seriesInfo name="DOI" value="10.17487/RFC4555"/>
</reference>
<reference anchor="RFC5869" target="https://www.rfc-editor.org/info/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="PSP" target='https://github.com/google/psp/blob/main/doc/PSP_Arch_Spec.pdf'>
<front>
<title>PSP Architecture Specification</title>
<author><organization>Google</organization></author>
<date/>
</front>
</reference>
<reference anchor="IKEv2-IANA" target='https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml'>
<front>
<title>IKEv2 Parameters</title>
<author><organization>IANA</organization></author>
<date/>
</front>
</reference>
</references>
<section title="Additional Stuff">
<t>TBD</t>

</section>
  </back>
</rfc>
