How a file
is sealed.
The summary of suite 0x01: what encrypts a file, who holds each key, and the rules the code has to follow. Written so that someone else can check it.
Three algorithms, each with one job.
A suite is a fixed set of algorithms. If one of them ever has to change, the new set gets a new number.
X-Wing
ML-KEM-768 + X25519Seals each file key so that only your team's key can unseal it. It combines a newer method with an established one, so an attacker would have to break both.
XChaCha20-Poly1305
Authenticated encryptionEncrypts what is inside a file, along with its name and type, and detects any change made to the sealed copy.
Argon2id
Password hashingTurns your passphrase into the key that locks your team's key on your device. It is slow on purpose, to make guessing expensive.
Sealing a file, and opening it.
Sealing
- 01A new random key is made for the upload.
- 02The files are encrypted with it, names and types included.
- 03That key is sealed for your team's key.
- 04The sealed copy is padded, so its exact size does not show.
- 05It goes straight to storage. The device then discards the key.
Opening
- 01Your passphrase unlocks your team's key, in memory only.
- 02The sealed copy is downloaded.
- 03Your team's key unseals the file key.
- 04The files are decrypted and checked for changes.
- 05A copy that fails any check is refused. Nothing partial is shown.
What the code is not allowed to do.
These are written into the project's own rules, and changes are reviewed against them.
No home-made cryptography
Only published, reviewed implementations of the three algorithms above.
Nothing sensitive in logs
Keys, passphrases, file contents, names, types and exact sizes are never logged and never sent to our servers.
Keys stay in memory
An unlocked key lives only in memory, in an isolated worker, and is cleared when you lock or sign out.
Fail closed
If a sealed copy fails any check, it is refused. There is no partial or best-effort result.
Files skip our application servers
Sealed copies go straight between the browser and storage.
No third-party scripts
Pages that handle files or keys load no scripts from other companies.
Where this stands today.
Suite 0x01.
Being built and tested. Uploads on gotin.dev are paused until it is live.
No independent audit yet. The report will be linked from the security page when there is one.
Kept in the repository, next to the code it describes.
The source
The code that follows this specification, and the list of claims we make about it.
Browse the sourceNot in suite 0x01 yet.
Used when a recipient outside gotin opens a link. The first open binds the link to their passkey.
The original of a redacted package, under a key that needs both the passkey secret and a reveal password.
Every passkey package is counted the same way by our servers, so they cannot tell which ones hold an original.
A team key held on a machine the customer runs.
The hash used for the received log and its daily anchor.
Want to walk through it with us?
Fifteen minutes on a call, with the people who wrote it.