以下密码学可预测性是如何发生的?

问题描述 投票:0回答:1

这是场景:

服务器密钥(始终为 40 个字符) Player1 Key(通常为20个字符)(选择为当前游戏中的第一个玩家) Player2 Key(通常为20个字符)(选择为当前游戏中的第二个玩家) Player3 Key(通常为20个字符)(选择为当前游戏中的第三个玩家) 纯文本连接后,将返回 SHA-512。此 SHA-512 的前 13 位数字转换为十进制(从十六进制)。该 Decimal 通过函数传递,大致如下:

function Transform(hash) {
   let d = parseInt(hash, 16);
   const e = Math.pow(2, 52);
   let r = Math.floor((100 * e - d) / (e - d)) / 100.0
   return r * 0.96
}

r的返回值就是赌博结果。不用说,房子总是有优势,但我无法理解其背后的数学原理。

其他一些注意事项:

服务器密钥的 SHA-256 哈希值在游戏前发布。游戏结束后,我验证了所有哈希值,它们都是正确的,包括真实结果和 Transform 函数的输出。

现在,我的问题是,在回合开始前对 3 名玩家没有任何控制权的情况下,庄家如何保持一致的优势?

P.S.:我做了一些挖掘,从高胜率的游戏中获取了服务器密钥,然后从低胜率的游戏中添加了玩家密钥,并且没有任何明显的偏见。

cryptography blockchain sha
1个回答
0
投票

该方案没有内在的密码学优势;这一切都在后处理和规则中。首先,我们来谈谈密码学方面。

可以生成随机值,例如洗一副牌,方法是让每个人(包括服务器)生成一个随机值并使用所谓的 承诺方案 来承诺该值,然后其他所有人都承诺该值比服务器向服务器透露它们的随机值。服务器以确定性方式对这些值(包括其自己的值)进行哈希处理,然后将其用作种子。种子最后会被揭晓,我们可以计算出价值。承诺计划防止任何人在看到其他值后更改其种子,或声称他们提交了与实际不同的种子。

话虽如此,我们在日常生活中使用的安全加密哈希函数(通常是 SHA-2、SHA-3 和 BLAKE2)通常被建模为与随机函数无法区分。因此,鉴于 SHA-512 的前 13 位数字,所有值都被认为出现的可能性相同。所以还有其他一些事情给房子带来了优势。

您会注意到使用了 13 个十六进制字符。这意味着

d
的可能值为 0 到 2^52 - 1。如果 d 为 0,则 r 为 1,结果为 0.96。这意味着这样的游戏是赢不了的,因为没有人能猜出超过 1 且仍低于 0.96 的游戏。注意,如果
d
是最大值,那么结果仍然小于 2^52,这意味着即使 2^52 次中出现 1,你仍然无法战胜赔率。这是因为乘数
0.96
,这给了房子一个优势。

floor
值的使用在这里也很有趣,因为它通过进一步降低
r
的值给房子带来更多优势。请记住,此函数的结果必须比猜测高
0.1
才能使猜测获胜,因此,由于大多数值都很小(哈希输入
0x7ffffffffffff
的结果,即中点,为 1.98),用户将大多数时候他们赢的时候可能赢的很少。

© www.soinside.com 2019 - 2024. All rights reserved.