PiNetwork 挖矿算力系统开发

用户头像
Geek_a620db
关注
发布于: 2020 年 12 月 28 日
PiNetwork 挖矿算力系统开发

改进的密钥聚合的算法是如何防止伪签名的呢?本质上增加了公钥的可验证性详情咨询【苏先生I82可OO8O薇8II6 可掂】



写在前面

上一节简要概述了 BLS 签名机制,具体实现起来有很多细节,如哈希消息到曲线上的点。

本文原计划讲 BLS 依赖的基础知识部分,如双线性映射,但既然已经讲了签名,就先把签名相关的应用部分说完,才回头看其原理!

所谓“观其大略” 再究其细节!

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

BLS 密钥聚合

上一篇说了 BLS 实现签名聚合的情况,把涉及到的签名聚合在一起,但是公钥还必须使用所有公钥,没有聚合公钥部分。

根据前面多签的介绍,可以知道使用多重签名的地址,会对同一笔交易用不同的密钥进行签名。我们也介绍过 Schnorr 签名算法来聚合密钥,把所有公钥和签名聚合成单个公钥和签名。

接下来,以 3-3 多重签名方案为例来说明 BLS 聚合密钥过程。

一种简单的聚合方法,把所有的签名和公钥加起来。这样,签名聚合结果为 S=S1​+S2​+S3​ ,密钥聚合结果为 P=P1​+P2​+P3​。令 q 为消息 m 哈希映射到曲线上的点,是一个确定的值。可以验证以下等式成立:

e(G, S) = e(P, q)

验证如下:





符号同上文,利用配对函数 e 的性质。

抗密钥攻击聚合

上述的方案理论上可行,但实际上可能受到密钥攻击,例如伪造签名,如何防范呢?

一种方法是要求每个签名参与者证明它拥有公钥对应的私钥(用私钥给公钥签名或者随机指定消息签名)。

另一种方法是加入非线性系数,使得攻击难以实施。当然就不能使用上面提到的简单的将多个公钥和签名相加的方法,而是将它们分别乘以某个系数后再相加:

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

P=a1​×P1​+a2​×P2​+a3​×P3​

公式中签名和公钥的系数,可以通过签名者以及其它所有参与者的公钥计算得出,公式如下:

ai​=hash(Pi​,P1​,P2​,P3​)

最简单的做法是将签名者的公钥和所有参与者公钥拼接在一起:

ai​=hash(Pi​∣∣P1​∣∣P2​∣∣P3​)

此时,上面的验证公式依然成立。虽然多了系数 ai​,但计算逻辑未变。

具体代码实现可以多种,只要是可验证的,确定性的即可。

单就该方案的好处是,无需多轮通信,只需知晓其它签名者的信息即可。它可比 Schnorr 算法(需要 3 轮通信)的多重签名方案简单。且不依赖随机性,是一种具有完全确定性的签名算法。



用户头像

Geek_a620db

关注

app系统定制开发TV18200808116 2020.12.26 加入

还未添加个人简介

评论

发布
暂无评论
PiNetwork 挖矿算力系统开发