How could I make the results of a yes/no vote inaccessible unless it's unanimous in the affirmative, without a trusted third party?

The theory

This could be implemented in several ways, by applying the principle of idempotency.

You want a system that only produces a result (binary 1) if all the inputs are active, that is, it tells you that everybody wants to leave the cult only if everybody has voted yes, otherwise the system must not return any kind of information (binary 0). This is basically an AND relationship between the inputs, as seen in the following table (0 = no/false, 1 = yes/true):

Input: You want to leave the cult.
Output: Everybody wants to leave the cult.

0 0 0 | 0 
0 0 1 | 0
0 1 0 | 0
0 1 1 | 0
1 0 0 | 0
1 0 1 | 0
1 1 0 | 0
1 1 1 | 1 ---> hooray, everybody wants to leave, we can talk about it!

Now, that might not be trivial to implement safely, because you need something that can count (N-1 will not be enough to trigger the result, but N will), and something that is able to count might also be able to leak information about the number of votes. So let's forget about that, and realize that since you are actually dealing with single bits of information (either yes or no, 0 or 1), then you will be able to get valuable information if you just check the opposite (no instead of yes, 0 instead of 1, etc.). So if you check if they want to stay in the cult instead of leaving, and if you check if at least one person want to stay instead of checking if they all want to leave, you get the following truth table where all 1s have been replaced with 0s and vice versa:

Input: You want to stay in the cult.
Output: Somebody wants to stay.

1 1 1 | 1
1 1 0 | 1
1 0 1 | 1
1 0 0 | 1
0 1 1 | 1
0 1 0 | 1
0 0 1 | 1
0 0 0 | 0 ---> hooray, nobody wants to stay, we can talk about it!

Note that now we have an OR relationship between the inputs, which I believe is easier to implement safely, because you just need a system that respond to any input in the exact same way. Such a system would be idempotent: one vote is enough to trigger the output, and any subsequent votes would have no effect. Now, what can we use to implement such a system? The system would need the following features:

  • It must be trusted by everybody. It can't be built or bought by a single member of the family, or by someone else. So I suppose it must be something very simple that everybody can understand and trust. To avoid malicious manipulation of the system, it should also be operated while being supervised by all the members.
  • The voters must not be able to check the output before the experiment is over. This means that the vote must not return any feedback about the current state of the system. For example, blowing out a candle is not safe if you can see it, or feel the heat, or smell anything.

The system

The simplest solution I can think of is something involving an electronic device with an idempotent button, like a remote control to change the channel on a TV. Here's an example of how I would set up the system:

  • Get a device with an idempotent button. It might be a TV with a remote control, providing that changing to channel N always has the same effect no matter how many times you do it (idempotency). Or anything else you have at home, like a button to open a gate (if opening an open gate leaves it open), etc. The important thing though is that the system needs to be trusted by everybody, so if you really want to do everything safely the family might consider buying a new device (going to the mall, all together, and buying a trusted device).
  • Set up the system safely. All the family must be present while setting up the system, otherwise the system might be corrupted by the one who sets it up. In general, the whole family must be present and check all the operations from the beginning to the end of the experiment (like from buying the equipment to throwing it away safely).
  • Avoid any kind of feedback from the system while voting. For example, to change the TV channel, the TV and the remote could be under a huge thick blanket, and to vote you need to slide your hand under the blanket. But the volume should be muted, and maybe you'd better turn on some music in the background, loud enough to not be able to hear any possible buzz or noise from the TV. You might even want to define some delay between one vote and the next, to avoid getting any feedback from the possible heat of the remote control caused by the hand of the previous voter.
  • The voting process should be the same for everybody. During the experiment the other members must make sure the voter is not cheating (like peeping under the blanket, acting strange, etc.), so everybody is present during the experiment. There is a relatively fixed length of time that the voter should be able to stay with their hand under the blanket. Sliding it under the blanket and immediately pulling it out is not considered valid, since that would be an obvious and publicly distinguishable NO vote. From the outside, every vote must look pretty much the same.
  • Test the system before using it for the real experiment. You need to make sure everybody understand the process, votes correctly, and the system responds accordingly. The whole family takes part in several simulated votes for testing the system (simulated votes are fake and publicly known, not secret).
  • At the end, the system must be dismantled safely. Any buttons or parts that have been touched might need to be cleaned carefully, to remove fingerprints. If the family members don't trust the system after the vote, fearing that somebody might be able to extract information from it, all the parts of the system might need to be thrown away.

