本文介紹了BLS签名简要过程及其原理,综上可以看出BLS签名过程没有使用随机数,签名结果具有确定性(与RSA,EdDSA类似,不同于ECDSA,Schnorr等)。其构建在具有双线性映射的配对函数之上。
上一节讲了Amir Herzberg改进方案应对参与者小于门限值的情况。
本文开始讲一种新的签名机制:BLS数字签名,也能做签名聚合。
BLS字母代表Boneh–Lynn–Shacham,最初是由斯坦福大学教授Dan Boneh等人于2001年提出的一种签名方案,最新是在2018年,Boneh教授与IBM研究机构的Manu Drijvers等人更新了这种签名方案。
与以往介绍的签名方案不同的是,BLS采用了基于双线性映射的椭圆曲线配对技术,来实现签名验证与聚合。 关于什么是双线性映射,什么是椭圆曲线配对,会在以后章节中陆续介绍。
和其他一样,秘密选取随机数字作为私钥pk,计算公钥P = pk × G,待签名的消息m。
为什么可以这样验证?函数e是什么? 这里就用到了上面略过的曲线配对函数,简介如下: 有一个(或一种)特殊的函数记为e,它可以接受输入一条(或两条不同)曲线上两点P和Q,输出至一个数字,如下式:
e(P, Q) → n
之所以说这个函数特殊,是因为它有一些特殊性质。例如我们有一个数x和两点P和Q,无论哪一个点乘以这个数字,函数结果相同即: 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(P, q) = e(pk G, q) = e (pk G, q) = e (G, pk * q) = e (G, S)
有了单个签名,我们再来看下聚合签名。
区块链应用场景下,通常用于压缩区块内交易的签名大小,假设我们有一个包含10笔交易的区块,每笔交易i有自己的签名$S_i$、公钥$P_i$以及一个签名消息为$m_i$。
聚合签名是将区块中所有交易签名的打包成一个签名,同时验证所有交易的签名正确性(之前介绍过Schnorr聚合签名,于此类似)。 令最终签名结果为S, $S =S_1 +S2 + ... +S{10}$
要验证区块所有交易签名,需检查下式成立: $e(G, S) = e(P_1,q_1)e(P_2,q_2)...e(P{10},q{10})$ 推导如下: $e(G, S)=e(G,S_1 +S2 + ... +S{10})$ $=e(G, S_1)e(G, S_2)...e(G, S_{10})$ $=e(G,pk_1q1)...e(G,pk{10}q_{10})$ $=e(pk_1G,q1)...e(pk{10}G,q_{10})$ $=e(P_1,q_1)e(P_2,q2)...e(P{10},q_{10})$
这里依然使用了配对函数性质,仍需用到所有的公钥,并计算10次配对函数,交易量越多计算量越大,好处是,区块中的签名字节大大减少了。
本文介紹了BLS签名简要过程及其原理,综上可以看出BLS签名过程没有使用随机数,签名结果具有确定性(与RSA,EdDSA类似,不同于ECDSA,Schnorr等)。其构建在具有双线性映射的配对函数之上。
本着知其然知其所以然的原则,下一节将继续介绍BLS签名的基石--双线性映射的和配对函数!
欢迎关注公众号:blocksight
区块链中的数学 - 参与者 < 门限值t的密钥更新Amir Herzberg方案 Amir Herzberg改进方案
区块链中的数学 - Amir Herzberg动态密钥共享 Amir Herzberg动态密钥分享方案
区块链中的数学 - Feldman的可验证的密钥分享 Feldman可验证密钥分享方案
区块链中的数学 - Shamir密钥分享 Shamir原始的密钥分享方案
区块链中的数学 - 比特币使用的多签方式 比特币多签和Schnorr聚合签名
区块链中的数学 - 随机数和伪签名 随机数与伪签名构造
区块链中的数学 - EdDSA签名机制 EdDSA的发展及优点
区块链中的数学 - Ed25519签名 Ed25519签名
区块链中的数学-ElGamal算法 ElGamal算法签名及验证&实例演练
区块链中的数学-VRF基于ECC公钥体制的证明验证过程 基于椭圆曲线的VRF证明验证过程
Schorr签名与椭圆曲线 Schorr签名与椭圆曲线
区块链中的数学-Uniwap自动化做市商核心算法解析 Uniwap核心算法解析(中)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!