One document matched: draft-mglt-lwig-minimal-esp-01.xml


<?xml version="1.0" encoding="US-ASCII"?>
<?rfc linefile="1:/tmp/CGI11956.1"?>
<?rfc linefile="1:/tmp/CGI11956.1"?>
<?rfc toc="yes"?>
<!-- generate a table of contents -->
<?rfc symrefs="yes"?>
<!-- use anchors instead of numbers for references -->
<?rfc sortrefs="yes" ?>
<!-- alphabetize the references -->
<?rfc compact="yes" ?>
<!-- conserve vertical whitespace -->
<?rfc subcompact="no" ?>
<!-- but keep a blank line between list items -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2404 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2404.xml">
<!ENTITY RFC2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2403 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2403.xml">
<!ENTITY RFC5996 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5996.xml">
<!ENTITY RFC3686 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3686.xml">
<!ENTITY RFC3602 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3602.xml">
<!ENTITY RFC4106 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4106.xml">
<!ENTITY RFC4301 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4301.xml">
<!ENTITY RFC4303 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC4835 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4835.xml">
<!ENTITY RFC4494 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4494.xml">
<!ENTITY RFC3566 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3566.xml">
<!ENTITY RFC5856 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5856.xml">
<!ENTITY RFC4309 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4309.xml">
<!ENTITY I-D.raza-6lowpan-ipsec PUBLIC "" "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.raza-6lowpan-ipsec.xml">
]>

<rfc category="std"
     docName="draft-mglt-lwig-minimal-esp-01.txt"
     ipr="trust200902">
  <front>
    <title abbrev="Minimal ESP">Minimal ESP</title>
    <author fullname="Daniel Migault" initials="D." surname="Migault (Ed)">
      <organization>Orange</organization>
      <address>
        <postal>
          <street>38 rue du General Leclerc</street>
          <city>92794 Issy-les-Moulineaux Cedex 9</city>
          <country>France</country>
        </postal>
        <phone>+33 1 45 29 60 52</phone>
        <facsimile/>
        <!--<email>mglt.ietf@gmail.com</email>-->
        <email>daniel.migault@orange.com</email>
        <uri/>
      </address>
    </author>

    <author fullname="Tobias Guggemos" initials="T." surname="Guggemos">
      <organization>Orange / LMU Munich</organization>
      <address>
        <postal>
          <street>Am Osteroesch 9</street>
          <city>87637 Seeg</city>
          <region>Bavaria</region>
          <country>Germany</country>
        </postal>
        <phone/>
        <facsimile/>
        <email>tobias.guggemos@gmail.com</email>
        <uri/>
      </address>
    </author>


   <author fullname="Daniel Palomares" initials="D." surname="Palomares">
      <organization>Orange / LIP6</organization>
      <address>
        <postal>
          <street>10, Rue du Moulin</street>
          <city>92170 Vanves</city>
          <region>Ille-de-France</region>
          <country>France</country>
        </postal>
        <phone/>
        <facsimile/>
        <email>daniel.palomares@orange.com</email>
        <uri/>
      </address>
    </author>

	
    <date/>
    <area>INTERNET</area>

    <workgroup>Light-Weight Implementation Guidance (lwig)</workgroup>

    <abstract>
    <t>This document describes a minimal version of the IP
       Encapsulation Security Payload (ESP) described in 
       RFC 4303 which is part of the IPsec suite.</t>

    <t>ESP is used to provide
       confidentiality, data origin authentication, connectionless
       integrity, an anti-replay service (a form of partial sequence

       integrity), and limited traffic flow confidentiality. </t>

   <t>This document does not update or modify RFC 4303, but provides a
      compact description of the minimal version of the protocol.  If this
      document and RFC 4303 conflicts then RFC 4303 is the authoritative
      description.</t>
    </abstract>
  </front>

  <middle>

    <section title="Requirements notation">
      <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>
    </section>
    <section title="Introduction">

    <t>ESP <xref target="RFC4303"/>  is part of the IPsec suite protocol <xref target="RFC4301"/> .
       It is used to provide confidentiality, data origin authentication,
       connectionless integrity, an anti-replay service (a form of partial
       sequence integrity), and limited traffic flow confidentiality.</t>

    <t><xref target="fig-esp-description"/> describes an ESP Packet. Currently ESP is implemented in the kernel of IPsec aware devices. This document provides a minimal ESP implementation so that smaller devices like sensor without kernel and with hardware restriction can implement ESP on their own and benefit from IPsec.</t>
    <t>For each field of the ESP packet represented in <xref target="fig-esp-description"/> this document provides recommendations and guidance for minimal implementations.</t>


      <figure title="ESP Packet Description" anchor="fig-esp-description">
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
|               Security Parameters Index (SPI)                 | ^Int.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|                      Sequence Number                          | |ered
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ----
|                    Payload Data* (variable)                   | |   ^
~                                                               ~ |   |
|                                                               | |Conf.
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
|               |     Padding (0-255 bytes)                     | |ered*
+-+-+-+-+-+-+-+-+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |   |
|                               |  Pad Length   | Next Header   | v   v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------
|         Integrity Check Value-ICV   (variable)                |
~                                                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>

    </section>

    <section anchor="sec:spi" title="Security Parameter Index (SPI) (32 bit)">


        <t>According to the <xref target="RFC4303"/>, the SPI is a mandatory 32 bits field and is not allowed to be removed.</t>

        <t>The SPI is used to index the Security Association. The SPI MUST be unique so that any incoming ESP packet can appropriately be bound to its association. Uniqueness of the SPI may be provided by random functions. However, the SPI does not need to be unpredictable. As a result, if random functions are too costly for some constraint devices, the SPI can be generated using predictable functions or even fixed values.</t>

    <t>If a constraint device is expected to establish a single ESP connection with a single device, it can use a fix value for the SPI. Similarly, if a constraint device establish a single ESP connection with multiple devices, it may use the IPv4 or the interface ID for IPv6 addresses for example.</t>

