No master passwords. No key management. Secrets encrypted to your hardware fingerprint.
Liberty generates a unique fingerprint from your system's hardware characteristics—CPU, machine ID, disk serial, and platform details. This fingerprint derives an AES-256 encryption key using PBKDF2. Your secrets are encrypted with AES-GCM, providing both confidentiality and tamper detection.
The result: secrets that can only be decrypted on the machine where they were created. Copy the vault to another machine and it's useless. No master password to remember. No key server to manage. It just works.
Secrets are bound to your hardware via a software PUF (Physically Unclonable Function). Stolen files are useless on any other machine.
Industry-standard authenticated encryption. Provides both confidentiality and integrity—any tampering is immediately detected.
No master passwords, no key files, no config files. Install, init, add secrets. Liberty derives everything from your hardware.
Run any command with secrets injected as environment variables.
Your application code reads process.env or os.environ as usual.
Every secret access and modification is logged. Know exactly when a secret was read, updated, or injected into a process.
The encrypted vault is safe to commit to git. It's hardware-bound and encrypted—useless to anyone who doesn't have your machine.
That's it. The liberty command
is now available globally.
Prefer to install from source? Clone the GitLab repo.
Your application reads secrets from environment variables as usual—
process.env.API_KEY in Node.js,
os.environ['API_KEY'] in Python.
No code changes needed.
| Command | Description |
|---|---|
liberty init |
Initialize an encrypted vault |
liberty add KEY value |
Add or update a secret |
liberty list |
List all secret keys (not values) |
liberty show KEY |
Display a secret's value |
liberty exec -- cmd |
Run a command with secrets as environment variables |
liberty audit |
View the audit log of all secret access |
| Feature | .env Files | Liberty |
|---|---|---|
| Encryption | Plaintext | AES-256-GCM |
| Git Safety | Easy to leak | Safe to commit |
| Hardware Binding | Works anywhere | Bound to hardware |
| Master Password | N/A | Not needed |
| Audit Trail | None | Every access logged |
| Portability | Easy to share | Not portable (by design) |
Store your LockStock keys in Liberty once. From that point on, every gateway operation reads from the vault automatically. Agent IDs are written back to Liberty when you provision, so everything stays encrypted and hardware-bound.
API keys, account keys, agent IDs—all encrypted in Liberty's vault. Nothing in plaintext. Nothing in shell history. Nothing to leak.
lockstock-gateway start
reads all config from Liberty, picks up every agent you've provisioned,
and launches the Docker container. No flags. No env vars to remember.
Each agent gets its own Liberty key (LOCKSTOCK_AGENT_<NAME>).
Provision as many as you need. The gateway routes them all.
Agent IDs, API keys, and your Account Key are all encrypted to your hardware. Copy the vault to another machine and you get nothing—no agent identity, no stamping authority, no transcript decryption. The agent is effectively hardware-bound, not because LockStock enforces it, but because the credentials needed to operate it are.
Liberty and LockStock each keep an audit trail, and together they tell the complete story:
Who accessed which keys, when. Local, hardware-bound, tamper-evident. You can see every time the gateway read an agent ID or API key.
What the agent did with those keys—every action, cryptographically chained. Tamper-evident, server-side, exportable for compliance review.
When Liberty and LockStock work together, your agents get three independent layers of clone protection that no single product provides alone.
| Layer | What It Does | When It Acts |
|---|---|---|
| Prevention | Credentials are encrypted to your hardware. Copy the vault to another machine and decryption fails. | Before any credential is exposed |
| Enforcement | The server verifies the machine fingerprint on every request. Wrong machine, hard rejection. | At request time, before the action proceeds |
| Detection | The cryptographic chain catches forks. Two callers can't both extend the same chain. | At chain level, if all else fails |
Stop committing plaintext secrets. Start encrypting them to your hardware.