文章目录

  • 基础知识
  • 传统BLS - 实现步骤
    • 1.初始化
    • 2.密钥生成
    • 3.签名
    • 4. 验签
  • BLS门限签名 - 实现步骤
    • 原理
    • 门限签名定义
    • 实现步骤
      • 1. 初始化(一样)
      • 2. 密钥生成
      • 3.签名
      • 4.验证
  • 代码实现

基础知识

参考:BLS数字签名算法介绍及拓展

传统BLS - 实现步骤

1.初始化

  • G1,G2G_1,G_2G1​,G2​ 是阶为 ppp 的 乘法循环群 。生成元分别是 g1,g2g_1, g_2g1​,g2​

  • eee 是 双线性映射:G1 * G2 -> GT ,

  • 安全hashhashhash函数:h:{0,1}*-> G1

  • 公开参数是(G1,G2,GT,e,g1,g2,p,h)(G_1, G_2, G_T, e, g_1, g_2,p,h)(G1​,G2​,GT​,e,g1​,g2​,p,h)

2.密钥生成

(1) 选择一个随机数x∈ZPx∈Z_Px∈ZP​,私钥SK=xS_K=xSK​=x (secret key),计算公钥PK=v=g2x∈G2P_K=v=g_2^x∈G_2PK​=v=g2x​∈G2​

3.签名

对消息MMM签名:sig=h(M)∗xsig=h(M)*xsig=h(M)∗x

4. 验签

验证等式是否成立:
e(sig,g2)=e(h(M),v)e(sig,g_2)=e(h(M),v)e(sig,g2​)=e(h(M),v)


BLS门限签名 - 实现步骤

原理

最简单的实现门限签名的方式就是:SSS(Shamir Secret Share)


SSS 的核心是:拉格朗日插值法

拉格朗日插值法:
已知一条n−1n-1n−1次曲线上的nnn个点(x1,y1),(x2,y2),....,(xn,yn)(x_1,y_1), (x_2,y_2), ...., (x_n,y_n)(x1​,y1​),(x2​,y2​),....,(xn​,yn​) .可以使用拉格朗日插值法恢复这条曲线方程,具体如下:
y=(x−x2)(x−x3)...(x−xn)(x1−x2)(x1−x3)...(x1−xn)y1+(x−x1)(x−x3)...(x−xn)(x2−x1)(x2−x3)...(x2−xn)y2+...+(x−x1)(x−x2)...(x−xn−1)(xn−x1)(xn−x2)...(xn−xn−1)yny = \dfrac{(x-x_2)(x-x_3)...(x-x_n)}{(x_1-x_2)(x_1-x_3)...(x_1-x_n)}y_1+\dfrac{(x-x_1)(x-x_3)...(x-x_n)}{(x_2-x_1)(x_2-x_3)...(x_2-x_n)}y_2+...+\dfrac{(x-x_1)(x-x_2)...(x-x_{n-1})}{(x_n-x_1)(x_n-x_2)...(x_n-x_{n-1})}y_ny=(x1​−x2​)(x1​−x3​)...(x1​−xn​)(x−x2​)(x−x3​)...(x−xn​)​y1​+(x2​−x1​)(x2​−x3​)...(x2​−xn​)(x−x1​)(x−x3​)...(x−xn​)​y2​+...+(xn​−x1​)(xn​−x2​)...(xn​−xn−1​)(x−x1​)(x−x2​)...(x−xn−1​)​yn​


举个现实例子: 要实现 m of n 秘密分享。 取 m=3,n=4 。

1. 先任意选择一条 t -1=2 次曲线,以这条曲线在 x=0 处的值作为秘密。
2. 然后任意取出曲线上的 n = 4 个点 (1,2),(2,5), (3,10),(4,17) 后,任选其中三个点后恢复出来的曲线是一样的。
3. 因此,我可以将这四个点(横坐标分别是 1、2、3、4)发送给四个不同的人,这样就是一个 3-of-4 的秘密分享了。


有了以上知识,应该可以理解基于 BLS 签名的门限签名算法 。

门限签名定义

门限签名的通俗理解是:在一个签名者群体中,有超过 m (门限) 个签名者对一条消息进行签名就可以得到这个群体对这条消息的签名,并且认为 这个群体 对这条消息进行了验证。

  • 超过 m个签名者的不同子集生成的签名是一样的,且任何人都可以验证。
  • 由门限签名的性质可知,少于 t 个签名者的群体是得不到群体签名的。

