智能合约协议的柱石
协议
在计算机科学中,协议指的是两台及两台以上计算机之间,传递的一系列消息。在更高层面的抽象上,协议包括了通过消息传递的算法。这些程序作为人类用户的中间人,或者代理,让人类用户可以通过用户界面来沟通。 我们为了方便,用“Alice”和“Bob”来指代协议的一个端点,但我们必须清楚这些端点实际上是计算机处理单元,它们也许处在人类用户的控制下,也许不在人类用户控制下,它们的动作也许违背人类用户的意愿,也许不违背人类的意愿,这都有可能。 人类用户通常对协议并没有彻底的认知,仅仅从用户界面、手册或者其它方面获得一点隐喻上的理解。与现实世界的合同不一样,协议必须是准确无误的,必须是完整的。
协议有三种基本类型。 我对 Schneier [5]的术语进行了修改,这样与商业术语更加贴近:
自我执行: Alice <--> Bob,
经由中介: Alice <--> intermediary <--> Bob
经由仲裁: (Alice <--> Bob) --> [evidence] --> adjudicator
相应使用“Alice”说明的智能合约,也要区分软件(有两个软件组件,一个是协议的端点,一个是用户界面)和“Alice”本人。密码安全机制和其他计算机安全机制,给了我们很多工具和部件,可以用来构造协议,以形成智能合约的基础。
“网络空间的物理学”
物理媒介的安全属性,是基于我们习以为常的物理属性,例如,一个金原子是无法伪造的。网络空间结构上的约束(“物理”)中,与安全相关的都描述为数学理论,计算机科学家研究它们,并称之为密码学。 下面是密码学世界里,重要的“基本粒子”:
-- 伪随机功能家族 -->
秘钥加密,哈希,MAC,...
-- 陷门密码体制 单向函数 -->
公钥加密
-- 伪随机数生成器 -->
生成秘钥, padding, cookies
--信息理论/无条件的 -->
一次一密
这些“粒子”是构建安全协议的强大材料。想像一下,有一种材料是如此坚固,即便是超新星的能力也毁不掉它,而且又是那么便宜,你可以随意取用来建造墙壁、锁、保险箱和信封来保护日常的用品。 这并非是一个比喻:破解 4,096 位 RSA 秘钥,即便使用已知最好的算法,计算机要耗掉的电能都要超过一个超新星的全部能量。密码学的这些早期的技术,将成为全球化商务的第四次成本革命的主要驱动力。
密码学协议
协议中有一个类别,称之为密码协议,因为它们的第一个应用就是用来计算“加密书写”,提供许多基本的砖石,帮助智能合约实现“可观察性”,“可验证性”,“相对性”和“可执行性”等目标,并在这几种目标之间进行平衡。与一般的观念相反,隐秘对于安全性非常重要。密码学协议在称之为“秘钥”的隐秘性因素之上建设。秘钥极大的、不可知的随机性,令系统的其余部分非常简单,而且可以公开。大随机数的隐秘性,是如此巨大,凭运气猜中的可能性之小,是天文尺度上的。这就是密码学协议和智能合约的基石。
当我们考虑如何把密码协议用在网络关系中时,两种严重的警告依次出现。第一种是,协议常常给出安全程度“高达”的假设。这种假设就是薄弱环节,一个完整的运行系统,必须以合理的方式应对这个薄弱点。 一个非常普遍的薄弱点,是假设第三方是可信的。 而这种信任程度,或者信任的功能,却没有详细指出,需要现实世界中的系统分析师对这种风险进行特征分析并改进。最佳的中介协议,对中介和对方当事人的信任,都是有限的。
即便没有对第三方给予信任,密码协议也经常信任合约对手。 例如,对一条信息的加密,会把机密性寄托于拥有解密秘钥的一方。加密并不会阻止秘钥拥有者在网上张贴明文文本。我们不能说加密提供了“保密性”,然后就把我们对保密性的担忧,全数留给加密来解决。
第二个警告是,在加密学语义中用来命名密码(“签名”,“现金”,等等)的许多术语,都有误导性。 有时候,术语忽略了本质的含义:例如,一个“数字签名”,并非是基于生物识别技术的,而是基于秘钥,如果没有另外的机制保护,秘钥很容易被复制。密码学协议经常被扩大含义,用来表示更广泛的意图。例如,“电子货币”就是一个非常广泛的协议,可以实施很多种类的不记名凭证,和分布式对象的保护封装。
对智能合约的攻击
智能合约的协议,必须设计成能够令合约:
(a) 足够健壮,能够抵御初级的、无意的破坏行为
(b) 足够健壮,能够抵御复杂的、利益驱动的、非破坏性(理性的)的攻击
一个破坏者,可以是博弈中的一个策略或者子策略。其功效,最少也应该是某人负面功效的一部分。 或者是由某个合约方错误造成的效果。 “初级的”不过是说缺乏对攻击后果的提前认知,以及缺少足够的资源用以施加攻击。“初级的”攻击者,非常普遍,必须认真对待。 第三类,(c)复杂的、无意攻击行为(攻击者可以,也愿意牺牲足够的资源),例如第三方发起的军事攻击,就是一种特殊的、困难的类型,在典型的合约中很少出现,所以我们可以将之放至单独的类型,并在此处忽略不谈。“初级的”和“复杂的”两种类型之间的区别,已经在《算法信息理论》中形成计算机理论。
第三方攻击带来的预期损失,称之为泄漏。 第三方为了攻破安全机制,需要耗费的成本,称之为破坏成本。 如果破坏成本小于预期可获得的利益,那么就一定会有利益驱动的、非破坏性的攻击发生。
公钥和私钥加密
信用成本所发生的革命,一个重要的驱动力,来自于近些年出现的许多新的加密协议。最传统的密码学是密钥加密法。在这种方法下,Alice 和 Bob (智能合约用来举例的两个人)使用一个共享的,预先约定的秘钥,对两人之间的消息进行加密。这种协议的关键问题,在于如何对秘钥进行保密,而公钥加密则解决了这个问题。使用这种技术,Alice 生成两个密钥,一个叫做公钥,一个叫做私钥。 她自己保存好私钥,把公钥对外公开。 当 Bob 想要发送消息给 Alice,他用 Alice 的公钥加密消息,然后发送加密好的消息给 Alice,Alice 收到消息后便可以用私钥解密消息。私钥实现了“密码陷门”,让 Alice 方便的计算出用公钥加密的逆向解密。公钥和私钥虽然在数学上是有关系的,但无法从公钥计算出私钥来。 RSA 算法是公钥加密方法中,最流行的。
公共认证
公钥加密也产生了许多种数字签名技术。 证明了数据(之后用“对象”来指代)与所谓的签名,也就是私钥是动态相关的:对象被密钥“签字”了。一个认证协议有两个步骤:签名和验证。 两个步骤可以同步发生。也可以异步进行,在很多公共协议种,对签名的验证可以在未来很久之后才执行。
数字签名,也许称之为“数字盖章”或者“数字封印”更好,因为它的功能结合了所有这些方法,而不仅仅是签名。 总之,它不是基于生物计量的,和真的签名不同,当然在私钥中设置密码来签字,能够替代签名。 在很多亚洲国家,常常使用木头块雕刻成“印”,来替代签名。 每个“印”都是独一无二的,因为那雕刻是特殊的,而且木头的纹理也是无法复制的。 数字签名类似于“印”,因为每个新生成的密钥都是独特的。数字签名依赖于签名者保存好私钥。
盲签名公开的认证私有信息(那么我们是否可以使用非私有签名)/数字签名和密钥结合,便拥有了交换的数学属性,这样就可以按照相反的顺序将其解密。如同使用复写纸在未知的文件上盖章(无需担心弄脏了什么)。效果是 Bob"签署"了一个东西,这个东西在大概的内容上已得以验证,但在某些具体的内容上,却并未泄漏。通常的做法,用签名的密钥,来定义和确认所签对象的含义,而非所签对象的内容,从而保证 Bob 所签署的不会是一个空白的支票。 盲签使用在数字无记名证书,在这里 Bob 是清算代理,而在乔姆证书(Chaumian credentials)中,Bob是证书的发布者。
相对性认证
很多密码学者都发明过“魔法墨水签名”,盲签是其中的一个例子。这一类协议的另一个例子是用来在不披露具体信息给对方的情况下,允许对方来验证签名或者获得签名者的身份。最私密的是零知识证明,使用这种方法,只有对手方才能鉴定证明者。指定的确认者签名,让签名者指定某方作为验证者。例如,某公司可以给予某个审计者、调查者或者仲裁者以权力去验证签名的对象,而其他第三方,比如竞争者,无法从签名中获得任何内容。群组签名,可以让成员作为组织的认证成员,进行签名,而不会披露是哪一个成员所签的名。
密钥的保护
至此,我们可以假设Alice 和 Bob 双方是铁板一块。但是在智能合约的世界里,他们会使用计算机软件代理和智能卡来进行电子投标。密钥不需要和身份捆绑在一起,而进行这种捆绑的任务实际上比想像的要困难。一旦密钥捆上了,就必须认真保护,而很多地方网络是非常不安全的。
我们假设黑客可以拦截任何网络协议下的消息,并将信息重新转发。这也确实在互联网上的很多区域频繁发生。我们还必须假设,在实际的应用中,所有的商业操作系统,他们都可以入侵,并找到硬盘上保存的密钥。
对于终端操作的安全问题,根本就没有彻底完美的解决方案来防范网络攻击。但对于基于公钥的系统,有一种策略可以很好的弱化这个问题:
公钥操作,可以在机器的“不可读”的硬件电路板或者智能卡中执行,并且通过非常狭窄的串口线(只承载简单的,单一用途的协议,安全验证)连接到专门的防火墙。这对于高流量的服务器来说,是非常经济的,但对于单个用户而言,则没有实用价值。 除了更好的安全性外,最大的价值在于加快了公钥的运算。
如果 Mallet 的“能力”可以从物理上控制机器,那么一种较弱形式的密钥保护方法就足够了。要诀在于将密钥存在内存中。 这样 PC 就可以免受物理攻击-只要关闭 PC 就能够毁掉密钥。 如果密钥的备份藏在其它安全的地方,PC的用户就能够将大容量的数据加密,并保存在 PC 或者公共的计算机网络上,而不必担心对 PC 的物理攻击能够获取到数据。数据依然处在“橡胶管攻击”的威胁下,在这种攻击下,主人受到强迫,透露出所藏的密钥。
“能力” (capability 是一种安全模式)
面向对象,或者“能力”,安全性,是深刻且极具前景的区域,但这个不在本文范畴之内。 “能力”可以简化许多分布式安全协议的设计。 有了“能力”,我们不必为每一合约问题,都开发新的加密协议,也不必修改加密协议。我们可以利用“能力”,在公共的加密框架上设计丰富的分布式安全协议。
要了解更多信息,可以参考 Introduction to Capability Based Security
Quora (最低法定人数)
对资源的执行或者控制上,Quorum 分布可以基于密钥的加密共享,来执行或者控制资源。这一类技术也称之为阈值技术。这种技术将密钥(以便对用密钥加密的对象进行控制)分割成为N个部分,仅需要其中的 M 部分便可以复原出密钥,但少于 M 个部分,则无法拼出密钥。加密共享用来在不同的负责人之间实现对象的分布式控制,是一个不错的工具。
例如,Markus Jacobsson 设计了一个基于 quorum 的货币系统,用于签署数字化的货币。Quorum 建立的机制,也是基于“需要共谋”原则,并且执行某个职能,需要 N 中的 M 方配合。比之在通常的职责分离模式下,只需要 N 方中的两方便可执行,在安全性上要更强一层,而且在分权模式下的保密性也更佳。
“事后无法伪造” 交易记录
传统方法中,审计者要去联系双方,以对交易是否发生进行验证。(“需要共谋原则”再次生效)。 使用“事后无法伪造”日志,通过单向哈希功能的分层体系,某一方可以对交易数据的累积哈希值做签名,并公开,完成后,即可公开提交此交易。 交易是完全保密的,除非某个审计者“查找(pings)”这个交易,来判断交易的实际属性。而交易对方的身份,依然是保密的,因为并不需要建立交易的其他事实。 唯一可能的攻击,是在交易发生的时候,实时的伪造交易,而这在现实世界中几乎是不可能的。 大多数的会计欺诈,都是对已完成的大量交易进行分析,然后进行伪造,并利用伪造的交易计算出自己想要的结果。
互为保密计算
密码学者开发了一种协议,可以在两方或者多方之间,创建虚拟机器。多方安全计算可以让任意多的各方参与共享计算,每一方仅仅知道自己的输入得到的结果,以及计算的输出。 这种虚拟机器的特性令人兴奋,每一方的输入都对其它各方保密。 程序和输出,则由各方共享。 由此,可以举例,我们能够在这种虚拟计算机上,通过互联网运行一个电子表格。 我们还可以约定一组公式,用这些公式设置虚拟计算机,每一方输入自己的私有数据。 而对其它各方的输入,我们只能从我们自己的输入和计算输出中进行推导。
这种模式,存在两个主要的弊端。一个是,虚拟计算机非常慢: 每次网络消息,只能处理一个机器指令。 另一个是某些参与方,总是比其它参与方更早得知结果。 有几篇论文就在讨论,为了保证能够获得正确的输出,需要信任多少数量的参与方。 必须将机制设计成,给予足够多的参与方以某种激励,使之有动力去传递正确的结果,或者进行计算,或者对合同进行认证,等等。
有了这些提前警告,理论上,任何算法的中间代理,都可以使用可信的虚拟计算机替代。在实际应用中,由于存在以上两个弊端,我们通常在设计时从更加有效的元素中,挑选使用更加有限的协议。
可信任的第三方:
数学上可信的协议:
多方安全计算机理论,在实现了私有虚拟中介的基础上,对合约的各个阶段都有重大意义。 在协商谈判的领域中,可以清楚的看到这一点。 在经济学中“机制”是一个机构的抽象模型,该机构通过消息与参与者进行通信,而且其规则可以使用算法描述。 这种机构可以是拍卖、交易所、投票站等等。 他们都需要应用某种协商谈判和决策过程。
经济学家假设一个可信任的中介操作该机制。举一个使用虚拟计算机来运行“机制”的例子。 Alice 可以提交一个买入价格,而 Bob 则提交一个卖出价,两个价格都提交到他们共享的虚拟计算机。该虚拟计算机有一个指令,“A 是否大于 B?”。 如果 Alice 的买入大于 Bob 的卖出价,计算机则返回“真”。 更复杂一点的计算机,则可以根据一些不同的算法(Alice的买入价,Bob 的卖出价,折中成交,等等。)这种机制,就使用了“双盲议价”的模式,无需可信任的中介参与。
原则上,这种虚拟计算机(它们都是“图灵完备的”)可以解决任何可计算的问题,任何可计算的经济机制,都能够得以实施,而无须任何中介。 在实际应用中,这些安全的虚拟计算机运行非常慢(每个网络消息,执行一次虚拟计算机指令),而且参与方获得结果的顺序,非常关键。但我们能够证明,任何经济机制都可以在没有可信中介的情况下运行,这就足够令人兴奋了。这意味着,原则上来说,任何可以通过可信任第三方(例如拍卖行或者交易所)进行协商的合约,都能够直接进行协商议价了。所以,在抽象的概念上,智能合约协商议价上,仅存的“困难”问题包括 (a)在使用可信中介情况下,也存在的麻烦问题(由标准的经济原因导致),(b) 在获知结果上的不同步问题,和(c) 从算法上描述议价规则,以及输出合约条款的工作 (包括,当合约参与者缺乏某方面知识时,中介要帮助补足所缺乏的知识。例如,律师对如何起草合约,给出建议)。
对合约的执行阶段,进行这样的分析,就不那么简单了。 首先,执行阶段的经济理论,就不如议价机制的理论那么健全和简单。实际上,大多数经济理论,都简单的假设所有合约都会得到完美执行,而且没有任何成本。 一些关于“交易成本”的文献,开始质疑这种假设,但在合约执行的技术和成本领域,我们依然缺乏真正的成就和一致的理论。
使用多方安全计算机理论,进行执行阶段分析,看上去只能用于那些可以在虚拟计算机内部执行的合约。但是,使用事后无法伪造的审计日志,结合在共享虚拟计算机中运行的审计协议,我们可以在虚拟计算机之外,由选定的仲裁者对各种合约执行动作,进行监控和验证,虽然并非预先设定的自动执行。
在这种互相保密的审计协议中,参与方能够给出验证,账目与之前所提交的交易记录,能够匹配,数字累加也完全正确。 参与方可以基于他们保密的共享交易日志,计算出汇总数值,并且能够在不泄漏日志的情况下,与各个对手方对日志进行交叉验证。他们都无法看到交易的细节,仅仅能够从统计上进行推断。 另外有趣的是,虚拟计算机可以长时间的保存状态,从而实现了复杂形式的个人隐私和自我执行的安全信用。
有了互相保密的审计方法,我们就能够对其他参与方所做声明和报告的真实性,给予足够信任,同时还不必将这些报告中体现的交易信息,以及交易主体信息,泄漏出去。这就为稳固的信誉系统,以及其他可信任的第三方系统,提供了基础。达到了跨越时间、交流和汇总的完整性,并为交易的参与者保密。 只要明确了,在原则上,互相保密的审计是可以达成的,那么我们就可以找到实用的解决方案。
网友评论