DFINITY 研究

简单来说,DFINITY的目的是想基于区块链技术创建一个巨大、永不停歇的互联网计算机,基于这个网络可以承载更多的应用,开发者可以直接在这个互联网本体上构建程序和应用,不需要云服务、数据库或各种类型的接口等。并且由于不需要考虑很多中间件,还可以实现无缝连接地构建应用。

DFINITY是什么

第一个创新是比特币,它引入了货币的概念,现在正在扮演数字黄金的角色;

第二个创新是以太坊,它引入了智能合约,也推动了去中心化金融DeFi的革命;

这第三项重大创新,就是互联网计算机,这是第一台真正的、通用的区块链计算机,它让我们重新去构想,我们构建一切的方式,一种无缝的、无限性能的区块链。

DFINITY的核心思路

好比原来是一张桌子上分盘盛菜,现在盘子撤了,所有菜摆在桌上,甚至整张桌子都是菜做的。这里的盘子指的是各个应用程序分化治理,微信和淘宝,抖音之间存在一定联系,但是安全性,功能以及用户平台是完全不同的。

“把盘子撤了”这个动作,指的是Dfinity主张的代币化治理系统,即直接创建应用程序来提供开放式的互联网服务。撤了盘子,不意味着Instagram或者TikTok会消失,消失的是脸书的Instagram和字节跳动的TikTok。在由代币化治理系统运行后,这些软件仍然会存在,但会变得去中心化,并且只需使用少于一千行代码就可以支持百万级的的用户量。

这种设想对所有开发者意味着发展环境的极大改善。首先在将用户数据从巨头手中解放出来之后,不管是大公司还是小公司都没有用户的行为数据,这在一定程度上拉平了竞争环境。并且这样一个开放平台意味着世界上每一台客户端电脑都可以成为可借用的公共服务器,在这朵世界上最大的云形成之后,集群式服务器的模式将成为过去。这时的服务器的配置也无法成为科技巨头垄断互联网的因素之一。

此外节约的还有人的成本。虽然目前区块链计算机的计算成本仍要远高于传统云,但是Dominic Williams相信前者的成本最终会远小于后者。“运行企业 IT 系统所涉及的成本并不主要来自于计算本身,而是来自于人的成本,而 Dfinity将为建立人力成本超低的业务系统提供可能性。”

相比之下,Dfinity带给普通用户的影响就好理解的多 — — 不需要用户名和密码,实现无痕冲浪。

用户在互联网上留下身份信息带来的负面危害显而易见,隐私泄露、广告的精确投放、大数据杀熟都源于此。并且由于通过互联网上账号往往可以关联到现实中的个人信息,这种安全隐患随着互联网对现实生活的进一步渗透在继续加深。

如果能越过科技公司,则意味着越过了所有账号密码。用户在Dfinity中需要创造的只是一个“互联网身份”,并且由于区块链中公钥和私钥等加密技术的存在,这个“互联网身份”可以用来登陆所有开放式的应用程序,却不会关联到用户的现实身份信息。

“希望大家想象一个世界:这里,仅使用设备就可以安全地享受线上服务,无需提供用户名和密码或接触加密密钥就能在在线服务中安全地验证自己的身份”,Dominic Williams表示,“在这里,使用不同互联网服务时可免于被跟踪。”

简单来说,它将所有程序的安全性构架于同一个安全操作环境,依赖的也是这同一种加密技术,一旦该技术被认定为安全无漏洞,它首先无法从物理攻破,因为其去中心化性质;其次它也无法因为一两台云端上的计算机被攻击而受到威胁,这是由于DFINITY使用的秘密分享技术,也是在安全性分析之中将要介绍到的。

优劣势分析

优势

  • 快速达成智能合约:交互的延迟是一个系统是否可用的重要指标,DFINITY 这在里做到了查询毫秒级、更新秒级的惊人成绩。
  • 去中心化的互联网身份:在 DFINITY 上用户可以快速地通过面部扫描或指纹识别,在几秒钟里创建一个去中心化的 ID。不再需要管理用户名/密码,也不需要接触难以理解的私钥/助记词,就可以轻松的控制自己的 ID。
  • ChainKey技术:ChainKey 是互联网计算机背后的核心技术,它为 DFINITY 的区块链创建了一个只有48字节的唯一公钥。因此任何的设备,即使是智能手表,也能亲自去验证 DFINITY 的链。相比之下,去验证 ETH 这些传统区块链时,因为每次出块都由不同的节点签名,设备需要同步几百 GB 的签名数据,而在 DFINITY 中,所有节点一起签名一个区块,因此设备只需要保存 48 个字节的唯一公钥即可验证每一个区块。它还能运行节点任意的退出与加入网络,从而轻松的把新节点接入网络进行扩容,这都归功于非交互式分布式密钥生成(Noninteractive Distributed Key Generation)技术的突破。

