查看原文
其他

DFINITY 网络与 BTC 网络直接集成的最新进展调查报告

DfinitySZ DfinitySZ 2022-01-05

文章来自于|Yokayoka

投稿、转载请联系|DfinitySZ小助手


2021 年 9 月 15 日,互联网计算机治理系统 NNS 的 20586 号提案 通过,DFINITY 基金会将对密码学部分持续开发,让互联网计算机网路与 BTC 网络直接集成。这种集成,可以让互联网计算机的软件容器(Canisters)直接持有并发送比特币主网的 BTC,也为比特币网络带来的智能合约。


更重要的是,互联网计算机的密码学创新在无需私钥的前提下为合约创建了签名。因此除了为比特币主网带来智能合约能力,这也是让互联网计算机的软件容器(Canisters)直接与以太坊主网交互的基础。我们将不再依靠中心化程度较高的资产桥,而是依靠 IC 的网络共识,实现直接多链节点端到端的集成。



什么是直接集成

1.让 Canister 在比特币网络上直接收取并持有比特币;


2. 让 Canisters 可以追溯并且查询他们自己在比特币网络中的 UTXO;


3. Canister 能够创建比特币交易,并接受其他 Canister 中的比特币交易,交易转发到比特币网络。


在 Canisters 可以直接持有比特币后,因为 Canisters 为图灵完备,可以编写业务,决定何时与其他比特币用户交易,包括与其他使用比特币网络的 Canisters 进行比特币交易,而业务运行在 IC 网络中。


因此可以可以利用比特币网络上的流动性在互联网计算机上进行智能合约,而不涉及任何中介和桥梁。


在完成比特币直接集成后,下一步将尝试让容器能够持有 ETH,并让容器发送以太坊主网的交易,让 IC 的 Canisters 与以太坊主网智能合约交互。


需要阈值 ECDSA 签名

ECDSA 签名广泛应用于比特币与以太坊网络,因此互联网计算机上的 Canister 应该能够拥有比特币或以太坊的公钥,且能创建 ECDSA 的签名,才能在其他公链网络中发送交易。


显然,不应该在容器状态下保存比特币公钥对应的密钥,即使是 Canister 能设置 pirvate 来封装数据,但该密钥仍可能暴露在所有的节点前。因为 Canister 内状态将在子网的节点间共享,和所有的区块链一样,在互联网计算机的信任模型下,可能会存在作恶节点,作恶节点可能通过攻击拿到签名密钥从而盗取资产。


为此,必须先完成阈值 ECDSA 签名,即**在运行 Canister 所在子网的所有节点之间,共享私钥,并通过阈值加密来创建签名**。也就是说,如果节点的阈值参与并正确完成签名协议,则该协议的输出为有效签名。另一方面,一些不符合阈值的节点不能自己签署未经授权的消息。这是互联网计算机与比特币和以太坊集成的先决条件。


风险与挑战

这里的主要挑战在于定义和实现安全的多方计算协议,以实现阈值 ECDSA 签名方案,并将其与互联网计算机协议集成。


围绕 阈值 ECDSA 签名协议的进一步挑战,是安全的分布式密钥生成协议,以及用于私有签名密钥的安全密钥备份和恢复方案。


同时,子网不能容忍超过 1/3 的恶意节点,阈值 ECDSA 功能也基于这样的假设:如果子网中有太多串通的恶意方,他们可以在未经容器批准的情况下代表容器创建签名。


解决的方法

再来回顾上述的三个需求:


1. 让 Canister 在比特币网络上直接收取并持有比特币;

2. 让 Canisters 可以追溯并且查询他们自己在比特币网络中的 UTXO;

3. Canister 能够创建比特币交易,并接受其他 Canister 中的比特币交易,交易转发到比特币网络。


针对功能 (1),Canisters 需要有一个阈值 ECDSA 公钥,其比特币地址基于此派生。


针对功能 (2),需要将比特币块提取到互联网计算机中,以此来验证并跟踪比特币的区块链。一旦区块链上的后续区块中有足够的工作量,该交易及其 UTXO 就可以被提取,并根据要求提供给 Canisters;


