Nix, crates and tools for TEE handling
Find a file
Harald Hoyer 5d32396966
feat: add tdx-extend, sha384-extend and rtmr-calc
This enables pre-calculating the TDX rtmr[1,2,3] values for an attested boot process.

Signed-off-by: Harald Hoyer <harald@matterlabs.dev>
2024-12-20 13:27:55 +01:00
.github chore: update lint workflow actions 2024-11-27 08:50:42 +01:00
assets feat: attestation test on azure and default dcap 2024-03-07 16:05:27 +01:00
bin feat: add tdx-extend, sha384-extend and rtmr-calc 2024-12-20 13:27:55 +01:00
crates feat: add tdx-extend, sha384-extend and rtmr-calc 2024-12-20 13:27:55 +01:00
examples feat: add Kubernetes pod spec for vault-unseal and update docs 2024-08-07 14:46:10 +02:00
packages feat: add tdx-extend, sha384-extend and rtmr-calc 2024-12-20 13:27:55 +01:00
shells/teepot feat(shell): enhance teepot shell with Rust tools support 2024-12-20 09:31:01 +01:00
.dockerignore feat: initial commit 2024-02-09 10:10:53 +01:00
.gitignore feat: initial commit 2024-02-09 10:10:53 +01:00
Cargo.lock feat: add tdx-extend, sha384-extend and rtmr-calc 2024-12-20 13:27:55 +01:00
Cargo.toml feat: add tdx-extend, sha384-extend and rtmr-calc 2024-12-20 13:27:55 +01:00
deny.toml chore: cargo update 2024-12-20 12:20:39 +01:00
flake.lock chore(flake.nix): update crane to ref 8ff9c45 2024-12-20 09:30:59 +01:00
flake.nix chore(flake.nix): update crane to ref 8ff9c45 2024-12-20 09:30:59 +01:00
LICENSE-APACHE feat: initial commit 2024-02-09 10:10:53 +01:00
LICENSE-MIT feat: initial commit 2024-02-09 10:10:53 +01:00
README.md docs: adapt README.md to reality 2024-07-02 13:14:36 +02:00
rust-toolchain.toml chore: update Rust toolchain to version 1.83 2024-12-20 09:29:43 +01:00
taplo.toml chore: prepare release tags 2024-09-16 16:14:26 +02:00
teepot-crate.nix feat(teepot-crate): add libtdx_attest to dependencies 2024-12-20 09:31:01 +01:00

teepot

Key Value store in a TEE with Remote Attestation for Authentication

Introduction

This project is a key-value store that runs in a Trusted Execution Environment (TEE) and uses Remote Attestation for Authentication. The key-value store is implemented using Hashicorp Vault running in an Intel SGX enclave via the Gramine runtime.

Parts of this project

  • teepot: The main rust crate that abstracts TEEs and key-value stores.
  • tee-vault-unseal: An enclave that uses the Vault API to unseal a vault as a proxy.
  • vault-unseal: A client utility, that talks to tee-vault-unseal to unseal a vault.
  • tee-vault-admin: An enclave that uses the Vault API to administer a vault as a proxy.
  • vault-admin: A client utility, that talks to tee-vault-admin to administer a vault.
  • teepot-read : A pre-exec utility that reads from the key-value store and passes the key-value pairs as environment variables to the enclave.
  • teepot-write : A pre-exec utility that reads key-values from the environment variables and writes them to the key-value store.
  • verify-attestation: A client utility that verifies the attestation of an enclave.
  • tee-key-preexec: A pre-exec utility that generates a p256 secret key and passes it as an environment variable to the enclave along with the attestation quote containing the hash of the public key.

Development

Prerequisites

Install nix.

In ~/.config/nix/nix.conf

experimental-features = nix-command flakes
sandbox = true

or on nixos in /etc/nixos/configuration.nix add the following lines:

{
  nix = {
    extraOptions = ''
      experimental-features = nix-command flakes
      sandbox = true
    '';
  };
}

Develop

$ nix develop

optionally create .envrc for direnv to automatically load the environment when entering the directory:

$ cat <<EOF > .envrc
use flake .#teepot
EOF
$ direnv allow

Format for commit

$ nix run .#fmt

Build as the CI would

$ nix run github:nixos/nixpkgs/nixos-23.11#nixci

Build and test individual container

See the packages directory for the available packages and containers.

$ nix build -L .#container-self-attestation-test-sgx-azure
[...]
teepot-self-attestation-test-sgx-azure-manifest-app-customisation-layer> Measurement:
teepot-self-attestation-test-sgx-azure-manifest-app-customisation-layer>     eaaabf210797606bcfde818a52e4a434fbf4f2e620d7edcc7025e3e1bbaa95c4
[...]
$ export IMAGE_TAG=$(docker load < result | grep -Po 'Loaded image.*: \K.*')
$ docker run -v $(pwd):/mnt -i --init --rm $IMAGE_TAG "cp app.sig /mnt"
$ nix shell github:matter-labs/nixsgx#gramine -c gramine-sgx-sigstruct-view app.sig
Attributes:
    mr_signer: c5591a72b8b86e0d8814d6e8750e3efe66aea2d102b8ba2405365559b858697d
    mr_enclave: eaaabf210797606bcfde818a52e4a434fbf4f2e620d7edcc7025e3e1bbaa95c4
    isv_prod_id: 0
    isv_svn: 0
    debug_enclave: False