比特幣密碼學基礎

深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。

比特幣密碼學入門:搞清楚 SHA-256、橢圓曲線和數位簽名到底在搞什麼

你可能在網路上看過這種說法:「比特幣靠密碼學保護,所以很安全。」這話沒錯,但到底怎麼個安全法?SHA-256 是什麼?橢圓曲線又是啥?私鑰、公鑰、地址這三者之間到底是什麼關係?

這篇文章,我用大白話幫你把比特幣底層的密碼學原理摸清楚。不用懂高等數學,咱們就聊概念和邏輯。


密碼學在比特幣裡扮演什麼角色?

比特幣系統用密碼學來解決一個核心問題:如何在不信任任何人的情況下,確認一筆比特幣轉帳確實是你本人發起的

換句話說:

比特幣用三種主要的密碼學工具來實現這三個目標:

  1. SHA-256:用於創建區塊和交易的「指紋」
  2. RIPEMD-160:用於生成比特幣地址
  3. 橢圓曲線數位簽名算法(ECDSA):用於私鑰、公鑰和交易簽名

SHA-256:數位世界的指紋機

什麼是雜湊函數?

在聊 SHA-256 之前,先說說什麼是雜湊函數(Hash Function)。

雜湊函數就像一台神奇的碎紙機。你把任何東西——一頁紙、一本書、整個圖書館——扔進去,出來的都是一串固定長度的「粉末」。

這台碎紙機有以下特點:

  1. 確定性:同樣的輸入永遠產生同樣的輸出
  2. 單向性:你知道了輸出粉末,沒法倒推出原來的紙張長什麼樣
  3. 雪崩效應:輸入只要改一個字,輸出就面目全非
  4. 防碰撞:很難找到兩個不同的輸入能產生相同的輸出

SHA-256 是什麼?

SHA-256 是 SHA-2 家族的一員,全名是「Secure Hash Algorithm 256-bit」。這名字聽起來很技術,但概念很簡單:

輸入:任何長度的資料
輸出:256 位元的固定長度資料(64個十六進位字元)

無論你輸入的是「Hello」還是一部電影,輸出的長度都是固定的 256 位元。

比特幣區塊的 hash 就是這麼算出來的:

Block #850000 的 Header Hash:
00000000000000000005b3b4e0e7d8c9a1b2f3e4d5c6a7b8e9f0a1b2c3d4e5f6

這串字元就是這個區塊的「指紋」。如果有人改變了區塊內容哪怕一個位元組,重新計算的 hash 就完全不一樣了。

SHA-256 在比特幣中的應用

比特幣區塊鏈到處都在用 SHA-256:

  1. 區塊 hash:每個區塊頭的 hash 是通過兩次 SHA-256 計算得出的
  2. 交易 ID:每筆交易都有專屬的 TXID(Transaction ID),是交易的 hash
  3. Merkle 根:區塊中所有交易的指紋,用於快速驗證交易是否存在
  4. 工作量證明:礦工要不斷更換 nonce,重新計算區塊 hash,直到找到小於目標值的 hash

工作量證明就是利用了 SHA-256 的「沒有捷徑」特性——你只能一個數字一個數字去試,運氣好就能找到符合條件的 hash。


橢圓曲線密碼學:比特幣的基石

橢圓曲線是什麼?

當我第一次聽說比特幣用「橢圓曲線」做密碼學的時候,腦海中浮現的是那種畫函數圖表的拋物線。但比特幣用的不是普通的橢圓曲線,而是有限域上的橢圓曲線,數學上長這樣:

y² = x³ + ax + b (mod p)

這個公式看起來很抽象,但你可以這樣理解:

橢圓曲線有一個很神奇的特性:曲線上任意兩點相加,結果仍然在曲線上。而且這個性質可以推廣——你可以在曲線上定義「乘法」。

如果 G 是曲線上的一個定點(叫做「生成點」或「原點」),那麼:

K = k × G

的意思是:把 G 在曲線上「加」k 次。

