Single-use links
You sign in through a signed link, valid for a few minutes and usable once. Only the SHA-256 digest of the token is stored: the link itself exists nowhere on the server.
Patinae is built on a simple assumption: you must expect the database to end up in the wrong hands one day, and make sure that is not enough. Here is how, without metaphors.
Patinae uses versioned envelope encryption. A data key is drawn at random for each journal entry, encrypts that entry alone, then is itself encrypted by a separate content key. Only the ciphertext, the wrapped key, its reference and its version are stored.
One practical consequence: compromising one entry yields nothing about the others. And the application itself never handles plaintext content in its templates: views receive data that is already prepared.
You sign in through a signed link, valid for a few minutes and usable once. Only the SHA-256 digest of the token is stored: the link itself exists nowhere on the server.
Opening the link does not sign you in: you have to confirm with an action. This step stops the link scanners built into email clients from consuming it before you do.
Viewing sensitive information, managing access or transferring an object requires a recent confirmation through a fresh personal link, valid for a limited time.
Invitation links only place their secret in the encrypted session, then redirect immediately to a token-free address. No token is ever rendered in HTML.
Invitations, responses, revocations and views are recorded in an append-only log. That log exists so you can see what happened to an object, not to build a file on anyone.
Message contents, serial numbers, invitation tokens, raw IP addresses, media contents. Neither in the log, nor in the technical logs.
Sessions are encrypted at rest, because they briefly carry invitation secrets between two steps.
Sensitive pages disable caching and referrer propagation, so no copy is left in a proxy or a neighbouring address bar.
Notifications carrying a secret link are encrypted in the queue, between the moment they are created and the moment they are sent.
No serious product should let you believe otherwise. Here are the real limits, so you can decide knowing them.
Since signing in goes through your inbox, whoever controls your email can request a link. Protect that inbox at least as well as the rest.
Encryption protects you from third parties, not from the people you invited. Grant access only to people you trust, and revoke it when that is no longer true.
Content keys are managed server-side, outside the database and the backups. This is not end-to-end encryption: it is a deliberate trade-off, so that transferring an object stays possible, and so a journal does not become unreadable because a device was lost.
Accepting a transfer removes the former owner's access. There is no undo: that is what makes ownership credible.
If you believe you have found a vulnerability, contact us directly and give us a reasonable window to fix it. Never include journal content, invitation links or serial numbers in your message.