如何提前创建一个公开可见的、可证明的随机种子? (可验证的随机数)

How to create a publicly visible, provably random seed ahead of time? (Verifiable random number)

假设您正在主持一场有 n 名参与者的辩论,您希望以完全随机的方式将他们分成两半。

可以通过创建一个参与者列表,随机调整该列表,然后强制第一个 n/2 参与者作为一个团队进行辩论。

但是,如果这场辩论特别重要,我们希望确保我们创建的团队以公开可见的方式 可证明 随机。我们希望能够证明我们创建的团队不是任何人的决定的直接结果。有没有办法做到这一点?

我认为这个问题归结为为基于特定时间世界状态的随机数生成器创建种子的问题,但我不确定。这是软件工程师以前解决过的问题吗?API 有解决这个问题的方法吗?

您可能想到的是 verifiable random numbers,它们是使用数据生成的随机数,这些数据将与验证它们所需的所有信息一起公开。据我所知,实践中可验证随机数的最多产使用是在互联网工程任务组提名委员会(或简称 NomCom)的选择程序中。 RFC 3797 描述了这个选择过程,以及可验证随机选择的一般工作原理。

另一个相关技术是可验证延迟函数,这是一个需要花费大量时间来计算的函数(例如,将公开披露的数据散列到random-looking number) 但很容易验证输出是否正确。这在两部作品中有描述,其中包括:

  • Lenstra, A.K., Wesolowski, B. "A random zoo: sloth, unicorn, and trx", 2015(在创造这个概念之前)。
  • Boneh, D.、Bonneau, J. 等人。 "Verifiable Delay Functions", 2018.