Security model
Short enough to actually read, which is the point.
- Crypto. AES-256-GCM for local secret files and password-protected export bundles. 12-byte random nonce per write; authenticated ciphertext rejects tampering.
- Master key. 32 bytes, base64-encoded, at ~/.foostash/master.key (mode 0600) or via FOOSTASH_MASTER_KEY. Losing it means losing local data — no recovery path.
- Wire auth. Every request is signed with your SSH private key and verified against the registered public key for your fingerprint. Replay protection via a timestamp header (±5 min window).
- Server. Holds org/user/project/env/invite/audit metadata and SSH public keys. Does not hold secret values or private keys.
- Revocation. admin users revoke flips revoked_at on the user row; subsequent SSH-signed requests fail auth.
What the server can and cannot see
| Data | On your machine | On the server |
|---|---|---|
| Secret values | plaintext + ciphertext | ciphertext only |
| Master key | yes (0600) | never |
| SSH private key | yes | never |
| SSH public key | yes | yes |
| Key names, versions, timestamps | yes | yes |
| Org / user / audit metadata | no | yes |