// time-lock encryption · drand quicknet

Sealed until the clock says so.

Status: Ticker (placeholder, no token exists):
drand round now
…
Solana slot now
…
// the working app

Seal it. Share it. Wait.

Sealing uses tlock — identity-based encryption on BLS12-381 where the “identity” is a future drand round number. The key that opens it is the signature the drand network publishes for that round, so it does not exist anywhere until the round arrives.

Loading tlock-js from jsDelivr…

1 Seal a message

Encrypted locally to a future drand round. After sealing, even you cannot read it back early.

0 / 4000

The link carries the ciphertext in the URL fragment (after #), which browsers do not send to the server. The plaintext is not in it — only the sealed bytes.

2 Open a sealed message

Paste a Slotlock / tlock ciphertext (or open a share link). The countdown is read from the ciphertext header; opening only works once drand has published that round.

// how it works

A key that does not exist yet

  1. drand is a threshold network (the League of Entropy) that publishes a BLS signature over every round number. On quicknet a round is produced every 3 seconds, so round r appears at genesis + (r−1)·3 s. No single node can produce a round signature alone.
  2. When you seal, Slotlock picks the first round at or after your chosen time and runs tlock (Boneh–Franklin identity-based encryption on BLS12-381): the round number is the “identity”, drand's public key is the master key. Only the future round signature works as the decryption key.
  3. Your text is encrypted with ChaCha20-Poly1305 under a random file key, and that file key is wrapped with tlock — the standard age file format with a tlock stanza, compatible with the drand tle tool.
  4. To open, the page fetches round r's signature from a drand relay, checks it in-page (BLS on G1 over sha256(r) against the pinned quicknet public key, and randomness = sha256(signature)), then uses it to unwrap the file key. Before the round exists the relay has nothing to give — that is the lock.
  5. The Solana slot shown next to the round is an estimate only: current slot from mainnet (read-only) plus elapsed time ÷ ~400 ms. Slot pace drifts, so the real slot at unlock time will differ. Locking is driven by drand, not Solana.
// privacy model

Who can read what, and when

Visible to anyone holding the ciphertext

  • The target drand round number and chain hash (they are in the header), hence the unlock time
  • Approximate message length (ciphertext size grows with the text)
  • That it is an age/tlock file

Hidden until the round is published

  • The message itself — from everyone, including the author after they close the tab
  • The file key wrapping it
  • After the round: anyone with the ciphertext can open it. Timelock is not access control.

What our server sees

  • Only the page load and, if enabled, a read-only getSlot call through /api/rpc.
  • Never your message or ciphertext: sealing and opening run in the browser.

What drand relays see

  • Your IP address and which round you asked for — only when opening, probing, or showing the live round. Sealing uses the pinned quicknet key and makes no request. Relays never see the message.
  • Relays used: api.drand.sh, api2.drand.sh, api3.drand.sh, drand.cloudflare.com.

Known limitations — please read

  • Trust in drand's threshold. If a threshold of League of Entropy nodes colluded, they could compute a future round signature and open messages early. Slotlock inherits drand's security assumptions.
  • If drand stops, the message is stuck. A round that is never published means a ciphertext that never opens. Far-future seals depend on quicknet still running then. Keep your own copy of anything important.
  • The author is locked out too — but only after the tab closes. Until you reload or close this page, the plaintext is still in your textarea and in browser memory. Anyone who saw your screen saw it.
  • Unlock time is approximate to ~3 s, and the countdown uses your device clock; a skewed clock shows a wrong countdown but cannot open anything early — the round signature must exist.
  • The Solana slot is an estimate, not a commitment. Nothing is written to Solana; Slotlock does not interact with any program.
  • Reduces information exposure, not anonymity. Timelock hides content until a time; it does not hide who sent or received the ciphertext, and does not make anyone anonymous.
  • Experimental and unaudited. This page wraps the open-source tlock-js library; neither this page nor its integration has had a security review. Do not rely on it for anything valuable.