针对功能 (3),互联网计算机必须建立出一个出站通信通道 (outbound communication channel),基于此,来自比特币智能合约容器的出站交易可以可靠地发送到比特币网络。

 


阈值 ECDSA 在功能上是与比特币完全分离,作为一个单独的功能构建在 IC 上,Canisters 通过它获取公钥和签署交易的 API,从而允许支持比特币的智能合约。


在 IC 网络自己的易用性上,根据现在的计划,所有使用比特币网络的 API 调用都是异步的。值得注意的是,异步调用在这个设定下非常迅速,因为在功能上发送比特币的交易与该 Canister 是在同一个子网内运行的,不存在跨子网延迟。


 需如何检查比特币网络状态

互联网计算机会引入其他网络的区块并验证它们是否正确(格式、难度等),并在得到一定数量的确认后再处理交易,保证最终性。由于互联网计算机上的副本直接从比特币网络中引入区块,因此安全性取决于互联网计算机和比特币网络的正常运行,而不是其他因素。比特币的状态主要用于跟踪每个装有比特币的 Canisters 的当前余额。


但在副本上不会运行比特币及以太坊的节点,只会在副本上配置专门的适配器来获取来自比特币及以太坊 P2P 网络上的区块。适配器会与其主网处于同一共识下,所以副本上会有同样的状态,并且系统能保持期望中的安全性质。


互联网计算机和比特币网络之间的中继通过一种尽可能的去中心化的方式在 IC 节点上实现:在支持比特币集成的 IC 子网中的每个节点,都将随机地连接到比特币网络的一组节点。这种方法还允许以高度去中心化的方式,快速分散交易到比特币网络的多个节点。


关于相关的安全问题,DFINITY 计划对执行危险任务的代码进行沙盒处理,例如在高度受限的沙盒中解析不受信任的内容,这样即使有人通过提供恶意的网络响应(例如,我们连接到了攻击者的比特币节点)成功发起远程代码执行攻击,他们也无法突破沙盒,从而无法造成任何实际伤害。


比特币的最终性(finality)在适配器的 get_UTXO_set 的 API 中得到了解释。对于 API 返回的比特币地址,可以把 UTXO 集合中获得一个确认的总金额,作为 UTXO 的元数据,比特币最终性将被进一步抽象为账户模型下的余额。



集成比特币之后

上述提到的适配器这种网络体系结构,是以一种非常通用的方式构建的。用一个单一、统一的体系结构提供所有这些功能,该体系结构是 IC 协议栈的一部分。因此除了比特币集成之外,它还可以用于多种用途:


  • 这里的另一个关键用途是未来的以太坊集成;

  • 允许容器进行 http 调用或进行任意网络连接。


不同的协议(BTC、ETH、http、TCP…)将共享大部分架构组件,例如在网络级别,并且每个协议都接收自己的协议适配器。这样,我们可以保持架构高度模块化但功能强大,并且与 IC 协议的耦合尽可能小。


目前计划是首先进行比特币集成,然后进行以太坊集成。我们会为这些区块链引入特定代码,例如连接比特币或以太坊 P2P 网络的专用适配器。目前只会增加对这两个区块链的支持。如果整合取得巨大成功,社区要求整合 Litecoin、Dogecoin 和其他网络,我们当然可以投票表决。


与比特币集成将为实现外部 HTTP 调用的功能奠定基础,DFINITY 可能在明年开始进行这部分的开发。



最新进展

9月15日更新


  • 关于加密协议研究论文中,还需要进行内部安全审查,然后才能将结果发布给社区。


9月22日更新


  • 值 ECDSA 社区对话,点击回看:

    https://www.youtube.com/watch?v=MulbKPwv6_s

