门限签名 threshold signature
1. 引言参考资料[1] 基于RSA的实用门限签名算法
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的门限签名机制
详细可参看:
- Victor Shoup 2000年论文 Practical Threshold Signatures
- 基于RSA的实用门限签名算法
4. 基于ECDSA的门限签名机制
详细可参看:
- Difinity Threshold ECDSA Signatures
- ZenGo团队 Introducing Multi-Party ECDSA library
代码实现有:【已安全审计】
在该代码库中,实现了3种threshold ECDSA:
- 1)Yehuda Lindell 2017年论文 Fast Secure Two-Party ECDSA Signing:为2 party protocol。具有很快的signing time。
- 2)Rosario Gennaro 和 Steven Goldfeder 2019年论文 Fast Multiparty Threshold ECDSA with Fast Trustless Setup:为a protocol for any threshold t t t of corruption and parties n n n。
- 3)Guilhem Castagnos等人2019年论文 Two-Party ECDSA from Hash Proof Systems and Efficient Instantiations:为2 party protocol,signing time要比1)慢,但是基于更好的安全假设。
5. 基于Schnorr的门限签名机制
可参看:
- Stinson等人2001年论文 Provably Secure Distributed Schnorr Signatures and a (t, n) Threshold Scheme for Implicit Certificates
代码实现有:
6. 基于BLS的门限签名机制
可参看:
- Threshold BLS Signatures
- ECDSA VS Schnorr signature VS BLS signature
- Secret Sharing and Threshold Signatures with BLS
以SSS可信方式运行KeyGen,完整的BLS threshold signature示例为:
相关代码实现有:
- https://github.com/herumi/bls(C++):实现了 Ethereum 2.0 Phase 0 的新BLS (threshold) signature机制。
- https://github.com/celo-org/celo-threshold-bls-rs(Rust):采用Distributed Key Generation,具体基于Secure Distributed Key Generation for Discrete-Log Based Cryptosystems论文。
参考资料
[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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)