Feature
Password-Protected Notes: Turning a Password Into a Key
Passwords make poor encryption keys on their own — they are short, human-chosen, and drawn from a small space. Key derivation is the process that turns one into something usable. Understanding it tells you exactly how much protection your password choice is buying.
Why a password is not a key
AES-256 needs a 256-bit key: 32 bytes of essentially random data. A password like Autumn2026! is eleven characters of highly non-random data — biased towards dictionary words, capitalised first letters, and a symbol at the end because a form demanded one.
If you fed that password directly into AES as key material, an attacker holding the ciphertext would not need to search the 2^256 keyspace. They would search the far smaller space of passwords people actually pick, which modern cracking rigs work through at enormous rates. A key derivation function exists to make each of those guesses expensive.
What Inkrypt does with your password
| Key derivation function | PBKDF2-HMAC-SHA256 |
|---|---|
| Iterations | 310,000 |
| Salt | 16 bytes, cryptographically random, per note |
| Derived key length | 256 bits |
| Implementation | Web Crypto API (SubtleCrypto.deriveKey) |
| Where it runs | Your browser, on your device |
Three properties matter here, and each defeats a specific attack.
The salt defeats precomputation
A salt is random data mixed into the derivation. Because every note gets its own fresh 16-byte salt, the same password produces a completely different key for every note. An attacker cannot build one table of precomputed password-to-key mappings and reuse it — a rainbow table is worthless against salted derivation, and cracking one note gives no head start on the next.
The iteration count defeats speed
310,000 iterations means the derivation runs the HMAC-SHA256 core 310,000 times before producing a key. On your device that is a brief, one-time pause. For an attacker guessing passwords offline, it multiplies the cost of every single guess by the same factor — turning a hypothetical billion guesses per second into a few thousand.
That figure is not arbitrary: 310,000 is the OWASP Password Storage Cheat Sheet's recommended minimum for PBKDF2-HMAC-SHA256. We record the parameters alongside each note (as a pbkdf2-310000 label), so the count can be raised for new notes without breaking older ones — each note is decrypted with the parameters it was created under.
Deriving in the browser defeats us
Because derivation happens client-side, the password itself is never transmitted. There is no password hash in our database, because there is no password in our database. This is what makes the guarantee structural rather than a policy promise — see zero-knowledge encryption.
PBKDF2 versus Argon2
Choosing a password that actually helps
Key derivation buys you time proportional to how hard your password is to guess. It cannot manufacture entropy that is not there. The practical question is not 'does it look complicated' but 'how many guesses would it take'.
| Password style | Example shape | Practical strength |
|---|---|---|
| Dictionary word plus digits | sunshine2026 | Very weak — first thing any wordlist attack tries |
| Leetspeak substitutions | P@ssw0rd! | Weak — cracking tools apply these rules automatically |
| Short random string | 9 random characters | Moderate, but hard to type and easy to mistype |
| Four or more random words | amber-tunnel-verdict-hollow | Strong and typeable — the best default for shared notes |
| Manager-generated 20+ characters | generated, stored in a manager | Strongest, when you have somewhere to store it |
- Prefer length over symbol variety. Adding a character to a random passphrase multiplies the search space far more than swapping
afor@. - Never reuse a note password anywhere else. If it is cracked offline, you want the loss contained to one note.
- Make it something you can dictate over a phone call, because that is often how it needs to travel separately from the link.
- For genuinely high-stakes secrets, generate the password in a password manager and share it through the manager's own sharing feature instead.
Why there is no password reset
Every 'forgot password' flow you have used works because the service can restore access without your old password — it holds the data in a form it can re-key. That is exactly the capability we have removed.
If we could reset your note password, we could read your note. Those two capabilities are the same capability. The absence of a reset link is not a missing feature; it is the visible edge of the guarantee.
Before you rely on a note
Frequently asked questions
Is my note password stored anywhere?
Why does saving a note take a moment?
What is a salt and why does each note get its own?
How long should a note password be?
Can I change the password on an existing note?
Related reading
Security architecture
Full parameters, data flow, and what the server stores for each note.
Read moreAES-256 encryption
What the derived key is actually used for, and why GCM mode matters.
Read moreHow to share passwords securely
Getting the password to the recipient is the hard half of the problem.
Read moreEncryption glossary
Salt, IV, KDF, ciphertext — defined in plain English.
Read moreWrite your first encrypted note
No account, no email address, no download. Type a note, set a password, share the link.
Open the notepad