-
Notifications
You must be signed in to change notification settings - Fork 1
Security Features
Beyond core AES-256-GCM encryption, Zefer offers optional controls. All of them — except the public hint/note — are sealed inside the encrypted payload, so they cannot be read or tampered with without the passphrase. Each is available in the web app, and most are available from the CLI, MCP Server, and Library.
Set a deadline after which the file refuses to decrypt. Stored as a UTC timestamp (milliseconds) inside the payload and checked after successful decryption. Web presets (minutes): 0 (never), 30, 60, 1440 (24 h), 10080 (1 week), 20160 (2 weeks). CLI: --ttl <minutes>.
Note: expiration is a client-side policy check enforced at decryption time; the content is always protected by AES-256-GCM regardless.
Require two passphrases to open a file. Both are combined (separator \x00ZEFER_DUAL\x00) before key derivation, so neither alone can derive the key. Useful for two-person authorization. Web: enable dual mode and provide both passphrases. CLI: -2 "second-key" --dual-key. URL: p, p2, d.
Share a file so the recipient can decrypt it without ever seeing the main passphrase. The file is written in the ZEFR3 format with two independently encrypted blocks (main + reveal). Web: set a reveal key. CLI: --reveal "reveal-passphrase". URL: r. See Binary File Format.
Add a question whose answer must be provided to decrypt. The answer is hashed with PBKDF2-SHA256 (100,000 iterations) and only the hash is stored (inside the payload). The plaintext answer is never saved. Web: set question + answer. CLI: -q "Pet name?" -a "firulais". URL: q, a.
Limit decryption to specific IPv4/IPv6 addresses. The allowlist is stored inside the payload; at decryption time the client detects the current IP and checks it against the list. Web: comma-separated IPs. CLI: --allowed-ips "10.0.0.1,::1". URL: ips.
This is an access policy enforced by the client, not a cryptographic guarantee — it raises the bar but the content's confidentiality always rests on AES-256-GCM + the passphrase.
Lock a file after N failed attempts. Tracking is local: localStorage in the browser, ~/.zefer/attempts.json in the CLI. Web presets: 0 (unlimited), 3, 5, 10. CLI: --max-attempts 3. URL: att.
Optionally compress the content before encryption to reduce size (and obscure exact length). Options: none, gzip, deflate (the CLI also accepts deflate-raw). Implemented with the browser CompressionStream API. Web: choose a method. CLI: -c gzip. URL: c.
Trade speed for brute-force resistance. Levels map to iteration counts:
Level (security / s) |
Iterations (i) |
|---|---|
standard |
300,000 |
high |
600,000 (default) |
maximum |
1,000,000 |
The CLI can also auto-benchmark (-i 0) to pick a count tuned to the machine. The chosen count is recorded in the public header so decryption uses the same value.
The only cleartext metadata you can attach: a short hint (e.g., "two parts needed") and a note (e.g., "For Alice only"), visible without the passphrase. Use them sparingly — they are not secret. Web: hint/note fields. CLI: --hint, --note. URL: h, n.
Files are encrypted in 16 MB chunks with unique IVs, giving bounded memory use and per-chunk integrity. This is automatic; see Security Architecture and Binary File Format.
zefer encrypt secret.txt \
-p "main-passphrase" \
-2 "second-key" --dual-key \ # two-person authorization
--reveal "reveal-passphrase" \ # share without exposing the main key (ZEFR3)
-q "Pet name?" -a "firulais" \ # secret question (hashed answer)
--ttl 1440 \ # expires in 24 hours
--max-attempts 3 \ # lock after 3 failed attempts
--allowed-ips "10.0.0.1,::1" \ # IPv4/IPv6 allowlist
--hint "two parts needed" \ # public hint
--note "For Alice only" \ # public note
-c gzip -i 1000000 --verboseSee URL Parameters to trigger the same options from a link.
📖 Glossary — terms on this page: dual passphrase · reveal key · secret question · TTL / expiration · compression · PBKDF2 · public header · chunk. Full list in the Glossary.
📖 New to a term? See the Glossary. · Zefer · Repository · CLI · MIT © José Carrillo
Guides
- Getting Started
- How It Works
- Examples and Recipes
- Install and Self-Hosting
- Comparisons
- Troubleshooting
- FAQ
Security
Channels
Tools
Project
Reference