劣势

  • 编程语言的适应性有待验证:以太坊支持8种编程语言,包括Go、C++和Python等,这大大促进了各种主体的在其链上进行开发。而Solana及Polkadot所采用的小众编程语言一定程度上限制了其生态的扩张。所以Dfinity采用的Motoko编程语言是否具有普遍性,以及能否被开发者所广泛接纳还需要时间的验证;
  • 节点障碍可能会使得Dfinity无法容纳目前的互联网用户:Dfinity添加节点是由网络神经系统(NNS)投票决定,但IC节点硬件成本非常贵。此外,节点提供商的批准可能需要数周时间来处理请求、购买硬件以及选择数据中心。节点障碍使得Dfinity无法快速容纳目前的互联网用户。
  • 对于传统互联网巨头可能形成冲击:DFINITY的项目如果完善后投入使用,且大获成功的话,可能会对传统互联网巨头如腾讯,字节等形成巨大冲击,所以在项目初中期可能遇到各方阻碍。

安全性详细分析

链式密钥密码学

单个公钥只是冰山一角:链式密钥加密是驱动互联网计算机并使其运行成为可能的引擎。它允许

  • 添加新节点形成新子网,无限扩展网络;
  • 用新节点替换有故障或崩溃的节点,无需停止;
  • 即使有太多节点出现故障,也能恢复子网;
  • 无缝升级 Internet 计算机协议,允许网络修复错误并添加新功能。

为了确保互联网计算机用户传输给他们的结果的正确性,他们还需要验证他们收到的消息确实来自互联网计算机而不是其他地方。由于没有单个节点是可信的,消息需要由托管用户查询结果的容器的所有节点共同签名。这就是链密钥密码学的用武之地:所有节点都收到秘密密钥共享,使它们能够用请求的结果联合签署消息。这样创建的签名只能使用互联网计算机的公钥来验证。这里的美妙之处在于,即使互联网计算机由数百万个节点和数千个大规模子网提供支持,所有网络所需的只是一个公钥来验证来自子网的任何结果。

对于要扩展的 Internet 计算机,并非所有节点(Nodes)都可以运行所有容器(Canisters)。因此,节点被划分为所谓的子网(Subnets),并且不同的容器分布在这些子网上,如下图所示。更准确地说,当将容器上传到 Internet 计算机时,它会被分配一个安装它的子网,然后仅在参与该子网的节点上运行。为了验证消息,每个子网都有自己的公钥。子网的所有节点都共享与其子网公钥相对应的密钥。使用所谓的阈值签名方案,如果有足够数量的节点(超过所需阈值)同意,他们可以使用各自的密钥份额来共同签署消息。然后,用户可以使用子网公钥验证消息上的签名。

