Product
How Inkrypt Works
This is the full journey of a note: what your browser does, what crosses the network, what our servers store, and what the recipient's browser does to turn it back into readable text. No step is hand-waved.
The short version
You write a note and set a password. Your browser turns the password into an encryption key and scrambles the text. Only the scrambled version is uploaded. To read it, someone loads the note and enters the password, and their browser reverses the process. Our servers hold ciphertext at every point in between.
Everything below is that same sequence with the details filled in.
Creating a note
You choose a name
The name becomes the note's URL —Project handoverbecomes/project-handover. Nothing is stored yet. Note names are not encrypted and appear in URLs, browser history and logs, so keep them non-descriptive.You write the note
Text stays in your browser's memory. Nothing has been transmitted at this point.You set a password
This is the only input to the encryption key. It is never transmitted, never logged, and never stored in any form — including as a hash.Your browser generates randomness
A 16-byte salt and a 12-byte initialisation vector are drawn from the browser's cryptographically secure random number generator. Both are new every single time you save.Your browser derives a key
PBKDF2-HMAC-SHA256 runs 310,000 iterations over your password and the salt, producing a 256-bit AES key. This is the brief pause you notice when saving — it is deliberate, and it costs any attacker the same on every guess.Your browser encrypts
AES-256-GCM encrypts the text with that key and IV, producing ciphertext plus a 128-bit authentication tag that will later detect any tampering.The ciphertext is uploaded
The encrypted blob, the salt, the IV and a label recording the key-derivation parameters travel to our servers over TLS. Your password and your text do not.
You can verify this yourself
What each party can see
| Party | Can see | Cannot see |
|---|---|---|
| Your browser | Everything — plaintext, password, key | — |
| The network | That a request happened, to which host | Note contents (TLS, and encrypted beneath it) |
| Our servers | Ciphertext, salt, IV, slug, timestamps, view count | Plaintext, password, encryption key |
| Someone with the link only | That a note exists at that address | The note's contents |
| Someone with link and password | Everything | — |
Sharing a note
Sharing issues a token — a long random identifier — and serves the note at /share/<token>. The token is an address, not a key: it retrieves ciphertext, and the password is still required to read it.
You can attach an expiry and a maximum view count to a share. When either limit is reached, the stored record is deleted and the link stops resolving.
The one rule that matters
Opening a note
The recipient loads the URL
Their browser requests the encrypted payload. If a view limit is set, this fetch is what increments the counter — regardless of whether decryption later succeeds.They enter the password
It stays in their browser, exactly as yours did.Their browser re-derives the key
The same PBKDF2 parameters, using the salt stored with the note, reproduce the identical 256-bit key. This is why the salt must be stored and why it does not need to be secret.Their browser verifies and decrypts
AES-GCM checks the authentication tag first. If the ciphertext has been altered in any way, decryption fails rather than returning corrupted text. Otherwise the plaintext appears.The note reaches its end state
It remains available until expiry, the view limit, or manual deletion — whichever comes first.
A wrong password and a tampered note produce the same visible result: decryption simply fails. There is no state in which someone reads a note that is subtly not what you wrote.
Editing and deleting
- Editing requires the correct password. Saving re-encrypts the note with a fresh salt and a fresh IV, so no two saves ever reuse the same key-and-IV pair — the one failure mode GCM cannot tolerate.
- Changing the password re-derives a new key and re-encrypts. The old ciphertext is replaced.
- Deleting removes the stored record immediately. Because we only ever held ciphertext, there was never a readable copy to remove.
- Expiry does the same thing automatically when the time or view limit is reached.
What this cannot do
Worth restating at the end of a walkthrough, because a clean sequence of steps can make a system feel more absolute than it is.
- It cannot recover a note whose password you have forgotten. There is no key on our side to recover it with.
- It cannot stop a recipient copying, screenshotting or remembering what they read.
- It cannot protect you if your own device is compromised — plaintext exists before encryption runs.
- It cannot make a weak password strong. Key derivation buys time proportional to how hard the password is to guess.
The full picture, including the adversaries this design does not address, is on the threat model page.
Frequently asked questions
Do I need an account to create a note?
Where is my note actually stored?
What happens if two people open the same note at once?
Can I use Inkrypt offline?
Why does saving take a second?
Related reading
Security architecture
The same process, at parameter-level detail.
Read moreSecure link sharing
Getting the link and password to a recipient safely.
Read moreThreat model
What this design defends against, and what it does not.
Read moreEncryption glossary
Salt, IV, KDF and the rest, 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