http://www.7klian.com

从 ECDSA 到 Schnorr 到 BLS,一部加密钱币签名算法进化史

为了花掉输出(output)地点中的钱,则需要提供 P’(公钥),S’(签名 )以及参加签名者的编号(这个例子中是 1 和 3)。解锁剧本如下:

= e((G*a1*pk1 + G*a2*pk2 + G*a3*pk3)\, H(P\, i))

剧本中有了这些信息,就足够用来验证生意业务了。个中,OP_1OP_3 汇报我们需要计较的曲线哈希为 H(P, 1)H(P, 3)

举个简朴的例子,我们要建设一个 2-3 多重签名,3 个签名存储在差异的设备上(这个例子可以扩展为任意的 m-n 多重签名)。

一切简朴而美妙!

S = a1×S1+a2×S2+a3×S3

ai = hash(Pi||P1||P2||P3)

MKi = (a1_pk1)_H(P, i) + (a2_pk2)_H(P, i) + (a3_pk3)_H(P, i)

一个聚合签名 S’

想要安详,更难!

配对函数十分巨大,利用不妥就会反受其累。一方面,我们但愿用高效的配对函数来加速签名验证,另一方面,我们又但愿密钥信息袒露越少越好。两者相互抵牾,我们需要异常小心地选择适宜配对的曲线。

BLS 利用了另一种要领,不外略巨大。我们需要一个普通哈希函数hash(x)(功效为一个数)和一个曲线哈希函数H(x)。开始多重签名时,还需要一个初始化程,这之后,签名者之间就不再需要通信了,只需提供生意业务签名即可。

我禁绝备表明这个函数是如何事情的。背后的数学道理相当巨大,假如你想知道所有 “令人厌烦”的细节,我发起你参考这篇文章。假如你还想深入,可以研读这篇论文,它通篇报告配对(pairings)理论。当前,我们只要假设这种函数存在,而且不会袒露 x 的任何相关信息。

BLS 签名验证,我们只需验证 公钥和动静的哈希值(曲线上两个点)与曲线生成点和签名(曲线上另两个点)是否映射到同一个数(若是则说明这是一个有效的 BLS 签名)

我们可以利用公钥 P 来验证签名,即 e(P, H(m)) = e(G, S) 。这是为什么呢?

BLS 签名算法的魔力

入正题前,我们先来相识两个基本观念,曲线哈希(hashingto the curve,或译作 “哈希成曲线上的点”)和曲线配对(curves pairing)。

_OP_CHECK_BLS_MULTISIG

这个签名被称作“成员密钥”,稍后签名时我们会用到。每个成员密钥都是对动静体H(P,i)的 n-n 多重签名,即:

e(P\, H(m)) = e(pk*G\, H(m)) = e(G\, pk*H(m)) = e(G\, S)

总结

BLS 签名算法很精彩——它能将区块中的签名聚合成单一签名; 能举办密钥聚合和 m-n 多重签名(无需特别通信);能制止利用随机数生成器。这些利益使它显得如此简朴优雅。虽然,它仍有改造空间,尺度化和优化也尚需时日。但我但愿有朝一日,它能变得足够好,可以被纳入比特币协议中。这样的话,我们不单能得到它精彩的成果,还可享受体积更小、聚合度更强的签名算法带来的长处。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!