• 签名算法


    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多签有丰富的应用。

  • 相关阅读:
    从头带你撸一个Springboot Starter
    Spring Cache 带你飞(二)
    2021年终总结
    数据中台(介绍篇)
    NetCore实现全局模型绑定异常信息统一处理
    [源码解析] PyTorch 分布式之弹性训练(2)启动&单节点流程
    [源码解析] PyTorch 分布式(18) 使用 RPC 的分布式管道并行
    [源码解析] PyTorch 分布式之弹性训练(1) 总体思路
    [源码解析] PyTorch 分布式之弹性训练(3)代理
    [源码解析] PyTorch 分布式之弹性训练(5)Rendezvous 引擎
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313648.html
Copyright © 2020-2023  润新知