发布时间:2025-02-24 12:16:10 点击量:
HASH GAME - Online Skill Game GET 300
Eve用一个程序自动试算FakeNumber的值,因为哈希函数正向快速的特点,利用彩票模型A的开奖算法立即计算出了一个开奖号码。程序会检查这个开奖号码是否在Eve事先购买的这1000个号码之中,如果不在,就改变FakeNumber中的数字,再次重复以上过程。大约经过20000次这样的尝试计算之后,Eve几乎必然可以找到一组特定的FakeNumber的值,能使最终的开奖号码落入他事先购买的1000张彩票号码之中。
根据哈希函数不可逆的特点,我们对任意数据进行哈希计算,可以得到一个无法事先预知的哈希值。比如,我们对字符串数据something_1进行哈希计算可以得到一个哈希值7c8bbe46d8aa1b364e2867f08f6c8f8d5bae8ce156610bad492629cd396f4921,如果我们想要找到一个字符串,要求它的哈希值是以0开头,应该怎么办呢?只存在唯一的方法,就是计算不同输入数据的哈希值,只要尝试的次数足够多,从概率上来说,在这些结果中就一定能找到满足要求的值。为方便起见,下面的示例通过在something_后面添加自然数n来改变输入数据字符串。
我们把引入了确定性时延算法的开奖算法称之为彩票模型B。如下图所示,在计算得到彩票池原始数据的哈希值origin_hash_sum之后,并不立即把它映射到开奖号码,而是要求找到一个最小的自然数n,使字符串origin_hash_sum+n的哈希值小于一个约定的DIFFICULTY值。寻找满足要求的n值是一个确定性时延算法,它必须消耗一段符合我们期望长度的时间。最后,把找到的n值和origin_hash_sum作为参数,映射到最终开奖号码。
随后Bob用SHA3-256函数工具(这是一个标准哈希函数,可使用在线工具或其它含有该函数的软件工具)计算了lottery_model.data的哈希值,发现得到的值跟彩票中心之前公布的那个值相等。因为这个文件包含有他在11:59的彩票购买记录,而他在12:03见到了这个文件的哈希值,于是Bob可以断定这个文件的形成时间只可能介于11:59-12:03之间。我们看到4.2节 Alice也进行相同的验证。
Bob继续选取0-156229769范围内的任意值作为n值,使用以上同样的方法计算,发现其对应的哈希值都大于DIFFICULTY值0000000F。Bob知道其它人也可以选取这个区间的任意值甚至全部的值都进行类似的验证,因此Bob可以相信156229769的确是满足DIFFICULTY值要求的最小n值,这意味着在计算最终开奖号码的过程中,确定性时延算法至少进行了156229769次这样的哈希运算。在现实中的硬件条件下,这个运算量必然会消耗一定长度的时间(可能在30分钟左右)。
通过对现实世界中硬件算力的测算,我们在确定性时延算法中约定的难度值期望30分钟时间,在示例代码中实际消耗时间为34分钟,这是因为要找到满足DIFFICULTY值要求所对应的输入值这件事情本身固有的不可预测性所致。为了使确定性时延算法的预期时间更加平稳,改善开奖时的体验(没有改变安全性),可以对彩票模型B的Step2中的确定性时延算法作如下改进:“找到使oringin_hash_sum+n的哈希值小于DIFFICULTY值的最小的自然数n”改为