<?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-16" 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="February" day="28"/>

    <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 a software or data asset needs to be protected
from unauthorized entities that may include the owner (or pwner) or possesser of 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, for TEEs that can install and enumerate TAs in a
TEE-secured location and 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>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="I-D.ietf-suit-architecture"/>,
“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 or it may be a raw public key.</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="I-D.ietf-suit-architecture"/>,
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 that relies upon such devices.
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 of such
Personalization Data to preserve the confidentiality of potentially
sensitive data contained within it, and must support integrity protection
of the 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 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="certificate-expiry-and-renewal" title="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='8' month='February' 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-15'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-architecture-15.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-architecture'>
   <front>
      <title>A Firmware Update Architecture for Internet of Things</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='David Brown'>
	 <organization>Linaro</organization>
      </author>
      <author fullname='Milosch Meriac'>
	 <organization>Consultant</organization>
      </author>
      <date day='27' month='January' 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.

 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='Internet-Draft' value='draft-ietf-suit-architecture-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-architecture-16.txt' type='TXT'/>
</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='25' month='October' year='2021'/>
      <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-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-16.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='25' month='October' year='2021'/>
      <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-07'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-protocol-07.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:
H4sIAECbHWIAA+2963Mb17Un+p1V/B+67KprcgxAFmP7nMi5uUHkx9Eksjgi
PcmdDyfVABpER0A30rtBCpE0f/us9167H6CUZKbuh8tyySTQvZ9rr72evzWd
Ts/P2rLdFs+y2+YQ2mKV/fC2WB7asq6yH6r7sqmrXVG12XVT35cBPi2ru+zi
9ocfri+zebPclG2xbA9NcX6WLxZNcQ/twHedr1b1ssp30MeqydfttCza9bQt
iv00d49Nn357frbM2+Kubo7PsrJa1+dn52flvnmWtTi2q6+++vVXV9BRU+TP
shsYZVO2x/Ozh7p5c9fUhz33fX72pjjCZ6tn2YuqLZqqaKffY7/YWmjzavWX
fFtXMJpjEc7P9uWz87Msa9bLYhXa41Y/z7K2Xvrfy2oFC2GfhLppm2Id4gfH
Xfp325TL+Pyy3uFCxu/LaltWrrfibTvdlqGdQkOLegsPTuv/8iV+Bcu3y/d7
WHl5Oj+0m7rBcU/xe/opK3jj5Sy7Lkr7jBf9Jby4LXPYN/9d3dzlVfn3HHf6
Wfb7ps5XMET7utjl5fZZttN3Z/ui/N1CnprRk/3u/2OW3Yblpl4XVXnXGcV/
5FVVhKHv05HMm132x3IHVLHqDmZDTcxaa+J3eTM6lu9hLJt8WzSdcXyf3xfd
b9IRvCyXTR1qJJi0/1VLr/1upw+c6PtPm6IY7Lxc9b7rLMAu/3td9fqGYT/A
e7/L6WvtGU9Js4M37wsi49c/Pv/2q6uv6fcX0+9ndNSavA3JUUu/Doeyfezr
HQxwXYQ2/YrOcN028M990Uw3bbsfeGDf1HB86q0O8N++/fW3+vs3V//+1bMM
/3j+fPoKGrkvi4dnPPlI5bpKz7LndbUu8RyW+Rb+2O2BUwFhw8d4HsuDELCw
tM+GH0dibFYPwEemv88DsLw+64NVzeb7/bZc0q6EDNgG7F6bf8YdrIBPPcuu
vrp6Ov3qqfSZN3cFnHdchfDsyZOl63upXc/K+snDfgrftfDNk8N+CycqPAmw
9OHJv3/zBFt88tWvhl/+S30AlpMvN395wL3a53tY9H+ffvP26dPp09l+tZZ1
vC2WmwpGvp3Oq3x7DGX4163oPLPWM209q9cjzUyy+6ezq/6aPf3qX7tmV0++
evrkOUx9PjD5ab2e+uFNbXhTHJ0u3E/XcHucWKiftvUi315v8xaPXLoq6XfZ
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
SkYlQo4XK4SGpzWfTqeEE39+9r8AgRTMRNIwAQA=

-->

</rfc>

