How it works
You install one CloudFormation stack, provided by Corsa, in your AWS account. It gives you:- Your HYOK key. An RSA key in your AWS KMS wraps and unwraps the data key of each value. The private key never leaves KMS.
- Your sign-in. Your users sign in before they can decrypt, either with passkeys in a user directory in your account (Cognito, the default) or with your own identity provider. Only members of your decryptor group can decrypt.
- The Secure Viewer. The page your users’ browsers load inside Corsa to sign in and see decrypted fields. It’s served from your account.
- A decryption check. The only path to your key. It checks your user’s sign-in and a Corsa authorization before it unwraps anything.
- A signed link to Corsa. Your stack signs everything it reports to Corsa, such as its setup details and health, with its own signing key.
What happens when a user views a field
- The user opens a client in the Corsa app. The page embeds the Secure Viewer from your account.
- The user signs in with your sign-in (once per session).
- Corsa checks that the user may view this client, then issues a Corsa unwrap token: a short-lived (at most 5 minutes) signed token that names the user’s email, your stack, and the exact fields being displayed.
- The Secure Viewer sends the wrapped data key to the decryption check in your account, with both the user’s sign-in token and the Corsa token.
- Your stack checks that:
- the user’s sign-in is valid, and the user is in your decryptor group;
- the Corsa token is signed by Corsa, is unexpired, targets your stack and your workspace, and names the requested field;
- the email in both tokens matches.
- Only then does your stack use your KMS key to unwrap the data key. The browser decrypts the value and displays it inside the Secure Viewer frame. The plaintext isn’t sent back to Corsa.
Envelope encryption with resource binding
Each value is encrypted with its own random AES-256-GCM data key. The data key is wrapped with your RSA key (RSA-OAEP-SHA256) together with a hash of the value’s resource:Trust model
HYOK limits what Corsa can read. It doesn’t make Corsa unable to learn anything about your data. Be precise about these points with your security and legal teams:Next steps
Set up HYOK
Install the stack from the app with a launch link and invite your decryptors.
Verify the release
Review the source, check the signed release, and confirm the code running in your account.
Features lost with HYOK
What works differently on HYOK-encrypted fields.
Encrypt with the SDK
Encrypt on your side with a pinned public key.