<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.19 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-teep-architecture-18" category="info">

  <front>
    <title abbrev="TEEP Architecture">Trusted Execution Environment Provisioning (TEEP) Architecture</title>

    <author initials="M." surname="Pei" fullname="Mingliang Pei">
      <organization>Broadcom</organization>
      <address>
        <email>mingliang.pei@broadcom.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Microsoft</organization>
      <address>
        <email>dthaler@microsoft.com</email>
      </address>
    </author>
    <author initials="D." surname="Wheeler" fullname="David Wheeler">
      <organization>Amazon</organization>
      <address>
        <email>davewhee@amazon.com</email>
      </address>
    </author>

    <date year="2022" month="July" day="11"/>

    <area>Security</area>
    <workgroup>TEEP</workgroup>
    <keyword>Internet-Draft</keyword>

    <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>

  <middle>


<section anchor="introduction" title="Introduction">
<t>Applications executing in a device are exposed to many different attacks
intended to compromise the execution of the application or reveal the
data upon which those applications are operating. These attacks increase
with the number of other applications on the device, with such other
applications coming from potentially untrustworthy sources. The
potential for attacks further increases with the complexity of features
and applications on devices, and the unintended interactions among those
features and applications. The danger of attacks on a system increases
as the sensitivity of the applications or data on the device increases.
As an example, exposure of emails from a mail client is likely to be of
concern to its owner, but a compromise of a banking application raises
even greater concerns.</t>

<t>The Trusted Execution Environment (TEE) concept is designed to let
applications execute in a protected 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, 
including by a commodity operating system (if present).
In a system with multiple TEEs, this also means that code in one TEE 
cannot be read or tampered with by code in another TEE.</t>

<t>This separation reduces the possibility
of a successful attack on application components and the data contained inside the
TEE. Typically, application components are chosen to execute inside a TEE because
those application components perform security sensitive operations or operate on
sensitive data. An application component running inside a TEE is referred to as a
Trusted Application (TA), while an application running outside any TEE, i.e., in the
Rich Execution Environment (REE),
is referred to as an Untrusted Application. In the example of a banking application, 
code that relates to the authentication protocol could reside in a TA while the 
application logic including HTTP protocol parsing could be contained in the 
Untrusted Application.  In addition, processing of credit card numbers or account balances could be done in a TA as it is sensitive data.
The precise code split is ultimately a decision of the 
developer based on the assets he or she wants to protect according to the threat model.</t>

<t>TEEs are typically used in cases where software or data assets need to be protected from unauthorised access
where threat actors may have physical or administrative access to a device.  This
situation arises for example in gaming consoles where anti-cheat protection is a concern,
devices such as ATMs or IoT devices placed in locations where attackers might have physical
access, cell phones or other devices used for mobile payments, and hosted cloud environments.  Such environments
can be thought of as hybrid devices where one user or administrator controls the REE and a
different (remote) user or administrator controls a TEE in the same physical device.<vspace />
It may also be the case in some constrained devices that there is no REE (only a TEE) and there
may be no local “user” per se, only a remote TEE administrator.
For further discussion of such confidential computing use cases and threat model, see
<xref target="CC-Overview"/> and <xref target="CC-Technical-Analysis"/>.</t>

<t>TEEs use hardware enforcement combined with software protection to secure TAs and
its data. TEEs typically offer a more limited set of services to TAs than is 
normally available to Untrusted Applications.</t>

<t>Not all TEEs are the same, however, and different vendors may have different
implementations of TEEs with different security properties, different
features, and different control mechanisms to operate on TAs. Some
vendors may themselves market multiple different TEEs with different
properties attuned to different markets. A device vendor may integrate
one or more TEEs into their devices depending on market needs.</t>

<t>To simplify the life of TA developers interacting
with TAs in a TEE, an interoperable protocol for managing TAs running in
different TEEs of various devices is needed. This software update protocol 
needs to make sure that compatible trusted and untrusted components (if any) of an 
application are installed on the correct device. In this TEE ecosystem,
there often arises a need for an external trusted party to verify the
identity, claims, and rights of TA developers, devices, and their TEEs.
This external trusted party is the Trusted Application Manager (TAM).</t>

<t>The Trusted Execution Environment Provisioning (TEEP) protocol addresses
the following problems:</t>

<t><list style="symbols">
  <t>An installer of an Untrusted Application that depends on a given TA
wants to request installation of that TA in the device’s TEE
so that the Untrusted Application can complete, but the TEE
needs to verify whether such a TA is actually authorized to
run in the TEE and consume potentially scarce TEE resources.</t>
  <t>A TA developer providing a TA whose code itself is considered
confidential wants to determine 
security-relevant information of a device before allowing their
TA to be provisioned to the TEE within the device. An example 
is the verification of 
the type of TEE included in a device and that it is capable of 
providing the security protections required.</t>
  <t>A TEE in a device wants to determine whether an entity
that wants to manage a TA in the device is authorized to manage TAs
in the TEE, and what TAs the entity is permitted to manage.</t>
  <t>A Device Administrator wants to determine if a TA exists (is
installed) on a device (in the TEE), and if not, install the TA in
the TEE.</t>
  <t>A Device Administrator wants to check whether a TA in a
device’s TEE is the most up-to-date version, and if not, update the
TA in the TEE.</t>
  <t>A Device Administrator wants to remove a TA from a device’s TEE if
the TA developer is no longer maintaining that TA, when the TA has
been revoked, or is not used for other reasons anymore (e.g., due to an 
expired subscription).</t>
</list></t>

<t>For TEEs that simply verify and load signed TA’s from an untrusted
filesystem, classic application distribution protocols can be used
without modification.  The problems in the bullets above, on the other hand,
require a new protocol, i.e., the TEEP protocol. The TEEP protocol is 
a solution for TEEs that can install and enumerate TAs in a TEE-secured
location where another domain-specific protocol standard (e.g., <xref target="GSMA"/>,
<xref target="OTRP"/>) that meets the needs is not already in use.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The following terms are used:</t>

<t><list style="symbols">
  <t>App Store: An online location from which Untrusted Applications can be downloaded.</t>
  <t>Device: A physical piece of hardware that hosts one or more TEEs,
often along with
an REE.</t>
  <t>Device Administrator:  An entity that is responsible for administration
of a device, which could be the Device Owner. A Device Administrator
has privileges on the device to install and remove Untrusted Applications and TAs,
approve or reject Trust Anchors, and approve or reject TA developers,
among possibly other privileges on the device. A Device Administrator can
manage the list of allowed TAMs by modifying the list of Trust
Anchors on the device. Although a Device Administrator may have
privileges and device-specific controls to locally administer a
device, the Device Administrator may choose to remotely
administer a device through a TAM.</t>
  <t>Device Owner: A device is always owned by someone. In some cases, it is common for
the (primary) device user to also own the device, making the device
user/owner also the Device Administrator. In enterprise environments
it is more common for the enterprise to own the device, and any device
user has no or limited administration rights. In this case, the
enterprise appoints a Device Administrator that is not the device
owner.</t>
  <t>Device User: A human being that uses a device. Many devices have
a single device user. Some devices have a primary device user with
other human beings as secondary device users (e.g., a parent allowing
children to use their tablet or laptop). Other devices are not used
by a human being and hence have no device user. Relates to Device Owner
and Device Administrator.</t>
  <t>Personalization Data: A set of configuration data that is specific to
   the device or user. The Personalization Data may depend on the type of
   TEE, a particular TEE instance, the TA, and even the user of the device;
   an example of Personalization Data might be a secret symmetric key used
   by a TA to communicate with some service.</t>
  <t>Raw Public Key: A raw public key consists of only the algorithm identifier
(type) of the key and the cryptographic public key material, such as the
SubjectPublicKeyInfo structure of a PKIX certificate <xref target="RFC5280"/>. Other
serialization formats that do not rely on ASN.1 may also be used.</t>
  <t>Rich Execution Environment (REE): An environment that is provided
and governed by a typical OS (e.g., Linux, Windows, Android, iOS),
potentially in conjunction with other supporting operating systems
and hypervisors; it is outside of the TEE(s) managed by the TEEP protocol. This environment and
applications running on it are considered untrusted (or more precisely,
less trusted than a TEE).</t>
  <t>Trust Anchor: As defined in <xref target="RFC6024"/> and <xref target="RFC9019"/>,
“A trust anchor represents an authoritative entity via a public
key and associated data.  The public key is used to verify digital
signatures, and the associated data is used to constrain the types
of information for which the trust anchor is authoritative.”
The Trust Anchor may be a certificate, a raw public key or other structure,
as appropriate. It can be a non-root certificate when it is a certificate.</t>
  <t>Trust Anchor Store: As defined in <xref target="RFC6024"/>, “A trust anchor
store is a set of one or more trust anchors stored in a device…
A device may have more than one trust anchor store, each of which
may be used by one or more applications.”  As noted in <xref target="RFC9019"/>,
a Trust Anchor Store must resist modification against unauthorized
insertion, deletion, and modification.</t>
  <t>Trusted Application (TA): An application (or, in some implementations, an application component) that runs in a TEE.</t>
  <t>Trusted Application Manager (TAM): An entity that manages Trusted
Applications and other Trusted Components running in TEEs of various devices.</t>
  <t>Trusted Component: A set of code and/or data in a TEE managed as a unit
by a Trusted Application Manager.  Trusted Applications and
Personalization Data are thus managed by being included in
Trusted Components.  Trusted OS code or trusted firmware can also be
expressed as Trusted Components that a Trusted Component depends on.</t>
  <t>Trusted Component Developer: An entity that develops one or
