在这一页
轮盘赌(加密版)
在这一页
简介
本页介绍的是加密版轮盘赌,通常在基于加密货币的赌场进行。我假设读者已经熟悉传统轮盘赌的基本规则。
公平公正的赌场
Bonus Code
SPOOKTOBER
分析
在 Crypto.Games 的游戏中,轮盘赌采用单零轮盘,这在在线赌场中很常见。每次投注的庄家优势为 1/37 = 2.70%。公平游戏
以下关于密码学应用的解释假设读者对相关术语和概念有所了解。有关基础知识,请参阅我的“骰子(加密版)”页面。以下是 Crypto.Games 上的轮盘游戏如何生成 0 到 37 之间的随机数,并将其用作游戏结果。
- 与往常一样,游戏会公开下一次下注的服务器种子的哈希值,并让玩家选择自己的客户端种子。
- 玩家下注,就像在传统轮盘赌中一样。
- 游戏将按顺序组合服务器和客户端种子。
- 游戏将采用步骤 3 中组合种子的 SHA-512 哈希值。
- 游戏将从第 4 步开始,将 Hash 中的两个字符从十六进制转换为十进制。
- 取步骤 5 中十进制数的末两位数字。
- 如果步骤 6 的结果为 0 到 36,则将其用作轮盘赌结果。
- 如果步骤 6 的结果为 37 或更大,则在哈希中前进两个位置并返回步骤 5。
例子
首先,我会进入上面的公平游戏界面。然后输入任意客户端种子,随机的字符即可。接下来,你需要复制粘贴以下两点:
- 您的客户种子
- 下一个服务器种子哈希,其标记为“下一个服务器种子 SHA256”。
是否添加 Nonce 完全由您决定,Nonce 是自动添加到客户端种子末尾的额外字符。我认为,如果赌场有意作弊,添加 Nonce 并不能提供任何保护。
在我们的例子中,这是您应该保留的证据。
下一个服务器种子哈希 = e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a 客户端种子 = b0x6vb0v6TYUIQWF6b0sd6f0y
接下来我进行了下注,如上图所示。我在这里下注了10个筹码,每个筹码价值0.000001 BTC(比特币),总共下注0.00001 BTC(约合10美分),押注红色。
结果是7红,所以我赢了。
接下来,我会按照以下步骤来验证结果。在现实生活中,我只会在输钱时才会纠结这个问题。如果赌场想作弊,我可能就输了。
- 我按以下顺序加入服务器种子和客户端种子:sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMTb0x6vb0v6TYUIQWF6b0sd6f0y
- 我采用步骤 1 中组合种子的 SHA-512 哈希值:
40cf0126a307d4d72900279d330499f6a5447c35ed838d6ec3fd2b53872df73ccac001686ddf05e024c5899205afa9d0551b5e19b8397af180f6de06aea429ac
- 我取前两个字符,即40。
- 我将十六进制的40转换成十进制:4*16 + 0*1 = 64。
- 步骤4得到的十进制结果有两位数,所以我就不去管它了。否则,我就取最后两位数了。
- 64 大于 36,因此它不会作为轮盘赌的结果。
- 我在 Hash 中前进了两个字符,它们是 cf。
- 我将 cf 转换为十进制:c*16 + f = 12*16 + 15*1 = 207。
- 由于 207 有两位以上的数字,所以我取右边的两位,即 07。
- 由于 7<=36,所以这成为游戏的结果。
- 接下来,我检查下注前给我的服务器种子哈希(以 e7043 开头)是否与上次下注的服务器种子匹配。出于某种原因,该赌场选择使用 SHA-256 函数对其进行哈希处理,而不像 SHA-512 那样使用哈希处理组合字符串。
- 在这种情况下,sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMT 的哈希值确实为 e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a,这确保了赌场对最后一次赌注的贡献是注定的。
如果这一切听起来太麻烦,我写了一个程序来帮你完成。使用方法如下:
- 转到PHP 沙盒。
- 在第 4 行输入客户端种子。
- 在第 5 行输入服务器种子。
- 在第 6 行输入下一个服务器种子的哈希值。
- 单击“执行代码”。
- 验证游戏结果,确认服务器种子哈希值是否与下注前提供的哈希值一致。如果不匹配,则表明您被骗了。
我还有一份代码副本,您可以点击下面的按钮查看。
[剧透]
// Crypto.Games 的轮盘游戏转换 // 在第 4 行输入客户端种子,在第 5 行输入服务器种子。 $client_seed =“b0x6vb0v6TYUIQWF6b0sd6f0y”; $server_seed =“sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMT”; $next_hash =“e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a”; $color_array = 数组(0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,2,1); $位置=0; $combined_seed = $server_seed.$client_seed; echo "组合种子 = $combined_seed\n"; $combined_hash = hash('sha512', $combined_seed); $server_hash = hash('sha256',$server_seed); echo“组合种子的哈希值=$combined_hash\n”; 做 { $first_two=substr($combined_hash,$position,2); $hex_to_dec=hexdec($first_two); $hex_to_dec%=100; 如果 ($hex_to_dec-->36) { $位置+=2; } } 当 ($hex_to_dec>36) 时; echo "服务器种子的哈希值 =\t $server_hash\n"; echo "游戏结果 =\t$hex_to_dec "; 如果 ($color_array[$hex_to_dec]==0) { 回显“绿色\n”; } elseif ($color_array[$hex_to_dec]==1) { 回显“红色\n”; } 别的 { 回显“黑色\n”; } $server_seed_hash=hash('sha256', $server_seed); 如果 ($server_seed_hash==$next_hash) { echo "服务器种子匹配.\n"; } 别的 { echo“服务器种子不匹配!\n”; echo "服务器种子 =\t$server_seed\n"; echo“服务器种子哈希=\t$server_seed_hash\n”; echo“所谓的下一个哈希=\t$next_hash\n”; } // 程序 // 1. 将 Position 设置为 0。 // 2. 按顺序加入服务器和客户端种子以及服务器种子。 // 3. 生成步骤 2 中字符串的 SHA-512 哈希值。 // 4. 从步骤 3 中的哈希“位置”开始,将前两个字符从十六进制转换为十进制。 // 5. 如果步骤4中的值变为0到36,那么这就是游戏结果。 // 6. 否则,将位置前进 2 并转到步骤 4。 ?>[剧透]