抛砖引玉:如何实现绝对公平的年会抽奖程序

2017-01-24 20:11:18 +08:00
 jybox

传统的抽奖系统都是运行在单机上,那么这台设备就可能被做过手脚,抽奖的结果也不能令所有人信服。如果能在每个人的设备上都运行一次抽奖的话,这样结果就可以令大家信服了 —— 但显然不能简单地这样做,因为每个人抽出的结果都是不一样的。

于是我想能否利用我在区块链中了解到的「两阶段广播」来产生去中心化的随机数?让这个抽奖程序以分布式的方式运行在所有人的设备上,会有一个后端服务器帮助客户端进行广播,但没有任何特权,每个客户端都会对抽奖过程进行验算,一旦有人作弊就会被发现。

于是我实现了这样一个原型(https://rollup.leanapp.cn,大家可以开两个窗口体验一下),源代码和更详细的算法描述在 https://github.com/jysperm/rollup,不过目前还有一些问题:

关于两阶段广播:

9666 次点击
所在节点    分享创造
38 条回复
whale
2017-01-25 09:22:00 +08:00
@nightv2 仔细一想:每人发一样的,相对于会抽到大奖的那几位就不公平了。

那么,歪楼问下:世界上真有绝对么?
alexgor
2017-01-25 09:26:51 +08:00
绝对的公平在这个世界上不存在。
griffinqiu
2017-01-25 09:29:40 +08:00
kslr
2017-01-25 15:11:08 +08:00
@herozhang 算法和数据是公开的的啊?个人也可以去对比啊
ryd994
2017-01-25 16:03:58 +08:00
hash 多个随机量
比如领导敲时间,这一时刻的现场测得的温度,到场人数,噪音等等,
事先审查设备,事后可以记录重放
然后再把 hash 值域投射到票上(取模?还是其他?)
只要有足够的熵,就算有人操纵其中有一两个,剩下的熵会把效果盖掉,这就是 linux 下 /dev/random
ryd994
2017-01-25 16:07:42 +08:00
hash 多个随机量
比如领导敲时间,这一时刻的现场测得的温度,到场人数,噪音等等,
事先审查设备,事后重放记录
然后再把 hash 值域投射到票上(取模?还是其他?)
只要有足够的熵,就算有人操纵其中有一两个,剩下的熵会把效果盖掉,这就是 linux 下 /dev/random 的设计思想
Intel 处理器有个黑盒随机数发生器,当时有人质疑并希望内核拒绝使用。后来也是用了,解释是,反正一样进熵池,就算有猫腻,其他熵源一样盖掉

不过讲真,把年会搞成随机数据生成器审计大会,领导不会打死你?
maomo
2017-01-25 16:18:15 +08:00
现场抽签不好吗。。。
maomo
2017-01-25 16:32:45 +08:00
你这个问题在数学上等同于多方如何共同生成一个随机数 http://crypto.stackexchange.com/a/465
herozhang
2017-01-25 18:56:57 +08:00
@kslr 例如,我部署一个 DNS 服务器,把 random.org 的解析指向我自己假设的这个假服务器,看代码和数据是不能发现作弊的。
CRVV
2017-01-25 19:14:08 +08:00
@herozhang
random.org 有 DigiCert 签的证书
我觉得如果能信任浏览器和操作系统是正经的,通过证书就能确定不是假网站
kslr
2017-01-25 19:25:52 +08:00
@herozhang #29 哥们,我觉得你进入了一个误区。首先回到题目上,公平的抽奖。
首先通过公开的随机数种子来产生结果,如果用户不接受就可以用种子重新走一遍算法来验证。
那么不管你在程序中是如何的作弊,都无法逃避结果不一致的问题。

把过程透明化足以!

暗箱操作? 你能控制雷暴? 对吧。

至于程序那只不过代替人工做一道题而已。
zingl
2017-01-25 23:36:29 +08:00
程序员就是矫情,我是领导我就给你们分发机选双色球
byuc
2017-01-26 16:47:10 +08:00
这个的难点不在于技术,只在于没有抽中的人,永远都是不会相信这是公正、机会均等的。
nomorelie
2017-01-26 17:40:07 +08:00
请相关个部门公证啊,设备物理隔离印章封条
ranleng
2017-01-26 19:00:33 +08:00
微信红包 手气最佳?
maplerecall
2017-01-26 19:37:50 +08:00
说到年会抽奖…我特么年会前一周接到需求要做个抽奖需求,设计稿还拖了两天,年会前两天还突然改需求,结果最后一周什么正经事都没做就撸抽奖了……

由于要放到大屏幕上两千人看抽奖页加了各种特效,活生生做成个烤机页面,啥手脚都没动最后自己啥都没中,简直 sad ……
MrFireAwayH
2017-01-27 13:45:27 +08:00
我们公司是自己先选喜欢的实体扑克牌……抽奖的时候去另一个新的那里抽……抽出来和自己选的一样就中奖……

奖品是抽之前就确定了的

每个等级的抽奖都参与
appstore001
2017-02-03 17:45:14 +08:00
开奖部分开源,代码 MD5 等多种方式检验,确保运行的 EXE 或网站源码未经修改。

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

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

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

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

© 2021 V2EX