more Trusted Components.</t>
  <t>Trusted Component Signer: An entity that signs a Trusted Component with
a key that a TEE will trust. The signer might or might not be the
same entity as the Trusted Component Developer. For example, a Trusted Component might
be signed (or re-signed) by a Device Administrator if the TEE will
only trust the Device Administrator. A Trusted Component might also be encrypted,
if the code is considered confidential.</t>
  <t>Trusted Execution Environment (TEE): An execution environment that enforces that
only authorized code can execute within the TEE, and data used by that
code cannot be read or tampered with by code outside the TEE.
A TEE also generally has a device unique credential that cannot be cloned.
There are multiple technologies that can be used to implement
a TEE, and the level of security achieved varies accordingly.
In addition, TEEs typically use an isolation mechanism between Trusted Applications to ensure
that one TA cannot read, modify or delete the data and code of another
TA.</t>
  <t>Untrusted Application: An application running in an REE. An Untrusted Application 
might depend on one or more TAs.</t>
</list></t>

</section>
<section anchor="use-cases" title="Use Cases">

<section anchor="payment" title="Payment">

<t>A payment application in a mobile device requires high security and
trust in the hosting device. Payments initiated from a mobile
device can use a Trusted Application
to provide strong identification and proof of transaction.</t>

<t>For a mobile payment application, some biometric identification
information could also be stored in a TEE. The mobile payment
application can use such information for unlocking the device and 
for local identification of the user.</t>

<t>A trusted user interface (UI) may be used in a mobile device to
prevent malicious software from stealing sensitive user input data.
Such an implementation often relies on a TEE for providing access 
to peripherals, such as PIN input or a trusted display, so that
the REE cannot observe or tamper with the user input or output.</t>

</section>
<section anchor="authentication" title="Authentication">

<t>For better security of authentication, a device may store its
keys and cryptographic libraries inside a TEE limiting access to 
cryptographic functions via a well-defined interface and thereby 
reducing access to keying material.</t>

</section>
<section anchor="internet-of-things" title="Internet of Things">

<t>Weak security in Internet of Things (IoT) devices has been posing threats to 
critical infrastructure, i.e., assets that are essential for the functioning
of a society and economy. It is desirable that IoT devices can prevent malware
from manipulating actuators (e.g., unlocking a door), or
stealing or modifying sensitive data, such as authentication credentials
in the device. A TEE can be the best way to implement such IoT
security functions.</t>

</section>
<section anchor="confidential-cloud-computing" title="Confidential Cloud Computing">

<t>A tenant can store sensitive data, such as customer details or credit
card numbers, in a TEE in a cloud computing
server such that only the tenant can access the data, preventing
the cloud hosting provider from accessing the data. A tenant can
run TAs inside a server TEE for secure operation and enhanced
data security. This provides benefits not only to tenants with
better data security but also to cloud hosting providers for reduced
liability and increased cloud adoption.</t>

</section>
</section>
<section anchor="architecture" title="Architecture">

<section anchor="system-components" title="System Components">

<t><xref target="notionalarch"/> shows the main components in a typical device with an REE and a
TEE. Full descriptions of
components not previously defined are provided below. Interactions of
all components are further explained in the following paragraphs.</t>

<figure title="Notional Architecture of TEEP" anchor="notionalarch"><artwork><![CDATA[
   +-------------------------------------------+
   | Device                                    |    Trusted Component
   |                          +--------+       |              Signer
   |    +-------------+       |        |-----------+              |
   |    | TEE-1       |       | TEEP   |---------+ |              |
   |    | +--------+  |  +----| Broker |       | | |  +--------+  |
   |    | | TEEP   |  |  |    |        |<---+  | | +->|        |<-+
   |    | | Agent  |<----+    |        |    |  | |  +-|  TAM-1 |
   |    | +--------+  |       |        |<-+ |  | +->| |        |<-+
   |    |             |       +--------+  | |  |    | +--------+  |
   |    | +---+ +---+ |                   | |  |    | TAM-2  |    |
   |  +-->|TA1| |TA2| |        +-------+  | |  |    +--------+    |
   |  | | |   | |   |<---------| App-2 |--+ |  |                  |
   |  | | +---+ +---+ |    +-------+   |    |  |    Device Administrator
   |  | +-------------+    | App-1 |   |    |  |
   |  |                    |       |   |    |  |
   |  +--------------------|       |---+    |  |
   |                       |       |--------+  |
   |                       +-------+           |
   +-------------------------------------------+
]]></artwork></figure>

<t><list style="symbols">
  <t>Trusted Component Signers and Device Administrators utilize the services
of a TAM to manage TAs on devices. Trusted Component Signers do not directly interact
with devices. Device Administators may elect to use a TAM for remote administration
of TAs instead of managing each device directly.</t>
  <t>Trusted Application Manager (TAM):  A TAM is responsible for performing lifecycle
management activity on Trusted Components on behalf of Trusted Component Signers
and Device Administrators. This includes installation and
deletion of Trusted Components, and may include, for example, over-the-air
updates to keep Trusted Components up-to-date and clean up when Trusted Components
should be removed. TAMs may provide services that make it easier for
Trusted Component Signers or Device Administators to use the TAM’s service to manage multiple devices,
although that is not required of a TAM.  <vspace blankLines='1'/>
The TAM performs its management of Trusted Components on the device through
interactions with a device’s TEEP Broker, which relays
messages between a TAM and a TEEP Agent running inside the TEE. 
TEEP authentication is performed between a TAM and a TEEP Agent.  <vspace blankLines='1'/>
As shown in
<xref target="notionalarch"/>, the TAM cannot directly contact a TEEP Agent, but must
wait for the TEEP Broker to contact
the TAM requesting a particular service. This architecture is
intentional in order to accommodate network and application firewalls
that normally protect user and enterprise devices from arbitrary
connections from external network entities.  <vspace blankLines='1'/>
A TAM may be publicly available for use by many Trusted Component Signers, or a TAM
may be private, and accessible by only one or a limited number of
Trusted Component Signers. It is expected that many enterprises, manufacturers, and network carriers
will run their own private TAM.  <vspace blankLines='1'/>
A Trusted Component Signer or Device Administrator chooses a particular TAM based on
whether the TAM is trusted by a device or set of devices. The
TAM is trusted by a device if the TAM’s public key is, or chains up to,
an authorized
Trust Anchor in the device. A Trusted Component Signer or Device Administrator may run
their own TAM, but the devices they wish to manage must include
this TAM’s public key or certificate, or a certificate it chains up to, in the
Trust Anchor Store.  <vspace blankLines='1'/>
A Trusted Component Signer or Device Administrator is free to utilize multiple TAMs. This may
be required for managing Trusted Components on multiple different types of devices
from different manufacturers, or mobile devices on
different network carriers, since
the Trust Anchor Store on these different devices may contain keys
for different
TAMs. A Device Administrator may be able to add their own TAM’s
public key or certificate, or a certificate it chains up to, to the Trust Anchor Store on all their devices,
overcoming this limitation.  <vspace blankLines='1'/>
Any entity is free to operate a TAM. For a TAM to be successful, it must
have its public key or certificate installed in a device’s Trust Anchor Store.
A TAM may set up a relationship with device manufacturers or network carriers
to have them install the TAM’s keys in their device’s Trust Anchor Store.
Alternatively, a TAM may publish its certificate and allow Device
Administrators to install the TAM’s certificate in their devices as
an after-market action.</t>
  <t>TEEP Broker: A TEEP Broker is an application component running in a Rich
Execution Environment (REE) that enables the message protocol exchange between
a TAM and a TEE in a device. A TEEP Broker does not process messages
on behalf of a TEE, but merely is responsible for relaying messages from
the TAM to the TEE, and for returning the TEE’s responses to the TAM.
In devices with no REE (e.g., a microcontroller where all code runs
in an environment that meets the definition of a Trusted Execution
Environment in <xref target="terminology"/>), the TEEP Broker would be absent and
instead the
TEEP protocol transport would be implemented inside the TEE itself.</t>
  <t>TEEP Agent: The TEEP Agent is a processing module running inside
a TEE that receives TAM requests (typically relayed via a TEEP Broker
that runs in an REE). A TEEP Agent in the TEE may parse requests or
forward requests to other processing modules in a TEE, which is
up to a TEE provider’s implementation. A response message
corresponding to a TAM request is sent back to the TAM, again typically
relayed via a TEEP Broker.</t>
  <t>Certification Authority (CA): A CA is an entity that issues digital 
certificates (especially X.509 certificates) and vouches for the 
binding between the data items in a certificate <xref target="RFC4949"/>. 
Certificates are then used for authenticating a device, a TAM, or a 
Trusted Component Signer, as discussed in <xref target="trustanchors"/>.  The CAs do not need to be the same;
different CAs can be chosen by each TAM, and different device CAs
can be used by different device manufacturers.</t>
</list></t>

</section>
<section anchor="multiple-tees-in-a-device" title="Multiple TEEs in a Device">

<t>Some devices might implement multiple TEEs. 
In these cases, there might be one shared TEEP Broker 
that interacts with all the TEEs in the device.
However, some TEEs (for example, SGX <xref target="SGX"/>) present themselves as separate containers
within memory without a controlling manager within the TEE. As such,
there might be multiple TEEP Brokers in the REE,
where each TEEP Broker communicates with one or more TEEs associated with it.</t>

<t>It is up to the REE and the Untrusted Applications
how they select the correct TEEP Broker. Verification that the correct TA
has been reached then becomes a matter of properly verifying TA attestations,
which are unforgeable.</t>

