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


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

<!ENTITY RFC4303 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC8750 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8750.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY I-D.pwouters-ipsecme-multi-sa-performance SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.pwouters-ipsecme-multi-sa-performance.xml">
<!ENTITY I-D.mrossberg-ipsecme-multiple-sequence-counters SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mrossberg-ipsecme-multiple-sequence-counters.xml">
<!ENTITY SELF "[RFCXXXX]">
]>


<rfc ipr="trust200902" docName="draft-ponchon-ipsecme-anti-replay-subspaces-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="IPsec anti-replay subspaces">IPsec and IKE anti-replay sequence number subspaces for traffic-engineered paths and multi-core processing</title>

    <author initials="P." surname="Ponchon" fullname="Paul Ponchon">
      <organization>Cisco Meraki</organization>
      <address>
        <email>pponchon@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Shaikh" fullname="Mohsin Shaikh">
      <organization>Cisco Meraki</organization>
      <address>
        <email>mohsisha@cisco.com</email>
      </address>
    </author>
    <author initials="H." surname="Dernaika" fullname="Hadi Dernaika">
      <organization>Cisco Meraki</organization>
      <address>
        <email>hbd05@mail.aub.edu</email>
      </address>
    </author>
    <author initials="P." surname="Pfister" fullname="Pierre Pfister">
      <organization>Cisco Meraki</organization>
      <address>
        <email>ppfister@cisco.com</email>
      </address>
    </author>
    <author initials="G." surname="Solignac" fullname="Guillaume Solignac">
      <organization>Cisco Meraki</organization>
      <address>
        <email>gsoligna@cisco.com</email>
      </address>
    </author>

    <date year="2023" month="October" day="23"/>

    <area>Applications</area>
    <workgroup>ipsecme</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 64?>

<t>This document discusses the challenges of running IPsec with anti-replay in multi-core environments where packets may be re-ordered (e.g., when sent over multiple IP paths, traffic-engineered paths and/or using different QoS classes). A new solution based on splitting the anti-replay sequence number space into multiple different sequencing subspaces is proposed. Since this solution requires support on both parties, an IKE extension is proposed in order to negotiate the use of the anti-replay sequence number subspaces.</t>



    </abstract>



  </front>

  <middle>


<?line 68?>

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

<t>The IPsec and IKE protocol suite is very commonly used in secure overlay networks, often interconnecting thousands or tens of thousands of sites. Leveraging the high core-counts and multiple uplinks (e.g., multiple fiber/cable, cellular or MPLS uplinks) capabilities of modern systems is important to bring greater throughput, availability and quality of service.</t>

<t>Such scale and multi-paths requirements conflict with how anti-replay is currently implemented in IPsec tunnels. This document first describes the problems related to running IPsec with anti-replay in conjunction with traffic-engineered paths or multi-core systems, and how existing solutions are not sufficient to address these challenges. An IPsec extension is then defined, which allows an IPsec security association (SA) to use multiple different sequence number spaces in parallel. Finally, an IKE extension is defined in order to enable this option only when both tunnel endpoints support it.</t>

</section>
<section anchor="problem"><name>Problem Statement</name>

<t>While the problem is explored in more detail in <xref target="I-D.mrossberg-ipsecme-multiple-sequence-counters"/>, this section will highlight the key issues associated with running IPsec with anti-replay in multi-core systems and environments where traffic-engineering is used, as well as the limitations of current solutions.</t>

<t>Scaling the current anti-replay mechanism to run on multiple cores concurrently shows performance limitations:
- When receiving a packet, preventing the same IPsec packet from being accepted by two different cores concurrently requires constant synchronization between the cores.
- When transmitting a packet, sequence numbers must be allocated efficiently, and packets must be transmitted without too much re-ordering, as to not exceed the receiver&#39;s anti-replay window size. This also ends-up requiring locks and synchronization between cores.</t>

