比特币的智能合约?关于 DLC 的安全性分析
ScaleBit
2024-07-02 08:50
订阅此专栏
收藏此文章




本文由 ScaleBit,DLC.Link 和 Bison Labs 共同创作


离散日志合约 (DLC) 从 2020 年诞生至今实际上已有数年的时间。这个概念最近随着多个项目对于比特币二层的探索而重新被提起。开发者期望 DLC 能够在 bitcoin 的借贷,跨链,以及更加复杂的自定义合约中大显身手。鉴于这种期望,DLC 也被许多人称为比特币的智能合约。当然,比特币网络无法完成复杂的逻辑验证,因此,DLC 应该被理解为一种协定,其必须拥有可预测的结果,以及有限的状态空间。如果过分的夸大 DLC 能够起到的作用,将其运用于一些并不恰当的场景中,将可能会为项目带来不可预知的风险。 


本文将会从安全的视角来对 DLC 技术进行总览,我们将首先对 DLC 的概念进行简要的介绍,之后列举其目前常见的运用场景,并分析其中可能包含的一些安全问题。


DLC 的基础


准确来说,DLC 是一种规范,它能够令一个比特币脚本接收来自外部预言机的消息,并且依据该消息中的数据来决定最终脚本要如何进行解锁。为了简洁起见,我们考虑以下情形:只有两个参与者,它们需要猜测比特币的涨跌。具体来说,它可以被分为三个步骤:


例子:对赌

为了简介起见,我们只考虑双方,他们要猜测比特币价格的涨跌并用 DLC 兑现。其具体步骤包括:


步骤 1 合约初始化

首先,DLC 的参与双方 X 和 Y 共同创建一个 2-2 的多签地址 A,并且将资金发送到 A 当中。


步骤 2 构建 Contract Execution Transactions(CET)

接下来,A 和 B 将会和预言机一起,按照可能出现的结果,用多签地址中的代币,再构建两笔交易。这两笔交易被称为 Contract Execution Transactions (CET)。这两笔交易都需要使用 3-3 的多签进行解锁,其中,交易双方已经提供了两个签名,第三个签名将会由预言机按照最终的结果进行提供。


步骤 3 预言机解锁

在比特币的价格变化后,预言机将会放出两笔交易中其中一笔的签名,这样一来,参与者 A 和 B 都能够按照结果来执行交易。


这个简单的例子说明了 DLC 的本质:因为每个结果对应一个单独的交易,因此 DLC 不能处理过于复杂的交易或允许太多的参与者加入。这些特点决定了它的功能相对有限。在下一节中,我们将讨论一些当前使用 DLC 的场景和项目。


例子: 自动时间锁

接下来让我们考虑稍微复杂一点的情形,例如质押:用户总是希望在一定的时间之后解锁他们的资金。


步骤 1:创建合约

首先,参与者 A 创建了一个智能合约,并把钱存在了里面。这个合约的内容为,在一定的时间点之后,将 A 的资金全部退还给他。


步骤 2: Optional Early Unlock Mechanism

参与者 B 并不在合约中投入任何资金,但是在一些特定条件下(例如 A 放弃质押利息),它可以提前提取出这笔资金。具体的方式都可以通过预定义的方式创建交易来完成。


步骤 3: Fund Unlock

如果在时间到达之前,都没有触发任何 B 指定的条件,那么最后这笔钱将会原封不动地退还给 A。但是如果 B 提前达到了一些条件,则可以让 A 提前取出这笔资金,而无需一定等待到指定的时间点。


这个例子展示了 DLC 更加灵活的用法,可以通过一个参与者 B 来单纯的对合约中的触发条件进行反应,来实现更为复杂的支付逻辑。


在下一章节中,我们将讨论一些使用 DLC 的项目和场景。


基于 DLC 的跨链桥