<t>The multiple TEEP Broker approach is shown in the diagram below.
For brevity, TEEP Broker 2 is shown interacting with only one TAM and Untrusted Application and only one TEE, but
no such limitations are intended to be implied in the architecture.</t>

<figure title="Notional Architecture of TEEP with multiple TEEs" anchor="notionalarch2"><artwork><![CDATA[
   +-------------------------------------------+            Trusted
   | Device                                    |          Component
   |                                           |             Signer
   |    +-------------+                        |                  |
   |    | TEE-1       |                        |                  |
   |    | +-------+   |       +--------+       |      +--------+  |
   |    | | TEEP  |   |       | TEEP   |------------->|        |<-+
   |    | | Agent |<----------| Broker |       |      |        | TA 
   |    | | 1     |   |       | 1      |---------+    |        |
   |    | +-------+   |       |        |       | |    |        |
   |    |             |       |        |<---+  | |    |        |
   |    | +---+ +---+ |       |        |    |  | |  +-|  TAM-1 |Policy
   |    | |TA1| |TA2| |       |        |<-+ |  | +->| |        |<-+
   |  +-->|   | |   |<---+    +--------+  | |  |    | +--------+  |
   |  | | +---+ +---+ |  |                | |  |    | TAM-2  |    |
   |  | |             |  |     +-------+  | |  |    +--------+    |
   |  | +-------------+  +-----| App-2 |--+ |  |       ^          |
   |  |                    +-------+   |    |  |       |       Device
   |  +--------------------| App-1 |   |    |  |       |   Administrator
   |                +------|       |   |    |  |       |
   |    +-----------|-+    |       |---+    |  |       |
   |    | TEE-2     | |    |       |--------+  |       |
   |    | +------+  | |    |       |------+    |       |
   |    | | TEEP |  | |    +-------+      |    |       |
   |    | | Agent|<-----+                 |    |       |
   |    | | 2    |  | | |                 |    |       |
   |    | +------+  | | |                 |    |       |
   |    |           | | |                 |    |       |
   |    | +---+     | | |                 |    |       |
   |    | |TA3|<----+ | |  +----------+   |    |       |
   |    | |   |       | |  | TEEP     |<--+    |       |
   |    | +---+       | +--| Broker   |        |       |
   |    |             |    | 2        |----------------+
   |    +-------------+    +----------+        |
   |                                           |
   +-------------------------------------------+
]]></artwork></figure>

<t>In the diagram above, TEEP Broker 1 controls interactions with the TAs in TEE-1,
and TEEP Broker 2 controls interactions with the TAs in TEE-2. This presents some
challenges for a TAM in completely managing the device, since a TAM may not
interact with all the TEEP Brokers on a particular platform. In addition, since
TEEs may be physically separated, with wholly different resources, there may be no
need for TEEP Brokers to share information on installed Trusted Components or resource usage.</t>

</section>
<section anchor="multiple-tams-and-relationship-to-tas" title="Multiple TAMs and Relationship to TAs">

<t>As shown in <xref target="notionalarch2"/>, a TEEP Broker provides communication between 
one or more TEEP Agents and
one or more TAMs. The selection of which TAM to interact with might be
made with or without input from an Untrusted Application, but is ultimately
the decision of a TEEP Agent.</t>

<t>A TEEP Agent is assumed to be able to determine, for any given Trusted Component,
whether that Trusted Component is installed (or minimally, is running) in a TEE with
which the TEEP Agent is associated.</t>

<t>Each Trusted Component is digitally signed, protecting its integrity, and linking
the Trusted Component back to the Trusted Component Signer. The Trusted Component Signer is often the Trusted Component Developer, but in
some cases might be another party such as a Device Administrator
or other party
to whom the code has been licensed (in which case the same code might
be signed by multiple licensees and distributed as if it were different TAs).</t>

<t>A Trusted Component Signer selects one or more TAMs and communicates the Trusted Component(s) to the TAM.
For example, the Trusted Component Signer might choose TAMs based upon the markets into which the TAM can provide access. There
may be TAMs that provide services to specific types of devices, or device
operating systems, or specific geographical regions or network carriers. A Trusted Component Signer may be
motivated to utilize multiple TAMs in order to maximize market penetration
and availability on multiple types of devices. This means that the same Trusted Component
will often be available through multiple TAMs.</t>

<t>When the developer of an Untrusted Application that depends on a Trusted Component publishes
the Untrusted Application to an app store or other app repository, the developer
optionally binds the Untrusted Application with a manifest that identifies
what TAMs can be contacted for
the Trusted Component. In some situations, a Trusted Component may only be available via a single TAM - this is likely the case
for enterprise applications or Trusted Component Signers serving a closed community. For broad public apps,
there will likely be multiple TAMs in the Untrusted Application’s manifest - one servicing one brand of mobile
device and another servicing a different manufacturer, etc. Because different devices
and different manufacturers trust different TAMs, the manifest can include multiple
TAMs that support the required Trusted Component.</t>

<t>When a TEEP Broker receives a request (see the RequestTA API in <xref target="apis"/>) from an Untrusted Application to install a Trusted Component,
a list of TAM URIs may be provided for that Trusted Component, and the request is passed to the TEEP Agent.
If the TEEP Agent decides that the Trusted Component needs to be installed, the TEEP Agent selects a single TAM URI
that is consistent with the list of trusted TAMs provisioned in the TEEP Agent, invokes the
HTTP transport for TEEP to connect to the TAM URI, and begins a TEEP protocol exchange.  When the TEEP Agent
subsequently receives the Trusted Component to install and the Trusted Component’s manifest indicates dependencies
on any other trusted components, each dependency can include a list of TAM URIs for the
relevant dependency.  If such dependencies exist that are prerequisites to install the Trusted Component,
then the TEEP Agent recursively follows the same procedure for each dependency that needs to be installed
or updated, including selecting a TAM URI that is consistent with the list of trusted TAMs provisioned
on the device, and beginning a TEEP exchange.  If multiple TAM URIs are considered trusted,
only one needs to be contacted and they can be attempted in some order until one responds.</t>

<t>Separate from the Untrusted Application’s manifest, this framework relies on the use of the manifest 
format in <xref target="I-D.ietf-suit-manifest"/> for expressing how to install a Trusted Component, as well as any
dependencies on other TEE components and versions.
That is, dependencies from Trusted Components on other Trusted Components can be expressed in a SUIT manifest,
including dependencies on any other TAs, trusted OS code (if any), or trusted firmware.
Installation steps can also be expressed in a SUIT manifest.</t>

<t>For example, TEEs compliant
with GlobalPlatform <xref target="GPTEE"/> may have a notion of a “security domain” (which is a grouping of
one or more TAs installed on a device, that can share information within such a group)
that must be created and into which one or more TAs can then be installed. It is thus up
to the SUIT manifest to express a dependency on having such a security domain existing
or being created first, as appropriate.</t>

<t>Updating a Trusted Component may cause compatibility issues with any Untrusted Applications or other
components that depend on the updated Trusted Component, just like updating the OS or a shared library
could impact an Untrusted Application.  Thus, an implementation needs to take into
account such issues.</t>

</section>
<section anchor="untrusted-apps-trusted-apps-and-personalization-data" title="Untrusted Apps, Trusted Apps, and Personalization Data">

<t>In TEEP, there is an explicit relationship and dependence between an Untrusted Application
in an REE and one or more TAs in a TEE, as shown in <xref target="notionalarch2"/>.
For most purposes, an Untrusted Application that uses one or more TAs in a TEE
appears no different from any other Untrusted Application in the REE. However, the way
the Untrusted Application and its corresponding TAs are packaged, delivered, and installed on
the device can vary. The variations depend on whether the Untrusted Application and TA are bundled
together or are provided separately, and this has implications to the management of
the TAs in a TEE. In addition to the Untrusted Application and TA(s), the TA(s) and/or TEE may also require additional data to personalize the TA to the device or a user.
Implementations must support encryption to preserve the confidentiality of such Personalization Data,
which may potentially contain sensitive data. Implementations must also support mechanisms for integrity protection of such Personalization Data.
Other than the requirement to support confidentiality and integrity protection,
the TEEP architecture places no limitations or requirements on the Personalization Data.</t>

<t>There are multiple possible cases for bundling of an Untrusted Application, TA(s), and Personalization Data.
Such cases include (possibly among others):</t>

<t><list style="numbers">
  <t>The Untrusted Application, TA(s), and Personalization Data are all bundled together in a single
package by a Trusted Component Signer and either provided to the TEEP Broker through the TAM, or provided separately (with encrypted Personalization Data), with
key material needed to decrypt and install the Personalization
Data and TA provided by a TAM.</t>
  <t>The Untrusted Application and the TA(s) are bundled together in a single package, which a TAM or
a publicly accessible app store maintains, and the Personalization Data
is separately provided by the Personalization Data provider’s TAM.</t>
  <t>All components are independent packages. The Untrusted Application is installed through some
independent or device-specific mechanism, and one or more TAMs provide (directly or indirectly by reference)
the TA(s) and Personalization Data.</t>
  <t>The TA(s) and Personalization Data are bundled together into a package provided by a TAM,
while the Untrusted Application is installed through some independent
or device-specific mechanism such as an app store.</t>
  <t>Encrypted Personalization Data is bundled into a package distributed with the Untrusted
Application, while the TA(s) and key material needed to decrypt and install the Personalization Data
are in a separate package provided by a TAM.</t>
</list></t>

