Hierarchical Key Trees
KEK-wrapping hierarchy with namespace-scoped rules and cascade operations.
Open source · AGPL-3.0-or-later · Sovereign Key Management Service
KeyRack is an open-source key management coordination layer. It tracks key hierarchies, drives rotation, and delegates all cryptographic material to HSM backends. When backed by an HSM or Vault provider, raw key material never leaves the backend. The software provider holds key bytes in process memory (dev/test only).
Put the open-source keyrack-aws-proxy in front of AWS KMS. Your
existing AWS SDK clients keep working unchanged — KeyRack records key metadata,
builds the dependency graph, and gives you a verifiable audit trail. Crypto still
runs on AWS; you gain visibility with zero code changes.
# Point any AWS SDK at the FOSS proxy — no code changes
AWS_ENDPOINT_URL=http://keyrack-aws-proxy:8080 keyrack-aws-proxy is AGPL and ships in the core repo. When you're
ready to move custody off AWS entirely, the commercial AWS KMS shim routes the same
SDK calls to KeyRack-managed keys. See commercial options →
Architecture
KeyRack coordinates between clients, HSM backends, policy engines, and storage — delegating all crypto to the configured provider.
Clients KeyRack Service HSM Backends AWS SDK ─────┐ OpenStack ─────┤ gRPC ─────┼────▶ ┌──────────────────┐ ────▶ PKCS#11 REST ─────┤ │ │ ────▶ KMIP WASM ─────┘ │ keyrack-service │ │ │ └────────┬─────────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ External PDP Storage Audit Cedar / OPA PostgreSQL NATS / File SQLite Stdout
gRPC, REST, and WASM are open-source client surfaces. AWS SDK and OpenStack
clients connect through the FOSS keyrack-aws-proxy (AWS pass-through)
or the commercial AWS KMS / Barbican shims.
Key Features
Everything you need to run a production key management service.
KEK-wrapping hierarchy with namespace-scoped rules and cascade operations.
Delegate authorization to Cedar, OPA, or any policy decision point.
With HSM/Vault providers, crypto operations run inside the backend. The software provider holds key bytes in process memory (dev/test only).
Structured audit events via NATS, files, or stdout. Full operation traceability.
Route keys across software, PKCS#11, Vault Transit, and KMIP backends with tag-driven rules and per-version binding.
Tenants keep their own HSM. Disconnect it and crypto operations fail immediately. Cross-node staleness in the commercial HA tier is bounded by a configurable TTL.
KEK-wrapping hierarchy with namespace-scoped rules. Disabling any key in the chain cascades downward.
Re-encrypt data across providers without big-bang migration. Custody-preserving same-provider re-wrap is in progress; today plaintext transits the coordinator during re-encryption.
Route keys across BYOK and HYOK backends with tag-driven rules and per-version provider binding.
External PDP on every operation. BLAKE3 hash-chained audit events (Ed25519 signing opt-in).
Algorithm abstraction and rotation framework. PQC algorithms are not shipped yet — see roadmap.
Disconnect a tenant HSM and crypto operations fail immediately. The FOSS cache holds lifecycle metadata, not key material. Cross-node staleness in the commercial HA tier is bounded by a configurable TTL.
keyrack-oss (AGPL-3.0-or-later): key lifecycle, gRPC + REST APIs, pluggable providers, Cedar authorization, NATS eventing. Proto definitions and client SDK are Apache-2.0.
keyrack-commercial (proprietary) adds enterprise features and AGPL-free embedding on top of the same core — without gating any core KMS functionality. See what's included →
Quickstart
Clone the repo, start the stack, create a key, encrypt and decrypt data.
# Clone and start the stack git clone https://github.com/KeyRack-io/keyrack.git cd keyrack docker compose up -d keyrack-service # Create a key and capture its ID KEY_ID=$(curl -s http://localhost:8080/v1/keys -X POST \ -H 'Content-Type: application/json' \ -d '{"key_spec": "AES_256", "description": "my first key"}' | jq -r '.lid') # Encrypt data (plaintext is base64-encoded) curl -s http://localhost:8080/v1/keys/$KEY_ID/actions-encrypt -X POST \ -H 'Content-Type: application/json' \ -d '{"plaintext": "aGVsbG8ga2V5cmFjaw=="}' | jq . # Decrypt data curl -s http://localhost:8080/v1/keys/$KEY_ID/actions-decrypt -X POST \ -H 'Content-Type: application/json' \ -d '{"ciphertext_blob": "...from above..."}' | jq .
Or run the full end-to-end demo: ./examples/quickstart.sh
Eight FOSS Docker Compose demos plus a Kubernetes sidecar demo. AWS shim demos ship with commercial extensions.
View demos →NFR numbers from a pinned reference platform — methodology published for reproducibility. Results pending harness completion.
Benchmarks →
Every operation emits an audit event with BLAKE3 hash-chain linking (Ed25519
signing is opt-in). Interior tampering is detectable with
keyrack audit verify; tail-truncation detection requires an
external anchor.
Resources
Get started, contribute, read the docs, or report a security issue.