<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC7665 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7665.xml">
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC7799 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7799.xml">
<!ENTITY RFC6830 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6830.xml">
<!ENTITY RFC7276 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7276.xml">
<!ENTITY RFC7112 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7112.xml">
<!ENTITY RFC6833 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6833.xml">
<!ENTITY RFC2460 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2460.xml">
<!ENTITY RFC791 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0791.xml">
<!ENTITY RFC6564 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6564.xml">
<!ENTITY RFC7820 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7820.xml">
<!ENTITY RFC7821 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7821.xml">
<!ENTITY RFC8126 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC5905 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml">
<!ENTITY RFC7384 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7384.xml">
<!ENTITY RFC8300 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8300.xml">
<!ENTITY RFC4302 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4302.xml">
<!ENTITY RFC6090 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC9197 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9197.xml">
<!ENTITY RFC9055 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9055.xml">
<!ENTITY I-D.ietf-sfc-proof-of-transit SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-sfc-proof-of-transit.xml">
<!ENTITY I-D.ietf-ippm-ioam-direct-export SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-direct-export.xml">
<!ENTITY I-D.ietf-spring-segment-routing SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-spring-segment-routing.xml">
<!ENTITY I-D.previdi-isis-segment-routing-extensions SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.previdi-isis-segment-routing-extensions.xml">
<!ENTITY I-D.ietf-ippm-6man-pdm-option SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-6man-pdm-option.xml">
<!ENTITY I-D.gont-v6ops-ipv6-ehs-in-real-world SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.gont-v6ops-ipv6-ehs-in-real-world.xml">
<!ENTITY I-D.brockners-lisp-sr SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-lisp-sr.xml">
<!ENTITY I-D.ietf-ippm-ioam-ipv6-options SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-ipv6-options.xml">
<!ENTITY I-D.ietf-6man-segment-routing-header SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-6man-segment-routing-header.xml">
<!ENTITY I-D.ietf-nvo3-vxlan-gpe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-nvo3-vxlan-gpe.xml">
<!ENTITY I-D.ietf-nvo3-geneve SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-nvo3-geneve.xml">
<!ENTITY I-D.lapukhov-dataplane-probe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.lapukhov-dataplane-probe.xml">
<!ENTITY I-D.ietf-ntp-packet-timestamps SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ntp-packet-timestamps.xml">
<!ENTITY I-D.spiegel-ippm-ioam-rawexport SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.spiegel-ippm-ioam-rawexport.xml">
<!ENTITY I-D.ietf-ippm-ioam-flags SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-flags.xml">
<!ENTITY I-D.zhou-ippm-ioam-yang SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.zhou-ippm-ioam-yang.xml">
<!ENTITY I-D.mizrahi-ippm-ioam-profile SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.mizrahi-ippm-ioam-profile.xml">
<!ENTITY I-D.ioamteam-ippm-ioam-direct-export SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ioamteam-ippm-ioam-direct-export.xml">
<!ENTITY I-D.ioametal-ippm-6man-ioam-ipv6-deployment SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ioametal-ippm-6man-ioam-ipv6-deployment.xml">
<!ENTITY I-D.weis-ippm-ioam-eth SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.weis-ippm-ioam-eth.xml">
<!ENTITY I-D.ietf-sfc-ioam-nsh SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-sfc-ioam-nsh.xml">
<!ENTITY I-D.brockners-ippm-ioam-geneve SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-ippm-ioam-geneve.xml">
<!ENTITY I-D.gandhi-spring-ioam-sr-mpls SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.gandhi-spring-ioam-sr-mpls.xml">
<!ENTITY I-D.ali-spring-ioam-srv6 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ali-spring-ioam-srv6.xml">
<!ENTITY I-D.brockners-ippm-ioam-vxlan-gpe SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.brockners-ippm-ioam-vxlan-gpe.xml">
<!ENTITY AFI SYSTEM "http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-ietf-ippm-ioam-data-integrity-03"
     ipr="trust200902">
  <!-- ipr="full3978"-->

  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="IOAM-Data-Fields Integrity">Integrity of In-situ OAM Data
    Fields</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Frank Brockners" initials="F." surname="Brockners">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street>Hansaallee 249, 3rd Floor</street>

          <!-- Reorder these if your country does things differently -->

          <city>DUESSELDORF</city>

          <region>NORDRHEIN-WESTFALEN</region>

          <code>40549</code>

          <country>Germany</country>
        </postal>

        <email>fbrockne@cisco.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari">
      <organization abbrev="Thoughtspot">Thoughtspot</organization>

      <address>
        <postal>
          <street>3rd Floor, Indiqube Orion, 24th Main Rd, Garden Layout, HSR
          Layout</street>

          <city>Bangalore, KARNATAKA 560 102</city>

          <country>India</country>
        </postal>

        <email>shwetha.bhandari@thoughtspot.com</email>
      </address>
    </author>

    <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
      <organization abbrev="">Huawei</organization>

      <address>
        <postal>
          <street>8-2 Matam</street>

          <city>Haifa</city>

          <code>3190501</code>

          <country>Israel</country>
        </postal>

        <email>tal.mizrahi.phd@gmail.com</email>
      </address>
    </author>

    <author fullname="Justin Iurman" initials="J." surname="Iurman">
      <organization abbrev="ULiege">Universite de Liege</organization>

      <address>
        <postal>
          <street>10, Allee de la decouverte (B28)</street>

          <code>4000</code>

          <city>Sart-Tilman</city>

          <region>LIEGE</region>

          <country>Belgium</country>
        </postal>

        <email>justin.iurman@uliege.be</email>
      </address>
    </author>

    <date day="24" month="November" year="2022"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>tsv</area>

    <workgroup>ippm</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>in-situ</keyword>

    <keyword>Telemetry, Tracing</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>In-situ Operations, Administration, and Maintenance (IOAM) records 
      operational and telemetry information in the packet while the packet
      traverses a path in the network. IETF protocols require features to
      ensure their security. This document describes the integrity protection
      of IOAM-Data-Fields.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction" toc="default">
      <t>"In-situ" Operations, Administration, and Maintenance (IOAM) records 
      OAM information within the packet while the packet traverses a
      particular network domain. The term "in-situ" refers to the fact that
      the OAM data is added to the data packets rather than being sent
      within packets specifically dedicated to OAM. IOAM is to complement
      mechanisms such as Ping or Traceroute.
      In terms of "active" or "passive" OAM, "in-situ" OAM can be considered a
      hybrid OAM type. "In-situ" mechanisms do not require extra packets to be
      sent. IOAM adds information to the already available data packets and
      therefore cannot be considered passive. In terms of the classification
      given in <xref target="RFC7799"/>, IOAM could be portrayed as Hybrid Type
      I. IOAM mechanisms can be leveraged where mechanisms using, e.g., ICMP do
      not apply or do not offer the desired results, such as proving that a
      certain traffic flow takes a pre-defined path, SLA verification for the
      data traffic, detailed statistics on traffic distribution paths in
      networks that distribute traffic across multiple paths, or scenarios in
      which probe traffic is potentially handled differently from regular data
      traffic by the network devices.</t>

      <t><xref target="RFC9197"/> assumes that
      IOAM is deployed in limited domains, where an operator has
      means to select, monitor, and control the access to all the networking
      devices, making the domain a trusted network. As such, IOAM-Data-Fields
      are carried in clear within packets and there are no protections against
      any node or middlebox tampering with the data. 
      IOAM-Data-Fields collected in an untrusted or semi-trusted environment
      require integrity protection to support critical operational decisions.
      </t>

      <t>The following considerations and
      requirements are to be taken into account in addition to addressing the
      problem of detectability of any integrity breach of the IOAM-Data-Fields
      collected: <list style="numbers">
          <t>IOAM data is processed by the data plane, hence viability
          of any method to prove integrity of the IOAM-Data-Fields must be
          feasible at data plane processing/forwarding rates (IOAM might
          be applied to all traffic a router forwards).</t>

          <t>IOAM data is carried within packets. Additional space
          required to prove integrity of the IOAM-Data-Fields needs to be optimal, i.e.
          should not exceed the MTU or have adverse effect on packet
          processing.</t>

          <t>Replay protection of older IOAM data should be possible.
          Without replay protection, a rogue node can present the old IOAM
          data, masking any ongoing network issues/activity and making the
          IOAM-Data-Fields collection useless.</t>

      </list></t>

      <t>This document defines the methods to protect the integrity of
	      IOAM-Data-Fields, using the IOAM Option-Types
	      specified in <xref target="RFC9197"/>
	      as an example. The methods similarly apply to
		      other IOAM Option-Types which contain IOAM-Data-Fields.</t>
    </section>

    <section anchor="Conventions" title="Conventions">
    	
      <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" format="default"/> <xref target="RFC8174" format="default"/>.
      </t>

      <t>Abbreviations used in this document:</t>

      <t><list hangIndent="11" style="hanging">

          <t hangText="IOAM:">In-situ Operations, Administration, and
          Maintenance</t>

          <t hangText="MTU:">Maximum Transmit Unit</t>

          <t hangText="OAM:">Operations, Administration, and Maintenance</t>

          <t hangText="POT:">Proof of Transit</t>

          <t hangText="E2E:">Edge to Edge</t>
        </list></t>
    </section>

    <section title="Threat Analysis">
      <t>This section presents a threat analysis of integrity-related threats
      in the context of IOAM. The threats that are discussed are assumed to be
      independent of the lower layer protocols; it is assumed that threats at
      other layers are handled by security mechanisms that are deployed at
      these layers.</t>

      <t>This document is focused on integrity protection for IOAM-Data-Fields.
      Thus the threat analysis includes threats that are related to or
      result from compromising the integrity of IOAM-Data-Fields. Other
      security aspects such as confidentiality are not within the scope of
      this document.</t>

      <t>Throughout the analysis there is a distinction between on-path and
      off-path attackers. As discussed in <xref
      target="RFC9055"/>, on-path attackers are located in a
      position that allows interception and modification of in-flight protocol
      packets, whereas off-path attackers can only attack by generating
      protocol packets.</t>

      <t>The analysis also includes the impact of each of the threats.
      Generally speaking, the impact of a successful attack on an OAM protocol
      <xref target="RFC7276"/> is a false illusion of nonexistent failures or
      preventing the detection of actual ones; in both cases, the attack may
      result in denial of service (DoS). Furthermore, creating the false
      illusion of a nonexistent issue may trigger unnecessary processing in
      some of the IOAM nodes along the path, and may cause more IOAM-related
      data to be exported to the management plane than is conventionally
      necessary. Beyond these general impacts, threat-specific impacts are
      discussed in each of the subsections below.</t>

      <section anchor="ModifDataSec" title="Modification: IOAM-Data-Fields">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An attacker can maliciously modify the IOAM-Data-Fields of
            in-transit packets. The modification can either be applied to all
            packets or selectively applied to a subset of the en route
            packets. This threat is applicable to on-path attackers.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>By systematically modifying the IOAM-Data-Fields of some or all
            of the in-transit packets, an attacker can create a false picture
            of the paths in the network, the existence of faulty nodes and
            their location, and the network performance.</t>
          </list></t>
      </section>

      <section anchor="ModifHeaderSec"
               title="Modification: IOAM Option-Type Headers">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An on-path attacker can modify the header in IOAM Option-Types
            in order to change or disrupt the
            behavior of nodes processing IOAM-Data-Fields along the path. This
            threat is not within the scope of this document.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>Changing the header of IOAM Option-Types may have several
            implications. An attacker can maliciously increase the processing
            overhead in nodes that process IOAM-Data-Fields and increase the
            on-the-wire overhead of IOAM-Data-Fields, for example by modifying
            the IOAM-Trace-Type field in the IOAM Trace Option-Type header. An
            attacker can also prevent some of the nodes that process
            IOAM-Data-Fields from incorporating IOAM-Data-Fields, by modifying
            the RemainingLen field in the IOAM Trace Option-Type header.</t>
          </list></t>
      </section>

      <section title="Injection: IOAM-Data-Fields">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An attacker can inject packets with IOAM Option-Types and
            IOAM-Data-Fields. This threat is applicable to both on-path and
            off-path attackers.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>This attack and its impacts are similar to <xref
            target="ModifDataSec"/>.</t>
          </list></t>
      </section>

      <section title="Injection: IOAM Option-Type Headers">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An attacker can inject packets with IOAM Option-Type headers,
            thus manipulating other nodes that process IOAM-Data-Fields in the
            network. This threat is applicable to both on-path and off-path
            attackers. This threat is not within the scope of this document.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>This attack and its impacts are similar to <xref
            target="ModifHeaderSec"/>.</t>
          </list></t>
      </section>

      <section title="Management and Exporting">
        <t>Threat <list hangIndent="10" style="empty">
            <t>Attacks that compromise the integrity of IOAM-Data-Fields can
            be applied at the management plane, e.g., by manipulating network
            management packets. Furthermore, the integrity of IOAM-Data-Fields
            that are exported to a receiving entity can also be compromised.
            Management plane attacks are not within the scope of this
            document; the network management protocol is expected to include
            inherent security capabilities. The integrity of exported data is
            also not within the scope of this document. It is expected that
            the specification of the export format will discuss the relevant
            security aspects.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>Malicious manipulation of the management protocol can cause
            nodes that process IOAM-Data-Fields to malfunction, to be
            overloaded, or to incorporate unnecessary IOAM-Data-Fields into
            user packets. The impact of compromising the integrity of exported
            IOAM-Data-Fields is similar to the impacts of previous threats
            that were described in this section.</t>
          </list></t>
      </section>

      <section title="Delay">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An on-path attacker may delay some or all of the in-transit
            packets that include IOAM-Data-Fields in order to create the false
            illusion of congestion. Delay attacks are well known in the
            context of deterministic networks <xref
            target="RFC9055"/> and synchronization <xref
            target="RFC7384"/>, and may be somewhat mitigated in these
            environments by using redundant paths in a way that is resilient
            to an attack along one of the paths. This approach does not
            address the threat in the context of IOAM, as it does not meet the
            requirement to measure a specific path or to detect a problem
            along the path. It is noted that this threat is not within the
            scope of the threats that are mitigated in this
            document.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>Since IOAM can be applied to a fraction of the traffic, an
            attacker can detect and delay only the packets that include
            IOAM-Data-Fields, thus preventing the authenticity of delay and load
            measurements.</t>
          </list></t>
      </section>

      <section title="Threat Summary">
        <figure align="center" anchor="ThreatSummary"
                title="Threat Analysis Summary">
          <artwork align="left">
            