实现步骤

1. 初始化(一样)

  • G1,G2G_1,G_2G1​,G2​ 是阶为 ppp 的 乘法循环群 。生成元分别是 g1,g2g_1, g_2g1​,g2​

  • eee 是 双线性映射:G1 * G2 -> GT ,

  • 安全hashhashhash函数:h:{0,1}*-> G1

  • 公开参数是(G1,G2,GT,e,g1,g2,p,h)(G_1, G_2, G_T, e, g_1, g_2,p,h)(G1​,G2​,GT​,e,g1​,g2​,p,h)

2. 密钥生成

这步由 密钥生成中心 完成

(1)密钥生成中心,选择系统主私钥,计算系统主公钥。

  • 系统主私钥:MSK=xMSK=xMSK=x,其中xxx为系统选择的随机数;
  • 系统主公钥:MPK=v=g2x∈G2MPK=v=g_2^x ∈G_2MPK=v=g2x​∈G2​

(2)分别计算 节点 的 私钥 和公钥 。

  • 随机选择一个 ZPZ_PZP​上的 t−1t-1t−1 阶多项式 PPP, 满足 P(0)=xP(0)=xP(0)=x, 计算xi=P(i)x_i = P(i)xi​=P(i),
  • 签名者uiu_iui​的私钥:xix_ixi​,
  • 签名者uiu_iui​的公钥:vi=g2x2v_i=g_2^{x_2}vi​=g2x2​​

(3)公开 主公钥MPKMPKMPK 及所有用户的公钥

3.签名

(1)用户uiu_iui​计算对消息MMM签名:σi=h(M)xi\sigma_i=h(M)^{x_i}σi​=h(M)xi​;
(2)广播σi\sigma_iσi​;
(3)用户间签名验证:用户uiu_iui​收到了来自uju_juj​的签名 σj\sigma_jσj​后,首先验证签名的正确性:e(σj,g2)=e(h(M),vj)e(\sigma_j,g_2)=e(h(M),v_j)e(σj​,g2​)=e(h(M),vj​),如果签名正确则记录下来;
(4)待收集到 t 个不同用户的正确签名后,用户计算完整的签名:
由拉格朗日差值公式可知,任意 t 个用户所产生的完整签名相同

4.验证

e(σ,g2)?=e(h(M),MPK)e(σ, g_2)? = e(h(M), MPK)e(σ,g2​)?=e(h(M),MPK)

代码实现

关于JPBC库安装,可在B站看到相关视频

package com.CYQ.signatures.bls;import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Field;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;//BLS签名(单个)
public class BLS {public static void main(String[] args){// 初始化Pairing bp = PairingFactory.getPairing("a.properties");Field G1 = bp.getG1();Field Zr = bp.getZr();Element g = G1.newRandomElement();Element x = Zr.newRandomElement();//私钥Element g_x = g.duplicate().powZn(x);//公钥//签名String m = "message";//签名的消息!byte[] m_hash = Integer.toString(m.hashCode()).getBytes();Element h = G1.newElementFromHash(m_hash, 0, m_hash.length);Element sig = h.duplicate().powZn(x);//签名//验证Element pl = bp.pairing(g, sig);//g ,sig均为公共参数Element pr = bp.pairing(h, g_x);//h,公钥均为公共参数if (pl.isEqual(pr))System.out.println("Yes");elseSystem.out.println("No");}
}

此文章参考了CSDN上多位博主的文章,可以看作一篇总结文章,此处难以一一列举,望见谅。

如若侵权,请联系,会删除的!

参考:
1、拉格朗日中值定理

BLS门限签名介绍及实现相关推荐

  1. BLS 签名和基于 BLS 签名的门限签名

    在区块链的整个体系中大量使用了密码学算法,密码学是保证区块链安全的基石,而区块链的广泛应用也推进了密码学的发展.2003 年 Boneh 和 Franklin 提出了身份基加密,从此基于双线性映射的密 ...

  2. 门限签名技术火了,它的硬核之处绝不仅仅是秘密共享……

    作者 | 苏冠通 责编 | Aholiab.Carol 出品 | 区块链大本营.ARPA 门限签名是一种分布式多方签名协议,包含有分布式密钥生成,签名和验签算法.近几年,伴随区块链技术的快速发展,签名 ...

