Secrets that evaporate. Not leak.
Minimal zero-knowledge secret sharing.
Vapor-Locker allows you to share sensitive information (passwords, API keys, private notes) using client-side encryption.
The server never sees your secret or your encryption key.
- Client-side encryption (Web Crypto API)
- Zero-knowledge architecture
- AES-256-GCM authenticated encryption
- PBKDF2-SHA256 key derivation (200,000 iterations)
- SHA-256 hashed lookup keys
- Automatic expiration (24h)
- Optional self-destruct after first read
- No accounts
- No plaintext storage
| Feature | Snappass | Vapor-Locker |
|---|---|---|
| Single-use secret | ✅ | ✅ |
| Expiration | ✅ | ✅ |
| Client-side encryption | ❌ | ✅ |
| Zero-knowledge arch. | ❌ | ✅ |
- The secret is encrypted in your browser.
- A key is derived using PBKDF2-SHA256 (200,000 iterations).
- The encrypted blob is stored on the server.
- The server stores only:
- A SHA-256 hash of the lookup key
- The AES-GCM encrypted ciphertext
- Expiration metadata
- To retrieve the secret, the correct key must be provided.
- The secret is decrypted locally in the browser.
- The secret is deleted after 24 hours or after first read (optional).
All cryptographic operations happen in the browser.
Vapor-Locker relies exclusively on standard, battle-tested primitives:
| Component | Algorithm |
|---|---|
| Key derivation | PBKDF2-SHA256 (200,000 iterations) |
| Encryption | AES-256-GCM |
| Lookup hashing | SHA-256 |
| Encoding | Base64 URL-safe (no padding) |
- A random 96-bit IV is generated per secret.
- AES-GCM provides authenticated encryption.
- No custom cryptographic algorithms are used.
- All operations use the browser’s native Web Crypto API.
The server only stores:
- A SHA-256 hash of the lookup key
- An encrypted ciphertext blob
- Expiration timestamp
The server never receives:
- The plaintext secret
- The encryption key
- The derived key
- The decrypted content
Even in the event of a database breach, secrets remain unreadable.
Vapor-Locker is designed to protect against:
- Server compromise
- Database leaks
- Curious administrators
- Accidental secret retention
Vapor-Locker does NOT protect against:
- Compromised user devices
- Weak user-chosen secrets
- Phishing attacks
- Insecure transmission of the lookup key
- Active man-in-the-middle attacks on non-HTTPS connections
Always share the lookup key via a secure channel.
- Enter a secret.
- Generate and share the lookup key securely.
- The recipient retrieves the secret using the key.
- The secret disappears after 24 hours or after first read.
Vapor-Locker is a Rust + Axum service using sqlx for PostgreSQL access.
The backend tracks stable Rust and library releases; core dependencies such as sqlx are kept up to date (currently sqlx 0.8.x and sqlx-postgres 0.8.x) to avoid deprecation warnings and upcoming compiler incompatibilities.
When upgrading dependencies, remember to rebuild the project (
cargo build) and re-run your tests.
- Vapor-Locker does not store logs of secret content.
- Vapor-Locker does not offer account-based recovery.
- Lost keys cannot be recovered.
- This tool reduces server-side exposure — it does not replace a full password manager.
Vapor-Locker is built on a simple principle:
If the server can’t read it, nobody can.
No marketing fluff.
No hidden logic.
No custom cryptography.
Just minimal, auditable, zero-knowledge secret sharing.
Vapor is live and ready to use.
No signup. No tracking. No server-side access to your secrets.
Share a secret. Let it evaporate.
La page d’accueil (static/index.html) utilise un fond fixe en canvas : grille de petits carrés espacés sur fond noir. Un halo vert lumineux suit la souris (ou le doigt sur tactile) : seuls les carrés proches du pointeur s’illuminent en vert vif ; le reste reste dans le noir total. Le titre, le tagline principal et le sous-texte sont regroupés dans un médaillon arrondi au centre, sur fond noir semi-transparent (opacity 0.75) pour renforcer la lisibilité.
Le site expose des balises Open Graph et Twitter Card pour que le partage du lien affiche un aperçu (titre, description, image) sur Slack, LinkedIn, Facebook, X/Twitter, etc.
- Image utilisée :
static/vapor_logo.png(par défaut). - Pour un rendu optimal (grande carte), vous pouvez ajouter une image dédiée 1200×630 px dans
static/og-image.pnget mettre à jour les metaog:imageettwitter:imagedansstatic/index.htmlpour pointer vers/static/og-image.png. - Les URLs d’image sont relatives ; les crawlers les résolvent à partir de l’URL de la page.
AGPL