<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='./rfc2629.xslt' ?>

<?rfc toc="yes"?>
<?rfc symrefs="no"?>
<?rfc compact="yes" ?>
<?rfc sortrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc linkmailto="yes" ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" >
    
<?xml-stylesheet type='text/xsl' href='./rfc2629.xslt' ?>

<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="yes" ?>
<?rfc sortrefs="yes" ?>
<rfc ipr="trust200902" docName="draft-amjads-ipsecme-ikev2-data-channel-00" category="std">
  <front>
    <title abbrev="IKEv2 data channel">IKEv2 based lightweight secure data communication</title>
  <author initials="Amjad" surname="Inamdar" fullname="Amjad S. Inamdar">
      <organization abbrev="Cisco">Cisco Systems India Pvt. Ltd.</organization>
      <address>
        <postal>
          <street>SEZ Unit, Cessna Business Park</street>
		  <street>Sarjapur Marathahalli Outer Ring Road</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560087</code>
          <country>India</country>
        </postal>
        <phone>+91 80 4426 4834</phone>
        <email>amjads@cisco.com</email>
      </address>
    </author>
    <author initials="R" surname="Singh" fullname="Rajeshwar Singh Janwar">
      <organization abbrev="Cisco">Cisco Systems India Pvt. Ltd.</organization>
      <address>
        <postal>
		  <street>SEZ Unit, Cessna Business Park</street>
		  <street>Sarjapur Marathahalli Outer Ring Road</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560087</code>
          <country>India</country>
        </postal>
        <phone>+91 80 4426 2731</phone>
        <email>rsj@cisco.com</email>
      </address>
    </author>
    <date year="2013"/>
    <area>Security Area</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t> This document describes an IKEv2 based lightweight secure data communication mechanism over UDP port 4500,
		  that supports reliable and unreliable data transfers, integrity protected encryption and integrity-only protection, in-band and out-of-band keys, fragmentation and payload identification. With this mechanism, IKEv2 provides a complete secure connectivity solution that addresses key management and secure data communication needs of applications. </t>
	</abstract>
  </front>
  
  <middle>
    <!-- ====================================================================== -->
    <section title="Introduction" toc="default">
        <t> The Internet Key Exchange Protocol version 2 (IKEv2), specified in <xref target= "RFC5996">RFC5996 </xref>, is a UDP based reliable protocol that provides encrypted and integrity protected secure communication channel similar to ESP defined in <xref target="RFC4303"> RFC4303 </xref>. IKEv2 defines mechanisms for mutual authentication of peers, session key establishment, SA management and exchange of configuration information. As IKEv2 provides encryption, integrity protection, replay protection along with reliable communication, mobility, windowing, load-balancing and fragmentation, IKEv2 has all the properties required for scalable secure data communication. </t>
              
        <t> This document defines an IKEv2 based secure data communication mechanism over UDP port 4500, henceforth referred to as IKEv2 data channel in this document. To be able to use IKEv2 data channel the IKEv2 negotiation MUST start on port 4500. For application multiplexing, either ephemeral source UDP port numbers or IKEv2 identity MAY be used. A packet received on UDP port 4500 can either be an IKE packet or an ESP packet. The first 4 octets of the UDP payload are used to differentiate between IKE and ESP packets. For ESP packets the first octets form the ESP SPI, a non-zero value with values 1 through 255 reserved. This draft proposes to use one of the reserved ESP SPI values as IKEV2-DATA-MARKER to identify IKEv2 data packets. Differentiating IKEv2 data packets from control packets allows to leverage the IKEv2  protocol's security and reliability mechanisms and security parameters for data communication while avoiding the overhead of IKEv2 header and generic payload headers for data packets. It also enables the support for unacknowledged data transfer, integrity-only protection, out-of-band keys, fragmentation, payload identification and secure group communication. Similar to Childless IKEv2 defined in <xref target="RFC6023"> RFC6023</xref>, IKEv2 data channel does not negotiate/require child IPsec SA in the IKEv2 initial exchange and subsequently.  </t>             

        <t> Please refer the appendix section of this document for details on the alternative mechanisms that were considered for data communication over IKEv2 and their drawbacks. </t>

        <t> Secure connectivity in Internet of Things (IoT) and Machine to Machine (M2M) domains offers unique challenges. The challenges of secure connectivity solution for IoT and M2M are: being lightweight, scalability, reliability and easier deployment. The solution must be lightweight for the resource constrained IoT devices, scalable for IoT gateways to aggregate a multitude of IoT devices, reliable for the lossy sensor networks and easily deployable on a variety of IoT device and gateway vendor platforms and operating systems. </t>

        <t> IKEv2 data channel is lightweight and scalable as it is UDP based and hence resides in the application layer. It resides in the operating system user space and does not require integration within operating system kernel. It uses only parent IKEv2 SA negotiation. It uses a minimal overhead secure encapsulation by avoiding the overhead of IKEv2 header and generic payload headers for data packets. IKEv2 data channel provides reliability using the IKEv2 protocol's retransmission mechanism. IKEv2 data channel does not require operating system integration and resides in application space, hence it is easily deployable on different operating system platforms. So IKEv2 data channel addresses the above challenges of secure connectivity solution for IoT and M2M.</t>

       <t> Further, IKEv2 data channel also provides unreliable data transfer, an option for integrity-only protection for applications that do not require confidentiality such as routing protocols. IKEv2 data channel can also provide secure group communication by integrating with group keying mechanism such as Group Key Management using IKEv2 defined in <xref target="G-IKEv2"> G-IKEv2</xref>.</t>
	</section>   
	
	<section title="Terminology" toc="default">
		<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" pageno="false" format="default">RFC 2119</xref>.</t>
	</section>
	
	<section toc= "default" title= "Benefits">
		<t> Following are some of the benefits of IKEv2 data channel:
		<list style="numbers">
			<t>Lightweight and scalable data communication mechanism. </t>
			<t>Support for acknowledged and unacknowledged data transfer. </t> 
			<t>Support for integrity-only protection, in addition to integrity protected encryption. </t>
			<t>Support for multicast communication using G-IKEv2 as control channel. </t>
			<t>Easier integration and adoption across multiple platforms and operating systems as the IKEv2 protocol resides in OS application layer (user space). </t>
			<t>Reliable secure communication over UDP suitable for lossy networks. </t>
			<t>Better NAT and firewall traversal, IKEv2 protocol being UDP based. </t>
			<t>Leverages the built in support for mobility, fragmentation and load balancing mechanisms in IKEv2. </t>
			<t>Support for IKEv2 based certificate as well pre-shared key and EAP authentication methods. </t>
			<t>As IKEv2 is an identity centric protocol rather than IP centric, IKEv2 data channel provides easier integration with policy servers in dynamic deployment scenarios. </t>
			<t>IKEv2 data channel can leverage any protocol improvements to IKEv2 control channel e.g.  <xref target="Minimal-IKEv2"> Minimal IKEv2 </xref>. </t>
			<t>Since IKEv2 data channel uses the same UDP port as control channel, it works seamlessly with load balancers and PAT devices. </t>
			<t>Support for payload type identification in tunnelling mode, allowing a session to carry multiple traffic types such as IPv4, IPv6, non-IP and other traffic types </t>
			<t>Support for application multiplexing using either ephemeral source UDP port numbers or IKEv2 identity.</t>
		</list>
		</t>
	 </section>
	 
	<section toc= "default" title= "Usage Scenarios"> 
		<t> One of the main use cases envisaged for IKEv2 data channel is secure communication for IoT and M2M for endpoint to endpoint and endpoint to gateway that would aggregate and relay the connections to back-end applications. </t>

		<t> 1. Endpoint to Endpoint: IKEv2 data channel in endpoint to endpoint scenario offers the advantages of being lightweight and easily deployable being data-plane and hardware independent. </t>
			   
		<figure align="left" title="Endpoint to Endpoint">
			<artwork align="left" xml:space="preserve"> 
               ----------                        ----------
              |          |  IKEv2 data channel  |          |
              | Endpoint |&lt;--------------------&gt;| Endpoint |
              |          |                      |          |
               ----------                        ---------- 
			</artwork>
		</figure>
		
		<t> 2. Endpoint to Security Gateway: IKEv2 data channel in endpoint to security gateway scenario offers the advantages being scalable to be able to aggregate large number of sessions and relay the connections to back-end applications in the datacenter.</t>
		<figure align="left" title="Endpoint to Gateway">
			<artwork align="left" xml:space="preserve"> 
               ----------                       ---------
              |          |  IKEv2 data channel |         |    Back-end 
              | Endpoint |&lt;-------------------&gt;| Gateway |&lt;-&gt; Applications 
              |          |                     |         |
               ----------                       ---------
			</artwork>
		</figure>
		
		<t>
		Use-cases of IKEv2 data channel for IoT and M2M scenarios:
		<list style="numbers">
			<t>UDP based IKEv2 data channel provides a lightweight and scalable secure connectivity solution for IoT and M2M domains. </t>
			<t>The IKEv2 data channel's reliable data transfer is suitable for lossy sensor networks. </t>
			<t>The IKEv2 data channel's unreliable data transfer is suitable for delay sensitive applications. </t>
			<t>The IKEv2 data channel's integrity-only protection is suitable for routing protocol security. </t>
			<t>With IKEv2 data channel, IKEv2 provides a single and complete solution for key management and secure communication needs of the applications such as IoT and M2M. </t>
		</list>
		</t>
		<t> <vspace blankLines="1" /> </t>
	</section>
	
	<section toc= "default" title= "Protocol Outline">
		<t> This document proposes following extensions to IKEv2 protocol for data communication:
			<list style="symbols">
				<t>IKEv2 Notify type 'IKEV2_DATA_CHANNEL_SUPPORTED' for IKEv2 data channel negotiation.</t>
				<t>IKEv2 packet formats for IKEv2 Data and Data-Ack packets.</t>
			</list>
		</t>
	</section>
	
	<section toc= "default" title= "IKEv2 data channel capabilities">
		<t> IKEv2 data channel will support the following data transfer modes:
			<list style="symbols">
			<t>Acknowledged data transfer</t>
			<t>Unacknowledged data transfer </t>
			</list>
			</t>
		<t> IKEv2 data channel will support the following data protection modes:
			<list style="symbols">
			<t>Encryption and Integrity protection</t>
			<t>Integrity only protection</t>
			</list>
			</t>

		<t> IKEv2 data channel will support in-band and out-of-band keys:
			<list style="symbols">
			<t>IKEv2 data channel using the same keys as IKEv2 control channel (in-band) </t>
			<t>IKEv2 data channel using the different keys from IKEv2 control channel (out-of-band) </t>
			</list>
			</t>
			
		<t> IKEv2 data channel will support data fragmentation built within IKEv2 data payload. </t>
		
		<t> The IKEv2 data channel capabilities are negotiated using the IKEV2_DATA_CHANNEL_SUPPORTED Notify in IKE_SA_INIT exchange. Any combination of data transfer modes, protection modes and in-band or out-of-band keys can be negotiated. </t>
		
		<section title= "Acknowledged data transfer">
		<t> This data transfer mode provides a lightweight reliable data transfer over UDP suitable for lossy transports such as sensor networks. This mode will use IKEv2 protocol's existing reliability and windowing mechanisms as described in [RFC5996]. This mode uses IKEv2 data and data-ack packets. The Message IDs are used for reliability and replay protection. </t>
		<t> <vspace blankLines="2" /> </t>
		<figure align="left" title="Acknowledged data transfer">
			<artwork align="left" xml:space="preserve"> 			
   Initiator             Responder
   -------------------------------
 a)  IKEv2-Data     --&gt;
                    &lt;--  IKEv2-Data-Ack

 b)  IKEv2-Data     --&gt;
                    &lt;--  IKEv2-Data-Ack

 c)                 &lt;--  IKEv2-Data
     IKEv2-Data-Ack --&gt;
			</artwork>
		</figure>
		</section>
		
		<section title= "Unacknowledged data transfer">
		<t> This mode provides unreliable data transfer over UDP suitable for delay sensitive traffic such as voice. This mode uses unidirectional packet sequence numbers for replay protection similar to ESP anti-replay mechanism as described in [RFC4303]. This mode uses IKEv2 data packets with no data-ack packets. </t>
		
		<figure align="left" title="Unacknowledged data transfer">
			<artwork align="left" xml:space="preserve">
   Initiator             Responder
   -------------------------------