<t>The TEEP protocol can treat each TA, any dependencies the TA has, and Personalization Data as
separate Trusted Components with separate installation steps that are expressed in SUIT manifests,
and a SUIT manifest might contain or reference multiple binaries (see <xref target="I-D.ietf-suit-manifest"/>
for more details). The TEEP Agent is responsible for handling any installation steps
that need to be performed inside the TEE, such as decryption of private TA binaries or
Personalization Data.</t>

<t>In order to better understand these cases, it is helpful to review actual implementations of TEEs and their application delivery mechanisms.</t>

<section anchor="example-application-delivery-mechanisms-in-intel-sgx" title="Example: Application Delivery Mechanisms in Intel SGX">

<t>In Intel Software Guard Extensions (SGX), the Untrusted Application and TA are typically bundled into the
same package (Case 2). The TA 
exists in the package as a shared library (.so or .dll). The Untrusted Application loads the TA into
an SGX enclave when the Untrusted Application needs the TA. This organization makes it easy to maintain
compatibility between the Untrusted Application and the TA, since they are updated together. It is
entirely possible to create an Untrusted Application that loads an external TA into an SGX enclave, and
use that TA (Cases 3-5). In this case, the Untrusted Application would require a reference to an external
file or download such a file dynamically, place the contents of the file into memory, and
load that as a TA. Obviously, such file or downloaded content must be properly formatted
and signed for it to be accepted by the SGX TEE.</t>

<t>In SGX, any
Personalization Data is normally loaded into the SGX enclave (the TA) after the TA has
started. Although it is possible with SGX to include the Untrusted Application in an encrypted
package along with Personalization Data (Cases 1 and 5), there are no instances of this known to
be in use at this time, since such a construction would require a special installation
program and SGX TA (which might or might not be the TEEP Agent itself based on the implementation)
to receive the encrypted package, decrypt it, separate it into the
different elements, and then install each one. This installation is complex
because the Untrusted Application decrypted inside the TEE must be passed out of the TEE to an
installer in the REE which would install the Untrusted Application.
Finally, the Personalization Data would need to be sent out of the
TEE (encrypted in an SGX enclave-to-enclave manner) to the REE’s installation app, which
would pass this data to the installed Untrusted Application, which would in turn send this data
to the SGX enclave (TA). This complexity is due to the fact that each SGX enclave is separate
and does not have direct communication to other SGX enclaves.</t>

<t>As long as signed files (TAs and/or Personalization Data) are installed into
an untrusted filesystem and trust is verified by the TEE at load time, classic
distribution mechanisms can be used.  Some uses of SGX, however, allow a model
where a TA can be dynamically installed into an SGX enclave that
provides a runtime platform.  The TEEP protocol can be used in
such cases, where the runtime platform could include a TEEP Agent.</t>

</section>
<section anchor="example-application-delivery-mechanisms-in-arm-trustzone" title="Example: Application Delivery Mechanisms in Arm TrustZone">

<t>In Arm TrustZone <xref target="TrustZone"/> for A-class devices, the Untrusted Application and TA may or may not be
bundled together. This differs from SGX since in TrustZone the TA lifetime is not inherently tied
to a specific Untrused Application process lifetime as occurs in SGX.  A TA is loaded by
a trusted OS running in the TEE such as a GlobalPlatform <xref target="GPTEE"/> compliant TEE, where the trusted OS is 
separate from the OS in the REE.
Thus Cases 2-4 are equally applicable.  In addition, it is possible for TAs to communicate
with each other without involving any Untrusted Application, and so the complexity of Cases 1 and 5
are lower than in the SGX example, though still more
complex than Cases 2-4.</t>

<t>A trusted OS running in the TEE (e.g., OP-TEE) that supports loading and verifying signed TAs from
an untrusted filesystem can, like SGX, use classic file distribution
mechanisms.  If secure TA storage is used (e.g., a Replay-Protected
Memory Block device) on the other hand, the TEEP protocol can be used
to manage such storage.</t>

</section>
</section>
<section anchor="entity-relations" title="Entity Relations">

<t>This architecture leverages asymmetric cryptography to
authenticate a device to a TAM. Additionally, a TEEP Agent
in a device authenticates a TAM. The
provisioning of Trust Anchors to a device may be different from
one use case to the other. A Device Administrator may want to
have the capability to control what TAs are allowed.
A device manufacturer enables verification by one or more TAMs and by Trusted Component Signers; 
it may embed a list of default Trust Anchors into the TEEP Agent
and TEE for TAM trust verification and TA signature verification.</t>

<figure title="Example Developer Experience" anchor="experience"><artwork><![CDATA[
 (App Developers)   (App Store)   (TAM)      (Device with TEE)  (CAs)
        |                   |       |                |            |
        |                   |       |      (Embedded TEE cert) <--|
        |                   |       |                |            |
        | <--- Get an app cert -----------------------------------|
        |                   |       |                |            |
        |                   |       | <-- Get a TAM cert ---------|
        |                   |       |                |            |
1. Build two apps:          |       |                |            |
                            |       |                |            |
   (a) Untrusted            |       |                |            |
       App - 2a. Supply --> | --- 3. Install ------> |            |
                            |       |                |            |
   (b) TA -- 2b. Supply ----------> | 4. Messaging-->|            |
                            |       |                |            |
]]></artwork></figure>

<t><xref target="experience"/> shows an example where the same developer builds and signs
two applications: (a) an Untrusted Application; (b) a TA
that provides some security functions to be run inside
a TEE.  This example assumes that the developer, the TEE, and the TAM have
previously been provisioned with certificates.</t>

<t>At step 1, the developer authors the two applications.</t>

<t>At step 2, the developer uploads the
Untrusted Application (2a) to an Application Store. 
In this example, the developer is also the Trusted Component Signer, and so generates
a signed TA.
The developer can then either bundle the signed TA
with the Untrusted Application, or the developer can provide a signed Trusted Component containing the TA
to a TAM that will be managing the TA in various devices.</t>

<t>At step 3, a user
will go to an Application Store to download the Untrusted
Application (where the arrow indicates the direction of data transfer).</t>

<t>At step 4, since the Untrusted Application depends on the TA,
installing the Untrusted Application will trigger TA installation
via communication with a TAM. The TEEP Agent
will interact with the TAM via a TEEP Broker that faciliates communications between the TAM
and the TEEP Agent.</t>

<t>Some Trusted Component installation implementations might ask for a user’s consent. In other
implementations,
a Device Administrator might choose what Untrusted Applications and related Trusted Components to
be installed. A user consent flow is out of scope of the TEEP architecture.</t>

<t>The main components of the TEEP protocol
consist of a set of standard messages created by
a TAM to deliver Trusted Component management commands to a device,
and device attestation and response messages created by a TEE that
responds to a TAM’s message.</t>

<t>It should be noted that network communication capability is generally
not available in TAs in today’s TEE-powered devices.  Consequently, Trusted
Applications generally rely on a broker in the REE to provide access to
network functionality in the REE.  A broker does not need to know the actual
content of messages to facilitate such access.</t>

<t>Similarly, since the TEEP Agent runs inside a TEE, the TEEP Agent generally
relies on a TEEP Broker in the REE to provide network access, and relay
TAM requests to the TEEP Agent and relay the responses back to the TAM.</t>

</section>
</section>
<section anchor="trustanchors" title="Keys and Certificate Types">

<t>This architecture leverages the following credentials, which allow
achieving end-to-end security between a TAM and a TEEP Agent.</t>

<t><xref target="keys"/> summarizes the relationships between various keys and where
they are stored.  Each public/private key identifies a Trusted Component Signer, TAM, or TEE,
and gets a certificate that chains up to some trust anchor.  A list of trusted
certificates is used to check a presented certificate against.</t>

<t>Different CAs can be used for different
types of certificates.  TEEP messages are always signed, where the signer
key is the message originator’s private key, such as that of a TAM
or a TEE.  In addition to the keys shown in <xref target="keys"/>,
there may be additional keys used for attestation or encryption.  Refer to the 
RATS Architecture <xref target="I-D.ietf-rats-architecture"/> for more discussion.</t>

<figure title="Signature Keys" anchor="keys"><artwork><![CDATA[
                    Cardinality &                    Location of
                     Location of    Private Key     Trust Anchor
Purpose              Private Key       Signs           Store
------------------   -----------   -------------    -------------
Authenticating        1 per TEE    TEEP responses       TAM
TEEP Agent

Authenticating TAM    1 per TAM    TEEP requests     TEEP Agent

Code Signing          1 per Trusted  TA binary          TEE
                      Component
                      Signer
]]></artwork></figure>

<t>Note that Personalization Data is not included in the table above. 
The use of Personalization Data is dependent on how TAs are used 
and what their security requirements are.</t>

<t>TEEP requests from a TAM to a TEEP Agent are signed with the TAM
private key (for authentication and integrity protection). 
Personalization Data and TA binaries can be encrypted with a key 
that is established with a content-encryption key established with 
the TEE public key (to provide confidentiality). Conversely, 
TEEP responses from a TEEP Agent to a TAM can be signed with the TEE 
private key.</t>

<t>The TEE key pair and certificate are thus used for authenticating the TEE
to a remote TAM, and for sending private data to the TEE.   Often, 
the key pair is burned into the TEE by the
TEE manufacturer and the key pair and its certificate are valid for
the expected lifetime of the TEE.  A TAM provider is responsible
for configuring the TAM’s Trust Anchor Store with the manufacturer certificates or CAs
that are used to sign TEE keys. This is discussed further in
<xref target="trust-anchors-in-tam"/> below.  Typically
the same key TEE pair is used for both signing and encryption, though separate
key pairs might also be used in the future, as the joint security of
encryption and signature with a single key remains to some extent an open
question in academic cryptography.</t>

