cortex-encryption
At-rest encryption for sensitive data in cortex.
Features
- AES-256-GCM - Authenticated encryption (default)
- ChaCha20-Poly1305 - Alternative cipher (optional)
- Argon2id - Password-based key derivation
- Key Rotation - Versioned keys with envelope encryption
- Secure Memory - Automatic zeroing of sensitive data
Quick Start
use ;
// Generate a random 256-bit key
let key = generate;
// Create an encryptor
let encryptor = new;
// Encrypt structured data
let secret = json!;
let ciphertext = encryptor.encrypt_data?;
// Decrypt
let decrypted: Value = encryptor.decrypt_data?;
Key Derivation
For password-based encryption:
use ;
let kdf = new;
let salt = kdf.generate_salt;
let key = kdf.derive_encryption_key?;
let encryptor = new;
Key Rotation
use ;
let key1 = generate;
let mut encryptor = new;
// Encrypt with v1
let ciphertext = encryptor.encrypt?;
// Rotate to v2
let key2 = generate;
encryptor.rotate_key;
// Old ciphertext still decrypts (key v1 retained)
let plaintext = encryptor.decrypt?;
// Re-encrypt with new key for migration
let new_ciphertext = encryptor.re_encrypt?;
Store Wrappers
Transparent encryption for session and checkpoint stores:
use ;
use Arc;
let key = generate;
let encryptor = new;
// Wrap existing stores
let encrypted_sessions = new;
let encrypted_checkpoints = new;
Ciphertext Format
Envelope Format
[envelope_version: 1 byte][key_version: 4 bytes][cipher_data]
AES-GCM Cipher Data
[nonce: 12 bytes][ciphertext + tag]
Security Considerations
- Key Storage: Store master keys securely (environment variables, HSM, or vault)
- Key Rotation: Rotate keys periodically and after suspected compromise
- Salt Uniqueness: Always use unique salts for key derivation
- Memory Safety: Sensitive data is automatically zeroed when dropped
Feature Flags
| Feature | Description | Default |
|---|---|---|
aes |
AES-256-GCM cipher | ✓ |
chacha |
ChaCha20-Poly1305 cipher | |
full |
All ciphers |
License
Apache-2.0 OR MIT