<?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.6.6 (Ruby 2.6.3) -->


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

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="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-17" category="info" tocInclude="true" sortRefs="true" symRefs="true">
  <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="April" day="19"/>

    <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"><name>Introduction</name>
<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.<br />
It may also be the case in some constrained devices that there is no REE (only a TEE) and there
may be no local "user" per se, only a remote TEE administrator.
For further discussion of such confidential computing use cases and threat model, see
<xref target="CC-Overview"/> and <xref target="CC-Technical-Analysis"/>.</t>

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>App Store: An online location from which Untrusted Applications can be downloaded.</t>
  <t>Device: A physical piece of hardware that hosts one or more TEEs,
often along with
an REE.</t>
  <t>Device Administrator:  An entity that is responsible for administration
of a device, which could be the Device Owner. A Device Administrator
has privileges on the device to install and remove Untrusted Applications and TAs,
approve or reject Trust Anchors, and approve or reject TA developers,
among possibly other privileges on the device. A Device Administrator can
manage the list of allowed TAMs by modifying the list of Trust
Anchors on the device. Although a Device Administrator may have
privileges and device-specific controls to locally administer a
device, the Device Administrator may choose to remotely
administer a device through a TAM.</t>
  <t>Device Owner: A device is always owned by someone. In some cases, it is common for
the (primary) device user to also own the device, making the device
user/owner also the Device Administrator. In enterprise environments
it is more common for the enterprise to own the device, and any device
user has no or limited administration rights. In this case, the
enterprise appoints a Device Administrator that is not the device
owner.</t>
  <t>Device User: A human being that uses a device. Many devices have
a single device user. Some devices have a primary device user with
other human beings as secondary device users (e.g., a parent allowing
children to use their tablet or laptop). Other devices are not used
by a human being and hence have no device user. Relates to Device Owner
and Device Administrator.</t>
  <t>Personalization Data: A set of configuration data that is specific to
   the device or user. The Personalization Data may depend on the type of
   TEE, a particular TEE instance, the TA, and even the user of the device;
   an example of Personalization Data might be a secret symmetric key used
   by a TA to communicate with some service.</t>
  <t>Raw Public Key: A raw public key consists of only the algorithm identifier
(type) of the key and the cryptographic public key material, such as the
SubjectPublicKeyInfo structure of a PKIX certificate <xref target="RFC5280"/>. Other
serialization formats that do not rely on ASN.1 may also be used.</t>
  <t>Rich Execution Environment (REE): An environment that is provided
and governed by a typical OS (e.g., Linux, Windows, Android, iOS),
potentially in conjunction with other supporting operating systems
and hypervisors; it is outside of the TEE(s) managed by the TEEP protocol. This environment and
applications running on it are considered untrusted (or more precisely,
less trusted than a TEE).</t>
  <t>Trust Anchor: As defined in <xref target="RFC6024"/> and <xref target="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, a raw public key or other structure,
as appropriate. It can be a non-root certificate when it is a certificate.</t>
  <t>Trust Anchor Store: As defined in <xref target="RFC6024"/>, "A trust anchor
store is a set of one or more trust anchors stored in a device...
A device may have more than one trust anchor store, each of which
may be used by one or more applications."  As noted in <xref target="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"><name>Use Cases</name>

<section anchor="payment"><name>Payment</name>

<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"><name>Authentication</name>

<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"><name>Internet of Things</name>

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

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

<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"><name>Architecture</name>

<section anchor="system-components"><name>System Components</name>

<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"><name>Multiple TEEs in a Device</name>

<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"><name>Multiple TAMs and Relationship to TAs</name>

<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"><name>Untrusted Apps, Trusted Apps, and Personalization Data</name>

<t>In TEEP, there is an explicit relationship and dependence between an Untrusted Application
in an REE and one or more TAs in a TEE, as shown in <xref target="notionalarch2"/>.
For most purposes, an Untrusted Application that uses one or more TAs in a TEE
appears no different from any other Untrusted Application in the REE. However, the way
the Untrusted Application and its corresponding TAs are packaged, delivered, and installed on
the device can vary. The variations depend on whether the Untrusted Application and TA are bundled
together or are provided separately, and this has implications to the management of
the TAs in a TEE. In addition to the Untrusted Application and TA(s), the TA(s) and/or TEE may also require additional data to personalize the TA to the device or a user.
Implementations must support encryption to preserve the confidentiality and integrity of such Personalized Data,
which may potentially contain sensitive 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"><name>Example: Application Delivery Mechanisms in Intel SGX</name>

