BLS签名是一种公钥签名方案,由Boneh、Lynn和Shacham于2001年提出,并在2018年更新。BLS签名的特点是简单、可聚合、唯一,它可以用于实现多重签名、阈值签名、短签名等应用场景。BLS签名的安全性基于椭圆曲线离散对数问题和哈希函数的强度。

BLS签名的原理

BLS签名的原理如下:

初始化阶段,选择一个椭圆曲线和一个生成元G,以及一个双线性映射e:G×G→GT,其中GT是一个有限域上的乘法循环群。双线性映射满足以下性质:对于任意的P、Q∈G和a、b∈Zp,有e(aP,bQ)=e(P,Q)ab。另外,选择一个哈希函数H:{0,1}*→G,将消息空间映射到椭圆曲线上的点。公开参数为(G,e,H)。 密钥生成阶段,随机选择一个私钥x∈Zp,计算公钥X=xG∈G。密钥对为(x,X)。 签名阶段,对于要签名的消息m,首先计算其哈希值H(m)∈G,然后用私钥x对其进行点乘,得到签名S=xH(m)∈G。 验证阶段,给定消息m、公钥X和签名S,首先计算其哈希值H(m)∈G,然后用双线性映射e对X和S进行配对,检查是否满足e(X,H(m))=e(G,S)。如果成立,则验签成功;否则验签失败。

BLS签名的优势

BLS签名相比其他签名方案有以下优势:

简单:BLS签名的算法很简单,只涉及哈希、点乘和配对运算,没有复杂的数学运算或随机数生成。 可聚合:BLS签名可以将多个签名聚合成一个签名,从而节省空间和验证时间。具体来说,如果有n个消息m1,m2,…,mn和n个公钥X1,X2,…,Xn以及n个对应的签名S1,S2,…,Sn,则可以将这些签名相加得到一个聚合签名S=S1+S2+…+Sn∈G,并且可以用以下等式进行验证:e(G,S)=e(X1,H(m1))×e(X2,H(m2))×…×e(Xn,H(mn))。 唯一:BLS签名对于同一个消息只有唯一的一个有效签名,这样可以避免重放攻击或伪造攻击。

BLS签名的应用

BLS签名由于其简单、可聚合、唯一等特点,可以用于实现多种应用场景,例如:

多重签名:多重签名是指多个参与者对同一个消息进行联合签名的过程。BLS签名可以实现无交互的多重签名方案,即每个参与者只需要用自己的私钥对消息进行单独签名,并将自己的公钥和签名发送给其他参与者。任何一个参与者都可以将收到的所有公钥和签名聚合成一个多重公钥和一个多重签名,并用之进行验证。 阈值签名:阈值签名是指多个参与者共享一个密钥,并且只有超过一定数量(阈值)的参与者才能对消息进行有效签名的过程。BLS签名可以实现无交互的阈值签名方案,即每个参与者只需要用自己的私钥分片对消息进行单独签名,并将自己的公钥分片和签名发送给其他参与者。任何一个参与者都可以将收到的超过阈值数量的公钥分片和签名聚合成一个阈值公钥和一个阈值签名,并用之进行验证。 短签名:短签名是指签名长度较短的签名方案,通常用于节省带宽或存储空间。BLS签名可以实现短签名方案,即每个签名只占用一个椭圆曲线上的点的空间,通常为32字节或64字节。这比其他签名方案如ECDSA或Schnorr要短得多。

总结

BLS签名是一种基于双线性映射的高效签名方案,它具有简单、可聚合、唯一等特点,可以用于实现多重签名、阈值签名、短签名等应用场景。BLS签名的安全性基于椭圆曲线离散对数问题和哈希函数的强度。