{"id":9981,"date":"2018-12-16T13:00:00","date_gmt":"2018-12-16T13:00:00","guid":{"rendered":"https:\/\/coinpoker.com\/?p=9981"},"modified":"2024-09-26T11:52:01","modified_gmt":"2024-09-26T11:52:01","slug":"advanced-transparent-rng-guide","status":"publish","type":"post","link":"https:\/\/coinpoker.com\/advanced-transparent-rng-guide\/","title":{"rendered":"The Advanced Guide to Transparent Card Shuffling on CoinPoker"},"content":{"rendered":"\n
Until now, online poker rooms have been secretive about their card shuffling software. Players have been unable to verify that these closed systems shuffle the cards in a truly fair manner, and is something CoinPoker\u2019s Transparent Card Shuffler was built to change.<\/strong><\/p>\n\n\n\n Using one-way cryptographic hash functions, CoinPoker\u2019s new card shuffler makes it possible to safely disclose information about the shuffling process, and give you the ability to:<\/p>\n\n\n\n Before diving into the technology behind transparent card shuffling, have a look at our brief tutorial to help you test it out for yourself!<\/p>\n\n\n\n If our transparent card shuffler is totally new to you, we suggest you start by checking out our basic guide with screenshots here.<\/strong><\/a><\/p>\n\n\n\n Step 1:\u00a0<\/strong>In order to prove the fairness of the hand, you will need to access the one-way hash functions mentioned earlier. You will find these by clicking on the\u00a0RNG Shuffle Order\u00a0<\/strong>link in the bottom inside the Hand History Tab.<\/p>\n\n\n\n Step 2<\/strong>: Here you will find a long list of hash sequences. The first section will be for each card in the initial deck order, followed by the encrypted seeds from each player and CoinPoker, and lastly the hashes of each card in final deck order.<\/p>\n\n\n\n Think of the numbers listed under shuffled hashed deck<\/em> as their position in the deck, and each player hash as their encrypted \u201cshake factor<\/strong>\u201d submitted at the start of the hand.<\/p>\n\n\n\n Step 6<\/strong>: This data is useless without the\u00a0Validation Tool<\/strong>, which you can access by clicking on the link at the top of the window.<\/p>\n\n\n\n Step 7<\/strong>: The next step is validating the hand, which can mean one of two things depending on whether you would like to:<\/p>\n\n\n\n For Option 1:<\/strong><\/em><\/p>\n\n\n\n Enter the encrypted seeds or \u201cshake factors\u201d as we\u2019ve been calling them into the\u00a0Validation Tool<\/strong>. These are marked by the blue arrows. The outputs will be the \u201ccollective shake factor\u201d or\u00a0combined hash,\u00a0<\/strong>and the\u00a0final deck order.<\/strong><\/p>\n\n\n\n If they match, then you have successfully verified your participation in the shuffle!<\/p>\n\n\n\n For Option 2:<\/strong><\/em><\/p>\n\n\n\n Choose one of the dealt cards (these will have both a hash <\/strong>on the left and the encrypted hash function<\/strong> on the right. Enter the hash inside the function of the right in the Card Validation section. The output should be the hash listed to the left in CoinPoker, as well as the correct card value.<\/p>\n\n\n\n Step 8<\/strong>: Have fun exploring undealt card and proving your participation in online poker\u2019s first decentralized RNG system!<\/p>\n\n\n\n The Advanced Explanation: How CoinPoker\u2019s Transparent RNG Works<\/strong><\/p>\n\n\n\n Imagine the deck of unshuffled cards as follows: 2c, Qd, Kh<\/strong><\/p>\n\n\n\n In reality, there would be a permutation of 52 cards, but to get an idea of how this process works, we will limit the number to three. Using this deck order, CoinPoker will create the initial deck<\/strong> and share it with all players at the table in the following steps.<\/p>\n\n\n\n CoinPoker runs its RNG using a secret value, which we will refer to as a seed<\/strong>. This value only exists temporarily and is simply used to get the process started.<\/p>\n\n\n\n CoinPoker uses this random seed to generate a salt value; <\/strong>random data that acts as a password or passphrase for one-way cryptographic functions. This is combined with a card to create a hash<\/strong> for each card in the deck. Using the three cards mentioned earlier, the formula would look a little like this:<\/p>\n\n\n\n Note<\/em>: The hashes aa, bb, and cc are simplified for the sake of representation. In reality, they are 256-bit strings and a little trickier to work with; at least for humans.<\/p>\n\n\n\n CoinPoker shuffles the hashed deck from Step 2 using the random seed from Step 1.<\/p>\n\n\n\n CoinPoker sends this hashed deck (as a vector including all the card hashes in the initial deck order) to each player.<\/p>\n\n\n\n The purpose of using the hashes is to make it possible to reveal certain cards from the deck and allow players to verify them, without exposing others that should be kept hidden (i.e. mucked hands). Now all the players have in their possession the list of hashes that reveals initial deck order.<\/strong><\/em><\/p>\n\n\n\n The next steps cover how the initial deck is transformed into the final deck using input from players, which is combined with CoinPoker\u2019s input to form a collective input (a.k.a. aggregate seed). Again, these are referred to as seeds.<\/em><\/strong><\/p>\n\n\n\n Again, for the sake of simplifying the complexity of this process, imagine that there are two players at the table. Let\u2019s call them Alice and Bob.<\/p>\n\n\n\n Alice and Bob now need to calculate a hash of their seed to send to CoinPoker. The formula will look a little like this:<\/p>\n\n\n\n CoinPoker generates a new seed, so not the one from Step 1. This random seed is used to create a hash: Hash(CoinPoker\u2019s_seed) = ZZ<\/strong><\/p>\n\n\n\n The player hash seeds, as well as CoinPoker\u2019s, are then compiled into a list of commitment seeds<\/strong>: [XX, YY, ZZ].<\/p>\n\n\n\n CoinPoker sends a vector of commitment seeds to Alice and Bob.<\/p>\n\n\n\n After receiving the commitment seeds, Alice and Bob send their real seed from Step 5. This is the seed that was used to create the hashes. So Hash(Alice\u2019s_seed) = XX and Hash(Bob\u2019s_seed) = YY<\/strong>.<\/p>\n\n\n\n The real seeds are then used to create an aggregate seed<\/strong>. This new seed takes into account all player seeds as well as CoinPoker\u2019s resulting in a value that the entire table has contributed to.<\/p>\n\n\n\n Hash(Alice\u2019s_seed + Bob\u2019s_seed + CoinPoker\u2019s_seed) = aggregated_seed<\/strong><\/p>\n\n\n\n CoinPoker uses the aggregate seed to shuffle the initial deck. The hash for the final deck is then distributed to all places. Note that this is the final deck used until the hand is completed.<\/p>\n\n\n\n Initial Deck: Qd, Kh, 2c \u2192 RNG with aggregated_seed \u2192 Final Deck: Kh, 2c, Qd One of the key advantages of using cryptographic hash functions is that we are able to safely disclose information about the shuffle, which can later be used to prove if the shuffle was fair. We call this the RNG Validation Tool, and we\u2019ll continue the steps to help you understand how it works.<\/p>\n\n\n\n Note that neither Bob or Alice know each other\u2019s real seeds<\/strong>, and only have access to their own real seed. What they do have access to are all the seed hashes of other players and CoinPoker (remember Steps 8 and 9<\/strong>).<\/p>\n\n\n\n After the hand is played, players receive the real seeds of all participants, which they can use to verify their participation in the final deck shuffle, as well as the randomness of the cards.<\/p>\n\n\n\n First, players need to take each real seed and use it to verify if the hash value they have is correct. They do this by plugging in the real seed into the hash formula, checking if the outcome matches the actual value they received.<\/p>\n\n\n\n If Hash(Alice\u2019s_seed) actually equals XX<\/strong> then it is verified as correct<\/p>\n\n\n\n Once all the real seeds from players and CoinPoker are used to verify the hashes, players can also check if the aggregated_seed is correct by plugging in the missing values into a hash function:<\/p>\n\n\n\n Hash(alice_seed + bob_seed + server_seed) = aggregated_seed<\/strong><\/p>\n\n\n\n Now that the aggregated seed is verified as correct by each player, Alice or Bob can reverse the RNG function. By plugging in the final deck hash and aggregate seed to compute the initial deck, players can check if it results in the same initial deck order that they received in Step 4.<\/p>\n\n\n\n If the result matches the initial deck hash order, then the player has successfully proven that they participated in shuffling the final deck.<\/p>\n\n\n\n Proving participation is just the start. Players can also verify the randomness of the cards in the final deck. This can be done for all community cards and hands revealed by other players (so no Mucked hands), but for the sake of explaining we will show you how you can verify the fairness of the first two cards:<\/strong><\/em><\/p>\n\n\n\n Once the hand is over, players receive (in addition to all the real seeds) the salts and values of the first two cards dealt. Note that card values and salts were used in the Hash function from Step 2:<\/p>\n\n\n\n Hash(Kh<\/strong>+salt3<\/strong>) = cc<\/p>\n\n\n\n Now that Alice and Bob have values for all the variables in the hash function, they can reverse it to confirm if the Kh was the actual first card in the final deck shuffle received in Step 12.<\/p>\n\n\n\n If Hash(Kh+salt3)<\/strong> results in cc<\/strong>, then the player confirms that the final deck hash cc<\/strong> is correct. This can be done for any revealed cards on the table.<\/p>\n\n\n\n In the case of undealt cards or mucked hands, players will not receive a card value or salt. They will have access to the hashes, but won\u2019t be able to use this method to reveal them.<\/p>\n\n\n\n In the spirit of transparency, we are also offering 1,000,000 CHP<\/strong> to anyone who can prove the transparent card shuffling system faulty. For more details on bounty conditions and how to claim, view our official Bug Bounty page here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":" Until now, online poker rooms have been secretive about their card shuffling software. Players have been unable to verify that these closed systems shuffle the cards in a truly fair manner, and is something CoinPoker\u2019s Transparent Card Shuffler was built to change. Using one-way cryptographic hash functions, CoinPoker\u2019s new card shuffler makes it possible to … The Advanced Guide to Transparent Card Shuffling on CoinPoker<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","inline_featured_image":false,"footnotes":""},"categories":[184],"tags":[],"class_list":["post-9981","post","type-post","status-publish","format-standard","hentry","category-announcements"],"acf":[],"_links":{"self":[{"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/posts\/9981"}],"collection":[{"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/comments?post=9981"}],"version-history":[{"count":4,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/posts\/9981\/revisions"}],"predecessor-version":[{"id":88138,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/posts\/9981\/revisions\/88138"}],"wp:attachment":[{"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/media?parent=9981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/categories?post=9981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coinpoker.com\/wp-json\/wp\/v2\/tags?post=9981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}\n
How to Use the Validation Tool to Prove Participation<\/h3>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
Step 1<\/strong><\/h3>\n\n\n\n
Step 2<\/strong><\/h3>\n\n\n\n
\n
Step 3<\/strong><\/h3>\n\n\n\n
\n
Step 4<\/strong><\/h3>\n\n\n\n
Step 5<\/strong><\/h3>\n\n\n\n
Step 6<\/strong><\/h3>\n\n\n\n
\n
Step 7<\/strong><\/h3>\n\n\n\n
Step 8<\/strong><\/h3>\n\n\n\n
Step 9<\/strong><\/h3>\n\n\n\n
Step 10<\/strong><\/h3>\n\n\n\n
Step 11 <\/strong><\/h3>\n\n\n\n
Step 12<\/strong><\/h3>\n\n\n\n
(Hashes<\/strong>: cc, aa, bb)<\/strong><\/p>\n\n\n\nHow the RNG Verification Tool Works<\/strong><\/h2>\n\n\n\n
Steps 13-18: Verifying Player Impact on the Shuffled Deck<\/strong><\/h3>\n\n\n\n
Step 13<\/strong><\/h4>\n\n\n\n
Step 14<\/strong><\/h4>\n\n\n\n
Step 15<\/strong><\/h4>\n\n\n\n
Step 16<\/strong><\/h4>\n\n\n\n
Step 17<\/strong><\/h4>\n\n\n\n
Step 18<\/strong><\/h3>\n\n\n\n
Expert Explanation and the 1,000,000 CHP Bug Bounty<\/h2>\n\n\n\n