<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"><name>Example: Application Delivery Mechanisms in Arm TrustZone</name>

<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"><name>Entity Relations</name>

<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"><name>Keys and Certificate Types</name>

<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"><name>Trust Anchors in a TEEP Agent</name>

<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"><name>Trust Anchors in a TEE</name>

<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"><name>Trust Anchors in a TAM</name>

<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"><name>Scalability</name>

<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"><name>Message Security</name>

<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"><name>TEEP Broker</name>

<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"><name>Role of the TEEP Broker</name>

<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"><name>TEEP Broker Implementation Consideration</name>

<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"><name>TEEP Broker APIs</name>

<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"><name>TEEP Broker Distribution</name>

<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"><name>Attestation</name>
<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"><name>Algorithm and Attestation Agility</name>

<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"><name>Security Considerations</name>

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

<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"><name>Data Protection</name>

<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"><name>Compromised REE</name>

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

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

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

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

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

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

<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"><name>Compromised TAM</name>

<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"><name>Malicious TA Removal</name>

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

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

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

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

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

<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"><name>Keeping Secrets from the TAM</name>

<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"><name>REE Privacy</name>

<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"><name>IANA Considerations</name>

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

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

<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"><name>Acknowledgements</name>

<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='7' month='March' year='2022'/>
      <abstract>
	 <t>   This document specifies a protocol that installs, updates, and
   deletes Trusted Components in a device with a Trusted Execution
   Environment (TEE).  This specification defines an interoperable
   protocol for managing the lifecycle of Trusted Components.

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



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



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


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




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




    </references>



  </back>

<!-- ##markdown-source:
H4sIAOr4XmIAA+29W5Mbx7Um+p6/okKKGHWPAFCkJXub8vExTF02x6bYQ7aO
feZhOwpAoVEmUAVXFboJkzy//ax7rqxLN6ntmZiH6VBQ3UBVXleuXNdvzefz
0JXdvniaXTentis22fdvi/WpK+sq+766LZu6OhRVl1019W3ZwqdldZNdXH//
/dVltmzWu7Ir1t2pKUK+WjXFLTQDX6XfbOp1lR+gh02Tb7t5WXTbeVcUx3nu
npo//k1Y511xUzfnp1lZbesQymPzNOtwWE+++uq3Xz0JeVPkT7PXML6m7M7h
rm7e3DT16ci9hjfFGT7aPM2eV13RVEU3/w57DKHt8mrzt3xfVzCKc9GGY/k0
ZFmzXRebtjvv5dMs6+q1+7WsNjB1/aCtm64ptq39fT4kf3ZNubaH1/UBl82+
Lat9WcVuirfdfF+23RwaWdV7eGxe/9cv4RtYq0N+PMIi87P5qdvVDQx2Dl/S
T1nB0y8W2VVR6ke8ui/gpX2Zw/a4r+rmJq/Kf+a4n0+zPzZ1voGh6bfFIS/3
T7ODvrk4FuUfVvLQAh/sd/zvi+y6Xe/qbVGVN2n//55XVdGOfJ2OYdkcsj+X
B9j3TW8YO2pg0VkDf8ib8VF8B6PY5fuiSUfwXX5b9L5I+35Rrpu6rYEk0p43
Hb30h4N+P9XrX3ZFMdZtuel/1Zv0If9nXfV7heHewVt/yOlb7hMpvznAa7cF
kuirH579+qsnX+Ovz+ffLejsNHnXJmcn+bY9ld0D3x5gZNui7ZJv6ETWXQP/
3BbNfNd1x+H3x6aGc1HvZWi/+fVvfy2/fvPk3756msHvz57NX0IDt2Vx95Qm
bCSs6/I0e1ZX2xLPVpnv4Y/DEfgN0C18jIesPDGBCl/6bPxpJLhmcwcsYf7H
vAW+NeRfsJLZ8njcl2vahjYDLgC71eWfUfsbYDdPsydfPXk8/+ox95g3NwWc
YZx8+/TRo7Xrea0dL8r60d1xDt918M2j03EP56V91MJ6t4/+7ZtH2OCjr341
/vLf6hMwkXy9+9sdbtAxP8Ja/9v8m7ePH88fL46bLa/gdbHeVTDs/XxZ5ftz
W7b/orVcZtZ0pk1n9XailVl2+3jxZLBaj7/6l67Wk0dfPX70DGa9HJn3vN7O
/eDmNrg5jk2W7McruAAml+jHfb3K91f7vMOzlaxH+lX2XXFbrgteo3pf35zp
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
A3bAVHcKLAEA

-->

</rfc>

