比特幣密碼學基礎
深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。
比特幣密碼學入門:搞清楚 SHA-256、橢圓曲線和數位簽名到底在搞什麼
你可能在網路上看過這種說法:「比特幣靠密碼學保護,所以很安全。」這話沒錯,但到底怎麼個安全法?SHA-256 是什麼?橢圓曲線又是啥?私鑰、公鑰、地址這三者之間到底是什麼關係?
這篇文章,我用大白話幫你把比特幣底層的密碼學原理摸清楚。不用懂高等數學,咱們就聊概念和邏輯。
密碼學在比特幣裡扮演什麼角色?
比特幣系統用密碼學來解決一個核心問題:如何在不信任任何人的情況下,確認一筆比特幣轉帳確實是你本人發起的。
換句話說:
- 認證:這筆轉帳真的是你發的,不是別人假冒的
- 完整性:轉帳金額和地址在傳輸過程中沒有被篡改
- 不可否認性:你發了轉帳就不能否認
比特幣用三種主要的密碼學工具來實現這三個目標:
- SHA-256:用於創建區塊和交易的「指紋」
- RIPEMD-160:用於生成比特幣地址
- 橢圓曲線數位簽名算法(ECDSA):用於私鑰、公鑰和交易簽名
SHA-256:數位世界的指紋機
什麼是雜湊函數?
在聊 SHA-256 之前,先說說什麼是雜湊函數(Hash Function)。
雜湊函數就像一台神奇的碎紙機。你把任何東西——一頁紙、一本書、整個圖書館——扔進去,出來的都是一串固定長度的「粉末」。
這台碎紙機有以下特點:
- 確定性:同樣的輸入永遠產生同樣的輸出
- 單向性:你知道了輸出粉末,沒法倒推出原來的紙張長什麼樣
- 雪崩效應:輸入只要改一個字,輸出就面目全非
- 防碰撞:很難找到兩個不同的輸入能產生相同的輸出
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:
- 區塊 hash:每個區塊頭的 hash 是通過兩次 SHA-256 計算得出的
- 交易 ID:每筆交易都有專屬的 TXID(Transaction ID),是交易的 hash
- Merkle 根:區塊中所有交易的指紋,用於快速驗證交易是否存在
- 工作量證明:礦工要不斷更換 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,參數如下:
- 曲線方程:y² = x³ + 7
- 生成點 G:(一個固定的座標點)
- 質數 p:
115792089237316195423570985008687907853269984665640564039457584007908834671663 - 階 n:
115792089237316195423570985008687907852837564279074904382605163141518161494337
這些數字看起來很隨機,但實際上是由比特幣的開發者精心挑選的。secp256k1 的特點是:
- 計算效率高:比另一個常用曲線 secp256r1 更快
- 曲線參數經過特別選擇:避免了一些已知的弱點
- 安全性足夠:256 位元的密鑰長度提供了約 128 位元的安全強度
為什麼比特幣選擇 secp256k1?
這背後有個小故事。比特幣早期的開發者 Hal Finney 建議使用 NIST 推薦的曲線(如 secp256r1),但中本聰最終選擇了 secp256k1。
後來的事情證明了中本聰的直覺:2013 年,美國國家安全局(NSA)被指控在 secp256r1 中植入了可能有利於情報機構的參數。比特幣選擇的 secp256k1 完全避開了這個爭議。
當然,這可能只是巧合——中本聰後來也沒對此發表過評論。但無論如何,secp256k1 已經被證明是安全可靠的。
私鑰、公鑰、地址:密碼學三角關係
私鑰:一切的起點
私鑰(Private Key)是一個 256 位元的隨機數字。理論上,你可以用硬體隨機數生成器搖出一個數字,只要這個數字:
- 在 1 到 n-1 之間(n 是曲線的階)
- 是真正隨機的
私鑰長這樣(當然這是假的,別真的用):
K = 5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hXXMz9s5axv8d6f4c4x3G
實際上私鑰是 32 個位元組,通常用 Base58 或十六進位表示。
私鑰是你比特幣的全部所有權證明。丟了私鑰,你就丟了比特幣;洩露了私鑰,你的比特幣就等於送給了別人。
公鑰:私鑰的數學孿生
公鑰(Public Key)是由私鑰推導出來的:
K = k × G
其中 k 是私鑰,G 是 secp256k1 的生成點。
公鑰有兩種格式:
- 未壓縮格式(65 位元組):以
04開頭,包含 x 和 y 座標 - 壓縮格式(33 位元組):以
02或03開頭,只包含 x 座標
未壓縮:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
壓縮:0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
現代錢包幾乎都使用壓縮格式,因為儲存空間更小。
比特幣地址:公鑰的 Hash 版本
比特幣地址不是直接使用公鑰,而是公鑰的 hash 版本。這麼做有兩個原因:
- 長度縮短:地址比公鑰短很多,更方便使用
- 增加安全性:即使 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) | 0x00 | 1 | 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 |
| P2SH | 0x05 | 3 | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy |
| P2WPKH (Native SegWit) | 0x06 (bech32) | bc1q | bc1qar0srrr7xfkvy5u643ltdnny5tgq0g8pgrruwx |
| P2TR (Taproot) | 0x0a (bech32m) | bc1p | bc1p5d7rqmv4gwl0l5cyg9pedqyjs4re5xq9l4lw |
為什麼用 Base58Check 編碼?
比特幣地址使用 Base58Check 而不是普通的 Base64。這是因為 Base58 特意去掉了容易混淆的字元:
- 數字 0、O
- 大寫字母 I、l
- 小寫字母 o
減少人為抄寫錯誤的風險。Bech32/Bech32m 格式更進一步,專門優化了 QR 碼的可讀性。
數位簽名:如何證明「這真的是我」
簽名的基本原理
想像這個場景:你寫了一張支票「付給小明 1 BTC」,然後在支票上籤了名。銀行收到支票,檢查你的簽名,然後把錢轉給小明。
比特幣的數位簽名原理類似:
- 你對一筆轉帳交易進行簽名
- 礦工/節點驗證這個簽名是否有效
- 有效 → 交易被打包進區塊;無效 → 交易被拒絕
但比特幣的簽名不是傳統意義上的筆跡,而是一串密碼學數字。
ECDSA 簽名算法
比特幣使用的簽名算法是 ECDSA(Elliptic Curve Digital Signature Algorithm)。簽名過程大概長這樣:
1. 你有一筆交易,包含:轉帳金額、接收地址、礦工費等
2. 錢包軟體計算交易的 hash(用 SHA-256)
3. 錢包使用你的私鑰,對這個 hash 進行簽名
4. 簽名結果 (r, s) 是兩個大整數
5. 錢包把簽名附加到交易上,廣播到網路
驗證簽名的過程則相反:
1. 節點收到交易和簽名
2. 節點用你的公鑰驗證簽名
3. 驗證通過 → 確認這筆交易確實是你發起的
4. 驗證失敗 → 拒絕這筆交易
橢圓曲線數學的魔力
為什麼這個過程是安全的?關鍵在於離散對數問題的難解性:
- 簽名過程:已知私鑰 k,可以輕鬆計算公鑰 K = k × G,然後生成簽名
- 驗證過程:已知公鑰 K 和簽名,可以驗證簽名是否由對應的私鑰生成
- 逆向破解:如果有人只知道公鑰 K 和簽名,想反推出私鑰 k——這就等於要解決離散對數問題,在現有計算能力下是不可能的
簽名的兩個重要特性
比特幣的 ECDSA 簽名有兩個重要特性:
- 可塑性(Malleability):簽名 (r, s) 和 (-r, -s mod n) 都能驗證通過。這在比特幣早期造成了一些問題,後來通過 BIP-62 解決了大部分。
- 確定性簽名: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 簽名的優點:
- 簽名聚合:多簽交易可以將多個簽名合併成一個
- 更好的隱私性:多簽交易在鏈上看起來和普通交易一樣
- 更快的驗證速度:多個簽名一次驗證,比多次驗證 ECDSA 快
Schnorr 簽名的格式比 ECDSA 更簡潔,數學證明也更嚴謹。
Taproot:聰明的升級
Taproot 升級(BIP-341)利用 Schnorr 簽名實現了一個巧妙的功能:
- 普通交易:使用 Schnorr 簽名
- 複雜交易(多簽、時間鎖、哈希鎖等):依然使用 Schnorr 簽名,但在鏈上顯示為「普通交易」
這意味著,無論你的比特幣支出條件多複雜,在區塊鏈上看起來都是一個普通的單簽交易。隱私性大幅提升。
常見的密碼學誤解
「比特幣能被量子電腦破解!」
這話不完全對,也不完全錯。
現有的比特幣安全依賴於兩個數學問題:
- ECDLP(橢圓曲線離散對數問題):用 Shor's 算法可以在多項式時間內被量子電腦破解
- SHA-256:Grover 算法可以提供平方根級別的加速,但量子電腦同樣難以破解
量子電腦確實能在理論上破解 ECDSA,但:
- 需要足夠強大的量子電腦:目前最強的量子電腦只有几百個 qubits,要破解比特幣需要數百萬 qubits
- 比特幣可以升級:BIP-360 提案正在討論比特幣的後量子遷移方案
- 比特幣採用者可以預防:把比特幣轉移到新地址可以避免量子威脅
簡單來說:量子威脅是個問題,但不是迫在眉睫的問題。
「比特幣的私鑰可以被窮舉破解!」
256 位元的私鑰空間是 2^256,約等於 10^77。
這個數字有多大?宇宙中的原子數量估計是 10^80。如果用地球上最快的超級電腦(假設每秒計算 10^18 次),要窮舉所有可能的私鑰,需要的時間比宇宙年齡還要長。
不可否認,SHA-256 和 ECDSA 在理論上都有被破解的可能性。但如果你在擔心比特幣被「暴力破解」,那更值得擔心的是明天被隕石砸到。
密碼學的局限性
比特幣的密碼學設計是安全的,但安全不僅僅是密碼學的問題。
密碼學之外的風險
- 私鑰洩露:如果你的電腦被植入木馬,密碼學保護等於零
- 社交工程:再強的密碼學也擋不住你自己把比特幣轉給騙子
- 交易所被駭:你的密碼學保護了你自己,但交易所的安全漏洞可能波及你
- 人為錯誤:不小心把比特幣轉到錯誤地址、丟失助記詞...
比特幣的安全是端到端的系統工程。密碼學只是其中一環,良好的安全習慣同樣重要。
「走後門」的風險
有時候,最危險的不是密碼學被破解,而是有人試圖在密碼學系統中加入「後門」。
比特幣的開源特性讓全世界的開發者可以審計程式碼。任何可疑的「後門」都很難躲過這麼多雙眼睛的審查。這也是比特幣社群堅持開源的重要原因之一。
延伸探索
推薦閱讀
- 《Mastering Bitcoin》 by Andreas Antonopoulos
- 比特幣技術的聖經,有中文版
- 《數字黃金》 by Nathaniel Popper
- 比特幣的歷史故事書
- Bitcoin Wiki: Technical Background of Bitcoin
- https://en.bitcoin.it/wiki/Technicalbackgroundofversion1Bitcoinaddresses
實驗建議
如果你想實際操作看看:
- Bitcoin.org 的技術文件:https://bitcoin.org/en/developer-documentation
- Bitcoin Stack Exchange:https://bitcoin.stackexchange.com/
- Bitcoin Optech:https://bitcoinops.org/
時效性追蹤
本篇文章的最後更新時間:2026 年 3 月
比特幣的密碼學基礎在短期內不太可能發生重大變化,但以下發展值得關注:
- BIP-360 後量子遷移提案:正在討論中的比特幣後量子密碼學標準
- Schnorr 簽名的更廣泛採用:Taproot 升級後,Schnorr 簽名的生態正在慢慢成熟
- 密碼學研究的進展:關注任何對 secp256k1 或 SHA-256 安全性的重大發現
結語
比特幣的密碼學設計體現了幾十年密碼學研究的精華:SHA-256 提供確定性的指紋、RIPEMD-160 縮短並保護地址、橢圓曲線密碼學實現了安全的密鑰對、ECDSA/Schnorr 簽名確保了交易的認證和不可否認性。
這些技術結合在一起,創造了一個在數學上幾乎不可能被破解的價值轉移系統。
當然,密碼學只是比特幣安全的一部分。用戶的安全意識、錢包軟體的品質、交易所的安全措施,這些都同樣重要。
記住:密碼學保護了你的私鑰,但保護不了你本人。保持警惕,學習安全實踐,才能真正守護好你的比特幣。
標籤:比特幣、密碼學、SHA-256、橢圓曲線、ECDSA、Schnorr、私鑰、公鑰、地址、數位簽名
難度:intermediate
發布日期:2026-03-31
本篇文章的最後更新日期:2026 年 3 月
⚠️ 比特幣技術持續演進中。本文旨在普及比特幣密碼學的基礎概念,不構成任何投資建議或技術保證。
本文包含
- 比特幣 ECDLP 安全性與後量子密碼學遷移:形式化分析、量子攻擊模型與 BIP-360 混合簽名實作
- 比特幣密碼學深度解析:從基礎到後量子時代的完整指南
- 比特幣密碼學基礎:橢圓曲線密碼學、ECDSA 與 Schnorr 簽章完全指南
- 比特幣橢圓曲線離散對數問題的形式化證明與安全性分析
- 比特幣密碼學安全性的形式化驗證方法論:從數學基礎到工程實踐的完整框架
- 比特幣密碼學基礎與安全性分析:從數學原理到實際應用的完整推導
- 比特幣密碼學原語數學推導與形式化驗證:從橢圓曲線群運算到 Schnorr 簽名密鑰聚合
- 比特幣密碼學數學原理:secp256k1、ECDSA、SHA-256 與 RIPEMD-160 的形式化分析
- 比特幣密碼學原始論文深度分析:SHA-256 與 RIPEMD-160 的數學推導、安全性證明與比特幣應用
- 比特幣密碼學原始論文與 NIST、Diffie-Hellman 深度分析:從密碼學理論到 secp256k1 的數學基石
- 比特幣密碼學基礎假設的形式化驗證與學術觀點對照:從 SHA-256 到後量子遷移的完整安全性分析
- 比特幣密碼學原語完整數學推導:secp256k1 群運算、Schnorr 簽名密鑰聚合與安全性歸約
- 比特幣密碼學可驗證數學細節手冊:secp256k1離散對數、ECDSA完整推導與共識協議形式化分析
- ECDSA 橢圓曲線數位簽章密碼學完整指南
- 比特幣密碼學深度專題:ECDSA 與 Schnorr 簽名的數學證明強度比較與安全性分析
- 比特幣 Schnorr 簽名密鑰聚合的完整數學推導:從理論到 BIP-340 實現
- 比特幣 secp256k1 橢圓曲線密碼學完整數學推導:從群論基礎到簽名驗證
- SHA-256 密碼學雜湊函數深度解析:比特幣的加密基石
- 比特幣密碼學實戰:secp256k1、ECDSA 與 Schnorr 簽名的完整數學推導與程式實作
- 比特幣密碼學設計哲學與歷史脈絡:從密碼學革命到中本聰的艱難抉擇
- 比特幣密碼學的深度批判性審視:secp256k1、ECDSA 與後量子時代的挑戰
- 比特幣數位簽章實驗室:從 ECDSA 到簽名驗證的完整旅程
- 比特幣密碼學與中本聰共識機制的原始設計哲學:從密碼學原理到經濟激勵的深度探索
- SHA-256 碰撞攻擊形式化證明與密碼學安全性分析:從生日攻擊到微分密碼學的深度推導
- 橢圓曲線密碼學高級數學推導:secp256k1 的代數結構與安全性證明
- 走進 secp256k1 的數學世界:從橢圓曲線到 ECDSA 簽名的完整推導
- 比特幣密碼學完整數學推導手冊:從群論到橢圓曲線的嚴格證明
- secp256k1 橢圓曲線密碼學:比特幣的數學心臟深度解析
相關文章
- ECDSA 橢圓曲線數位簽章密碼學完整指南 — 深入分析 ECDSA 簽章的數學基礎、演算法實現與安全特性,包括 secp256k1 曲線參數、簽章生成與驗證過程、nonce 安全問題,以及在比特幣交易中的實際應用。
- 比特幣數位簽章實驗室:從 ECDSA 到簽名驗證的完整旅程 — 深入理解比特幣數位簽章的底層原理,從 ECDSA 演算法、交易 hash 計算、DER 編碼格式到簽名驗證流程。使用 Python 實作完整簽名流程,並探討 Schnorr 簽名和 Taproot 的革命性改進。適合想理解比特幣密碼學實作細節的讀者。
- 比特幣密碼學基礎:橢圓曲線密碼學、ECDSA 與 Schnorr 簽章完全指南 — 全面介紹比特幣使用的密碼學技術,包括 secp256k1 橢圓曲線、ECDSA 簽章算法、Schnorr 簽章,以及 Taproot 升級對比特幣簽章系統的影響。
- SHA-256 密碼學雜湊函數深度解析:比特幣的加密基石 — 深入剖析 SHA-256 的數學原理與實現機制,包括完整的運算步驟、邏輯函數的密碼學意義、以及在比特幣工作量證明、Merkle 樹建構、交易 ID 計算中的實際應用。提供完整的 Python 實現程式碼與安全性分析。
- 比特幣密碼學深度解析:從基礎到後量子時代的完整指南 — 深入解析比特幣密碼學原理,包括 SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA、Schnorr 簽章、零知識證明以及後量子密碼學遷移議題。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!