BLS 签名与聚合签名方案
探索 BLS12-381 配对和签名聚合,并了解 Ethereum 2.0 如何使用 BLS 降低验证者开销。
BLS 签名与聚合签名方案 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
双线性配对:数学基础
BLS 签名依赖双线性配对,即椭圆曲线上的一种数学运算。配对 e: G1 x G2 -> GT 会将来自两个群(G1、G2)的点对映射到目标群 GT。其关键性质是双线性:对于标量 a、b 以及点 P、Q,有 e(aP, bQ) = e(P, Q)^(ab)。这使得人们无需知道离散对数,就能检查群元素之间的关系。密码学中最常用的配对曲线是 BLS12-381,它因具备 128 位安全级别、较小的群元素尺寸(G1 中为 48 字节,G2 中为 96 字节)以及高效的配对计算而被选用。
BLS 签名构造
BLS(Boneh-Lynn-Shacham)签名的工作方式如下。密钥生成:私钥 x 是一个随机标量;公钥 PK = x * G,其中 G 是 G2 生成元。签名:给定消息 m,在 G1 中计算 H = hash-to-curve(m),然后计算 sigma = x * H。签名 sigma 是一个单独的 G1 点(在 BLS12-381 上为 48 字节)。验证:检查 e(sigma, G) == e(H, PK)。根据双线性,e(x*H, G) = e(H, G)^x = e(H, x*G) = e(H, PK)。其安全性依赖于 co-CDH 假设:在已知 H 和 x*G、但不知道 x 的情况下,计算 x*H 是困难的。
签名聚合:关键创新
BLS 签名支持非交互式聚合:给定来自公钥 PK_1、...、PK_n 的消息 m_1、...、m_n 上的签名 sigma_1、...、sigma_n,聚合者可以计算 sigma_agg = sigma_1 + sigma_2 + ... + sigma_n(椭圆曲线点加法)。无论 n 为多少,聚合签名都是一个 48 字节的值。验证需要进行 n+1 次配对运算:检查 e(sigma_agg, G) == product(e(H_i, PK_i))。在所有签名者都对同一消息签名这一常见情况下,验证可简化为 2 次配对:e(sigma_agg, G) == e(H, sum(PK_i))。
恶意密钥攻击与防御
朴素的 BLS 聚合容易受到恶意密钥攻击。对手注册 PK_adv = x_adv*G - PK_honest。聚合密钥 PK_agg = PK_honest + PK_adv = x_adv*G,因此完全受对手控制。防御方案包括:(1)持有证明(PoP):每个签名者在注册时通过为自己的公钥签名,证明其知道对应的私钥。(2)消息增强:将每个签名者的公钥包含在其消息中。(3)去线性化(BGLS):在聚合之前,将每个公钥乘以 hash(PK_i, all_PKs),从而破坏能够实现该攻击的线性关系。Ethereum 使用 PoP 进行验证者注册。
Ethereum 2.0 中的 BLS 用法
Ethereum 的共识层(信标链)广泛使用 BLS12-381 聚合。每个时隙约有 400,000 名以上的活跃验证者对链头进行证明。如果不进行聚合,每个时隙存储所有签名将需要约 400,000 * 96 bytes = 38 MB。使用 BLS 按委员会聚合后(每个委员会通常包含 512 个验证者),每个委员会只需生成一个 96 字节的聚合签名,使每个时隙的签名数据总量降至数千字节。信标链区块体包含聚合证明:一个用于指示哪些验证者参与其中的位字段,以及每个委员会对应的一个聚合 BLS 签名。
BLS 与 ECDSA 的性能
BLS 签名操作与 ECDSA 具有不同的性能特征。BLS 签名需要进行一次哈希到曲线和一次标量乘法(在现代硬件上约为 1 ms)。BLS 验证需要进行两次配对运算(每次约 3-5 ms,总计约 6-10 ms)。ECDSA 签名需要进行一次点乘(约 0.2 ms);验证需要进行两次点乘(约 0.4 ms)。BLS 的单个签名验证速度较慢,但聚合后会快得多:验证聚合后的 1000 个 BLS 签名总共约需 10 ms,而验证 1000 个独立的 ECDSA 签名约需 400 ms。临界点大约在 2-3 个签名。
门限 BLS 签名
门限 BLS 将聚合扩展到秘密共享。在 (t, n) 门限方案中,使用 Shamir 秘密共享在 BLS 标量域上将私钥拆分为 n 份。每个持有者 i 生成部分签名 sigma_i = sk_i * H(m)。任意 t 个部分签名都可以使用拉格朗日插值系数组合:sigma = sum(lambda_i * sigma_i)。所得签名与原始密钥生成的签名完全相同,但任何单个参与方都不会持有完整密钥。门限 BLS 用于分布式验证者技术(DVT)、MPC 钱包以及 Fireblocks 和 Web3Auth 等门限签名服务。
Filecoin 网络中的 BLS
Filecoin 使用 BLS 签名处理存储证明系统和交易签名。存储矿工使用 BLS 聚合多个证明,从而降低链上验证成本。Filecoin 的消息池还会将多个交易签名聚合为一个聚合签名,从而减小区块大小。Filecoin 的实现使用 IETF BLS 草案标准(根据 RFC 9380 进行哈希到曲线,使用 BLS12-381 曲线)以及 minimum-pubkey-size 变体,其中公钥位于 G1(48 字节),签名位于 G2(96 字节),这与 Ethereum 的约定相反。
Zcash 与隐私协议中的 BLS
虽然 Zcash 主要使用 Groth16 zk-SNARK 证明,但 BLS 配对是许多基于配对的零知识构造的基础。Groth16 的验证方程是配对检查:e(A, B) = e(alpha, beta) * e(vk, C),其中 A、B、C 是证明元素。KZG 多项式承诺(用于 Ethereum 的 EIP-4844 数据块交易以及各种 ZK 汇总系统)同样依赖 BLS12-381 配对:对多项式 f(x) 的承诺为 C = f(tau)*G,而求值证明通过配对进行验证。BLS12-381 专门因其高效的配对运算和 128 位安全性而被选用。
BLS 之外的可聚合签名
BLS 并不是唯一的可聚合签名方案。Schnorr 签名支持密钥聚合(MuSig2 在 Bitcoin Taproot 中使用了这一机制),多个签名者可以生成一个与单个签名者生成的签名无法区分的 Schnorr 签名。FROST(灵活、轮次优化的 Schnorr 门限)可以在两轮中提供门限 Schnorr 签名。不过,与 BLS 的非交互式聚合不同,Schnorr 聚合要求签名者之间进行交互,因此不太适合大型验证者集合。由于具备非交互式聚合和高效批量验证的特性,BLS 仍然是区块链共识的首选。
BLS 的后量子展望
BLS 签名基于椭圆曲线配对,而运行 Shor 算法的量子计算机能够破解这种机制。具备足够能力的量子计算机可以计算 BLS12-381 中的离散对数,从而破解所有现有 BLS 签名,并破坏以太坊的共识安全性。时间表尚不确定,但 NIST 估计,具有密码学实际威胁的量子计算机可能在 15 至 20 年内出现。以太坊及其他依赖 BLS 的链需要在这一威胁成为现实之前迁移到后量子签名方案(CRYSTALS-Dilithium/ML-DSA 或 SPHINCS+/SLH-DSA)。迁移需要对验证者注册、证明格式和聚合验证进行协议层面的修改。
BLS 聚合测验
以太坊共识层中的 BLS 签名聚合,其主要优势是什么?
BLS 签名回顾
BLS 签名使用 BLS12-381 曲线上的双线性配对。按照以太坊的约定,签名是 48 字节的 G1 点,公钥是 96 字节的 G2 点。非交互式聚合可以将 n 个签名合并为一个 48 字节的值,并通过 n+1 次配对完成验证。验证者注册期间使用持有证明来缓解流氓密钥攻击。以太坊使用 BLS 将每个时隙中 400,000 多个验证者的证明压缩为数千字节。阈值 BLS 支持在没有单一密钥持有者的情况下运行分布式验证者。BLS 基于配对,并不具备后量子安全性,因此未来需要进行迁移。
常见问题解答
「BLS 签名与聚合签名方案」课时是免费的吗?
是的 — 「BLS 签名与聚合签名方案」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「BLS 签名与聚合签名方案」这节课中我会学到什么?
探索 BLS12-381 配对和签名聚合,并了解 Ethereum 2.0 如何使用 BLS 降低验证者开销。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「BLS 签名与聚合签名方案」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 权益证明的密码学机制
- BFT 协议:PBFT 与 Tendermint
- 共识中的可验证随机函数
- BLS 签名与聚合签名方案