目前,DLC 最广为人知,也是最为典型的应用,就是对跨链资产进行管理。目前包括 DLClink, bison lab 等项目都怀着对 DLC 的雄心壮志,希望能够依托它打造一个比传统桥更为优越的资产跨链方式。传统的跨链方案会要求用户将资金转入一个特定的地址。这个地址几乎是由项目方完全掌控的。尽管通过多签与去中心化网络搭配的方式,增加这类方案的可信度,但是依然无法避免钱包的所有者集体作恶或者不响应,导致参与者的资产受到损失。


通过 DLC 可以构建一种不同的跨链方式。直截了当的说,实际上 DLC 也必须通过一个特定的地址来履行,这点和跨链桥相同。但是不同之处在于,DLC 的控制者是预言机,而不是任何资产的参与者,这正是许多人声称 DLC 能够实现去信任,去中心化资产跨链的原因。但这个说法听起来有些奇怪,因为从先前的描述当中,DLC 似乎和一个多签账户没有太大区别。为了理解这个问题,我们举一个简单的例子:假设 A 和 B 在打赌房间外的天气,但是由于房间没有窗户,它们只能去问第三个人 C。但是很不幸的是,C 实际上是 A 的朋友,因此 B 必须非常小心地进行这个询问。


(1)B 对 C 说,我和 A 正在进行一个赌局,如果下雨 A 就可以得到收益,如果天晴 B 就得到收益,请你告诉我准确的天气是什么。结果是显而易见的,无论外面天气如何,C 都会与 A 合谋,说外面在下雨。


(2)B 对 C 说,请告诉我外面的天气是什么。这种情况下,C 并不了解这个赌局,因此它只能按照真实情况进行描述。


通过这个例子,我们可以很清晰的了解到预言机与一般的资产参与者之间的区别。预言机实际上只负责给出真实的描述,而并不会了解这些描述可能导致的结果。尽管不同项目之间的实现有所差别,但基本都会遵循这样一种方式:对于 DLC 桥而言,任何参与者在将资产,例如 1 个 btc 加入到 DLC 脚本之后,将会得到 1 个 DLCbtc。而当参与者试图解锁自己的 btc 时,预言机会负责给出参与者是否能够提供大于或等于 1 个 DLCbtc 的资产。如果可以,预言机就会进行签名,参与者就可以使用这个签名解锁自己的 btc 了。相比于项目方,预言机相对来说更加可信。因为首先,由于 DLC 地址是用户和预言机共同创造的,预言机并不能盗取这笔资产。其次,预言机并不关心具体的行为,而只是关注真实的信息,这样能够有效的减少利益冲突的可能。因此,使用 DLC 去构建一种全新的跨链桥模式,的确具有其独特的优势。


DLC 的安全性考虑


的确,在理想的情况下,使用 DLC 将能够使得跨链的过程更加安全,并且用户对其跨链资产会有更多的自主权。但是这仅仅是理想情况。鉴于目前使用 DLC 作为技术基础的方案还并不是非常成熟,我们认为有必要指出一些值得关注的安全问题。我们认为,最值得关注的几个方面,就是预言机的可靠性,哈希时间锁的引入,以及链上 / 链下部署问题。


(1)预言机的可靠性 


这个问题可以说是 DLC 应用当中最为重要也最为棘手的一个问题。如前文所述,一个完美的预言机,应该完全不了解 DLC 的状态,而只响应对信息的查询。但事实上,由于比特币是完全透明的,因此预言机完全能够主动地对 DLC 的信息进行了解,进而产生了预言机与其他参与者合谋的可能性。与此同时,预言机需要为 DLC 脚本提供公钥,这就进一步地增加了预言机干涉 DLC 正常功能的可能性。


解决这个问题存在两个不同的层次。第一个层次相对来说比较容易做到,即预言机不应该参与到 DLC 的创建过程中。具体来说,参与者应当要求预言机生成一系列的公钥,称之为公钥箱。其中,每个公钥都会有一个预先协商好的规则,在满足条件的情况下,预言机就会对其进行签名。这样一来,参与者就能够直接使用这些公钥区生成 DLC,而预言机则不会直接参与到 DLC 的生成过程中。

 

