I still don't get it why is this provably fair.
Let's take for example the minesweeper. The way you are explaining it is too confusing for me.
"Prior to every play round, we show you both your secret string and a hash containing encoded shuffle data our server generated. After each play round we show you the strings from this hash. By combining these with your computers string and the hash, you can succesfully decode the complete shuffle and thus verify the legitimacy of the round."
In this example:
client seed: 7d12b0c212717696298ddb53f3d6910a230d2b582d2a20e893121e9118bb78a9
hash secret: 96396a01cc90b32589b876d0846b357fe242dfd7670a24457bf49f9861767ed3
server seed: 4048ff404b974156c713ea0055eaad5d9fe94fadd477b95ab3a0240d5ac9bd2c
initial shuffle: 1|1|1|1|1|4|2|2|2
final shuffle: 2|1|1|1|2|1|1|2|4
What should I hash and how to verify exactly? Because I tried to "combine" them, but never got the hash... So either something is wrong, either you need to be more clear about how one can EXACTLY check (not using your software of course )
It can be a bit complicated at first glance, definitely if you want to manually decode it, but it's possible.
So before the hand starts, you get the client seed and the hash secret.
After the hand ended, you get the shuffles (the actual outcome, in this case positions of where the bomb was) and the server seed.
Let's go over it;
First the hash secret; to verify it's legit, take the server seed + initial shuffle, so 4048ff404b974156c713ea0055eaad5d9fe94fadd477b95ab3a0240d5ac9bd2c1|1|1|1|1|4|2|2|2 and SHA-256 it, you can do this anywhere online, for example here
http://www.xorbin.com/tools/sha256-hash-calculatorYou'll see that the outcome is 96396a01cc90b32589b876d0846b357fe242dfd7670a24457bf49f9861767ed3. As this hash was given to you before you played the hand, it proves you that the initial shuffle was not altered at any time.
As you may know we shuffle twice, first the initial shuffle and then a final shuffle using the Fisher-Yates shuffle (
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) algorithm, to do this shuffle we use the client seed. Now the client seed is something that we randomly generate for convenience, but you can actually alter this yourself to any string before every play. The client seed is basically a virtual version of "cutting the deck", and depending on your client seed it will "cut" differently.
So to check if the final shuffle matches our outcome, we take the client seed + server seed and add them together, SHA-256 them again and take the bottom 32 bits. The result of that we use as our final seed for our shuffle.
When we use this seed combined with the initial shuffle, and shuffle it using Fisher-Yate, we get the final shuffle.
You could do this manually, or use this open source code we've written:
http://jsfiddle.net/VYuH2/4/As you can see here it is put in the javascript verified (which you can see in the source code, we even commented to show people how it works):
https://satoshibet.com/provably_fair?client_seed=7d12b0c212717696298ddb53f3d6910a230d2b582d2a20e893121e9118bb78a9&hash_secret=96396a01cc90b32589b876d0846b357fe242dfd7670a24457bf49f9861767ed3&server_seed=4048ff404b974156c713ea0055eaad5d9fe94fadd477b95ab3a0240d5ac9bd2c&initial_shuffle=1|1|1|1|1|4|2|2|2&final_shuffle=2|1|1|1|2|1|1|2|4&game_type=bombs