<?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 RFC2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3602 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3602.xml">
<!ENTITY RFC3686 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3686.xml">
<!ENTITY RFC4104 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4104.xml">
<!ENTITY RFC4106 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4106.xml">
<!ENTITY RFC4302 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4302.xml">
<!ENTITY RFC4303 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC4309 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4309.xml">
<!ENTITY RFC4434 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4434.xml">
<!ENTITY RFC5374 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5374.xml">
<!ENTITY RFC6311 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6311.xml">
<!ENTITY RFC6407 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6407.xml">
<!ENTITY RFC7296 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7296.xml">
<!ENTITY RFC7383 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7383.xml">
<!ENTITY RFC7634 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7634.xml">
<!ENTITY RFC8247 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8247.xml">
<!ENTITY RFC8221 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8221.xml">
<!ENTITY I-D.yeung-g-ikev2 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.yeung-g-ikev2.xml">
]>

<rfc category="std"
     docName="draft-ietf-ipsecme-implicit-iv-03"
     ipr="trust200902">
    <front>
        <title abbrev="Implicit IV in ESP">Implicit IV for Counter-based
Ciphers in Encapsulating Security Payload (ESP) </title>
        <author fullname="Daniel Migault" initials="D." surname="Migault">
            <organization>Ericsson</organization>
            <address>
                <postal>
         <street>8275 Trans Canada Route</street>
          <city>Saint Laurent, QC H4S 0B6</city>
          <country>Canada</country>
        </postal>
        <email>daniel.migault@ericsson.com</email>

            </address>
        </author>

        <author fullname="Tobias Guggemos" initials="T." surname="Guggemos">
            <organization>LMU Munich</organization>
            <address>
                <postal>
                    <street>Oettingenstr. 67</street>
                    <city>80538 Munich</city>
                    <region>Bavaria</region>
                    <country>Germany</country>
                </postal>
                <phone/>
                <facsimile/>
                <email>guggemos@mnm-team.org</email>
                <uri>http://mnm-team.org/~guggemos</uri>
            </address>
        </author>

     <author initials="Y." surname="Nir" fullname="Yoav Nir">
      <organization >Dell EMC</organization>
      <address>
        <postal>
          <street>9 Andrei Sakharov St</street>
          <city>Haifa</city>
          <code>3190500</code>
          <country>Israel</country>
        </postal>
        <email>ynir.ietf@gmail.com</email>
      </address>
    </author>




        <date/>
        <area>INTERNET</area>
        <workgroup>IPSECME</workgroup>
        <abstract>

<t>Encapsulating Security Payload (ESP) sends an initialization vector
(IV) or nonce in each packet. The size of IV depends on the applied
transform, being usually 8 or 16 octets for the transforms defined by
the time this document is written. Some algorithms such as AES-GCM,
AES-CCM, AES-CTR and ChaCha20-Poly1305 require a unique nonce but do not
require an unpredictable nonce. When using such algorithms the packet
counter value can be used to generate a nonce. This avoids sending the
nonce itself, and saves in the case of AES-GCM, AES-CCM, AES-CTR and
ChaCha20-Poly1305 8 octets per packet. This document describes how to do
this.</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 anchor="intro" title="Introduction">
              
<t>Counter-based AES modes of operation such as AES-CTR (<xref
target="RFC3686"/>), AES-CCM (<xref target="RFC4309"/>), and AES-GCM
(<xref target="RFC4106"/>) require the specification of an nonce for
each ESP packet. The same applies for ChaCha20-Poly1305 (<xref
target="RFC7634"/>). Currently this nonce is sent in each ESP packet
(<xref target="RFC4303"/>). This practice is designated in this document
as "explicit nonce".</t>

<t>In some context, such as IoT, it may be preferable to avoid carrying
the extra bytes associated to the IV and instead generate it locally on
each peer. The local generation of the nonce is designated in this
document as "implicit IV".</t>

