比原链研究院 | 一种弱同步网络假设下的门限签名系统

本贴最后更新于 2097 天前,其中的信息可能已经时移世异

近几年门限密码学在区块链系统里开始逐渐被应用,分为门限加密和门限签名,一般见于随机预言机、防审查、减少通信复杂度(HotStuff)、共识网络中防拜占庭(HoneyBadgerBFT 中用于 BA 环节的 common coin)以及作为分布式伪随机数生成器(coin tossing)的重要原语,其优越的资产协同防盗特性也慢慢被新兴数字资产托管机制所重视,今天我们主要讨论公钥密码学(PKC)里的门限签名机制。一种理想的门限签名系统是可以在异步的网络环境里做到容错容灾不可伪造(non-forgeability),并且拥有极度可靠安全的消息传输通道,签名份额的生成和验证是完全非交互式的,在初始密钥阶段具备可以防止拜占庭行为的异步分布式密钥生成(DKG)机制。

与基础签名机制类似,门限签名机制(Threshold Signature Schemes)也分为两部分:

门限密钥生成(Thresh-Key-Gen):基于安全参数构造一种分布式密钥生成协议 DKG,协议运行输出一个共同的公钥 pk 和分属不同参与方各自所有的私钥份额 ski,聚集起满足阈值数量的私钥份额可以构建出真正的私钥 sk。

门限签名(Thresh-Sig):基于分布式通信网络,各参与方通过自己的私钥份额 ski 完成对消息 m 的分布式协作签署并输出最终的可验证签名 Sig(sk, m),这个签名跟单独用 sk 私钥签出的一模一样,可以用所基于的基础签名机制里的验证函数进行本地验证,无需走通信交互验证

但是大多数情况下会通过使用一个可信的中心节点(dealer)来实现私钥份额的生成和分发。沙米尔秘密分享(Shamir Secret Sharing)是最简单的依赖中心 dealer 节点的门限密钥生成方法,基本原理是拉格朗日插值,在 (t, n) 门限构造中,dealer 会选择一个 (t-1) 次方的随机多项式 f,令 f(0)=s,s 即为要分享的秘密值,然后向每个节点分发该多项式曲线上的点 si=f(i) 作为各自的秘密份额值,简单来讲,三个点确定一个二次方程曲线(Lagrange interpolation formula)。为了解决中心作恶问题,人们又不断探索了基于承诺(commitment)的可验证秘密分享(VSS、PVSS),以及应用于异步网络的 VSS(Cobalt BFT 在区块链系统里也尝试了结合 PoW 准入机制的 AVSS)。有许多优秀成熟的 commitment scheme 可以借鉴应用,简单来讲承诺(commitment)算法 [C(M), D(M)]=Com(pk, M, r) 中 pk 是与承诺机制有关的公钥,M 是要承诺的原始值,r 是一个随机骰子,算法输出的 C 便是 commitment,D 则是需要秘密保管的 decommitment 值,在正式公开 M 之前先公开 M 的承诺 C,即先对自己要公布的消息做个上帝担保,约束自己无法更换 M,而对于 M 的受众或者接收者,它们可以通过之前公布的承诺和验证算法进行验证唯一性。这里我们主要关注非交互式的 VSS 实现。

此外,在过往的研究里,签名(Sig)的生成和验证大多是交互式的,并且依赖一个同步通信网络和广播通道(broadcast channel),节点们在某种设定下接收到特定消息后便同时启动签名协议,并严格遵循超时机制。而在互联网环境和区块链网络里,对网络假设的限定是有限的,所以门限系统要成功运作除了需要构造真正的 DKG 协议和非交互式签名机制外,还需要具备商用级的网络系统以及被验证过的成熟代码实现。这里我们(Bytom)尝试提出并构建一种弱同步网络假设下的门限签名分布式系统,主要对网络模型、DKG 构建、签名机制进行一些创新结合和应用,探索在实际网络环境里最小可实用的门限签名系统原型。

