Luca's cryptofiles

Enjoy the show!

Password-protected file

The file name, its type, the preview and the sender’s note appear after unlocking.

Preview
Preview decrypted on this device

Downloaded and authenticated · saving to your device

Encrypted file sharing

Files shared here are encrypted before upload. Only someone with the full link, and the password if one is set, can open them.

  • Decrypted on this device. The file host never sees the file or its name.
  • Every 4 MiB chunk is authenticated, so any change to the file is caught.
  • Resumes after connection drops.

Opening the file…

How it works

  1. The sender encrypts the fileThis happens on their own computer, before the upload. This website only ever receives unreadable data, with or without a password.
  2. You receive a linkThe key to the file is part of the link. If the sender also set a password, they send it separately, for example by text message.
  3. You open itOpen the link and type the password, if there is one. The file is decrypted on your own device and saved to your Downloads folder.

Why it’s safe

  • We can’t see your filesThis website only ever stores encrypted data. It can’t read the contents, not even the file names.
  • The key is only in the linkThe secret key is at the end of the link, after the # sign. Your computer never sends it to this website.
  • Every piece is checkedThe file arrives in pieces and each one is checked. If anything was changed, the download stops instead of saving a damaged file.
  • Downloads pick up againAfter a connection drop the download continues by itself. In supported browsers, even after the tab was closed.
  • No account neededOpen the link in your browser. Nothing to sign up for, nothing to install.
  • Files don’t stay foreverThe sender can set a date after which the file is deleted, or remove it at any time.

Under the hood

The link

example.com/#4fJq…R7nE.Zk8r…m0Q4

  • Website addressServes this page and tells your computer where in cloud storage to fetch the encrypted file.
  • File IDTells this website which encrypted file to send. It says nothing about what is inside.
  • Secret keyStays on your computer, which never sends the part after the # to this website.

Straight from cloud storage

  1. 1Your computerThis websitefile IDYour computer sends only the file ID to this website.
  2. 2This websiteYour computersigned URL (15 min)The website answers with a signed URL: a pass to that one file in cloud storage, valid for 15 minutes. Expired or removed files get none.
  3. 3Your computerCloud storagerequest with the signed URLYour computer asks cloud storage for the file with that URL, in byte ranges, so it can resume where it stopped.
  4. 4Cloud storageYour computerencrypted bytesnever through this websiteCloud storage sends the encrypted bytes straight back, over the storage provider’s network, built for large files.
  1. 1Your computer sends only the file ID to this website.
  2. 2The website answers with a signed URL: a pass to that one file in cloud storage, valid for 15 minutes. Expired or removed files get none.
  3. 3Your computer asks cloud storage for the file with that URL, in byte ranges, so it can resume where it stopped.
  4. 4Cloud storage sends the encrypted bytes straight back, over the storage provider’s network, built for large files.

Why not download from this website? The bytes come over the storage provider’s network, built for large files, so this website stays small and never touches file data. The storage credentials never leave the server: a signed URL opens one file, briefly.

The keys

secret key128 bit password (if set)Argon2id · 64 MiB · 3 passes
file keysHKDF-SHA256 · 16-byte salt
name and noteAES-256 contentsAES-256
  • secret key16 random bytes from the link. Without a password it alone opens the file, so anyone with the whole link can open it.
  • password (if set)Stretched with Argon2id (64 MiB of memory, 3 passes), so every guess is slow and costly. With a password, the link alone isn’t enough, and the password is useless without the link.
  • file keysHKDF-SHA256 mixes both with the file’s random 16-byte salt into two separate 256-bit AES keys: one for the name and note, one for the contents.
  • whereAll of this happens on your computer. This website has neither the secret key nor the password, so it can’t decrypt anything.

Why is the key in the link? No accounts and no keys on the server means nothing there to leak or hand over: whoever has the link has the key, and nobody else does.

The blocks

  • header40 readable bytes: format version, Argon2 settings, salt and block size, all your computer needs to derive the keys.
  • nameThe name, type, note and preview, encrypted and padded to whole 4 KiB pages so not even their length shows. Its seal also covers the header.
  • 0, 1, 2 … lastThe file in 4 MiB blocks, each encrypted with AES-256-GCM and sealed by a 16-byte tag (the tick). One changed bit breaks the seal, and the download stops instead of saving damaged data.
  • 0·0 … n·1Each block’s nonce: its number and a last-block flag. The seal covers the block’s position and marks the last one, so blocks can’t be swapped, dropped or cut off.
  • at the endThe SHA-256 of the whole file is compared with the sender’s before the page says it’s verified.

Why blocks? A 15 GB file never has to fit in memory, a dropped connection resumes at the last good block, and damage is caught within 4 MiB instead of at the very end.

A service offered to the Verbamanent theatre group.