<t>The size of this nonce depends on the specific algorithm, but all of
the algorithms mentioned above take an 8-octet nonce.</t>   

<t>This document defines how to compute the nonce locally when it is
implicit. It also specifies how peers agree with the Internet Key
Exchange version 2 (IKEv2 - <xref target="RFC7296"/>) on using an
implicit IV versus an explicit IV.</t>

<t>This document limits its scope to the algorithms mentioned above.
Other algorithms with similar properties may later be defined to use
this extension.</t> 

<t> This document does not consider
AES-CBC (<xref target="RFC3602"/>) as AES-CBC requires the IV to be
unpredictable. Deriving it directly from the packet counter as described
below is insecure as mentioned in Security Consideration of <xref
target="RFC3602"/> and has led to real world chosen plain-text attack
such as BEAST <xref target="BEAST"/>.</t>

        </section>

        <section anchor="sec:terminology" title="Terminology">
            
<t><list style="symbols">
                    
<t>IoT: Internet of Things.</t>
                    
<t>IV: Initialization Vector.</t>

<t>IIV: Implicit Initialization Vector.</t>

<t>Nonce: a fixed-size octet string used only once. This is similar to
IV, except that in common usage there is no implication of
non-predictability.</t>
                
</list></t>
        
</section>

<!--
       
<section anchor="sec-aes-cbc" title="Implicit IV with AES CBC">
            
<t>With AES-CBC, the IV is 16 bytes, random and unpredictable. In this
document, the binding between IV and ESP packet is performed using the
Sequence Number or the Extended Sequence Number. A clear text payload is
derived from the Sequence Number or the Extended Sequence Number. In
order to generate the IV randomly, AES is used as a random permutation.
A dedicated 16 byte key is used for each peer. key_iv_initiator (resp.
key_iv_responder) is used to derive the IV emitted by the initiator
(resp. the responder).</t>

<t>Keys key_iv_initiator and key_iv_responder MUST be agreed prior IPsec
packets are exchanged. When IKEv2 <xref target="RFC7296"/> is used these
keys are derived from the KEYMAT. key_iv_initiator is the first key
generated, followed by key_iv_responder.</t>
 
<t><xref target="fig-aes-cbc-ct-sn"/> (resp. <xref
target="fig-aes-cbc-ct-esn"/>) defines a clear text payload derived from
a 4 byte Sequence Number (resp. a 8 byte Extended Sequence Number)</t>

<figure anchor="fig-aes-cbc-ct-sn" title="Clear Text Payload for AES-CBC">
<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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               | 
|                              Zero                             | 
|                                                               | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                      Sequence Number                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>Where,
<list hangIndent="3" style="hanging">
    <t hangText="-">Sequence Number: the 4 byte Sequence Number carried in the ESP packet.</t>
    <t hangText="-">Zero: a 12 byte array with all bits set to zero.</t>
                
</list></t>

<figure anchor="fig-aes-cbc-ct-esn" title="Clear Text Payload for AES-CBC with Extended Sequence Number">
<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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                              Zero                             | 
|                                                               | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                         Extended                              |
|                      Sequence Number                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

<t>Where,
<list hangIndent="3" style="hanging">
                    
<t hangText="-">Extended Sequence Number: the 8 byte Extended Sequence
Number of the Security Association. The 4 byte low order bytes are
carried in the ESP packet.</t>
                   
<t hangText="-">Zero: a 8 byte array with all bits set to zero.</t>
                
</list></t>

        </section>
-->

        <section anchor="sec-aes-ctr-ccm-cgm"  title="Implicit IV">

<t>With the algorithms listed in <xref target="intro"/>, the 8 byte
nonce MUST NOT repeat. The binding between a ESP packet and its nonce is
provided using the Sequence Number or the Extended Sequence Number.
<xref target="fig-aes-ctr-ccm-gcm-iv-sn"/> and <xref
target="fig-aes-ctr-ccm-gcm-iv-esn"/> represent the IV with a regular
4-byte Sequence Number and with an 8-byte Extended Sequence Number
respectively.</t>

