AeroVault
Military-grade encrypted vault format for single-file encrypted containers.
AeroVault v2 combines AES-256-GCM-SIV (nonce misuse-resistant), Argon2id (128 MiB), AES-256-KW key wrapping, and optional ChaCha20-Poly1305 cascade encryption into a portable .aerovault file format.
Cryptographic Stack
| Layer | Algorithm | Standard |
|---|---|---|
| KDF | Argon2id (128 MiB, t=4, p=4) | RFC 9106 |
| Key Wrapping | AES-256-KW | RFC 3394 |
| Content Encryption | AES-256-GCM-SIV | RFC 8452 |
| Cascade Mode | ChaCha20-Poly1305 | RFC 8439 |
| Filename Encryption | AES-256-SIV | RFC 5297 |
| Header Integrity | HMAC-SHA512 | RFC 2104 |
| Key Separation | HKDF-SHA256 | RFC 5869 |
Installation
From source
From crates.io
CLI Usage
# Create a new vault
# Create with cascade encryption (AES-GCM-SIV + ChaCha20-Poly1305)
# Add files
# Add files to a directory
# List contents
# Extract a specific file
# Extract all
# Create directories
# Delete an entry
# Rename an entry in place
# Move or rename across directories
# Copy file or directory to another path
# Show security info
# Change password
# Check if file is an AeroVault
Library Usage
use ;
// Create a new vault
let opts = new
.with_mode;
let vault = create?;
// Add files
vault.add_files?;
// Open and list
let vault = open?;
for entry in vault.list?
// Extract
vault.extract?;
// Rename in place (same parent directory)
vault.rename_entry?;
// Move (works for files and directories)
vault.move_entry?;
// Copy (works for files and directories)
vault.copy_entry?;
Format Specification
See docs/AEROVAULT-V2-SPEC.md for the complete binary format specification.
vs Cryptomator
| AeroVault v2 | Cryptomator v8 | |
|---|---|---|
| KDF | Argon2id (128 MiB) | scrypt (64 MiB) |
| Content cipher | AES-256-GCM-SIV | AES-256-GCM |
| Nonce misuse resistance | Yes | No |
| Cascade mode | Optional | No |
| Storage | Single file | Directory tree |
| Implementation | Rust | Java |
Security
- All key material is zeroized after use
- Constant-time MAC comparison prevents timing attacks
- File-id-bound chunk AAD (current format) prevents chunk splicing and reordering
- Extraction opens outputs with
O_NOFOLLOW+create_newto refuse symlink redirection - Per-chunk lengths are bounds-checked before allocation
- Atomic writes prevent corruption on crash
- 128 MiB Argon2id makes GPU brute-force impractical
License
GPL-3.0 -- See LICENSE for details.
Origin
AeroVault v2 was originally developed as the encryption engine for AeroFTP, a professional FTP/SFTP/cloud client. This standalone crate makes the format available for any Rust project.
Acknowledgements
From the v3 format work onward, the AeroVault wrapper-stack pipeline model (the packing / chunking / chunk-id / compression / crypt / cipher-hash taxonomy) is a design contribution by Ehud Kirsh (E. Kirsh), AeroFTP issue #162, 2026. Ehud has also provided sustained community testing of AeroVault across releases. The wrapper-stack format itself is implemented in the AeroFTP application; this crate provides the stable v2 / current-format library it builds on.