门限系统是一种(t, k, n)型 fault-tolerance 系统,t 代表网络最大容错,k 代表最小门限值,n 是节点数,一般设定 k>=t+1,但这种对网络分区(network partition)是无能为力的,所以在一个异步拜占庭网络里我们依然选用经典设定 k=n-t & t<n/3 去达成系统里的一个大多数共识。

门限网络或者通信模型是实现可实用门限系统需要认真考量的一个关键点。像 HoneyBadgerBFT 所构建的接近异步通信网络在现实案例中是少见的,一般会增加消息复杂度和通信轮次,异步网络模型主要依赖所接收到的消息类型和数量进行判断,因为时间因子(time-based)并不能区分谁是慢节点谁是恶意节点。但在这里我们更倾向采用高效的弱同步网络假设,即消息延迟和时钟偏移有上限(实际可接受)但未知,延迟的渐进是合理的,保障 liveness(safety 可以采用妥协的方法处理);能够对 crash、network failure、byzantine 等不同情况尽量做到分开处理,比如设置规定时间内可容忍的 crash 阈值,对于诚实节点发生 crash 后能够从一个规定的状态恢复等;并且假设网络故障总能被修复、遭受的 DoS 攻击总会停止;最后在构建通信通路上可以借助 PKI 和外部 CA 构建 TLS 链接,以及借助经典的 RBC 协议(reliable broadcast channel)。

DKG 是门限签名最为核心的环节也是第一阶段,负责完成门限密钥的生成和分发。VSS 是 DKG 的重要组成部分。上面提到 VSS 的基本原理是承诺机制,一般基于 Pedersen commitment,构造形如 C=mG+nH 的承诺(这里我们省去了一些对椭圆曲线群运算特征定义和假设,可以简单理解为椭圆曲线计算),其中 m 来自密钥构造多项式 f(x) 系数,而 n 来自 dealer 另外构造的一个随机多项式 h(x) 的系数,承诺集合 {Ci, 0<i<t} 是一种公开可获取的系数“证据”,用于证明 dealer 只承认一个合法的密钥多项式。各个参与方在获得 dealer 分发给自己的密钥份额 f(i) 和秘密值份额 h(i) 后,计算 f(i)G+h(i)H,如果与对应的承诺值(多项式计算)相等,则认为合法,如果不一致,则认为 dealer 出现作恶行为,开始向网络提交自己的抗议 complaint,其他人可以进行验证,如果发现事实如此,则立即停止协议,如果其他人验证后发现该 complaint 不合法,则发起 complaint 的节点会被标记不可信。VSS 过程简单来讲包括中心初始化密钥分发、构建承诺和重建密钥三部分内容,整个网络交互存在两轮(synchronous)全网广播(all-to-all)达成一致,最终将密钥份额和承诺传递给每个参与节点,这里我们会定义三种消息类型用于标记多轮消息序列并携带足够的信息用于计算门限密钥。

真正的 DKG 是需要去掉 VSS 里的那个中心,在分布式协作下生成秘密,避免单点泄漏风险,其原理也很简单,相当于 n 个节点同时各自选择秘密值并运行自己的 VSS,每个节点收集来自其他节点的秘密份额完成组装,组装后的结果便是真正私钥的份额,而各个合法节点各自分发的秘密值聚合起来便是最终的构造私钥,最后在进行承诺验证。这似乎很像一个 Multi-valued Validated Byzantine Agreement (MVBA) protocol (一种被广泛研究的可以对多种提案高效率达成共识的一致性协议算法,存在多个变种,比如异步公共子集 Common Subset)。

