比特幣密碼學基礎:橢圓曲線密碼學、ECDSA 與 Schnorr 簽章完全指南
全面介紹比特幣使用的密碼學技術,包括 secp256k1 橢圓曲線、ECDSA 簽章算法、Schnorr 簽章,以及 Taproot 升級對比特幣簽章系統的影響。
比特幣密碼學基礎:橢圓曲線密碼學、橢圓曲線數位簽章算法與 Schnorr 簽章完全指南
比特幣的安全性建立在現代密碼學的基礎之上。理解比特幣使用的密碼學技術對於評估比特幣的安全性、隱私性和未來發展方向至關重要。本文深入分析比特幣使用的橢圓曲線密碼學(ECC)、橢圓曲線數位簽章算法(ECDSA)以及最新的 Schnorr 簽章技術。
密碼學基礎概念
對稱加密與非對稱加密
密碼學可以分為兩大類:對稱加密和非對稱加密。
對稱加密:使用同一把密鑰進行加密和解密。優點是速度快,缺點是密鑰分發困難。
非對稱加密:使用一對密鑰——公鑰和私鑰。用公鑰加密的內容只能用對應的私鑰解密,反之亦然。優點是密鑰分發方便,缺點是計算速度較慢。
比特幣主要使用非對稱加密技術,特別是橢圓曲線密碼學。
哈希函數
哈希函數是比特幣的另一個密碼學基石。比特幣使用兩種哈希函數:
SHA-256:安全哈希算法 256 位元。比特幣用於工作量證明、地址生成和數據完整性驗證。
RIPEMD-160:160 位元哈希函數。比特幣地址使用 RIPEMD-160(SHA-256(公鑰)) 生成,以縮短地址長度。
哈希函數的特性:
- 確定性:相同輸入總是產生相同輸出
- 單向性:無法從輸出反推輸入
- 抗碰撞性:極難找到兩個不同的輸入產生相同輸出
- 雪崩效應:輸入微小變化導致輸出巨大變化
橢圓曲線密碼學
橢圓曲線數學基礎
橢圓曲線密碼學(Elliptic Curve Cryptography, ECC)是一種基於橢圓曲線數學的公鑰密碼學系統。與傳統的 RSA 相比,ECC 在相同安全強度下使用更短的密鑰。
比特幣使用的橢圓曲線是 secp256k1,其方程為:
y² = x³ + 7 (mod p)
其中 p = 2^256 - 2^32 - 977,是一個 256 位的質數。
橢圓曲線上的運算
在橢圓曲線上可以定義兩種運算:
點加法(P + Q):將曲線上兩點相加得到第三點
- 如果 P 和 Q 不同,連接兩點的直線與曲線交於第三點,該點關於 x 軸的對稱點即為 P + Q
- 如果 P = Q,則計算切線
標量乘法(k × P):將點 P 與自身相加 k 次
這些運算滿足:
- 封閉性:結果仍在曲線上
- 結合律:(P + Q) + R = P + (Q + R)
- 交換律:P + Q = Q + P
- 單位元:P + O = P(O 是無窮遠點)
- 逆元:對於每個 P,存在 -P 使得 P + (-P) = O
橢圓曲線離散對數問題
橢圓曲線密碼學的安全性基於橢圓曲線離散對數問題(Elliptic Curve Discrete Logarithm Problem, ECDLP):
已知點 P 和 Q = k × P,求解 k
對於 secp256k1 曲線,目前沒有已知的有效算法可以在合理時間內解決這個問題。這使得 ECC 在現有計算能力下是安全的。
secp256k1 曲線參數
比特幣使用的 secp256k1 曲線有明確定義的參數:
| 參數 | 值 |
|---|---|
| 方程 | y² = x³ + 7 |
| 質數 p | 2^256 - 2^32 - 977 |
| 階 n | 115792089237316195423570985008687907852837564279074904382605163141518161494337 |
| 基點 G | (79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8) |
公鑰與私鑰
私鑰生成
比特幣私鑰是一個 256 位的隨機數。有效的私鑰必須滿足:
- 在 [1, n-1] 範圍內(n 是曲線的階)
- 不是 0
私鑰生成的理想方法是使用密碼學安全的隨機數生成器(CSPRNG)。以下是私鑰的簡化表示:
私鑰示例(十六進制):
8F9A4B7C5D6E3F2A1B8C9D0E1F2A3B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0
公鑰生成
比特幣公鑰由私鑰通過橢圓曲線標量乘法生成:
公鑰 = 私鑰 × G
其中 G 是 secp256k1 的基點。這個運算單向進行——可以從私鑰計算公鑰,但無法從公鑰反推私鑰。
公鑰有兩種表示方式:
未壓縮格式:以 0x04 開頭,後跟 x 座標和 y 座標,總共 65 位元組
壓縮格式:以 0x02(y 為偶數)或 0x03(y 為奇數)開頭,後跟 x 座標,總共 33 位元組
未壓公鑰示例:
04 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
壓縮公鑰示例(y 為偶數):
02 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
橢圓曲線數位簽章算法(ECDSA)
簽章生成
ECDSA 簽章由兩個值組成:(r, s)。簽章生成過程:
- 選擇隨機 nonce k
- 計算 (x₁, y₁) = k × G
- r = x₁ mod n(如果 r = 0,選擇新的 k)
- s = k⁻¹ (hash + r × dₐ) mod n(如果 s = 0,選擇新的 k)
其中:
- dₐ 是私鑰
- hash 是待簽名消息的哈希
- k⁻¹ 是 k 在模 n 下的乘法逆元
簽章驗證
給定簽章 (r, s) 和公鑰 Q,驗證過程:
- 計算 u₁ = hash × s⁻¹ mod n
- 計算 u₂ = r × s⁻¹ mod n
- 計算 (x₁, y₁) = u₁ × G + u₂ × Q
- 驗證 r ≡ x₁ mod n
比特幣中的 ECDSA
比特幣在以下場景使用 ECDSA:
- 傳統交易簽名(P2PKH、P2SH)
- 隔離見證之前的地址類型
每筆比特幣交易都需要使用私鑰對交易數據進行 ECDSA 簽名,以證明資金的所有權。
簽章安全性考量
Nonce 重用:如果同一私鑰的兩個不同消息使用了相同的 nonce k,攻擊者可以通過以下公式計算私鑰:
dₐ = (s₁ - s₂)⁻¹ (z₁ - z₂ + r(d₁ - d₂)) mod n
比特幣歷史上因 nonce 重用導致私鑰洩露的案例:
- 2010 年,BitcoinTalk 用戶使用相同 nonce 導致私鑰被計算出
- 2013 年,某些安卓錢包實現的隨機數生成器漏洞
固定 nonce 攻擊:如果使用固定的 nonce,簽章等同於暴露私鑰。
Schnorr 簽章
Schnorr 簽章概述
Schnorr 簽章是一種數位簽章方案,由 Claus Schnorr 於 1989 年提出。與 ECDSA 相比,Schnorr 簽章具有以下優勢:
- 更簡單的數學結構
- 可證明安全性
- 支持密鑰聚合
- 更小的簽章大小
比特幣在 2021 年的 Taproot 升級中採用了 Schnorr 簽章(BIP-340)。
Schnorr 簽章生成
對於消息 m 和私鑰 dₐ,Schnorr 簽章生成:
- 選擇隨機 nonce k
- 計算 R = k × G
- 計算 e = Hash(R || m)
- 計算 s = k + e × dₐ (mod n)
簽章 = (R, s)
Schnorr 簽章驗證
驗證過程:
- 計算 e = Hash(R || m)
- 計算 s × G = R + e × Q
- 驗證等式是否成立
Schnorr 簽章的優勢
密鑰聚合:多個簽名人可以將其公鑰聚合為單一公鑰,簽名也聚合為單一簽名。這使得 n-of-n 的多簽交易看起來與普通單簽交易無異。
聚合前:
- 簽名人 1:私鑰 d₁,公鑰 Q₁ = d₁ × G,簽名 (R₁, s₁)
- 簽名人 2:私鑰 d₂,公鑰 Q₂ = d₂ × G,簽名 (R₂, s₂)
聚合後:
- 聚合公鑰 Q = Q₁ + Q₂
- 聚合簽名 (R, s) 其中 R = R₁ + R₂, s = s₁ + s₂
簽章大小:ECDSA 簽名長度為 71-73 位元組,Schnorr 簽名固定為 64 位元組。
批量驗證:多個 Schnorr 簽名可以一次性驗證,比逐個驗證更高效。
Taproot 與比特幣簽章升級
BIP-340:Schnorr 簽章
BIP-340 定義了比特幣使用的 Schnorr 簽章標準:
- 僅支持壓縮公鑰(32 位元組)
- 簽名長度 64 位元組
- 定義了新的簽名算法
BIP-341:Taproot
BIP-341 定義了 Taproot 升級的核心內容:
- 引入 Pay-to-Taproot(P2TR)地址類型
- 使用 Schnorr 簽章
- 支持 MAST(Merkelized Abstract Syntax Tree)
BIP-342:Tapscript
BIP-342 更新了比特幣腳本語言以支持 Schnorr 簽章:
- 引入 OP_CHECKSIGADD 操作碼
- 改進多簽簽名驗證效率
密碼學安全的實際考量
量子計算威脅
未來量子計算機的發展可能威脅比特幣的密碼學基礎:
對 ECDSA 的威脅:量子計算機可以在多項式時間內解決橢圓曲線離散對數問題。這意味著量子計算機可以從公鑰計算出私鑰。
對 SHA-256 的威脅:量子計算機可以運行 Grover 算法,將 SHA-256 的破解時間從 2^256 降低到 2^128。
比特幣的後量子遷移
比特幣社區正在考慮後量子密碼學遷移方案:
BIP-360:提議使用 Lamport 簽名作為過渡方案。Lamport 簽名對量子計算安全,但簽名較大(數KB)。
SPHINCS+:另一種後量子簽名方案,簽名更大但安全性更高。
延遲遷移:比特幣的升級機制允許在必要時遷移到新的簽名方案。
當前安全建議
在量子計算威脅成為實際問題之前,以下措施可以提高比特幣安全性:
- 避免地址重用:每次交易使用新地址
- 使用 Taproot 地址:最新的地址類型提供最佳安全性
- 離線存儲:將大量比特幣存儲在離線設備上
常見問題
Q1:比特幣私鑰有多安全?
256 位元的私鑰空間意味著有 2^256 個可能的私鑰。這個數字遠大於宇宙中的原子數量(估計約 10^80 ≈ 2^266)。即使使用世界上所有計算資源,也無法在可接受的時間內暴力破解。
Q2:如果丟失私鑰會怎樣?
比特幣的私鑰是資金的完全控制權。如果丟失私鑰且沒有備份,對應的比特幣將永遠無法使用。比特幣網路沒有「忘記密碼」功能,這是其去中心化設計的一部分。
Q3:ECDSA 和 Schnorr 簽章哪個更安全?
兩者都基於橢圓曲線離散對數問題,理論安全性相當。Schnorr 簽章在數學上更簡單,且有可證明安全性證明,這使其在某些方面更受青睞。
Q4:為什麼比特幣選擇 secp256k1 曲線?
secp256k1 有以下特點:
- 參數選擇簡單,降低了曲線構造被動手腳的可能性
- 在各種計算環境下效率高
- 已通過密碼學社區的廣泛審查
結論
比特幣的密碼學基礎是其安全性的核心。從 secp256k1 橢圓曲線到 ECDSA,再到最新的 Schnorr 簽章,比特幣的密碼學技術在不斷演進。
理解這些密碼學概念不僅有助於評估比特幣的安全性,也對於開發比特幣應用、管理比特幣資產至關重要。隨著量子計算的發展,比特幣的密碼學基礎將繼續演進,以應對未來的安全挑戰。
更新日期:2026-03-04
版本:1.0
相關文章
- 比特幣密碼學基礎 — 深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。
- Taproot 隱私保護完整教學 — 深入解析 Taproot 如何增強比特幣隱私,包括 MAST、Schnorr 簽名聚合、P2TR 地址類型與實戰應用。
- Taproot 全面解析 — 比特幣最新的腳本升級:MAST、BIP-340/341/342。
- MuSig2 多人簽名 — 理解 Schnorr 密鑰聚合與多簽名方案。
- Taproot 與閃電網路隱私機制深度分析 — 深入分析Taproot升級如何提升比特幣交易隱私,以及P2TR通道、PTLC、盲化路由等技術在閃電網路中的應用。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!