EIP-4337中针对批量交易的签名使用到了这个方案

椭圆曲线配对

我们定义椭圆曲线配对函数

$$ e:G_1 \times G_2 \to G_T $$

$G_1$ 和 $G_2$ 在这里是加法群, $G_T$ 在这里是乘法群,这里对初学者可能比较抽象,可以简单理解为这其实是一个有两个参数的函数,参数1输入到$G_1$,参数2输入到$G_2$,最终返回一个在$G_T$里面的元素

其中有如下特性

$$ e(P,Q+R)=e(P,Q) * e(P,R) $$ $$ e(P+S,R) = e(P,R) * e(S,R) $$ $$ P, S \in G_1 , Q ,R \in G_2 $$

可以得到以下的推导,其中$[a]$、 $[b]$ 是标量,可以理解成算数上的整数概念

$$ e([a]P,[b]Q)=e(P,[b]Q)^a=e(P,Q)^{ab} = e(P,[a]Q)^b = e([b]P,[a]Q) $$

$sk$: 私钥:secret key

$pk$: 公钥: publick key

我们得到从产生私钥到生成对应的公钥的过程如下

$$ pk = [sk]g_1 , g_1 \in G_1 $$

在密码学理论上我们即使得到 $pk$, $g_1$的值也很难获取到$[sk]$,这类问题叫做 离散对数问题(discrete logarithm problem)这个特性非常重要,一定要能直观上去理解

签名过程

我们的消息 $m$ 为任意长度的数据,我们需要将 $m$ 映射到群 $G_2$ 上,这个可以理解成一个哈希后得到 $H(m)$, 那我们将得到对应的签名结果

$$ \sigma=[sk]H(m) $$

这里有个分布要留意一下,$pk$ 是被分布在了 $G_1$ 里面, $\sigma$ 被分布在 $G_2$ 里面,这顺序其实是可以互换的,只是 $G_1$ 里面的点数量少,计算快,存储量也少,$G_2$ 里面点数据多,存储多,计算也慢,要根据应用场景来做tradeoff

签名验证

$$ e(pk,H(m))=e([sk]g_1,H(m))=e(g_1,H(m))^{(sk)}=e(g_1,[sk]H(m))=e(g_1,\sigma) $$

消息验证者只要验证如下两边是否相等即可:

$$ e(g_1,\sigma)=e(pk,H(m)) $$

聚合验证过程,消息相同的场景

$$ \sigma_{agg}=\sigma_1+\sigma_2+…+\sigma_n $$ $$ pk_{agg}=pk_1+pk_2+…+pk_n $$

这里就是BLS聚合的特性所在了,$\sigma_{agg}$ 和 $pk_{agg}$ 由于加法群的封闭性,他们依然是分别属于 $G_2$ 、 $G_1$ 里面,这就导致即使多个签名累加,多个公钥累加,得到的数据长度依然是固定的

这样,消息验证者只要验证如下方程的相等即可

$$ e(g_1,\sigma_{agg}) $$ $$ = e(g_1,\sigma_1+\sigma_2+…+\sigma_n) $$ $$ = e(g_1,[sk_1+sk_2+…+sk_n]H(m)) $$ $$ = e(g_1, H(m))^{[sk_1+sk_2+…+sk_n]} $$ $$ = e([sk_1+sk_2+…+sk_n]g_1,H(m)) =\ e(pk_{agg},H(m)) $$

4337批量Tx聚合的场景

$$ e(g_1,\sigma_{agg}) $$ $$ = e(g_1,\sigma_1+\sigma_2+…+\sigma_n) $$ $$ = e(g_1,[sk_1]H(m_1)+[sk_2]H(m_1)+…+[sk_n]H(m_n)) $$ $$ = e(g_1,[sk_1]H(m_1)) * e(g_1,[sk_2]H(m_1)) * … * e(g_1,[sk_n]H(m_n)) $$ $$ = e(g_1,H(m_1))^{[sk_1]} * e(g_1,H(m_1))^{[sk_2]} * … * e(g_1,H(m_n))^{[sk_n]} $$ $$ = e([sk_1]g_1,H(m_1)) * e([sk_2]g_1,H(m_1)) * … * e([sk_n]g_1,H(m_n)) $$ $$ = e(pk_1,H(m_1)) * e(pk_2,H(m_1)) * … * e(pk_n,H(m_n))$$

在4337的场景下,针对多个交易,在验证的时候,要算出每笔交易的哈希值,获取对应地址的公钥,以及聚合后的签名,利用上述的公式进行验证

BLS签名在区块链生态中的应用场景

  • 以太坊一开始的POS的设计,只能支持几百个validator,P2P之间节点信息认证需要传送大量的验证消息,导致开销很大,BLS大大节省了验证签名数据的传输空间, 叫做**BLS-12-318**
  • EIP-4337中,针对多笔合并交易后的签名压缩优化的使用

参考