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 的差别
| BLS | Schnorr / Ed25519 | |
|---|---|---|
| 聚合 | 任意签名直接相乘 | 需交互式 key aggregation(MuSig)或签名者公开聚合 |
| 验证 | 聚合后一次配对 | 每条签名逐一验证 |
| 数学 | 配对友好曲线 | 一般椭圆曲线 |
| 生态 | 以太坊质押、drand | 比特币 Taproot、Solana |
BLS 验证用配对,曲线族固定(BLS12-381),实现复杂度集中在 hash-to-curve 与 subgroup check;Ed25519 在单签名场景更简单,见 ED25519。