KeySlip / SurCod
Back to KeySlip

SECURITY / HOW IT WORKS

Trust starts with what you can verify.

Understand what protects your message, what the server stores and where the limits are.

01 / THE JOURNEY

Your message is encrypted before it leaves.

01Your client

Message + key
Local encryption

02KeySlip server

Ciphertext only
No decryption key

03Recipient

One explicit read
Local decryption

The key is in the link fragment, after #. That fragment is not sent in HTTP requests. Share the full link only with the intended recipient, and any extra password separately.

02 / WHAT IS IMPLEMENTED

Layers you can inspect.

01

Local, authenticated encryption

AES-256-GCM, a fresh random 32-byte key and 12-byte IV per message. Encryption and decryption happen in your browser or local client.

02

An optional extra password

PBKDF2-HMAC-SHA256 with 600,000 iterations and a fresh 16-byte salt derives the encryption key from the link key and password. Choose a strong password and send it separately.

03

One read, enforced atomically

DELETE … RETURNING consumes the stored record before the read response. Of two simultaneous requests, only one receives the ciphertext. Expired messages become unavailable immediately; expired rows are cleaned every five minutes.

04

HTTPS and browser safeguards

The Worker sets HSTS, a same-origin Content Security Policy, no-referrer and anti-framing headers. API responses and secret pages use no-store caching.

03 / THE BOUNDARIES

Know what protection does not cover.

Someone has the full link

Anyone with the complete link can attempt to read it. An extra password adds a separate barrier; without one, the full link is sufficient.

The device or client is compromised

Malware, extensions, screenshots or a recipient who saves the message can expose plaintext. You must trust the browser, the code it receives and the local client. An AI agent calling the MCP tool also sees the message.

The connection fails, or the password is wrong

The first API read consumes the secret even if decryption fails or the response is lost. The browser can retry a password against ciphertext already held in that page, but the server cannot restore the consumed message. Do not retry the API read automatically.

Connection metadata

The application stores daily rotating HMAC identifiers for rate limits rather than raw IP addresses. Application request logging is disabled; Cloudflare processes connection data under its own policies. Encryption does not hide every aspect of a connection.

04 / VERIFIABLE EVIDENCE

What you can verify today.

The encryption flow is described here, and the browser client is delivered to your device. The project repository is currently private. Publishing source code and compatibility tests would allow a broader review; documentation alone is not an independent security audit.

We do not publish an independent security audit report or claim a security certification.