這個運算有一個關鍵特性:給你 G 和 K,你可以輕鬆算出 k——但給你 K 和 G,你幾乎不可能算出 k

這就是離散對數問題(Discrete Logarithm Problem)的難解性,它是現代密碼學的基石。

比特幣用的 secp256k1

比特幣使用的橢圓曲線參數叫做 secp256k1,參數如下:

這些數字看起來很隨機,但實際上是由比特幣的開發者精心挑選的。secp256k1 的特點是:

  1. 計算效率高:比另一個常用曲線 secp256r1 更快
  2. 曲線參數經過特別選擇:避免了一些已知的弱點
  3. 安全性足夠:256 位元的密鑰長度提供了約 128 位元的安全強度

為什麼比特幣選擇 secp256k1?

這背後有個小故事。比特幣早期的開發者 Hal Finney 建議使用 NIST 推薦的曲線(如 secp256r1),但中本聰最終選擇了 secp256k1。

後來的事情證明了中本聰的直覺:2013 年,美國國家安全局(NSA)被指控在 secp256r1 中植入了可能有利於情報機構的參數。比特幣選擇的 secp256k1 完全避開了這個爭議。

當然,這可能只是巧合——中本聰後來也沒對此發表過評論。但無論如何,secp256k1 已經被證明是安全可靠的。


私鑰、公鑰、地址:密碼學三角關係

私鑰:一切的起點

私鑰(Private Key)是一個 256 位元的隨機數字。理論上,你可以用硬體隨機數生成器搖出一個數字,只要這個數字:

  1. 在 1 到 n-1 之間(n 是曲線的階)
  2. 是真正隨機的

私鑰長這樣(當然這是假的,別真的用):

K = 5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hXXMz9s5axv8d6f4c4x3G

實際上私鑰是 32 個位元組,通常用 Base58 或十六進位表示。

私鑰是你比特幣的全部所有權證明。丟了私鑰,你就丟了比特幣;洩露了私鑰,你的比特幣就等於送給了別人。

公鑰:私鑰的數學孿生

公鑰(Public Key)是由私鑰推導出來的:

K = k × G

其中 k 是私鑰,G 是 secp256k1 的生成點。

公鑰有兩種格式:

  1. 未壓縮格式(65 位元組):以 04 開頭,包含 x 和 y 座標
  2. 壓縮格式(33 位元組):以 0203 開頭,只包含 x 座標
未壓縮:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

壓縮:0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798

現代錢包幾乎都使用壓縮格式,因為儲存空間更小。

比特幣地址:公鑰的 Hash 版本

比特幣地址不是直接使用公鑰,而是公鑰的 hash 版本。這麼做有兩個原因:

  1. 長度縮短:地址比公鑰短很多,更方便使用
  2. 增加安全性:即使 ECDLP 被破解(從公鑰反推私鑰),攻擊者還是需要破解 SHA-256 和 RIPEMD-160 才能得到私鑰

從公鑰生成地址的過程:

1. 公鑰(壓縮或未壓縮)
         ↓
2. 第一次 SHA-256
         ↓
3. 第一次 RIPEMD-160(得到 Hash160)
         ↓
4. 版本前綴(如 0x00 給 P2PKH 地址)
         ↓
5. 第二次 SHA-256(校驗碼的前半部分)
         ↓
6. 第二次 SHA-256(完整校驗碼,取前4位元組)
         ↓
7. 拼接前綴 + Hash160 + 校驗碼
         ↓
8. Base58Check 編碼
         ↓
9. 比特幣地址(如 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)

地址格式與版本前綴

不同的地址前綴代表不同的地址類型:

地址類型前綴(十六進位)Base58 開頭範例
P2PKH (Legacy)0x0011BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
P2SH0x0533J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
P2WPKH (Native SegWit)0x06 (bech32)bc1qbc1qar0srrr7xfkvy5u643ltdnny5tgq0g8pgrruwx
P2TR (Taproot)0x0a (bech32m)bc1pbc1p5d7rqmv4gwl0l5cyg9pedqyjs4re5xq9l4lw

