I have a set of UUIDs that I want to assign to a set of people. I want to deliver these UUIDs to people in a secure manner, such that everyone knows that I do not know which UUID corresponds to which person. I.e., I want it to be publicly verifiable that the assignment process was random and that the delivery process was private, and that no record is kept of the assignments and deliveries. I am having a lot of trouble figuring out how to implement this digitally.

The purpose here is to allow people to prove that they received a legitimate ID for authentication purposes, without revealing who they are in particular when they submit said ID. A real life analogy would be to have people one at a time pick a random slip of paper with their ID written on it from a jar, where everyone can see that the jar owner does not know which ID was picked by each person, and also everyone knows that every person only received one ID.

I toyed with the idea of sending a link to a private webpage via email, where people could then click one of a set of links on said webpage to claim a particular ID, but then I have no way of ensuring that each person claims only one ID without recording some kind of credential to keep track of who has already claimed an ID.

  • 1
    Sounds like ordinary messages sent via a Public Key Cryptography scheme like PGP. Feb 23, 2021 at 22:33
  • 3
    I have no way of ensuring that each person claims only one ID without recording some kind of credential to keep track of who has already claimed an ID. -- That's right; you don't. Feb 23, 2021 at 22:35
  • In the real-life scenario you're using as an analogy, everyone would know who had already picked a random slip of paper - this is the equivalent to storing the identities of those who have already claimed an ID. (recording the fact that they have claimed one isn't the same as recording which one they claimed). Is the analogy wrong? Feb 24, 2021 at 0:02
  • @BenCottrell No, you are correct. I just don't know how to give people the option of making a random selection digitally and also prove that I don't know what selection they made.
    – Ian Knight
    Feb 24, 2021 at 1:44
  • 1
    So you want, lets say, pick 10 different GUIDs, and send them to 10 different persons, but in a way you don't know who of the 10 got which of the IDs, and in a way you can prove that you don't have this knowledge. Is that right? Sounds like an interesting problem. @RobertHarvey: maybe you interpreted the question differently?
    – Doc Brown
    Feb 24, 2021 at 6:18

1 Answer 1


I think the easiest way to achieve this is by having a trusted third-party, let's call it a trust center, who does the random assignments. Lets say you pick all the UUIDs first, encrypt them with a public key where the private part is shared among your receivers (but not the trust center), and send the whole list of encrypted IDs to the trust center. The trust center makes the random assignments, encrypts each encrypted UUID a second time with an indidividual key of the final receiver and forwards this double-encrypted message to them.

The receivers then can doubly-decrypt that message and so obtain the original UUID back. That way, you know the UUIDs, but not who got which ID. The trust center knows the assignment order, but not the UUIDs themselves. The receivers only know their own UUID, but not the UUIDs of the others.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.