Data encryption
Roost encrypts data the envelope way: your application encrypts data with a data key, and Roost wraps that data key with a key-encryption key that never leaves the box. Large data stays fast on your servers; the key that matters stays in hardware.
Encrypt and decrypt
// .NET
var box = await roost.Envelope.EncryptAsync("data-key-eu", plaintext, context: new { orgId, recordId });
var data = await roost.Envelope.DecryptAsync(box);
# Python
box = roost.envelope.encrypt("data-key-eu", plaintext, context={"orgId": org_id})
data = roost.envelope.decrypt(box)One call does the whole flow: a fresh data key, authenticated encryption, a wrap request to Roost, and one envelope back. Decrypt reverses it. The unwrap passes the key's policy, limits, quorum and audit.
Envelope format
| Field | Content |
|---|---|
| version | Envelope format version |
| alg | AES-256-GCM or ARIA-256-GCM |
| key | Key name and version that wrapped the data key |
| wrapped | The wrapped data key (AES-KWP) |
| nonce | Generated by the appliance, never by the application |
| context | Bound into the authentication tag; an envelope cannot be replayed for another record or organization |
| ciphertext · tag | The data and its authentication tag |
Because the key version is in the envelope, rotation never breaks old data: an envelope wrapped with v1 still opens after v2 becomes active.
Modes
Only authenticated modes exist: GCM for data, KWP for wrapping. ECB and CBC are refused with a reason. Nonces are generated by the appliance, so a repeated nonce cannot happen in application code.
Small secrets inside the box
Short values, such as card numbers or identifiers, can be encrypted and decrypted inside Roost directly, without a data key leaving the box, under a key policy that forbids unwrap.
Crypto-shredding
One key-encryption key per organization or partition means deleting that key makes all its data unreadable at once, backups included. The deletion is approved, recorded and reported.
Keys
| Name | Purpose | Version | Quorum | Last used |
|---|---|---|---|---|
| release-signing | code-signing | v3 active | 2 of 3 | 2 min ago |
StatusArmed PolicyApproval required Born inROOST-26-0001 ExportNever | ||||
| data-key-eu | data-key | v2 active · v1 decrypt-only | 2 of 3 | 10 s ago |
| tls-www | tls | v1 active | 2 of 3 | 1 s ago |
| ca-intermediate | ca | v1 active | 2 of 3 | 3 days ago |