<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
    There has to be one entity for each item to be referenced. 
    An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC5091 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5091.xml">
<!ENTITY RFC7250 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7250.xml">
<!ENTITY RFC6507 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6507.xml">
<!ENTITY RFC6508 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6508.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-wang-tls-raw-public-key-with-ibc-01">
 <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** FRONT MATTER ***** -->

 <front>
   <!-- The abbreviated title is used in the page header - it is only necessary if the 
        full title is longer than 39 characters -->

   <title abbrev="TLS-RAW-Public-Key-IBC">Using Identity as Raw Public Key in Transport Layer Security (TLS) 
    and Datagram Transport Layer Security (DTLS) </title> 

   <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Haiguang Wang" initials="H.W." role="editor"
           surname="Wang">
		   
     <organization>Huawei Technology Pte. Ltd.</organization>

     <address>
       <postal>
         <street>20 Secience Park Road, #3-30/31</street>

         <!-- Reorder these if your country does things differently -->

         <city>Singapore</city>

         <region></region>

         <code>117687</code>

         <country>SG</country>
       </postal>

       <phone>+65 6825 4200</phone>

       <email>wang.haiguang1@huawei.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   
      <author fullname="Yanjiang Yang" initials="Y.Y."
           surname="Yang">
		   
     <organization>Huawei Technology Pte. Ltd.</organization>

     <address>
       <postal>
         <street>20 Secience Park Road, #3-30/31</street>

         <!-- Reorder these if your country does things differently -->

         <city>Singapore</city>

         <region></region>

         <code>117687</code>

         <country>SG</country>
       </postal>

       <phone>+65 6825 4200</phone>

       <email>yang.yanjiang@huawei.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>
   
    <author fullname="Xin Kang" initials="X."
           surname="Kang">
		   
     <organization>Huawei Technology Pte. Ltd.</organization>

     <address>
       <postal>
         <street>20 Secience Park Road, #3-30/31</street>

         <!-- Reorder these if your country does things differently -->

         <city>Singapore</city>

         <region></region>

         <code>117687</code>

         <country>SG</country>
       </postal>

       <phone>+65 6825 4200</phone>

       <email>xin.kang@huawei.com</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>
   
   <date year="2018" />

   <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
        in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

   <!-- Meta-data Declarations -->

   <area>General</area>

   <workgroup>Internet Engineering Task Force</workgroup>

   <!-- WG name at the upperleft corner of the doc,
        IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
        which is used by the RFC Editor as a nod to the history of the IETF. -->

   <keyword>template</keyword>

   <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

   <abstract>
     <t>This document specifies the use of identity as a raw public key in
        Transport Layer Security (TLS) and Datagram Transport Layer Security
       (DTLS).  The TLS protocol procedures are kept unchanged, but cipher
       suites are extended to support Identity-based signature (IBS).  The
       example OID tables in the <xref target="RFC7250"> RFC 7250 </xref>  
	   are expanded with OIDs specific to IBS algorithms.</t>
   </abstract>
   
 </front>

 <middle>
   <section title="Introduction">
     <t>DISCLAIMER: This is a personal draft and has not yet seen significant 
	 security analysis. </t>

<t> Traditionally, TLS client and server exchange public keys endorsed by 
<xref target="PKIX"> PKIX </xref> certificates. It is considered complicated and may 
cause security weaknesses with the use of PKIX certificates <xref target="Defeating-SSL"> 
Defeating-SSL </xref>. To simplify certificates exchange, using RAW public key with TLS/DTLS
has been spcified in RFC 7250. That is, instead of transmitting a full certificate or a 
certificate chain in the TLS messages, only public keys are exchanged between client and 
server.  However, using RAW public key requires out-of-band mechanisms to bind the public 
key to the entity presenting the key. </t>

<t>Recently, 3GPP has adopted the EAP authentication framework for 5G
   and EAP-TLS is considered as one of the candidate authentication methods
   for private networks, especially for networks with a large number of
   IOT devices.  For IOT networks, TLS/DTLS with RAW public key is
   particularly attractive, but binding identities with public keys
   might be challenging.  The cost to maintain a large table for identity and  
   public key mapping at server side incurs additional maintenance cost.  
   e.g. devices have to pre-register to the server.</t>

