作者:Cassandra Heart, Arash Afshar
数字签名是区块链和加密货币的一个基本概念。现代区块链使用数字签名来确保数十亿美元的价值。数字签名使用所谓的密钥对,即一对看似随机的值,其中一个密钥是“私钥”,另一个密钥是“公钥”。通过数字签名,任何拥有“私钥”的人都可以“签署”交易并使用数字货币。因此,保护好“私钥”是至关重要的。一些精通技术的区块链用户选择自己保护这把钥匙,并接受被盗或丢失钥匙的风险(因此损失他们的资金)。相反,其他区块链用户信任在线钱包或交易所,并保护他们的密钥。当然,这个决定也伴随着基于第三方能力的一系列风险。
在这两种选择中,用户将所有信任都放在一个实体中,这可能并不理想。输入阈值数字签名:一种需要至少两个合作参与者的“阈值”来产生签名的解决方案,它消除了信任单个实体的问题。在本文中,我们:
提供阈值签名及其应用的直观描述,深入挖掘并研究各种阈值签名方案,以及将阈值签名与其他技术(例如 Mulitsig 钱包)进行比较。
阈值签名
作为阈值密码学领域的开发者,看到这些创新成为主流话题真的很令人兴奋,但不熟悉密码学或其背后数学的读者在遇到“Paillier密码系统”、“同态加密”或“Galois域”等短语时,很快就会遇到障碍。当你讨论它背后的所有活动部分以协调沟通时,它就变得更加复杂了,因此,很少有组织愿意研究它的潜力。但这并不可怕;最后,数学归结起来无非就是乘法和加法。那么让我们来看看:阈值签名到底是什么?
从比喻的角度来说,签名就类似于在一根看不见的绳子上放风筝。风筝本身就是公钥——每个人都能在天空中看到它。放风筝的人通过操纵看不见的绳子——即私钥来移动风筝。它在空中飞行时所走的路就是它的标志。每个人都看到风筝在那条路上飞过天空,只有使用那条看不见的线,才有可能实现那条飞行路径。与基础数学相比,这感觉真的很简单,但最终这个比喻对于展示“阈值签名成为可能”而所需的协调和工作很有用。
输入阈值密码学。阈值的前提就在其名称中:必须满足某个数值才能使操作成功。通常,这些进程使用短语“t (n)”来定义,其中n是可能的参与者总数,t是必须满足的阈值。Shamir的秘密共享方案是一种已经使用了相当长时间的通用阈值加密方案。对于那些不熟悉的人来说,这个过程使用了一种叫做拉格朗日插值的数学技术,将分裂的值重新组合成一个秘密值。在比喻的世界里,它是把看不见的线,并把它分成许多人可以抓住的单独的线,为了放风筝,必须有一定数量的人聚集在一起,把他们的线重新组合成线。
这一过程运行良好,全世界的服务都使用它来保护秘密数据。缺点是,当分解和重组秘密时,每个人都必须在一个安全的地方进行这个过程。在加密世界中,这也意味着,一旦私钥被重新组合并用于签名,它应该被认为是暴露的,并且该密钥持有的所有资金都应该被转移,如果任何帮助重新组合密钥的参与者走开了,他们不能做任何有意义的事情了。这是昂贵的,更不用说,需要很多人的协调。如果我们能利用密码学背后强大的数学原理并加以改进,让所有人都不必在安全的地方见面呢?
好消息是我们可以!大量文献一夜之间涌现出来,提出了对现有密码系统改进的新方法,以及完全开创性的密码协议。探索这一领域需要大量的时间和专业知识,但在Coinbase,我们已经发现并实施了使我们能够利用这些方法的策略,并在新方法被发现和同行评审时支持它们。在这个过程中涉及到很多东西,所以让我们回到这个比喻。
让我们狂热的风筝爱好者们准备好风筝的过程最终是一个独特的转折,使整个过程得以进行:每个参与者都遵循同样的规则:他们带着自己看不见的线,和自己的风筝。每个参与者都事先与其他人商定如何飞行,然后他们都带着自己的风筝以商定的速度、角度和时间继续奔跑。如果有人偏离了约定的飞行计划,整团乱成一团的风筝就会坠落到地面,但如果每个人都按照约定进行,风筝就会腾空成一体,能够按计划飞行。当飞行结束时,这些部件在空中分解,每个人都带着他们的风筝和线回家。在任何情况下,都不会有一个人拿着整个风筝或线,每个人都提前看到飞行计划,知道没有人会尝试一些疯狂的滑稽动作,让他们带着风筝逃跑。
深入地研究阈值签名
现在我们已经对阈值签名有了直观的理解,接下来让我们深入了解一些概念和术语。阈值签名方案是密码学中安全多方计算(MPC)领域的一部分。MPC的主要目标是实现对私有数据的计算,而不将它们透露给除私有数据所有者以外的任何人。例如,在风筝的比喻中,不可见的线程片段是私钥的秘密部分,阈值签名使用这些秘密部分重建私钥,并在不暴露复合私钥和秘密部分的情况下签署交易。
阈值签名的一个非常重要的组成部分是一种称为椭圆曲线密码学的数学构造。、是给定" y = x·G ",其中" y "和" G "是公开值,在合理的时间范围内很难甚至不可能找到" x "。有许多“曲线”提供这个属性:
Secp256k1,用于比特币,以太坊等Edwards25519,它被用于Cardano, Monero等BLS12-381,在以太坊2.0和其他一些链中使用
给定一个合适的椭圆曲线,实现阈值签名的下一步是首先选择一个标准(即单签名人)数字签名方案。目前流行的数字签名方案如下:
ECDSA,基于比特币使用的Secp256k1曲线Schnorr,基于Secp256k1曲线使用的Bitcoin Cash 和 MinaEd25519,基于Cardano使用的Edwards25519曲线
最后,给定一个数字签名,我们现在可以讨论阈值签名方案。阈值签名方案从单签名者方案开始,并在“n”参与者之间拆分私钥。然后,在签名阶段,t-out- n的参与者可以运行签名算法来获取签名。最后,任何单个(外部)方都可以使用验证单个签名者签名的相同算法来验证签名。也就是说,阈值签名和单签名方案生成的签名是可以互换的。换句话说,阈值签名算法有三个阶段。
生成公私钥对。接下来,将私钥分割为多个秘密份额,并在“n”方之间分发这些份额。这个阶段可以在两种模式下执行。可信经销商模式:单个可信方生成私钥,然后拆分和分发密钥。这种方法的主要问题是,经销商将以明文形式看到私钥。分布式密钥生成(DKG):一个MPC协议在n个参与者之间运行,这样在最后,参与者将获得秘密份额,并且在过程的任何时刻都不会有人看到明文形式的私钥。收集一个阈值" t "参与者,并运行MPC协议来签署交易。使用标准签名的验证算法验证签名。
阈值签名方案发展迅速。在撰写本文时,安全且受欢迎的方案包括以下几种。
FROST是一个阈值签名和DKG协议,它提供最小的通信轮次,并且可以安全的并行运行。FROST协议是Schnorr签名方案的阈值版本。
DKLs18:二选一阈值签名和DKG协议,为ECDSA签名方案提供快速签名计算。
阈值签名和多重签名
多重签名方案提供了与阈值签名相似的功能,但有一点不同:每个参与者都有自己的公钥(而不是一个公共公钥的秘密份额)。这个微小的差异对成本、速度和各种区块链上的多重签名的可用性有巨大的影响。
效率:在阈值签名方案中,每个公钥及其相应的私钥份额永久属于一个单一的、固定的签名者组;在多重签名中,每个参与者都有自己独特的专用公钥。后一种方案的好处是,每个这样的参与者都可以重用其公私密钥对,从而参与任意多个不同的签名组。然而,使用多重签名的代价是,表示任何特定此类组的“公钥”(实际上是一个公钥列表)的大小必须随着该组成员的数量线性增长。类似地,多重签名的验证时间显然必须与组的大小成线性增长,因为验证者必须读取代表组的整个公钥列表。相比之下,在阈值方案中,只有一个公钥代表整个组,而且密钥大小和验证时间都是不变的。可用性:为了确保满足" t "的最小阈值,区块链应该具有多重签名的本地支持。在大多数情况下,这种支持以智能合约的形式存在。因此,并不是所有的区块链都支持多重签名钱包。相反,基于MPC的阈值签名是独立于区块链的,只要区块链使用的签名方案有一个安全的阈值版本。
小结
阈值数字签名使我们能够做以前在加密货币中不可能做到的事情——多重签名协议需要额外的成本来操作,但这可以在没有智能合约的情况下发生。这意味着我们可以支持一个全新的钱包层:在传统的托管钱包或自托管钱包选项之前,这个阈值ECDSA方法允许客户积极参与这个签字流程。在这种方式下,用户持有一份私钥,Coinbase持有另一份,只有双方都同意飞行计划,才能签署交易。这提供了我们在Coinbase众所周知的安全和信任,用户仍然是控制的一方。
Source:https://blog.coinbase.com/threshold-digital-signatures-1d467054acd4