+-------------------------------------------+--------+------------+
| Threat                                    |In scope|Out of scope|
+-------------------------------------------+--------+------------+
|Modification: IOAM-Data-Fields             |   +    |            |
+-------------------------------------------+--------+------------+
|Modification: IOAM Option-Type Headers     |        |     +      |
+-------------------------------------------+--------+------------+
|Injection: IOAM-Data-Fields                |   +    |            |
+-------------------------------------------+--------+------------+
|Injection: IOAM Option-Type Headers        |        |     +      |
+-------------------------------------------+--------+------------+
|Management and Exporting                   |        |     +      |
+-------------------------------------------+--------+------------+
|Delay                                      |        |     +      |
+-------------------------------------------+--------+------------+
           </artwork>
        </figure>
      </section>
    </section>

    <section anchor="NewIOAMOptionTypes" title="Integrity Protected Option-Types">
    <t>This section defines new IOAM Option-Types. Their purpose is to carry
    IOAM-Data-Fields with integrity protection. Each of the IOAM Option-Types
    defined in <xref target="RFC9197"/> is extended as follows:</t>

        <t><list style="hanging">
            <t hangText="64">IOAM Pre-allocated Trace Integrity Protected
            Option-Type: corresponds to the IOAM Pre-allocated Trace Option-Type
            with integrity protection.</t>

            <t hangText="65">IOAM Incremental Trace Integrity Protected
            Option-Type: corresponds to the IOAM Incremental Trace Option-Type
            with integrity protection.</t>

            <t hangText="66">IOAM POT Integrity Protected Option-Type:
            corresponds to the IOAM POT Option-Type with integrity protection.</t>

            <t hangText="67">IOAM E2E Integrity Protected Option-Type:
            corresponds to the IOAM E2E Option-Type with integrity protection.</t>
          </list></t>

      <t>The IOAM Integrity Protection header follows the IOAM Option-Type
      header when the IOAM Option-Type is an Integrity Protected Option-Type.
      It is defined as follows:</t>

      <t><figure title="IOAM Integrity Protection header">
            <artwork>

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Signature-suite|  Nonce length |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Nonce                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Signature                           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