<t>The TAM key pair and certificate are used for authenticating a TAM
to a remote TEE, and for sending private data to the TAM (separate key 
pairs for authentication vs. encryption could also be used in the future).  A TAM provider
is responsible for acquiring a
certificate from a CA that is trusted by the TEEs it manages. This
is discussed further in <xref target="trust-anchors-in-teep-agent"/> below.</t>

<t>The Trusted Component Signer key pair and certificate are used to sign Trusted Components that the TEE
will consider authorized to execute.  TEEs must be configured with
the certificates or keys that it considers authorized to sign TAs
that it will execute.  This is discussed further in
<xref target="trust-anchors-in-tee"/> below.</t>

<section anchor="trust-anchors-in-teep-agent" title="Trust Anchors in a TEEP Agent">

<t>A TEEP Agent’s Trust Anchor Store contains a list of Trust Anchors, which
are typically CA certificates that sign various TAM certificates.  The list
is typically preloaded at manufacturing time, and
can be updated using the TEEP protocol if the TEE has some form of
“Trust Anchor Manager TA” that has Trust Anchors in its configuration data.
Thus, Trust Anchors can be updated similarly to the Personalization Data
for any other TA.</t>

<t>When Trust Anchor update is carried out, it is imperative that any update
must maintain integrity where only an authentic Trust Anchor list from
a device manufacturer or a Device Administrator is accepted. Details
are out of scope of the architecture and can be addressed in a protocol
document.</t>

<t>Before a TAM can begin operation in the marketplace to support a
device with a particular TEE, it must be able to get its raw public
key, or its certificate, or a certificate it chains up to, listed in
the Trust Anchor Store of the TEEP Agent.</t>

</section>
<section anchor="trust-anchors-in-tee" title="Trust Anchors in a TEE">

<t>The Trust Anchor Store in a TEE contains a list of Trust Anchors (raw public keys
or certificates) that are used to determine whether TA binaries are allowed to execute by 
checking if their signatures can be verified.  The list
is typically preloaded at manufacturing time, and
can be updated using the TEEP protocol if the TEE has some form of
“Trust Anchor Manager TA” that has Trust Anchors in its configuration data.
Thus, Trust Anchors can be updated similarly to the Personalization Data
for any other TA, as discussed in <xref target="trust-anchors-in-teep-agent"/>.</t>

</section>
<section anchor="trust-anchors-in-tam" title="Trust Anchors in a TAM">

<t>The Trust Anchor Store in a TAM consists of a list of Trust Anchors, which
are certificates that sign various device TEE certificates.  A TAM will accept a
device for Trusted Component management if the TEE in the device uses a TEE certificate
that is chained to a certificate or raw public key that the TAM trusts, is contained in an allow list, 
is not found on a block list, and/or fulfills any other policy criteria.</t>

</section>
<section anchor="scalability" title="Scalability">

<t>This architecture uses a PKI (including self-signed certificates). Trust Anchors exist on the devices to
enable the TEEP Agent to authenticate TAMs and the TEE to authenticate
Trusted Component Signers, and TAMs use Trust Anchors to
authenticate TEEP Agents.  When a PKI is used, many intermediate CA
certificates can chain to a root certificate, each of which can issue
many certificates.  This makes the protocol highly scalable.  New
factories that produce TEEs can join the ecosystem.  In this case,
such a factory can get an intermediate CA certificate from one of the
existing roots without requiring that TAMs are updated with
information about the new device factory.  Likewise, new TAMs can
join the ecosystem, providing they are issued a TAM certificate that
chains to an existing root whereby existing TEEs will be allowed to
be personalized by the TAM without requiring changes to the TEE
itself.  This enables the ecosystem to scale, and avoids the need for
centralized databases of all TEEs produced or all TAMs that exist or
all Trusted Component Signers that exist.</t>

</section>
<section anchor="message-security" title="Message Security">

<t>Messages created by a TAM are used to deliver Trusted Component
management commands to a device, and device attestation and
messages are created by the device TEE to respond to TAM messages.</t>

<t>These messages are signed end-to-end between a TEEP Agent and a TAM.
Confidentiality is provided by encrypting sensitive payloads (such as
Personalization Data and attestation evidence), rather than encrypting the
messages themselves.  Using encrypted payloads is important to ensure
that only the targeted device TEE or TAM is able to decrypt and view
the actual content.</t>

</section>
</section>
<section anchor="broker" title="TEEP Broker">

<t>A TEE and TAs often do not have the capability to directly communicate
outside of the hosting device.  For example, GlobalPlatform
<xref target="GPTEE"/> specifies one such architecture.  This calls for a software
module in the REE world to handle network communication with a TAM.</t>

<t>A TEEP Broker is an application component
running in the REE of the device or an SDK that facilitates
communication between a TAM and a TEE.  It also provides interfaces for
Untrusted Applications to query and trigger installation of Trusted Components that the
application needs to use.</t>

<t>An Untrusted Application might communicate with a TEEP Broker at runtime
to trigger Trusted Component installation itself, or an Untrusted Application might simply
have a metadata file that describes the Trusted Components it depends on and the associated TAM(s) for each Trusted Component,
and an REE Application Installer can inspect this
application metadata file and invoke the TEEP Broker to trigger Trusted Component installation
on behalf of the Untrusted
Application without requiring the Untrusted Application to run first.</t>

<section anchor="role-of-the-teep-broker" title="Role of the TEEP Broker">

<t>A TEEP Broker abstracts the message exchanges with a TEE in a device.
The input data is originated from a TAM or the first initialization
call to trigger a Trusted Component installation.</t>

<t>The Broker doesn’t need to parse TEEP message content received from a TAM
that should be processed by a TEE (see the ProcessTeepMessage API in <xref target="apis"/>).
When a device has more than one TEE, one TEEP Broker per TEE could
be present in the REE or a common TEEP Broker could be used by multiple TEEs
where the transport protocol (e.g., <xref target="I-D.ietf-teep-otrp-over-http"/>) allows
the TEEP Broker to distinguish which TEE is relevant for each message from a TAM.</t>

<t>The TEEP Broker interacts with a TEEP Agent inside a TEE, and
relays the response messages generated from the TEEP Agent back to the TAM.</t>

<t>The Broker only needs to return a (transport) error message to the TAM if the TEE is
not reachable for some reason.  Other errors are represented as
TEEP response messages returned from the TEE which will then be passed to
the TAM.</t>

</section>
<section anchor="teep-broker-implementation-consideration" title="TEEP Broker Implementation Consideration">

<t>As depicted in <xref target="broker-models"/>, there are multiple ways in which a TEEP Broker
can be implemented, with more or fewer layers being inside the TEE.  For example, in
model A, the model with the smallest TEE footprint, only the TEEP implementation is inside
the TEE, whereas the TEEP/HTTP implementation is in the TEEP Broker outside the TEE.</t>

<figure title="TEEP Broker Models" anchor="broker-models"><artwork><![CDATA[
                        Model:    A      B      C     ...

                                 TEE    TEE    TEE
     +----------------+           |      |      |
     |      TEEP      |     Agent |      |      | Agent
     | implementation |           |      |      |
     +----------------+           v      |      |
              |                          |      |
     +----------------+           ^      |      |
     |    TEEP/HTTP   |    Broker |      |      |
     | implementation |           |      |      |
     +----------------+           |      v      |
              |                   |             |
     +----------------+           |      ^      |
     |     HTTP(S)    |           |      |      |
     | implementation |           |      |      |
     +----------------+           |      |      v
              |                   |      |
     +----------------+           |      |      ^
     |   TCP or QUIC  |           |      |      | Broker
     | implementation |           |      |      |
     +----------------+           |      |      |
                                 REE    REE    REE
]]></artwork></figure>

<t>In other models, additional layers are moved into the TEE, increasing the TEE footprint,
with the Broker either containing or calling the topmost protocol layer outside of the TEE.
An implementation is free to choose any of these models.</t>

<t>TEEP Broker implementers should consider methods of distribution, scope and
   concurrency on devices and runtime options.</t>

<section anchor="apis" title="TEEP Broker APIs">

<t>The following conceptual APIs exist from a TEEP Broker to a TEEP Agent:</t>

<t><list style="numbers">
  <t>RequestTA: A notification from an REE application (e.g., an installer,
or an Untrusted Application) that it depends on a given Trusted Component, which may or may not
already be installed in the TEE.</t>
  <t>UnrequestTA: A notification from an REE application (e.g., an installer,
or an Untrusted Application) that it no longer depends on a given
Trusted Component, which may or may not already be installed in the TEE. 
For example, if the Untrusted Application is uninstalled, the uninstaller
might invoke this conceptual API.</t>
  <t>ProcessTeepMessage: A message arriving from the network, to be delivered
to the TEEP Agent for processing.</t>
  <t>RequestPolicyCheck: A hint (e.g., based on a timer) that the TEEP Agent
may wish to contact the TAM for any changes, without the device itself
needing any particular change.</t>
  <t>ProcessError: A notification that the TEEP Broker could not deliver an outbound
TEEP message to a TAM.</t>
</list></t>

<t>For comparison, similar APIs may exist on the TAM side, where a Broker may or may not
exist, depending on whether the TAM uses a TEE or not:</t>

<t><list style="numbers">
  <t>ProcessConnect: A notification that a new TEEP session is being requested by a TEEP Agent.</t>
  <t>ProcessTeepMessage: A message arriving on an existing TEEP session, to be delivered
to the TAM for processing.</t>
</list></t>

<t>For further discussion on these APIs, see <xref target="I-D.ietf-teep-otrp-over-http"/>.</t>

