<?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 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-ippm-ioam-data SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-data.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 I-D.ietf-detnet-security SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-detnet-security.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="info" docName="draft-brockners-ippm-ioam-data-integrity-01"
     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>

    <date day="21" month="February" year="2021"/>

    <!-- 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 between two points in the network. This document is to
      assist the IPPM WG in designing a solution for those deployments where
      the integrity of IOAM data fields is a concern. This document proposes
      several methods to ensure the integrity 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 is being sent
      within packets specifically dedicated to OAM. IOAM is to complement
      mechanisms such as Ping, Traceroute, or other active probing mechanisms.
      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
      1. 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
      live 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>The current <xref target="I-D.ietf-ippm-ioam-data"/> assumes that
      IOAM is deployed in specific network 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 tracing data
      is carried in the packets in clear and there are no protections against
      any node or middlebox tampering with the data. As a consequence, IOAM
      tracing data collected in an untrusted or semi-trusted environments
      cannot be trusted for critical operational decisions. Any rogue or
      unauthorized change to IOAM data fields in a user packet cannot be
      detected.</t>

      <t>Recent discussions following the IETF last call on <xref
      target="I-D.ietf-ippm-ioam-data"/> revealed that there might be uses of
      IOAM where integrity protection of IOAM data fields is at least
      desirable, knowing that IOAM data fields integrity protection would
      incur extra effort in the data path of a device processing IOAM data
      fields. As such, the following additional considerations and
      requirements are to be taken into account in addition to addressing the
      problem of detectability of any integrity breach of the IOAM trace data
      collected: <list style="numbers">
          <t>IOAM trace data is processed by the data plane, hence viability
          of any method to prove integrity of the IOAM trace data must be
          feasible at data plane processing/forwarding rates (IOAM data might
          be applied to all traffic a router forwards).</t>

          <t>IOAM trace data is carried within data packets. Additional space
          required to prove integrity of the data needs to be optimal, i.e.
          should not exceed the MTU or have adverse affect on packet
          processing.</t>

          <t>Replay protection of older IOAM trace data should be possible.
          Without replay protection a rogue node can present the old IOAM
          trace data masking any ongoing network issues/activity making the
          IOAM trace data collection useless.</t>
        </list>This document is to assist the IPPM working group in designing
      and specifying a solution for those deployments where the integrity of
      IOAM data fields is a concern. This document proposes several methods to
      achieve integrity protection for IOAM data fields.</t>

      <t>The discussion of the different methods to protect the integrity of 
      IOAM data fields focuses mostly on protecting the
      integrity of IOAM trace data fields, though the outlined methods are not
      limited to protecting IOAM trace data fields only. The methods could be
      applied to other IOAM Option-Types, such as the E2E Option-Type or the 
      DEX Option-Type. If methods only apply to a specific set of IOAM Option-Types,
      like e.g. the method 5 discussed below, those limits are discussed and
      explained explicitly.</t>

    </section>

    <section anchor="Conventions" title="Conventions">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119"/>.</t>

      <t>Abbreviations used in this document:</t>

      <t><list hangIndent="11" style="hanging">
          <t hangText="Geneve:">Generic Network Virtualization Encapsulation
          <xref target="I-D.ietf-nvo3-geneve"/></t>

          <t hangText="GRE">Generic Routing Encapsulation</t>

          <t hangText="IOAM:">In-situ Operations, Administration, and
          Maintenance</t>

          <t hangText="MTU:">Maximum Transmit Unit</t>

          <t hangText="NSH:">Network Service Header <xref
          target="RFC8300"/></t>

          <t hangText="OAM:">Operations, Administration, and Maintenance</t>

          <t hangText="POT:">Proof of Transit</t>

          <t hangText="SFC:">Service Function Chain</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="I-D.ietf-detnet-security"/>, 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 IOAM data fields in one or more
            of the IOAM Option-Type headers in order to change or disrupt the
            behavior of nodes processing IOAM data fields along the path.</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 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.</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 it 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.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>This attack and it impacts are similar to <xref
            target="ModifHeaderSec"/>.</t>
          </list></t>
      </section>

      <section title="Replay">
        <t>Threat <list hangIndent="10" style="empty">
            <t>An attacker can replay packets with IOAM data fields.
            Specifically, an attacker may replay a previously transmitted IOAM
            Option-Type with a new data packet, thus attaching old IOAM data
            fields to a fresh user packet. This threat is applicable to both
            on-path and off-path attackers.</t>
          </list></t>

        <t>Impact <list hangIndent="10" style="empty">
            <t>As with previous threats, this threat may create a false image
            of a nonexistent failure, or may overload nodes which process IOAM
            data fields with unnecessary processing.</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="I-D.ietf-detnet-security"/> 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 the scope of 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"><![CDATA[
            