a)  IKEv2-Data   --&gt;

b)  IKEv2-Data   --&gt;

c)               &lt;--  IKEv2-Data

d)               &lt;--  IKEv2-Data
			</artwork>
		</figure>
		</section>
		
		<section title= "Encryption and Integrity protection">
		<t> This protection mode provides encryption and integrity protection of IKEv2 data packets similar to the IKEv2 Encrypted payload as defined in [RFC5996].</t>
		</section>
		
		<section title= "Integrity only protection">
		<t> This protection mode provides integrity protection of IKEv2 data packets and no encryption similar to ESP null encryption as described in [RFC4303]. This is suitable for applications that just need data integrity and not confidentiality such as routing protocol exchanges.</t>
		<t> <vspace blankLines="1" /> </t>
		</section>
		
		<section title= "In-band keys">
		<t> IKEv2 data channel will use the same keys as IKEv2 control channel to provide encryption and integrity protection. With in-band keys, for additional security, the IKEv2 nodes MAY force a rekey immediately after the initial exchange to protect the credentials exchanged in the   initial exchange, even if the keys were to be compromised after the initial exchange.   </t>
		</section>
		
		<section title = "Out-of-band keys">
		<t> IKEv2 data channel will use different keys from IKEv2 control channel to provide encryption and integrity protection. The negotiation of out-of-band keys is outside the scope of IKEv2 data channel. An example of out-of-band keys is the group keys negotiated using <xref target="G-IKEv2"> G-IKEv2 </xref>. </t>
		</section>
		
		<section title= "Fragmentation">
		<t> IKEv2 data channel provides fragmentation of the cleartext data payload based on a pre-configured MTU value, in order to avoid fragmentation after encryption. The fragmentation is done on cleartext packet before encryption and integrity protection. The Fragment bit, Frag Num field, and Total Fragment fields in IKEv2 data packet specify if the packet contains a fragment, the fragment number and the total number of fragments respectively. The receiver SHOULD decrypt and reassemble the cleartext fragments after receiving and validating all the encrypted fragments. </t>
		</section>
	</section>
    
	<section  title="IKEv2 data channel negotiation" toc="default"> 
		<t> IKEv2 nodes can negotiate to use IKEv2 data channel and its capabilities by exchanging IKEV2_DATA_CHANNEL_SUPPORTED Notify type in IKE_SA_INIT exchange.
		<list style="symbols">
		<t> IKEv2 initiator can communicate its intent to use IKEv2 data channel by including a notify payload of type IKEV2_DATA_CHANNEL_SUPPORTED along with the proposed capabilities in IKE_SA_INIT request.<vspace blankLines="1"/></t>

		<t> IKEv2 responder can indicate its willingness to use IKEv2 data channel with the proposed capabilities by including a notify payload of type IKEV2_DATA_CHANNEL_SUPPORTED along with the same capabilities in IKE_SA_INIT response.<vspace blankLines="1"/></t>

		<t> If the capabilities proposed by IKEv2 Initiator are not acceptable to IKEv2 responder, it MUST NOT include IKEV2_DATA_CHANNEL_SUPPORTED Notify type in IKE_SA_INIT response.<vspace blankLines="1"/></t>

		<t> The absence of Notify payload of type IKEV2_DATA_CHANNEL_SUPPORTED in IKE_SA_INIT response indicates the incapability or unwillingness of the IKEv2 responder to use IKEv2 data channel.<vspace blankLines="1"/></t>

		<t> If IKEv2 responder does not include the same capabilities as proposed by IKEv2 initiator, IKEv2 initiator MUST treat this as unsuccessful negotiation of IKEv2 data channel.<vspace blankLines="1"/></t>

		<t> On unsuccessful negotiation of IKEv2 data channel, IKEv2 initiator and responder MUST NOT use IKEv2 data channel for data transfer. However rest of the IKEv2 negotiation can proceed as normal.<vspace blankLines="1"/></t>

		<t> On successful negotiation of IKEv2 Data Channel, IKEv2 Initiator and Responder MUST exclude any payloads related to Child SA negotiation in IKE_AUTH exchange and can use IKEv2 data channel for data transfer.<vspace blankLines="1"/></t>
		</list>
		</t>
		
		<figure align="left" title="IKEv2 data channel negotiation">
			<artwork align="left" xml:space="preserve">
 Initiator                                 Responder
  ------------------------------------------------------
  HDR, SAi1, KEi, Ni     
   [N(IKEV2_DATA_CHANNEL_SUPPORTED)] --&gt;

                         &lt;-- HDR, SAr1, KEr, Nr, [CERTREQ]
                                 N(IKEV2_DATA_CHANNEL_SUPPORTED)    
  
  HDR, SK {IDi, [CERT,]
       [CERTREQ,] [IDr,]
	   AUTH, [CP(CFG_REQUEST)]   --&gt;
	   
							&lt;-- HDR, SK {IDr, [CERT,] AUTH, 
												[CP(CFG_REPLY)]							 
			</artwork>
		</figure>	
		<t> <vspace blankLines="13" /> </t>		
	</section>
	
	<section toc = "default" title= "IKEv2 data channel payload formats">
	<t></t>
		<section anchor="notify" toc= "default" title= "IKEV2_DATA_CHANNEL_SUPPORTED Notify payload">
			<figure align="left" title="IKEV2_DATA_CHANNEL_SUPPORTED Notify payload">
				<artwork align="left" xml:space="preserve">
                            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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       ! Next Payload  !C!  RESERVED   !         Payload Length        !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       !  Protocol ID  !   SPI Size    !      Notify Message Type      !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       !     Flags     !                   RESERVED                    !
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
				</artwork>
			</figure>
	<t> 
		<list style="symbols">
			<t>Protocol ID (1 octet): MUST be 1, as this message is related to an IKEv2 SA.<vspace blankLines="1"/></t>
			<t>SPI Size (1 octet): MUST be zero, in conformance with section 3.10 of [RFC5996].<vspace blankLines="1"/></t>
			<t>Notify Message Type (2 octets): MUST be xxxxx, the value assigned for IKEV2_DATA_CHANNEL_SUPPORTED by IANA.<vspace blankLines="1"/></t>
			<t>Flags (8 bits): Specify the IKEv2 Data channel properties
				<list style="symbols">
					<t>bit 0:
						<list style="empty">
							<t>0 - Acknowledged transfer</t>
							<t>1 - Unacknowledged transfer</t>							
						</list>
						<vspace blankLines="1"/>
					</t>
					<t>bit 1:
						<list style="empty">
							<t>0 - Encryption and Integrity protection</t>
							<t>1 - Integrity-only protection</t>
						</list>
						<vspace blankLines="1"/>
					</t>
					<t>bit 2:
						<list style="empty">
							<t>0 - Use same keys for IKEv2 Control and Data channel protection (In-band keys)</t>
							<t>1 - Use different keys for IKEv2 Control and Data channel protection (Out-of-band keys)</t>
						</list>
						<vspace blankLines="1"/>
					</t>
					<t>bit 3-7:
						<list style="empty">
						<t>Reserved, sender MUST set these bits to zero and receiver MUST ignore it</t>
						</list>	
					</t>
				</list>	
			</t>
		</list>	
	</t>
		<t> <vspace blankLines="10" /> </t>
	</section>
	
	<section toc= "default" title= "IKEv2 data payload">
		<figure align="left" title="IKEv2 data payload">
			<artwork align="left" xml:space="preserve">
	                    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |  Payload Type |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Frag Num   |  Total Frags  |           RESERVED            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             SPI                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Sequence Number                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Initialization Vector                     |
   |         (length is block size for encryption algorithm)       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                    Encrypted/Cleartext Data                   ~
   +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               |             Padding (0-255 octets)            |
   +-+-+-+-+-+-+-+-+                               +-+-+-+-+-+-+-+-+
   |                                               |  Pad Length   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                    Integrity Checksum Data                    ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			</artwork>
		</figure>
	<t>
		<list style="symbols">
			<t>Flags (1 octet): 
				<list style="symbols">
					<t>bit-0 (Ack bit): The Ack bit MUST be used only when unacknowledged data transfer is negotiated.
						<list style="empty">
							<t>0 - Payload is a data packet</t>
							<t>1 - Payload is a data ack packet</t>
						</list>
						<vspace blankLines="1"/>
					</t>
					<t>bit-1 (Fragment bit): Specifies if the payload is a fragment.
						<list style="empty">
							<t>0 - Payload is not a fragment</t>
							<t>1 - Payload is a fragment</t>
						</list>
						<vspace blankLines="1"/>
					</t>
					<t>bit-2-7: Reserved, sender MUST set these bits to zero and receiver MUST ignore it</t>
				</list>
				<vspace blankLines="1"/>
			</t>
			<t> Payload Type (1 octets): Identifies the payload type in tunnelling mode, allowing a session to carry multiple traffic types such as IPv4, IPv6, non-IP and other traffic types.
				<list style="empty">
					<t>0 - Not used</t>
					<t>1 - IPv4</t>
					<t>2 - IPv6</t>
					<t>3-255 - Reserved</t>
				</list>
				<vspace blankLines="1"/>
			</t>
			<t>Length (2 octets, unsigned integer): Length in octets of the entire IKEv2 Data packet.<vspace blankLines="1"/></t>
			<t>Frag Num (1 octet): Specifies fragment number if Fragment bit is set. If Fragment bit is not set, sender MUST set this field to zeros and receiver MUST ignore it.<vspace blankLines="1"/></t>	
			<t>Total Frags (1 octet): Specifies the total number of fragments number, if Fragment bit is set. If Fragment bit is not set, sender MUST set this field to zeros and receiver MUST ignore it.<vspace blankLines="1"/></t>	
			<t>SPI (8 octets): A value used be receiver to lookup the session associated with the packet in order to verify integrity and decrypt the data packet. This value is usually the data packet receiver's IKE SPI.<vspace blankLines="1"/></t>
			<t>Sequence Number (4 octets): This field identifies the IKEv2 Data packet sequence numbers. For acknowledged data transfer, this field is used for re-transmission, windowing and anti-replay checks. For unacknowledged data transfer, this field is used for anti-replay checks.</t>
		</list>	
	</t>
	</section>
	
	<section toc= "default" title= "IKEv2 data ack payload">
	<t>
	The IKEv2 Data Ack packet is integrity protected and is not encrypted as it does not carry any data. The Data Ack packet contains the SPI to identify the session and Sequence number to identify the packet being acknowledged.
	</t>
		<figure align="left" title="IKEv2 data ack payload">
			<artwork align="left" xml:space="preserve">
                        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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Flags     |    RESERVED   |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             SPI                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Sequence Number                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                    Integrity Checksum Data                    ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			</artwork>
		</figure>	
	<t>
		<list style="symbols">
			<t>Flags (1 octet):
				<list style="empty">
					<t>	bit 0 (Ack bit): Set to 1 to indicate it is a Data Ack packet.</t>
					<t>	bits (1-7): Reserved, sender MUST set these bits to zero and receiver MUST ignore them.</t>
				</list>
				<vspace blankLines="1"/>	
			</t>
			<t>Length (2 octets, unsigned integer): Length in octets of the entire IKEv2 Data Ack packet.<vspace blankLines="1"/></t>
			<t>SPI (8 octets): A value used be receiver to lookup the session associated with the packet in order to verify integrity of the data ack packet.<vspace blankLines="1"/></t>
			<t>Sequence Number (4 octets): This field identifies the sequence number of the IKEv2 Data packet being acknowledged.<vspace blankLines="1"/></t>
		</list>
	</t>		
	</section>
	
	</section>
	
	<section toc= "default" title= "Security Considerations">
		<t> This protocol variation inherits all the security properties of regular IKEv2 as described in [RFC5996].
			The new notification carried in the initial exchange advertises the capability, and cannot be forged or added by an adversary without being detected, because the response to the initial exchange is authenticated with the AUTH payload of the IKE_AUTH exchange.
			IKEv2 data payload inherits all security properties of ESP protocol defined in [RFC4303].</t>
	</section>
	<section  title="IANA Considerations" toc="default">        
    <t>
        This document introduces one new IKEv2 Notification Message types as described in <xref target= "notify"></xref>. The new Notify Message Types must be assigned values between 16429 and 40959. 
		<list style="symbols">    
			<t> IKEV2_DATA_CHANNEL_SUPPORTED</t>    
		</list>
	</t>
		<t> This document proposes to use one of the reserved ESP SPI values (1 through 255, preferably 1) as
		IKEV2-DATA-MARKER to identify IKEv2 data packets received over UDP port 4500. </t>
    </section>  
	
    <section   toc="default" title="Acknowledgements">
      <t>  We would like to thank following people (in alphabetical order) for their review comments and valuable 
             suggestions for idea and initial version of the document:  Amit Phadnis, Arif Shouqi, Balaji B L, Brian Weis, Cheryl Madson, Frederic Detienne, J P Vasseur, Kalyani Garigipati, Mike Sullenberger, Naresh Sunkara, Nick Doyle, Paul Hoffman, Rajiv Shankar Daulath, Ramesh Nethi, Sandeep Rao, Scott Fluhrer, and Thamil Kandasamy. </t>             
    </section>    

	<section anchor="history" title="Change Log">
		<t> This section lists all the changes in this document. </t>
        <t> NOTE TO RFC EDITOR: Please remove this section in before final RFC publication.</t>
    </section>
    
  </middle>  
 
  <!-- ====================================================================== -->
  
  <back>    
<references title="Normative References"> 
     <reference anchor='RFC5996'>
        <front>
          <title>Internet Key Exchange Protocol Version 2: IKEv2</title>
          <author initials='C.' surname='Kaufman' fullname='C. Kaufman'>
            <organization>Microsoft</organization></author>
          <author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
            <organization>VPN Consortium</organization></author>
          <author initials='Y.' surname='Nir' fullname='Y. Nir'>
            <organization>Check Point</organization></author>
          <author initials='P.' surname='Eronen' fullname='P. Eronen'>
            <organization>Nokia</organization></author>
          <date year='2010' month='September' />
        </front>
        <seriesInfo name='RFC' value='5996' />
        <format type='TXT' target='http://tools.ietf.org/rfc/rfc5996.txt' />
        <format type='HTML' target='http://tools.ietf.org/html/rfc5996' />
      </reference>
	  
	  <reference anchor='RFC4303'>
        <front>
          <title>IP Encapsulating Security Payload (ESP)</title>
          <author initials='S.' surname='Kent' fullname='S. Kent'>
            <organization>BBN Technologies</organization></author>
          <date year='2005' month='December' />
        </front>
        <seriesInfo name='RFC' value='4303' />
        <format type='TXT' target='http://tools.ietf.org/rfc/rfc4303.txt' />
        <format type='HTML' target='http://tools.ietf.org/html/rfc4303' />
      </reference>
	  
		<reference anchor='RFC6023'>
		 <front>
          <title>A Childless Initiation of IKEv2 SA</title>
          <author initials='Y.' surname='Nir' fullname='Y. Nir'>
            <organization>Check Point</organization></author>
		<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'>
            <organization>NSN</organization></author>
		<author initials='H.' surname='Deng' fullname='H. Deng'>
            <organization>China Mobile</organization></author>
		<author initials='R.' surname='Singh' fullname='R. Singh'>
            <organization>Cisco</organization></author>
          <date year='2010' month='October' />
        </front>
        <seriesInfo name='RFC' value='6023' />
        <format type='TXT' target='http://tools.ietf.org/rfc/rfc6023.txt' />
        <format type='HTML' target='http://tools.ietf.org/html/rfc6023' />
		</reference>
	  <reference anchor='IKEv2-Fragmentation'>
        <front>
          <title>IKEv2 Fragmentation</title>
          <author initials='V.' surname='Smyslov' fullname='V. Smyslov'>
            <organization>ELVIS-PLUS</organization></author>
          <date year='2013' month='September' />
        </front>
        <seriesInfo name='Internet-Draft' value='draft-ietf-ipsecme-ikev2-fragmentation-02' />
        <format type='TXT'
          target='http://tools.ietf.org/id/draft-ietf-ipsecme-ikev2-fragmentation-02.txt' />
        <format type='HTML'
          target='http://tools.ietf.org/html/draft-ietf-ipsecme-ikev2-fragmentation-02' />
      </reference>
	  <reference anchor='G-IKEv2'>
        <front>
          <title>Group Key Management using IKEv2</title>
          <author initials='S. R.' surname='Rowles' fullname='S.R. Rowles'>
            <organization>Cisco</organization></author>
          <author initials='A.Y.' surname='Yeung' fullname='A.Y. Yeung'>
            <organization>Cisco</organization></author>
		  <author initials='P. T.' surname='Tran' fullname='P. T. Tran'>
            <organization>Cisco</organization></author>
          <author initials='Y.' surname='Nir' fullname='Y. Nir'>
            <organization>Check Point</organization></author>
          <date year='2013' month='April' />
        </front>
        <seriesInfo name='Internet-Draft' value='draft-yeung-g-ikev2-06' />
        <format type='TXT'
          target='http://tools.ietf.org/id/draft-yeung-g-ikev2-06.txt' />
        <format type='HTML'
          target='http://tools.ietf.org/html/draft-yeung-g-ikev2-06' />
      </reference>
	  <reference anchor='Minimal-IKEv2'>
        <front>
          <title>Minimal IKEv2</title>
          <author initials='T.' surname='Kivinen' fullname='Tero Kivinen'>
            <organization>INSIDE Secure</organization></author>
          <date year='2013' month='April' />
        </front>
        <seriesInfo name='Internet-Draft' value='draft-ietf-lwig-ikev2-minimal-00.txt' />
        <format type='TXT'
          target='http://tools.ietf.org/id/draft-ietf-lwig-ikev2-minimal-00.txt' />
        <format type='HTML'
          target='http://tools.ietf.org/html/draft-ietf-lwig-ikev2-minimal-00' />
      </reference>
		<reference anchor="RFC2119">
        <front>
          <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement
            Levels</title>
          <author initials="S." surname="Bradner" fullname="Scott Bradner">
            <organization>Harvard University</organization>
            <address>
              <postal>
                <street>1350 Mass. Ave.</street>
                <street>Cambridge</street>
                <street>MA 02138</street>
              </postal>
              <phone>- +1 617 495 3864</phone>
              <email>sob@harvard.edu</email>
            </address>
          </author>
          <date year="1997" month="March"/>
          <area>General</area>
          <keyword>keyword</keyword>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <format type="TXT" octets="4723" target="ftp://ftp.isi.edu/in-notes/rfc2119.txt"/>
        <format type="HTML" octets="16553"
          target="http://xml.resource.org/public/rfc/html/rfc2119.html"/>
        <format type="XML" octets="5703" target="http://xml.resource.org/public/rfc/xml/rfc2119.xml"
        />
		</reference>
     
	 </references>

<references title="Informative References"> 
    
     <reference anchor='RFC5685'>
        <front>
          <title>Redirect Mechanism for IKEv2</title>
          <author initials='V.' surname='Devarapalli' fullname='V. Devarapalli'>
            <organization>WiChorus</organization></author>
          <author initials='K.' surname='Weniger' fullname='K. Weniger'>
            <organization /></author>
          <date year='2009' month='November' />
        </front>
        <seriesInfo name='RFC' value='5685' />
        <format type='TXT' target='http://www.ietf.org/rfc/rfc5685.txt' />
        <format type='HTML' target='http://xml.resource.org/public/rfc/html/rfc5685.html' />
        <format type='XML' target='http://xml.resource.org/public/rfc/xml/rfc5685.xml' />
      </reference>

     </references>
	 
	 <section title= "Design decisions">

		<t> 
		This section describes the alternative mechanisms for data communication over IKEv2 that were
		considered and their drawbacks.
		</t>

		<section title = "Use of the existing IKEv2 control channel"> 
			<t> 
			 The existing IKEv2 control channel can be used for data transfer using a new IKEv2 exchange type DATA exchange similar to INFORMATIONAL exchange, and a new payload type to encapsulate cleartext data that will be protected by Encrypted payload. </t>
			 <t> 
			 A drawback with this approach is that the data packets will incur the overhead of IKEv2 header (28 octets) and a minimum of two generic payload headers (4 octets each) with a total protocol overhead of 36 octets per data packet. Also, it is difficult to support unacknowledged data transfer and integrity-only protection for data packets.			
			</t>
		</section>
	
		<section title= "IKEv2 header modification">
			<t>
			IKEv2 header can be modified to allow differentiation between control and data packets using 
			the first four bytes of the header and the rest of the header can be different for control 
			and data packets. A possible way to accomplish this is to move the Exchange type field to the 
			beginning of IKEv2 header. 
			</t>
			<t>
			The obvious drawback with this approach is that it is not backward compatible with existing 
			IKEv2 protocol. Also, it makes it difficult to support unacknowledged data transfer and 
			integrity-only protection for data packets.
			</t>
		</section>
		
			<section title= "Use of separate UDP port for data channel">
			<t>
			A separate UDP port e.g 501 can be used for IKEv2 data channel that allows to leverage the IKEv2 protocol's security and reliability mechanisms and security parameters for data communication while avoiding the overhead of IKEv2 header and generic payload headers for data packets. Use of a fixed UDP port for data channel instead of dynamically negotiated UDP ports has the advantage of not requiring the firewalls to snoop the IKEv2 control channel to be able to determine and allow the traffic on data channel UDP port. 
			</t>
			<t>
			A drawback with this approach is that the use of different ports for IKEv2 control and data channels makes it difficult for load balancers to associate an IKEv2 control channel with its data channel when there are multiple IKEv2 initiators behind a PAT device. Also when IKEv2 initiator is behind a PAT device, the data packets from responder will be dropped by the PAT device as port 501 will not be open unless there is data traffic from initiator.
			</t>
		</section>
	</section>
	 
     <!-- ====================================================================== -->
  </back>
  
</rfc>
