WechatIMG116.jpeg

@whiskoy_eth

研究主题:分布式密钥生成(DKG) DKG 是一种密码学技术,用于在分布式环境中生成共享密钥,以确保安全通信和多方参与的机密性。

内容提要: 1、DKG 是什么 2、DKG 的技术细节 3、DKG 的应用案例(同步&异步)和优缺点

一、DKG是什么

DKG(分布式密钥生成)提供了一种去中心化的方法,使各个参与方在不相互信任的情况下生成共享密钥,以确保安全通信和多方参与的机密性。

DKG技术的关键思想是使用多方计算(secure multiparty computation)和秘钥共享(secret sharing)的概念。

DKG技术在「需要多方参与」和「分布式信任」的领域得到应用:

  1. 共识协议:DKG可用于生成共识协议所需的密钥,确保在分布式环境中节点之间的通信和交互的安全性和可靠性。例如,Algorand 和 Dfinity 等区块链项目使用 DKG 来生成节点的共识密钥,从而实现拜占庭容错和安全的共识算法。
  2. 密钥管理和安全多方计算:DKG技术可用于密钥管理方案中,以生成和分发用于加密通信和身份验证的密钥。此外,它也可以用于安全多方计算场景(Secure Multiparty Computation,SMC),使多个参与方能够在不泄露私有数据的情况下进行协作计算。
  3. 分布式存储系统:DKG可用于分布式存储系统中,用于生成和管理用于数据保护和访问控制的密钥,以确保数据的机密性和完整性。
  4. 门限密码学:DKG是门限密码学方案中的关键组成部分,例如门限签名方案和门限加密方案。它用于在门限数量的参与方之间生成共享密钥,从而实现高度安全和鲁棒的密码方案。

二、DKG密码学细节

论文《Distributed Key Generation for the Internet》指出,尽管许多论文都提出了同步通信模型和广播信道,但工程实现方面的问题被忽略了,文章提出了异步的 DKG 工程解决方案。

2.1 DKG 技术通常包括以下步骤

  1. 参与方注册:
  2. 公开承诺:
  3. 秘钥共享:
  4. 共享验证:
  5. 公钥重构:

2.2 以 ElGamal 加密算法为例

概念解释

  1. 密钥生成:
  2. 加密:
  3. 解密:
    1. 接收者收到密文(c1, c2)。

    2. 接收者使用私钥x进行解密计算。

      a. 首先计算 c1^x mod p,即对密文c1进行私钥x的幂次运算模p。这可以使用模幂运算的算法(如快速幂算法)来高效计算。

      b. 计算 c2/c1^x mod p,即将密文c2除以c1^x,并对结果取模p。这一步实际上是将密文c2还原为加密前的my^k,然后除以c1^x以消除加密过程中的影响。

      c. 最终计算结果 m = c2/c1^x mod p 即为解密后的明文。

2.3 Proactive VSS

Proactive VSS(Proactive Verifiable Secret Sharing)是一种扩展的可验证秘密共享方案,旨在解决传统可验证秘密共享方案中的一些局限性。传统的可验证秘密共享方案仅允许在特定时间点进行秘密共享,而Proactive VSS引入了周期性的更新机制,以确保分享的秘密在长期使用中的安全性和可靠性。

在Proactive VSS中,参与方周期性地进行更新,生成新的分享,并将旧的分享替换为新的分享。这种周期性的更新可以基于时间或者一些预定的事件触发,例如预定的时间间隔或者特定的阈值。通过这种方式,Proactive VSS可以解决传统VSS中的一些问题,如单个参与方的私钥泄露、长期使用导致的安全性下降等。

Proactive VSS的优点包括:

  1. 安全性增强:通过定期更新分享,即使某些参与方的私钥泄露,也可以确保秘密的安全性。新的分享会取代旧的分享,从而消除已泄露私钥的影响。
  2. 长期可靠性:Proactive VSS考虑了长期使用的情况,通过定期更新分享,保证分享的秘密在长期使用中保持可靠性。这对于需要长时间持续运行的系统非常重要。
  3. 更好的可扩展性:由于Proactive VSS可以适应新的参与方加入或离开系统,因此具有更好的可扩展性。它可以在系统的整个生命周期内维护可验证秘密共享方案。

请注意,DKG 和Proactive VSS之间存在密切关联,因为Proactive VSS方案通常需要借助DKG来生成和更新分享。

2.4 Asynchronous VSS