+-------------------------------------------+--------+------------+
| Threat                                    |In scope|Out of scope|
+-------------------------------------------+--------+------------+
|Modification: IOAM Data Fields             |   +    |            |
+-------------------------------------------+--------+------------+
|Modification: IOAM Option-Type Headers     |   +    |            |
+-------------------------------------------+--------+------------+
|Injection: IOAM Data Fields                |   +    |            |
+-------------------------------------------+--------+------------+
|Injection: IOAM Option-Type Headers        |   +    |            |
+-------------------------------------------+--------+------------+
|Replay                                     |   +    |            |
+-------------------------------------------+--------+------------+
|Management and Exporting                   |        |     +      |
+-------------------------------------------+--------+------------+
|Delay                                      |        |     +      |
+-------------------------------------------+--------+------------+
           ]]></artwork>
        </figure>
      </section>
    </section>

    <section title="Methods of providing integrity to IOAM data fields">
      <t>This section outlines four different methods that are to provide
      integrity protection of IOAM data fields. As noted earlier, this
      document is to support the IPPM working group in designing and
      specifying a method for protecting the integrity of IOAM data fields. It
      isn't expected that all four methods would be chosen for a solution
      specification.</t>

      <t>As already stated in the introduction,
      the discussion of the different methods focuses mostly on protecting the
      integrity of IOAM trace data fields, though the outlined methods are not
      limited to protecting IOAM trace data fields only. The methods could be
      applied to other IOAM Option-Types, such as the E2E Option-Type or the 
      DEX Option-Type. </t>

      <t>IOAM trace data can be embedded in a variety of protocols. There are
      specific drafts that cover the encapsulation of IOAM data into different
      protocols, like IPv6 <xref target="I-D.ietf-ippm-ioam-ipv6-options"/>,
      NSH <xref target="I-D.ietf-sfc-ioam-nsh"/>, Geneve <xref
      target="I-D.brockners-ippm-ioam-geneve"/>, etc.</t>

      <t>The IOAM Option-Types for tracing (Pre-allocated Trace-Option and
      Incremental Trace-Option) organize the collected data in an array, the
      "node data list". See <xref target="I-D.ietf-ippm-ioam-data"/> for
      further details).</t>

      <t>The basic idea is to introduce a new "signed node-data hash field"
      added by each node along with the node data to prove the integrity of
      the node data inserted.</t>

      <t>The following sections describe different methods of how such a
      "signed node-data field" could be used and populated. The methods assume
      an IOAM-Domain containing IOAM-encapsulating nodes, IOAM-decapsulating
      nodes and IOAM-transit nodes. In addition, it is assumed that traffic
      also traverses a Validator node, which verifies the integrity of the
      IOAM data fields. In a typical deployment, the IOAM-decapsulating node
      would also serve as the Validator. The setup also includes a network
      management entity/controller which handles key distributions to the
      network nodes and also serves as a receiver for validation results
      provided by the Validator. Protocols and procedures for the exchange of
      keys and validation results between the network management
      entity/controller and the nodes are outside the scope of this
      document.</t>

      <section title="Method 1: Using asymmetric keys for signing node trace data">
        <t>Method 1 uses asymmetric keys for signing node trace data. This is
        the procedure to be followed by each node:<list style="numbers">
            <t>Each IOAM capable node creates a key pair and shares the public
            key with the controller, the Validator and the network management
            system responsible for using the IOAM trace information in the
            network domain. The detailed mechanisms how keys are exchanged
            between nodes are outside the scope of this document. For optimal
            performance, use of algorithms like BLS <xref target="BLS"/> or
            ED25519 <xref target="EdDSA25519"/> are suggested, resulting in
            fast signing for small keys and limited overhead (see below for an
            overhead calculation).</t>

            <t>Each node data list [x] field is extended with an additional
            "signed node-data" field: node_data_sign[x]. Node_data_sign
            includes a signature using the private key of the node over the
            hash of node data list[x] of the node and the previous node's node
            data sign node_data_sign[x-1]. This couples the signature of the
            current field to the earlier field and creates a chain of trust.
            This way of chaining the node data signatures provides protection
            against replay of a previous node trace of a specific node.<figure>
                <artwork><![CDATA[ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        node_data_sign [x]                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                        node data list [x]                     |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  

]]></artwork>
              </figure></t>

            <t>The IOAM encapsulating node (the node that inserts IOAM data
            fields into the packet) will add a seed in its node data list that
            is used in its node_data_sign. So the first IOAM node inserting
            the IOAM trace data will add node_data_sign over a "seed" || [hash
            of node data of first node]. The seed can be included as a field
            in first node data or the seed can be the trailer of the IOAM
            Trace-Option.</t>

            <t>The validating node - will use the public key of each node to
            validate the signed node data elements in the same way the node
            Trace signatures were created, i.e. it'll repeat the individual
            operations of the IOAM nodes traversed and will compare the result
            to the last node's node_data-sign value. If the two values match,
            the IOAM data was not tampered with.</t>
          </list></t>

        <section title="Overhead consideration for Method 1">
          <t>Assuming e.g Ed25519, the public keys would have a size of 256
          bits / 32 bytes, and as such signatures would be 512 bits / 64 bytes
          wide. node_data_sign[x] would consume 64 bytes per hop. Note that
          depending on the deployment, weaker keys might well apply, given
          that the provided integrity check is an online method, i.e. packets
          are verified as they arrive. This allows an attacker only a short
          time-window.</t>
        </section>
      </section>

      <section title="Method 2: Using symmetric keys for signing node trace data">
        <t>The same procedure as Method 1 can be followed by using a MAC
        (Message Authentication Code) algorithm for node signature. This
        involves distributing a secret key to the individual IOAM nodes and
        the Validator. Steps 1 to 4 of Method 1 apply in a similar way, the
        only difference is that symmetric keys are used. As such, each node
        data list [x] field is extended with an additional "signed node-data"
        field: node_data_sign[x]. The size of the node_data_sign[x] field
        depends on the cryptographic message authentication code used.</t>

        <figure>
          <artwork><![CDATA[
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        node_data_sign [x]                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                        node data list [x]                     |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  

]]></artwork>
        </figure>

        <section title="Overhead consideration for Method 2">
          <t>Different types of cryptographic message authentication codes
          could be chosen, such as HMAC-SHA256 or Poly1305-AES.</t>

          <t>HMAC-SHA256 would take a secret key of any size and provide a 32
          byte authenticator. Consequently, node_data_sign[x] would consume 32
          bytes per hop.</t>

          <t>Poly1305-AES would use a 32 bytes secret key and provide a 16
          byte authenticator. Consequently, node_data_sign[x] would consume 16
          bytes per hop.</t>
        </section>
      </section>

      <section title="Method 3: Space optimized symmetric key based signing of trace data">
        <t>Methods 1 and 2 add a node_data_sign field at every IOAM node the
        packet traverses. While feasible for network domains with only a few
        IOAM enabled hops, the number of bytes consumed in case of larger
        networks might not be acceptable. For those deployments, an approach
        with a single fixed sized signature field could apply.</t>

        <t>Method 3 enhances the IOAM Trace-Option header to carry a "Trace
        Signature" field.</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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Namespace-ID           |NodeLen  | Flags | RemainingLen|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IOAM-Trace-Type                 |  Reserved     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Trace Signature                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


]]></artwork>
        </figure>

        <t>Method 3 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 of how keys are distributed
        are outside the scope of this document. The "Trace Signature" field is
        populated as follows:<list style="numbers">
            <t>The first node creates a seed and sign/HMAC over the hash of
            its node_data_list[x], the seed and its symmetric key. The seed
            can be included as a field in first node data or the seed can be
            the trailer to the trace option. The resulting HMAC/signature is
            included in the Trace Signature field.</t>

            <t>Subsequent nodes will update the Trace Signature field by
            creating a signature/HMAC of data where the data is [Trace
            Signature || its node_data_list[x] hash] with its symmetric
            key.</t>

            <t>The Validator will iteratively recreate the Trace Signature
            over the node data trace fields collected and matches the Trace
            Signature field to validate the trace data integrity.</t>
          </list></t>

        <section title="Overhead consideration for Method 3">
          <t>Much like method 2, the Trace Signature would consume 16 or 32
          bytes - though with method 3, the Trace Signature is only carried
          once for the entire packet.</t>
        </section>
      </section>

      <section title="Method 4: Dynamic symmetric keys based signing of trace data">
        <t>This method builds on top of Method 3 leverages Post-quantum Secure
        Pre-shared key distribution for deriving a dynamic symmetric key for
        every packet or a set of packets. The method utilizes the dynamic keys
        to provide for replay protection and does not require a seed to be
        added to the trace data to protect from replays because a private key
        is derived for each packet. The method relies on a local service that
        generates common Key/KeyID pairs for the participating Node and
        Validator (see the figure below). This common key generator uses
        ratcheting cryptography to generate the next secret while forgetting
        about the previous one. A unique ID is paired with each secret
        generated. Given the same seed secret as input parameter, two
        implementations of the common key generator will generate the exact
        same key and associated ID. The common key generator can be queried
        for the next key or for a specific key ID.</t>

        <t>The figure below illustrates the concept:</t>

        <t><figure>
            <artwork><![CDATA[ 
      Validator                                         Node
          |                                              |
          |                                              |
    Generate McEliece                                    |
    public/private key-pair                              |
          |                                              |
          |<---Establ. classic secure connection---------|
          |               (e.g. TLS)                     | 
          |---Send public key over secure connection---->|
          |                                              |
          |                             Generate random secret seed
          |                               and encrypt w/ Validator
          |                                        public key 
          |                                              |
          |<--Send encrypted seed over secure connection-|
          |                                              |
   Decrypt secret seed sent from Node                    |
      using Validator's private key                      |
          |                                              |
          (-- Common secret seed established between   --)
          (--       Node and Validator                 --)
          |                                              |
          |                             Generate Node's KeyID pair
          |                             based on common secret seed
          |                                              |
          |           Use Node's key to update Trace Signature field
          |           in trace option header. Include Node's KeyID
          |                           in the extended node data.       
          |                                              |
          (--        Packet reaches Validator          --)
          |                                              |
    Get Node's key using Node's KeyID                    |
    present in extended node data.                       |
    Validate Trace Signature using Node's key.           |

]]></artwork>
          </figure></t>

        <t>The main steps of method 4 are:<list style="numbers">
            <t>Each node will establish a common secret seed establishment
            using McEliece <xref target="McEliece"/> with the Validator.</t>

            <t>Each node will then use the seed to generate a symmetric key
            per packet and use it in updating the Trace Signature field in the
            IOAM Trace-Option header over its node data hash. The node data is
            extended to include the KeyID of the dynamic key generated.<figure>
                <artwork><![CDATA[
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            KeyID [x]                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               | 
|                        node data list [x]                     | 
|                                                               |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
              </figure></t>

            <t>The Validator will validate the Trace Signature by deducing the
            key for each node using the KeyID.</t>
          </list>The detailed mechanisms how keys and seeds are exchanged
        between nodes are outside the scope of this document.</t>

        <section title="Overhead consideration for Method 4">
          <t>Like with method 3, the Trace Signature is only carried once for
          the entire packet and could be 32 bytes total. In addition, the
          KeyID needs to be added on a per hop basis. For sizing the Key ID,
          similar considerations like those for proof-of-transit packet random
          numbers apply - i.e. it depends on the packet rates of quickly keys
          are consumed. E.g. assuming a packet rate of 100Gbps and a KeyID
          space of 64 bits / 8 bytes, the system would need to be re-keyed
          after 3100 years (see also <xref
          target="I-D.ietf-sfc-proof-of-transit"/>). If frequent re-keying is
          feasible, 32 bits for KeyID might well be feasible.</t>
        </section>
      </section>

     <section title="Method 5: Leverage IP Authentication Header">
        <t>The IP Authentication Header (AH) is used to provide connectionless
   integrity and data origin authentication for IP datagrams and to provide protection against
   replays as defined in RFC4302 <xref target="RFC4302"/>. The AH provides authentication for as much
   of the IP header as possible, by classifying and including the immutable fields in the integrity
   calculation.  To protect the IOAM data in the IP header, the AH may be employed in transport mode by
   setting up an IP AH Security Association (SA) with supported integrity algorithms between 
   IOAM encapsulating nodes, IOAM decapsulating nodes and IOAM transit nodes.
   Method 5 utilizes the IP AH for integrity protection of IOAM options that are immutable enroute 
   between IOAM entities that are required to validate the integrity of the IOAM data.
   It is applicable to IOAM Option-Types as follows:
   <list style="numbers">
   <t>IOAM Edge-to-Edge Option-Type: The data for this IOAM Option-Type is immutable enroute and can be integrity 
   checked using an IP AH between IOAM-encapsulating nodes and 
   IOAM-decapsulating nodes.   </t>
   <t> The Direct Exporting (DEX) IOAM Option-Type (<xref target="I-D.ietf-ippm-ioam-direct-export"/>): The data for this IOAM Option-Type is immutable enroute
   and can be integrity checked using an IP AH between IOAM-encapsulating nodes and 
   IOAM-decapsulating nodes. IOAM-transit nodes, that use the IOAM DEX Option-Type 
   as a trigger to export IOAM data fields, and which are
   to validate the IOAM DEX Option-Type data fields may have to 
   be configured with shared secrets, in case the AH negotiated integrity algorithm relies on shared secrets.
   These shared secrets correspond to those secrets that
   result from the IP AH integrity algorithm negotiated during SA setup. </t>
   <t> IOAM Proof of Transit Option-Type: This IOAM Option-Type is mutable by IOAM-transit nodes enroute that
   participate in proof of transit operation. Hence the IP AH based integrity
   protection method does not apply.</t>
   <t> IOAM Pre-allocated and Incremental Trace Option-Types: These IOAM Option-Types are mutable by IOAM-transit 
   nodes encroute that process IOAM tracing Option-Types. Hence the IP AH based integrity protection method
   does not apply.</t>
   </list>
   </t>
         <section title="Overhead consideration for Method 5">
         <t>This method involves overhead of setting up and maintaining SA for the AH 
         IOAM-encapsulating nodes and IOAM-decapsulating nodes.
         The anti-replay mechanism supported by IP AH must be enabled for this 
         method to effectively protect IOAM data fields whose integrity and freshness needs to be guarenteed. 
         The anti-replay mechanism of IP AH has the overhead of maintaining and validating
         sequence numbers as part of the IP AH validation. In cases where IOAM-transit nodes 
         have to validate IOAM Option-Types e.g. the DEX Option-Type, then there will be additional overhead to
         distribute shared secrets to the transit nodes when the integrity algorithm is based on shared
         secrets. 
          </t>
        </section>
      </section>

    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document is to support the IPPM working group to design and
      specify a solution for protecting the integrity of IOAM data fields. It
      does not include any requests to IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This section will be completed in a future revision of this
      document.</t>
    </section>

    <section title="Acknowledgements">
      <t>The authors would like to thank Santhosh N, Rakesh Kandula, Saiprasad
      Muchala, 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;

      <!--  &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;

      &I-D.ietf-ippm-ioam-data;

      &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;

      &I-D.ietf-detnet-security;

      &I-D.ietf-ippm-ioam-direct-export;

      &RFC7276;

      &RFC7384;

      &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>
    </references>
  </back>
</rfc>
