区块链中的数学 - BLS门限签名

  • blocksight
  • 发布于 2020-12-26 23:22
  • 阅读 8101

本文接着前一篇BLS密钥聚合,讲下原始的聚合密钥签名可能出现的问题,需要一些背景知识铺垫,以Schnorr签名为例来说明,对此不熟悉的可先参考相关文章:Schnorr签名与椭圆曲线

写在前面

本文接着前一篇BLS密钥聚合,讲下原始的聚合密钥签名可能出现的问题,需要一些背景知识铺垫,以Schnorr签名为例来说明,对此不熟悉的可先参考相关文章:Schnorr签名与椭圆曲线Schnorr密钥聚合

密钥消除攻击

Schnorr密钥聚合一文中,是最简单的聚合方式,现在可以进一步说下了。
这种方式的前提是要求参与者都是诚实的,实际实现中要加入额外的公钥验证,否则会出现安全问题。
下面说下可能的安全问题:
假设有两个参与者A和B,PA,PBP_A,P_B分别是二者的公钥。
假设B不诚实,参与密钥聚合过程中,提供假的公钥PFB=PBPAP_{FB}=P_B-P_A, 导致聚合公钥:
P=PA+PFB=PA+PBPA=PBP=P_A+P_{FB}=P_A+P_B-P_A=P_B

这样就控制了聚合公钥成为自己的公钥,从而只用B自己的签名来覆盖A的签名,本来需要A,B共同签名的交易,现在只要B单独签名(伪造聚合签名)就可以了。
这种攻击可称为“密钥消除攻击”,亦属于“Rogue Key Attacks”。

简单的解决方案是在密钥聚合操作中,参与者提供公钥所有权证明,即签署任意消息,但这会增加交互过程,如果这个所有权证明也放到区块链上,增加存储大小。
成熟的解决方案类似BLS密钥聚合文中第二种方案。
结合Schnorr简记如下:

  1. 参与者公钥hash聚合 L=H(PA+PBL = H(P_A+P_B)
  2. 生成聚合公钥 P=H(L,PA)PA+H(L,PB)PBP =H(L,P_A)*P_A+H(L,P_B)*P_B
  3. 生成聚合随机数 R=RA+RBR =R_A+R_B
  4. 生成聚合签名
  5. (R, S)即最后得到的签名,验证如下:
    S * G = R + H(P, R, m) * P

易见,可以推广到多个参与者,如果恶意参与者采用上文所说的密钥消除攻击,本方案中就产生不了有效的签名。
接下来继续回到BLS系列

BLS m of n门限签名

BLS 使用了不同方法实现门限签名,以 2-3 多重签名为例说明(可扩展为任意的 m-n 多重签名)。

准备阶段:

用 i = 1,2,3 表示多签所有参与者集合,按照惯例,xix_i表示私钥,Pi=xi×GP_i=x_i \times G 表示公钥。计算聚合公钥:

现在,每个参与者本地对i签名,以证明该i是聚合公钥中的一员。
qiq_i为(P, i)哈希映射到曲线上的点,参与者i将签名聚合后得到:

MKi=(a1x1)qi+(a2x2)qi+(a3x3)qiMK_i=(a_1 * x_1) * q_i + (a_2 * x_2) * q_i+ (a_3 * x_3) * q_i

这个签名被称作“成员密钥”,每个成员密钥都是所有参与者对消息qiq_i的 n-n 多重签名,即:

e(G,MKi)=e(P,qi)e(G,MK_i)=e(P,q_i)

因为:

签名阶段:

假设只用私钥x1x_1x3x_3给交易签名,我们会生成 2 个签名S1S_1S3S_3

二者相加,聚合成单一的签名和公钥:
(S,P)=(S1+S3,P1+P3)(S’, P’) =(S_1 + S_3 , P_1 + P_3)

验证阶段:

为了验证 2-3多重签名,需证明如下等式成立:

e(G,S)=e(P,H(p,m))e(P,q1+q3)e(G, S’) =e(P',H(p,m)) * e(P,q_1 + q_3)

记(P, m)哈希映射到曲线上的点为, 结合成员密钥MK1MK_1MK3MK_3 是对消息 q1q_1q3q_3的签名,可得:

注:有的文章将qiq_i记为H(P, i)代表映射到曲线的点,个人认为不大恰当,H(P, i)很容易被理解成一个哈希结果的标量值,而不是有向的点,造成理解上的不便!

小结

本文主要参考:
https://bitcointechtalk.com/scaling-bitcoin-schnorr-signatures-abe3b5c275d1

最近几篇的思路大致为:BLS签名介绍 --> 密钥聚合 --> BLS门限签名 -->BLS基石(双线性函数)和配对

下一篇继续介绍双线性映射函数!

欢迎关注公众号:blocksight

相关阅读:

区块链中的数学-BLS密钥聚合 BLS密钥聚合

区块链中的数学 - BLS数字签名 BLS签名及验证

区块链中的数学 - 参与者 < 门限值t的密钥更新Amir Herzberg方案 Amir Herzberg改进方案

区块链中的数学 - Feldman的可验证的密钥分享 Feldman可验证密钥分享方案

区块链中的数学 - Ed25519签名 Ed25519签名

区块链中的数学-ElGamal算法 ElGamal算法签名及验证&实例演练

区块链中的数学-VRF基于ECC公钥体制的证明验证过程 基于椭圆曲线的VRF证明验证过程

Schorr签名与椭圆曲线 Schorr签名与椭圆曲线

区块链中的数学-Uniwap自动化做市商核心算法解析 Uniwap核心算法解析(中)

点赞 0
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论