P1,P2,P3三个人想在网上开一个赌场,架构图如下:
游戏规则如下:
- 参与赌博的人自由选择0或者1并输入赌资,至少有两个人参与,且选择不同才能开始
- 系统开出0或者1
- 除去0.1%的服务费,猜中的人平分这轮参与的所有赌资
在运营过程中,我们碰到了一些问题:
- 赌徒们怀疑网站作弊
虽然我们一再强调我们只提供平台,不参与任何赌博,我们是靠服务客户求生存的。但是赌徒们输红了眼,非 得说平台做庄,让他们血本无归。
简单说:赌徒们要平台证明游戏开出的0,1不是被操纵的。
- P1怀疑P2私吞利润
P2拥有交易记录数据库的管理权限,交易记录跟利润是强相关的,P1怀疑P2修改了交易记录并和财 务私通把这部分利润吃了。
简单说:P1要P2证明没有修改数据库的记录
To be, or not to be: that is the question. 不解决这些问题,感觉网站就只能关门大吉了。
信任是一件复杂的事,很多时候,你会信错人。
在网络通信的世界里,你怎么确定对方就是对方?
如果参与活动的人永远能够彼此看到对方,且能够记住所有发生的事情,那么这些问题都不是问题。
然而这是不可能的。
但是密码学中非对称加密的特性提供了解决问题的一丝曙光:
- 公钥加密,只有对应的私钥能够解密
- 私钥签名,公钥能够验证是不是对应的私钥签名的
我们只要交换公钥,然后加密通信,似乎就可以高枕无忧了。
然而,交换公钥这个过程也是可能不安全的,我怎么确信这个公钥中间没有被替换呢?
这就是所谓的“中间人攻击”,这是一个证明“你妈是你妈”的问题。
现实中,这个证明需要一个中心机构,比如公安局,因为我们的身份信息都在那里,我们都相信它,它开的证 明我们都认,公安局说“你妈是你妈”,那大家就可以认为“你妈是你妈”。
网络中,类似的机构叫CA。
且不管CA谁来管这个问题,我们姑且认为参与活动的各方都相信它。
那么CA颁发的证书就必然是可信的,其实也就是用CA自己的私钥给申请者的公钥签名,由于CA的公钥是大家都 知道的,所以某人向你出示证书时,你只要用CA的公钥去验证一下,就知道某人确实是某人。
信佛的人:
- 善有善报,恶有恶报
- 诸恶莫作,众善奉行
佛也许是个区块链高手,首先记录众生活动的账本是"不可篡改,无法抵赖"的,然后合约会自动执行。
1其实就是"智能合约",2是希望账本上自己的记录好看一点的人自主选择。
商业社会最重要的一个东西就是产权,即一个东西属于谁,可以表达为
K->V
在计算机的世界里,你可以这样理解:
某某语言里,变量K的值为V
图灵机里,某个步骤K的状态为V
数据库里的KV存储
其实他们说的是一个东西,无非是通过K能够找到V。
KV本身是没有语义的,但人可以赋予它语义,比如Bitcoin里面K为钱包地址(公钥),V为该钱包里面的钱,
我们就可以说那个钱属于那个地址,相应的,拥有那个地址私钥的人,就拥有那笔钱。
还有一个重要的东西:交易。更一般地,可以叫"发生","事件","变化"。
本质上,都是KV的变化,可以表达为:
(k->v)=>(k->v')
从人类时间的角度,每一次变化用版本来标识,就有了所谓mvcc。
那么,如果"参与方能看到所有的KV,所有KV的变化都需要大家的同意,并且变化会被记录下来", 是不是就 美好新世界了?
其实没有"不可篡改"的东西,只是"篡改"是有policy的,比如需要超过一半的"股东"同意,比如需要掌握50% 以上的算力;还有,不管如何,改了就有改了的记录。
其实,无所谓"美好新世界",但只要游戏规则是参与的各方制定的,那么就认赌服输就可以了。
你如何证明你提供的服务是安全的,公平的?