BLS签名算法

关于BLS签名算法,最原始的一篇论文出自

Lynn B . Short signatures from the Weil pairing[M]// Advances in Cryptology — ASIACRYPT 2001. Springer Berlin Heidelberg, 2001.

 

摘要:面向椭圆曲线和超椭圆曲线,基于计算的Diffie–Hellman假设提出了一种短签名方案。对于标准安全参数,签名长度大约是同样安全级别的DSA签名长度的一半。这个短签名方案是为人工输入签名或通过低带宽传播签名的系统设计的。对于签名聚合和批处理验证的性能进行了研究。

 

思考:这篇BLS签名算法的老论文有很多晦涩的定义和证明,但是其中提出的BLS 签名算法带来的签名聚合功能有助于把一个区块中不同人不同算法的签名聚合成一个签名,能够节省区块中存储空间和交易费,也能简化验证签名的过程,在多个参与方合作的联盟链场景中可以考虑使用。

 

补充:BLS签名算法主要需要进行曲线配对和签名聚合两项工作,具体内容如下:

(1)曲线哈希:BLS签名算法是一种可以实现签名聚合和密钥聚合的算法,它修改了哈希算法,结果不再是一个数值而是对应到椭圆曲线上的一个点。

(2)曲线配对:需要一个特殊的函数把曲线上的两个映射为一个数,需要满足的属性是无论哪个点乘以未知数x,结果必须相同。论文中论证过这种函数是存在的,并且不会暴露x的任何相关信息(安全性)。

(3)签名方案:为了计算签名,先对消息求曲线哈希H(m),再将获取的结果(曲线坐标点)乘以私钥即可:S = pk*H(m)。签名结果是一个曲线上的点,用压缩的序列化格式保存,只占33个字节。

(4)验签方案:只需验证公钥和消息的哈希值(曲线上两个点)与曲线生成点和签名(曲线上另两个点)是否映射到同一个数,如果是就说明这是一个有效的 BLS 签名。

(5)安全隐患:BLS签名也不是完美无缺的,它的复杂度要比ECDSA高上一个数量级。在验证区块中1000笔交易的聚合签名时,仍需要进行1000次配对计算,这可能比使用ECDSA时对1000个单独签名进行验证还要慢。唯一的好处在于,可以在区块中放更多笔的交易,毕竟聚合签名只占32字节。另外还有一种针对椭圆曲线加密体系的MOV攻击,利用配对函数来危害系统安全。

 

  对ECDSA、schnorr和BLS签名算法的资料整理如下表:

 

 

ECDSA

schnorr

BLS

验证多重签名

每个签名和公钥

每笔交易的合并签名和公钥[1]

每个区块的合并签名和公钥

随机数生成器

指定随机点

依赖随机数生成器

不需要随机数生成器

签名者通信

 

需要

不需要

签名长度

320比特

320比特

160比特

 

[1]schnorr签名算法可以把一笔交易中的所有签名和公钥合并成单个签名和公钥,而且无从追溯是否合并过,一次性对合并后的签名验证,加快区块验证速度。

你可能感兴趣的:(区块链)