什麼是公鑰?
公鑰(全稱「公開金鑰」)是一段可以公開的數位資訊,與必須保密的私密金鑰(簡稱私鑰)配對使用。錢包用私鑰生成簽章後,區塊鏈網路可以用公鑰檢查簽章是否有效,而不需要知道私鑰。
這個定義比「公鑰能證明某人是誰」更準確。簽章驗證成功,只能說明某份簽章對於特定資料和特定金鑰有效。要把金鑰與現實中的個人、機構或預期交易聯繫起來,還需要簽章演算法以外的資訊。使用私鑰生成簽章和使用公鑰驗證簽章,是兩個不同的過程。
公鑰如何由私鑰生成
錢包先生成私鑰,再透過約定的數學運算計算出公鑰。這個方向容易計算,但在密碼學假設成立時,別人不能僅憑公鑰倒推出私鑰。
具體數學關係取決於簽章方案。在橢圓曲線系統中,私鑰是允許範圍內的一個數,公鑰則是根據該數和約定參數計算出的曲線點。橢圓曲線密碼學標準 SEC 1 將這種關係寫作 Q = dG:d 是私鑰,G 是曲線基點。任意一串位元組不會自動成為有效公鑰,因此系統還需要檢查它是否符合曲線規則。
這個計算過程被設計為從私鑰得到公鑰較為可行;在密碼方案假設成立、私鑰正確生成的前提下,從公鑰復原私鑰在計算上不可行。不過,實際保障仍取決於金鑰生成、參數、實作和金鑰管理是否正確;「採用公鑰密碼學」本身不能保證每個錢包或設備都實作無誤。
同一公鑰也可能有不同編碼形式。例如,Bitcoin 橢圓曲線公鑰有壓縮與未壓縮編碼。兩種編碼的位元組不同,由這些位元組派生的地址也可能不同,但它們可以表示同一個曲線點和簽章權限。
簽章驗證能夠說明什麼
簽章驗證成功,說明這份簽章與特定資料和公鑰相符;它不能單獨證明簽署者的現實身分,也不能證明這筆操作安全或合理。簡化後的驗證流程包括四步:
- 錢包軟體按照網路規則準備需要授權的資料。
- 簽章演算法使用私鑰和這些資料生成簽章。
- 驗證者使用對應演算法,對已簽署資料、簽章和公鑰進行檢查。
- 網路另行檢查交易格式、花費條件、餘額或用於排序和防止重複執行的交易序號等其他規則。
已簽署資料發生變化時,原簽章通常無法再通過驗證。但有效簽章並不能說明操作對使用者有利、介面完整展示了指令,或金鑰控制者理解了現實後果。它是網路授權的一項輸入,不是對身分或可信度的通用證明。
公鑰、區塊鏈地址和帳戶的區別
公鑰用於驗證簽章,地址用於讓網路識別收款目標或帳戶,帳戶則包含餘額、交易序號、程式碼等網路狀態。三者有關聯,但不是同一個東西:
- 公鑰:用於驗證簽章或執行其他公鑰密碼學操作的材料。
- 區塊鏈地址:按特定網路規則派生、編碼或部署得到的識別碼。
- 帳戶:與地址關聯的網路狀態或授權安排。
以太坊外部帳戶(EOA)會先用 Keccak-256 演算法為公鑰計算一段固定長度的資料摘要,再取摘要的最後 20 位元組作為地址;合約地址則按其他規則生成,而且合約帳戶沒有自己的私鑰。負責確認共識訊息的以太坊驗證者還使用另一套數位簽章金鑰,通常稱為 BLS 金鑰,它與 EOA 金鑰對用途不同。由此可見,不能把每個以太坊地址都視作公鑰,也不能假設每個地址都與一對金鑰一一對應。
Bitcoin 又體現了另一種差異:常見地址類型編碼的是花費腳本資訊或某種雜湊承諾,而不是直接把原始公鑰作為地址。相關輸出被花費時,公鑰才可能公開。因此,地址如何建構、公鑰何時暴露,取決於具體網路和輸出類型,並不存在適用於所有區塊鏈的單一規則。
普通公鑰與擴展公鑰不是一回事
普通公鑰只對應一對金鑰,擴展公鑰則可以繼續推導出一組後代公鑰,因此洩漏後的隱私影響更大。比特幣改進提案 BIP-32規定的擴展公鑰把公鑰、鏈碼和派生資訊組合在一起,無需私鑰就能沿非強化分支派生後代公鑰。這可用於只收款或觀察用途,但也意味著獲得擴展公鑰的一方可以看到一組相關公鑰。
擴展公鑰不能派生強化子金鑰,也不能因為它無法簽署就簡單稱為「沒有風險」。BIP-32 還說明了一種更嚴重的組合洩漏:如果擴展公鑰和相應的某個非強化後代私鑰同時洩漏,該分支內的祖先和同級私鑰也可能被推導出來。這是特定派生方案的性質,不適用於每一把普通公鑰。
公鑰公開後的隱私邊界
公鑰本來就可以公開,公開普通公鑰通常不會直接暴露私鑰;但這不等於沒有隱私影響。重複使用金鑰或地址、公開擴展公鑰,或在交易活動中把多個地址聯繫起來,都可能讓原本分開的活動更容易被關聯。
公鑰通常也不會隱藏區塊鏈交易內容。公鑰密碼學還包含加密和金鑰協商方案,但簽章金鑰在交易授權中的作用是驗證簽章。某個網路是否加密資料,是另一個協議問題。
常見問題
同一公鑰能對應不同地址嗎?
有可能,具體取決於網路和地址格式。不同編碼或腳本可以生成與同一金鑰相關的不同地址表示。應用應遵循具體網路規則,不能假定「一把公鑰只能有一個地址」。
只有公鑰能花費加密資產嗎?
通常不能。公鑰用於驗證;金鑰控制型花費還需要有效簽章,或滿足網路規定的其他花費條件。合約帳戶和多重簽章安排也可能使用無法歸結為單一公鑰的授權規則。
相關詞條
如需進一步比較兩類金鑰,可閱讀私鑰與公鑰有什麼區別?。
繼續了解私鑰、區塊鏈地址、助記詞和加密貨幣錢包,或返回加密貨幣術語表。
參考來源
- NIST FIPS 186-5:數位簽章標準——簽章生成、驗證及簽章方案。
- NIST SP 800-57 Part 1 Rev. 5——公私鑰類型及金鑰管理邊界。
- SEC 1 Version 2.0——橢圓曲線金鑰對生成、公鑰驗證和簽章操作。
- Ethereum:帳戶——外部帳戶金鑰、地址派生、合約帳戶和驗證者金鑰。
- BIP-32——普通、強化及擴展公鑰派生。
- Bitcoin Developer Guide:錢包——金鑰編碼、地址關係和分層確定性錢包。



