DKLS23 加密背景

多方计算使用两种密钥算法进行签名:secp256k1 上的 ECDSA 和 Ed25519 上的 EdDSA(敬请期待)。本页面介绍了阈值 ECDSA 协议 DKLS23 以及 Google 对其所做的更改。如需了解支持的算法,请参阅支持的区块链。

阈值 ECDSA 和 DKLS23

与其他签名方案相比,ECDSA 的阈值签名问题一直以来都非常棘手。在 2017 年之前,大多数解决方案都涉及严重的权衡取舍。

2018 年,DKLS 提出了首个针对 ECDSA 的 2-out-of-2 签名解决方案,该方案仅依赖于基于 ECDSA 的加密假设(例如,不需要 Paillier、RSA 或其他不同系列的加密硬度假设)。该协议中的突破性想法是一种新颖的方法,可以证明基于 MPC 的方法的恶意安全性(之前尝试应用通用恶意安全 MPC 技术导致协议需要几分钟而不是几毫秒才能执行)。

同一作者随后做出的改进催生了 k-out-of-n 协议,最终 DKLS23 改进催生了 3 轮 k-out-of-n 阈值 ECDSA 的通用框架,该框架涵盖了所有先前的方法,并确定 DKLS 方法在关键效果指标上最为高效。具体而言,该版本的协议仅依赖于理想承诺和双方乘法基元。由此产生的协议要求每个参与方进行个位数毫秒级的计算(从而比竞争方法快一个数量级),重要的是,它依赖于仅使用椭圆曲线运算的更简单的加密基元(相比之下,其他工作需要昂贵的 Paillier、同态运算以及昂贵的零知识范围证明和加密密钥格式正确性证明)。

该协议已由多位审计员进行内部评估,其中包括 Coinbase 聘请的专家和其他加密专家。Doerner 和 Roy DR26 最近发现 DKLS 乘法器的安全性分析中存在一处计算错误,需要额外调用 22 次 OT 才能达到声称的 120 位安全性。此项变更已实施。同样,其他外部审计人员也指出,协议说明中缺少有关点对点信道模型中广播影响的细节(值得注意的是,必须回显一些配置参数才能达成共识)。

Google 随后对该协议开展的工作不仅大幅强化了实现,减少了大规模运行该协议所需的资源,还扩展了该方案的功能。例如,学术文献对随机预言机的选择和实现没有做出具体说明。虽然随机预言机是一种有用的学术抽象,但其实现是一项微妙的任务,已导致安全审核记录了多个缺陷。

我们工作的一个显著方面是开发了一个类型系统(基于两个 spawn 和 fork 操作,以及严格使用类型系统来防止复制、移动和别名化指向 oracle 的指针),以确保每个会话和子会话都使用不同的随机 oracle。

另一项重要改进与会话和子会话标识符的选择有关。UC 模型以及在该模型中被证明安全的所有协议都要求环境提供新的会话标识符。在实践中,系统必须确保攻击者无法违反此假设,这通常需要参与者为此维护一个无界状态。我们对原始 DKLS 协议进行了增强,增加了额外的轮次,以便以仅需要恒定大小状态的方式选择此标识符。

总体而言,更新和强化后的协议仍可在数十毫秒内完成签名操作。

在功能方面,DKLS23 论文仅考虑标准的 k-out-of-n 阈值访问结构。在实践中,客户可能需要模仿组织规则的访问结构。密码学文献中包含许多为秘密共享设计访问结构的方法。在这里,我们扩展了 DKLS 协议,以支持更通用的访问结构,这些结构可以由 n 选 k 阈值门组成。这样就可以制定如下政策:“以下群组中的 2/3:(a) 客户,(b) 10 位风险控制人员中的 2 位,(c) 财务、法律和会计部门负责人中的 2/3”等。

在 v1beta API 中,您可以在 keyPolicy 字段中将此访问结构定义为 KeyRing 的密钥政策。在 KeyRing 中创建的每个密钥都会使用它。密钥政策最多可以有两级:根阈值规则,以及直接位于其下的阈值规则。根下的阈值规则不能包含其他阈值规则。