基于RSA的实用门限签名算法
摘自:https://zhuanlan.zhihu.com/p/135258941
1 门限签名
门限签名是普通数字签名的一个重要分支,是门限秘密共享技术和数字签名的一种结合。1991年,Desmedt-Frankel首次提出了 门限签名方案。 门限签名方案是指由 个成员组成一个签名群体,该群体有一对公钥和私钥,群体内大于等于 个合法、诚实的成员组合可以代表群体用群私钥进行签名,任何人可利用该群体的公钥进行签名验证。这里 是门限值,只有大于等于 个合法成员才能代表群体进行签名,群体中任何个或更少的成员不能代表该群体进行签名,同时任何成员不能假冒其他成员进行签名。采用门限签名方式可以实现权力分配,避免滥用职权。
2 基于RSA的门限签名
本算法[1]由IBM实验室提出,算法有以下特点:
1. it is unforgeable and robust in the random oracle model, assuming the RSA problem is hard;
2. signature share generation and verification is completely non-inter-active;
3. the size of an individual signature share is bounded by a constant times the size of the RSA modulus.
算法流程:
2.1 RSA算法
2.1.1 RSA加解密
首先,RSA算法的安全性是建立在大整数因子分解的困难性之上的。
- 秘钥生成:选择两个互异的大素数和,二者保密。计算,公开。,保密,选择一个公开的随机数,满足,计算,保密。此时,公钥为,私钥为。
- 加密:加密结果,已知条件,公钥。
- 解密:解密结果,已知条件,私钥。
2.1.2 RSA签名验签
选取整数,消息空间与签名空间均为整数空间,即,定义秘钥集合。
对,Bob要对签名,取,,于是验证等式是否成立。
2.2 系统初始化
系统中有个参与者,编号分别为,有一个可信的dealer和一个敌手adversary。dealer选择两个长度(512bit)相等的素数和,设,其中也都是素数。RSA模,令,并选择公共一个素数指数。
此时,RSA公钥为。
2.3 密钥分享
接下来,dealer选择,满足,即就是要分享的秘密值。设置,dealer随机的选择为门限值。即构成的关于次多项式为。
对于,计算分享的密钥值。就是对于参与者的私钥。
接下来,计算 verification keys,用于验证签名的是否有效。dealer选择一个随机值,并计算,令。
接下来,计算拉格朗日系数。令,对于集合大小为的子集,其中元素均属于,对于任何,定义:
这些值是标准拉格朗日插值公式系数。从拉格朗日插值公式可得:
2.4 生成门限签名份额
下面,计算一个关于消息的一个签名份额:令,对于参与者计算,是一个参与者的签名份额。
每个签名份额对于有一个正确性的证明,这个正确性证明仅对于基的离散对数与对于基的离散对数相似。
下面,计算内阁签名份额的正确性证明以及如何验证这个签名份额:是的比特长度,是一个hash函数,函数输出一个bit的整数,此处是第二个安全参数。为了生成正确性证明,参与者选择随机数,计算:
此时,正确性证明就变成。为了验证这个证明,只需要检查下面等式是否成立:
此处,计算的是,而不是,原作者是这样解释的:Although is supposed to be a square, this is not easily verified. This way, we are sure to be working in , where we need to be working to ensure soundness.
2.5 组合签名份额
在组合所有签名份额之前,先要验证每一个签名份额,并且要满足有效的签名份额个数不能小于门限。
假设此处有一组有效的签名份额集合,。令,且假设。然后组合签名份额,计算:
此处的就是2.3节中的。根据,可得,此处。
因为,通过算法:,即为组合后的签名结果。此处和均为整数,且满足,可以从和上的扩展欧几里德算法得到,这样就很容易计算出满足和。
2.6 签名验证
验证签名与RSA签名验证逻辑一样:计算,此处即为2.5节中组合后的签名结果。验证者,只需要验证是否成立。
3 参考资料
[1]http://www.iacr.org/archive/eurocrypt2000/1807/18070209-new.pdf
本文首发公众号VenusBlockChain,VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,欢迎关注。