Asynchronous VSS(异步可验证秘密共享)是一种可验证秘密共享方案,旨在解决在异步网络环境下的可靠性和安全性问题。在异步网络中,参与方之间的通信可能受到延迟、丢包和不可靠的因素的影响,传统的同步可验证秘密共享方案可能无法适应这种情况。

在异步VSS中,参与方不需要在严格的同步时钟下操作,而是允许参与方在各自的节奏下执行协议的各个步骤。这意味着参与方可以独立地生成和发送消息,而无需等待其他参与方的响应。

异步VSS 的关键挑战是解决参与方之间的通信不可靠性所带来的问题,包括消息的延迟、重排序和丢失。为了应对这些问题,异步VSS方案通常使用了一些技术和机制,例如:

  1. 容错性:异步VSS方案需要具备容错机制,以处理消息的延迟、重复和丢失。常见的技术包括重传机制、超时处理和错误纠正码。
  2. 状态管理:由于参与方的操作是异步的,异步VSS方案需要有效地管理和维护参与方的状态信息。这可以通过记录参与方的状态和执行顺序来实现。
  3. 一致性协议:为了在异步环境中达成一致,异步VSS方案通常依赖于一致性协议,例如拜占庭容错协议和分布式共识算法。

请注意,DKG 和异步VSS是两个相关但不完全相同的概念。DKG是一种在分布式环境中生成密钥的技术,而异步VSS专注于在异步网络中共享秘密的可验证方案。两者可以结合使用,以实现安全的分布式密钥生成和共享。

三、DKG在区块链的应用

3.1 Algorand

Algorand使用了一个基于密钥生成的拜占庭多数共识(BAV)算法。

参与者使用DKG生成密钥对,并将公钥发布到区块链网络中。然后,通过基于VRF(可验证的随机函数)的随机抽签过程,选举出一个权威节点集合,该集合由具有拜占庭容错性质的节点组成。这些权威节点使用其私钥参与区块的生成和共识过程。通过使用DKG生成的共识密钥,Algorand能够确保共识过程的安全性和正确性,即使在存在恶意节点的情况下也能保证系统的可靠性。

3.2 Dfinity

Dfinity是一个去中心化的计算平台,旨在构建一个安全、可扩展的区块链网络。

在Dfinity中,参与者使用DKG生成密钥对,并将公钥发布到网络中。通过 Threshold Relay(门限共识)算法,选举出一个权威节点集合,这些节点负责网络的共识过程和验证区块的有效性。这些权威节点使用其私钥进行签名和验证,确保共识过程的安全性和正确性。使用DKG生成的共识密钥,Dfinity能够实现高度去中心化的共识,同时具备拜占庭容错性质,从而保证系统的安全性和可靠性。

3.3 SSV Network

SSV(Secret Shared Validator)全称秘密共享验证器,SSV 的核心理念就是实现将验证者的私钥进行碎片后给到多个运营商,相当于多签的逻辑,后续 SSV 经过不断的讨论和发展延伸升级为 DVT ,所以 SSV 是 DVT 的前身,SSV 也是一个技术名词。

Untitled

四、参考资料

  1. "Distributed Key Generation, Key Derivation, and Threshold Cryptosystems"(1997)- 由Rosario Gennaro、Stanislaw Jarecki、Hugo Krawczyk和Tal Rabin撰写的论文,介绍了DKG的基本概念和协议。
  2. "Practical Threshold Signatures"(2002)- Adi Shamir的论文,详细介绍了基于DKG的实用阈值签名方案。
  3. "Secure Distributed Key Generation for Discrete-Log Based Cryptosystems"(2003)- Ivan Damgård、Martin Geisler和Mikkel Krøigaard的论文,讨论了基于离散对数密码体制的安全分布式密钥生成方案。
  4. "Robust Threshold DSS Signatures"(2003)- Ronald Cramer、Ivan Damgård和Berry Schoenmakers的论文,介绍了基于DKG的鲁棒阈值DSS签名方案。
  5. "Efficient and Secure DKG Protocols for Threshold Cryptosystems"(2012)- Stefan Dziembowski、Kristián Gjøsteen和Jesper Buus Nielsen的论文,探讨了在实际应用中高效且安全的DKG协议。
  6. "Distributed Key Generation in the Wild"(2017)- Eleftherios Kokoris-Kogias等人的论文,研究了实际部署的分布式密钥生成方案的性能和安全性。
  7. Distributed Key Generation for the Internet

Coincap:https://www.coincarp.com/fundraising/