Security Architecture
Privacy-first by design. This page explains exactly how it works, what we store, and - More importantly - What we cannot see, so you don't have to take our word for anything.
What We Can Never See
Everything sensitive is encrypted or generated on your device, before it touches the network. That is not a policy promise - It is how the code works:
- Passwords you generate - No network request fires. Watch devtools while you generate.
- Your master passphrase - It never leaves your device, not even hashed.
- Your vault's contents - Logins, notes and cards are AES-256-GCM ciphertext before upload.
- Your encryption key - Derived on your device, held only in your browser's memory.
- Text you hash, encrypt or breach-check - Every tool runs client-side; the breach check uses k-anonymity.
One Passphrase, Two Keys
PBKDF2-SHA256 stretches your master passphrase into 512 bits over 600,000 iterations - Then the two halves lead completely separate lives:
- Your browser fetches your account's public salt and iteration count.
- The first 256 bits become the AES vault key - It never leaves your device.
- The last 256 bits become the auth key - The only thing sent, and we store just a salted hash of it.
- Ciphertext comes down; decryption happens in your browser's memory. Ten idle minutes re-lock automatically.
The same model used by Bitwarden and 1Password. Deep dive: zero-knowledge, explained.
What Our Database Actually Holds
A complete copy of our database would give an attacker no readable vault data. Per account we store:
- Email and optional name - To identify your account.
- A salted hash of the auth key - Login proof without any decryption capability.
- Public KDF parameters - Salt and iteration count; not secrets, just re-derivation inputs.
- Opaque encrypted blobs - Plus a type label and timestamps. Nothing about the contents.
- Aggregate page counts - Which pages were visited, never what you did on them.
To read one vault, an attacker must brute-force that user's passphrase through 600,000 PBKDF2 rounds per guess - Hopeless against a strong passphrase.
What This Does Not Protect Against
Honesty is part of security. Zero-knowledge protects your data from us and from anyone who breaches us. It cannot protect against everything:
- A weak master passphrase - Stolen ciphertext can be brute-forced offline if the passphrase is guessable. Use 5+ random words from the passphrase generator.
- Malware on your device - A keylogger sees your passphrase as you type it. No architecture survives a compromised endpoint.
- Forgetting your passphrase - There is no reset, by design. Keep an encrypted backup and store the passphrase somewhere physically secure.
The Cryptographic Details
| Component | What we use | Why |
|---|---|---|
| Random generation | crypto.getRandomValues() with rejection sampling | OS-seeded CSPRNG; rejection sampling removes modulo bias |
| Key derivation | PBKDF2-SHA256, 600,000 iterations, 128-bit salt (older vaults upgrade automatically at next unlock) | OWASP-recommended work factor; unique salt per account |
| Vault encryption | AES-256-GCM, fresh 96-bit IV per item | Authenticated encryption - Tampered ciphertext fails loudly |
| Auth verifier | Salted hash of a derived auth key (never the passphrase) | Login proof without a decryption capability |
| Transport | TLS, HSTS, same-origin API guards | Standard layers on top, not instead, of client-side crypto |
| Breach check | Have I Been Pwned k-anonymity (5-char hash prefix) | Your password never leaves the browser, even hashed |
Security Questions, Answered Straight
Can PasswordGenerator.now employees see my saved passwords?
What exactly do your servers store about my vault?
What happens if your database is stolen?
Why is there no password reset for the vault?
Is the generator really private if the site is online?
Found a vulnerability? See security.txt or contact us - Security reports are answered within 48 hours.