荔枝成为BLS短签名糕守
BLS短签名是什么?先用一天的时间突击一下
发现《Introduction to Security Reduction》整个第五章都是......
英语不好,先学BLS再看论文(诶嘿
罐装芝士
简介
开篇论文:Lynn B . Short signatures from the Weil pairing[M]// Advances in Cryptology — ASIACRYPT 2001. Springer Berlin Heidelberg, 2001.
BLS签名由Boneh、Lovász和Shamir等人提出,所以叫BLS(和RSA一模一样.......)
BLS签名基于椭圆曲线上双线性映射的数字签名方案,具有短签名的优点,保证签名的安全性和不可伪造性
开篇论文的灌装芝士
摘要:面向椭圆曲线和超椭圆曲线,基于计算的Diffie–Hellman假设提出了一种短签名方案。对于标准安全参数,签名长度大约是同样安全级别的DSA签名长度的一半。这个短签名方案是为人工输入签名或通过低带宽传播签名的系统设计的。对于签名聚合和批处理验证的性能进行了研究。
思考:这篇BLS签名算法的老论文有很多晦涩的定义和证明,但是其中提出的BLS 签名算法带来的签名聚合功能有助于把一个区块中不同人不同算法的签名聚合成一个签名,能够节省区块中存储空间和交易费,也能简化验证签名的过程,在多个参与方合作的联盟链场景中可以考虑使用。
补充:BLS签名算法主要需要进行曲线配对和签名聚合两项工作,具体内容如下:
- 曲线哈希:BLS签名算法是一种可以实现签名聚合和密钥聚合的算法,它修改了哈希算法,结果不再是一个数值而是对应到椭圆曲线上的一个点。
- 曲线配对:需要一个特殊的函数把曲线上的两个映射为一个数,需要满足的属性是无论哪个点乘以未知数
,结果必须相同。论文中论证过这种函数是存在的,并且不会暴露x的任何相关信息(安全性)。 - 签名方案:为了计算签名,先对消息求曲线哈希
,再将获取的结果(曲线坐标点)乘以私钥即可: 。签名结果是一个曲线上的点,用压缩的序列化格式保存,只占33个字节。 - 验签方案:只需验证公钥和消息的哈希值(曲线上两个点)与曲线生成点和签名(曲线上另两个点)是否映射到同一个数,如果是就说明这是一个有效的 BLS 签名。
- 安全隐患:BLS签名也不是完美无缺的,它的复杂度要比ECDSA高上一个数量级。在验证区块中1000笔交易的聚合签名时,仍需要进行1000次配对计算,这可能比使用ECDSA时对1000个单独签名进行验证还要慢。唯一的好处在于,可以在区块中放更多笔的交易,毕竟聚合签名只占32字节。另外还有一种针对椭圆曲线加密体系的MOV攻击,利用配对函数来危害系统安全。
对ECDSA、schnorr和BLS签名算法的资料整理如下表:
ECDSA | schnorr | BLS | |
---|---|---|---|
验证多重签名 | 每个签名和公钥 | 每笔交易的合并签名和公钥 |
每个区块的合并签名和公钥 |
随机数生成器 | 指定随机点 | 依赖随机数生成器 | 不需要随机数生成器 |
签名者通信 | 需要 | 不需要 | |
签名长度 | 320比特 | 320比特 | 160比特 |
[1]schnorr签名算法可以把一笔交易中的所有签名和公钥合并成单个签名和公钥,而且无从追溯是否合并过,一次性对合并后的签名验证,加快区块验证速度
关于ECDSA和schnorr的学习挖了个坑,还没填完,抽空学习一下
原理
- 初始化:选择两个素数
阶乘法循环群 和 ,以及一个双线性映射 。生成元 和 ,公开参数为 。 - 密钥生成:选择一个随机数
作为私钥,计算 作为公钥。私钥 需要妥善保管,而公钥可以公开。 - 签名:消息
的签名 ,其中 是一个安全哈希函数。 - 验证:验证签名的有效性可以通过计算
是否等于 来实现。如果相等,则签名有效;否则,签名无效。
对于双线性群
签名:
验证:
安全性证明
https://blog.csdn.net/CCCYYY090/article/details/116660613
https://blog.csdn.net/zmrlinux/article/details/107729245
https://www.cnblogs.com/shirleyya/p/16776893.html
https://www.cnblogs.com/lsgxeva/p/12021659.html
https://zkfold.ing/blssig-secure
基于BLS签名的门限签名
门限签名是一种数字签名方案,其中多个签名者合作生成一个签名,只有当超过一定数量的签名者同意时,该签名才有效。基于BLS签名的门限签名利用了BLS签名的短签名和高效验证算法的优点,同时还提供了门限签名的安全性。
基于BLS签名的门限签名通过以下步骤实现:
- 初始化:与BLS签名相同,选择合适的素数p阶乘法循环群
、 和 ,以及双线性映射 : 。同时选择公开参数 。 - 密钥生成:每个参与者随机选择一个私钥
和一个公钥 。每个参与者保留其私钥并公开其公钥。 - 签名:当消息M被提出时,超过
个参与者共同对消息 进行签名。每个参与者i使用其私钥 计算 ,然后将 广播给其他参与者。所有参与者共同生成一个元组 ,该元组作为最终的签名。 - 验证:验证签名的有效性需要检查是否满足
,其中 。如果所有参与者的公钥都满足这个等式,则签名有效;否则,签名无效。
应用场景
BLS签名和基于BLS签名的门限签名在许多安全敏感的应用场景中得到了广泛应用,例如电子投票、数字版权保护、身份认证等。由于它们的短签名和高效验证算法的优点,它们在保证数据完整性和防止伪造方面具有出色的性能。
总结:本文深入探讨了BLS签名和基于BLS签名的门限签名的工作原理和应用场景。通过了解这两种签名的原理和实现步骤,我们可以更好地理解它们在保护信息安全方面的重要作用。随着技术的不断进步,相信BLS签名和基于BLS签名的门限签名将在未来的信息安全领域发挥更加重要的作用。
reference:
https://cloud.baidu.com/article/3084711
https://blog.csdn.net/weixin_42120773/article/details/104394223
《Introduction to Security Reduction》的介绍
论文中的展现
《Short Signatures from the Weil Pairing》
Weil Pairing挖个坑,之后学习一下这些配对
作者:BLS三个人,Stanford University
需求和贡献:
在要求人类手动输入签名的环境中,需要短数字签名
RSA的签名长度为1024位,DSA的签名长度为320位
BLS的签名长度是DSA签名的一半,仅有160位,
感谢师兄的讲解
讲解BLS系列论文,流程是
其中,算法指的就是算法(废话
安全模型指的就是安全模型(废话*2
BLS中,安全模型用到的是 EU-CMA
然后证明,我觉得是最难的部分,感谢师兄讲解
(后面是付费内容了,太珍贵了
Short Signatures from the Weil Pairing
BLS是个GDH问题,所以需要证明 CDH是困难的, DDH是简单的
首先定义两个集合
A是敌手,B是挑战者
哈希询问
A每次给B一个的
挑战者每获取一个
其中
这也就意味着,
签名询问
A每次给B一个的
对于每个询问的
1 | 问题:为什么要有哈希询问,如果只进行签名询问,还能避免生成会导致失败的c |
输出结果
B询问
检查
Efficiency Improvements for Signature Schemes with Tight Security Reductions
算法
生成密钥
签名
- 之前询问过:直接返回输出;否则计算并返回
验证
- 计算
,如果 则接受,否则拒绝
证明
哈希询问
记一个三元组列表
,满足 (同样的, ) \