Is there a cryptographic technique to achieve a similar result on the internet that does not require trusted infrastructure and could be achieved in a distributed way?
Sort of. Let's consider a poker variant in which each player receives cards from a separate deck of cards. Thus no player may hold duplicate cards, but cards may be duplicated across all hands.
We also assume everyone has an RSA keypair, and the public keys have already been shared.
Then, the protocol proceeds thusly:
- everyone generates two random values A and B.
- everyone signs A and B (separately), and sends/collects these separate signatures of A and B to/from everyone else.
- everyone reveals A and collects A values from everyone else. if any signature does not match, it's a do-over.
- everyone computes A', the sum of all A values.
- everyone deals themselves a hand based on using A'+B as a seed.
- (now nobody knows each other's hand because they don't know other players' B value. also, nobody has been able to manipulate their dealt hand because they did not know what the final A' value would be under after they chose B)
- everyone does the poker business, signing their moves and any revealed public information as required by the rules of our modified poker.
- at the end, everyone shares the B values, which allows verifiying whether someone cheated at any given step.
- anyone who cheated automatically loses to anyone who didn't cheat before they did.
Thus we sort of allow cheating, but work it into the rules of the game in a way that prevents an isolated cheater from ever seeing an advantage to doing so. If the game became scratch in the event that cheating is detected, then players could cheat when they believe they are in a losing position.
The hard part of all this is enforcing the payments on the losing parties.