</artwork>
          </figure></t>

      <t><list style="hanging">
        <t hangText="Signature-suite:">8-bit unsigned integer. 
        This field defines the algorithm pair used to compute the digest
        and the signature over the IOAM-Data-Fields, as defined in <xref
        target="IOAM-IP-registry"/>.</t>

        <t hangText="Nonce length:">8-bit unsigned integer. This field
        specifies the length of the Nonce in octets.</t>

        <t hangText="Reserved:">16-bit Reserved field. MUST be set to zero
        upon transmission and ignored upon receipt.</t>

        <t hangText="Nonce:"> Variable length field with length specified
        in Nonce length.</t>

        <t hangText="Signature:"> Digital signature value generated
        by the method and algorithm specified by Signature-suite.</t>
      </list></t>

      <section title="Integrity Protected Trace Option-Types">
        <t>Both the IOAM Pre-allocated Trace Option-Type header and the IOAM
        Incremental Trace Option-Type header, as defined in <xref
        target="RFC9197"/>, are followed by the Integrity
        Protection header when the IOAM Option-Type is respectively set to
        the IOAM Pre-allocated Trace Integrity Protected Option-Type or the IOAM
        Incremental Trace Integrity Protected Option-Type:
        <figure>
            <artwork>
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          | NodeLen | Flags | RemainingLen|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                IOAM-Trace-Type                |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Signature-suite|  Nonce length |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Nonce                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Signature                           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

