cipher.ink Write a message

A Secret Santa nobody can peek at

Not the organizer, not us. No sign-up and no emails: the draw happens in your browser, and each person gets their own sealed link.

The names are drawn and sealed in this tab. Our server gets only ciphertext and never sees a name.

This Secret Santa generator draws names in your browser and hands each person a sealed link. Nobody can peek at who has whom: not the organizer, and not us. There's no sign-up and no emails are collected. And if anyone opens someone else's link, the owner of that card sees it was opened before.

Type the names, add anyone who shouldn't draw each other, and press Draw names. You get a page with one link per person. Send each link however you like (a chat, a text, a QR code), or print a folded card for everyone and hand them out at the party.

Why the organizer can't see the draw

Every other Secret Santa site shows the organizer a screen of names. Some promise not to look. This one never puts the pairs anywhere a person could read them.

When you press Draw names, your browser picks the assignment, then seals each person's draw into its own card with AES-256-GCM. Each card gets a fresh random key, and that key goes only into the part of the card's link after the #. Browsers never send that part to a server (here is why), so we store a card we can't open. Then the tab throws the pairing away. What you see next is a list of names and their links, never who drew whom.

Could you, the organizer, open everyone's link and read them all? Yes, the links are on your page until you hand them out. That's why the card keeps a count. Before a card records its own opening, it asks the server how many times it was opened before, and tells its owner: "You're the first to open this card", or "This card was opened 2 times before, first on Nov 30 at 8:14 PM." The owner knows whether that was them. It's the same read receipt without tracking every cipher.ink message has, and a chat app's link preview can't trip it, because a preview can't decrypt the card.

Once every card is handed out, press Forget the links. Your page keeps showing who has opened their card, but it can't open any of them, yours included.

The one gap, said plainly

The draw runs in the organizer's browser for about a second. An organizer who opened their browser's developer tools before pressing Draw names and stopped the code mid-draw could read the pairs. No screen shows them, but the code is in a tab you control.

A fully trustless Secret Santa exists. It's the same mathematics as mental poker, dealing cards over the phone with nobody trusted to shuffle, and it needs every person online taking a turn to shuffle and encrypt. For a family exchange that means herding a dozen people into the same five minutes. We chose the version where one browser draws for a second, and told you about it here.

One more, for completeness. The cards, wishlists and notes are sealed, but our web host's access logs record which IP address made each request and when. Someone with those logs and our database could line up the second a note was posted with the second a card was opened from the same address, and guess who's writing to whom. We don't do that, and nothing in the code does. But "we can't see it" is true of what's stored, not of every trace a web server leaves, so we're telling you.

What each person sees

A card opens on the same sealed lock as every cipher.ink message. Press Open my card and the letters resolve into "You're buying for Bob.", then the budget, the date and your note. Below that:

  • Bob's wishlist, if Bob has written one. It's sealed under a key only Bob and his Santa hold.
  • Ask Bob anonymously. A short thread between Bob and his Santa. Bob sees "Your Santa asks: what size are you?" and can answer without learning who asked.
  • Your own wishlist and your own thread with your Santa, who stays a mystery.
  • Unmask, from the gift day on. The Santa can post "It was me, Alice" into the thread. It's a choice, never automatic.

Wishlists and notes are plain text, sealed in the tab before they're saved. The server stores them as ciphertext, next to the time each was written.

Rules you can set

Who can't draw each other. Couples, housemates, siblings who always swap anyway. Put each group on its own line. It works both ways: if Ana can't draw Bob, Bob can't draw Ana. If your rules make a draw impossible, you'll hear exactly why, for example "Ana is excluded from everyone but herself", never a spinner that goes forever.

One big loop. Everyone gives along one chain: Ana gives to Chloe, Chloe to Ed, Ed to Bob, and on until the chain comes back to Ana. Nobody swaps gifts with the person giving to them, and at the party you can do the reveal in a circle.

Are you playing? Pick your own name and you get a card like everyone else. Be honest with yourself about the one gap above, or have someone else press the button.

Every valid draw is equally likely. Pulling names from a hat goes wrong 63% of the time with 10 people, because someone draws themselves. This doesn't. The draw shuffles fairly and throws away any shuffle that breaks a rule, which keeps the result uniform. The mathematics of Secret Santa explains why the obvious fix, "just swap if you get yourself", isn't fair.

Changing your mind

Someone joined or dropped out: on your exchange's page, edit the list and redraw. Every old card stops opening, everyone needs their new link, and wishlists start over. It's over: press End it now and every card, wishlist and note is deleted from the server at once. If you do nothing, the whole exchange deletes itself 30 days after the gift date, and never more than 120 days after you drew it.

Common questions

Do I need everyone's email address?

No. We don't ask for any, and we can't send any. You give each person their link yourself, by message, by QR code or on a printed card.

Someone lost their link. Can you send it again?

We can't: we never had it. If you haven't pressed Forget the links, it's still on your exchange's page. If you have, the fix is a redraw, which gives everyone a new card.

Can the organizer find out who has them?

Not from the screen. The pairs are sealed in the cards and the organizer's page never holds them. An organizer who opens a card leaves a mark the owner sees, and after Forget the links they can't open any. The only way left is the developer-tools gap described above.

Can my Santa see my wishlist before I've opened my card?

Yes, once you've written it. Your Santa's card holds the key to your wishlist and your thread. Nobody else's card does.

Does a group chat link preview count as opening my card?

No. A preview fetches the page, but it can't decrypt the card, so it never records an open. It shows a generic "Your Secret Santa draw" card with no name on it.

How many people can join?

From 3 to 60. An office of 60 draws in well under a second, even with exclusions.

What does the server keep?

Sealed cards, sealed wishlists and notes, how many people are in the exchange, when each thing was written and when it all expires. No names, no pairs, no wishes. The full list is on the security page.

Is it free?

Yes. No account, no ads, no tracking, and no limit on how many exchanges you run, apart from a few per hour to keep bots out.

Further reading

  1. Shamir, Rivest, Adleman: Mental Poker (MIT/LCS/TM-125, 1979)
  2. OEIS A000166: subfactorials (derangements)