Self-Study | Rock-scissors-paper game with Two-round protocol: When concurrency is not a factor of the game.

Kambria @ www.kambria.io
Kambria Network
Published in
4 min readDec 11, 2017

Rock-scissors-paper game is a well-known game in the world. When two people play this game, the important thing is that both of them have to disclose their selection concurrently. However, it seems infeasible to create something concurrent with smart contract and make it work.

This case study is good for brainstorming Ethereum Privacy and in my point of view, Ethereum Privacy will be the next challenge of Ethereum community after Ethereum Scalability.

The game

In Rock-scissors-paper game, concurrency helps two people, who try to compete the other, to hide their selection and be impossible to change it when disclosed. In summary, we need a protocol that assures 2 factors:

  1. Two competitors cannot gain any knowledge about the selections in advance.
  2. At disclosing phase, two competitors cannot change their selection.

Fortunately, Two-round protocol is the solution we are looking for. Two-round protocol has two main phases. The first one, submitting phase, each member of game must submit their hash of selection and wait for the competitor submitting. Coming to disclosing phase, after 2 competitors submitted their hash of selection, they can submit their raw selection without any encryptions. Both of them must calculate again the hash of the other’s selection to make sure it not changed.

As you can see, submitting phase helps 2 competitors take the proof of competitor’s selection without any knowledge about the real selection. Finally, the disclosing phase is the phase that verifies the selections and decides who would win.

At this moment, if you’re a type of sensitive person :) you will see that it owns a big problem here.

Problem: Assume the selection is presented as a string and has one of three values which are rock, scissors, paper. So the hashes (Keccak256) of them are:

https://gist.github.com/sontuphan/c79a17a7d1cacfbb0a35353043b7a0f1

The hash is actually irreversible but the number of values is two small, so they can make a bruce-force attack easily.

Yeah, there you are 👉. The content above is just a kind of warming-up and this problem is actually what I would like to brainstorm and understand how fun of privacy.

Privacy problem of rock-scissors-paper game

To solve this problem, we need a thing that totally hides the decisions but still assures that would be unchangeable. It may have a lot of solutions but in this article, I just have presented two solutions I got.

One solution bases on mathematic and it uses modulo in detail. The other bases on an idea used in zkSNARK, it uses secret number (Note that it’s not a zkSNARK instance).

The solution bases on mathematic

Let’s change the game a little bit. We won’t use rock, scissors and paper to present the selections any more. Instead of that, we will use n with mod(3) = {0, 1, 2} as {rock, scissors, paper} respectively. And the important thing that n is a secret-random number.

Assume that Victor chooses rock, in order to do that he has to choose random n so that n mod(3) = 0.

For example:
n = 13714425016816510474524816299716591239769767123746972631
n mod(3) = 0

In submitting phase, Victor hashes n and submits this hash to smart contract. Obviously, Alice has no idea which number Victor chose and submitted by the bruce-force attack. To verify Victor’s selection, Alice just only gets Victor’s nat disclosing phase and make a verification.

The solution is based on secret number

If you have never gotten any knowledge about zkSNARK, you can take a look at my previous article here.

And the idea using secret number is in “Zero-knowledge proof with a game for computers” part.

In this solution, we don’t need to change the original game but we would change the protocol.

Every time Victor or Alice wanna submit their hash of selection, they have to pick a secret-random number s and from now, the hash is the hash of combination of the selection and s. At disclosing phase, Victor and Alice have to disclose secret-random number s as well as their selection to be possible to verify each other.

For example:

https://gist.github.com/sontuphan/b70bafb0e21fcef401a551d7b0120b31

As you can see, it is infeasible to Alice bruce-force the secret number which Victor chose. Otherwise, what’s happen if Victor wanna change his selection? When Victor changes his selection, he also finds another secret number s so that new hash of combination is the same as submitted hash of original combination. Theoretically, it is impossible to Victor as well.

Conclusion

In addition, privacy is not only needed to medical documents, KYC systems… but also games on blockchain. In every field, privacy is existed in different forms but the importance of privacy is undeniable.

Originally published at Kambria.

--

--

Kambria @ www.kambria.io
Kambria Network

We're redefining and turbocharging the innovation process to scale broad social impact on a multitude of verticals. More @ www.kambria.io