</section>
<section anchor="teep-broker-distribution" title="TEEP Broker Distribution">

<t>The Broker installation is commonly carried out at OEM time. A user
can dynamically download and install a Broker on-demand.</t>

</section>
</section>
</section>
<section anchor="attestation" title="Attestation">
<t>Attestation is the process through which one entity (an Attester) presents “evidence”, in the form
of a series of claims, to another entity (a Verifier), and provides sufficient proof that the claims
are true. Different Verifiers may require different degrees of confidence in attestation proofs
and not all attestations are acceptable to every verifier.  A third entity (a Relying Party)
can then use “attestation results”, in the form of another series of claims, from a Verifier
to make authorization decisions.  (See <xref target="I-D.ietf-rats-architecture"/> for more discussion.)</t>

<t>In TEEP, as depicted in <xref target="attestation-roles"/>,
the primary purpose of an attestation is to allow a device (the Attester) to prove to a TAM
(the Relying Party) that a TEE in the device has particular properties, was built by a particular
manufacturer, and/or is executing a particular TA. Other claims are possible; TEEP
does not limit the claims that may appear in evidence or attestation results,
but defines a minimal set of attestation result claims
required for TEEP to operate properly. Extensions to these claims are possible.
Other standards or groups may define the format and semantics
of extended claims.</t>

<figure title="TEEP Attestation Roles" anchor="attestation-roles"><artwork><![CDATA[
   +----------------+
   | Device         |            +----------+            
   | +------------+ |  Evidence  |   TAM    |   Evidence    +----------+
   | |     TEE    |------------->| (Relying |-------------->| Verifier |
   | | (Attester) | |            |  Party)  |<--------------|          |
   | +------------+ |            +----------+  Attestation  +----------+
   +----------------+                             Result
]]></artwork></figure>

<t>As of the writing of this specification, device and TEE attestations have not been standardized
across the market. Different devices, manufacturers, and TEEs support different attestation
protocols. In order for TEEP to be inclusive, it is agnostic to the format of evidence,
allowing proprietary or standardized formats to be used between a TEE and a verifier (which may or may not
be colocated in the TAM), as long as the format supports encryption of
any information that is considered sensitive.</t>

<t>However, it should be recognized
that not all Verifiers may be able to process all proprietary forms of attestation evidence.
Similarly, the TEEP protocol is agnostic as to the format of attestation results, and the protocol
(if any) used between the TAM and a verifier, as long as they convey at least the required set of claims
in some format. Note that the respective attestation algorithms are not defined in the TEEP protocol itself; see <xref target="I-D.ietf-rats-architecture"/> and <xref target="I-D.ietf-teep-protocol"/> for more discussion.</t>

<t>There are a number of considerations that need to be considered when appraising
evidence provided by a TEE, including:</t>

<t><list style="symbols">
  <t>What security measures a manufacturer takes when provisioning keys into devices/TEEs;</t>
  <t>What hardware and software components have access to the attestation keys of the TEE;</t>
  <t>The source or local verification of claims within an attestation prior to a TEE signing a set of claims;</t>
  <t>The level of protection afforded to attestation keys against exfiltration, modification, and side channel attacks;</t>
  <t>The limitations of use applied to TEE attestation keys;</t>
  <t>The processes in place to discover or detect TEE breaches; and</t>
  <t>The revocation and recovery process of TEE attestation keys.</t>
</list></t>

<t>Some TAMs may require additional claims in order to properly authorize a device or TEE.  The specific
format for these additional claims are outside the scope of this specification, but the TEEP protocol
allows these additional claims to be included in the attestation messages.</t>

<t>For more discussion of the attestation and appraisal process, see
the RATS Architecture <xref target="I-D.ietf-rats-architecture"/>.</t>

<t>The following information is required for TEEP attestation:</t>

<t><list style="symbols">
  <t>Device Identifying Information: Attestation information may need to uniquely identify a device to the TAM.
Unique device identification allows the TAM to provide services to the device, such as managing installed
TAs, and providing subscriptions to services, and locating device-specific keying material to
communicate with or authenticate the device. In some use cases it may be sufficient to identify 
only the class of the device. The security and privacy requirements regarding device identification 
will vary with the type of TA provisioned to the TEE.</t>
  <t>TEE Identifying Information: The type of TEE that generated this attestation must be identified.
This includes version identification information for hardware, firmware, and software version of the TEE, as applicable by the
TEE type. TEE manufacturer information for the TEE is
required in order to disambiguate the same TEE type created by different manufacturers and
address considerations around manufacturer provisioning, keying and support for the TEE.</t>
  <t>Freshness Proof: A claim that includes freshness information must be included, such as a nonce
or timestamp.</t>
</list></t>

</section>
<section anchor="algorithm-and-attestation-agility" title="Algorithm and Attestation Agility">

<t>RFC 7696 <xref target="RFC7696"/> outlines the requirements to migrate from one
mandatory-to-implement cryptographic algorithm suite to another over time.
This feature is also known as crypto agility. Protocol evolution
is greatly simplified when crypto agility is considered
during the design of the protocol. In the case of the TEEP
protocol the diverse range of use cases, from trusted app
updates for smart phones and tablets to updates of code on
higher-end IoT devices, creates the need for different
mandatory-to-implement algorithms already from the start.</t>

<t>Crypto agility in TEEP concerns the use of symmetric as well as asymmetric 
algorithms. In the context of TEEP, symmetric algorithms are used for 
encryption and integrity protection of TA binaries and Personalization Data 
whereas the asymmetric algorithms are used for signing messages and managing 
symmetric keys.</t>

<t>In addition to the use of cryptographic algorithms in TEEP, there
is also the need to make use of different attestation technologies.
A device must provide techniques to inform a TAM about the
attestation technology it supports. For many deployment cases it
is more likely for the TAM to support one or more attestation
techniques whereas the device may only support one.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<section anchor="broker-trust-model" title="Broker Trust Model">

<t>The architecture enables the TAM to communicate, via a TEEP Broker, with the device’s TEE
to manage Trusted Components.  Since the TEEP Broker runs in a potentially vulnerable REE,
the TEEP Broker could, however, be (or be infected by) malware.
As such, all TAM messages are signed and sensitive
data is encrypted such that the TEEP Broker cannot modify or capture
sensitive data, but the TEEP Broker can still conduct DoS attacks
as discussed in <xref target="compromised-ree"/>.</t>

<t>A TEEP Agent in a TEE is responsible for protecting against potential attacks
from a compromised 
TEEP Broker or rogue malware in the REE. A rogue TEEP Broker
might send corrupted data to the TEEP Agent, or launch a DoS attack by sending a flood
of TEEP protocol requests, or simply drop or delay notifications to a TEE. The TEEP Agent validates the signature of each TEEP protocol request
and checks the signing certificate against its Trust Anchors. To mitigate
DoS attacks, it might also add some protection
scheme such as a threshold on repeated requests or number of TAs that can be installed.</t>

<t>Some implementations might rely on (due to lack of any available alternative) the use of 
an untrusted timer or other event to call the RequestPolicyCheck API (<xref target="apis"/>), which
means that a compromised REE can cause a TEE to not receive policy changes and thus be out of date
with respect to policy.  The same can potentially be done by any other man-in-the-middle
simply by blocking communication with a TAM.  Ultimately such outdated compliance
could be addressed by using attestation in secure communication, where the attestation
evidence reveals what state the TEE is in, so that communication (other than remediation
such as via TEEP) from an out-of-compliance TEE can be rejected.</t>

<t>Similarly, in most implementations the REE is involved in the mechanics of installing new TAs.
However, the authority for what TAs are running in a given TEE is between the TEEP Agent and the TAM.
While a TEEP Broker broker can in effect make suggestions, it cannot decide or enforce what runs where.
The TEEP Broker can also control which TEE a given installation request is directed at, but a TEEP
Agent will only accept TAs that are actually applicable to it and where installation instructions
are received by a TAM that it trusts.</t>

<t>The authorization model for the UnrequestTA operation is, however, weaker in that it
expresses the removal of a dependency from an application that was untrusted to begin with.
This means that a compromised REE could remove a valid dependency from an Untrusted Application
on a TA.  Normal REE security mechanisms should be used to protect the REE and Untrusted Applications.</t>

</section>
<section anchor="data-protection" title="Data Protection">

<t>It is the responsibility of the TAM to protect data on its servers.
Similarly, it is the responsibility of the TEE implementation to provide protection of
data against integrity and confidentiality attacks from outside the TEE.
TEEs that provide isolation among TAs within the TEE are likewise
responsible for protecting TA data against the REE and other TAs.
For example, this can be used to protect one user’s or tenant’s data
from compromise by another user or tenant, even if the attacker has TAs.</t>

<t>The protocol between TEEP Agents and TAMs similarly is responsible for
securely providing integrity and confidentiality protection against
adversaries between them. It is a design choice at what layers to best 
provide protection against network adversaries. As discussed in <xref target="broker"/>, 
the transport protocol and any security mechanism associated with it (e.g., the Transport Layer Security protocol) under 
the TEEP protocol may terminate outside a TEE. If it does, the TEEP protocol 
itself must provide integrity protection and confidentiality protection to 
secure data end-to-end. For example, confidentiality protection for 
payloads may be provided by utilizing encrypted TA binaries and encrypted
attestation information. See <xref target="I-D.ietf-teep-protocol"/> for how a specific 
solution addresses the design question of how to provide integrity and 
confidentiality protection.</t>

</section>
<section anchor="compromised-ree" title="Compromised REE">

