Nix, crates and tools for TEE handling
Find a file
Harald Hoyer 129afe25e6
Merge pull request #256 from matter-labs/renovate/rustls-0.x-lockfile
chore(deps): update rust crate rustls to v0.23.22
2025-02-10 13:56:28 +01:00
.github chore(deps): update trufflesecurity/trufflehog action to v3.88.5 2025-02-10 11:23:00 +00:00
assets feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
bin feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
checks feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
crates Address code review comments 2025-01-17 12:41:07 +01:00
examples feat: add Kubernetes pod spec for vault-unseal and update docs 2024-08-07 14:46:10 +02:00
lib feat(tdx): add nix build for TDX google VMs 2025-01-14 14:50:43 +01:00
packages feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
shells/teepot feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
systems/x86_64-linux/tdxtest feat(tdx): add nix build for TDX google VMs 2025-01-14 14:50:43 +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 chore(deps): update rust crate rustls to v0.23.22 2025-02-10 12:23:22 +00:00
Cargo.toml feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +01:00
deny.toml chore: fix deny.toml 2024-12-20 15:32:55 +01:00
flake.lock chore(flake): update nixsgx flake input 2024-12-20 14:29:04 +01:00
flake.nix feat: add Google Metadata support and TDX container test 2025-01-27 16:18:58 +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 feat(tdx): add nix build for TDX google VMs 2025-01-14 14:50:43 +01: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

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.
  • tdx_google: A base VM running on Google Cloud TDX. It receives a container URL via the instance metadata, measures the sha384 of the URL to RTMR3 and launches the container.
  • tdx-extend: A utility to extend an RTMR register with a hash value.
  • rtmr-calc: A utility to calculate RTMR1 and RTMR2 from a GPT disk, the linux kernel, the linux initrd and a UKI (unified kernel image).
  • sha384-extend: A utility to calculate RTMR registers after extending them with a digest.

Vault

Part of 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.

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

TDX VM testing

nixos-rebuild  -L --flake .#tdxtest build-vm && ./result/bin/run-tdxtest-vm