<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.27 (Ruby 3.0.2) -->
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-yang-teep-tee-dp-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.0 -->
  <front>
    <title abbrev="TEE DP">Trusted Execution Environment Distributed Provisioning Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-yang-teep-tee-dp-00"/>
    <author initials="P." surname="Yang" fullname="Penglin Yang">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>No.32 Xuanwumen West Street</street>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>yangpenglin@chinamobile.com</email>
      </address>
    </author>
    <author initials="T." surname="Pang" fullname="Ting Pang">
      <organization>Huawei Technology Co.,Ltd.</organization>
      <address>
        <postal>
          <street>127 Jinye Road, Yanta District</street>
          <city>Xi'an</city>
          <country>China</country>
        </postal>
        <email>pangting@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Zhang" fullname="Xiaomeng Zhang">
      <organization>AntGroup</organization>
      <address>
        <postal>
          <street>World Financial Center, No.1 East 3rd Ring Middle Road, Chaoyang District</street>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>zhangxiaomeng.zxm@antgroup.com</email>
      </address>
    </author>
    <date year="2023" month="April" day="03"/>
    <area>Security</area>
    <workgroup>TEEP</workgroup>
    <keyword>distributed provisioning, big data</keyword>
    <abstract>
      <t>In big data area, computing resource manager like MESOS<xref target="MESOS"/>, YARM<xref target="YARN"/>, kubernets<xref target="Kubernetes"/> or computing framework like Spark<xref target="Spark"/>, use Master-Worker structure to split computing task. In the master component, the computing task will be splited into different child tasks.  Each of thess child tasks will be loaded to a executor which is managed by Worker. The Master and Worker are usually exist as cluster, cloud or other distributed framework. When the big data tasks needs to be processed in TEE in lifecycle, this document could be used for Master to provision child tasks in distributed TEEs.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="problems">
      <name>Introduction</name>
      <t>In big data area, different from stand-alone applications, big data application always need to be splitted into different child tasks by Master in big data computing framework. Then these tasks will be deployed to executors in local or remote by Workers. TEE could be used to protect the application and its secret data during the process, if only the whole process lifecycle is covered by TEE. Before running big data application, it is hard to predict how many computing resources are needed. Similarly, TEE resource also needs to be provisioned during the application process lifecycle. This document specifies the architecture and protocol of how big data computing framework provision and use TEE during application process lifecycle.
The Trusted Execution Environment Provisioning (TEEP) architecture document <xref target="I-D.ietf-teep-architecture"/> provides design guidance and introduces the necessary terminology.</t>
    </section>
    <section anchor="term">
      <name>Terminology</name>
      <t>The following terms are used:</t>
      <ul spacing="normal">
        <li>Big Data Computing Framework: An framework that is responsible for managing and spliting big data computing task, like Spark, MapReduce<xref target="MapReduce"/>, etc. Usually, Big Data Computing Framework has its own Computing Resource Manage Framework. Like Spark supports       standalone deploy mode.</li>
        <li>Computing Resource Manage Framework: An framework that is responsible for managing and scheduling computing resource in cluster, like YARN, MESOS and Kubernetes.</li>
        <li>Master: The entity in Computing Resource Manage Framework that is responsible for splitting computing task into different child tasks, and allocating computing resource to those child tasks.</li>
        <li>Executor: The executing entity that is responsible for executing child tasks in Worker. The current executor includes process, container and VM.</li>
        <li>Worker: The entity that is responsible for undertaking child tasks and manage Executors.