<t>To simplify the binding between the public key and the entity
   presenting the public key, a better way could be using Identity-Based
   Cryptography(IBC), such as ECCSI public key specified in RFC 6507,
   for authentication.  Different from X.509 certificates and raw public
   keys, a public key in IBC takes the form of the entity's identity.
   This eliminates the necessity of binding between a public key
   and the entity presenting the public key.</t>

<t> The concept of IBC was first proposed by Adi Shamir in 1984.  As a
   special class of public key cryptography, IBC uses a user's identity
   as public key, avoiding the hassle of public key certification in
   public key cryptosystems.  IBC broadly includes IBE (Identity-based
   Encryption) and IBS (Identity-based Signature).  For an IBC system to
   work, there exists a trusted third party, PKG (private key generator)
   responsible for issuing private keys to the users.  In particular,
   the PKG has in possession a pair of Master Public Key and Master
   Secret Key; a private key is generated based on the user's identity
   by using the Master Secret key, while the Master Public key is used
   together with the user's identities for encryption (in case of IBE)
   and signature verification ( in case of IBS).
</t>  

<t> A number of IBE and IBS algorithms have been standardized by 
different standardization bodies, such as IETF, IEEE, ISO/IEC, etc. For example, IETF has 
spcified several RFCs such as <xref target="RFC5091"> RFC 5091 </xref>, 
<xref target="RFC6507"> RFC 6507</xref> and <xref target="RFC6508"> RFC6508 </xref> 
for both IBE and IBS algorithms. ISO/JTC and IEEE also have a few standards on IBC 
algorithms. </t>

<t> RFC 7250 has specified the use of raw public key with TLS/DTLS
   handshake. However, supporting of IBS algorithms has not been included
   therein.  Since IBS algorithms are efficient in public key
   transmission and also eliminate the binding between public keys and
   identities, in this document, an amendment to RFC 7250 is added for
   supporting IBS algorithms.</t>
   
<t>IBS algorithm exempts client and server from public key certification 
and identity binding by checking an entity's signatures and its identity 
against the master public key of its PKG.  With an IBS algorithm, a PKG generates 
private keys for entities based on their identities. Global parameters such as 
PKG's Master Public Key (MPK) need be provisioned to both client and server.  
These parameters are not user specific, but PKG specific.</t>

<t>For a client, PKG specific parameters can be provisioned at the time PKG 
provisions the private key to the client.  For the server, how to get the PKG 
specific parameters provisioned is out of the scope of this document, and it is 
deployment dependent. </t>

<t>The document is organized as follows: Section 3 defines the data structure 
required when identity is used as raw public key, and a list of OIDs for IBS
algorithms.  Section 4 defines the cipher suites required to support IBS 
algorithm over TLS/DTLS. Section 5 explains how client and server authenticate 
each other when using identity as raw public key.  Section 6 gives examples for 
using identity as raw public key over TLS/DTLS handshake procedure. Section 7 
discusses the security considerations. </t>

  </section>
  
 <section title="Terms">
       <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"> 
	   RFC 2119 </xref>. </t>
 </section>
 

<section title="Extension of RAW Public Key to IBC-based Identity">
    

<t> To support the negotiation of using raw public between client and server, 
	a new Certificate structure is defined in RFC 7250. It is used by the client 
	and server in the hello messages to indicate the types of certificates 
	supported by each side. </t>
	
