<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="draft-deng-teep-cvmp-01"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
<!-- [REPLACE] 
       * docName with name of your draft
     [CHECK] 
       * category should be one of std, bcp, info, exp, historic
       * ipr should be one of trust200902, noModificationTrust200902, noDerivativesTrust200902, pre5378Trust200902
       * updates can be an RFC number as NNNN
       * obsoletes can be an RFC number as NNNN 
-->

  <front>
    <title abbrev="CVMP"> Confidential Virtual Machine Provisioning in Cloud Environment</title>
    <seriesInfo name="Internet-Draft" value="Confidential Virtual Machine Provisioning in Cloud Environment"/>
   
    <author fullname="Juan Deng" initials="J" surname="Deng"> 
		<address> <email>dengjuan.deng@alibaba-inc.com</email>  </address>
	</author>
	<author fullname="Guorui Yu" initials="G" surname="Yu"> 
		<address> <email>ruogui.ygr@alibaba-inc.com</email>  </address>
	</author>
    <date year="2023"/>
  
    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>keyword</keyword>

    <abstract>
      <t>This document specifies the procedures of provisioning confidential virtual machine in the cloud environment.</t> 
    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
      <t> Confidential computing protects workload and data in use leveraging hardware-based security technology. Confidential virtual machine (CVM) in the cloud environment is one use case of confidential computing. There is an increasing adoption of CVMs in the cloud. CVM allows a cloud tenant to protect the sensitive workload and data, and manage the cryptography keys independently from the cloud service providers.</t>
	  <t> When adopting CVMs in the cloud, the CVM features, CVM provisioning and management of cryptography keys, etc. depend on different hardware. Common CVM provisioning procedures and requirements are needed. This document specifies the procedures of provisioning CVMs in the cloud environment and the requirements. </t>
    </section>
	
	<section>
		<name>Terms</name>
		<t>The following terms are used in this document.</t>
		<ul>
			<li>CVM Platform: CVM Platform is provided and maintained by cloud service provider.  It provides interfaces for cloud tenant to create and manage CVM instances on the cloud. It receives the CVM related requests from cloud tenant and interacts with cloud resource manager to perform CVM creation, decommission, update, migration etc. on the cloud infrastructure. </li>
			<li>Key Agent: Key Agent is the component within a CVM instance that interacts with Key Server to allocate, acquire and update security keys, and also provides and update Security Version Number (SVN) of the CVM. </li>
			<li>Security Version Number (SVN): SVN represents the security features of the hardware of CVM.</li>
			<li>Key Server: Key Server authenticates Key Agent, responds to Key Agent's requests to generate, update and return security keys, and update CVM's SVN.</li>
			<li>Security Key(SK): SK is allocated by Key Server under the request of Key Agent. SK is used by CVM instance to encrypt sensitive data. </li>
			<li>KeyID: KeyID identifies a security key. </li>
			
		</ul>
	</section>
    
    <section> 
		<!--  2. Procedures of CVM Provisioning： Start -->
      <name>Procedures of CVM Provisioning in Cloud Environment</name>
      <t>The procedures of CVM provisioning in Cloud Environment includes the following:</t>
      <ul>
        <li>Feature Acquirement: Cloud Tenant acquires the CVM related features that are provided by CVM Platform.</li>
		<li>CVM Creation: Cloud tenant requests CVM instance(s) with selected features and CVM platform creates the requested CVM instance(s), and returns the results to the cloud tenant.</li >
		<li>Key Provisioning: the Key Agent in CVM instance obtains and updates security keys bounded to the CVM through communication with the Key Server.</li>
		<li>CVM management: Cloud tenant performs various management tasks on CVM instances, such as CVM updates, live migration, CVM decommission etc., through interacting with CVM Platform</li>
      </ul>
	  
	  
	  
	  <section anchor="SecFeatureInquiry"> <!--  3.1 Feature Inquiry -->
		  <name> Feature Acquirement </name>
		  <t> Before creating a CVM instance, Cloud Tenant acquires  the supported CVM features from CVM platform. Figure 1 shows example feature acquirement between Cloud Tenant and CVM Platform. CVMFeatureRequest message is sent by Cloud Tenant to CVM Platform requesting the supported CVM features. CVM returns CVMFeatureResponse carrying a list of supported features, which may include:</t>
		  <ul>
			  <li> SecureBoot: whether secure boot is supported.</li>
			  <li> LiveMigration: whether live migration is supported.</li>
			  <li> AuxilaryFirmware: whether allows Cloud Tenant to specify firmware to be used.</li>
			  <li> BIOS: whether allows Cloud Tenant to customize BIOS.</li>
			  <li> SVN: whether allows Cloud Tenant to specifies SVN.</li>
		  </ul>
		  
	
	      <figure>
	        <name>CVM feature acquirement</name>
	        <artset>
	          <artwork type="ascii-art" name="CVMFeature.txt">
	            <![CDATA[
+--------+                     +----------+
| Cloud  |                     |   CVM    |
| Tenant |                     | Platform |
+--------+                     +----------+
	|                              |
	|                              |
	|      CVMFeatureRequest       |
	|----------------------------->|
	|                              |
	|                              |
	|      CVMFeatureResponse      |
	|<-----------------------------|
	|                              |                               
                                      
	            ]]>
	          </artwork>
	        </artset>      
	      </figure>  
 	  </section> <!-- 3.1 Feature Inquiry: End  -->
	 
	  <section>  <!-- 3.2 CVM Creation  -->
		  <name>CVM Creation</name>
		  <t> Figure 2 shows that Cloud Tenant requests to create CVM instance(s) and CVM Platform responds with the creation result. In the CVMCreateRequest message requesting CVM creation, Client tenant provides the requested features. The features are described as in <xref target="SecFeatureInquiry"/>. CVM Platform returns with CVMCreateResponse. If the creation is successful, in CVMCreateResponse message, CVM Platform indicated successful CVM creation and returns information on the features requested by Cloud Tenant.</t>
		 
	      <figure>
	        <name>CVM instance creation</name>
	        <artset>
	          <artwork type="ascii-art" name="CVMCreation.txt">
	            <![CDATA[
+--------+                 +----------+
| Cloud  |                 |   CVM    |
| Tenant |                 | Platform |
+--------+                 +----------+
	|                           |
	|    CVMCreateRequest       |
	|-------------------------->|
	|                           |
	|  CVMCreateResponse        |
	|<--------------------------|
	|                           | 
					                                                                                    
	            ]]>
	          </artwork>
	        </artset>      
	      </figure>  
		  
	  </section><!-- 3.2 CVM Creation: End -->
	  
	  <section>  <!-- 3.3 Key Provisioning: -->
		  <name>Key Provisioning</name>
		<t>The key provisioning consists of Policy Setup, Key Allocation, Key Acquirement, and Key Update between Key Agent and Key Server. </t>
		<ul>
			<li>Policy Setup: Cloud Tenant provide Key Server with Keying Policy. </li>
			<li>Key Allocation: Key Agent requests Key Server to allocate a new security key. </li>
			<li>Key Acquirement: Key Agent obtains a pre-allocated security key by providing the KeyID to Key Server. </li>
			<li>Key Update: Key Agent updates its SVN with Key Server.</li>
			</ul>
 <t>The security considerations for the communication between Key Agent and Key Server are presented in <xref target="Security"/>.</t>
 		  
		  
		  <section> <!-- 3.3.1 Key Policy -->
			  <name>Policy Setup</name> 
			  <t>In Policy Setup, Cloud Tenant provides Key server with information needed for Key Allocation, Key Acquirement, and Key Update. The information at least includes SVN, measurements, etc. Figure 3 shows example Keying Policy setup between Key Agent and Key Server.</t>
		      <figure>
		        <name>Key provisioning</name>
		        <artset>
		          <artwork type="ascii-art" name="KeyProvision.txt">
		            <![CDATA[
	+--------+                        +--------+ 
	| Cloud  |                        |  Key   |
	| Tenant |                        | Server | 
	+--------+                        +--------+
		|                                 |            
		|  SetKeyPolicy                   |
		|-------------------------------->|
		|                                 |
		|                 PolicyResponse  |
		|<--------------------------------|
		|                                 |
		
		            ]]>
		          </artwork>
		        </artset>      
		      </figure>  
			   
			  
		  </section><!-- 3.3.1 Key Policy: End -->
		  
		  <section> <!-- 3.3.2 Key Allocation-->
			  <name> Key Allocation</name>
			  <t>Figure 4 shows example key allocation. Key Agent sends KeyAllocRequest message to Key Server to request a new security key. Key Server then allocates a KeyID, generates and saves a root key for Key Agent, derives a security key from the root key with input parameters including the SVN provided by Key Agent, and returns the KeyID and Security Key. Allocation usually occurs when CVM is started for the first time, and CVM needs to use Security Key for encryption. </t>
		      <figure>
		        <name>Key provisioning</name>
		        <artset>
		          <artwork type="ascii-art" name="KeyAlloc.txt">
		            <![CDATA[
	+--------+                        +--------+ 
	| Key    |                        |  Key   |
	| Agent  |                        | Server | 
	+--------+                        +--------+
		|                                 |            
		|  KeyAllocRequest                |
		|-------------------------------->|                         
		|                KeyAllocResponse |
		|<--------------------------------|

		            ]]>
		          </artwork>
		        </artset>      
		      </figure> 
		  </section>
		  
		  <section> <!-- 3.3.3 Key Acquirement-->
			  <name> Key Acquirement</name>
			  <t>Figure 5 shows example key acquirement where Key Agent acquires a pre-allocated Security Key with the KeyID.</t>
		      <figure>
		        <name>Key provisioning</name>
		        <artset>
		          <artwork type="ascii-art" name="KeyAcquire.txt">
		            <![CDATA[
	+--------+                        +--------+ 
	| Key    |                        |  Key   |
	| Agent  |                        | Server | 
	+--------+                        +--------+
		|                                 |            
		|  KeyAcquireRequest              |
		|-------------------------------->|                         
		|              KeyAcquireResponse |
		|<--------------------------------|

		            ]]>
		          </artwork>
		        </artset>      
		      </figure> 
		  </section> 
		  
		  <section> <!-- 3.3.4 Key Update-->
			  <name> Key Update</name>
			  <t> Key Agent within a CVM may chose to update the minimal required SVN of the Key by sending KeyUpdateRequest to Key Server. Key Server will only update the SVN if the old SVN with the Key Agent is lower than the target SVN. After successful SVN update, a Key Agent with outdated SVN cannot acquire the Security Key with the pre-allocated KeyID. A CVM which meets the requirement of minimum SVN can request the Key Server to re-allocate a new Security Key from the corresponding root key. Figure 6 shows example key update.</t>
		      <figure>
		        <name>Key Update</name>
		        <artset>
		          <artwork type="ascii-art" name="KeyUpdate.txt">
		            <![CDATA[
	+--------+                        +--------+ 
	| Key    |                        |  Key   |
	| Agent  |                        | Server | 
	+--------+                        +--------+
		|                                 |            
		|  KeyUpdateRequest               |
		|-------------------------------->|                         
		|              KeyUpdateResponse  |
		|<--------------------------------|

		            ]]>
		          </artwork>
		        </artset>      
		      </figure> 
			  
		  </section> 
		  
		  
	  </section> <!-- 3.3 Key Provisioning : End-->
	  
	  <section>
		  <name>CVM Management</name>
		  <t>This section presents the procedures for CVM management.</t>
	  </section>
	  
    </section>  <!--  3. Procedures of CVM Provisioning： End      -->
    
    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <t>This memo includes no request to IANA.</t>
    </section>
    
    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
	  <section>
		  <name>Communication Security Between Key Agent and Key Server</name>
		  <t> Key Agent and Key server are mutually authenticated and the communications between them are confidentially and integrity protected. The security can leverage the attestation evidence in <xref target="RFC9334"/>. The messages can use CBOR and the security wrapper as in <xref target="RFC9052"/>. </t>
	  </section>
	  
	  <section>
		  <name>Communication Security Between Cloud Tenant and Key Server</name>
		  <t> This section considers the communication security between Cloud Tenant and Key Server.</t>
	  </section>
     
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9052.xml"/>
        <!-- The recommended and simplest way to include a well known reference -->
        
      </references>
	  
	
	
	</references>
    

    <section anchor="Acknowledgements" numbered="false">
      <!-- [REPLACE/DELETE] an Acknowledgements section is optional -->
      <name>Acknowledgements</name>
      <t></t>
    </section>
    
    <section anchor="Contributors" numbered="false">
      <!-- [REPLACE/DELETE] a Contributors section is optional -->
      <name>Contributors</name>
      <t>   </t>
      <!-- [CHECK] it is optional to add a <contact> record for some or all contributors -->
    </section>
    
 </back>
</rfc>