Other terms like TAM, TEE, REE, TA will reuse the term definition defined in <xref target="I-D.ietf-teep-architecture"/>.</li>
      </ul>
    </section>
    <section anchor="usecase">
      <name>Use cases</name>
      <t>In federated machine learning, participants want to create a unified machine learning model without leaking private data owned by each other. TEE as a hardware based technology could make sure data inside this environment is integrated and confidential. If the federated machine learning participants trust this TEE and its TA, they could gather their data in that TEE and generate the final machine learning model. The architecture and protocol described in this document could be used in the federated machine learning scenario, and make sure the lifecycle of machine learning process is protected by TEE.</t>
    </section>
    <section anchor="arch">
      <name>Architecture</name>
      <t>The following figure shows the architecture of TEE distributed provisioning. In this architecture, Master is the management center of big data Computing Resource Management Framework. it also plays the role of TAM in TEEP architecture. When Master starts running big data applications, it forwards TEE computing resource request to Worker by TEE-DP protocol. Worker then occupies TEE computing resource and generate Executor which is running inside TEE. Meanwhile, TEE-DP protocol also includes secure channel negotiation message. Based on the secure channel between TAM and Executor, TEEP protocol could provision child tasks generated by Master securely.</t>
      <figure anchor="norm-arch">
        <name>TEEP Broker Models</name>
        <artwork><![CDATA[
                         +--------+
      +----------------->| Master |<------------------+
      |                  |  /TAM  |                   |
      |                  +--------+                   |
      |                       ^                       |
      |                       |                       |
      |TEE-DP         +-------+                 TEE-DP|
      |protocol       |TEEP protocol          protocol|
      |               |                               |
      v               v                               v
  +---------+    +----------+     +----------+    +--------+
  |  Worker |<-->| Executor |     | Executor |<-->| Worker |
  +---------+    +----------+     +----------+    +--------+
                 |   TEE    |     |   TEE    |
                 +----------+     +----------+
]]></artwork>
      </figure>
    </section>
    <section anchor="dp">
      <name>TEE Distributed Provisioning Protocol</name>
      <t>As described in architecture section, TEE distributed provisioning protocol has two message packages: TEE resource request/responses, TEE secure channel request/response. The message framework is shown below in CDDL format.</t>
      <figure anchor="frame">
        <name>TEE DP Message Framework</name>
        <artwork><![CDATA[
tee-dp-message = $tee-dp-message-type .within tee-dp-message-framework
tee-dp-message-framework = [
        type: $tee-dp-type,
        optionis: { * tee-dp-option}
]
tee-dp-option = (uint =>any)
$tee-dp-message-type /= tee-resource-request
$tee-dp-message-type /= tee-resource-response
$tee-dp-message-type /= tee-secure-channel-resquest
$tee-dp-message-type /= tee-secure-channel-response-direct
$tee-dp-message-type /= tee-secure-channel-response-indirect

$tee-dp-type = uint .size 1
TEE-resource-request = 1
TEE-resource-response = 2
TEE-secure-channel-request = 3
TEE-secure-channel-response-direct = 4
TEE-secure-channel-response-indirect = 5
]]></artwork>
      </figure>
      <section anchor="tee-resource-requestresponse">
        <name>TEE Resource Request/Response</name>
        <t>TEE resource request/response message is used by Master/TAM and Worker to negotiate TEE computing resource. The resource request message is sent by Master/TAM, then the Worker response this message. The only mandantory option in request message is MEMORY-size. Other items like CPU core number, CPU frequency, CPU architecture, memory encryption method and memory isolation method are optional. Another message that is mandantory in response message is TOKEN-tee-instance, which represents the identity of selected TEE instance. This token could be public key of AIK(attestation identity key) or otehr identity information. The relevant CDDL fragment is shown below. The complete CDDL structure is shown in Appendix.</t>
        <artwork><![CDATA[
memory-encryption-method = &(
        hardware-based: 0,
        software-based: 1,
        none: 2
)
memory-isolation-method = &(
        hardware-based: 0,
        software-based: 1,
        none: 2,
)
cpu-architecture = &(
        sgx-based: 0,
        sev-based: 1,
        trustzone-based: 2,
        other: 3,
)

tee-resource-request = [
        type: TEE-resource-request
        options:{ 
                ? CPU-core-number: uint .size 1
                ? CPU-frequency: unit .size 2
                ? CPU-arch: uint .bits cpu-architecture
                ;the cpu frequency unit is MHZ
                MEMORY-size: uint .size 4
                ;the memory size unit is MB 
                ? Requested-memory-encryption-method: uint .bits memory-encryption-method
                ? Requested-memory-isolation-method: uint .bits memory-isolation-method
        }
]

tee-resource-response = [
        type: TEE-resource-response
        options:{
                ? CPU-core-number: uint .size 1
                ? CPU-frequency: unit .size 2
                ? MEMORY-size: uint .size 4
                ? TOKEN-tee-instance: bstr .size 4
                ;this token represents the identity of TEE, it could be a public key of AIK
                ? Requested-memory-encryption-method: uint .bits memory-encryption-method
                ? Requested-memory-isolation-method: uint .bits memory-isolation-method         
        }
]
]]></artwork>
        <t>{：#res-req title="TEE DP Resource Request Response " }</t>
      </section>
      <section anchor="tee-secure-channel-requestresponse">
        <name>TEE Secure Channel Request/Response</name>
        <t>Before executing TEEP protocol between Master/TAM and Executor in TEE DP architecutre, secure channel needs to be established first. There are two kinds of secure channel in TEE DP architecture, direct and indirect. Direct means Master/TAM direct connect with Executor by network, which also means the TEE of Executor support network communication, like TLS. Indirect means the Master/TAM and Executor connect with each other by other components like TEEP broker, or Worker. Master/TAM and Executor could transfer encrypted packages like COSE, JWE, by that component. The CDDL fragment is shown below.</t>
        <figure anchor="secure-channel">
          <name>TEE DP Secure Channel Negotiation</name>
          <artwork><![CDATA[
secure-channel-negotiation-type= &(
        direct: 0;
        indirect: 1;
)
tee-secure-channel-resquest = [
        type: TEE-secure-channel-request
        options:{
                TOKEN-tee-instance:
                Secure-channel-negotiation-type: $$negotiation-type
        }
]

$$negotiation-type //= {
        direct: bool
        ip-type: bool ;true is ipv4, false is ipv6
}

$$negotiation-type //= {
        indirect: bool
        Protocol-name => uint .bits protocol-name
}
        

$$ipaddr //= (
        ipv4: bstr .size 4
)
$$ipaddr //= (
        ipv6: bstr .size 16
)

