关于区块链智能合约,首先要了解的是它们实际上不是合约,不智能,也不一定在区块链上。事实上,它们的名字非常不恰当。1 让我们倒序解决这些问题,我们应该能确切地了解智能合约实际上是什么。首先,介绍一下什么是交易,以及什么不是交易。
交易和非交易简介
最著名的区块链是像比特币这样的加密货币。2 关于货币——无论是虚拟的还是非虚拟的——您主要想做的是用它们买卖东西。您想要的是一个简单的交易模型:“一旦我为您提供这项服务,您就会给我这么多货币。” 我们知道这是如何运作的,因为每次我们在商店或网上购买东西时,都会发生这种情况:起始状态是“我有x数量”,交易完成后的状态是“我有x-y数量,你有y数量”。4 在您完成交易之前,您关心的是从一种状态转移到另一种状态。大多数加密货币都设置为支持这种类型的结构。
这很棒,但一些聪明的人意识到实际上有很多不同的方法可以做到这一点。以太坊是非交易结构大放异彩的地方,而Solidity是最著名的例子。我很高兴地说,两者都是开源项目。为什么不设置更复杂的一系列条件,在满足这些条件后,我才交出我要交出的东西?而且——这是聪明之处——为什么不将这些条件写入可以由计算机执行的代码中呢?您可能希望货币——或其他任何东西——仅在一定时间后释放,或者在股票价格保持在特定范围内时,或者在特定的人继续担任首相时,5 或者在未来五天内没有意外的日食时。6 您也可以有复杂的依赖关系:只有在我连续三周写一篇新帖子并且没有人对它们发表令人不快的评论时才能完成。7 编写这段代码,如果条件得到满足,那么您将转移到下一个状态。
不仅适用于区块链
让我们开始解决那些“不”的说法。
现在,在区块链中,重要的是一旦状态发生改变,您就要确保它被记录在区块链上,以便它是公开的,并且没有人可以更改或质疑它。但是区块链技术还有其他用途,正如我在“区块链是安全主题吗?” 中解释的那样。 无需许可的系统,通常被称为分布式账本技术 (DLT),非常适合非交易状态模型,这主要是因为对它们感兴趣的人是封闭的组织群体,他们希望在转移到下一个状态之前满足复杂的一系列条件。 从最严格的定义来看,这些不是区块链。银行和其他金融机构可能是 DLT 获得发展势头的最明显例子,但它们在供应链领域非常有用,例如,在供应链领域,您可能需要围绕不断变化的市场利率、可用性和运输时间或成本的条件,这些条件都可能影响所提供商品或服务的最终价格。
没那么智能
智能合约可能,我想,可以很智能,但对我来说,这意味着复杂且能够对意外或不太可能的情况做出反应。我认为人们称它们为“智能”是因为它们体现在代码中,而不是因为我上面提出的原因。
我认为这实际上是一件非常好的事情,因为我不认为我们希望它们意味着我所说的那些。我所知道的大多数“智能合约”的用法都是两个或多个组织就基于一组已知且良好约束的条件来达成系统可能结果的协议。 这通常是合约的目的,尽管我将要反驳名称的这一部分,但在这种情况下,它还是相当贴切的。
您通常想要的是不是意外或不太可能的情况以及人工智能/机器学习类型的智能处理,因为如果您这样做,那么结果可能会让参与方中的一方或多方感到惊讶,并且很可能不愉快。 简单——或至少易于定义——是您希望内置到系统中的关键属性。 例如,Solidity 项目似乎意识到了至少其中一些陷阱,并建议使用智能合约的人员采用形式验证,但正如我们将在下面看到的那样,这只是触及了问题的表面。
不是合约
当然,有些合约——“现实生活”中的合约——的存在是为了管理复杂和意外的情况。 并且它们存在于明确的法律管辖范围内。 构成它们的词语和短语受制于特定的和明确定义的程序,当合约条件未满足或被违反时,会有已知的制裁和惩罚。 经常会出现对这些合约提出质疑的情况,但同样,也存在针对此类质疑的明确机制。
就目前而言,“智能合约”不符合合约的这种描述。 将法律合约措辞映射到计算机代码是一个非常复杂的过程,并且代码处理容易出现的错误类型在司法系统中没有很好的类比。 还有一个管辖权问题。 这通常在合约条款中描述,但是如果“智能合约”的处理发生在与参与方不同的管辖区,甚至在未知的管辖区,该怎么办? 这应该重要吗? 这可能会重要吗? 我不知道,我也不知道一旦人们开始以法律可执行的方式依赖这些结构,还会出现哪些其他问题,但我怀疑它们不会受到欢迎。
当 IT 人员谈论软件合约时,他们谈论的是完全不同的东西,这也没有帮助我们:它是系统在已知输入和起始条件下对外宣称的行为。
这与安全有什么关系?
一旦交易——或“智能合约”——完成并进入区块链或分布式账本,它就是不可变的,几乎是根据定义。 但是在它完成之前呢? 嗯,在本帖开头描述的那种简单交易是原子性的——它们要么发生,要么不发生,用行话来说,它们是“不可分割和不可简化的”。 对于大多数目的而言,它们是瞬时的。
“智能合约”的情况并非如此。 它们需要处理,因此会随着时间的推移而存在。 这意味着在处理过程中,它们会受到任何系统都可能容易遭受的各种攻击。 标准列表是
- 保密性。“智能合约”的状态可能会受到窥探,这可能会导致不对称知识或泄露给未经批准的各方。
- 完整性。 对于许多“智能合约”来说,这是最可怕的情况。 如果一个实体——无论是基础合约的当事方还是非当事方——可以(有意或无意地)更改执行“智能合约”的代码的内部状态,那么“智能合约”的结果将不会像预期的那样,并且任何参与方都可能有充分的理由对结果提出异议。 更重要的是,这种争议甚至可能不取决于损失完整性的证据,而仅仅取决于怀疑。 在执行上下文中证明运行时完整性——更不用说在表明运行时完整性已丢失时减轻影响——极其困难。
- 可用性。 如果一方看到与“智能合约”相关的条件变得对其不利,他们可能会尝试影响构成“智能合约”的任何部分的可用性,无论是代码本身的处理、系统的输入还是系统的输出。 这些都可能对现实生活的结果产生重大影响。
所以呢?
这篇文章以对命名约定的看似吹毛求疵的攻击开始。 正如我认为可能很清楚的那样,8 我对“智能合约”这个短语感到不舒服,这主要是因为我认为它导致一些人认为这些结构是它们不是的东西。 反过来,这很可能意味着人们会在不合适的场合使用它们。
我还担心,因为词语会带来包袱,这会导致人们没有充分考虑安全性对这些结构的影响。 而且我认为这种影响可能非常重大。 因此,如果您正在研究这些结构,请睁大眼睛。 我在这篇文章中没有过多谈论缓解措施,但存在一些缓解措施。 请关注未来的帖子以了解更多信息。
1 我喜欢认为已故的、令人惋惜的作家特里·普拉切特和道格拉斯·亚当斯都会因为这个原因而欣赏智能合约。
2 您会发现许多比特币评论员说的第一件事是,“我希望我早点买入:我现在已经是百万富翁了。”3
3 我希望我早点买入:我现在已经是百万富翁了。
4 少缴税或房屋砍价。 抱歉——世界就是这样运作的。
5 或者不担任。
6 我不期待日食。 我会告诉你的,真的。
7 这不是邀请。
8 如果到现在还不清楚,要么是你没有足够仔细地阅读这篇文章,要么是我没有解释好。 尝试再次阅读,如果这没有帮助,请写一条评论,我会尽力解释得更好。
本文最初发表于Alice, Eve, and Bob—安全博客,经许可转载。
3 条评论