分布式随机数生成

时间:2008-10-22 00:28:04

标签: distributed random

我想知道N个参与者的网络是否有办法同意随机选择从1到M的数字。 (例如,不受任何参与者的影响)已经通过coin tossing protocol解决了n = 2和m = 2的值。有谁知道任何可以适用于N和M的任意值的解决方案?

3 个答案:

答案 0 :(得分:14)

修改

更好的算法(感谢wnoise):

  1. 每个人都会从0到M-1
  2. 选择一个秘密号码
  3. 每个人都会在他们的号码中附加一堆随机垃圾,并使用安全散列哈希结果
  4. 每个人都告诉其他人这个哈希
  5. 每个人都告诉其他人他们的秘密号码,以及他们附加的随机垃圾
  6. 每个人都会验证数字和散列+ gunk是否匹配
  7. 将所有密码加在模数M中,然后加1以得到最终结果
  8. 作为参与者,我应该对此感到满意,因为我知道我对最终结果有充分的影响 - 最终的数字本来可以是任何东西,这取决于我选择的秘密号码。因此,由于没有其他人可以预测我的数字,他们也无法预测最终结果。

      

    如果有任何方法可以减少来自3M ^ 2的消息,我怀疑广播方法需要吗?

    我认为只有哈希发布必须是广播,但它仍然是O(M ^ 2)。我想唯一的办法就是预先交换数字签名密钥,或者建立一个可靠的通信枢纽。

    Edit2 - 哈希的安全性如何?

    可能的攻击包括:

    1. 如果我可以生成哈希冲突,那么我有两个具有相同哈希值的密码。所以,一旦我知道其他人的秘密号码,我就可以选择要揭示的秘密号码,从而选择两种可能结果中的一种。
    2. 如果我使用PRNG生成我的密码和随机垃圾,那么试图暴力破解我的哈希的攻击者不必尝试每个可能的数字+ gunk,只有每个可能的PRNG种子。
    3. 我使用每个人揭示的数字+ gunk来确定有关其PRNG的信息 - 我可以尝试猜测或强制种子,或者从输出中计算内部状态。这有助于我预测下次会产生什么数字,从而缩小搜索空间以进行蛮力攻击。
    4. 因此,你应该

      1. 使用可信的,不间断的哈希算法。
      2. 使用具有较大种子/状态的加密安全随机数生成器,并尝试从良好的熵源中播种。

答案 1 :(得分:1)

我不知道人们是否有可能就单个号码的随机性达成一致;它应该在统计中。如果许多随机数的统计数据与从here取得的数字的统计数据相匹配,那么我会认为你的数字是随机的,但我不知道网络上的下一个人N + 1。

答案 2 :(得分:0)

这可能不是你想要的,只是为了开始这个线程怎么样 -
选择领导者,让领导者选择号码,将号码分发给每个人。