链密钥技术:互联网计算机背后的科学突破
互联网计算机将公共互联网升级为防篡改的计算平台,使开发人员、组织和企业家可以构建和部署安全且自治的软件程序。
DFINITY基金会多年的专门研究和开发使这一雄心勃勃的愿景成为可能,将新颖的密码学和计算机科学相结合,创建了一个可在链上提供无限存储和计算的区块链。
由世界上许多顶级密码学家、研究人员和工程师组成的熟练团队带头进行了这项工作,以实现分散化和解决艰巨的技术挑战。
我们共同努力,将先进的概念带入了现实世界,并实施了将对整个计算世界产生巨大影响的尖端技术。
互联网计算机最终将大规模运行数百万个节点,链密钥技术是实现这一目标的基本突破之一。
它由一组加密协议组成,这些协议协调组成互联网计算机的节点,链密钥技术最明显的创新是互联网计算机具有单个公用密钥。
这是一个巨大的优势,因为它允许任何设备(包括智能手表和移动电话)验证来自互联网计算机的工件的真实性。
相比之下,这对于以太坊等传统区块链是不可能的,在传统区块链中,需要大量数据去验证一个很小的工件。
单个公钥只是冰山一角,链密钥技术是驱动互联网计算机并使其运行成为可能的引擎。它允许:
添加新节点以形成新子网以无限扩展网络;
不停地用新节点替换有故障或崩溃的节点;
即使子网中的太多节点发生故障,也要恢复子网;
无缝升级互联网计算机协议,使网络可以修复错误并添加新功能。
互联网计算机
为了使链密钥技术成为现实,首先让我们仔细研究一下互联网计算机,它由运行互联网计算机协议(ICP)的遍布世界各地的众多节点组成。
该协议连接所有这些节点,并在这些节点上协调软件容器的执行,容器是包含开发人员部署到互联网计算机上的代码和状态的捆绑包。
一个应用程序可以由单个容器组成,或者由于容器的大小受到限制,因此可以由许多相互交互的容器组成。
容器几乎可以实现任何内容,例如网页、企业系统、DeFi用例,甚至是开放的互联网服务。
当用户与互联网计算机上部署的应用程序进行交互时,将通过ICP将消息发送到容器。
接下来,互联网计算机在该消息的输入上执行容器,并最终计算出用户可以查询回来的输出消息。通过执行该消息,容器的状态将按照其代码的规定进行更新。
为了实现互联网计算机计算结果的可靠性和正确性,每个容器都在多个节点上运行,而不是在单个节点上运行,这是因为单个节点表示单个故障点。
一个节点可能由于硬件故障而崩溃,被互联网切断,或者更糟糕的是,故意报告不正确的结果。
因此,互联网计算机协议确保容器在多个节点上运行,并且确保这些节点同意以什么顺序处理哪些消息以及每次计算结果的值。
这样可以确保结果的正确性,网络对于各种故障都具有耐用性,并且容器可以永远运行。
链密钥技术
为了确保互联网计算机的用户传输给他们的结果的正确性,他们还必须能够验证收到的消息确实来自互联网计算机,而不是来自其他地方。
由于没有单个节点是受信任的,因此消息需要托管用户查询结果的容器的所有节点共同签名。
那便是链密钥技术出现的地方:所有节点都接收密钥共享,这使它们能够共同签署带有请求结果的消息。
只能使用互联网计算机的公钥来验证由此创建的签名,这样做的好处是,即使互联网计算机由数百万个节点和成千上万个子网提供支持,但所有网络需求都是一个公用密钥,用于验证来自子网的任何结果。
为了扩展互联网计算机,并非所有节点都可以运行所有容器。因此,节点被划分为所谓的子网,并且不同的容器分布在这些子网中。
更准确地说,将容器上载到互联网计算机时,会为其分配一个子网,在该子网中安装了该容器,然后仅在参与该子网的节点上运行该容器。
为了验证消息,每个子网都有自己的公共密钥,子网的所有节点都拥有与其子网的公共密钥相对应的密钥。
使用所谓的阈值签名方案,如果有足够数量的节点(超过所需的阈值)达成协议,则它们可以使用其各自的密钥份额来共同签名消息,然后可以通过确定子网公钥来验证消息上的签名。
总之,链密钥技术使单个48字节公共密钥(即互联网计算机的公共密钥)的知识足以用于响应的验证和互联网计算机的计算。
与之形成鲜明对比的是,要验证以太坊智能合约的结果,一个开放的以太坊客户端需要下载400 GB。更糟糕的是,所需的下载大小随时间线性增长:所需的大小在一年内翻了一番,一年前仅为200 GB。
无限扩展
从规模上讲,当互联网计算机具有数千个子网时,这意味着它还将具有与每个子网相对应的数千个单独的公共密钥。
添加节点并形成新子网以增加容量,节点由于各种原因而发生故障并被替换以及攻击者阻止的环境中,需要以安全的方式生成、管理和维护这些公共密钥和相应的秘密共享,防止黑客通过区块通讯试图操纵它或破坏节点并以任意方式使它们偏离协议。
为了使节点在消息上共同生成签名,标准阈值签名算法就足够了。为了生成和维护所有密钥,DFINITY团队发明了新的加密技术,我们现在将在更高级别上进行解释。
我们建立了两个主要过程:
1)新子网的形成和关键材料的生成是由互联网计算机的网络神经系统(NNS)完成的,该系统由运行在初始子网上的容器实现创世时产生的;
2)一旦要形成新子网的节点从NNS接收到其密钥资料并开始运行新子网,则该子网将根据互联网计算机协议自行管理和维护其密钥。
这两个过程是由许多加密原语构建而成的,包括阈值签名、公钥加密和非交互式零知识证明,让我们首先解释一下互联网计算机如何为新子网生成密钥。
更准确地说,NNS子网如何为新的子网生成公用密钥,并为指定运行新子网的节点生成相应的密钥共享,用于阈值签名方案的常规密钥生成算法假定单个受信任的交易者。
但是,由于互联网计算机需要容忍恶意节点,因此不保证该假设。
ICP工具的解决方案是:
1)使用多个交易者;
2)让他们证明自己为指定节点加密了正确的份额;
3)将它们生成的密钥合并为一个公共密钥和相应的密钥共享。
链密钥技术将生成安全的密钥材料,只要单个交易者是诚实的,如果NNS子网中超过三分之一的节点将充当交易者,则可以满足该标准。
它们各自生成一个公共密钥,在新节点在向互联网计算机注册时提供的加密密钥下对密钥共享进行加密,然后添加我们量身设计的非交互式零知识证明,说明它们正确地完成了所有这些工作。
NNS子网作为一个整体验证这些证明,如果正确,则将所有交易者提供的信息提供给新子网的节点。
这些新节点解密各自的密钥份额,并将来自不同交易者的份额合并为一个份额。(之所以可行,是因为键空间中存在一种称为同态的数学属性。)节点完成此操作后,就可以操作新的子网了。
在操作子网时,其节点需要维护密钥共享。这是必需的,因为节点可能会发生故障并且需要更换,或者因为节点可能会受到攻击者的破坏并因此泄漏相应的密钥共享。
在这两种情况下,都必须替换密钥共享。为此,其余节点可以重新共享其密钥共享。
因此,每个节点将从许多其他节点接收原始密钥共享的共享。由于秘密共享的数学特性,可以将这些“份额共享”重新组合为密钥的普通份额。这样生成的新份额将构成密钥的新共享。
所以,类似于密钥生成,每个节点将共享其原始密钥共享,以获取密钥共享的份额,为指定用于运行子网的(可能不同的)节点集加密这些共享,并添加正确完成的非交互式零知识证明。
因而,新的节点集将收到许多这样的共享,并且如果证明验证了,则解密该共享并将它们组合为单个密钥共享。此过程之后,新节点集将删除旧共享(如果有的话),然后可以继续操作子网。
此重新共享过程可确保:1)新节点获得必要的密钥份额,以及2)落入攻击者手中的份额变得过时,因此变得一文不值。
子网操作需要密钥和容器状态
如前所述,链密钥技术允许NNS子网无限扩展。它决定将哪个节点分配给哪个子网,并生成和验证所有子网的公钥以及初始私钥份额。
因此,确实,所有用户需要的是NNS子网的公钥,以根据从子网获得的响应来验证证书。
让我们讨论对网络发展非常重要的链密钥技术的其他方面。首先,请注意,除了密钥共享以外,加入正在运行的子网的新节点还需要分配给该子网的所有容器的当前状态。
这是节点能够处理到容器的消息并更新其状态并完全参与子网所必需的,加入节点可以从其已经运行子网的对等节点(通过状态同步协议)请求状态。
但是,由于节点可能有故障,因此加入节点必须能够验证从对等节点接收到的状态的真实性和正确性。为此,其他节点将所有容器的状态设置为阈值符号(其根哈希值)。
不幸的是,非交互式密钥重新共享和状态认证是昂贵的操作,因此不能对每个区块都进行,而只能按固定间隔(例如,每200个区块)进行。
所以,子网通常会产生一个所谓的“追赶包(catch-up packages)”,该包将节点参与该子网所需的所有信息捆绑在一起。
顾名思义,除了允许新节点加入子网之外,追赶包还使现有节点能够在某些情况下(例如从网络中断开)恢复操作。
追赶包的力量
追赶包最终可以实现更多功能,因为它们本质上在子网执行过程中提供了明确定义的状态。
因此,只要子网生成了一个追赶包,就可以删除所有以前的状态,这使互联网计算机的存储效率要比永久保持所有状态的典型区块链高得多。
第二个功能是,即使大多数节点已崩溃,追赶包也可以使互联网计算机恢复子网。只要单个节点幸存,就可以恢复追赶包,生成新的密钥集,然后新的子网可以继续从追赶包中的状态运行容器。
第三,追赶包允许互联网计算机进行负载平衡。假设安装在子网中的容器变得非常流行,并且需要单个子网可以提供的更多资源,则互联网计算机可以指示节点将子网拆分为两个子网,每个子网都从同一追赶包继续进行,但是每个子网都保持不变只有一半的容器。
最后,追赶包还允许升级互联网计算机协议本身。这里的想法是在产生下一个追赶包之后,指示子网的节点运行不同版本的协议。这样就可以修复协议中的错误、添加新功能等,这可能是互联网计算机永远运行的最关键的功能。
请继续关注更多发布,详细介绍互联网计算机背后的技术。
开始在sdk.dfinity.org上构建并加入我们的开发者社区forum.dfinity.org。
作者:DFINITY研究与加密副总裁Jan Camenisch
翻译:Catherine
DFINITY计划针对终端设备发布免费加密操作系统Endorphin
进DFINITY交流社群,请添加小助手微信:
comiocn
长按关注
DFINITY微信公众号
给你第一手资讯和项目信息
更可随时答疑解惑