<?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-01 (D-IKE)" 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="2014"/>
    <area>Security Area</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The Internet Key Exchange (IKEv2) protocol provides authentication, confidentiality, integrity, data-origin authentication and anti-replay.  Currently, IKEv2 is mainly used as a control channel to negotiate IPsec SA(s). IPsec is not well suited to provide transport layer security for applications as it resides at the network layer and most of the IPsec implementations require integration into operating systems making it difficult to deploy. IPsec uses different sessions for control and data traffic which is not NAT and load balancer friendly. TLS/DTLS, the other popular security mechanism to provide the above security services does not mandate mutual peer authentication and Diffie Hellman exchange.</t>

	  <t>This document describes an IKEv2 based lightweight secure data communication protocol and a way to provide transport layer security for UDP client/server applications.  The protocol provides integrity protected encryption and integrity-only protection based on application needs. As most of the IoT applications are UDP based, IKEv2 can be used for key management as well secure data communication in IoT due to its simplicity, scalability, lightweightedness and ease of deployment.</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 protocol that provides a secure communication channel similar to ESP defined in <xref target="RFC4303"> RFC4303 </xref>. IKEv2 defines mechanisms for mutual authentication of peers, key management, SA management and exchange of configuration information. IKEv2 is mainly used as a secure control channel to negotiate child IPsec SAs. As IKEv2 provides encryption, integrity protection, data origin authenication and replay protection similar to ESP, IKEv2 can be leveraged for secure data communication. This document defines an IKEv2 based secure data communication mechanism (henceforth referred to as D-IKE) and describes a way to secure UDP applications with D-IKE. While the IKE control channel is always encryption and integrity protected, the IKE data channel can provide encryption and integrity protection as well as integrity-only protection depending on the needs of the application.<vspace blankLines="1"/></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>.<vspace blankLines="1"/></t>
	</section>

	<section title="D-IKE comparision with IPsec" toc="default">
        <t>
			<list style="symbols">
				<t>D-IKE being UDP based is easier to deploy as it resides in the operating system application space and does not require integration with the operating system kernel unlike most of the IPsec implementations<vspace blankLines="1"/></t>
				<t>D-IKE is lighter with fewer keys and protocol exchanges as it uses the same channel for control messages and data<vspace blankLines="1"/></t>
				<t>D-IKE is simpler as it does not involve programming the Security Policy Database (SPD)<vspace blankLines="1"/></t>
				<t>D-IKE being at transport layer is better suited to provide granular and end-to-end security to applications than IPsec which provides network layer security suitable for site to site<vspace blankLines="1"/></t>
				<t>D-IKE control and data channels run over a single UDP port and hence D-IKE is load balancer friendly<vspace blankLines="1"/></t>				
			</list>		
		</t>
	</section>

	<section title="D-IKE comparision with DTLS" toc="default">
        <t>
			<list style="symbols">
				<t>D-IKE provides better enforcement of security through mandatory mutual peer authentication and Diffie Hellman key exchange<vspace blankLines="1"/></t>
				<t>D-IKE supports comprehensive authentication methods and has built-in support for mobility, DOS attack mitigation and load balancing<vspace blankLines="1"/></t>
			</list>		
		</t>
	</section>
	
    <section title="D-IKE Description" toc="default">
        <t>Each UDP application using D-IKE for security will use different UDP port numbers. So with D-IKE, IKEv2 packets are no longer identified by UDP ports 500 and 4500. D-IKE will use a different UDP port number for each UDP application to carry the D-IKE control messages for IKEv2 negotiation as well as application data. The first octet in the UDP payload will identify D-IKE control and data packets. D-IKE control packets will carry the IKEv2 header and payloads as defined in <xref target="RFC5996"> RFC5996</xref> and will be used to negotiate a childless IKEv2 session between UDP client and server. D-IKE data packets will carry encrypted and authenticated UDP application data.</t>
	        
		<t>The following diagram depicts the format of UDP encapsulated D-IKE control and Data packets.</t>		
		<figure align="left" title="Encapsulation of D-IKE packets">
			<artwork align="left" xml:space="preserve">
	+------------+------+----------+---------------------------+
	| UDP Header | Type | RESERVED | D-IKE Control/Data Packet |
	+------------+------+----------+---------------------------+
				 |&lt;---------------- UDP Payload --------------&gt;| 			
			</artwork>
		</figure>
		
		<t>D-IKE can provide integrity-only protection in addition to integrity protected encryption. D-IKE does not negotiate child IPsec SAs in the IKEv2 initial exchange and subsequently as depicted in D-IKE Negotiation section, similar to Childless IKEv2 defined in <xref target="RFC6023"> RFC6023</xref>.</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.<vspace blankLines="1"/></t>		
	</section>  	
	
    <section title="Securing UDP applications with D-IKE" toc="default">
        <t>This document introduces the concept of D-IKE sockets to secure communication between UDP client/server applications. D-IKE socket is an IKEv2 session between a UDP client and server uniquely identified by the 4 tuple of client and server IP addresses and UDP ports.</t> 
		
		<figure align="left" title="D-IKE Sockets">
			<artwork align="left" xml:space="preserve">

			+--------------+              +--------------+
			|  UDP Client  |              | UDP Service  |
			+--------------+              +--------------+
			| D-IKE socket |              | D-IKE socket |
			+--------------+              +--------------+
			|     UDP      |              |      UDP     |
			+--------------+              +--------------+
			|      IP      |&lt;------------&gt;|      IP      |
			+--------------+              +--------------+
				</artwork>
		</figure>
		
		<t><vspace blankLines="1"/></t>
        <t>
			<list style="symbols">
				<t>A UDP service will register with D-IKE socket specifying the UDP port it wants to listen to. D-IKE will listen on the UDP port number on behalf of the application<vspace blankLines="1"/></t>
				<t>A UDP client will open a D-IKE socket specifying the server IP address and the UDP port number. D-IKE will open a UDP socket to the server on behalf of the client<vspace blankLines="1"/></t>
				<t>D-IKE will initiate an IKEv2 session without any child SA from UDP client to the server<vspace blankLines="1"/></t>		
				<t>After successful negotiation of IKEv2 session, the client and server can securely exchange data over D-IKE socket<vspace blankLines="1"/></t>								
			</list>		
		</t>

		<figure align="left" title="Secure UDP communication over D-IKE">
			<artwork align="left" xml:space="preserve"> 			
			UDP Client                           UDP Server
			----------                           ----------
				|                                    |
				|&lt;-------- IKE negotiation ---------&gt;|
				|                                    |
				|&lt;----- Secure Data Transfer -------&gt;|
				|                                    |
			</artwork>
		</figure>
		
		<t><vspace blankLines="1"/></t>
		<t>For a node running multiple UDP applications(Clients and/or Services), each UDP application will have a unique D-IKE socket</t>
		
		<figure align="left" title="D-IKE socket per UDP Application">
			<artwork align="left" xml:space="preserve"> 			
		+----------------+----------------+----------------+
		|    UDP App 1   |    UDP App 2   |   UDP App N    | 
		+----------------+----------------+----------------+
		| D-IKE socket 1 | D-IKE socket 2 | D-IKE socket N |
		+----------------+----------------+----------------+ 
		|                        UDP                       |
		+--------------------------------------------------+ 
		|                        IP                        |
		+--------------------------------------------------+
			</artwork>
		</figure>
		
		<t><vspace blankLines="1"/></t>
		<t>A well known UDP service can simultaneously open a UDP socket as well as D-IKE socket.</t>
		
		<figure align="left" title="Securing UDP Applications using D-IKE">
			<artwork align="left" xml:space="preserve"> 						
		+--------------+    +---------------------------+    +------------+
		|  UDP Client  |    |        UDP Service        |    | UDP Client |
		+--------------+    +---------------------------+    +------------+
		| D-IKE socket |    | D-IKE socket | UDP Socket |&lt;--&gt;| UDP Socket |
		+--------------+    +--------------+------------+    +------------+
		|      UDP     |&lt;--&gt;|     UDP      |      |&lt;-- Unsecured --&gt;|
		+--------------+    +--------------+         Communication
				|&lt;----- Secure -----&gt;|
						Communication                                
			</artwork>
		</figure>	
		<t><vspace blankLines="1"/></t>
		<t>The following diagram shows the format of D-IKE packet.</t>
		<figure align="left" title="D-IKE packet format">
			<artwork align="left" xml:space="preserve">
				|&lt;------------- D-IKE packet --------------&gt;|
	+----+------+--------+-------------+---------+----------+
	| IP | UDP  | D-IKE  |   UDP App   | D-IKE   |  D-IKE   |
	|    |      | Header |   Data      | Trailer | Checksum |
	+----+------+--------+-------------+-- ------+----------+
				|        |&lt;----- Encrypted -----&gt;|
				|&lt;----- Integrity Protected ----&gt;|			                 
			</artwork>
		</figure>	
		<t>D-IKE packet consists of D-IKE header, UDP application data, an optional D-IKE trailer and D-IKE integrity checksum value.<vspace blankLines="1"/></t>
	</section>

	<section title="Benefits" toc="default">
        <t>
			<list style="symbols">
				<t>Lightweight, scalable and simpler with fewer keys and protocol exchanges<vspace blankLines="1"/></t>
				<t>Support for integrity-only protection, in addition to integrity protected encryption<vspace blankLines="1"/></t>	
				<t>Works seamlessly with load balancers and PAT devices as D-IKE uses the same UDP port as the IKEv2 control channel<vspace blankLines="1"/></t>
			</list>		
		</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 'D-IKE_SUPPORTED' to negotiate the use of IKEv2 for data communication</t>
				<t>D-IKE packet formats</t>
			</list>
			<vspace blankLines="1"/>
		</t>
	</section>
	
	<section toc= "default" title= "D-IKE capabilities">
		<t> D-IKE will support the following data protection modes:
			<list style="symbols">
			<t>Encryption and Integrity protection</t>
			<t>Integrity only protection</t>
			</list>
			<vspace blankLines="1"/>
		</t>
		
		<section title= "Encryption and Integrity protection">
		<t> This protection mode provides encryption and integrity protection of D-IKE packets similar to the IKEv2 Encrypted payload as defined in <xref target="RFC5996"> RFC5996</xref></t>
		<t>The UDP app data and D-IKE trailer are encrypted and the D-IKE header, UDP app data and D-IKE trailer are integrity protected.</t>
		
		<figure align="left" title="Encryption and Integrity protection">
			<artwork align="left" xml:space="preserve">            
	+----+------+--------+-------------+---------+----------+
	| IP | UDP  | D-IKE  |   UDP App   | D-IKE   |  D-IKE   |
	|    |      | Header |   Data      | Trailer | Checksum |
	+----+------+--------+-------------+-- ------+----------+
				|        |&lt;----- Encrypted -----&gt;|
				|&lt;----- Integrity Protected ----&gt;|			                 
			</artwork>
		</figure>
		<t><vspace blankLines="1"/></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 <xref target="RFC4303"> RFC4303</xref>. This is suitable for applications that just need data integrity and not confidentiality such as routing protocol exchanges. It may be noted that integrity only protection applies only to D-IKE packets and that D-IKE control packets will always use integrity protected encryption.</t>
		<t>The UDP app data and D-IKE trailer are encrypted and the D-IKE header, UDP app data and D-IKE trailer are integrity protected.</t>		
		
		<figure align="left" title="Integrity only protection">
			<artwork align="left" xml:space="preserve">
		+----+------+--------+-------------+----------+	
		| IP | UDP  | D-IKE  |   UDP App   |  D-IKE   |
		|    |      | Header |   Data      | Checksum |
		+----+------+--------+-------------+----------+        
					|&lt;---- Integrity -----&gt;|
							Protected	                 
			</artwork>
		</figure>	
		</section>
	</section>
    
	<section  title="D-IKE negotiation" toc="default"> 
		<t> IKEv2 nodes can negotiate to use D-IKE and its capabilities by exchanging D-IKE_SUPPORTED Notify type in IKE_SA_INIT exchange.
		<list style="symbols">
		<t> IKEv2 initiator can communicate its intent to use D-IKE by including a notify payload of type D-IKE_SUPPORTED along with the proposed capabilities in IKE_SA_INIT request<vspace blankLines="1"/></t>

		<t> IKEv2 responder can indicate its willingness to use D-IKE with the proposed capabilities by including a notify payload of type D-IKE_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 D-IKE_SUPPORTED Notify type in IKE_SA_INIT response<vspace blankLines="1"/></t>

		<t> The absence of Notify payload of type D-IKE_SUPPORTED in IKE_SA_INIT response indicates the incapability or unwillingness of the IKEv2 responder to use D-IKE<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 D-IKE<vspace blankLines="1"/></t>

		<t> On unsuccessful negotiation of D-IKE, IKEv2 initiator and responder MUST NOT use D-IKE for data transfer. However rest of the IKEv2 negotiation can proceed as normal<vspace blankLines="1"/></t>

		<t> On successful negotiation of D-IKE, IKEv2 Initiator and Responder MUST exclude any payloads related to Child SA negotiation in IKE_AUTH exchange and can use D-IKE 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(D-IKE_SUPPORTED)] --&gt;
	
							&lt;-- HDR, SAr1, KEr, Nr, [CERTREQ]
									N(D-IKE_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="1" /> </t>		
	</section>
	
	<section toc = "default" title= "D-IKE packet and payload formats">
	<t></t>
		<section anchor="notify" toc= "default" title= "D-IKE_SUPPORTED Notify payload">
			<figure align="left" title="D-IKE_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 D-IKE_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 - Encryption and Integrity protection</t>
							<t>1 - Integrity-only protection</t>
						</list>
						<vspace blankLines="1"/>
					</t>					
					<t>bit 1-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="1" /> </t>
	</section>
	
	<section toc= "default" title= "D-IKE Control and Data packets">
		<t>The first octet in the UDP payload will identify D-IKE control and data packets. D-IKE control packets will carry the IKEv2 header and payloads as defined in RFC 5996 and will be used to negotiate a childless IKEv2 session between UDP client and server. D-IKE data packets will carry encrypted and authenticated UDP application data.</t>
				
		<figure align="left" title="D-IKE Control and Data packets">
			<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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|      Type     |                   RESERVED                    | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                                                               | 
~                   IKEv2 Header and payloads                   ~ 
|                              or                               |
|                      D-IKE data payload                       |                 
|                                                               | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
				</artwork>
			</figure>
	<t><list style="symbols">
		<t>Type (1 octet, unsigned integer): Identifies D-IKE control and data packet
		<list style="symbols">			
			<t>0 - D-IKE control packet</t>
			<t>1 - D-IKE data packet</t>
			<t>2 - 7 - RESERVED</t>
		</list></t>		
	</list></t>
	<t> <vspace blankLines="1" /> </t>
	</section>
	
	
	<section toc= "default" title= "D-IKE payload">
		<figure align="left" title="D-IKE 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |           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>Length (2 octets, unsigned integer): Length in octets of the entire IKEv2 Data packet<vspace blankLines="1"/></t>
			<t>Reserved (2 octets): Sender MUST set these bits to zero and receiver MUST ignore these bits<vspace blankLines="1"/></t>	
			<t>SPI (8 octets): A value used by 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 D-IKE packet sequence numbers, used for anti-replay checks<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].<vspace blankLines="1"/></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> D-IKE_SUPPORTED</t>    
		</list>
	</t>
		<t>For UDP applications that need a well known port number to secure the application using D-IKE (for example, CoAP over D-IKE), the port number MUST be reserved from IANA.  <vspace blankLines="1"/></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.<vspace blankLines="1"/></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.<vspace blankLines="1"/></t>
		
		<section toc= "default" title= "Draft -01">
			<t> Reworked the draft with more focus on UDP application security. Updated the problem statement. Added comparision with IPsec and TLS/DTLS. Updated D-IKE Notify and Data payloads. Added possible extensions. </t>
		</section>
    </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.			
			<vspace blankLines="1"/></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.
			<vspace blankLines="1"/></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.
			<vspace blankLines="1"/></t>
		</section>
	</section>
	
	 <section title= "Possible extensions">

		<t> 
		This section describes the possible extensions to D-IKE protocol.
		</t>

		<section title = "Securing TCP client/server applications using D-IKE"> 
			<t>D-IKE can be used to secure TCP applications using one of the following methods.</t>
			<t><list style="symbols">
				<t>While IKE control channel can run over UDP, the IKE data channel can negotiate and run over a TCP session carring D-IKE protected application data. A drawback with this approach is that using differnet sessions for control and data may not be friendly with load balancers<vspace blankLines="1"/></t>
				<t>If IKEv2 were to run over TCP, IKEv2 over TCP can be used to secure TCP applications<vspace blankLines="1"/></t>
				<t>D-IKE tunnel mode can be defined that can encapsulate TCP or any other protocol over D-IKE tunnel<vspace blankLines="1"/></t>				
			</list></t>			
		</section>
	</section>
	 
     <!-- ====================================================================== -->
  </back>
  
</rfc>