10月4日更新


  • 阈值 ECDSA 功能的实施工作:已经实现了一个很好的部分“基础”,如数据类型,工件池(artifact pool)的阈值 ECDSA 工件,用于创建和验证交易等。到目前为止,上述实现都是在都模拟状态下进行的。一些加密原语已经并行实现,但到目前为止尚未与一致意见集成。

  • 下一个重大里程碑是在 11 月 20 日左右,实现最小子网(4 个节点)的共识与 ECDSA 加密的集成。


10月19日更新


  • 在比特币网络适配器和比特币系统组件的功能实现方面取得了出色的进展。举个例子,比特币系统组件已经可以从比特币块构建 UTXO 集合并很好地处理分叉。


10 月 31 日更新


  • 在设置了 11 月 20 日的里程碑之后,我们意识到该功能很可能只会在明年最终发布。现在很难给出一个很好的估计,计划将在第一季度发布。

  • 昨天我们举办了第一次“比特币社区开发者研讨会”,来自 DFINITY 的核心开发者正在研究阈值 ECDSA 和比特币的集成。


11月4日更新


  • 关于阈值 ECDSA 的密钥管理的最终决定还有待商榷;

  • 在单一子网上的所有的 Canister 的密钥将来自于这个一个主密钥(master key);当在不同的子网上部署同样的主密钥时,这个密钥的安全性将取决于部署了密钥的子网安全性的短板处。这意味着我们需要使用足够安全的子网来承载给定的主密钥;

  • 现在的策略是在多个子网上部署主密钥以确保我们有备份。


11月6日更新


  • 社区建议官方提供一个选项,让 Canister 选择是希望使用比特币主网还是测试。这样可以更轻松地测试容器代码,而无需在比特币主网上执行交易。

  • 阈值 ECDSA 功能很可能会延续到 2022 年实现,这也会延迟比特币集成功能的推出。社区建议,如果比特币功能提前完成,我们应该让他们在没有阈值 ECDSA 的情况下访问比特币功能,并在实施过程中模拟 ECDSA 功能发展,这将有助于缩短比特币相关功能的推出时间。

  • 互联网计算机上的 EVM:社区强调了能够在 IC 上运行 EVM 代码的重要性,以便在 Solidity 中编写的智能合约可以在 IC 上运行,而无需重新实现。


11月12日更新


  • 阈值 ECDSA:加密和共识机制的工程团队目前正在加紧进行共识机制和 ECDSA 签名之间的首次集成,这是一项重大的里程碑,我们将验证一个阈值 ECDSA 签名所需的最小四节点子网。我们已经为这一里程碑设定了一个最后期限,即下周末。到目前为止,我们已经取得了很好的进展。

  • 比特币适配器与比特币系统组件的协议集成:本周工程团队取得了重大进展,网络层的比特币适配器和执行层的比特币系统组件之间的协议开始工作。也就是说,比特币系统组件可以从适配器中获取区块,适配器将请求与其预取区块匹配,并在匹配的情况下提供新的比特币区块,新块由系统组件处理。比特币系统组件的区块请求包括系统组件具有的比特币区块链视图中的所有块哈希。适配器以比特币区块作为响应,以防其区块与系统组件在其本地视图中的区块“顶部”相匹配。该协议级集成是通过单个适配器完成的,该适配器“直接”连接到比特币系统组件,而不是通过 IC 协议栈。这意味着比特币相关功能的核心部分现在在这两个主要组件中工作,但后续会继续开发新的通信机制。

  • 接下来的步骤是解决协议栈的集成问题,如在 IC 共识层的扩展,使请求和响应与 IC 协议栈集成,允许提交传出事务。


11月19日更新


  • 官方打算在不支持阈值 ECDSA 的情况下发布比特币功能的“开发者预览”,以便人们可以开始预实现 Canisters 上与比特币相关的业务逻辑。


11月20日更新


  • 将在下周达到实现一个里程碑,在内部演示中暗示最小四节点子网的集成情况。


