I built PIKO Legacy, a dead man’s switch on the Internet Computer. You write a message or important information (a letter, where documents are, instructions for your family) and name up to 5 people. If you stop checking in for the period you choose (1 to 12 months), each of them can open it with a private link. Before that, nobody can read it.
Everything is encrypted in the browser before upload:
message --AES-GCM(K)–> ciphertext (stored once)
K --AES-GCM(inner_i)–> --IBE(vault identity, vetKD key)–> wrappedKey_i (one per recipient)
Lock 1, the link. Each link carries 32 random bytes in the URL fragment, which is never sent to a server. The inner key is derived from it. The canister only stores SHA-256(SHA-256(“claim” || s)), so it can check a link without learning it.
Lock 2, vetKeys. The IBE layer is encrypted to the vault’s identity. The canister only calls vetkd_derive_key once now >= lastCheckIn + interval, and the key goes back encrypted to the recipient’s one-time transport key.
A leaked link opens nothing before the deadline, and a compromised canister opens nothing without the link. Release is computed from the clock, not by a timer, and it’s final: check-ins are refused after it.
Details
The browser re-derives the canister’s vetKD public key offline from the IC’s key_1 master key, and refuses to encrypt if they differ.
Opens are capped (3 per link, 10 per vault) because each one costs a key_1 derivation (~26B cycles).
There’s a built-in PIKO wallet (receive, send). The one-time 1,000 PIKO fee goes 50/50 to the PikoDice and PikoBlackjack bankrolls. Cycles come from PIKO’s mining-funded top-up loop.
Limits: 5 recipients, 32 KB of text, 10 vaults per user.
Open source and verifiable: the backend build is reproducible. icp build legacy gives the same hash as the live canister’s module hash, so you can check that the code running is the code you read. The README has the exact commands.
Trust model, honestly: stored vaults can’t be read by anyone. The frontend, though, is still upgradable by me, and you trust it at the moment you write. Blackholing is the plan. Until then, treat it as a delivery mechanism, not as the only copy of something irreplaceable.
Built with Motoko and @dfinity/vetkeys. Feedback on the scheme is very welcome, especially from anyone who has worked with vetKeys.