不过我们尽量避免这种复杂的实现,一般通过选举出 Leader 节点,统一协调处理这些 VSS 的完成情况和最终共识,定义序列,当大多数节点(n-t)完成各自的 VSS 阶段并被其他所有诚实节点所确认后,Leader 将这些已完成的 VSS 信息进行收集并重组提案,再经过两轮全网广播后,每个节点便会确定下各自最终的秘密份额,因此保障 liveness 对于我们的系统是十分关键的。如果 DKG 协议里任何一方出现恶意行为,协议都会立即停止,即 DKG 需要确保所有参与方的诚实行为。至此,一把公共的门限公钥和分属不同参与方的门限私钥份额便构造完毕。

签名阶段简单来讲是基于上面得到的密钥份额各自完成签署自己的签名份额,最后再完成统一组装,得到最终门限签名。Thresh-Sig 阶段的具体实现与所基于的数字签名算法有很大关系,例如 Schnorr 算法在计算签名 s 值时所依赖的秘密值 k 在常数项,s=k-z(H(K||M)),所以可以简单的将秘密值份额相组。而 ECDSA 中秘密值 k 是非线性的,即 s=(H(M)+zr)/k(其中 r 也是由 k 经过指数运算得来),存在两个秘密值(k 和 z)的乘运算,所以各个节点不能仅通过拥有 k 秘密值份额来完成最终签名值的组装,需要对公式进行变形,重新定义组合秘密值 kz,并分布式完成 kz 的秘密份额计算以及分发,甚至需要借助安全多方计算(在不泄漏各自 k 和 z 份额的前提下,完成 kz 的结果计算并输出 kz 的秘密份额给相应参与方)、同态加密机制以及零知识证明(range proof),因此多方的 ECDSA 门限签名在实现和效率上会比较复杂,现阶段以可实用的 2-2 方案研究居多。

不论是采用 ECDSA 还是 Schnorr 算法,最核心的问题依然是基于 DKG 和多方计算的原理去生成和分发签名算法中需要的秘密值,每个参与方基于各自的密钥份额和秘密值份额完成自己的签名过程,最后通过整体的交互组装获得最终的合法签名。同样的,如果无法达到足够门限阈值数量的合法签名方,签名协议也会立即停止。根据不同的应用场景需求,我们需要认真研究用于实现门限签名机制的底层签名算法,比如 ECDSA、EdDSA、Schnorr、BLS 等,不同的签名算法对应的门限机制实现复杂度和效率是不同的。

此外,一个完整的门限系统可能会有成员变更的需求,原有的密钥份额随之需要新一轮变更,最直观的做法是引入周期的概念,通过同步网络和共识协议发起新一轮密钥生成,产生新的主公钥和私钥份额,用超时机制防止阻塞。成员变更和 DKG 是一种比较精细(或脆弱)的系统,任何一个成员 fail 或者 fault 都会引发状况外。在实现上我们用状态机复制原理构建门限(DKG)节点,基于消息输入更换自身状态(例如 node_remove,leader_change,group_update)。

门限密码学随着结合应用场景的需求研究增多,不断完善自身成熟度,尤其是随着高度可靠的代码实现增多,随着复杂网络环境里的系统架构成熟,有希望在价值网络里扮演“门神”的重大作用,同时会促进对零知识证明、同态加密技术的进一步场景化应用,是当下区块链新技术领域为数不多值得深入研究和实战的研究方向。现代密码学与价值网络相辅相成,前者给予后者“上帝保障”,后者给予前者“伟大战场”。

比原链研究院 刘秋杉

  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
bytom
一种多样性比特资产的区块链交互协议 杭州

推荐标签 标签

  • OpenCV
    15 引用 • 36 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 564 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    229 引用 • 476 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 313 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 182 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10100 引用 • 45868 回帖 • 66 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 279 关注
  • danl
    179 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 2 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 681 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 649 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 614 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 379 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 196 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 110 关注
  • 倾城之链
    23 引用 • 66 回帖 • 166 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 344 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 240 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 522 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • 叶归
    12 引用 • 56 回帖 • 22 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 196 关注