Docs / Security / Encryption model

Encryption model

What happens to a secret between your disk and our database.

  • A random 256-bit key is generated for each secret.
  • The value is padded to a 32-byte bucket and sealed with AES-256-GCM using a random 96-bit nonce.
  • Project, environment, service, key name and revision are bound to the ciphertext as authenticated data.
  • The secret's key is wrapped for each reader: ephemeral X25519, HKDF-SHA-256, AES-256-GCM.
  • The server stores the ciphertext, the nonce, the auth tag and one wrapped key per reader.

Local change detection

The CLI keeps a keyed hash of each value you pushed or pulled in ~/.storeenv/projects. The hash key never leaves your machine, so status works without decrypting anything and without sending guessable hashes to the server.

Stop pasting secrets into chat.

$ npm i -g storeenv Get started