  3. 聚合签名、门限签名、Multisigs 和多签名

    引言 数字签名在区块链技术中扮演着举足轻重的角色,因为每一笔交易都需要签名才能成为一笔有效的交易.准确地说,数字签名在区块链协议中有三方面的目标: 证明所有权,并为花费资金提供授权 证明了不可否认性, ...

  4. 门限签名(1)——秘密共享

    门限签名(threshold signature区块链中叫多重签名 multisig),即n个用户中有t个签名时,签名有效. 秘密共享是门限签名的一种特殊情况,即多个用户共享一个秘密,并不是把秘密发给 ...

  5. Taproot升级在即!门限签名技术将给数字钱包带来什么?

    继四年前比特币隔离见证升级之后,今年十一月份的BTC Taproot升级将为比特币带来巨大的技术革新. Taproot是什么?GregoryMaxwell的原始Taproot提案标题是这样说的:Tap ...

  6. BitGo的TSS门限签名方案代码解析

    1. 引言 前序博客有: 门限签名 threshold signature verifiable secret sharing可验证的秘密共享 开源代码见: https://github.com/Bi ...

  7. ARPA基于BLS的门限签名算法随机数生成器设计

    作者 | ARPA 责编 | 晋兆雨 头图 | 付费下载于视觉中国 随机数已经在密码学.彩票和游戏等众多领域被广泛使用.区块链与随机性也有着紧密的关联,因为它们从随机性中寻求公平.被广泛应用的的工作量 ...

  8. 介绍一种门限SM2密码方案

    中科院信息工程研究所的科研人员林璟锵.马原.荆继武等设计了一种 SM2 门限密码算法实现方案,他们在 2014 年 8 月向国家知识产权局提交了专利申请,名称是<适用于云计算的基于SM2算法的签 ...

  9. 门限的限意思是什么_门限是什么意思_门限的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 Threshold secret sharing is the foundation of implementing threshold cryptosystem. 门限秘密共享是门限密码系统实 ...

  10. 基于门限环签名的可删除区块链(未完)

    基于门限环签名的可删除区块链 [1]任艳丽,徐丹婷,张新鹏,谷大武.基于门限环签名的可删除区块链[J].通信学报,2019,40(04):71-82. 摘要:随着区块链的发展,存储所有区块数据需要巨大 ...

最新文章

  1. Java面向对象----封装概念
  2. linux 账号和密码文件 /etc/passwd和/etc/shadow 简介
  3. c#sdf数据库连接_如何连接并处理 sdf 数据库文件(便捷数据库处理)
  4. java 数组遍历_Java中遍历数组使用foreach循环还是for循环?
  5. Android--Activity四种启动模式
  6. c语言设计指导实训,C语言程序设计实训指导
  7. ubuntu 缺少php安装包,ubuntu 16.04 lts安装php环境和composer依赖包管理
  8. linux命令学习——tar
  9. VBA实战技巧精粹010:如何快速选定工作表及Option Base 1
  10. 190717每日一句
  11. Web压力测试常用的工具有哪些
  12. 《数字信号处理》系统函数的频率响应、零极点和稳定性的实现
  13. poi操作Excel给列设置下拉菜单(数据验证)
  14. 360极速浏览器打不开国内网站的一种解决方法
  15. A+B 输入输出练习VIII
  16. 欧拉图简述---(一笔画问题)
  17. 领导艺术:如何留住员工的心
  18. python基于vue协同过滤算法的图书推荐系统
  19. 应用ceph块存储(ceph-13.2.10)
  20. 2,未来十年,资产增加

热门文章

  1. MySQL数据库的导入和导出
  2. mysql5.5.8安装图解_MySQL 5.5.8安装详细步骤-阿里云开发者社区
  3. 【Shiro第九篇】SpringBoot + Shiro整合JWT
  4. JVM初识之垃圾回收机制(GC)
  5. Javascript设计模式(二)工厂模式
  6. 【246天】跃迁之路——程序员高效学习方法论探索系列(实验阶段04-2017.10.09)...
  7. puppet的配置清单书写
  8. 如何使非域模式下的组策略对管理员帐号无效
  9. C/C++回调方式系列之一 函数指针和函数回调模式
  10. [JNI]开发之旅(4)项目架构介绍