ZeroVault
Rust-based lightweight cryptographic cli designed for encrypting and verifying sensitive documents using modern, secure encryption primitives. The vault uses AES-256-GCM for symmetric encryption and Ed25519 for digital signatures.
Install / Use
/learn @ParleSec/ZeroVaultREADME
ZeroVault
ZeroVault is a lightweight cryptographic vault designed for encrypting and verifying sensitive documents using modern, secure encryption primitives. Using 3-layer encrpytion technqiues with signatures, memory protection and serialization, your stays surrounded by a defence-in-depth security architeture.
With a simple command like zerovault encrypt, your data is protected by multiple layers of strong encryption.
For detailed installation instructions, see INSTALL.md.
Purpose & Motivation
Digital file protection requires a blend of confidentiality, integrity, and ease of use. ZeroVault aims to:
- Provide strong encryption using modern ciphers and key derivation
- Offer digital signature verification to detect tampering
- Simplify encryption/decryption processes via a CLI-based toolchain
- Be usable for SPII and document workflows
ZeroVault is particularly useful for developers and professionals seeking a verifiable and deterministic mechanism for protecting sensitive files during transmission or at rest.
Quick Installation
ZeroVault features automatic self-installation:
# Windows
curl.exe -L -o zerovault.exe https://github.com/ParleSec/zerovault/releases/latest/download/zerovault-windows-amd64.exe
.\zerovault.exe --version
# Linux
curl -L -o zerovault https://github.com/ParleSec/zerovault/releases/latest/download/zerovault-linux-amd64
chmod +x zerovault
./zerovault --version
Key Features
🔐 Secure Encryption
- Triple-layer protection: Uses AES-256-GCM, ChaCha20-Poly1305, and AES-256-CBC
- Random nonces and salts per encryption
- Key derived from password using Argon2id with aggressive memory cost (1GB)
- High base security level for maximum security
🧾 Digital Signatures
- Signing of ciphertext with Ed25519 private key
- Signature verification using embedded public key
- Cryptographic proof of file integrity
🛡️ Memory Protection
- Memory locking to prevent sensitive data from being swapped to disk
- Guard pages for buffer overflow detection
- Canary values for memory tampering detection
- Multi-pass secure memory zeroization
📋 Metadata Support
- File comments for describing encrypted content
- Creation and modification timestamps
- Version tracking for backward compatibility
- Full JSON serialization of all metadata
🔁 Serialization
- All binary data (nonce, salt, signature, pubkey, ciphertext) encoded to Base64
- Structured vault format with separate data and metadata sections
- Backward compatibility with legacy vault formats
🖥️ Interactive CLI
- User-friendly interface with interactive prompts
- Smart defaults for file paths and options
- Secure password entry with confirmation
- Optional comments for encrypted files
Security Architecture
Triple-Layer Encryption
ZeroVault employs three independent encryption layers:
- AES-256-GCM: Authenticated encryption providing confidentiality and integrity
- ChaCha20-Poly1305: Stream cipher with integrated authentication
- AES-256-CBC with HMAC-SHA512: Block cipher with separate message authentication
Each layer uses independent keys, nonces, and authentication mechanisms to ensure that a vulnerability in one algorithm doesn't compromise your data.
Key Derivation
- Argon2id: Memory-hard algorithm resistant to specialized hardware attacks
- Tunable Parameters:
- Memory usage: 1GB
- Iteration count: 12 passes for maximum security level
- Parallelism: Automatically utilizes available CPU cores
Implementation Details
- Memory Safety: Built in Rust to eliminate common vulnerability classes
- Modular Design: Core cryptography isolated from interface code
- Comprehensive Testing: Unit tests, integration tests, property-based testing
- Self-Installing: Automatically configures itself on first run
Command Reference
| Command | Description | Example |
|---------|-------------|---------|
| encrypt | Encrypt a file | zerovault encrypt --input file.pdf |
| decrypt | Decrypt a vault file | zerovault decrypt --input file.vault |
| info | Display vault metadata | zerovault info --input file.vault |
| validate | Verify vault integrity | zerovault validate --input file.vault |
| encrypt-stream | Encrypt from stdin to stdout | cat file.txt \| zerovault encrypt-stream |
| decrypt-stream | Decrypt from stdin to stdout | cat file.vault \| zerovault decrypt-stream |
| test | Run self-tests | zerovault test |
For complete options, run zerovault --help or zerovault <command> --help.
Security Considerations
Strengths
- Multiple independent encryption layers
- Memory-hard key derivation resistant to brute-force attacks
- Written in Rust for memory safety
- Constant-time operations for cryptographic functions
- Unique cryptographic material for each file
Limitations
- Security depends significantly on password strength
- Higher security levels require substantial RAM (up to 1GB)
- Stronger security comes with performance trade-offs
- No current support for public key encryption
- Side-channel protection depends on hardware/OS capabilities
Best Practices
- Use strong, unique passwords
- Select appropriate security level for your needs
- Verify metadata before decryption
- Keep secure backups of encrypted files
- Consider offline storage for the most sensitive vault files
Comparison with Alternatives
| Feature | ZeroVault | GPG | VeraCrypt | Age | |---------|-----------|-----|-----------|-----| | Multiple Encryption Layers | ✅ (3 layers) | ❌ | ✅ (2 layers) | ❌ | | Memory-Hard KDF | ✅ (Argon2id) | ❌ | ✅ (PBKDF2) | ✅ (scrypt) | | Digital Signatures | ✅ | ✅ | ❌ | ❌ | | Memory Safety | ✅ (Rust) | ❌ (C) | ❌ (C/C++) | ✅ (Go) | | Self-Installing | ✅ | ❌ | ❌ | ❌ | | Stream Processing | ✅ | ✅ | ❌ | ✅ | | File Comments | ✅ | ✅ | ❌ | ❌ | | Volume Encryption | ❌ | ❌ | ✅ | ❌ |
Getting Started
Basic Usage
# Encrypt a file (interactive mode)
zerovault encrypt
# Decrypt a file (interactive mode)
zerovault decrypt
# View information about an encrypted file
zerovault info --input document.txt.vault
Example interactive session:
$ zerovault encrypt
Enter input file path: document.txt
Enter output file path [document.txt.vault]:
Enter encryption password: ********
Confirm password: ********
Enter comment (optional): My secure document
✓ File encrypted successfully
Input: document.txt
Output: document.txt.vault
Size: 1024 bytes
Comment: My secure document
Command-Line Arguments
For scripting or automation:
# Encrypt a file
zerovault encrypt --input file.pdf --output file.vault --password mypassword --non-interactive
# Decrypt a file
zerovault decrypt --input file.vault --output file.pdf --password mypassword --non-interactive
# Force overwrite existing files
zerovault encrypt --input file.pdf --output file.vault --force
Stream Processing
Work with standard input/output:
# Encrypt from stdin to a file
cat document.txt | zerovault encrypt-stream --password "your-password" > document.vault
# Decrypt from a file to stdout
cat document.vault | zerovault decrypt-stream --password "your-password" > document.txt
Batch Processing
Process multiple files:
# Batch encrypt all text files in a directory
for file in *.txt; do
zerovault encrypt --input "$file" --password batch_password --non-interactive
done
# Batch validate all vault files
for vault in *.vault; do
zerovault validate --input "$vault"
done
Additional Options
# Verbose output
zerovault encrypt --input file.pdf --verbose
# JSON output for programmatic usage
zerovault info --input file.vault --json
Example JSON output:
{
"encrypted_data_size": 423,
"file_path": "file.vault",
"file_size": 974,
"metadata": {
"comment": "Confidential document",
"created_at": 1745333818,
"version": "1.0.0"
},
"public_key": "YiN4WYqupD3vyefIFh0ESlRRRX2yvOMWGkXQZKW3HH0=",
"success": true
}
Advanced Use Cases
Nested Encryption
You can encrypt already encrypted files for layered security:
# First layer of encryption
zerovault encrypt --input secret.txt --output layer1.vault --password inner_password
# Second layer of encryption
zerovault encrypt --input layer1.vault --output layer2.vault --password outer_password
Secure Workflows
For secure document sharing:
# 1. Sender encrypts file with comment
zerovault encrypt --input presentation.pptx --comment "For review - Confidential"
# 2. Share the vault file and password securely with recipient
# 3. Recipient verifies file metadata before decryption
zerovault info --input presentation.pptx.vault
# 4. Recipient decrypts file
zerovault decrypt --input presentation.pptx.vault
Architecture
System Structure
vault_core: Core cryptographic logiccli: Command-line interface for using the vaulttypes.rs: Custom serializable types including encryption metadatautils.rs: Utility functions for CLI operationscommands.rs: Command implementationsmain.rs: Entrypoint for CLI applicationself_install.rs: Automatic installation logic
The modular design ensures separation of concerns, with the core crypto
Related Skills
healthcheck
334.1kHost security hardening and risk-tolerance configuration for OpenClaw deployments
himalaya
334.1kCLI to manage emails via IMAP/SMTP. Use `himalaya` to list, read, write, reply, forward, search, and organize emails from the terminal. Supports multiple accounts and message composition with MML (MIME Meta Language).
prose
334.1kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
Writing Hookify Rules
82.1kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