<t>A commonly used alternative is to assign each Child SA to a given core, but that limits the throughput that is achievable by a single tunnel and adds a performance overhead associated with passing packets across cores.</t>

<t>These restrictions are discussed in <xref target="I-D.pwouters-ipsecme-multi-sa-performance"/>, which mainly focuses on high-throughput IPsec tunnels, but the problem also arises with small tunnels since multiple inner flows processed by multiple threads often need to be transmitted on the same tunnel (causing multiple threads to need to access shared resources).</t>

<t>A possible solution to leverage the multi-core capability of the IPsec peers for a given tunnel would be to allocate one Child SA per core. However, combined with QoS classes and multi-path capabilities, this approach shows scalability issues with both the IKE and IPsec implementations:</t>

<t><list style="symbols">
  <t>Increased number of IKE negotiations and re-key operations.</t>
  <t>Increased IKE memory usage.</t>
  <t>Data-plane performance degradation due to the use of a larger number of keys.</t>
  <t>Data-plane reduced number of connected peers, due to a hard limit to the number of supported Child SAs.</t>
  <t>When PFS is enabled, the overhead of each Child SA negotiation is increased due to additional Diffie-Hellman operations.</t>
</list></t>

<t>Finally, in situations where packet reordering is present, such as with QoS or multiple uplinks, slower or lower priority packets may fall outside of the anti-replay window and be dropped. Using an extraordinarily large window size causes both performance and scalability limitations.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<bcp14>SHALL
NOT</bcp14>&quot;, &quot;<bcp14>SHOULD</bcp14>&quot;, &quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>NOT RECOMMENDED</bcp14>&quot;,
&quot;<bcp14>MAY</bcp14>&quot;, and &quot;<bcp14>OPTIONAL</bcp14>&quot; in this document are to be interpreted as
described in BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="solution"><name>Multiple sequence number subspaces</name>

<t>As discussed in <xref target="problem"/>, processing packets associated with a single Child SA on multiple cores and using a single Child SA on multiple paths or with multiple QoS classes suffers from limitations due to the anti-replay mechanism.</t>

<t>This specification provides an option to change the anti-replay mechanism defined in <xref target="RFC4303"/> by splitting the anti-replay sequence number space into multiple subspaces. Each core, path, or QoS class, or any combination of those, can then use their own unique anti-replay sequence number subspace. The changes needed to the ESP header and IPsec protocol are described in <xref target="SN-subspace"/>, <xref target="sender-spec"/> and <xref target="receiver-spec"/>.</t>

<t>To avoid potential issues with non-standard extensions of IPsec ESP, this solution modifies only the field related to the anti-replay mechanism (i.e., the sequence number) and not the SPI field, which is intended to identify the Child SA. An IKE extension is presented in <xref target="ike-negotiation"/> to coordinate the use, or not, of this extension, which requires both IPsec peers to implement it.</t>

<section anchor="SN-subspace"><name>Sequence number subspace encoding in IPSec</name>

<t>This document extends the 32-bit field of the sequence number in the ESP header to a 64-bit field, which is in turn divided into two sub-fields:</t>

<t><list style="symbols">
  <t>The higher order 16 bits contain the new sequence number subspace ID.</t>
  <t>The lower order 48 bits continue to serve as the sequence number.</t>
</list></t>

<figure><artwork><![CDATA[
  0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Security Parameters Index (SPI)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Subspace ID          |        Sequence Number        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Sequence Number                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Rest of the ESP payload

]]></artwork></figure>

<t>While the reduced usage of subspaces due to the restriction of the extended sequence number to 48 bits is a consideration, it is estimated that a 1 Tbps would exhaust a subspace in over 938 hours. This is for ethernet frames of 1500 bytes, T = 2^48 (pkts) * 1500 (B/pkt) * 8 / 10^12 (bps) = ~3.4 * 10^6 seconds = ~938 hours.</t>

</section>
<section anchor="sender-spec"><name>Sender Behavior</name>