The vote

Supposing they have chosen to implement the TV-remote-blanket system, what happens is this. "Ok everybody, the TV is on, the current channel is 123. If you want to stay in the cult, change it to channel 0". Each member in turn slides a hand under the blanket and either changes the channel (if they want to stay in the cult), or pretends to change it (if the want to leave). At the end, the blanket is removed and... Channel 123! Then nobody wants to stay in the cult, hooray! ...or ...Channel 0! Then at least one member wants to stay in the cult! Or maybe all of them, there's no way to know.

Final notes

It was fun trying to think of a solution to this problem, but I consider this more of a thought experiment than a real security question. The problem is that the threat model is incomplete, because I don't think this scenario can actually make sense in a family where all the members are part of a cult. Cult members are brainwashed and paranoid by definition. They might not even trust a store to buy a new TV or a remote control, thinking anyone they don't already know (including any sellers) might be "enemies". It is definitely possible to set up a system without any electronic devices, using only simple objects like candles, pots, water, ropes, etc. That stuff might be easier to trust, compared to a black-boxed electronic device, but it might also be harder to make such systems work reliably. I'm also wondering: if a member of the family suggests that a vote is needed, isn't that suspicious? Why should a member of the cult want to know if everybody in the family wants to leave? Chances are the one who proposes this system is the one who wants to leave. Or this might all be a trap to find out who wants to leave.


This sounds like a classic case for cryptographically secure Multi-Party Computation.

The functionality to be realised using SMPC would be an AND tree-reduction which requires N-1 AND gates and has a depth of about log_2(N) AND gates with each "yes" vote being a truthy (1) input to the circuit and each "no" being a falsey (0) input.

The simplest solution for this would likely be to use the GMW SMPC protocol which allows for N-1 parties to work together without leaking any secret information. There is also a variant that allows for at most N/2 persons to deviate from the protocol.

The basic flow of the protocol is as follows:

  1. Each party has a 1-bit input and chooses N-1 random bits and computes the XOR of the random bits with the input bit. Then one random bit is distributed to one other party each and the owner keeps the XOR of the random bits and the inputs.
  2. Then the circuit is evaluated gate-by-gate which gives everyone an XOR-random share of the output value of that gate. XOR gates can be computed locally by simply XORing the shares of the input values. AND gates require an interactive protocol, which is a bit complicated, so I'll refer you to the (formatted) paper for that: "How to Play any Mental Game" by Goldreich, Micali and Wigderson (STOCS'87; PDF).
  3. At the end (after all the gates have been evaluated) everyone broadcasts their share of the output bit so that everyone can locally XOR them together.

Overall the above GMW protocol will require N * (N-1)/2 1-out-of-4 Oblivious Transfers from each party which should be somewhat efficiently computable for any reasonably-sized "family" and might not even require fancy techniques like OT Extension for this small number of participants.

As for software, MP-SPDZ seems to be a good starting point to look for implementations (as well as the awesome-mpc list). Though note that you will mostly find more advanced schemes there.


A very low-tech method: give each voter a card with a hole punched in one end, offset from the center. Make a container that holds the cards, and has a hole punched through it that lines up with where the hole in the card would be if entered face-up. Everyone votes by placing their card in the container face-up for yes, face-down for no (with the box suitably concealed to prevent anyone from seeing the votes themselves). A rod is then inserted through the hole in the container. If everyone voted yes, the rod falls through. If at least one person voted no, the rod will be stopped.