查看原文
其他

【里程碑意义】Dfinity集成比特币网络的必要功能提案受理

DfinitySZ DfinitySZ 2022-01-05


UTC时间2021年9月17日一个ID为20586的NNS提案以301806620的投票权被受理即ICP集成比特币网络实现在ICP链上无需私钥就可以发起更快更低Gas的比特币交易,而实现该过程的先决条件是需要一个阈值ECDSA签名功能,该功能在集成比特币网络起到关键作用:Canisters必须拥有一个ECDSA公钥,集成后的网络的比特币地址来自该公钥,拥有ECDSA功能的Canisters可以消耗UTXO,这使Canisters能够创建比特币交易并接受来自Canisters中此类交易并且可靠的中继到比特币网络。

 


ECDSA:椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。它在1998年既已为ISO所接受,并且包含它的其他一些标准亦在ISO的考虑之中。与普通的离散对数问题(discrete logarithm problem DLP)和大数分解问题(integer factorization problem IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm problem ECDLP)没有亚指数时间的解决方法。因此椭圆曲线密码的单位比特强度要高于其他公钥体制。

 


提案21340:将阈值ECDSA签名集成到 Internet Computer

 

概述:ECDSA签名广泛应用于区块链行业,将此功能集成在Internet Computer上可使Canisters拥有ECDSA公钥,相应的ECDSA秘钥持有在子网节点之间共享阈值,使 Canisters拥有ECDSA,该功能是ICP链集成ETH、BTC网络的先决条件。

 

提案发起人:Victor Shoup、Manu Drivers、Dieter Sommer、Jan Camenisch

 

提案时间线:


  • 1-Pager在论坛上发布审核:2021年9月10日 UTC
  • 与Victor Shoup进行的社区对话:2021年9月16日 UTC
  • NNS Motion Proposal提交时间:2021年 9月20日 15:00  UTC
  • NNS Motion Proposal到期时间:2021年9月22日15:00 UTC
  • 如果NNS Motion Proposal通过,实施部署时间:2021年第四季度


 

阈值ECDSA提案集成方案:


ETH、BTC网络都是使用的是ECDSA,所以如果要使Canisters创建BTC、ETH交易,Canister必须能够创建ECDSA签名。但是相应的密钥不能成为复制Canisters状态的一部分,所以密钥将在子网节点之间共享阈值,它们在Canisters发起签名请求时协作创建阈值ECDSA签名。

 


1、Canisters 接口:


  • 请求签名:Canisters将能够使用以下方法请求签名,设置derivation_path后,消息将使用Canisters密钥派生的私钥进行签名。
    sign_with_ecdsa : (record { message_hash : blob; derivation_path : opt blob;}) -> (record { signature : blob});
  • 检索公钥:Canisters将通过以下API请求其Can公钥。(返回设置derivation_path相应的ECDSA公钥)
    get_ecdsa_public_key : (record { derivation_path : blob;}) -> (record { public_key : blob});


创建ECDSA签名:出于效率问题,每个子网都将会有一个ECDSA密钥对,由此应用标准的密钥派生机制将会派生每个Canisterss的密钥,然后Canisters可以使用BlP32密钥进一步派生许多密钥。

 

创建请求的ECDSA签名:实现阈值ECDSSA签名比Dfinity共识层的阈值BLS签名要困难的多,阈值BLS签名只需要在节点之间共享一个密钥,对于ECDSA,不仅需要一个节点之间共享密钥,还需要共享多个值,这些值只能用于单个签名请求,这意味着需要生成许多分布式密钥才能响应签名请求。出于效率问题,该方案将使用交互式DKG协议(该方案使用的DKG协议与BLS非交互式DKG协议不同),因为交互式版本的计算效率更高,交互式DKG协议和阈值ECDSA签名的完成加密细节将会在随后的几周内发表的论文中发表。


共识层编排交互式DKG私钥:使用额外有效载荷拓展区块表明以下


  • 哪些共享私钥元组可用于签署请求。
  • 哪些签名请求与元组或共享私钥配对准备好进行阈值签名。
  • 关于哪些交互式DKG私钥应该持续进行的信息,它添加了新的共享私钥,我们可以从中补充可用元组的集合。
  • 可以返回Canisters的已完成签名

元组:一种数据结构,例如,函数返回多个不同类型的变量时,可以用元组(a,b,c)


一个单独的阈值ECDSA组件将根据区块链中的信息处理大部分的实际工作:


  • 它创建和Gooips 交互式DKG消息
  • 它创建和Gooips ECDSA签名共享
  • 它通过聚合足够多的ECDSA签名份额来创建和Gooips已完成的ECDSA签名

 

ECDSA组件建立在加密组件之上的,共识/加密接口将拓展创建交易/验证交互式DKG消息、创建/验证签名共享和聚合/验证ECDSA签名的方法。



2、该提案实施的风险:基于子网不能容忍超过1/3的节点是恶意的,阈值ECDSA功能也是建立在这个假设之上:如果一个子网有太多串通的恶意方,他们可以在未经Canisters批准的情况下代表Canisters创建签名。

 

3、替代方案:该提案采用方案是和【非交互式DKG BLS签名】使用非交互式分布式密钥生成算法一样,其优点是概念上更见答案,更容易集成到区块链中,然而,这需要计算密集的零知识证明,由于ECDSA每个签名需要多个DKG密钥,所以交互式DKG是最佳方案。


4. 测试和质量保证:这是互联网计算机的一个高度安全的关键特性,因为比特币和以太币的巨大价值将在未来得到保护。因此,该功能的实现需要相应严格的自动化测试。显然,单元测试和集成测试将分别用于确保各个方法和组件的正确性。

 

系统测试将有助于确保该功能作为一个整体按预期工作,并且不会以意外方式干扰互联网计算机的行为。系统测试是使用基于 Rust 的框架编写的,并在测试环境中为该功能启动测试子网。生产测试同样端到端地测试该功能,但在尽可能接近未来生产环境的环境中进行。例如,生产测试框架将在地理分布的数据中心使用节点机器启动测试互联网计算机,以运行对该功能的端到端测试。生产测试可以提供识别性能领域的瓶颈。

 

提案团队打算编写的生产测试的一个具体示例是在负责生成签名时离开子网的副本。

 

除了测试,提案团队还将在项目结束时对阈值 ECDSA 实施进行彻底的安全审查,确保实施如实、安全地实施协议。


5. 推出计划:ECDSA功能将由注册表子网记录中的功能标志引导。这意味着可以通过提案启用/禁用此功能。在ECDSA功能最初实现之后,在所有子网上是禁用此功能,用户以及开发者可以通过 NNS 提案在特定子网上启用此功能。

 

ECDSA在首次发布时将该功能的公开 API 标记为实验性的。一旦在现实世界的生产环境中获得了该功能的足够经验并在社区中使用,会将其功能-标记为不再是实验性的。

 

6. 时间表:鉴于ECDSA功能的复杂性和严格质量保证的要求,预计需要数月的工程和测试工作。目标是在 2021 年完成此功能。



扫码添加深圳社区小助手进群

获取Dfinity第一手资讯

Dfinity深圳社区,专注于Dfinity生态技术发展交流与优质项目挖掘分析。

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

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