<figure anchor="fig-aes-ctr-ccm-gcm-iv-sn" title="Implicit IV with a 4 byte Sequence Number">
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                              Zero                             | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                      Sequence Number                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
</figure>
<t><list style="symbols">
   
<t>Sequence Number: the 4 byte Sequence Number carried in the ESP packet.</t>
    
<t>Zero: a 4 byte array with all bits set to zero.</t>
       
</list></t>

<figure anchor="fig-aes-ctr-ccm-gcm-iv-esn" title="Implicit IV with an 8 byte Extended Sequence Number">
        <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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                         Extended                              |
|                      Sequence Number                          | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ]]></artwork>
</figure>

        <t><list style="symbols">
           
<t>Extended Sequence Number: the 8 byte Extended Sequence Number of the
Security Association. The 4 byte low order bytes are carried in the ESP
packet.</t>
        
</list></t>
   
<t>As the IV MUST NOT repeat for one SA when Counter-Mode ciphers are
used, Implicit IV as described in this document MUST NOT be used in
setups with the chance that the Sequence Number overlaps for one SA.
Multicast as described in <xref target="RFC5374"/>, <xref
target="RFC6407"/> and <xref target="I-D.yeung-g-ikev2"/> is a prominent
example, where many senders share one secret and thus one SA. Section
3.5 of <xref target="RFC6407"/> provides a mechanism that MAY be used to
prevent IV collisions when the same key is used by multiple users. The
mechanism consists in partitioning the IV space between users by
assigning the most significant byte to a user. When implicit IV
transforms are used, such mechanism cannot be applied as the IV is not
sent, but instead it is derived from the Sequence Number. A similar
mechanism could be used by associating the most significant byte of the
Sequence Number to a sender, while the 3 remaining bytes will be used to
carry the counter value. Such mechanism prevents the use of Extended
Sequence Number and limits the number of packet to be sent to 2** 24 =
16777216, that is 16 M. Note that associating instead the least
significant byte of the Sequence Number to the sender, would enable the
system to use Extended Sequence Number and as such extend the limit of
packet to be sent to 2 ** ( 24 + 32 ) = 72057594037927936, that is 72 P.
Note also that in both cases the Sequence Number are not interpreted as
numeric values which impacts the replay window processing defined in
<xref target="RFC4302"/> and <xref target="RFC4302"/>.</t>

<t>Unless some mechanism are provided to avoid collision between
Sequence Number, ( and so IV ), Implicit IV MUST NOT be used. As such,
it is NOT RECOMMENDED to use Implicit IV with Multicast.</t>

</section>


<!--
    <section anchor="nego" title="Implicit IV Agreement">

<t>NOTE: THIS SECTION SHOWS SEVERAL WAYS TO DO THE SAME THING. OBVIOUSLY
THIS DOCUMENT WILL NOT BE PUBLISHED LIKE THAT. WE EXPECT WG DISCUSSION
TO PARE THIS DOWN TO JUST ONE WAY OF NEGOTIATING THE USE OF IMPLICIT IV
(IIV).</t>

<t>Negotiation of the use of implicit IV can be done in 3 different
ways: <list style="symbols">
        
<t> An IMPLICIT IV Transform Type. A proposal that contains this
transform type requires (if accepted) that IPsec use the implicit IV and
not include an explicit IV in the packets. To facilitate backward
compatibility with non-supporting implementations the Initiator SHOULD
add another proposal that does not include this transform type as well
as cryptographic suite the Initiator does not support the implicit
IV.</t>
        
<t> An IMPLICIT IV Transform ID. This doubles the number of ENCR
transform IDs by creating an ENCR_AES_CCM_16_IIV for each
ENCR_AES_CCM_16.</t>
          