<t> When RawPublicKey type is selected for authentication, a data structure, 
	subjectPublicKeyInfo, is used to carry the raw public key and its cryptographic 
	algorithm.  Within the subjectPublicKeyInfo structure, two fields, algorithm 
	and subjectPublicKey, are defined.  The algorithm is a data structure specifies 
	the cryptographic algorithm used with raw public key, which is represented by 
	an object Identifiers (OID); and the parameters field provides necessary 
	parameters associated with the algorithm. The subjectPublicKey field within 
	the subjectPublicKeyInfo carry the raw public itself. </t>
	
    <figure align="center" anchor="xml_subjectPublicKey" title="SubjectECCSIPublicKeyInfo ASN.1 Structure">

    <artwork align="left"><![CDATA[
    subjectPublicKeyInfo  ::=  SEQUENCE  {
	     algorithm            	AlgorithmIdentifier,    
	     subjectPublicKey		BIT STRING 
	}

    AlgorithmIdentifier   ::=  SEQUENCE  {
         algorithm               OBJECT IDENTIFIER,
         parameters              ANY DEFINED BY algorithm OPTIONAL  
	}	   
	]]></artwork>
    </figure>  
	
	<t> When using an IBS algorithm, an identity is used as raw public key, which
	can be converted to an OCTET string and put into the subjectPublicKey field. 
	The algorithm field in AlgorithmIdentifier structure is the object identifier 
	of the IBS algorithm used. Beside that, it is necessary to tell the peer the 
	set of global parameters used by signer. The information can be carried in the 
	payload of the parameters field in AlgorithmIdentifier. However, the global 
	public parameters can be heavy. Instead of carrying the full set of global 
	public parameters of a PKG, an URI or IRI of a PKG is put in the parameter 
	field. The URI/IRI allows the peer know which set of public parameters shall 
	be used to verify the signature. </t>
	
	<t> The structure to carry the PKGInfo is specified in Figure 2: </t>

	<figure align="center" anchor="xml_PKGInfo" title="PKGInfo ANSI.1 Structure">
	<artwork align="left"><![CDATA[
    opaque DistinguishedName<1..2^16-1>;	  
    struct {
       DistinguishedName pkg_addr<1..2^16-1>;
    } PKGInfo;
		  ]]></artwork>
    </figure>  
	
    <t>	The pkg_addr field is a string of an URI or IRI of a PKG, indicating the PKG where 
	    public parameters of the IBC algorithm identified by the OBJECT IDENTIFIER are 
		available. </t>
	
	<t>In RFC 7250, OIDs for IBS algorithms are not included.  In this document, a list 
	   of OIDs for IBS algorithms are given in the following table.</t>	

	<texttable anchor="table_obj_id" style = "all" title="Algorithm Object Identifiers">

         <ttcol align="center">Key Type</ttcol>

         <ttcol align="center">Document</ttcol>
		 
		 <ttcol align="center">OID</ttcol>
		 
		 <c> ISO/IEC 14888-3 ibs-1 </c>
		 
		 <c> ISO/IEC 14888-3: IBS-1 mechansim (Identity-Based Signature) </c>
		 
		 <c> 1.0.14888.3.0.7 </c>

		 <c> ISO/IEC 14888-3 ibs-2 </c>
		 
		 <c> ISO/IEC 14888-3: IBS-2 mechansim (Identity-Based Signature) </c>
		 
		 <c> 1.0.14888.3.0.8  </c>
		 		 
		 <c> SM9-1 Digital Signature Algorithm </c>
		 
		 <c> SM9-1 Digital Signature Algorithm </c>
		 
		 <c> 1.2.156.10197.1.302.1 </c>

         <c>Elliptic Curve-Based Signatureless For Identitiy-based Encryption (ECCSI)</c>

         <c> Section 5.2 in RFC 6507 </c>
		 
		 <c> 1.3.6.1.5.x (need to apply) </c>

       </texttable>
	   
	   	   	   
	   <t>In particular, ISO/IEC 14888-3 specifies two IBS algorithms, IBS-1 
	   and IBS-2.  The ECCSI is an IBS algorithm that is specified 
	   in IETF [RFC 6507]. SM9-1 is a Chinese standard for an IBS 
	   algorithm. </t>
	   
		   
   </section>

   
   <section title="New Key Exchange Algorithms and Cipher Suites">
   
    <t> To support identity as raw public key, new key exchange algorithms 
	corresponding to the IBS algorithms need to be defined. The existing key 
	exchange algorithms making use of ephemeral DH are extended to support 
	of the IBS algorithms. Considering the performance and the compatibility 
	with the use of ECDSA in TLS (see RFC 4492), this specification proposes 
	to support the IBS algorithm, ECCSI, defined in <xref target="RFC6507"> 
	RFC 6507 </xref>. As a reult, the table below summarizes the new key 
	exchange algorithms, which mimic DHE_DSS, ECDHE_ECDSA, respectively 
	(see RFC 5246 and RFC 4492). </t>

<texttable anchor = "table_obj_id_key_exhange" style = "all" title="Algorithm Object Identifiers">

       <ttcol align="center">Key Exchange Algorithm </ttcol>
	   <ttcol align="center"> Description </ttcol>
	    <c> ECDHE_ECCSI </c>
		<c> Ephemeral ECDH with ECCSI signatures </c>
</texttable>

