Nix, crates and tools for TEE handling
Find a file
Harald Hoyer e476792bfe
Merge pull request #160 from matter-labs/renovate/trufflesecurity-trufflehog-3.x
chore(deps): update trufflesecurity/trufflehog action to v3.81.6
2024-08-07 15:54:08 +02:00
.github chore(deps): update trufflesecurity/trufflehog action to v3.81.6 2024-08-07 13:47:32 +00:00
assets feat: attestation test on azure and default dcap 2024-03-07 16:05:27 +01:00
bin chore: cargo update 2024-08-07 15:26:20 +02:00
crates chore: cargo update 2024-08-07 15:26:20 +02:00
examples feat: add Kubernetes pod spec for vault-unseal and update docs 2024-08-07 14:46:10 +02:00
packages fix(teepot-vault-unseal-sgx): pass CA_CERT_FILE 2024-08-07 14:34:25 +02:00
shells/teepot feat: add Kubernetes pod spec for vault-unseal and update docs 2024-08-07 14:46:10 +02: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: cargo update 2024-08-07 15:26:20 +02:00
Cargo.toml chore: cargo update 2024-08-07 15:26:20 +02:00
deny.toml Whitelist CC0-1.0 license 2024-07-01 15:23:15 +02:00
flake.lock chore: update nixsgx-flake 2024-07-02 12:46:49 +02:00
flake.nix chore: replace cache in flake.nix nixConfig 2024-07-02 13:14:37 +02: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(deps): update to rust version 1.78 2024-06-10 13:09:05 +02:00
taplo.toml chore(taplo): ignore some directories 2024-02-28 09:53:05 +01:00
teepot-crate.nix feat: remove mio workaround with gramine 1.7 2024-06-18 10:38:23 +02: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