1. 引言

通常的数字签名机制中包含3个函数:KeyGen,Sign和Verify:

  • 1)KeyGen:生成公私钥对。私钥用于签名,公钥用于验签。
  • 2)Sign:输入为私钥和消息,输出为signature。
  • 3)Verify:输入为公钥、消息和signature,输出为True/False。

对于门限签名,会将上面的KeyGen和Sign过程 替换为 多方之间的交互协议。
对于门限签名:

  • 1)KeyGen:会在 n n n方之间交互生成 m-out-of-n secret sharing of the key。标准的secret sharing为本地生成key,然后在各方之间进行分享。而门限签名中,key是以shared manner方式来生成的,使得若少于 m m m方则无法知悉该key信息。所有方生成相同的公钥,而各自不同的secret share。要求满足:a) privacy:即各方之间不泄露secret share data;b) correctness:即输出的公钥为a function of the secret shares。【分为 trusted方式构建——如使用Shamir secret sharing;distributed方式——如MPC】
  • 2)Sign:多方交互完成签名。若有 m m m方对同一消息签名,则最终会生成一个singature。而若少于 m m m方参与签名,则无法生成相应的signature。各方的输入为:同一消息和各自的secret share,最终的输出为signature。privacy属性可保证在多方交互签名过程中不会泄露secret share。
  • 3)Verify:输入为公钥、消息和signature,输出为True/False。

MPC 为a general setting where parties compute a function together without revealing anything but the output。BIP032和BIP044的key derivation也需要MPC技术。
门限签名中的KeyGen和Sign可看成是一种特殊的安全多方计算。

门限签名实现可分为:

  • 基于RSA的门限签名机制
  • 基于ECDSA的门限签名机制
  • 基于Schnorr的门限签名机制
  • 基于BLS的门限签名机制

2. 多重签名 VS Secret Sharing Scheme VS 门限签名

2.1 多重签名

在这里插入图片描述

MultiSig通过增加锁的数量来增加金库的安全性,并将多个钥匙分发给多方。
MultiSig可设计为仅需一部分钥匙就能成功打开金库。若攻击者窃取了一把钥匙,并不能打开该金库。
MultiSig改变了金库的构造,要求金库足够大,能放置多个锁。同时存在隐私问题,任何人都能看出来其采用了an unusual security mechanism,从而很容易被追踪。

同时,对于区块链,不同的区块链平台需要不同的技术来支持MultiSig,此外MultiSig需要encode更多字节来表示额外的签名,从而需要更高的交易费用。

MultiSig的优点为:

  • Better security, as the keys are never stored in the same place (if properly constructed)

MultiSig的缺点为:

  • Higher fees, less privacy, not universally supported.

2.2 Secret Sharing Scheme

Secret Sharing Scheme是将金库的钥匙切分为多个pieces。可 以冗余的方式来实现,仅需一定数量的key pieces即可恢复相应的functioning key。可将这些key pieces分发给多方。
在这里插入图片描述
采用SSS机制,金库看起来和普通金库是一样的,从而可避免MultiSig金库被追踪的问题。但是,SSS有一个主要缺陷是:
当初始生成key或合成用于开锁金库时,它会再次以完整形式存储,从而给了攻击者一个黄金机会来控制完整的functioning key。

SSS机制的优点为:

  • 与普通交易类似的费用、隐私和通用支持,当不使用时,key pieces存在不同地方。

SSS机制的缺点为:

  • 当创建或使用时,key会以完整形式展现,从而可从单一位置窃取完整的key。

2.3 门限签名

门限签名中:

  • keys are ALWAYS separated
  • keys NEVER meet each other

在门限签名中:

  • 1)各方独立生成一个key。
  • 2)然后各方一起合作制作金库的锁。制作的过程为,各方基于各自的key来生成锁的一部分,最终合成为a single modular lock。
  • 3)解锁的过程为,各方依次unlocking the vault。Each key can turn the modular lock a few degrees forward. After a few rounds of partial turning of the different keys, the modular lock is fully unlocked。

该modular lock可设计为仅需一部分key就可成功开锁。

在这里插入图片描述
采用门限签名的金库看起来与普通的,只有一把钥匙的金库一样。对于外部人员,其无法看出锁的modular特性。

门限签名的优点为:

  • 不同的key不会对外泄露。门限签名的金库与普通的金库看起来一样,从而具有相同的隐私和费用。

门限签名的缺点为:

  • 制作modular lock过程需要交互,解锁过程也需要交互。而MultiSig可异步进行签名。

3. 基于RSA的门限签名机制

详细可参看:

4. 基于ECDSA的门限签名机制

详细可参看:

代码实现有:【已安全审计】

在该代码库中,实现了3种threshold ECDSA:

5. 基于Schnorr的门限签名机制

可参看:

代码实现有:

6. 基于BLS的门限签名机制

可参看:

以SSS可信方式运行KeyGen,完整的BLS threshold signature示例为:
在这里插入图片描述

相关代码实现有:

参考资料

[1] 基于RSA的实用门限签名算法
[2] Threshold Signatures: The Future of Private Keys
[3] What is Threshold Signature And Why Use It for Crypto Asset Protection
[4] Threshold Signatures Explained

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