<t> To include new key exhange algorithm, the data structure KeyExchangeAlgorithm need to be 
    expanded with a new value ecdhe_eccsi as follows: </t>

	<figure align="center" anchor="xml_KeyExchangeAlgorithm" title="Include ecdhe_eccsi in KeyExchangeAlgorithm">
	<artwork align="left"><![CDATA[		  
    enum { 
	    ecdhe_eccsi
    } KeyExchangeAlgorithm;
		  ]]></artwork>
    </figure>  
   
<t>Note: The specification of ECDHE_ECCSI can follow ECHDE_ECDSA 
      by substituting ECDSA with ECCSI.  The detailed specification 
	  will be provided in the future </t>

<t>Note: Other key exchange algorithm with other IBS algorithm may be
   added in the future. </t>

<t> Accordingly, below defines the new cipher suites that use the above new key exchange algorithms: </t>
<t> CipherSuite TLS_ECDHE_ECCSI_WITH_AES_128_CBC_SHA256   = { 0xC0, 0x80 } </t>
<t> CipherSuite TLS_ECDHE_ECCSI_WITH_AES_256_CBC_SHA256   = { 0xC0, 0x8A } </t>
  
   </section>
   
   <section title="TLS Client and Server Handshake Behavior">
   
   <t> When IBS is used as RAW public for TLS, signature and hash algorithms are 
       negotiated during the handshake. </t>

    <t> The handshake between the TLS client and server follows the procedures defined in 
	<xref target="RFC7250"> RFC 7250 </xref>, but with the support of 
	the new key exchange algorithm and cipher suites specific to the IBS algorithms. 
	The high-level message exchange in the below figure shows TLS handshake using 
	raw public keys, where the client_certificate_type and server_certificate_type 
	extensions added to the client and server hello messages (see Section 4 of RFC 7250). </t>
	
	 <figure align="center" anchor="xml_TLS_Exchange-1" title="Basic Raw Public Key TLS Exchange">
	 <artwork align="left"><![CDATA[
    client_hello,
    client_certificate_type,
    server_certificate_type   ->

                              <-  server_hello,
                                  client_certificate_type,
                                  server_certificate_type,
                                  certificate,
                                  server_key_exchange,
                                  certificate_request,
                                  server_hello_done
    certificate,
    client_key_exchange,
    certificate_verify,
    change_cipher_spec,
    finished                  ->

                              <- change_cipher_spec,
                                 finished

   Application Data        <------->     Application Data
   ]]></artwork> 
   </figure>

<t> The client hello messages tells the server the types of certificate or raw public key supported 
by the client, and also the certificate types that client expects to receive from server. When raw 
public with IBS algorithm from server is supported by the client, the client includes desired IBS 
cipher suites in the client hello message based on the order of client preference. </t>
   
<t> After receiving the client hello message, server determines the client and server certificate 
types for handshakes. When the selected certificate type is RAW public key and IBS is the chosen 
signature algorithm, server uses the SubjectPublicKeyInfo structure to carry the raw public key, 
OID for IBS algorithm and URI/IRI for global public parameters. With these information, the 
client knows the signature algorithm and the public parameters that should be used to verify the 
signature. The format of signature in the server_key_exhange message is defined in the 
corresponding specification. For example, when ECCSI is used, the format of signature is defined 
in RFC 6507. </t>

<t> When sever specifies that RAW public key should be used by client to authenticate with server, 
the client_certificate_type in the server hello is set to RawPublicKey. Besides that, the server 
also sends Certificate Request, indicating that client should use some specific signature and 
hash algorithms. When IBS is chosen as raw public key signature algorithm, the server need to 
indicate the supporting of IBS signature algorithms in the CertificateRequest. </t>

<t> The Certificate Request is a structure defined in TLS1.2 as follows : </t>
	 <figure align="center" anchor="xml_TLS_CertificateRequest" title="ANSI.1 structure for CertificateRequest">
	 <artwork align="left"><![CDATA[
     struct {
         ClientCertificateType certificate_types<1..2^8-1>;
         SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>;
         DistinguishedName certificate_authorities<0..2^16-1>;
      } CertificateRequest;
   ]]></artwork> 
   </figure>