<t>It is possible that the REE of a device is compromised. 
We have already seen examples of attacks on the public Internet with billions
of compromised devices being used to mount DDoS attacks.  A compromised
REE can be used for such an attack but it cannot tamper with the TEE’s
code or data in doing so.  A compromised REE can, however, launch DoS attacks
against the TEE.</t>

<t>The compromised REE
may terminate the TEEP Broker such that TEEP transactions cannot reach the TEE,
or might drop, replay, or delay messages between a TAM and a TEEP Agent.
However, while a DoS attack cannot be prevented, the REE cannot access
anything in the TEE if the TEE is implemented correctly.
Some TEEs may have some watchdog scheme to observe REE state and mitigate DoS
attacks against it but most TEEs don’t have such a capability.</t>

<t>In some other scenarios, the compromised REE may ask a TEEP Broker
to make repeated requests to a TEEP Agent in a TEE to install or
uninstall a Trusted Component.  An installation or uninstallation request constructed
by the TEEP Broker or REE will be rejected by the TEEP Agent because
the request won’t have the correct signature from a TAM to pass the request
signature validation.</t>

<t>This can become a DoS attack by exhausting resources in a TEE with
repeated requests. In general, a DoS attack threat exists when the REE
is compromised, and a DoS attack can happen to other resources. The TEEP
architecture doesn’t change this.</t>

<t>A compromised REE might also request initiating the full flow of
installation of Trusted Components that are not necessary.
It may also repeat a prior legitimate Trusted Component installation
request. A TEEP Agent implementation is responsible for ensuring that it
can recognize and decline such repeated requests. It is also responsible
for protecting the resource usage allocated for Trusted Component management.</t>

</section>
<section anchor="ca-compromise-or-expiry-of-ca-certificate" title="CA Compromise or Expiry of CA Certificate">

<t>A root CA for TAM certificates might get compromised or its certificate might
expire, or a Trust Anchor other than a root CA certificate may also expire or
be compromised.
TEEs are responsible for validating the entire TAM certificate path,
including the TAM certificate and any intermediate certificates up to
the root certificate.  See Section 6 of <xref target="RFC5280"/> for details.
Such validation generally includes checking for certificate
revocation, but certificate status check protocols may
not scale down to constrained devices that use TEEP.</t>

<t>To address the above issues, a certificate path update mechanism
is expected from TAM operators, so that the TAM can get
a new certificate path that can be validated by a TEEP Agent.
In addition, the Trust Anchor in the TEEP Agent’s Trust Anchor Store
may need to be updated.  To address this, some TEE Trust Anchor update 
mechanism is expected from device OEMs, such as using the TEEP protocol
to distribute new Trust Anchors.</t>

<t>Similarly, 
a root CA for TEE certificates might get compromised or its certificate might
expire, or a Trust Anchor other than a root CA certificate may also expire or
be compromised.
TAMs are responsible for validating the entire TEE certificate path,
including the TEE certificate and any intermediate certificates up to
the root certificate.  Such validation includes checking for certificate
revocation.</t>

<t>If a TEE certificate path validation fails, the TEE
might be rejected by a TAM, subject to the TAM’s policy.
To address this, some certificate path update mechanism
is expected from device OEMs, so that the TEE can get
a new certificate path that can be validated by a TAM.
In addition, the Trust Anchor in the TAM’s Trust Anchor Store
may need to be updated.</t>

</section>
<section anchor="compromised-tam" title="Compromised TAM">

<t>Device TEEs are responsible for validating the supplied TAM certificates
to determine that the TAM is trustworthy.</t>

</section>
<section anchor="malicious-ta-removal" title="Malicious TA Removal">

<t>It is possible that a rogue developer distributes a malicious Untrusted 
Application and intends to get a malicious TA installed. Such a TA
might be able to escape from malware detection by the REE, or access trusted
resources within the TEE (but could not access other TEEs, or access other
TA’s if the TEE provides isolation between TAs).</t>

<t>It is the responsibility
of the TAM to not install malicious TAs in the first place. The TEEP
architecture allows a TEEP Agent to decide which TAMs it trusts via Trust Anchors, 
and delegates the TA authenticity check to the TAMs it trusts.</t>

<t>It may happen that a TA was previously considered trustworthy but is later
found to be buggy or compromised.
In this case, the TAM can initiate the removal of the TA by notifying devices 
to remove the TA (and potentially the REE or Device Owner to remove any Untrusted 
Application that depend on the TA).  If the TAM does not currently have a
connection to the TEEP Agent on a device, such a notification would occur
the next time connectivity does exist.  That is, to recover, the TEEP Agent
must be able to reach out to the TAM, for example whenever the 
RequestPolicyCheck API (<xref target="apis"/>) is invoked by a timer or other event.</t>

<t>Furthermore the policy in the Verifier in an attestation process can be
updated so that any evidence that includes the malicious TA would result
in an attestation failure.  There is, however, a time window during which
a malicious TA might be able to operate successfully, which is the
validity time of the previous attestation result.  For example, if
the Verifier in <xref target="attestation-roles"/> is updated to treat a previously
valid TA as no longer trustworthy, any attestation result it previously
generated saying that the TA is valid will continue to be used until
the attestation result expires.  As such, the TAM’s Verifier should
take into account the acceptable time window when generating attestation
results. See <xref target="I-D.ietf-rats-architecture"/> for further discussion.</t>

</section>
<section anchor="tee-certificate-expiry-and-renewal" title="TEE Certificate Expiry and Renewal">

<t>TEE device certificates are expected to be long lived, longer
than the lifetime of a device.  A TAM certificate usually has a
moderate lifetime of 2 to 5 years.  A TAM should get renewed or
rekeyed certificates.  The root CA certificates for a TAM, which are
embedded into the Trust Anchor Store in a device, should have long
lifetimes that don’t require device Trust Anchor updates.  On the
other hand, it is imperative that OEMs or device providers plan for
support of Trust Anchor update in their shipped devices.</t>

<t>For those cases where TEE devices are given certificates for which no good
expiration date can be assigned the recommendations in Section 4.1.2.5 of 
<xref target="RFC5280"/> are applicable.</t>

</section>
<section anchor="keeping-secrets-from-the-tam" title="Keeping Secrets from the TAM">

<t>In some scenarios, it is desirable to protect the TA binary or Personalization Data
from being disclosed to the TAM that distributes them.  In such a scenario,
the files can be encrypted end-to-end between a Trusted Component Signer and a TEE.  However, there
must be some means of provisioning the decryption key into the TEE and/or some
means of the Trusted Component Signer securely learning a public key of the TEE that it can use to
encrypt. The Trusted Component Signer cannot necessarily even trust the
TAM to report the correct public key of a TEE for use with encryption, since the TAM might instead
provide the public key of a TEE that it controls.</t>

<t>One way to solve this is for the Trusted Component Signer to run its own TAM that is only used to
distribute the decryption key via the TEEP protocol, and the key file can be a
dependency in the manifest of the encrypted TA.  Thus, the TEEP Agent would
look at the Trusted Component manifest, determine there is a dependency with a TAM URI of the
Trusted Component Signer’s TAM. The Agent would then install the dependency, and then continue with
the Trusted Component installation steps, including decrypting the TA binary with the relevant key.</t>

</section>
<section anchor="ree-privacy" title="REE Privacy">

<t>The TEEP architecture is applicable to cases where devices have a TEE that protects data
and code from the REE administrator.  In such cases, the TAM administrator, not the REE administrator,
controls the TEE in the devices.  As some examples:</t>

<t><list style="symbols">
  <t>a cloud hoster may be the REE administrator where a customer administrator controls the TEE hosted in the cloud.</t>
  <t>a device manufacturer might control the TEE in a device purchased by a customer</t>
</list></t>

<t>The privacy risk is that data in the REE might be susceptible to disclosure to the TEE administrator.
This risk is not introduced by the TEEP architecture, but is inherent in most uses of TEEs.
This risk can be mitigated by making sure the REE administrator is aware of and explicitly chooses
to have a TEE that is managed by another party.  In the cloud hoster example, this choice is made
by explicitly offering a service to customers to provide TEEs for them to administer.  In the device
manufacturer example, this choice is made by the customer choosing to buy a device made by a given
manufacturer.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document does not require actions by IANA.</t>

</section>
<section anchor="contributors" title="Contributors">

<t><list style="symbols">
  <t>Andrew Atyeo, Intercede (andrew.atyeo@intercede.com)</t>
  <t>Liu Dapeng, Alibaba Group (maxpassion@gmail.com)</t>
</list></t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>We would like to thank Nick Cook, Minho Yoo, Brian Witten, Tyler Kim, Alin Mutu, Juergen Schoenwaelder, Nicolae Paladi, Sorin Faibish, Ned Smith, Russ Housley, Jeremy O’Donoghue, and Anders Rundgren for their feedback.</t>

</section>


  </middle>

  <back>


    <references title='Informative References'>





<reference anchor='RFC6024' target='https://www.rfc-editor.org/info/rfc6024'>
<front>
<title>Trust Anchor Management Requirements</title>
<author fullname='R. Reddy' initials='R.' surname='Reddy'><organization/></author>
<author fullname='C. Wallace' initials='C.' surname='Wallace'><organization/></author>
<date month='October' year='2010'/>
<abstract><t>A trust anchor represents an authoritative entity via a public key and associated data.  The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative.  A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor.  This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems.  This  document is not an Internet Standards Track specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6024'/>
<seriesInfo name='DOI' value='10.17487/RFC6024'/>
</reference>


