作者:icp league
2021 年 9 月 15 日,互联网计算机治理系统 NNS 的 20586 号提案 通过, DFINITY 基金会将对密码学部分持续开发,让互联网计算机网路与 BTC 网络直接集成。这种集成,可以让互联网计算机的软件容器(Canisters)直接持有并发送比特币主网的 BTC,也为比特币网络带来的 智能合约 。
更重要的是,互联网计算机的密码学创新在无需私钥的前提下为合约创建了签名。因此除了为比特币主网带来智能合约能力,这也是让互联网计算机的软件容器(Canisters)直接与以太坊主网交互的基础。我们将不再依靠中心化程度较高的资产桥,而是依靠 IC 的网络共识,实现直接多链节点端到端的集成。
▍什么是直接集成
让 Canister 在比特币网络上直接收取并持有比特币;
让 Canisters 可以追溯并且查询他们自己在比特币网络中的 UTXO;
Canister 能够创建比特币交易,并接受其他 Canister 中的比特币交易,交易转发到比特币网络。
在 Canisters 可以直接持有比特币后,因为 Canisters 为图灵完备,可以编写业务,决定何时与其他比特币用户交易,包括与其他使用比特币网络的 Canisters 进行比特币交易,而业务运行在 IC 网络中。
因此可以可以利用比特币网络上的流动性在互联网计算机上进行智能合约,而不涉及任何中介和桥梁。
在完成比特币直接集成后,下一步将尝试让容器能够持有 ETH ,并让容器发送以太坊主网的交易,让 IC 的 Canisters 与以太坊主网智能合约交互。
▍需要阈值 ECDSA 签名
ECDSA 签名广泛应用于比特币与以太坊网络,因此互联网计算机上的 Canister 应该能够拥有比特币或以太坊的公钥,且能创建 ECDSA 的签名,才能在其他 公链 网络中发送交易。
显然,不应该在容器状态下保存比特币公钥对应的密钥,即使是 Canister 能设置 pirvate 来封装数据,但该密钥仍可能暴露在所有的节点前。因为 Canister 内状态将在子网的节点间共享,和所有的区块链一样,在互联网计算机的信任模型下,可能会存在作恶节点,作恶节点可能通过攻击拿到签名密钥从而盗取资产。
为此,必须先完成阈值 ECDSA 签名,即**在运行 Canister 所在子网 的所有节点之间,共享私钥,并通过阈值加密来创建签名**。也就是说,如果节点的阈值参与并正确完成签名协议,则该协议的输出为有效签名。另一方面,一些不符合阈值的节点不能自己签署未经授权的消息。这是互联网计算机与比特币和以太坊集成的先决条件。
▍风险与挑战
这里的主要挑战在于定义和实现 安全 的 多方计算协议 ,以实现阈值 ECDSA 签名方案,并将其与互联网计算机协议集成。
围绕 阈值 ECDSA 签名协议的进一步挑战,是安全的分布式密钥生成协议,以及用于私有签名密钥的安全密钥备份和恢复方案。
同时,子网不能容忍超过 1/3 的恶意节点,阈值 ECDSA 功能也基于这样的假设: 如果子网中有太多串通的恶意方,他们可以在未经容器批准的情况下代表容器创建签名。
▍解决的方法
再来回顾上述的三个需求:
让 Canister 在比特币网络上直接收取并持有比特币;
让 Canisters 可以追溯并且查询他们自己在比特币网络中的 UTXO;
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 社区对话
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。
网友评论