<t> To support IBS algorithms, values of the ClientCertificateType and SignatureAlgorithm need to be amended. 
To support ECCSI defined in IETF RFC 6507,  eccsi_sign (TBD) type is added to ClientCertificateType as follows: </t>
	 <figure align="center" anchor="xml_TLS_enum_ClientCertificateType" title="Value of ECCSI in ClientCertificateType">
	 <artwork align="left"><![CDATA[
     enum {
         eccsi_sign(TBD), (255)
      } ClientCertificateType;

   ]]></artwork> 
   </figure>
   
<t> eccsi_sign: the subsequent client certificate is a raw public key certificate containing an 
ECCSI public key. </t>

<t> Moreover, an eccsi(TBD) type needs to be added to the SignatureAlgorithm structure, which 
is in turn used in the SignatureAndHashAlgorithm structure: </t>
	 <figure align="center" anchor="xml_TLS_SignatureAlgorithm" title="Value of ECCSI for SignatureAlgorithm">
	 <artwork align="left"><![CDATA[
     enum { 
	     eccsi(TBD), (255) 
     } SignatureAlgorithm.
   ]]></artwork> 
   </figure>

<t> No new hash function type is required. RFC 6507 does not specify any specific hash 
function to use for ECCSI. As a result, SHA256 suffices to instantiate ECCSI. </t>

<t> To support more IBS signature algorithms, additional values can be added to the 
ClientCertificateType and SignatureAlgorithm in the future. </t>

<t> If raw public key is selected by server for client authentication, the client checks the 
CertificateRequest received for signature algorithms. If client wants to use an IBS algorithm 
for signature, then the signature algorithm it intended to use must be in the list of supported 
signature algorithms by the server. Assume the IBS algorithm supported by the client is in the 
list, then the client specifies the IBS signature algorithm and PKG information with 
SubjectPublicKeyInfo structure in the certificate structure and provide signatures in the 
certificate verify message. The format of signature in the certificate_verify message is defined 
in the corresponding specification.  </t>

<t> The server verifies the signature based on the algorithm and PKG parameters specified by the 
messages from client. </t>
 </section>

<section title="Examples">  

   <t> In the following, examples of handshake exchange using IBS algorithm under RawPublicKey 
   are illustrated.</t>

<section title="TLS Client and Server Use IBS algorithm">

   <t> In this example, both the TLS client and server use ECCSI for authentication, and 
   they are restricted in that they can only process ECCSI keys.  As a result, the TLS client 
   sets both the server_certificate_type extension and the client_certificate_type extension to 
   be raw public key; in addition, the client sets the ciphersuites in the client hello message 
   to be TLS_ECDHE_ECCSI_WITH_AES_256_CBC_SHA256. </t>

   <t> When the TLS server receives the client hello, it processes the message.  Since it has
   an ECCSI raw public key from the PKG, it indicates in (2) that it agrees to use ECCSI and 
   provided an ECCSI key by placing the SubjectPublicKeyInfo structure into the Certificate 
   payload back to the client (3), including the OID and URI/IRI of global public key 
   parameters.  The  client_certificate_type in (4) indicates that the TLS server accepts raw 
   public key.  The TLS server demands client authentication, and therefore includes a 
   certificate_request (5) for ECCSI raw public. The client, which has an ECCSI key, returns its ECCSI certificate in the Certificate 
   payload to the server (6). </t>

 	 <figure align="center" anchor="xml_TLS_Exchange-2" title="Basic Raw Public Key TLS Exchange">
	 <artwork align="left"><![CDATA[  
client_hello,
cipher_suites=(TLS_ECDHE_ECCSI_WITH_AES_256_CBC_SHA256) // (1)
client_certificate_type=(RawPublicKey) // (1)
server_certificate_type=(RawPublicKey) // (1)
                         ->
                         <- server_hello,
                            server_certificate_type= RawPublicKey // (2)
                            certificate=((1.3.6.1.5.x,
                                         pkgx.org/1.html), KEY) // (3) 
                            client_certificate_type=RawPublicKey // (4)
                            certificate_request= (eccsi_sign, (eccsi, 
                                            SHA256)), // (5)
                             server_key_exchange,
                             server_hello_done

certificate=(
   (1.3.6.1.5.x,
   pkgx.org/1.html),
   KEY), // (6) 
client_key_exchange,
change_cipher_spec,
finished                  ->

                         <- change_cipher_spec,
                            finished

Application Data        <------->     Application Data
  ]]></artwork>
   </figure>
   