11月26日更新


  • 预签名协议的共识功能和加密原语的集成已经完成了,并且我们还增加了加密功能。其中,预签名是最阈值 ECDSA 功能实现中最复杂的部分,现在我们仍在使用仍然需要“解决”的快捷方式进行端到端的工作。对于这些快捷方式,我们在签名协议实现后将完成全部功能。

  • 为了使预签名更加具体,我们通过 Grafana 仪表盘对功能进行了可视化。细节如下图:



  • 下一个里程碑是签名协议的实现,该协议为每个阈值 ECDSA 签名使用预签名协议的四倍。它比预先指定协议更简单,目前正在研究中。


11月27日更新


  • 1月份的时间很紧,因此我们可能会在 12 月底或 1 月份看到开发者预览,这样人们就可以开始使用比特币功能构建智能合约。预计将在 2022 年第 1 季度后半阶段全面发布。


11月29日更新


  • Taproot 和阈值 Schnorr 签名可能是阈值 ECDSA 之后的下一步,但目前还没有确定的决定。在实施阈值 Schnorr 时,我们完全可以利用阈值 ECDSA 工作的协同效应,但是,我们仍然需要定义协议规范,包括密钥派生方案,证明其安全性,创建系统设计(利用协同效应)并实施它。

  • 因此,我们的计划是在符合优先级的条件下,先推出阈值 ECDSA,然后考虑 Taproot 和阈值 Schnorr。


12月10日更新


  • 我们再次思考了将比特币功能引入我们的社区的最快途径是什么,以便可以针对其API实现智能合约容器。结果是,我们眼前的重点应该是在一月份发布比特币功能,作为本地dfx开发环境的一部分。本地副本将仅连接到本地运行的比特币,而不是比特币主网或测试网。根据目前的想法,我们将其作为dfx的测试版发布,其中包含最新dfx版本包含的所有内容以及比特币功能。

  • 这种设置将允许社区成员开始使用比特币针对IC比特币API实施他们的智能合约。我们认为这是将某些东西带给我们有价值的社区的最快前进道路,以便您可以开始使用它。显然,阈值 ECDSA 将不可用,取而代之的是我们的模拟 API 或仅在容器中运行的 ECDSA 库。一旦可用,可以很容易地将其与实际阈值 ECDSA API 交换。

  • 获得此MVP的最大剩余工作是我们现在关注的IC堆栈集成。这正在跨越整个IC堆栈,并且有几个剩余的问题。还有更多的小工作项目需要完成,这些工作项目还不够有趣,无法在这里讨论它们。我们认为在 Januray 完成所有这些工作并在 1 月下旬发布此 MVP 是现实的,除非我们遇到一些意想不到的障碍。

  • 我们为实现创建 ECDSA 签名的签名协议设定了一个新的(积极计时)里程碑:12月22日。


12月22日更新


  • 我们正在朝着1月底开发者预览版的目标前进。 计划首先发布比特币功能,作为 容器SDK(dfx 环境)的一部分。 目前正在致力于将代码与 IC 堆栈集成,其中大部分代码已经可用。容器SDK 可能会以启用比特币功能支持的 Beta 版本发布。

  • 作为发布的一部分,我们希望为智能合约开发人员提供一种合理的方式来测试他们的智能合约。 我们最初决定只为本地运行的 bitcoind 提供支持。2022 年第一季度晚些时候发布的比特币IC主网将允许与比特币测试网和主网集成。

  • 我们即将达到我们计划在 12月22日实现签名生成端到端工作的里程碑。实现这一里程碑的大部分功能都在那里,但系统 API 仍然需要连接,以便容器可以发出签名请求,并且找到响应返回容器的方式。随着假期的开始,里程碑成就可能会进入新年的第一周。



ICP集成比特币最新进展


  • https://forum.dfinity.org/t/direct-integration-with-bitcoin/6147/137

  • https://forum.dfinity.org/t/threshold-ecdsa-signatures/6152/111



必看周刊


生态精选


寻宝回顾


精彩活动


联系我们

 电报 

        t.me/DfinitySZ

 官方网站

        dfisz.com

 英文推特 

        twitter.com/DfinitySZ

 中文推特 

        twitter.com/DfinitySZCN

 英文论坛 

        reddit.com/user/DfinityShenZhen


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存