<t>This section defines the IPsec sender&#39;s behavior when transmitting packets using an IPsec SA that has been previously configured or negotiated with IKE to use at most N different sequence number subspace IDs.</t>

<t>The sender <bcp14>MAY</bcp14> set the sequence number subspace ID to any value between 0 and N-1. How the different subspace IDs are used is up to the implementation, but as an example, the sender could use different subspace ID values per path or per processing core (or combination of both).</t>

<t>The sender <bcp14>MUST NOT</bcp14> use any subspace ID values greater or equal to N (since the IPsec SA has been configured to use at most N different values). This requirement was introduced to improve the implementation performance, as opposed to allowing the sender to use arbitrary subspace ID values.</t>

<t>The sender <bcp14>MUST</bcp14> maintain one sequence number counter per sequence number subspace that it makes use of. But the sender <bcp14>MAY</bcp14> use only some (and as few as a single one) of the available N subspace ID values between 0 and N-1.</t>

<t>When transmitting a packet, the sender <bcp14>MUST</bcp14> use the sequence number counter associated with the sequence number subspace in use for that packet.</t>

<t>The 48 bits sequence number counter associated with any subspace <bcp14>MUST NOT</bcp14> be allowed to cycle. The sender <bcp14>MUST</bcp14> establish a new SA prior to the transmission of the 2^48th packet on any of the SA&#39;s sequence number subspaces.</t>

</section>
<section anchor="receiver-spec"><name>Receiver Behavior</name>

<t>This section defines the IPsec receiver&#39;s behavior when receiving packets using an IPsec SA that has been previously configured or negotiated to use at most N different sequence number subspace IDs.</t>

<t>The receiver <bcp14>MUST</bcp14> maintain one anti-replay window and counter for each sequence number subspace being used.</t>

<t>When receiving a packet, the receiver <bcp14>MUST</bcp14> use the anti-replay window and counter associated with the sequence number subspace identified with the subspace ID field.</t>

<t>The receiver <bcp14>MUST</bcp14> drop any packet received with a subpace ID value greater or equal to N. Such packets <bcp14>SHOULD</bcp14> be counted for reporting.</t>

<t>Note: Since the sender may decide to only use a subset of the available N subspace values, the receiver <bcp14>MAY</bcp14> reactively allocate an anti-replay window when receiving the first packet for a given subspace. When doing so, the receiver <bcp14>SHOULD</bcp14> first check the authenticity of the packet before allocating the new anti-replay window.</t>

<t>The 48 bits sequence number counter associated with any subspace <bcp14>MUST NOT</bcp14> be allowed to cycle.</t>

</section>
<section anchor="ESN"><name>Extended Sequence Numbers (ESN) considerations</name>

