非交互式分布式密钥生成是去中心化平台背后第一个发布的核心密码学创新。
DFINITY 的互联网计算机由最先进的去中心化协议组成,它去中心化地调度所有运行协议的独立数据中心,这是一台革命性的区块链计算机。开发者、组织和企业家能够构建和部署安全的应用程序和开放式软件程序。与那些在专有基础设施或特定的托管服务上运行的云或传统分布式架构不同,互联网计算机提供了一个开放的平台,软件和服务直接在开放的互联网上运行。去中心化的互联网计算机协议(ICP)通过实现先进的加密技术来创建这种安全网络。
在一个去中心化的分布式系统中,会存在各种潜在的问题。在p2p层,我们该如何在默认存在攻击者的开放环境下,在节点之间如何传递消息?我们如何以最有效的方式进行?我们如何定义最合适的网络拓扑结构?
再上一层就是共识协议,是在没有中央权威机构的情况下,如何确保正确的交易得到验证,并按照正确的顺序进行处理?
在DFINITY基金会,研究与开发是同时进行。我们的研发团队会推出新技术,这些技术也将被应用于实际开发。基金会发布了一种新的密码学算法,作为互联网计算机的非交互式分布式密钥分发(NIDKG)协议。
介绍「非交互式密钥分发」算法
在互联网计算机上运行的应用程序或服务,终端用户与这些容器进行交互时,并不会感知到到底层用于构建分布式开发平台的高级加密技术。互联网计算机定义了一个简洁的界面,规定了容器的运行方式,使软件生态系统得以建立,不同的应用程序可以相互通信和使用对方的 API。
终端用户,以及需要和其他容器交互的容器,都需要信息的认证。但在互联网计算机上,容器被托管在子网上,由全球各地的节点运行。所以节点必须运行一个分布式协议,来同意和签名互联网计算机的输出。阈值签名使子网上的节点能够协作签名数据。如果有超过阀值数目的节点确认,就可以对数据签名;而少数恶意节点,不能去签名未经验证的信息。
但阀值签名只解决了一部分问题。在互联网计算机上,节点间会随机组成一个个验证组,来运行子网,验证组本身也会不断地发展。节点可以加入和离开各自的子网。根据网络的需求、所需的安全级别、数据中心的可用容量、随机的硬件故障等原因,运行子网的节点集会随着时间的推移而变化,这意味着运行阈值签名的验证组,会随着时间的推移而演变。
这样做的影响是,在子网内不断有节点加入退出的情况下,继续生成和分发新的公钥,在逻辑上会很复杂。有一种解决方案,如果同一子网始终可以被一个静态公钥引用,即使组成子网的节点在变化,也可以大大简化密钥管理。
幸运的是,公钥的保存有一种密码学的解决方案,它可以将密钥分发下去且保证安全。通过这些密钥的分发方案,参与阈值签名方案的一组签名者,可以将阈值签名的能力转移给另一组签名者。已有密钥分发方案有很多好处,但它们也有一个局限性:它们需要交互的,这引发了异步性的问题。如果一个节点的消息缺失,就不清楚该消息是否仅仅是延迟,还是该节点已经崩溃或已经被破坏。
DFINITY 的研发团队发明了一种全新的非交互式的密钥分发协议。每一个旧的签名者只需要向新的签名者广播一条信息。为了确保安全地完成这项工作,DFINITY 利用了许多高级密码学的概念,包括 forward secrecy 加密,与非交互式的零知识证明。因为它是非交互式的,在异步环境下,密钥分发协议的操作方式是理想的选择,好处在于可以更好的保存密钥。在子网的整个生命周期中,它是由一个单一的公钥引用的,互联网计算机上的其他各方不必跟踪任何变化的公钥。
从子网的密钥管理的不同阶段来看,协议首先适用于初始密钥的生成。互联网计算机可以使用 NIDKG 协议启动一个新的子网,并给初始节点一个阈值签名密钥,初始节点不必参与设置过程。节点只需得知自己被分配到一个子网,推算出自己占子网总签名密钥的碎片,就然后开始运行子网。
子网运行时,分布式密钥分发协议用于注册新的加入节点。不需要漫长的注册过程,因为子网只是将加密的密钥材料留给加入的节点。
预计最经常发生的是一组节点给自己分发秘钥,这听起来可能有悖于直觉,因为节点已经有了阈值签名密钥。但这个想法是从「主动安全」的概念中产生的。
问题是,节点可能会随着时间的推移而被破坏。想象一下,一个子网在一定时间内由相同的节点运行,这就给攻击者提供了一个时间窗口,在这个时间窗口内,攻击者可能会以某种方式窃取到一个节点的密钥碎片。「主动安全」提供的解决方案是继续刷新签名密钥的碎片,即节点重新分发私钥,以获得新的签名密钥的阈值私钥。之后,它们会删除旧的私钥碎片,这意味着即使攻击者随着时间的推移从每一个节点那里窃取到了一些密钥碎片,只要在任何给定的时间内只有少数的密钥碎片被工具者窃取,阈值签名密钥仍然是安全的。
dfinity