签名算法 - BLS签名算法介绍

84 篇文章 60 订阅
66 篇文章 10 订阅

BLS签名算法是斯坦福大学计算机系三人提出:Dan Boneh,Ben Lynn以及Hovav Shacham。BLS签名算法论文的下载地址:https://www.iacr.org/archive/asiacrypt2001/22480516.pdf。

最近在Medium上看到一篇介绍BLS签名算法比较清楚的文章,部分翻译整理一下。Medium上的原文链接:https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716。

详细介绍BLS签名算法过程之前,需要介绍两个辅助知识。

1)新型散列函数(Hash函数)

为啥称为新型散列函数呢?原因是一般的hash(散列)函数的结果都是数值。在BLS签名算法中需要用的散列函数的结果是椭圆曲线上的一个点。也就是说,散列结果对应椭圆曲线上的一个点。举EC(椭圆曲线)和SHA-256为例。比特币用的椭圆曲线是secp256k1,也就是该曲线由2²⁵⁶个点组成。SHA-256普通Hash函数的结果也是256位。如果用Hash函数的数值结果,对应于椭圆曲线上点横坐标x,有两个点y-y都在椭圆曲线y²=x³+ax+b上。说明SHA-256的结果,50%的概率,要不找到两个点,要不找不到点。

为了让每个SHA-256的结果,都能映射到椭圆曲线上的一个点,采用如下的方法:在消息m内容上或上一个序号,直至Hash的结果能映射到椭圆曲线上。示意如下:

序号0以及序号1的hash结果都不能映射,直至hash(m||2)结束。

2)双线性映射e函数

函数e,针对曲线上的两个点,e函数能映射它们到一个数值。

e(P, Q) → n

并且该函数满足以下的操作(给定一个数值x,不论x和P或者Q哪个点相乘,e函数的结果相同):

e(x×P, Q) = e(P, x×Q)

也就是,满足如下的交换规则:

e(a×P, b×Q) = e(P, ab×Q) = e(ab×P, Q) = e(P, Q)^(ab)

具体的证明过程,本文省略。感兴趣的小伙伴可以自行研究。对于双线性椭圆曲线,存在特殊函数e满足如上的交换规则。

3)BLS签名过程

给定私钥pk,公钥P = pk×G,以及待签名的消息为m。签名的计算公式如下:

S = pk×H(m)

其中H(m)是第一节中讲述的新型的Hash函数。过程如下图所示:

 

验证过程涉及e函数,计算如下的等式是否成立:

e(P, H(m)) = e(G, S)

证明过程如下:

e(P, H(m)) = e(pk×G, H(m)) = e(G, pk×H(m)) = e(G, S)

证明过程示意如下:

 

4)签名合并

BLS的算法有很多应用,其中一个是签名的合并。想象一下,一个区块中有1000个交易,每个交易都有独立的公钥Pi,签名Si,以及交易内容mi。如果需要知道区块中的交易的签名是否都正确,传统的方式,区块中的交易需要一个个的验证签名。并且,区块中需要存储所有交易的签名。用BLS算法进行签名的合并只需要存储一个33个字节的BLS签名。合并签名的结果是:

S = S1+S2+…+S1000

验证过程是:

e(G, S) = e(P1, H(m1))⋅e(P2, H(m2))⋅…⋅e(P1000, H(m1000))

证明过程如下:

e(G, S) = e(G, S1+S2+…+S1000) = e(G, S1)⋅e(G, S2)⋅…⋅e(G, S1000) = e(G, pk1×H(m1))⋅…⋅e(G, pk1000×H(m1000)) = e(pk1×G, H(m1))⋅…⋅e(pk1000×G, H(m1000)) = e(P1, H(m1))⋅e(P2, H(m2))⋅…⋅e(P1000, H(m1000))

从证明过程可见,主要是用了e函数的交换规则。BLS算法在多签以及m/n签名还有更多应用,本文不详细展开。感兴趣的小伙伴可以深入研究。 

总结:BLS签名算法是斯坦福大学计算机系三人提出:Dan Boneh,Ben Lynn以及Hovav Shacham。BLS的主要思想是待签名的消息散列到一个椭圆曲线上的一个点,并利用双线性映射e函数的交换性质,在不泄露私钥的情况下,验证签名。BLS的算法在签名合并,多签,m/n多签有丰富的应用。

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web3.0前沿技术研究者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值