技术沙龙第六期-BLS

忆忆:

那我今天就分享BLS签名吧

忆忆:

BLS 签名不需要随机数,区块中的所有签名都可以组合成单个签名,m-of-n 类型的多重签名比较简单,不需要签名者之间进行多轮通信。

忆忆:

BLS签名需要用到两个结构:哈希到曲线以及曲线配对。哈希到曲线:一般签名将消息哈希视作数字,在这里将消息哈希到椭圆曲线(比较直接的方法是将哈希结果视作x坐标,选择曲线上对应的y较小的点); 曲线配对:一个将两个不同点映射成一个数字的特殊函数,假设该函数为e( · ,· ),两个任意的点为P,Q,则e( , )满足如下性质:e(a·P ,b·Q )= e(ab·P , Q )= e(P , ab·Q )=e(P , Q)^ (ab)

忆忆:

签名的具体方案:假设私钥为pk,公钥为P=pk️G,签名的消息为m。首先将消息哈希到曲线H(m),然后得到签名S=pk️H(m);验证签名:用公钥检查e(P, H(m))=e(G,S)为真即可

忆忆:

聚合签名:假设有(公钥Pi,已签名的消息mi),聚合签名为所有签名的简单和S=Sum (Si),只需验证e(G,S)=e(P1,H(m1))·…·e(Pn,H(mn))即可; n-of-n多重签名与Schnorr签名类似,也可以在简单加和时添加系数; m-of-n签名:聚合公钥P=a1·P1 … an·Pn,ai=hash(Pi,{P1,P2,…,Pn}),成员密钥MKi=Sum (ai·pki)️H(P,i),成员签名Si=pki️H(P,m) MKi,连个签名与联合公钥(S’,P’)只需将成员签名和公钥简单相加即可,验证e(G,S’)= e(P’,H(P,m))· e(P, Sum (H(P,i)))

忆忆:

BLS的弊端在于配对效率低下,函数e(P,Q)的验证难度较大,验证时间长。 我的分享就到这里