如何做一个有公信力的随机数服务?

2013-12-28 16:22:15 +08:00
 horsley
前面的风风火火的送Air事件,规则制定问题引起我的思考。
突然想做一个提供随机数的网站,网上有random.org但那是提供制定参数并产生随机数的服务,这不是我想要的。

看看我们的抽奖,都是需要一个类似于随机数的东西,但是要保证有公信力这个随机数一般来源于我们所不能直接有效控制的东西,例如双色球开奖结果。但是双色球一周才开3次。

于是我想了一些办法,核心是找一种东西(属性是:大家可以方便获得,大家能够获得同样的结果,大家不能控制,下面称:随机源),然后做sha1 hash,做完之后去掉其中的字母得出来一个数字。然后这个数字就可以拿来用了,包括取尾数、跟楼层号取余什么的。如何确保这个数字不是我乱编的?答案就是我能提供hash计算的源数据,基于一个认识:我不能通过hash逆向出源数据,即便是通过hash碰撞的话,我提供的源数据也不会被大家接受(这里假定我要造出与真实数据格式一致,例如一个合法的js,并且能够碰撞hash的概率无限小)

如何确保我没有作弊?我想这套程序可以开源,大家可以很方便的自己部署,在同一个时间段内,使用相同的随机源,应该能够得到一样的结果。随机源举例http://www.zhcw.com/kaijiang/kjData/2012/zhcw_3d_index_last30.js
这是中彩网 福彩3d的最近30期开奖信息的数据js,开奖是每天20:30

上述这个我想到的一个缺点是:不能根据时间需要随时得到结果,而受制于随机源的变化周期(例如开奖时间,甚至是网站的数据更新时间)。

所以后来我又想了另一种激进的办法,利用公开的验证码服务,例如google的recaptcha,例如通过challenge接口,可以取得一个随机的challenge值(k参数是我开的一个账号的公钥)
http://www.google.com/recaptcha/api/challenge?k=6LfZTewSAAAAALFcRd1tedv6_r4Wkbff_EBKlsIe

把这个作为随机源,那么可以认为这个随机源没有时间限制,可以不受限制的取得(当然频率过高还是感觉会被ban的),如何确保我不是为了一己之利故意制造一个特定的challenge值,然后让最终产生的数字满足我的利益?
第一,这个challenge值由google产生,不正确(伪造)的challenge值不能调取到正确的验证码图片
图片接口(c参数为challenge值)
http://www.google.com/recaptcha/api/image?c=03AHJ_VutjpecRFGdtpVWFCR5J7KMfYR-aeog71PiAjb7O1ZOl9wikMj-d3GaFOjbmvgHP7E1REvu0F0DaUCNik4Deeur78dpgCW14g3C8evs10dBlzhmBs1d4rHFfMTv44kvEw3vLSYg2vCECfjsuALpDwUrCSwMN-MGykkza7vkUNffhpSGKgUU

但是,如何确保我不是通过大量刷新不停的尝试直到找到合适的值?想了一下好像没有办法,如果recaptcha这个接口里面加上生成时间戳的话或许可以。这个方法还有缺点就是他不像第一个描述的方法那样可以在别处重现相同结果了。


说的有点乱,希望大家不吝赐教
5931 次点击
所在节点    奇思妙想
35 条回复
Hyperion
2013-12-28 22:09:16 +08:00
其实重点不是block的hash, 是P2P啊……
icanc
2013-12-28 22:10:50 +08:00
收集所有用户回复合并成文本,并公开,保证所有用户都能在文本里找到自己的回复, 利用文本做散列,再用该散列做随机数种子。
icanc
2013-12-28 22:12:42 +08:00
不用做随机数种子,散列本身就能做随机数了。
txlty
2013-12-28 23:02:24 +08:00
@icanc 结果就是,还没开奖,谁都知道出什么数了。相当于每一个新回复,刷新一下随机数结果。
yangff
2013-12-28 23:33:17 +08:00
某支股票的收盘价格。
别提64.89了好么,
likuku
2013-12-29 00:17:39 +08:00
@hzlzh 截图…额,他们忘记世上有家软件公司叫Adobe了么...
hzlzh
2013-12-29 00:47:56 +08:00
@likuku 你讲什么图片? 你跟一个前端谈Adobe PS?
我那是举例子,谈的是图片的发布时间可以用 BTC 来证明
hzlzh
2013-12-29 00:50:45 +08:00
@likuku 上面那条字敲错了,撤销。
的确他们不知道PS,而且不知道视频也能作假和伪造。
likuku
2013-12-29 00:51:58 +08:00
@hzlzh 「比如很多人把截图发到 新浪微博 或者 百度贴吧 去证明上传时间」

我是说,这样以为截图就能证明真相就不靠谱,伪造截图并非不可能。
hzlzh
2013-12-29 00:53:10 +08:00
@likuku 是啊,这种截图经常遇到,太容易ps了
(刚我看错了你的回复,囧)
likuku
2013-12-29 00:56:37 +08:00
@hzlzh 看到了,没事,没关系的~
tywtyw2002
2013-12-29 08:45:48 +08:00
彩票的某一期 然后hash一下呗。
Lone
2013-12-29 14:47:50 +08:00
股市收盘指数,A股H股美股伦敦东京等等,甚至石油价格也可以
loading
2013-12-29 15:16:07 +08:00
用北京mp2.5某时某刻指数,最时髦。当然要指定数据提供商
quake0day
2013-12-31 02:56:51 +08:00
@loading 这个熵源的熵值未必够,而且bias比较大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX