How your data is encrypted at rest with AES-GCM
Your project data is encrypted at rest using AES-GCM, a standard authenticated-encryption algorithm. Encryption and decryption happen only on the server.
What's encrypted
Per-user and per-project data stored in HIIE's data store (Cloudflare D1) is encrypted before it is written. Stored items keep their ciphertext and initialization vector (IV) in separate columns, with an algorithm marker that is either AES-GCM or plaintext. Content is encrypted with a project- or folder-scoped key before insertion.
How the encryption works
Each field is encrypted with a fresh, random 12-byte IV. The bucket identifier is bound into the operation as AES-GCM additional authenticated data (AAD), which means decryption will fail if the key or the bucket doesn't match. This protects both confidentiality and integrity: tampered or mismatched ciphertext won't silently decrypt.
Where the keys come from
A 256-bit key is derived with PBKDF2 (100,000 iterations, SHA-256) from a server-only master key (the KEK). The KEK is read from a server-only environment variable, never exposed to the browser and never bundled into client code. If the KEK is missing, the encrypted path fails closed and throws rather than falling back to a public key.
What this is not
This is operator-decryptable envelope encryption: the server holds the master key and decrypts just in time to serve your request. It protects data at rest and keeps keys off the client, but it is not zero-knowledge or end-to-end encryption. For data in transit, HIIE uses TLS (HTTPS). See the related articles on key separation and what "operator-decryptable" means.