Secrets
Single-value secrets in SikkerKey -- storing, replacing, rotating, and managing access.
A secret is a single encrypted value stored inside a project. API keys, passwords, connection strings, tokens -- anything that fits in one string.
Each secret has its own random AES-256 data key, which is wrapped by the project's master key. The secret ID is bound to the ciphertext as Additional Authenticated Data (AAD), preventing encrypted blobs from being swapped between secrets.
For secrets with multiple related values (like database credentials with host, username, and password), use a Structured Secret instead. For credentials that SikkerKey should push to an external database automatically, use a Managed Secret.
Secret IDs
Every secret gets a unique ID in the format sk_ followed by 10 random alphanumeric characters (e.g. sk_1b13qr1sb2). This ID is used in API calls, the SDK, the CLI, and machine access grants.
Creating a Secret
From the secrets page, click + New Secret and select Secret.
Enter a name and a value. Optionally add a note for context.
Reading a Secret
Secrets are read by authenticated machines via the SDK or CLI. The dashboard never displays decrypted values.
val apiKey = sk.getSecret("sk_stripe_key")
apiKey, err := sk.GetSecret("sk_stripe_key")
api_key = sk.get_secret("sk_stripe_key")
sikkerkey get sk_stripe_key
Replacing a Value
Click a secret to expand it, then click Replace value. Enter the new value and confirm.
Replacing a value:
- Encrypts with a new random data key
- Increments the version number
- Saves the previous version to version history
Machines receive the new value on their next read.
Rotating a Value
Click Rotate on a secret to generate a new random value server-side. You can configure the length and charset.
Available charsets: symbols (default), alphanumeric, numbers, uuid.
Every rotation creates a new version and is audit-logged as secret_rotate.
Automatic Rotation
When creating a secret, you can check Enable automatic rotation to have SikkerKey generate a new value on a schedule. When enabled:
- The value is auto-generated (you don't provide one)
- You configure the rotation interval (minimum 5 minutes), generated length, and charset
- The secret rotates automatically in the background
- Manual replace and rotate are disabled while rotation is active
From the secrets list, expanding a rotating secret shows the schedule editor. You can pause, resume, or change the interval at any time.
Notes
Each secret has an optional plaintext note. Notes are not encrypted. Use them for context about what the secret is for or when it was last rotated externally.
Editing a note does not create a new version.
Version History
Every replace or rotation preserves the previous encrypted value. Click Version history to see all versions with timestamps.
You can restore any previous version. Restoring creates a new version entry, so rollbacks are themselves versioned.
Version retention is based on your subscription plan. Older versions are pruned automatically.
Deleting a Secret
Click Delete on a secret. This moves it to trash:
- Machine access grants are removed immediately
- Rotation schedules are cancelled
- The secret remains recoverable from the trash for 30 days
- After 30 days, it is permanently deleted
Machine Access
A machine can only read a secret if all of the following are true:
- The machine is registered, approved, and enabled
- The vault owner's account is active
- The machine is added to the secret's project
- The machine has an explicit grant to that specific secret
- The request includes a valid Ed25519 signature
There is no wildcard access. Adding a machine to a project does not give it access to any secrets. Each secret must be granted individually from the project's Machines tab via the Configure button.
What the Dashboard Shows
The secrets list displays metadata only:
- Secret name and ID
- Secret type indicator
- Rotation indicator (if automatic rotation is enabled)
- Version number
- Number of machines with access
- Last read time (from audit log)
- Note
- Created and updated timestamps
The dashboard never displays decrypted secret values. Secrets are read exclusively by authenticated machines via the SDK or CLI.