Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

BLS 签名与聚合

Boneh-Lynn-Shacham 签名:基于配对友好椭圆曲线的短签名,其核心性质是可聚合——任意条签名可压成一个签名、一次验证。共识用它把几千张投票聚合成常数大小的证书(QC、committee attestation)。Rust 侧常见实现:blst(以太坊标准)、bls12-381 系列。

结构

  • 双线性配对:\(e: G_1 \times G_2 \to G_T\),满足 \(e(aP, bQ) = e(P, Q)^{ab}\)。
  • 密钥:私钥 \(sk\)(有限域标量)、公钥 \(pk = sk \cdot g_2\)。
  • 签名:把消息哈希到 \(G_1\) 上 \(H(m)\),签名 \(\sigma = sk \cdot H(m)\)。

\[ e(\sigma, g_2) = e(H(m), pk) \]

成立即验签通过。安全性依赖 co-CDH(在一侧群上求离散对数困难);不抗量子计算。

聚合

对同一消息 \(m\),各签名 \(\sigma_i\) 可相乘:

\[ \sigma = \prod_i \sigma_i \]

验签变为:

\[ e(\sigma, g_2) = e(H(m), \prod_i pk_i) \]

一次配对验证全部签名,消息体只传一份。对不同消息聚合需 \(n+1\) 次配对,收益小得多——所以共识聚合都以“同一值“为单位(同一 QC、同一 target 的 attestation)。

Rogue-key 攻击:若密钥无需证明,攻击者可宣称一个抵消他人公钥的 \(pk\),使他人签名在自己聚合下“消失“。对策:注册公钥时附 proof of possession(对自身公钥的签名),并要求不同用途域分离(消息前缀区分签名目标)。

阈值签名

\(n\) 个分片各自对同一消息签名,凑够 \(f+1\) 或 \(2f+1\) 份即可合成一个完整签名,无需重建私钥。可用于:

  • QC:\(2f+1\) 张投票合成一张证书,见 HotStuff 的星型结构。
  • 随机 beacon:门限生成公开随机数,任何 \(t\) 个成员参与即出数,抵抗单点偏置。

阈值方案需要一个分布式密钥生成(DKG)阶段,谁参与、谁出私钥分片是信任前提。非门限的多签名聚合(MuSig 系)做链上 multisig,语义是“多个私钥同意“,与“签名压缩“不同。

在共识中的用途

场景聚合对象效果
Ethereum Gasper同 target 的 attestation数万验证者的投票压成一条签名,上链成本与委员会数量解耦
HotStuff QC\(2f+1\) 张投票证书常数大小,视图切换只传最高 QC
随机 beacon门限签名公开随机源,见 VRF 的对照

与 Schnorr / Ed25519 的差别

BLSSchnorr / Ed25519
聚合任意签名直接相乘需交互式 key aggregation(MuSig)或签名者公开聚合
验证聚合后一次配对每条签名逐一验证
数学配对友好曲线一般椭圆曲线
生态以太坊质押、drand比特币 Taproot、Solana

BLS 验证用配对,曲线族固定(BLS12-381),实现复杂度集中在 hash-to-curve 与 subgroup check;Ed25519 在单签名场景更简单,见 ED25519。