第二个层次相对比较困难,即预言机不应该能够获悉 DLC 的信息。这点非常难以做到,但是它存在很大的潜在风险。有一种不太完美的方式可以做到这点。第一种是利用 Schnorr 签名,要求多个预言机对同一个信息进行签名。因为主动查询 DLC 脚本并给出错误信息的行为,事实上等同于该预言机为恶意节点。因此,通过增加网络中的节点数量,并使用阈值签名,就能够极大的降低恶意节点成功的可能性。在诞生出更加可靠的方案之前,本文认为多签预言机的保障是非常必要的。


(2)哈希时间锁的安全性


哈希时间锁(HTLC)在确保跨链交易的安全性和无信任性方面发挥着关键作用。这些密码构造使得当事方之间能够进行有条件的支付,在指定的时间范围内仅在满足特定条件(如哈希的预图)时才释放资金。


部分涉及到借贷的 DLC 鼓励用户快速的进行交易,会使用传统的哈希时间锁来管理 DLC 脚本,但是这个做法实际上存在一定的安全隐患。如之前所提到的,预言机会提供一系列的公钥,作为对 DLC 的解锁条件。但是需要注意,由于公钥实际上对应的是某一种信息(例如,比特币的涨跌),因此,同一个公钥完全可能被用于多个不同的 DLC 当中。因此,在设置哈希时间锁的时候,绝对不能够使用与预言机公钥有关的内容进行构建。


此外,由于 DLC 本身往往涉及条件判断,因此需要特别注意 DLC 是否会对解锁双方产生不公正的影响,例如 A 能够解锁的情形下,B 却因为某些 DLC 的限制而无法获取资产。


(3)用户参与


在 DLC 中,用户的参与事实上引入了一项关键的安全特性:原始资产持有者成为任何资产转移中的信任、必要的参与者。通过要求资产持有者在资金移动时签名,这种方法确保资产只能在用户明确授权的情况下转移,显著增强了安全性。


这种方法利用了用户控制的安全概念,用户是验证和批准交易的最终权威。实际操作中,这意味着任何未获得用户直接同意的交易尝试,通过其独特的数字签名证明,将自动被拒绝。这降低了未经授权的访问和资产转移的风险,因为恶意行为者需要破解用户的私钥才能发起交易,这是一个更具挑战性的任务。

此外,将用户签名纳入交易过程不仅减少了外部威胁相关的风险,还增强了参与 DLC 的所有方的问责性。它提供了一种透明的机制来跟踪资产移动,确保交易的每一步都被记录和可验证。


通过实施这样的安全措施,DLC 协议可以在跨链交易中培养更高程度的信任和可靠性,从而鼓励这些技术在各个金融部门的更广泛采用和利用。


总结


DLC 尽管诞生有一定时间,并且随着 taproot 的更新而更加灵活和强大,但是它的安全性并未经过广泛的检验。我们很高兴看到 DLC 技术重新得到关注并引发技术热潮,但是其中可能存在的安全问题不容忽视。我们还会持续地关注 DLC 的发展,并持续带来新的观点和分析。


本文由 ScaleBit,DLC.Link 和 Bison Labs 共同创作



关于 ScaleBit

ScaleBit,BitsLab 旗下子品牌,是一个为 Web3 Mass Adoption 提供安全解决方案的区块链安全团队。凭借在区块链跨链和零知识证明等扩展技术方面的专业能力,我们主要为 ZKP、Bitcoin Layer 2 和跨链应用提供细致和尖端的安全审计。


ScaleBit 团队由在学术界和企业界都有丰富经验的安全专家组成,致力于为可扩展的区块链生态系统的大规模应用提供安全保障。


https://www.scalebit.xyz/

https://twitter.com/scalebit_


END


点击卡片,关注 ScaleBit ~

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

ScaleBit
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开