(很抱歉,这是众所周知的。)我想给代理之一提供一些商品,以便代理以概率获得该商品。是否有一个加密(或其他)工具,以便每个代理人(甚至每个观察者)都可以确信随机抽取确实是公平的?
(很抱歉,这是众所周知的。)我想给代理之一提供一些商品,以便代理以概率获得该商品。是否有一个加密(或其他)工具,以便每个代理人(甚至每个观察者)都可以确信随机抽取确实是公平的?
Answers:
如果我正确地理解了这个问题,这似乎等于是公众抛开了面硬币。如果您承担一点承诺,似乎有很多方法可以做到这一点。一个示例是让每个参与方使用位承诺公开提交给该位字符串,以生成介于0和之间的随机整数。然后,每个代理提交后,他们都会公开披露其秘密整数。这样,获胜者就是一个以为模的整数之和索引的那个。如果甚至一位特工是诚实的,那么翻转必须是随机的。k - 1 k
当然,与此有关的一个问题是它需要一点承诺。用于位承诺的信息理论方案对于经典计算和量子计算都是不可能的(尽管Adrian Kent最近提出了一种利用相对论的方案)。但是,可以通过计算假设来实现安全的比特承诺。
正如其他用户所暗示的那样,这是密码学中一个经过充分研究的问题。它称为“硬币翻转”,是多方计算的一种特殊情况。
实际执行什么协议实际上很大程度上取决于上下文。
只是为了了解它的微妙之处,如果您使用的承诺方案具有延展性,则另一个响应者建议的“每个人都承诺随机值”协议是不安全的。不可否认的承诺方案确实为您提供了安全的协议,但是设计起来有些复杂。
注意:请阅读以下评论。该协议似乎有问题。
我对加密货币了解不多,但以下方法可能会起作用。假设是众所周知的,确定赢家所需要做的就是从[0,1]中选择一个随机数。
任何代理都可以通过随机选择自己均匀的向量来确保所选随机数随机出现。为了使任何观察员信服,他们必须相信至少有一个经纪人遵守了该协议,但如果没有这样做,我想没人会真正想要一个公平的彩票。
被动的观察者无法验证该图是否未上演。可以选择输入伪随机过程以给出所需的结果。
但是,如果观察者可以提供一个他知道是随机的随机数,并确保其他座席之后不会更改其输入(因为他们可以用其输入补偿他的影响),那么他可以确保结果确实是随机的。
这就要求采用承诺方案,我们不知道该方案是否经过数学证明是安全的,但实际上可以使用安全哈希(例如SHA3)来实现。
考虑以下示例:
我已经做了一个示例实现。您可以在此处实时查看它:https : //mrogalski.eu/cl/或在GitHub上查看源代码。