<reference anchor='I-D.ietf-rats-architecture'>
   <front>
      <title>Remote Attestation Procedures Architecture</title>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <author fullname='Michael Richardson'>
	 <organization>Sandelman Software Works</organization>
      </author>
      <author fullname='Ned Smith'>
	 <organization>Intel Corporation</organization>
      </author>
      <author fullname='Wei Pan'>
	 <organization>Huawei Technologies</organization>
      </author>
      <date day='14' month='June' year='2022'/>
      <abstract>
	 <t>   In network protocol exchanges it is often useful for one end of a
   communication to know whether the other end is in an intended
   operating state.  This document provides an architectural overview of
   the entities involved that make such tests possible through the
   process of generating, conveying, and evaluating evidentiary claims.
   An attempt is made to provide for a model that is neutral toward
   processor architectures, the content of claims, and protocols.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-architecture-18'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-architecture-18.txt' type='TXT'/>
</reference>



<reference anchor='RFC9019' target='https://www.rfc-editor.org/info/rfc9019'>
<front>
<title>A Firmware Update Architecture for Internet of Things</title>
<author fullname='B. Moran' initials='B.' surname='Moran'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='D. Brown' initials='D.' surname='Brown'><organization/></author>
<author fullname='M. Meriac' initials='M.' surname='Meriac'><organization/></author>
<date month='April' year='2021'/>
<abstract><t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t><t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t></abstract>
</front>
<seriesInfo name='RFC' value='9019'/>
<seriesInfo name='DOI' value='10.17487/RFC9019'/>
</reference>


<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg'>
	 <organization>Inria</organization>
      </author>
      <date day='28' month='April' year='2022'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the that code/data,
   the devices to which it applies, and cryptographic information
   protecting the manifest.  Software updates and Trusted Invocation
   both tend to use sequences of common operations, so the manifest
   encodes those sequences of operations, rather than declaring the
   metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-17'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-17.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-teep-otrp-over-http'>
   <front>
      <title>HTTP Transport for Trusted Execution Environment Provisioning: Agent Initiated Communication</title>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <date day='28' month='February' year='2022'/>
      <abstract>
	 <t>   The Trusted Execution Environment Provisioning (TEEP) Protocol is
   used to manage code and configuration data in a Trusted Execution
   Environment (TEE).  This document specifies the HTTP transport for
   TEEP communication where a Trusted Application Manager (TAM) service
   is used to manage code and data in TEEs on devices that can initiate
   communication to the TAM.  An implementation of this document can (if
   desired) run outside of any TEE, but interacts with a TEEP
   implementation that runs inside a TEE.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teep-otrp-over-http-13'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-otrp-over-http-13.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-teep-protocol'>
   <front>
      <title>Trusted Execution Environment Provisioning (TEEP) Protocol</title>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Ltd.</organization>
      </author>
      <author fullname='Mingliang Pei'>
	 <organization>Broadcom</organization>
      </author>
      <author fullname='David Wheeler'>
	 <organization>Amazon</organization>
      </author>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <author fullname='Akira Tsukamoto'>
	 <organization>AIST</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <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-08'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-protocol-08.txt' type='TXT'/>
</reference>



<reference anchor='RFC7696' target='https://www.rfc-editor.org/info/rfc7696'>
<front>
<title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='November' year='2015'/>
<abstract><t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature.  Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly.  This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t></abstract>
</front>
<seriesInfo name='BCP' value='201'/>
<seriesInfo name='RFC' value='7696'/>
<seriesInfo name='DOI' value='10.17487/RFC7696'/>
</reference>



<reference anchor='RFC5280' target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author fullname='D. Cooper' initials='D.' surname='Cooper'><organization/></author>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='S. Farrell' initials='S.' surname='Farrell'><organization/></author>
<author fullname='S. Boeyen' initials='S.' surname='Boeyen'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='W. Polk' initials='W.' surname='Polk'><organization/></author>
<date month='May' year='2008'/>
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5280'/>
<seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>


<reference anchor="CC-Overview" target="https://confidentialcomputing.io/wp-content/uploads/sites/85/2021/03/confidentialcomputing_outreach_whitepaper-8-5x11-1.pdf">
  <front>
    <title>Confidential Computing: Hardware-Based Trusted Execution for Applications and Data</title>
    <author >
      <organization>Confidential Computing Consortium</organization>
    </author>
    <date year="2021" month="January"/>
  </front>
</reference>
<reference anchor="CC-Technical-Analysis" target="https://confidentialcomputing.io/wp-content/uploads/sites/85/2022/01/CCC-A-Technical-Analysis-of-Confidential-Computing-v1.2.pdf">
  <front>
    <title>A Technical Analysis of Confidential Computing, v1.2</title>
    <author >
      <organization>Confidential Computing Consortium</organization>
    </author>
    <date year="2021" month="October"/>
  </front>
</reference>
<reference anchor="GPTEE" target="https://globalplatform.org/specs-library/tee-system-architecture-v1-1/">
  <front>
    <title>GlobalPlatform Device Technology: TEE System Architecture, v1.1</title>
    <author >
      <organization>GlobalPlatform</organization>
    </author>
    <date year="2017" month="January"/>
  </front>
  <seriesInfo name="GlobalPlatform" value="GPD_SPE_009"/>
</reference>
<reference anchor="GSMA" target="https://www.gsma.com/esim/wp-content/uploads/2020/06/SGP.22-v2.2.2.pdf">
  <front>
    <title>GP.22 RSP Technical Specification, Version 2.2.2</title>
    <author >
      <organization>GSM Association</organization>
    </author>
    <date year="2020" month="June"/>
  </front>
</reference>
<reference anchor="OTRP" target="https://globalplatform.org/specs-library/tee-management-framework-open-trust-protocol/">
  <front>
    <title>Open Trust Protocol (OTrP) Profile v1.1</title>
    <author >
      <organization>GlobalPlatform</organization>
    </author>
    <date year="2020" month="July"/>
  </front>
  <seriesInfo name="GlobalPlatform" value="GPD_SPE_123"/>
</reference>
<reference anchor="SGX" target="https://www.intel.com/content/www/us/en/architecture-and-technology/software-guard-extensions.html">
  <front>
    <title>Intel(R) Software Guard Extensions (Intel (R) SGX)</title>
    <author >
      <organization>Intel</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="TrustZone" target="https://developer.arm.com/ip-products/security-ip/trustzone">
  <front>
    <title>Arm TrustZone Technology</title>
    <author >
      <organization>Arm</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>




<reference anchor='RFC4949' target='https://www.rfc-editor.org/info/rfc4949'>
<front>
<title>Internet Security Glossary, Version 2</title>
<author fullname='R. Shirey' initials='R.' surname='Shirey'><organization/></author>
<date month='August' year='2007'/>
<abstract><t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='FYI' value='36'/>
<seriesInfo name='RFC' value='4949'/>
<seriesInfo name='DOI' value='10.17487/RFC4949'/>
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAEGAzGIAA+29a3Mb17Um/J1V/A9ddtWYHAOQxdg5iZw3bxD5cjSJLI5I
TzLz4aQaQIPoCOhGejdIIZLmt8+677X7AkpJZmo+DMslk0D3vq699ro+azqd
np+1ZbstnmW3zSG0xSr7/m2xPLRlXWXfV/dlU1e7omqz66a+LwN8WlZ32cXt
999fX2bzZrkp22LZHpri/CxfLJriHtqB7zpfreplle+gj1WTr9tpWbTraVsU
+2nuHps+/dX52TJvi7u6OT7Lympdn5+dn5X75lnW4tiuvvrq119dQUdNkT/L
bmCUTdkez88e6ubNXVMf9tz3+dmb4gifrZ5lL6q2aKqinX6H/WJroc2r1V/y
bV3BaI5FOD/bl8/Oz7KsWS+LVWiPW/08y9p66X8vqxUshH0S6qZtinWIHxx3
6d9tUy7j88t6hwsZvy+rbVm53oq37XRbhnYKDS3qLTw4rf/zl/gVLN8u3+9h
5eXp/NBu6gbHPcXv6aes4I2Xs+y6KO0zXvSX8OK2zGHf/Hd1c5dX5d9z3Oln
2e+bOl/BEO3rYpeX22fZTt+d7Yvydwt5akZP9rv/91l2G5abel1U5V1nFP+e
V1URhr5PRzJvdtkfyx1Qxao7mA01MWutid/lzehYvoOxbPJt0XTG8V1+X3S/
SUfwslw2daiRYNL+Vy299rudPnCi7z9timKw83LV+66zALv873XV6xuG/QDv
/S6nr7VnPCXNDt68L4iMX//w/JdfXX1Nv7+Yfjejo9bkbUiOmj7666+e/jp9
NBzKdrqD0ayL0KZf0YGt2wb+uS+a6aZt9wMP7Jsazkq91S7+7Ze//qX+/s3V
r756luEfz59PX0Ej92Xx8IxnGklal+RZ9ryu1iUeujLfwh+7PbAloGL4GA9f
eRBqFf712fDjSHnN6gGYxvT3eQD+1udzsITZfL/flkvagpABj4CtavPPuIMV
MKVn2dVXV0+nXz2VPvPmroDDjasQnj15snR9L7XrWVk/edhP4bsWvnly2G/h
+IQnAbYhPPnVN0+wxSdf/WL45b/UB+Av+XLzlwfct32+h0X/1fSbt0+fTp/O
9qu1rONtsdxUMPLtdF7l22Mow79uReeZtZ5p61m9Hmlmkt0/nV311+zpV//a
Nbt68tXTJ89h6vOByU/r9dQPb2rDm+LodOF+vIar4sRC/bitF/n2epu3eL7S
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
Hy9WiBNPaz6dTgk0/vzsfwGYLfE1xzEBAA==

-->

</rfc>