Fig. 1: NNS构造示意图(https://www.tuoluo.cn/article/detail-10058537.html)

总而言之,链式密钥加密技术使得单个 48 字节公钥(互联网计算机的公钥)的知识足以验证响应和计算互联网计算机成为可能。形成鲜明对比的是,要在以太坊上验证智能合约的结果,开放的以太坊客户端需要下载 400 GB。更糟糕的是,所需的下载大小只会随时间线性增长:所需的大小在一年内翻了一番,一年前仅为 200 GB 左右。

数字签名和秘密共享将在下文介绍,我们首先需要理解链式加密使用的具体情形,也就是网络神经系统(NNS)。网络神经系统对于DFINITY的互联网计算机意义重大:新子网的形成和关键材料的生成是由互联网计算机的网络神经系统 (NNS) 完成的,NNS 由运行在初始子网上的容器实现那是在创世时创建的;一旦要形成新子网的节点从 NNS 收到其密钥材料并开始运行新子网,子网将按照 Internet 计算机协议自行管理和维护其密钥。

网络神经系统

例如,它可以升级承载网络的节点机所使用的协议和软件; 它可以创建新的区块链子网,实现扩容; 它可以拆分子网,来均衡网络负载;它可以配置经济参数,如ICP与cycles的兑换比例;在极端情况下,它甚至可以冻结/解冻/修改网络中的的软件(智能合约),以保护网络,等等。

NNS的工作方式是接受提案,并根据网络参与者创建的“神经元”的投票活动决定采用还是拒绝提案。

神经元是由参与者锁定“ICP”代币创建,通过溶解机制延期释放,投票获得代币奖励与节点服务商奖励,是经济模型中重要的通胀机制,用于支付计算与资源消耗的“cycles”是通过“ICP”代币在容器中的单向转换得到,这是经济模型中重要的通缩机制。在经济模型的激励下,神经元投票的方式充分表达社区的整体意愿。

互联网计算机(IC)是由托管在不同数据中心中的节点计算机网络运行的分布式协议。

数据中心节点需要就IC的状态达成共识。其中,参与共识的节点的集合称为子网,每个子网都是一条区块链。

在节点通信和共识协议之上托管的是一个个有状态的智能合约 — — 容器(Canister),容器内部是可在WebAssembiy虚拟机上运行的WebAssembi字节码及其中运行的内存页面,容器在专门的管理程序中运行,并通过公共指定的API相互交互,每个容器具有不同的功能,它们之间互相通信、协作组成互联网计算机中的软件和服务。

当向NNS发起提案时,治理容器负责执行具体的治理方案,接受提案后,注册容器会更新系统配置信息供节点查询。

所有的节点都会复制网络中所有容器的状态,作为节点集合的子网都会同步所有容器,随着加入的子网越来越多,互联网计算机就形成了无限扩展的过程。这一过程需要一个机制来控制管理这些节点和子网,NNS起了决定性的作用。

数字签名

椭圆曲线签名的好处在于使用较短密钥长度获得较高的安全性。例如想要获得80位的安全性,ECDSA需要160位长度的密钥,而常规数字签名算法需要至少1024位。这里的80位安全性意味着攻击者需要最多$2^{80}$次试验来寻找密钥。

可加性密钥生成是一个简单的从主钥匙中生成子密钥的算法,该算法在加密货币中使用十分广泛,比特币改进提案32(BIP32)中也有使用。预签名算法是指ECDSA中的密钥和公共随机数将在签名之前预先生成。预签名的使用,连同其他预先生成的数据,可以使得在线签名协议变得十分快捷。

DFINITY在评估了ECDSA的安全性后改为使用另外两个变体:重随机预签名和同构密钥生成。同样是在生成方面速度较快,且一起使用的情况下安全性不弱于ECDSA。重随机预签名是指,预签名时生成的签名,在签名使用时增加一个无法被预测的随机数。同构密钥生成实际上是指将原本的单一随机数密钥公钥生成,变为使用一组随机数对,然后加合生成密钥及公钥。

秘密分享

在秘密分享算法中,DFINITY提出了一种非交互式可公开验证的秘密共享方案,其中秘密所有者可以构建域元素的 Shamir 秘密共享,并加密但可验证地将共享分配给多个接收者。DFINITY还开发了一种非交互式可公开验证的再共享方案,其中 Shamir 秘密共享的现有持有人可以创建同一秘密的新 Shamir 秘密共享,并以加密但可验证的方式将其分发给一组接收者。可验证的秘密共享方案被用于构建非交互式分布式密钥生成协议,该协议创建这样的公钥以及离散对数的秘密共享。DFINITY还构建了一个非交互式分布式再共享协议,该协议保留了公钥,但创建了一个新的秘密共享密钥,并将其交给一组接收者,这些接收者可能与原始接收者重叠,也可能不重叠。DFINITY的协议建立在具有前向保密性的新的基于配对的 CCA 安全公钥加密方案之上。因此,DFINITY的协议可以为参与者使用静态公钥,但仍然提供保护。该方案使用分块加密,这是有代价的,但该成本被密文仅包含源组元素而没有目标组元素所获得的节省所抵消。通过将单接收器加密方案扩展到多接收器加密方案,在协议中获得了进一步的效率节省,其中密文比只有单接收器密文小 5 倍。非交互式密钥管理协议部署在 Internet 计算机上,以方便使用阈值 BLS 签名。这些协议提供了一个简单的接口来远程创建一组接收者的秘密共享密钥,在密钥持有者发生变化时刷新秘密共享,并提供针对攻击者的主动安全性。

小结

参考文献

2. 数字签名白皮书:https://eprint.iacr.org/2021/1330.pdf

3. 官方网站:https://smartcontracts.org/docs/quickstart/quickstart-intro.html

4. 链式密钥密码学:https://medium.com/dfinity/chain-key-technology-one-public-key-for-the-internet-computer-6a3644901e28

5. 其他评价:https://www.zhihu.com/question/266614559

6. 安全数据流通介绍:https://s3.us-west-2.amazonaws.com

--

--

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
CYC

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc