转自:老雅痞
美国总统候选人米特·罗姆尼提醒我们,公司是由个人组成的。无论你是否同意他主张,这句话肯定包含大量事实。毕竟,为什么叫做公司,而不是一群在特定规则下一起工作的人?当一家公司拥有财产时,法律合同规定该财产只能在董事会的控制下。如果一家公司做某事,那是因为它的董事会已经同意应该这样做。如果公司雇用员工,这意味着员工同意根据一套特定的规则向公司的客户提供服务,特别是涉及付款的时候。当一家公司承担有限责任时,这意味着特定的人被授予了额外的行动特权,从而减少了对政府法律起诉的恐惧——一群人比普通人单独行动拥有更多权利,但最终还是个人。无论如何,无非就是人和合同一路往下。
然而,这里出现了一个非常有趣的问题:我们真的需要人吗?一方面,答案是肯定的:尽管在某些后奇点未来,机器将能够独自生存,但在可预见的未来,人类行为与物理世界的互动是必需的。然而,另一方面,在过去的 200 年里,这个问题的答案越来越是否定的。工业革命第一次让我们开始大规模地用机器代替人工,现在我们拥有先进的数字化工厂和机械臂,可以自行生产汽车等复杂商品。但这只是基础底部的自动化。消除对普通体力劳动者的需求,并用少数专业人员来维护机器人,而公司的管理层则保持不变。真正的问题是,我们是否可以从另一个方向来解决这个问题?即使我们仍然需要人类来执行某些专门的任务,我们是否可以将管理从等式中移除?
大多数公司都有某种使命宣言;通常是为股东赚钱;在其他时候,包括一些与产品有关的道德义务,以及其他目标,例如帮助社区有时参与其中,至少在理论上是这样。目前,该使命宣言仅在董事会以及最终股东对其进行解释的情况下才存在。但是,如果借助现代信息技术的力量,我们可以将使命宣言编码成代码呢?也就是说,创建一个不可侵犯的合约,它可以产生收入,付钱让人们执行某些功能,并为自己找到运行的硬件,这一切都不需要自上而下的人工指导?
正如 Let's Talk Bitcoin 的 Daniel Larmier在他自己对这个概念的探索中指出的那样,从某种意义上说,比特币本身可以被认为是这种事物的早期原型。比特币有 2100 万股,这些股份归比特币股东所有。它有员工,并且有一个支付他们的协议:大约每十分钟向一名随机员工支付 25 比特币。它甚至有自己的营销部门,很大程度上是由股东自己组成的。但是,它也非常有限,它对世界几乎一无所知,除了难度之外,它无法改变其功能的任何方面,而且它本身实际上并没有任何东西;它只是存在,并留给世界去识别它。问题是:我们能做得更好吗?
计算
第一个挑战很明显:这样的公司实际上将如何做出任何决定?编写代码很容易,在给定的可预测环境下,接受给定的输入并计算出需要采取的行动。但是谁来运行代码呢?如果代码只是作为计算机程序存在于某台特定机器上,那么是什么阻止该机器的所有者关闭整个设备,甚至修改代码将所有资金都发送给自己?对于这个问题,只有一个有效的答案:分布式计算。
但是,我们在这里寻找的分布式计算与 SETI@home 和 Folding@home 等项目中的分布式计算不同;在这些情况下,仍然有一个中央服务器从分布式节点收集数据并发送请求。相反,我们需要比特币中所见的那种分布式计算:一组去中心化地、自我验证的计算的规则。在比特币中,这是通过简单的多数投票来完成的:如果你没有帮助计算具有多数网络能力的区块链,你的区块将被丢弃,你将不会获得任何区块奖励。理论是没有一个攻击者有足够的计算能力来破坏这种机制,因此,唯一可行的策略是“顺其自然”并诚实行事以帮助支持网络并获得一个人的区块奖励。
那么我们可以简单地将这种机制应用于去中心化计算吗?也就是说,我们是否可以简单地要求网络中的每台计算机评估一个程序,然后只奖励那些答案与多数票匹配的人?不幸的是,答案是否定的。比特币是一个特例,因为比特币很简单:它只是一种货币,不携带自己的财产或私人数据。另一方面,虚拟公司可能需要将私钥存储到其比特币钱包中——该数据应该可以完整地用于没有人,也不是像比特币交易那样对所有人都有效。但是,当然,私钥必须仍然可用。因此,我们需要一些能够以去中心化方式计算的交易签名系统,甚至生成比特币地址。幸运的是,比特币让我们能够做到这一点。
第一个立即想到的解决方案是多重签名地址。给定一千台计算机,这些计算机可能会继续支持这些公司,让它们中的每一个都创建一个私钥,并在它们之间生成一个 501-of-1000 的多重签名地址。要花费这些资金,只需使用来自任何 501 个节点的签名构建一个交易并将其广播到区块链中。这里的问题很明显:交易量太大。每个签名包含大约 70 个字节,因此其中 501 个将进行 35 KB 的交易——这很难被网络接受,因为 bitcoind 默认拒绝任何超过 10,000 字节的脚本的交易. 其次,解决方案是针对比特币的;如果公司想为非财务目的存储私人数据,多重签名脚本是无用的。
多重签名地址之所以有效,是因为有一个比特币网络对其进行评估,并根据评估是否成功将交易放入区块链。在私有数据的情况下,类似的解决方案基本上需要一些去中心化的权限来存储数据,并仅在请求具有 1000 个签名中的 501 个时才根据需要将其发送出去——又回到开始的地方。
但是,另一种解决方案仍有希望;密码学家给它的通用名称是“安全多方计算”。在安全多方计算中,程序的输入(或者更准确地说,模拟“电路”的输入,因为安全多方计算无法处理“if”语句和条件循环)使用称为Shamir 的秘密共享的算法进行拆分,并且将一条信息提供给每个参与者。Shamir 的秘密共享可用于将任何数据拆分为 N 个片段,这样其中的任何 K 个(但没有 K-1 个)足以恢复原始数据 - 你在运行算法时选择 K 和 N 是多少。2-of-3、5-of-10 和 501-of-1000 都是可能的。然后可以以分散的方式对数据片段进行评估,以便在计算结束时每个人都拥有计算结果的片段,但在计算过程中任何一个人都不会得到哪怕是最轻微的一瞥正在发生的事情。
最后,将各个部分放在一起以显示结果。算法的运行时间为 O(n3),这意味着评估计算所需的计算步骤数大致与参与者数量的立方成正比;在 10 个节点,1000 个计算步骤,在 1000 个节点,10 亿步。在我自己的笔记本电脑上,一个简单的 C++ 十亿步循环大约需要 20 秒,而服务器可以在几分之一秒内完成,因此 1000 个节点目前大致处于计算实用性的极限。
事实证明,安全多方计算可用于生成比特币地址和签署交易。对于地址生成,协议很简单:
因为公钥可以加减,乘以甚至除以整数,令人惊讶的是,这个算法的工作原理完全符合你的预期。如果每个人都以相同的方式将 501-of-1000 的私钥放在一起,那么该私钥将能够将发送到通过将 501-of-1000 算法应用于相应的公钥而生成的地址的钱花掉。之所以可行,是因为 Shamir 的秘密共享实际上只是一个代数公式——也就是说,它只使用加法、减法、乘法和除法,并且可以像使用地址一样轻松地“通过”公钥计算这个公式;因此,私钥到公钥的转换是在代数之前还是之后完成都没有关系。签署交易可以以类似的方式完成,尽管过程稍微复杂一些。
安全多方计算的美妙之处在于它不仅限于比特币;它可以很容易地用于运行公司赖以运行的人工智能算法。所谓的“机器学习”是一组算法的通用名称,这些算法检测现实世界数据中的模式并允许计算机在没有人为干预的情况下对其进行建模,并在垃圾邮件过滤器和自动驾驶汽车等领域大量使用。“只是代数”,也可以在安全的多方计算中实现。实际上,任何计算都可以,如果该计算被分解为输入的各个位上的电路。可能的复杂性自然有一些限制。将复杂的算法转换为电路通常会引入额外的复杂性,并且如上所述,Shamir's Secret Sharing 本身就会变得昂贵。因此,它应该只真正用于实现算法的“核心”;更复杂的高级思考任务最好由外部承包商解决。
作者维塔利克·布特林 2013 年 9 月 19 日