Skip to main content

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.

Last reviewed Reviewed by Inkrypt Security Team

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

  1. You choose a name

    The name becomes the note's URL — Project handover becomes /project-handover. Nothing is stored yet. Note names are not encrypted and appear in URLs, browser history and logs, so keep them non-descriptive.
  2. You write the note

    Text stays in your browser's memory. Nothing has been transmitted at this point.
  3. 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.
  4. 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.
  5. 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. PBKDF2 is specified in RFC 8018 and recommended for password-based key derivation in NIST SP 800-132.
  6. 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. AES is specified in NIST FIPS 197 and GCM in NIST SP 800-38D; both run through the browser's Web Cryptography API.
  7. 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

Open your browser's developer tools, switch to the Network tab, and save a note. Inspect the outgoing request body: you should see a base64 blob, not your text. This is the most direct check available, and it works on any service making this claim.

What each party can see

Visibility at each stage of a note's life.
PartyCan seeCannot see
Your browserEverything — plaintext, password, key
The networkThat a request happened, to which hostNote contents (TLS, and encrypted beneath it)
Our serversCiphertext, salt, IV, slug, timestamps, view countPlaintext, password, encryption key
Someone with the link onlyThat a note exists at that addressThe note's contents
Someone with link and passwordEverything
Visibility at each stage of a note's life.

Sharing a note

Sharing issues a token — a long random identifier — and serves an encrypted snapshot at /share/<token>. The token is an address, not a key: it retrieves ciphertext only. The key is either appended to the link after a #, which browsers never send to a server, or it is a share password you set, in which case nothing in the URL can decrypt the snapshot.

Step by step, this is what happens between pressing Share and the recipient reading the note.

  1. You choose what to share

    Sharing acts on one note and produces a snapshot of it — a point-in-time copy, encrypted separately. The original note is not moved, unlocked or altered.
  2. A share key is chosen, separate from your note password

    If you set a password on the share, that becomes the key. If you do not, your browser generates a random one. Your note's own password is never reused for this and is never sent.
  3. Your browser encrypts the snapshot

    Title and body are encrypted locally with AES-256-GCM under a PBKDF2 key at 310,000 iterations, using a fresh salt and IV generated for this share alone.
  4. Ciphertext and your settings are uploaded

    The upload carries the encrypted snapshot, its salt and IV, and whatever expiry or view limit you chose. It does not carry the key.
  5. The server returns a link

    It issues a random token for the address and stores only a hash of it, so the database cannot be read back into working links.
  6. For a passwordless share, the key is added after the #

    The finished link looks like /share/<token>#key=<key>. Browsers resolve the part after # locally and never put it in the request, so the key reaches your recipient without ever reaching us.
  7. The recipient's browser does the decryption

    It fetches the ciphertext, takes the key from the fragment or prompts for the share password, and decrypts locally. The plaintext exists only in their tab.

You can attach an expiry and a maximum view count to a share. When either limit is reached the link stops resolving — the server declines the request. The encrypted record is not automatically purged from the database at that point.

Expiry applies to the link, not the note

A share link can expire; the note behind it cannot. When a share stops resolving, the note is untouched and still opens with its own password. If you need the note itself gone, you have to overwrite it.

The one rule that matters

Send the link and the password through different channels. Both in the same email or chat message means anyone who reads that message has the note, and every other protection becomes irrelevant.

The field-by-field specification of what a share upload contains — and how share passwords are stored, which has a caveat worth reading — is on the security architecture page.

Opening a note

  1. 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.
  2. They enter the password

    It stays in their browser, exactly as yours did.
  3. 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.
  4. 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.
  5. 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?

No. There is no signup, no email address and no profile. Name a note, write it, set a password — that is the entire flow.

Where is my note actually stored?

On our servers, as ciphertext, alongside the salt and IV needed to reproduce decryption in your browser. No plaintext copy exists anywhere outside the browser sessions of people who know the password.

What happens if two people open the same note at once?

Both can read it. If a view limit is set, each fetch counts separately, so simultaneous access can consume the limit faster than you expect.

Does the encryption itself need a connection?

The encryption does not — key derivation and AES both run in your browser, and would work with the network unplugged. The storage does: creating or opening a note requires a connection to fetch or store the ciphertext, so there is no fully offline mode.

Why does saving take a second?

That is the 310,000 PBKDF2 iterations running in your browser. It is intentional: the same cost applies to every guess an attacker makes against your password.

Write your first encrypted note

No account, no email address, no download. Type a note, set a password, share the link.

Open the notepad