BLS 與 Schnorr 簽名算法:從數學原理到實際應用
BLS 與 Schn Schnorr 簽名算法:從數學原理到流程可視化解析
數字簽名是區塊鏈安全的核心基石,Schnorr 和 BLS 簽名算法憑借其獨特優勢,已成為區塊鏈領域的主流選擇。本文將通過精準的數學公式和流程圖示,深入解析兩種算法的工作機制,既保持密碼學的專業性,又通過可視化方式降低理解門檻。
一、密碼學基礎:橢圓曲線與群論
兩種算法均基于橢圓曲線密碼學(ECC),需先理解兩個核心概念:
- 橢圓曲線點運算:在橢圓曲線上,點的"加法"和"乘法"遵循特殊規則,具有封閉性(運算結果仍在曲線上)
- 生成元:曲線上的基準點 $G$,所有其他點可通過 $G$ 與整數相乘得到($k \cdot G$ 表示 $G$ 自身相加 $k$ 次)
二、Schnorr 簽名算法:簡潔高效的設計
1. 核心參數定義
- 橢圓曲線 E,生成元 G,階為 n
- 私鑰:隨機整數 k(1≤k≤n-1,需保密)
- 公鑰:P = k·G(橢圓曲線點,可公開)
2. 簽名生成流程(圖示)
┌─────────────┐ 隨機選擇 ┌─────────────┐
│ 消息 m │ ──────────────→ │ 臨時私鑰 r │
└─────────────┘ └──────┬──────┘
│
┌─────────────┐ ▼
│ 私鑰 k │ ←───────────── ┌─────────────┐
└──────┬──────┘ │ 臨時公鑰 R │
│ │ = r·G │
│ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ 哈希計算 ┌─────────────┐
│ 挑戰值 e │ ←─────────────→ │ 拼接 R||P||m │
│=Hash(R||P||m)│ └─────────────┘
└──────┬──────┘
│
▼
┌─────────────┐
│ 簽名 s │
│=r + e·k mod n│
└──────┬──────┘
│
▼
┌─────────────┐
│ 最終簽名 │
│ (R, s) │
└─────────────┘
數學公式拆解:
- 臨時公鑰 R = r * G(將臨時私鑰映射到曲線上)
- 挑戰值 e = {Hash}(R || P || m)(綁定消息、公鑰和臨時參數)
- 簽名值 s = (r + e * k) mod n(融合臨時參數與私鑰)
3. 簽名驗證流程(圖示)
┌─────────────┐ 接收 ┌─────────────┐
│ 消息 m │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
┌──────▼──────┐ 接收 ┌─────────────┐
│ 公鑰 P │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
┌──────▼──────┐ 接收 ┌─────────────┐
│ 簽名 (R,s) │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
├─────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 計算 e=Hash( │ │ 計算左邊: │
│ R||P||m) │ │ s·G │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 計算右邊: │ │ 驗證等式: │
│ R + e·P │ │ 左邊 == 右邊 │
└──────┬──────┘ └──────┬──────┘
│ │
└───────────────┘
│
┌──────▼──────┐
│ 簽名有效/無效 │
└─────────────┘
驗證者已知用戶公鑰 pk、消息 m 和簽名 (s, R),需驗證簽名是否合法。
- 重新計算挑戰值:e = H(R || m) mod q (與簽名生成時的計算完全一致)
- 驗證核心等式(等式成立則簽名合法):
- 橢圓曲線群:(s · g) + (e · pk) = R (“·”是點乘,“+”是橢圓曲線點加)
- 有限域群:(g^s · pk^e) mod p = R (“^”是冪乘,“·”是有限域乘法,結果模 p)
3. 關鍵推導
驗證等式的推導邏輯:
從簽名生成的 s = (k - e·sk) mod q,可變形為 k = (s + e·sk) mod q;
兩邊同時與生成元 g 運算(點乘或冪乘):
- 橢圓曲線群:k·g = (s + e·sk)·g = s·g + e·(sk·g) = s·g + e·pk;
- 而 k·g 就是臨時公鑰 R,因此得到驗證等式:s·g + e·pk = R。
4. 聚合簽名特性
Schnorr 支持同消息多簽名聚合:
多用戶對同一消息簽名時,可聚合成單個簽名:
- 各用戶簽名:(R?,s?)、(R?,s?)、...、(R?,s?)
- 聚合簽名:R = R?+R?+...+R?,s = s?+s?+...+s?
- 驗證:使用聚合公鑰 P = P?+P?+...+P?,按上述流程驗證
┌─────────┐ ┌─────────┐ ┌─────────┐
│用戶1簽名│ │用戶2簽名│ ... │用戶n簽名│
│(R1,s1) │ │(R2,s2) │ │(Rn,sn) │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
▼ ▼ ▼
┌───────────────────────────────────────┐
│ 聚合簽名 (R=ΣRi, s=Σsi) │
└───────────────────────────────────────┘
三、BLS 簽名算法:聚合能力的突破
1. 核心參數定義
- 雙線性映射系統(G?, G?, G?, e, p, G)
- G?、G?:加法循環群(階為 p)
- G?:乘法循環群(階為 p)
- e:雙線性映射函數 e: G?×G?→G?
- 私鑰:隨機整數 sk(1≤sk≤p-1,需保密)
- 公鑰:pk = sk·G(G 為 G? 生成元,可公開)
- 哈希函數:H(m) → G?(將消息映射到 G? 群)
2. 雙線性映射的關鍵特性
BLS 簽名的強大源于映射的三個特性:
- 雙線性:e(aP, bQ) = e(P, Q)^(a·b)
- 非退化性:存在 P、Q 使 e(P, Q) ≠ 1
- 可計算性:存在高效算法計算 e(P, Q)
G1 × G2 e() GT
▲ ▼ ▲
│ (乘法群) │
│ │
│ (aP, bQ) → e(P,Q)^(ab) │
│ │
└─────────────────────────────┘
3. 簽名生成流程(圖示)
┌─────────────┐ 哈希映射 ┌─────────────┐
│ 消息 m │ ─────────────→ │ 哈希點 h │
└─────────────┘ │ = H(m)∈G2 │
└──────┬──────┘
│
┌─────────────┐ ▼
│ 私鑰 sk │ ─────────────→ ┌─────────────┐
└─────────────┘ │ 簽名 σ │
│ = sk·h∈G2 │
└─────────────┘
4. 簽名驗證流程(圖示)
┌─────────────┐ 接收 ┌─────────────┐
│ 消息 m │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
▼
┌─────────────┐
│ 計算 h=H(m) │
└──────┬──────┘
│
┌──────▼──────┐ 接收 ┌─────────────┐
│ 公鑰 pk │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
┌──────▼──────┐ 接收 ┌─────────────┐
│ 簽名 σ │ ←─────────── │ 發送方 │
└──────┬──────┘ └─────────────┘
│
├─────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 計算 e(pk,h)│ │ 計算 e(G,σ) │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────────────────────┐
│ 驗證 e(pk,h) == e(G,σ) │
└───────────────┬─────────────┘
│
┌────────▼────────┐
│ 簽名有效/無效 │
└─────────────────┘
驗證原理:利用雙線性映射的特性
根據雙線性映射特性:
e(pk, h) = e(sk·G, h) = e(G, h)^sk
e(G, σ) = e(G, sk·h) = e(G, h)^sk
因此 e(pk, h) = e(G, σ) 是簽名有效的充要條件。
5. 跨消息聚合簽名(BLS 核心優勢)
支持不同用戶對不同消息的簽名聚合:
- 各用戶簽名:σ?=sk?·H(m?)、σ?=sk?·H(m?)、...、σ?=sk?·H(m?)
- 聚合簽名:σ_agg = σ?+σ?+...+σ?
- 驗證:e(pk?+pk?+...+pk?, H(m_i)) = e(G, σ_agg)
┌──────┐ m1 ┌──────┐ ┌──────┐ mn ┌──────┐
│用戶1 │────→ │σ1=sk1│ │用戶n │────→ │σn=skn│
└──────┘ │·H(m1)│ └──────┘ │·H(mn)│
└───┬──┘ └───┬──┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────┐
│ 聚合簽名 σagg = σ1 + σ2 + ... + σn │
└─────────────────────────────────────────────────────┘
四、算法對比與應用場景
| 特性 | Schnorr 簽名 | BLS 簽名 |
|---|---|---|
| 數學基礎 | 橢圓曲線離散對數問題 | 雙線性映射 |
| 簽名尺寸 | 64字節(R + s) | 32/64字節(單個群元素) |
| 驗證復雜度 | 低(橢圓曲線點運算) | 中(雙線性映射計算) |
| 聚合能力 | 僅支持同消息多簽名 | 支持跨消息、跨用戶聚合 |
| 典型應用 | 比特幣 Taproot、閃電網絡 | 以太坊 2.0 共識、分布式存儲驗證 |
| 核心優勢 | 驗證速度快,實現簡單 | 聚合效率極高,適合大規模簽名場景 |
五、總結
Schnorr 和 BLS 簽名算法是密碼學的兩大突破,各自在不同場景中發揮優勢:
- Schnorr 以簡潔高效取勝,適合單筆交易和同消息多簽,如支付場景
- BLS 憑借雙線性映射的魔力,在需要處理大量簽名的場景(如區塊鏈共識)中不可替代
本文來自博客園,作者:ffffox,轉載請注明原文鏈接:http://www.rzrgm.cn/ffffox/p/19010994

浙公網安備 33010602011771號