基于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]

 

本文首发公众号VenusBlockChain,VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,欢迎关注。

posted @ 2020-07-31 02:28  LiuYanYGZ  阅读(1015)  评论(0编辑  收藏  举报