</section> 

<section title="Combined Usage of Raw Public Keys and X.509 Certificates">

   <t> This example combines the uses of an ECCSI key and an X.509
   certificate.  The TLS client uses an ECCSI key for client
   authentication, and the TLS server provides an X.509 certificate for 
   server authentication.  </t>
   
   <t> The exchange starts with the client indicating its ability to 
   process a raw public key, or an X.509 certificate, if provided by the server.  
   It prefers a raw public key, since TLS_ECDHE_ECSSI_WITH_AES_256_CBC_SHA256 
   proceeds TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA256 in the cipher_suites payload, 
   and the RawPublicKey value precedes the other value in the server_certificate_type 
   payload. Furthermore, the client indicates that it has a raw public key for 
   client-side authentication.  </t>
   
   <t> The server chooses to provide its X.509 certificate in (3) and indicates 
   that choice in (2).  For client authentication, the server indicates in (4) 
   that it has selected the raw public key format and requests an ECCSI certificate 
   from the client in (4) and (5).  The TLS client provides an ECSSI certificate in (6) 
   after receiving and processing the TLS server hello message. </t>


	 <figure align="center" anchor="xml_TLS_Exchange-3" title="Basic Raw Public Key TLS Exchange">
	 <artwork align="left"><![CDATA[     
client_hello,
cipher_suites=(TLS_ECDHE_ECSSI_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA256), // (1)
client_certificate_type=(RawPublicKey), // (1)
server_certificate_type=(RawPublicKey, X.509) // (1)
                         ->
                         <-  server_hello,
                             server_certificate_type=X.509, // (2)
                             certificate, // (3)
                             client_certificate_type=RawPublicKey // (4)
                             certificate_request= (eccsi_sign, (eccsi, 
                                            SHA256)), // (5)
                             server_key_exchange,
                             server_hello_done
certificate=(KEY,
   (1.3.6.1.5.x,
   pkgx.org/1.html)), // (6)
client_key_exchange,
change_cipher_spec,
finished                  ->

                          <- change_cipher_spec,
                             finished

Application Data        <------->     Application Data
   ]]></artwork>
   </figure>

   </section>

   </section>  
       
   <section title="Security Considerations">
   <t> Using IBS-enabled raw public key in TLS/DTLS will not change the information flows of TLS, 
   so the security of the resulting protocol rests on the security of the used IBS algorithms. 
   The example IBS algorithms mentioned above are all standardized and open, and thus the 
   security of these algorithms is supposed to have gone through wide scrutinization. </t>
   
   </section>

      
   <section title="IANA Considerations">
   </section>

   <section title="Acknowledgements">
   </section>

 </middle>

 <!--  *****BACK MATTER ***** -->

 <back>
   <!-- References split into informative and normative -->

   <!-- There are 2 ways to insert reference entries from the citation libraries:
    1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
    2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
       (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

    Both are cited textually in the same manner: by using xref elements.
    If you use the PI option, xml2rfc will, by default, try to find included files in the same
    directory as the including file. You can also define the XML_LIBRARY environment variable
    with a value containing a set of directories to search.  These can be either in the local
    filing system or remote ones accessed by http (http://domain/dir/... ).-->

   <references title="Normative References">
     <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->
	 
	 &RFC2119;
	 
	 &RFC5091;
	 
	 &RFC6507;
	 
	 &RFC6508;
	 
	 &RFC7250;
	 

     <reference anchor="PKIX">
       <!-- the following is the minimum to make xml2rfc happy -->

       <front>
         <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List(CRL) Profile
		</title>

         <author surname="Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk">
           <organization></organization>
         </author>

         <date month="June" year="2008" />
       </front>
     </reference>

   </references>

   <references title="Informative References">
     <!-- Here we use entities that we defined at the beginning. -->


     <!-- A reference written by by an organization not a person. -->

     <reference anchor="Defeating-SSL"
                target="http://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf">
       <front>
         <title>New Tricks for Defeating SSL in Practice</title>

         <author surname="Marlinspike, M.,">
           <organization></organization>
         </author>

         <date month="Feb" year="2009" />
       </front>
     </reference>
   </references>

   <section anchor="app-additional" title="Examples">
   </section>

   <!-- Change Log

v00 2006-03-15  EBD   Initial version

     -->
 </back>
</rfc>