<t>Since the sequence number, as well as the sequence number subspace IDs are explicit in the ESP header, most of the ESN related specifications (such as ESN&#39;s synchronization mechanism and appended trailer for ICV calculation) are not used by this standard.</t>

<t>However, all IPsec cryptographic algorithms <bcp14>MUST</bcp14> be used with the ESN value replaced with a 64 bits value constructed using the 16 sequence number subspace ID high-order bits and the 48 sequence number lower order bits.</t>

<t>Any IPsec cryptographic algorithm that does not support ESN <bcp14>MUST NOT</bcp14> be used in conjunction with this specification.</t>

</section>
<section anchor="ike-negotiation"><name>Negotiating sequence-number subspaces using IKE</name>

<t>To negotiate the use of sequence number subspaces for use with IPsec ESP, a new anti-replay subspaces transform (<xref target="transform-substruct"/>) is defined with the &#39;Sequence number subspaces attribute&#39; (<xref target="subspaces-attribute"/>) which contains 2 fields:</t>

<t><list style="symbols">
  <t>The number of sequence number subspaces the sender is capable of using is indicated by the &#39;Subspaces supported&#39; field, which is 2 bytes long.</t>
  <t>The &#39;Subspaces requested&#39; attribute indicates the number of sequence number subspaces the sender prefers to use, and is also 2 bytes long.</t>
</list></t>

<t>If both attributes are set to 0, the sender does not support sequence number subspaces.
The requested value <bcp14>MUST</bcp14> be lower than the supported value.</t>

<t>During the CREATE_CHILD_SA exchange, the sender and receiver negotiate the use of this transform. The sender indicates the number of subspaces it supports and prefers to use, while the receiver decides on the number of subspaces to use based on the sender&#39;s capabilities. This negotiation mechanism allows for flexibility in the number of subspaces used and can help optimize the performance of IPsec in different environments.</t>

<t>With a single Child SA negotiated between the two IPsec peers, the failure model is clean, as all requested subspaces are either available or none of them.</t>

<section anchor="transform-substruct"><name>Anti-replay subspaces transform</name>

<figure><artwork><![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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Last Substruc |   RESERVED    |        Transform Length       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Transform Type |   RESERVED    |          Transform ID         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                      Transform Attributes                     ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>Transform Length (2 bytes), set to 16 bytes with the two attributes each taking 4 bytes</t>
  <t>Transform Type (1 byte) TBD</t>
  <t>Transform ID (2 bytes) TBD</t>
</list></t>

</section>
<section anchor="subspaces-attribute"><name>&#39;Sequence number subspaces&#39; attribute</name>

<figure><artwork><![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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0|       Attribute Type        |     AF=0  Attribute Length    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Subspaces Supported      |      Subspaces Requested      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>AF (1 bit), set to 0 for Type/Length/Value (TLV) format</t>
  <t>Attribute Type (15 bits) TBD</t>
  <t>Attribute Length (2 bytes), set to 4</t>
  <t>Attribute Value (4 bytes), divided into 2 bytes for sequence number subspaces supported and 2 bytes for sequence number subspaces requested.</t>
</list></t>

</section>
</section>
<section anchor="solution-analysis"><name>Solution Analysis</name>

<t>As described in <xref target="problem"/>, anti-replay comes with implementation and scalability challenges when running in environments where IPsec peers may leverage multiple QoS policies to send packets or multiple cores to process them.</t>

<t>Since the anti-replay mechanism seems to be the source cause of these observed challenges, this document provides a solution which relies on a small and optional change at the anti-replay level.</t>

<t>By using sequence number subspaces, IPsec peers may:</t>

<t><list style="symbols">
  <t>use different subspaces for different cores, which allows distributing a Child SA between cores to increase performance</t>
  <t>use different subspaces for different QoS classes or different paths, which avoids unwanted drops due to potential reordering of packets, either at the egress or during its flight.</t>
  <t>combine the above per-QoS-queue, per-path and per-core approaches without multiplying the number of required Child SAs.</t>
</list></t>

<t>The effectiveness of the subspace mechanism can be further improved with smart NICs or multiple paths to efficiently steer packets to different cores on the receiver side. However, even without these capabilities, sequence number subspaces still provide benefits for IPsec tunnels. Without subspaces, IPsec tunnels are often restricted to a single core due to the need for locking mechanisms, which can cause significant overhead. With subspaces, it is still possible to distribute the subspaces between cores by resteering packets to increase performances.</t>

<t>In scenarios where NATs are used to modify IP addresses or ports, the use of multiple uplinks on a single IPsec tunnel may not be feasible without additional IKE negotiation to perform NAT traversal. As a result, using multiple uplinks is recommended only in scenarios where NATs are not present.</t>

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

<t>The sequence number is used by the anti-replay mechanism to ensure a packet could not be accepted twice by the receiver. This prevents an attacker from trying to replay one or multiple packets from an IPsec tunnel.</t>

<t>In this proposal, a single Child SA is associated with multiple anti-replay windows and counters. If a packet is replayed, the sequence number subspace ID remains the same since the Subspace ID field is authenticated. As a result, the receiver will use the same anti-replay state when processing the replayed packet as the one used when the first packet was initially received. This ensures that a replayed packet will be detected and dropped by the receiver.</t>

<t>The use of a subspace ID as part of the 64-bit sequence number ensures that the usage limit of cryptographic materials is evenly distributed among the subspaces without the need for an additional mechanism. This means each of the 2^16 subspaces can encrypt 2^48 packets, fully utilizing the 2^64 usage limits of the cryptographic keys.</t>

</section>
<section anchor="implementation"><name>Implementation Considerations</name>

<t>When a single sequence number space is used within a given Child SA, encryption and decryption operations must always happen on the same core (locking anti-replay structures or using contended atomic operations has a dramatic performance hit).</t>

<t><list style="symbols">
  <t>On reception, this requires packets which are received (and load-balanced to cores) to be often resteered to a different thread for processing.</t>
  <t>On transmisson, multiple flows, processed by different cores, need to be transmitted using the same Child SA. This requires the packets to be resteered to the thread in charge of the given Child SA.</t>
</list></t>

<t>To avoid the performance degradation caused by packet resteering, each thread may use its own sequence number subspace:</t>

<t><list style="symbols">
  <t>On transmission, the core will always select the subspace it is assigned when generating the ESP header.</t>
  <t>On reception, the subspace ID could be used to load-balance the packets to their proper thread.</t>
</list></t>

<t>Similarly, when multiple paths are used:</t>

<t><list style="symbols">
  <t>On transmission, a different sequence number subspace is used for each packet path. Ensuring that out-of-order packets are not dropped by the anti-replay mechanism.</t>
  <t>On reception, the 5-tuple based packet steering would provide a decent level of load-balancing between threads, since different IP paths would use different 5-tuples.</t>
</list></t>

<t>If a combination of both multi-path and multi-core load-balancing is needed, the subspace field could be used partly to encode a path ID, partly to encode a core ID. But this is purely implementation specific and does not require coordination between the peers.</t>

<section anchor="initialization-vector-iv-considerations"><name>Initialization Vector (IV) Considerations</name>

<t>Depending on the cryptographic mode of operations, the Initialization Vector (IV) comes with specific requirements.</t>

<t>Some modes (e.g., CBC) make use of random IV values. When implementing this specification, each thread independently generates its independent stream of random values, ensuring the IV randomness property. Care must be taken as to limit the global number of transmitted packets using the same Child SA in order to avoid birthday paradox attacks. A lockless counter, or batched token bucket mechanism, may be used to efficiently implement this process without performance degradation.</t>

<t>Other cryptographic modes (e.g., GCM) do not have randomness requirements over the IV, but the IV values must only be used once. RFC4106 Section 3.1 states that &quot;The most natural way to implement this is with a counter, but anything that guarantees uniqueness can be used, such as a linear feedback shift register (LFSR).  Note that the encrypter can use any IV generation method that meets the uniqueness requirement, without coordinating with the decrypter.&quot; . One simple way to implement this specification is to divide the IV into a subspace field, which reuses the ESP sequence number subspace value, and a variable IV part, which is simply incremented for each encrypted packet.
To ensure compatibility with implicit IVs from <xref target="RFC8750"/>, only the 48-bit sequence number field must be initialized to zero, while the 16-bit subspace ID can be used for its intended purpose.</t>

<t>Author&#39;s note: Are there other cryptographic modes with different requirements over the IV ?</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>
<t>An open-source implementation of this standard is in progress as part of the <eref target="https://fd.io">VPP open-source data-plane</eref>.</t>

</section>
</section>
<section anchor="operational"><name>Operational Considerations</name>

<t>TBD</t>

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

<t>TBD</t>

</section>


  </middle>

  <back>


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

&RFC4303;
&RFC8750;
&RFC2119;
&RFC8174;


    </references>

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

&I-D.pwouters-ipsecme-multi-sa-performance;
&I-D.mrossberg-ipsecme-multiple-sequence-counters;


    </references>



  </back>

<!-- ##markdown-source:
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
8L+HB/eaelMAAA==

-->

</rfc>

