1、
2017年10月,伯克利大学。
algorand的分享会刚刚结束。Micali教授站在台上,望向人群。
有人举手问了一个问题:
“在algorand系统里,验证节点如果作恶是不会受到任何惩罚的吗?这样的话整个系统可以轻易被收买吧,哪怕我事先并不知道这些验证节点是谁……”
algroand核心设计理念有一个非常重要的假设:在一个系统中,绝大部分人都是诚实的。这个假设贯穿整个系统,代表了algorand最本质的内核。但显然,现场提问的这位朋友对此仍然有所质疑。
Micali教授打断了对方的问题:
“algorand整个系统的确没有所谓的「惩罚」机制。你后面说的其实是另一个问题。”
他把身体转向观众,说了接下来这样一段意味深长的话:
“我和你,包括在场所有人,我想我们都同意「诚实」究竟意味着什么。
你知道密码学诞生至今最古老的协议是什么吗?是「秘密分享协议」(secret sharing)。
这个协议的原理大部分人都说得出来:
我们都害怕忘记密码,而密码其实就是一串数字而已,于是有人想出了一个方法——把这串数字拆成十个不同的数字,它们相加的和刚好等于密码的值,然后我把这10个数字随机发给10个不同的人保管。我请求他们做一个诚实的人,不要把自己的数字告诉别人。当有一天我自己忘记了密码,我就去找他们每个人要回数字,相加一遍就好了。
按照你的质疑,如果人们会一边认为自己是诚实的,一边把手里的数字告诉别人,那秘密分享这个协议是不成立的——不仅如此,整个密码学领域里所有的协议大概也都不存在了。「诚实」的基础是不去考虑那些不诚实的做法,我认为不止是我一个人这么想的。”
2、
micali是世界级的密码学家,任职于MIT,得过图灵奖。
如果你对隐私币(privacy coin)和zcash比较熟的话,你可能听说过,这些项目很多都用到了密码学里的一个理论——零知识证明(zero knowledge proof)。
第一篇提出零知识证明理论的论文发表于1985年,micali正是这篇论文的联合作者。
零知识证明,包括密码学,原本只是一个很小众的学科。直到2009年,一个化名中本聪的密码朋克发表了关于比特币构想的白皮书,密码学里的许多理论才得到了实际应用。同时,比特币和区块链也迅速吸引来了其他人的眼光。
比特币的出现当然也立刻引起了 micali 的兴趣。“我在想我可以做点什么。我把自己关在房间里,几个月都不出门,不停地研究区块链的协议、共识、治理、激励机制,然后,我终于知道自己想要的是什么了。”在杭州的见面会上,micali这样告诉橙皮书,“最后我把激励机制拿掉,单独去思考整个协议。我把自己的想法写成了一份白皮书,扔到网上,然后你猜发生了什么?”
几个同在MIT的同事找了上来,其中一位叫nickolai zeldovich,他是系统安全领域鼎鼎有名的人物。nickolai觉得白皮书里的设想看起来过于美好,不像是真的,“too good to be true”,于是他问 micali,能不能把白皮书拿出来测试一下?micali回答,当然可以。
于是,他们着手准备了一次测试。
“我们租了1000台亚马逊的服务器,每台模拟500名用户,然后增长到1000个用户、2000个用户、5000个用户,15000个用户,一直到500000用户。测试的结果显示,达到15000个用户时,系统完全没有变慢——在那一刻我知道,我的想法不仅在白皮书上可行,在测试上也是可行的。”
后来,nickolai也成了白皮书的联合作者之一。
有了白皮书,有了技术可行性的测试,是时候动手做点大的了。
micali 把这个项目正式取名为algorand,他想把 algorand 建设成为区块链里切实可用、值得依赖的基础设施——换句话说,就是做成一条最好的公链。
algorand是一个复合词,由algorithm(算法)+random(随机)组成。这个名字揭示了alogrand的设计原理,即用算法随机产生出块节点与验证节点——这本身就是一种很“密码学”的思路。
3、
技术型的创始人在区块链行业里不见得是一个优势。事实上,拥有网红型的技术创始人,才是这个行业真正通吃的杀手锏。
micali 关于图灵奖的头衔,能够为 algorand 吸引来不少好奇的目光。但其实 micali 本身也是一个特别擅长传达理念的人。
这个瘦瘦小小的老头子教授,看起来永远是一副精神充沛的样子。在上海万向举办的区块链大会上,micali 与 oasis lab 创始人 dawn song、cosmos 创始人 jae、以太坊创始人 vitalik 分到了同一组做 pannel 讨论。当主持人一个一个询问嘉宾观点的时候,micali是唯一一个执意要从座位上站起来、面向观众大声回答问题的人。
虽然他讲的英语有很重的意大利口音,但这个口音似乎从来没有影响过他对自己所表达的东西的自信力。杭州见面会现场的话筒临时出了问题,micali对工作人员摇了摇头,示意自己其实并不需要话筒。
在这些公开的分享会里,micali喜欢用“魔法”来代替algorand涉及到的许多复杂的密码学算法,以此让听众更好的理解algorand系统究竟是如何运作的。
对于第一次接触algorand的人来说,这个系统在设计上有两个非常“反直觉”的地方:
这个系统里没有任何的“惩罚措施” 这个系统不需要你押注任何的资产在大部分公链系统的设计里,为了防止节点作恶,系统往往会设置相应的惩罚机制。dpos或者bpos的共识机制要求节点抵押一部分的资产,以此作为筹码,约束节点的行为。可以说,大部分区块链项目的“信任”,都是通过这种基于资产抵押的惩罚机制,建立起来的。
但在micali的脑子里,上面这些并非都是必须存在的东西。这背后反映了algorand与众不同的设计哲学。
micali认为,当“钱”不需要拿去做任何抵押、可以随时流动的时候,系统里大部分的钱就会掌握在诚实的人手里。因为大部分的人都是诚实的,钱只要足够分散,大部分钱也会是诚实的。而对一个POS的系统来说,“钱”就是一种投票权。如果大部分投票是诚实的,那么这时,“惩罚”也就没有必要存在了。
“我认为我们应该做一个「不可能作弊,而非如果有人作弊就去惩罚它」的系统。我觉得这才是更好的设计。”micali在一次分享会上说,“当钱可以随意流动的时候,大多数钱掌握在大多数人的手里,而大多数人是诚实的,这个网络就是安全可靠的。”
4、
对一个公链而言,最核心的问题其实是怎么产生下一个区块。
第一个区块,也就是创世块,是不需要考虑的,它是人为定义的,不需要共识。第二个区块怎么产生才是关键。
在micali的设计里,algorand通过两个阶段的“魔法”——这个魔法背后其实是数学和密码学——来确定下一个区块的产生。
第一阶段:魔法随机选出一个人来产生区块(概率与这个人所拥有的钱的数量成正比,不需要锁定或抵押),然后他把「签名的区块+自己的公钥」广播到网络里; 第二阶段:魔法随机选出一千个人来验证这个区块。这一千个人组成的委员会对该区块是否有效达成共识,他们把「自己对区块的投票意见+自己的公钥」广播到网络里。micali 喜欢把“公链系统”想象成一个小型的人类社会:“在一个社会里肯定会有一小撮坏人,比例可能是1%、2%,或者20%,但是不可能大部分人都是坏人。不然所谓的「社会」就不存在了,那就是一个野蛮动物的黑暗丛林。”
因此,当第一个人被选出来的时候,他可能有10%的概率是坏人。坏人会发布错误的区块,或者把不同的区块发给不同的人,以此完成欺骗。这时,如果我们再随机选出一千个人,这一千个人都是坏人的概率是非常非常低的。相反,这一千个人和整个系统一样(如果足够随机的话),大部分人都会是好人。
如果你既没有被选为生成区块的人,也没有被选为验证区块的一千人,当你看到一个区块被这1000个人中的750个人验证过,那么你也可以知道,这个区块是正确的。
这就是algorand的基本原理。
那么问题来了:这一千个人的委员会到底是怎么选举出来的呢?
一人一票,通过纯民主的方式,让网络里所有的用户一起来选举?这样效率肯定非常低。
algorand采用了一种反直觉的做法:让他们自己推选自己。
这部分其实也是密码学的精华。
委员会的选举,依赖于一个神奇的彩票程序。这个彩票程序有如下几个特点:
每个用户都有一个彩票程序 彩票程序只在用户本地的计算机上运行 用户自己无法通过彩票程序作弊 如果中奖了,用户可以拿出证据证明自己中奖整个彩票程序的计算量非常小,就是一些哈希和字符串的比较。中奖的概率和你手里的钱的数量成正比,而且,一个公钥有100万个币,和100万个公钥,每个地址有1个币,他们被选举上的概率是相同的,同时,二者彩票摇奖的时间和速度也是相同的。
然后,一旦你中奖了,你的计算机就会给你一张中奖证明,这个中奖证明会和你对区块的投票意见一起广播到网络中。所有这些事情将在几毫秒中完成,非常快速。
聪明的读者到这里应该反应过来了——micali 所说的那个“魔法”,其实就是这个基于密码学的彩票程序。
这个彩票摇奖机有两个好处:
委员会的选举速度很快:时间是毫秒级,因为没有人需要互相沟通,大家在自己本地的机器上运行就好了。 委员会选举的过程很安全:假设系统中的坏人可以贿赂任何节点,让他们说谎,但在algorand系统里,坏人到底应该去贿赂谁呢?当委员会被选举出来的时候,坏人可以知道这 1000 个人分别是谁,但问题是,这时哪怕委员会里的人被贿赂了,他也已经把自己的中奖证明和对区块链的验证意见给广播出去了——换句话说,此时区块验证已完成,贿赂也无济于事。粗略的理解大概是这样。其中 alogrand 还做了不少的技术细节,比如:
vrfs(随机验证函数)和基于密码学的自选举 新的速度超快的拜占庭协议(即 1000 人委员会对新区块达成共识的过程) 用户可替代性(上面做拜占庭共识的过程中,如果对区块产生分歧需要经过最多 9 轮投票,这 9 轮以内的投票,每一轮的委员会都是不同的 1000 个人。这种可替代性可以更有效地经受被贿赂的情况) ……5、
基于上面这套设计,micali认为algorand跟比特币相比有了很大的改进。
“我们今天一直在说的「区块链」,其实从来就不是一条链。它(比特币的链)是一棵树,”micali 说,“只不过,这棵树的分支随着时间的进行逐渐凋亡,最终留下了最长的那一条。但在 alogrand 系统里,从始至终就只有一条干净的主链,不需要 6 个区块的确认时间,一个新区块一旦产生就是最终的区块。就是这么简单、干净、明了。”
比特币之所以是一棵树而不是一条链,原因在于比特币需要额外的 6 个区块时间才能确认该区块的最终一致性。援引 maxdeath 在知乎上的答案:“在比特币里,因为网络延迟的原因,某个区块的生成者天然地在下一个区块的生成上具有优势。于是,比特币有了 6 个区块这么个延迟,因为一个区块的生成者预测 6 个区块以后的生成者的概率的时候,网络延迟能造成的优势就微乎其微了”。
algorand 能快速确定一个区块的最终一致性。根据 micali 的说法,algorand 上出现分叉的概率非常之低。大概需要经过「从宇宙诞生至今」这么长的时间,系统才有可能出现分叉。
除此之外,micali 认为 algorand 还有其他一些更重要的改进,比如:
真正意义上的去中心化:所有节点都一样,不存在矿工与普通用户的不同角色。 借助于计算量很小、几乎没有延时的随机算法,在可扩展性上可以有很大的突破; 很好的安全性:不仅可以抵挡协议层的攻击,还可以抵挡网络通信层面的攻击。上面这三点分别代表了“去中心化”、“可扩展性”和“安全性”——换句话说,algorand 解决了一直以来困扰公链的三难问题,即「不可能三角」。
在行业整体思潮开始转变,越来越多人开始探讨「以太坊成为世界计算机的愿景是否必要」时,“区块链在保持去中心化与安全性的前提下,应该尽量把计算剥离开,挪到第二层来做,让layer2来提升性能” 几乎已经成了行业新的共识了。
人们已经习惯并默认「不可能三角」无法解决,放弃与这个问题刚正面,转而去寻求其他解决思路,比如分片、链下扩容、侧链等等。在已经接受了一个既定条件的情况下,突然告诉你这个条件不存在了,让你重新定义问题——这时的人们很难做出正确的反应,因为大部分人的思想已经被这个既定条件牢牢困住了,很难挣脱。
algorand 的横空出世,如果对行业有其他方面的借鉴意义的话,也许在于它在尝试帮助这个行业打破这个狭小的思维框架。用 micali 的话来说,“algorand是真正使用第一性原理设计出来的”。
6、
这种第一性原理的设计思路,很大程度上归功于 micali 在密码学领域长期的研究。micali 尝试用纯密码学的方法来搭建新的公链基础设施,一方面为整个行业打开了一片新世界,但另一方面,也带来了更多人对 algorand 的质疑。
最大的质疑声聚集在同一个问题上—— alogrand 没有完善的激励机制。
对于这个问题,micali 在早期曾经尝试论证为什么不需要经济激励机制。coindesk 2017 年 5 月发表的一篇报道里,micali 表示“激励机制是最难的”,他的解释是这样: 当你为系统加入激励机制,人们就会尝试去利用激励机制赚钱。他们会想出各种你预想不到的办法专空子。中本聪肯定不会想到,pow 最终会导致比特币出现产业规模级的挖矿活动。
“我们必须把激励机制当作最后一种方法来使用。我相信我可以(让 algorand 在没有激励机制下运作起来),但我没有确切的论证方法证明我可以,因为这比「让 algorand 自己证明自己」要来得更难。”
但没有激励机制,就像没有惩罚机制一样,很容易让人怀疑因此可能产生更大的问题。比如,没有激励机制,怎么吸引更多的人加入整个生态?人们为什么要参与成为 algorand 的节点,哪怕这个节点不需要消耗太多的计算资源和资产,没有好处的话,人们一开始为什么要去做呢?所有的节点会不会都变成懒惰节点?
micali 对这些问题做了一个有趣的反问:你会因为担心电脑上的 gmail 费电,而选择把邮箱关掉吗?
vitalik 显然对激励机制有不一样的看法。在被问及如何看待 algorand 时,v 神说过这样一句话:“algorand 假设系统中大部分人都是诚实的。而我们(以太坊的 casper)则是尝试用更偏经济激励机制的方法、而非密码学的方法,来实现 pos。”
micali 认为 algorand 是「更纯粹的 pos」。“pow 通过算力提高了节点出块的成本,保证系统的安全性,同时也产生了廉价电力和专业挖矿设备的竞争赛,最终一定程度上导致了「中心化」矿池的出现。而使用需要抵押资产、有惩罚机制的 pos 共识则是另一种「隐形的中心化」。让我来问你,一个普通的用户能把多少钱抵押在链上并且保证 30 天内不动这笔钱?没多少钱。最终那些有能力锁定大额资产的人,就会形成新的中心化。”
看起来,没有激励机制和没有惩罚机制一样,似乎都是 micali 出于对 algorand 系统保持足够去中心化的一个考量。不过尽管如此,在前不久的杭州见面会上,当现场许多人提出激励机制的质疑时,micali 主动站起来回答了这个问题。他表示 algorand 并非完全没有激励机制,只是目前激励机制的 paper 还没有最终确定发布出来。
micali 透露 algorand 的激励机制会跟其他公链有所不同:“algorand 不会去奖励出块的节点,我们也不会奖励那 1000 个入选委员会的区块验证者。如果你去奖励最终胜出的冠军,奖励那些第一个冲破终点的赢家,人们就会开始想尽一切办法把自己训练成百米赛跑的运动员。他们会买更好的设备,用更好的算法,来获得出块或者验证区块的权利。相反地,alogrand 会去奖励那些一直保持在线状态的节点和用户。只要你持续在线,保持对网络数据的接受和监听,就有可能获得 algorand 代币的奖励。”
这是至今为止 algorand 对外公布的关于激励机制方面的所有信息了。看起来,激励机制在 algorand 项目的发展中也经历了新的变化。从原本的「不需要」,到后来出现的「新的设计理念」,这对algorand也许是一件好事。一个项目总是需要经过一些时间,不停地完善想法。
尽管如此,algorand 仍然留下了不少问题。
按照这套激励机制的假设,以及 algorand 希望采用的「纯 pos」的共识算法,初始代币的发放将会变得尤为关键。Alogrand希望通过拍卖的形式发放代币,由市场决定Algo代币的价格,但这一部分目前还没有太多的信息。
此外,如果假设系统中所有的节点都是一样的,那么用户有可能通过类似“轻节点”的方式进行访问吗?
在杭州分享会现场,有人问到了这个问题:在没有矿工的情况下,一个新节点加入网络需要如何开始同步历史数据?algorand 论文的联合作者陈婧回答称,他们将会开发一套专门的历史数据同步工具,并且新加入的节点也并不需要从创世块开始同步所有区块的数据。
algorand 留下的最后两个问题是:目前没有实际的代码和开发进程,以及,目前 algorand 仅有的测试结果仍然是跑在非常稳定可靠的亚马逊云服务器上的,这跟实际的公链运行场景可能会有所差别。
而从另一方面来说,无论是经济激励机制、代币发放,还是系统工程上的实现细节,这些疑问看起来似乎都不是一个密码学家最擅长的事情。
7、
2017 年那场伯克利大学的分享会,micali 在 ppt 的最后放了一张图。
这是一座罗马石拱桥,名叫朱利安桥。这座桥橫跨法国东南部的卡拉翁河,于公元前3年建立。至今这座桥仍然在使用中,古罗马人完全想象不到的、后世新诞生的各种重型交通工具在桥上通过,但这座桥依然坚挺无比。
micali 说这座桥是一个美妙的基础设施。
一个去中心化、不可篡改、无法屏蔽的公共账本,同样也是人类梦寐以求的一个美妙的基础设施。
问题是,什么才是实现这种理想基础设施的最好方法?
是最早出现的比特币吗?
还是会有更好的?
algorand提出了一个很有趣的想法:尽可能多地依赖于密码学算法本身,而减少经济激励对人性可能产生的影响。
这种「随机抽取样本来达成网络共识」的办法,在 micali 眼里还有更大的用处。
当被问及 algorand 最大的不同点是什么的时候,micali 说,“algorand 的拜占庭算法能让网络对任何的话题和决定快速达成共识。这将给予 algorand 更大的可能性。我认为 algorand 最大的不同是它的进化能力。整个社区对 algorand 未来的发展如果有新的想法,有更好的主意,都可以通过这种方式快速达成共识。因此,algorand 能拥有更快的进化迭代速度。”
algorand的「进化能力」,让我想到了另外一些东西。
自古以来,在人类社会里,一群人做出决定的唯一方式是选举出一个管理机构。你不可能让10万人逐一举手投票。哪怕有了区块链这一种人类历史上首次拥有的、防篡改、可以让数百万人同时发声达成共识然后做出集体决定的技术,一人一票的“纯民主”也不现实——因为效率实在太慢了。所以 EOS 才会使用 21 个超级节点的设计。
但 algorand 提出了另一种思路:如果我们的社会,每做一次决定,是通过随机选取社会里 1000 个人作为样本进行投票的话,会怎样?这种方式会不会更好?
老实说我不知道答案。虽然从概率上来说,这可能会是一个更贴近于社会全部成员意志的投票方式。但如果真理通常只掌握在少数人手中呢?如果选出来的这 1000 个人都是笨蛋呢?如果这 1000 个笨蛋做了最糟糕的决定?
我不敢想象这种机制,但同时我又对这种想象感到兴奋。对我们来说,唯一能确定的是,这样的社会将在极大的“不确定性”中向前走。
在回去的路上,我想起了另一个密码学家 Bruce Schneier。Bruce Schneier 写过一本书叫《应用密码学》。几年后,他又写了另外一本书叫《Secrets & Lies》。在第二本书里,Bruce Schneier 写下了这样一段前言(选自LeanCloud创始人江宏翻译版本):
七年前我写了另一本书:《应用密码学》。我在其中描绘了一个数学的乌托邦:可以永远保守秘密的算法,以及能安全可靠地执行无监管的赌博、抗检测的认证、匿名货币等美妙的电子化交互的协议。在我眼中,密码学是带来平等的伟大技术;任何有廉价计算机的人都能拥有与最强大的政府同样的安全。在两年后写此书第二版时,我甚至说「仅靠法律保护自己是不够的,我们还需要靠数学保护自己。」
然而我错了。密码学做不到以上的任何一点。
这并不是因为 1994 年以后密码学变弱了;也不是因为书中的技术内容不再正确。而是因为密码学不存在于真空中。
密码学是数学的一个分支。和数学的其它部分一样,它是关于数字、等式、逻辑的。而对于你我来说在生活中能感受到的安全是关于人的:人知道的事、人之间的关系、人和机器的关系。信息安全是关于计算机的:复杂、不稳定、有缺陷的计算机。
数学是完美的;现实是主观的。数学是确定的;计算机是易怒的。数学是有逻辑的;人是不确定、易变和难以理解的。
《应用密码学》的错误在于我没有对上下文做任何讨论。我把密码学当作答案™来讲述。这是很幼稚的。
一个同事曾和我说,世界上充满了《应用密码学》的读者设计的糟糕的安全系统。
几年前我听过一句话,在这里稍微改动一下:
如果你认为技术能解决安全问题,那么你既不懂安全也不懂技术。
algorand 最大的亮点是“密码学”的设计,但人们也将因为“密码学”不断对它产生质疑。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。