<t>Values 0-255 SHOULD NOT be used. Values 1-255 are reserved and 0 is only allowed to be used internal and it must not be send on the wire.</t>


       <t> <xref target="RFC4303"/> mentions :
           <list style="hanging" hangIndent="3">
           <t hangText=" - "> "The SPI is an arbitrary 32-bit value that is used by a receiver to identify the SA to which an incoming packet is bound. The SPI field is mandatory. [...]"</t>
           <t hangText=" - "> "For a unicast SA, the SPI can be used by itself to specify an SA, or it may be used in conjunction with the IPsec protocol type (in this case ESP). Because the SPI value is generated by the receiver for a unicast SA, whether the value is sufficient to identify an SA by itself or whether it must be used in conjunction with the IPsec protocol value is a local matter. This mechanism for mapping inbound traffic to unicast SAs MUST be supported by all ESP implementations."</t>
             </list>
        </t>



    </section>


    <section anchor="sec-sn" title="Sequence Number(SN) (32 bit)">

    <t>According to  <xref target="RFC4303"/>, the sequence number is a mandatory 32 bits field in the packet. </t>

    <t>The SN is set by the sender so the receiver can implement anti-replay protection. The SN is derived from any strictly increasing function that guarantees: if packet B is sent after packet A, then SN of packet B is strictly greater then the SN of packet A.</t>
    <t>In IoT, constraint devices are expected to establish communication with specific devices, like a specific gateway, or nodes similar to them. As a result, the sender may know whereas the receiver implements anti-replay protection or not. Even though the sender may know the receiver does not implement anti replay protection, the sender MUST implement a always increasing function to generate the SN.</t>
    <t>Usually, SN is generated by incrementing a counter for each packet sent. A constraint device may avoid maintaining this context. If the device has a clock, it may use the time indicated by the clock has a SN. This guarantees a strictly increasing function, and avoid storing any additional values or context related to the SN.</t>
       <t> <xref target="RFC4303"/> mentions :
           <list style="hanging" hangIndent="3">
           <t hangText=" - ">
 "This unsigned 32-bit field contains a counter value that increases by one for each packet sent, i.e., a per-SA packet sequence number. For a unicast SA or a single-sender multicast SA, the sender MUST increment this field for every transmitted packet. Sharing an SA among multiple senders is permitted, though generally not recommended. [...] The field is mandatory and MUST always be present even if the receiver does not elect to enable the anti-replay service for a specific SA."</t>
    </list>
    </t>
    </section>


    <section anchor="sec-nh" title="Next Header (8 bit)">

    <t> According to <xref target="RFC4303"/>, the Next Header is a mandatory 8 bits field in the packet.</t>

       <t> <xref target="RFC4303"/> mentions :
           <list style="hanging" hangIndent="3">
           <t hangText=" - ">
 "The Next Header is a mandatory, 8-bit field that identifies the type of data contained in the Payload Data field, e.g., an IPv4 or IPv6 packet, or a next layer header and data. [...] the protocol value 59 (which means "no next header") MUST be used to designate a "dummy" packet.  A transmitter MUST be capable of generating dummy packets marked with this value in the next protocol field, and a receiver MUST be prepared to discard such packets, without indicating an error."</t>
    </list>
    </t>

   </section>

    <section anchor="sec-icv" title="ICV">

   <t>The ICV is an optional value with variable length. Although optional, we recommend strongly to use the ICV. Furthermore, <xref target="RFC4303"/> allows combined encryption and authentication ciphers, which enables the use of modes like GCM <xref target="RFC4106"/> , CCM and AES-CTR which make ICV mandatory.</t>
   <t>IoT devices may allow weak security by removing the ICV, and gateways wanting to connect to IoT devices SHOULD be able to deal with NULL authentication.</t>
       <t> <xref target="RFC4303"/> mentions :
           <list style="hanging" hangIndent="3">
           <t hangText=" - ">"The Integrity Check Value is a variable-length field computed over the ESP header, Payload, and ESP trailer fields. Implicit ESP trailer fields (integrity padding and high-order ESN bits, if applicable) are included in the ICV computation. The ICV field is optional. It is present only if the integrity service is selected and is provided by either a separate integrity algorithm or a combined mode algorithm that uses an ICV. The length of the field is specified by the integrity algorithm selected and associated with the SA. The integrity algorithm specification MUST specify the length of the ICV and the comparison rules and processing steps for validation."</t>
    </list>
    </t>

    </section>

    <section anchor="sec-encr" title="Encryption">

    <t> <xref target="RFC4303"/> specifies AES in CBC mode  <xref target="RFC3602"/> as mandatory for implementing ESP. For maximum interoperability with any gateway, it is recommended to implement AES in CBC mode.</t>

