This is the first post in a series of articles aimed at presenting tpm-ca-certificates!

It’s a project I’ve been working on for several months now, and I want to highlight it because I find it particularly cool in many ways that I’ll explore in this series.

Overview

The project’s goal can be summarized in one sentence: democratize the validation of TPM (Trusted Platform Module) authenticity.

By authenticity, we mean the formal verification (via a cryptographic signature mechanism) that a TPM is genuine.

How?

By providing a bundle that centralizes trust authority certificates supplied by TPM manufacturers.

But before going further, it’s important to understand the mechanism by which we can validate a TPM.

Understanding the Root of Trust of a TPM

If we simplify to the extreme, a TPM is a device complying with a specification defined by a consortium called TCG (Trusted Computing Group). For a manufacturer to mass-produce a TPM, they must follow this specification and obtain certification (see certified manufacturers list).

All this is well and good, but how can we be sure a TPM is authentic? To do this, imagine that at the factory, the manufacturer issues one (or more) certificates attesting to the TPM’s authenticity. Then, these certificates are typically stored in the TPM1 as shown in the diagram below:

Note: image generated by ChatGPT

This certificate is called the Endorsement Key (EK) Certificate and it’s unique for each TPM; it’s essentially its identity card.

Next, validation relies on the principle of the chain of trust of a PKI (Public Key Infrastructure):

Note: image generated by ChatGPT

What pain point does tpm-ca-certificates address?

On paper, things seem simple… but in practice, this step is arduous because TCG (or another organization) doesn’t provide a centralized bundle with all the trust roots. It’s each user’s or organization’s responsibility to fetch these elements from the manufacturer’s website (assuming the information is available). With information being sparse and difficult to obtain, most tools that interact with a TPM don’t even verify its authenticity, which is quite paradoxical since a TPM is supposed to guarantee security. By comparison, it’s like trusting a TLS certificate presented to us without EVER verifying its chain of trust…

tpm-ca-certificates aims to solve this problem by providing a centralized open source bundle and SDKs 2 to facilitate the integration of TPM validation in applications.

Is this project the first initiative of its kind?

Not really, Windows also maintains a bundle available here. Where tpm-ca-certificates distinguishes itself is through its open source approach 3, certain concepts (which will be detailed in upcoming posts), and the provision of SDKs (Software Development Kits) to ease integration in existing applications.

Conclusion

In this post, we explained what motivated me to create tpm-ca-certificates, in the next one, we’ll see how it works.

Why this name?tpm-ca-certificates is a tribute to the ca-certificates project. The latter is used in many Linux distro for building the TLS truststore

  1. if not stored in the TPM, the manufacturer MUST make it available through other means (eg. URL). ↩︎

  2. for now only the golang SDK is available in beta version. A python and rust SDK are under consideration. ↩︎

  3. you can contribute to the project or follow its evolution. ↩︎