direct-extensions = (uint => any)
tee-secure-channel-response-direct = [
        type: TEE-secure-channel-response-direct
        options:{
                $$ipaddr
                port => uint .size 1
                *direct-extensions
        }
]

&protocol-name &= (
        cose: 0,
        jwe: 1,
        others: 2,
)

indirect-extentions = (uint => any)
tee-secure-channel-response-indirect = [
        type: TEE-channel-response-indirect
        options:{
                Protocol-name => uint .bits protocol-name
                *indirect-extensions
        }
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The trust domain of TEE DP architecture is Master/TAM and Executor running in TEE. The Worker component do not have to be trusted by Master/TAM since it is only used for creating Executor and monitoring runtime status. The security of secure channel based on the secure channel negotiation mechanism which is out of the scope of this document.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="I-D.ietf-teep-architecture">
          <front>
            <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
            <author fullname="Mingliang Pei" initials="M." surname="Pei">
              <organization>Broadcom</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Dave Wheeler" initials="D. M." surname="Wheeler">
              <organization>Amazon</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   A Trusted Execution Environment (TEE) is an environment that enforces
   that any code within that environment cannot be tampered with, and
   that any data used by such code cannot be read or tampered with by
   any code outside that environment.  This architecture document
   motivates the design and standardization of a protocol for managing
   the lifecycle of trusted applications running inside such a TEE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teep-architecture-19"/>
        </reference>
        <reference anchor="I-D.ietf-teep-usecase-for-cc-in-network">
          <front>
            <title>TEEP Usecase for Confidential Computing in Network</title>
            <author fullname="Penglin Yang" initials="P." surname="Yang">
              <organization>China Mobile</organization>
            </author>
            <author fullname="chenmeiling" initials="" surname="chenmeiling">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Li Su" initials="L." surname="Su">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Ting Pang" initials="T." surname="Pang">
              <organization>Huawei Technology Co.,Ltd.</organization>
            </author>
            <date day="20" month="October" year="2022"/>
            <abstract>
              <t>   Confidential computing is the protection of data in use by performing
   computation in a hardware-based Trusted Execution Environment.
   Confidential computing could provide integrity and confidentiality
   for users who want to run applications and process data in that
   environment.  When confidential computing is used in scenarios which
   need network to provision users' data and applications in the TEE
   environment, TEEP architecture[I-D.ietf-teep-architecture] and
   protocol[I-D.ietf-teep-protocol] could be used.  This document
   focuses on using TEEP to provision Network Users' data and
   applications in confidential computing.  This document is a use case
   and extension of TEEP and could provide guidance for cloud computing,
   MEC[MEC] and other scenarios to use confidential computing in
   network.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teep-usecase-for-cc-in-network-02"/>
        </reference>
        <reference anchor="I-D.ietf-teep-protocol">
          <front>
            <title>Trusted Execution Environment Provisioning (TEEP) Protocol</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Mingliang Pei" initials="M." surname="Pei">
              <organization>Broadcom</organization>
            </author>
            <author fullname="Dave Wheeler" initials="D. M." surname="Wheeler">
              <organization>Amazon</organization>
            </author>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Akira Tsukamoto" initials="A." surname="Tsukamoto">
         </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document specifies a protocol that installs, updates, and
   deletes Trusted Components in a device with a Trusted Execution
   Environment (TEE).  This specification defines an interoperable
   protocol for managing the lifecycle of Trusted Components.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teep-protocol-12"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="Spark" target="https://spark.apache.org/docs/3.3.2/cluster-overview.html">
          <front>
            <title>Spark Overview</title>
            <author initials="S." surname="Community" fullname="Spark Community">
              <organization/>
            </author>
            <date year="2023" month="March" day="02"/>
          </front>
        </reference>
        <reference anchor="YARN" target="https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html">
          <front>
            <title>Apache Hadoop YARN</title>
            <author initials="A. H." surname="Community" fullname="Apache Hadoop Community">
              <organization/>
            </author>
            <date year="2022" month="July" day="29"/>
          </front>
        </reference>
        <reference anchor="MESOS" target="https://mesos.apache.org/documentation/latest/architecture/">
          <front>
            <title>MESOS Architecture</title>
            <author initials="A. M." surname="Community" fullname="Apache MESOS Community">
              <organization/>
            </author>
            <date year="2023" month="March" day="02"/>
          </front>
        </reference>
        <reference anchor="Kubernetes" target="https://kubernetes.io/docs/concepts/architecture/cloud-controller/">
          <front>
            <title>Kubernetes Cloud Controller Manager</title>
            <author initials="K." surname="Community" fullname="Kubernetes Community">
              <organization/>
            </author>
            <date year="2022" month="December" day="17"/>
          </front>
        </reference>
        <reference anchor="MapReduce" target="https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Overview">
          <front>
            <title>MapReduce Overview</title>
            <author initials="A. M." surname="Community" fullname="Apache MapReduce Community">
              <organization/>
            </author>
            <date year="2022" month="July" day="27"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="appendix1">
      <name>Appendix 1 Full CDDL of TEE DP protocol</name>
      <t>The full CDDL of TEE distributed provisioning protocol is shown below.</t>
      <figure anchor="full-cddl">
        <name>Full CDDL of TEE Distributed Provisioning Protocol</name>
        <artwork><![CDATA[
tee-dp-message = $tee-dp-message-type .within tee-dp-message-framework

tee-dp-message-framework = [
        type: $tee-dp-type,
        optionis: { * tee-dp-option}
]

tee-dp-option = (uint =>any)

$tee-dp-message-type /= tee-resource-request
$tee-dp-message-type /= tee-resource-response
$tee-dp-message-type /= tee-secure-channel-resquest
$tee-dp-message-type /= tee-secure-channel-response-direct
$tee-dp-message-type /= tee-secure-channel-response-indirect

$tee-dp-type = uint .size 1
TEE-resource-request = 1
TEE-resource-response = 2
TEE-secure-channel-request = 3
TEE-secure-channel-response-direct = 4
TEE-secure-channel-response-indirect = 5

memory-encryption-method = &(
        hardware-based: 0,
        software-based: 1,
        none: 2
)
memory-isolation-method = &(
        hardware-based: 0,
        software-based: 1,
        none: 2,
)

tee-resource-request = [
        type: TEE-resource-request
        options:{ 
                CPU-core-number: uint .size 1
                CPU-frequency: unit .size 2
                ;the cpu frequency unit is MHZ
                MEMORY-size: uint .size 4
                ;the memory size unit is MB 
                ? Requested-memory-encryption-method: uint .bits memory-encryption-method
                ? Requested-memory-isolation-method: uint .bits memory-isolation-method
        }
]

tee-resource-response = [
        type: TEE-resource-response
        options:{
                CPU-core-number: uint .size 1
                CPU-frequency: unit .size 2
                MEMORY-size: uint .size 4
                TOKEN-tee-instance: bstr .size 4
                ;this token represents the identity of TEE, it could be a public key of AIK
                ? Requested-memory-encryption-method: uint .bits memory-encryption-method
                ? Requested-memory-isolation-method: uint .bits memory-isolation-method         
        }
]

secure-channel-negotiation-type= &(
        direct: 0;
        indirect: 1;
)
tee-secure-channel-resquest = [
        type: TEE-secure-channel-request
        options:{
                TOKEN-tee-instance:
                Secure-channel-negotiation-type: $$negotiation-type
        }
]

$$negotiation-type //= {
        direct: bool
        ip-type: bool ;true is ipv4, false is ipv6
}

$$negotiation-type //= {
        indirect: bool
        Protocol-name => uint .bits protocol-name
}

$$ipaddr //= (
        ipv4: bstr .size 4
)
$$ipaddr //= (
        ipv6: bstr .size 16
)