<t> An IMPLICIT IV Transform Attribute, which would be associated to a
Transform Type ID, specifying the use of an implicit IV. marks a
particular ENCR transform as using implicit IVs. To facilitate backward
compatibility with non-supporting implementations the Initiator SHOULD
add another ENCR transform for each algorithm so marked. In other words,
for each ENCR_AES_CCM_16 with keylength=256 and IIV=1, there will need
to be an ENCR_AES_CCM_16 with keylength=256 and no IIV attribute.</t>
   
</list> </t>

    </section>
-->

    <section title="Initiator Behavior">

<t>An initiator supporting this feature SHOULD propose implicit IV
algorithms in the Transform Type 1 (Encryption Algorithm) Substructure
of the Proposal Substructure inside the SA Payload. To facilitate
backward compatibility with non-supporting peers the initiator SHOULD
also include those same algorithms without Implicit IV (IIV) as separate
transforms.</t>

    
</section>
    
<section title="Responder Behavior">
      
<t>The rules of SA Payload processing require that responder picks its
algorithms from the proposal sent by the initiator, thus this will
ensure that the responder will never send an SA payload containing the
IIV transform to an initiator that did not propose it.</t>

</section> <section title="Security Consideration"> 

<t>Nonce generation for these algorithms has not been explicitly
defined. It has been left to the implementation as long as certain
security requirements are met. Typically, for AES-GCM, AES-CCM, AES-CTR
and ChaCha20-Poly1305, the IV is not allowed being repeated for one
particular key. This document provides an explicit and normative way to
generate IVs. The mechanism described in this document meets the IV
security requirements of all relevant algorithms.</t>  
   
</section>

    <section title="IANA Considerations">

<t>This section assigns new code points to the recommended AEAD suites
provided in <xref target="RFC8221"/>, thus the new Transform Type 1 -
Encryption Algorithm Transform IDs <xref target="IANA"/> are as defined
below:

<list hangIndent="3" style="hanging"> 
<t hangText="-">ENCR_AES_CCM_8_IIV: 29</t> 
<t hangText="-">ENCR_AES_GCM_16_IIV: 30</t> 
<t hangText="-">ENCR_CHACHA20_POLY1305_IIV: 31</t> 
</list></t> 

<t>These algorithms should be added with this document as ESP Reference
and "Not Allowed" for IKEv2 Reference.</t>

</section>

    <section title="Acknowledgements">

<t>We would like to thanks people Valery Smyslov for their valuable
comments, David Schinazi for its implementation,  as well as the
ipseceme chairs Tero Kivinen and David Waltermire for moving this work
forward.</t>

    </section>
    </middle>
    <back>
        <references title="Normative References">
            &RFC2119;
            &RFC3602;
            &RFC3686;
            &RFC4106;
            &RFC4302;
            &RFC4303;
            &RFC4309;
            &RFC5374;
            <!--&RFC6311; -->
            &RFC6407;
            &RFC7296;
            &RFC7634;
            <!-- &RFC7383; -->
            <!-- &RFC8247; -->
            &RFC8221;
        </references>

       
        <references title="Informational References">
            &I-D.yeung-g-ikev2;

     <reference anchor="BEAST"
target="https://www.researchgate.net/publication/266529975_Here_Come_The_Ninjas">
        <front>
            <title>Here Come The xor Ninjas</title>
            <author initials="T. Duong" surname="Thai" fullname="Thai
Duong">
                <organization />
            </author>
            <author initials="J. Rizzo" surname="Juliano"
fullname="Juliano Rizzo">
                <organization />
            </author>
            <date day="13" month="May" year="2011" />
        </front>
        <seriesInfo name="" value="" />
    </reference>
 
    <reference anchor="IANA"
target="https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml#ikev2-parameters-5">

    <front>
    <title>IANA IKEv2 Parameter - Type 1 - Encryption Algorithm
Transform IDs </title>
    <author/>
    <date/>
    </front>

    </reference>
        </references>

    </back>
</rfc>