</artwork>
          </figure></t>
      </section>

      <section title="Integrity Protected POT Option-Type">
        <t>The IOAM POT Option-Type header, as defined in <xref
        target="RFC9197"/>, is followed by the Integrity
        Protection header when the IOAM Option-Type is set to the IOAM POT
        Integrity Protected Option-Type: <figure>
            <artwork>
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          | IOAM-POT-Type | IOAM-POT-Flags| 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Signature-suite|  Nonce length |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Nonce                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Signature                           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

</artwork>
          </figure></t>
      </section>

      <section title="Integrity Protected E2E Option-Type">
        <t>The IOAM E2E Option-Type header, as defined in <xref
        target="RFC9197"/>, is followed by the Integrity
        Protection header when the IOAM Option-Type is set to the IOAM E2E
        Integrity Protected Option-Type: <figure>
            <artwork>
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Namespace-ID          |         IOAM-E2E-Type         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Signature-suite|  Nonce length |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Nonce                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Signature                           ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

</artwork>
          </figure></t>
      </section>
    </section>

    <section title="Methods for space optimized integrity protection">
      <t>Methods for space optimized integrity protection can leverage symmetric
      or asymmetric key based signatures, as described in the subsections below.
      The Signature consumes 32 octets and is carried only once for the entire
      packet. In case of performance concerns, such method can be applied to a
      subset of the traffic by using sampling of data to enable IOAM with
      integrity protection. Both symmetric and asymmetric signature methods work
      similarly, as follows:

        <list style="numbers">
          <t>The encapsulating node creates a nonce and stores it in the Nonce
          field of the IOAM Integrity Protection header. The signature is
          generated over the Nonce field and the hash of IOAM-Data-Fields it has
          inserted, i.e., sign(Nonce || hash(IOAM-Data-Fields)). IOAM-Data-Fields
          supposed to be modified by other IOAM nodes on the path MUST be excluded
          from the signature (e.g., the POT Cumulative field). The signature is
          stored in the Signature field of the IOAM Integrity Protection header.
          Important note: if all the inserted IOAM-Data-Fields are supposed to be
          modified by other IOAM nodes on the path, or if there is no IOAM-Data-Field
          inserted at all, then the encapsulating node MUST NOT use an Integrity
          Protected Option-Type.</t>

          <t>A transit node generates a signature over the Signature field and
          the hash of IOAM-Data-Fields it has inserted, i.e.,
          sign(Signature || hash(IOAM-Data-Fields)). IOAM-Data-Fields modified
          in-place by the transit node MUST be excluded from the signature
          (e.g., the POT Cumulative field). The signature is stored in the Signature
          field of the IOAM Integrity Protection header. Important note: if the
          transit node does not insert IOAM-Data-Fields (e.g., it only modifies
          IOAM-Data-Fields in-place, or does nothing), then the transit node
          MUST NOT generate a signature and MUST NOT update the Signature field.</t>

          <t>The decapsulating node (aka the Validator) is responsible for the
          integrity verification of the IOAM-Data-Fields collected. Serving as
          the Validator, the decapsulating
          node MUST NOT generate a signature based on IOAM-Data-Fields it has
          inserted, if any, and therefore MUST NOT update the Signature field.
          To validate the IOAM-Data-Fields integrity, the Validator
          recomputes the signature by iteratively following the same procedure
          as for the encapsulating and transit nodes, in that order, using their
          respective keys (see <xref target="SymmetricMethod" /> or 
          <xref target="AsymmetricMethod" /> depending on the approach, i.e., symmetric
          or asymmetric). The recomputed signature is then compared to the
          Signature field. It is trivial in some cases (e.g., with POT Type-0 or
          E2E Option-Types), where only the encapsulating node generates a
          signature, as specified by the method described in this section.
          For other cases where transit nodes also generate a signature (e.g.,
          with Trace Option-Types), node-ids MUST be included in
          IOAM-Data-Fields. Details on how the mapping between node-ids and keys
          is implemented on the Validator are outside the scope of this document.</t>
        </list>
      </t>

      <section anchor="SymmetricMethod" title="Symmetric key based signature">
        <t>This method assumes that symmetric keys have been distributed to
        the respective nodes as well as the Validator (the Validator receives
        all the keys). The details of the mechanisms responsible for key
        distribution are outside the scope of this document.</t>

        <t>This method MUST use an algorithm pair defined in <xref
        target="IOAM-IP-registry"/> and the approach MUST be symmetric.</t>
      </section>

      <section anchor="AsymmetricMethod" title="Asymmetric key based signature">
        <t>This method assumes that asymmetric keys have been generated per
        IOAM node and the respective nodes can access their keys (the
        Validator receives all the public keys). The details of the mechanisms
        responsible for key distribution are outside the scope of this
        document.</t>

        <t>This method MUST use an algorithm pair defined in <xref
        target="IOAM-IP-registry"/> and the approach MUST be asymmetric.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">

      <section anchor="IOAM-type-registry" title="IOAM Option-Types">
        <t>IANA is requested to define the following new code points in the
        "IOAM Option-Type" registry:</t>

        <t><list style="hanging">
            <t hangText="64">IOAM Pre-allocated Trace Integrity Protected
            Option-Type (see <xref target="NewIOAMOptionTypes"/>)</t>

            <t hangText="65">IOAM Incremental Trace Integrity Protected
            Option-Type (see <xref target="NewIOAMOptionTypes"/>)</t>

            <t hangText="66">IOAM POT Integrity Protected Option-Type
            (see <xref target="NewIOAMOptionTypes"/>)</t>

            <t hangText="67">IOAM E2E Integrity Protected Option-Type
            (see <xref target="NewIOAMOptionTypes"/>)</t>
          </list></t>
      </section>

      <section anchor="IOAM-IP-registry"
               title="IOAM Integrity Protection Algorithm Suite">
        <t>IANA is requested to define a new registry named "IOAM Integrity
        Protection Algorithm Suite", inside the "In Situ OAM (IOAM)" registry
        group.</t>

        <t>The new registry defines 256 code points to identify the digest and
        signature algorithms used in the Signature-suite field, as explained in
        <xref target="NewIOAMOptionTypes"/>. The following code points are
        defined in this document:

        <figure title="IOAM Integrity Protection Algorithm Suite">
            <artwork>
 Algorithm
 Suite        Digest       Signature                  Specification
 Identifier   Algorithm    Algorithm     Approach     Pointer
