readonce.io — built to forget

Security

readonce.io stores a note until someone reads it once, or until it expires. After a successful read the key is deleted. There is no inbox and no way to list notes.

In transit

Browsers talk to the app over TLS (HTTPS). We do not add a second client-side encryption layer.

At rest

Each note gets its own random 256-bit data key. The note is encrypted with AES-256-GCM. That data key is wrapped with a server key-encryption key. Those keys are rotated periodically.

Once only

A note cannot be accessed twice. The first successful read destroys it.

What we do not log

We do not log note contents, passwords, password verifiers, or the pepper. If you choose to be notified when a note is read, the mail includes the optional description and never the contents, password, or share URL.

Description

The optional description is stored on the envelope, not in the encrypted payload, so the warning page can show it before you choose to read. Anyone with the link can see it. The note contents stay encrypted until a successful read.

Sign-in

Google is requested with openid email only. GitHub is requested with user:email only. Sessions are HMAC-signed cookies, HttpOnly, Secure, SameSite=Lax, lasting one week. We do not store an account database. Email-on-read uses the signed-in address.