direct-extensions = (uint => any)
tee-secure-channel-response-direct = [
        type: TEE-secure-channel-response-direct
        options:{
                $$ipaddr
                port => uint .size 1
                *direct-extensions
        }
]

&protocol-name &= (
        cose: 0,
        jwe: 1,
        others: 2,
)

indirect-extentions = (uint => any)
tee-secure-channel-response-indirect = [
        type: TEE-channel-response-indirect
        options:{
                Protocol-name => uint .bits protocol-name
                *indirect-extensions
        }
]

; labels of mapkey for tee dp message parameters, uint (0..15)
CPU-core-number = 0
CPU-frequency = 1
MEMORY-size = 2
Requested-memory-encryption-method = 3
Requested-memory-isolation-method = 4
TOKEN-tee-instance = 5
Secure-channel-negotiation-type = 6
direct = 7
indirect = 8
ip-type = 9
Protocol-name = 10
ipaddr = 11
port = 12
direct-extensions = 13
indirect-extensions = 14

]]></artwork>
      </figure>
    </section>
  </back>
  <!-- ##markdown-source:
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
FUX8U1OUt3RbmxLs+o7lXll2TVrrL7rYLiSa3Xe7Y/2S0V/DdtHrrfrqmSiV
NBSUuUNoGEk1Lw1KlNn14xGbwof914+Gg9v7HVTrvH2UvycJ6GUl9NzNLJc1
58xJdX6jM2XG4zg3Jz1oMn/9uFsnHm5d/lFr+f5HDqhZhgPxshApXb7oxtUA
s3cDd3fc9/afTp9+Dz/yEvVnTA6pdLmpeL/fE7DvQe+1bMDea6kuUlq08fGf
bkQbGZsMoyvUTe+bNk8t3lytjVZ+rWK33F7cQ6dv4I49dbZF6yu0vnZoy9Yp
xZ0S+7wOLH/z6F/qp1cg6clGbh/C0CSlUfv8L1YLjgrnnkR1ipwBxhvSef3U
xD4xuawvDKp8Depopwq0YtfCleHCvajSvtbQkl4isUjc3ClU74iZx7N0TnWw
6e4VAKQyb8eAj0LCCNQal9ryob3k/Wo+2fIspv3whkalXtTPiejpr317j+lI
ZcJ+aTymdC+3PDt8frhO50+PQ/vu2gQFzz9LdI0022efl0lia1ttjO6jgdUO
dxv2/Zsy3V13XwhvrJg/1GXsf+Y69q4L2bdXsj+9K9mf6jXTf+K65w179jfq
2N/e2Pxv39j8O23/BrZ8e1PzQ93UvG1v/4/b27dN7dum9kfW1BqFfsoSjp5D
2xcvM0rN1OJBYhZnjfdTqFtAZ6hHloMHe2G4/yFU06li0MKeHaxRh4GsjYpk
gerdad4C1jtztsOrvdRl0ekd2QqLPvKRhb8/rh0C335O/3O+X/bJcNAxBtvf
owUmiPEFQlo/Z/sH64N1/1HX36qZx3XHZ15uQAcZRHFcXTD0G9G73l5653bw
D4xyva3vQAAA

-->

</rfc>