+-----------+------------+------------+------------+----------------+
| 0x00      | Reserved   | Reserved   |    None    | This document  |
+-----------+------------+------------+------------+----------------+
| 0x01      | SHA-256    | ECDSA      | Asymmetric | [SHS] [DSS]    |
|           |            | P-256      |            | [RFC6090]      |
|           |            |            |            | This document  |
+-----------+------------+------------+----------------+------------+
| 0x02      | SHA-256    | AES-256    | Symmetric  | [AES]          |
|           |            |            |            | [NIST.800-38D] |
|           |            |            |            | This document  |
+-----------+------------+------------+------------+----------------+
| 0x03-0xFE | Unassigned | Unassigned |            |                |
+-----------+------------+------------+------------+----------------+
| 0xFF      | Reserved   | Reserved   |    None    | This document  |
+-----------+------------+------------+------------+----------------+
      </artwork>
          </figure> Code points 3-254 are available for assignment via the "IETF
        Review" process, as per <xref target="RFC8126"/>.</t>

        <t>New registration requests MUST use the following template: the value
        of the requested code point, the associated digest algorithm name and
        signature algorithm name, the corresponding approach, and a reference to
        the document that defines the requested code point.</t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
    <t>This section discusses additional security aspects.</t>

        <section title="Replay protection">
        <t>The nonce makes a signature chain unique but does not necessarily
        prevent replay attacks. To enable replay protection, the encapsulating node
        and the Validator MUST use a common, unique nonce.</t>
        </section>
    </section>

    <section title="Acknowledgements">
      <t>The authors would like to thank Santhosh N, Rakesh Kandula, Saiprasad
      Muchala, Al Morton, Greg Mirsky, Benjamin Kaduk and Martin Duke for their comments
      and advice.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      &RFC2119;

      &RFC8174;

      <!--  &RFC5905; -->

      &RFC8126;

      <!--  

      <reference anchor="POSIX"
                 target="https://standards.ieee.org/findstds/standard/1003.1-2008.html">
        <front>
          <title>IEEE Std 1003.1-2008 (Revision of IEEE Std 1003.1-2004) -
          IEEE Standard for Information Technology - Portable Operating System
          Interface (POSIX(R))</title>

          <author>
            <organization>Institute of Electrical and Electronics
            Engineers</organization>
          </author>

          <date year="2008"/>
        </front>

        <seriesInfo name="" value="IEEE Std 1003.1-2008"/>
      </reference>

      <reference anchor="IEEE1588v2"
                 target="http://standards.ieee.org/findstds/standard/1588-2008.html">
        <front>
          <title>IEEE Std 1588-2008 - IEEE Standard for a Precision Clock
          Synchronization Protocol for Networked Measurement and Control
          Systems</title>

          <author>
            <organization>Institute of Electrical and Electronics
            Engineers</organization>
          </author>

          <date year="2008"/>
        </front>

        <seriesInfo name="" value="IEEE Std 1588-2008"/>
      </reference>