為什麼用 Base58Check 編碼?

比特幣地址使用 Base58Check 而不是普通的 Base64。這是因為 Base58 特意去掉了容易混淆的字元:

減少人為抄寫錯誤的風險。Bech32/Bech32m 格式更進一步,專門優化了 QR 碼的可讀性。


數位簽名:如何證明「這真的是我」

簽名的基本原理

想像這個場景:你寫了一張支票「付給小明 1 BTC」,然後在支票上籤了名。銀行收到支票,檢查你的簽名,然後把錢轉給小明。

比特幣的數位簽名原理類似:

  1. 對一筆轉帳交易進行簽名
  2. 礦工/節點驗證這個簽名是否有效
  3. 有效 → 交易被打包進區塊;無效 → 交易被拒絕

但比特幣的簽名不是傳統意義上的筆跡,而是一串密碼學數字

ECDSA 簽名算法

比特幣使用的簽名算法是 ECDSA(Elliptic Curve Digital Signature Algorithm)。簽名過程大概長這樣:

1. 你有一筆交易,包含:轉帳金額、接收地址、礦工費等
2. 錢包軟體計算交易的 hash(用 SHA-256)
3. 錢包使用你的私鑰,對這個 hash 進行簽名
4. 簽名結果 (r, s) 是兩個大整數
5. 錢包把簽名附加到交易上,廣播到網路

驗證簽名的過程則相反:

1. 節點收到交易和簽名
2. 節點用你的公鑰驗證簽名
3. 驗證通過 → 確認這筆交易確實是你發起的
4. 驗證失敗 → 拒絕這筆交易

橢圓曲線數學的魔力

為什麼這個過程是安全的?關鍵在於離散對數問題的難解性:

簽名的兩個重要特性

比特幣的 ECDSA 簽名有兩個重要特性:

  1. 可塑性(Malleability):簽名 (r, s) 和 (-r, -s mod n) 都能驗證通過。這在比特幣早期造成了一些問題,後來通過 BIP-62 解決了大部分。
  1. 確定性簽名:BIP-62 還引入了 RFC 6979 確定的隨機數生成,確保同一筆交易每次簽名的 r 值都相同,避免了一些潛在的安全漏洞。

簽名類型:從 ECDSA 到 Schnorr

傳統 ECDSA 簽名

比特幣自 2009 年上線以來,一直使用 ECDSA 簽名。這個算法是 NIST 標準,用了幾十年,已經被大量審計和分析。

但 ECDSA 有個缺點:它不支援簽名聚合(Signature Aggregation)

啥意思呢?假設有一筆多簽交易,需要 2-of-3 個人簽名。使用 ECDSA,你需要串列驗證每個簽名。但使用 Schnorr 簽名,你可以把所有簽名「加在一起」,一次驗證就完成。

Schnorr 簽名:BIP-340

比特幣在 2021 年的 Taproot 升級中引入了 Schnorr 簽名(BIP-340)。Schnorr 簽名的優點:

  1. 簽名聚合:多簽交易可以將多個簽名合併成一個
  2. 更好的隱私性:多簽交易在鏈上看起來和普通交易一樣
  3. 更快的驗證速度:多個簽名一次驗證,比多次驗證 ECDSA 快

Schnorr 簽名的格式比 ECDSA 更簡潔,數學證明也更嚴謹。

Taproot:聰明的升級

Taproot 升級(BIP-341)利用 Schnorr 簽名實現了一個巧妙的功能:

這意味著,無論你的比特幣支出條件多複雜,在區塊鏈上看起來都是一個普通的單簽交易。隱私性大幅提升。


常見的密碼學誤解

「比特幣能被量子電腦破解!」

這話不完全對,也不完全錯。