<t>AES and CBC mode has a 128 bit alignment which for small packets of a few bytes length generates a large overhead in term of extra padding bytes. For constraint devices especially those relying on battery, sending these unnecessary bytes may be avoided as it reduces there life time. The AES-CBC mode may then be abandoned, and modes like CCM <xref target="RFC4309"/> or AES CTR <xref target="RFC3686"/> may be used instead. These modes are not mandatory, but are part of the main IPsec distributions. As these IoT devices do not require to be accessed by all nodes on the Internet, implementation of AES-CTR only or CCM only may be considered. </t>

    </section>

    <section anchor="sec-padding" title="Padding">
    
    <t> <xref target="RFC4303"/> does not specify any way on how Padding bytes should be generated. These bytes may for example, be generated randomly or each byte may be numbered from \x01 to \xpad-length. A simplified implementation may consider a fix value, and consider all Padding bytes set to zero.</t>

    <t>Note that Padding can also be defined by the encryption algorithm like AES in CBC mode <xref target="RFC3602"/>. In that case, Padding MUST be performed as described in  <xref target="RFC3602"/>. However,  <xref target="RFC3602"/> does not specify how Padding bytes are generated, and AES in CTR or GCM or CCM mode do not consider Padding. As a result, currently, setting padding byte to zero can be proceeded.</t>

    </section>
    <section title="IANA Considerations">
    <t> There are no IANA consideration for this document.</t>
    </section>

    <section anchor="sec-security-considerations" title="Security Considerations">

    <t>Security considerations are those of <xref target="RFC4303"/>.</t>

    <t>Using a fix value for SPI may isolate the device, as it will not be able to set a communication with the peer if that SPI value is not available.</t>   
              
    </section>

    <section title="Acknowledgment">
    </section>

  </middle>

  <back>
    <references title="Normative References">
        &RFC2119;
        &RFC4106;
        &RFC4301;
        &RFC4303;
        &RFC3602;
        &RFC4309;
        &RFC3686;
    </references>

    <section title="Document Change Log">
      <t>[RFC Editor: This section is to be removed before publication]</t>
      <t>-00: First version published.</t>
    </section>
  </back>
</rfc>

PAFTECH AB 2003-20262026-04-24 02:56:28