-->
    </references>

    <references title="Informative References">
      &RFC7799;

<!--      &RFC8300; -->

      &RFC9197;

<!--
      &I-D.ietf-sfc-proof-of-transit;

      &I-D.ietf-nvo3-geneve;

      &I-D.ietf-ippm-ioam-ipv6-options;

      &I-D.ietf-sfc-ioam-nsh;

      &I-D.brockners-ippm-ioam-geneve; -->

      &RFC9055;

<!--      &I-D.ietf-ippm-ioam-direct-export; -->

      &RFC7276;

      &RFC7384;

      &RFC6090;

<!--
      &RFC4302;

      <reference anchor="McEliece"
                 target="https://ipnpr.jpl.nasa.gov/progress_report2/42-44/44N.PDF">
        <front>
          <title>A Public-Key Cryptosystem Based on Algebraic Coding
          Theory</title>

          <author fullname="Robert McEliece" initials="R. J."
                  surname="McEliece"/>

          <date year="1978"/>
        </front>
      </reference>

      <reference anchor="EdDSA25519"
                 target="https://en.wikipedia.org/wiki/EdDSA#Ed25519">
        <front>
          <title>Edwards-curve Digital Signature Algorithm (EdDSA)</title>

          <author fullname="Wikipedia"/>

          <date year="2021"/>
        </front>
      </reference>

      <reference anchor="BLS"
                 target="https://en.wikipedia.org/wiki/BLS_digital_signature">
        <front>
          <title>BLS (Boneh&ndash;Lynn&ndash;Shacham) digital
          signature</title>

          <author fullname="Wikipedia"/>

          <date year="2021"/>
        </front>
      </reference>

      -->

      <reference anchor="SHS"
                 target="http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
        <front>
          <title>Secure Hash Standard (SHS)</title>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>

          <date year="2015"/>
        </front>

        <seriesInfo name=""
                    value="NIST FIPS Publication 180-4,               DOI 10.6028/NIST.FIPS.180-4"/>
      </reference>

      <reference anchor="DSS"
                 target="http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf">
        <front>
          <title>Digital Signature Standard (DSS)</title>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>

          <date year="2013"/>
        </front>

        <seriesInfo name=""
                    value="NIST FIPS Publication 186-4,               DOI 10.6028/NIST.FIPS.186-4"/>
      </reference>

      <reference anchor="AES"
                 target="http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf">
        <front>
          <title>Advanced Encryption Standard (AES)</title>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>

          <date year="2001"/>
        </front>

        <seriesInfo name="" value="FIPS PUB 197"/>
      </reference>

      <reference anchor="NIST.800-38D"
                 target="http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf">
        <front>
          <title>Recommendation for Block Cipher Modes of Operation:
          Galois/Counter Mode (GCM) and GMAC</title>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>

          <date year="2001"/>
        </front>

        <seriesInfo name="" value="NIST Special Publication 800-38D"/>
      </reference>

    </references>
  </back>
</rfc>