現有的比特幣安全依賴於兩個數學問題:

  1. ECDLP(橢圓曲線離散對數問題):用 Shor's 算法可以在多項式時間內被量子電腦破解
  2. SHA-256:Grover 算法可以提供平方根級別的加速,但量子電腦同樣難以破解

量子電腦確實能在理論上破解 ECDSA,但:

  1. 需要足夠強大的量子電腦:目前最強的量子電腦只有几百個 qubits,要破解比特幣需要數百萬 qubits
  2. 比特幣可以升級:BIP-360 提案正在討論比特幣的後量子遷移方案
  3. 比特幣採用者可以預防:把比特幣轉移到新地址可以避免量子威脅

簡單來說:量子威脅是個問題,但不是迫在眉睫的問題。

「比特幣的私鑰可以被窮舉破解!」

256 位元的私鑰空間是 2^256,約等於 10^77。

這個數字有多大?宇宙中的原子數量估計是 10^80。如果用地球上最快的超級電腦(假設每秒計算 10^18 次),要窮舉所有可能的私鑰,需要的時間比宇宙年齡還要長。

不可否認,SHA-256 和 ECDSA 在理論上都有被破解的可能性。但如果你在擔心比特幣被「暴力破解」,那更值得擔心的是明天被隕石砸到。


密碼學的局限性

比特幣的密碼學設計是安全的,但安全不僅僅是密碼學的問題。

密碼學之外的風險

  1. 私鑰洩露:如果你的電腦被植入木馬,密碼學保護等於零
  2. 社交工程:再強的密碼學也擋不住你自己把比特幣轉給騙子
  3. 交易所被駭:你的密碼學保護了你自己,但交易所的安全漏洞可能波及你
  4. 人為錯誤:不小心把比特幣轉到錯誤地址、丟失助記詞...

比特幣的安全是端到端的系統工程。密碼學只是其中一環,良好的安全習慣同樣重要。

「走後門」的風險

有時候,最危險的不是密碼學被破解,而是有人試圖在密碼學系統中加入「後門」。

比特幣的開源特性讓全世界的開發者可以審計程式碼。任何可疑的「後門」都很難躲過這麼多雙眼睛的審查。這也是比特幣社群堅持開源的重要原因之一。


延伸探索

推薦閱讀

  1. 《Mastering Bitcoin》 by Andreas Antonopoulos
  1. 《數字黃金》 by Nathaniel Popper
  1. Bitcoin Wiki: Technical Background of Bitcoin

實驗建議

如果你想實際操作看看:

  1. Bitcoin.org 的技術文件:https://bitcoin.org/en/developer-documentation
  2. Bitcoin Stack Exchange:https://bitcoin.stackexchange.com/
  3. Bitcoin Optech:https://bitcoinops.org/

時效性追蹤

本篇文章的最後更新時間:2026 年 3 月

比特幣的密碼學基礎在短期內不太可能發生重大變化,但以下發展值得關注:


結語

比特幣的密碼學設計體現了幾十年密碼學研究的精華:SHA-256 提供確定性的指紋、RIPEMD-160 縮短並保護地址、橢圓曲線密碼學實現了安全的密鑰對、ECDSA/Schnorr 簽名確保了交易的認證和不可否認性。

這些技術結合在一起,創造了一個在數學上幾乎不可能被破解的價值轉移系統。

當然,密碼學只是比特幣安全的一部分。用戶的安全意識、錢包軟體的品質、交易所的安全措施,這些都同樣重要。

記住:密碼學保護了你的私鑰,但保護不了你本人。保持警惕,學習安全實踐,才能真正守護好你的比特幣。


標籤:比特幣、密碼學、SHA-256、橢圓曲線、ECDSA、Schnorr、私鑰、公鑰、地址、數位簽名

難度:intermediate

發布日期:2026-03-31


本篇文章的最後更新日期:2026 年 3 月

⚠️ 比特幣技術持續演進中。本文旨在普及比特幣密碼學的基礎概念,不構成任何投資建議或技術保證。

本文包含

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

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

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