- Renamed examples directory to `_archive` to reflect legacy status. - Updated README.md to reflect current status of vault module, including migration from Sameh's implementation to Lee's. - Temporarily disabled Rhai scripting integration for the vault. - Added notes regarding current and future development steps.
2.8 KiB
Hero Vault Symmetric Encryption Module
The Symmetric Encryption module provides functionality for symmetric encryption and decryption using the ChaCha20Poly1305 algorithm.
Module Structure
The Symmetric Encryption module is organized into:
implementation.rs
- Core implementation of symmetric encryption functionalitymod.rs
- Module exports and public interface
Key Features
Key Generation
The module provides functionality for generating secure symmetric keys:
// Generate a new symmetric key
let key = generate_key()?;
Encryption
The module provides functionality for encrypting data using ChaCha20Poly1305:
// Encrypt data
let encrypted = encrypt(&key, "This is a secret message")?;
Decryption
The module provides functionality for decrypting data encrypted with ChaCha20Poly1305:
// Decrypt data
let decrypted = decrypt(&key, &encrypted)?;
Password-Based Key Derivation
The module provides functionality for deriving encryption keys from passwords:
// Derive a key from a password
let key = derive_key_from_password(password, salt)?;
Technical Details
ChaCha20Poly1305
The module uses the ChaCha20Poly1305 authenticated encryption with associated data (AEAD) algorithm, which provides both confidentiality and integrity protection.
ChaCha20 is a stream cipher designed by Daniel J. Bernstein, which is combined with the Poly1305 message authentication code to provide authenticated encryption.
Key features of ChaCha20Poly1305:
- 256-bit key
- 96-bit nonce (used once)
- Authentication tag to verify integrity
- High performance on modern processors
- Resistance to timing attacks
Key Derivation
For password-based encryption, the module uses the PBKDF2 (Password-Based Key Derivation Function 2) algorithm to derive encryption keys from passwords.
Key features of PBKDF2:
- Configurable iteration count to increase computational cost
- Salt to prevent rainbow table attacks
- Configurable output key length
- Uses HMAC-SHA256 as the underlying pseudorandom function
Security Considerations
- Always use a unique key for each encryption operation
- Never reuse nonces with the same key
- Store keys securely
- Use strong passwords for password-based encryption
- Consider the security implications of storing encrypted data
Error Handling
The module uses the CryptoError
type for handling errors that can occur during symmetric encryption operations:
InvalidKeyLength
- Invalid key lengthEncryptionFailed
- Encryption failedDecryptionFailed
- Decryption failed
Examples
For examples of how to use the Symmetric Encryption module, see the examples/hero_vault
directory, particularly:
example.rhai
- Basic example demonstrating symmetric encryptionadvanced_example.rhai
- Advanced example with error handling