比特幣密碼學基礎:橢圓曲線密碼學、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):將曲線上兩點相加得到第三點

標量乘法(k × P):將點 P 與自身相加 k 次

這些運算滿足:

橢圓曲線離散對數問題

橢圓曲線密碼學的安全性基於橢圓曲線離散對數問題(Elliptic Curve Discrete Logarithm Problem, ECDLP):

已知點 P 和 Q = k × P,求解 k

對於 secp256k1 曲線,目前沒有已知的有效算法可以在合理時間內解決這個問題。這使得 ECC 在現有計算能力下是安全的。

secp256k1 曲線參數

比特幣使用的 secp256k1 曲線有明確定義的參數:

參數
方程y² = x³ + 7
質數 p2^256 - 2^32 - 977
階 n115792089237316195423570985008687907852837564279074904382605163141518161494337
基點 G(79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)

公鑰與私鑰

私鑰生成

比特幣私鑰是一個 256 位的隨機數。有效的私鑰必須滿足:

  1. 在 [1, n-1] 範圍內(n 是曲線的階)
  2. 不是 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)。簽章生成過程:

  1. 選擇隨機 nonce k
  2. 計算 (x₁, y₁) = k × G
  3. r = x₁ mod n(如果 r = 0,選擇新的 k)
  4. s = k⁻¹ (hash + r × dₐ) mod n(如果 s = 0,選擇新的 k)

其中:

簽章驗證

給定簽章 (r, s) 和公鑰 Q,驗證過程:

  1. 計算 u₁ = hash × s⁻¹ mod n
  2. 計算 u₂ = r × s⁻¹ mod n
  3. 計算 (x₁, y₁) = u₁ × G + u₂ × Q
  4. 驗證 r ≡ x₁ mod n

比特幣中的 ECDSA

比特幣在以下場景使用 ECDSA:

每筆比特幣交易都需要使用私鑰對交易數據進行 ECDSA 簽名,以證明資金的所有權。

簽章安全性考量

Nonce 重用:如果同一私鑰的兩個不同消息使用了相同的 nonce k,攻擊者可以通過以下公式計算私鑰:

dₐ = (s₁ - s₂)⁻¹ (z₁ - z₂ + r(d₁ - d₂)) mod n

比特幣歷史上因 nonce 重用導致私鑰洩露的案例:

固定 nonce 攻擊:如果使用固定的 nonce,簽章等同於暴露私鑰。

Schnorr 簽章

Schnorr 簽章概述

Schnorr 簽章是一種數位簽章方案,由 Claus Schnorr 於 1989 年提出。與 ECDSA 相比,Schnorr 簽章具有以下優勢:

比特幣在 2021 年的 Taproot 升級中採用了 Schnorr 簽章(BIP-340)。

Schnorr 簽章生成

對於消息 m 和私鑰 dₐ,Schnorr 簽章生成:

  1. 選擇隨機 nonce k
  2. 計算 R = k × G
  3. 計算 e = Hash(R || m)
  4. 計算 s = k + e × dₐ (mod n)

簽章 = (R, s)

Schnorr 簽章驗證

驗證過程:

  1. 計算 e = Hash(R || m)
  2. 計算 s × G = R + e × Q
  3. 驗證等式是否成立

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 簽章標準:

BIP-341:Taproot

BIP-341 定義了 Taproot 升級的核心內容:

BIP-342:Tapscript

BIP-342 更新了比特幣腳本語言以支持 Schnorr 簽章:

密碼學安全的實際考量

量子計算威脅

未來量子計算機的發展可能威脅比特幣的密碼學基礎:

對 ECDSA 的威脅:量子計算機可以在多項式時間內解決橢圓曲線離散對數問題。這意味著量子計算機可以從公鑰計算出私鑰。

對 SHA-256 的威脅:量子計算機可以運行 Grover 算法,將 SHA-256 的破解時間從 2^256 降低到 2^128。

比特幣的後量子遷移

比特幣社區正在考慮後量子密碼學遷移方案:

BIP-360:提議使用 Lamport 簽名作為過渡方案。Lamport 簽名對量子計算安全,但簽名較大(數KB)。

SPHINCS+:另一種後量子簽名方案,簽名更大但安全性更高。

延遲遷移:比特幣的升級機制允許在必要時遷移到新的簽名方案。

當前安全建議

在量子計算威脅成為實際問題之前,以下措施可以提高比特幣安全性:

  1. 避免地址重用:每次交易使用新地址
  2. 使用 Taproot 地址:最新的地址類型提供最佳安全性
  3. 離線存儲:將大量比特幣存儲在離線設備上

常見問題

Q1:比特幣私鑰有多安全?

256 位元的私鑰空間意味著有 2^256 個可能的私鑰。這個數字遠大於宇宙中的原子數量(估計約 10^80 ≈ 2^266)。即使使用世界上所有計算資源,也無法在可接受的時間內暴力破解。

Q2:如果丟失私鑰會怎樣?

比特幣的私鑰是資金的完全控制權。如果丟失私鑰且沒有備份,對應的比特幣將永遠無法使用。比特幣網路沒有「忘記密碼」功能,這是其去中心化設計的一部分。

Q3:ECDSA 和 Schnorr 簽章哪個更安全?

兩者都基於橢圓曲線離散對數問題,理論安全性相當。Schnorr 簽章在數學上更簡單,且有可證明安全性證明,這使其在某些方面更受青睞。

Q4:為什麼比特幣選擇 secp256k1 曲線?

secp256k1 有以下特點:

結論

比特幣的密碼學基礎是其安全性的核心。從 secp256k1 橢圓曲線到 ECDSA,再到最新的 Schnorr 簽章,比特幣的密碼學技術在不斷演進。

理解這些密碼學概念不僅有助於評估比特幣的安全性,也對於開發比特幣應用、管理比特幣資產至關重要。隨著量子計算的發展,比特幣的密碼學基礎將繼續演進,以應對未來的安全挑戰。


更新日期:2026-03-04

版本:1.0

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!