<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict='yes'?>
<?rfc iprnotified='no'?>
<rfc category="info" docName="draft-templin-sealopt-01.txt" ipr="trust200902">
  <front>
    <title abbrev="SEAL">The SEAL IPv6 Destination Option</title>

    <author fullname="Fred L. Templin" initials="F. L." role="editor"
            surname="Templin">
      <organization>Boeing Research &amp; Technology</organization>

      <address>
        <postal>
          <street>P.O. Box 3707</street>

          <city>Seattle</city>

          <region>WA</region>

          <code>98124</code>

          <country>USA</country>
        </postal>

        <email>fltemplin@acm.org</email>
      </address>
    </author>

    <date day="13" month="January" year="2012" />

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>The Subnetwork Encapsulation and Adaptation Layer (SEAL) provides a
      mid-layer header designed for the encapsulation of an inner network
      layer packet within outer network layer headers. SEAL also supports a
      transport mode of operation, where the inner payload corresponds to an
      ordinary transport layer payload. However, SEAL can also provide benefit
      when used as an IPv6 destination option that contains a digital
      signature inserted by the source. The source can thereafter use the
      signature to verify that any ICMPv6 messages received actually came from
      a router on the path, while destinations that share a secret key with
      the source can verify the signature to ensure data origin
      authentication.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>The Subnetwork Encapsulation and Adaptation Layer (SEAL) <xref
      target="I-D.templin-intarea-seal"></xref> provides a mid-layer
      encapsulation designed for the encapsulation of an inner network layer
      packet within outer network layer headers, i.e., in a very similar
      manner as for GRE <xref target="RFC1701"></xref> and IPsec AH <xref
      target="RFC4302"></xref>. SEAL also supports a transport mode of
      operation, where the encapsulated payload corresponds to an ordinary
      transport layer protocol payload.</t>

      <t>However, SEAL can also provide benefit when used as an IPv6
      destination option <xref target="RFC2460"></xref> that contains a
      digital signature inserted by the source. The source can thereafter use
      the signature to verify that any ICMPv6 messages <xref
      target="RFC4443"></xref> received actually came from a router on the
      path, while destinations that share a secret key with the source can
      verify the signature to ensure data origin authentication.</t>
    </section>

    <section title="SEAL IPv6 Destination Option">
      <t>The SEAL IPv6 destination option can be inserted in either a "short
      form" or a "long form". In short form, the option includes a digital
      signature. In long form the option also includes an Identification value
      useful for anti-replay sequencing. The short form is formatted as shown
      in <xref target="min1"></xref>:</t>

      <t><figure anchor="min1"
          title="SEAL IPv6 Destination Option Format - Short Form">
          <artwork><![CDATA[                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  | Opt Data Len=4|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Signature                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure><list style="hanging">
          <t hangText="Option Type (8)">an 8-bit field that encodes the
          destination option code for SEAL, with the value '00' in the
          high-order two bits.</t>

          <t hangText="Option Data Length (8)">an 8-bit length of the option
          data field measured in octets. Set to 4 in short format, and set to
          8 in long format.</t>

          <t hangText="Digital Signature (32)"><vspace />a 32-bit digital
          signature. When a cryptographic signature is used, covers the
          leading 128 bytes of the packet beginning with the destination
          option header (or up to the end of the packet). The value 128 is
          chosen so that at least the IPv6 extension headers and the leading
          portion of the inner packet are covered by the signature.</t>
        </list></t>

      <t>The long form is formatted as shown in <xref
      target="min2"></xref><figure anchor="min2"
          title="SEAL IPv6 Destination Option Format - Long Form">
          <artwork><![CDATA[                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  | Opt Data Len=8|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Signature                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Identification                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure></t>

      <t><list style="hanging">
          <t hangText="Identification (32)"><vspace />a 32-bit per-packet
          identification field. Set to a monotonically-incrementing 32-bit
          value for each packet transmitted, beginning with 0.</t>
        </list></t>

      <t>The IPv6 source inserts a SEAL destination option when it needs to
      ensure that any resulting ICMPv6 error messages came from a router on
      the path and not from an off-path attacker. When the source receives an
      ICMPv6 error message, it verifies that the signature is correct. When a
      cryptographic signature is used, the source calculates the signature
      over the leading 128 bytes of the packet based on a secret hashing
      algorithm of its choosing. The source should choose a hashing algorithm
      that would make it extremely difficult for an off-path attacker to
      guess.</t>

      <t>The destination may or may not recognize the SEAL destination option.
      If the destination does not recognize the option, it skips the option
      and processes the next option. If the destination recognizes the option
      (and if the option contains a cryptographic signature), the destination
      may either verify or ignore the signature according to its
      configuration. If the destination is configured to verify the signature,
      then it should accept the packet if the signature is correct and discard
      the packet if the signature is incorrect.</t>
    </section>

    <section title="IANA Considerations">
      <t>The IANA is instructed to allocate an IPv6 destination option for
      SEAL, with the value '00' in the high-order two bits.</t>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>The source can use the SEAL destination option to verify that ICMPv6
      messages were delivered by an on-path router and not an off-path
      attacker. The signature may also be useful for other authenticating
      purposes, e.g., if the destination shares a secret key with the source.
      The packet identification field may also be useful for anti-replay
      sequencing.</t>
    </section>

    <section anchor="acknowledge" title="Acknowledgments">
      <t>This work was motivated by recent discussions on the 6man mailing
      list, and build on earlier investigations with SEAL. Sreenatha Setty
      provided valuable comments that helped clarify aspects of the
      document.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc ?>

      <?rfc ?>

      <?rfc include="reference.RFC.4443"?>

      <?rfc include="reference.I-D.templin-intarea-seal"?>

      <?rfc ?>

      <?rfc ?>

      <?rfc include="reference.RFC.2460"?>
    </references>

    <references title="Informative References">
      <?rfc ?>

      <?rfc ?>

      <?rfc ?>

      <?rfc include="reference.RFC.4302"?>

      <?rfc include="reference.RFC.1701"?>
    </references>
  </back>
</rfc>

