比特幣 xpub 外洩,別人能直接花你的錢嗎?

比特幣 xpub 外洩,別人能直接花你的錢嗎?的文章封面插畫

有人把硬體裝置匯出的延伸公開金鑰(extended public key,常以 xpub 統稱)交給手機監看工具,畫面便能像一般錢包一樣持續顯示新地址、收款紀錄和總餘額。手機明明沒有私鑰,掌握的資訊卻遠超過一個收款地址。

不過,名稱裡的「公鑰」容易讓人把 xpub 當成可以任意公開的資料;它能看見整片資產,又容易讓人誤以為已經等同支出權。這兩種直覺都忽略了延伸金鑰把「推導公開資訊」與「產生有效簽章」分開的設計。

因此,xpub 單獨外洩通常不足以讓旁人直接動用資產,卻可能把一整組往來與餘額交給對方長期觀察。它沒有一般支出能力,仍是一份會暴露隱私的敏感監看資料。

一串 xpub 能代表一整個公開分支

現代階層式確定性錢包會把大量鑰匙整理成一棵樹。每個延伸金鑰除了包含一把金鑰,還帶有稱為鏈碼(chain code)的資料;兩者配合索引,便能沿著固定路徑算出下一層子金鑰。

延伸私密金鑰常寫成 xprv,可以推導後代私鑰與公鑰。對應的 xpub 則移除簽署所需的祕密,保留推導非強化(non-hardened)後代公鑰的能力。連網工具因此可以持續產生新的收款地址,不必把離線端的支出祕密帶到網路上。

這份能力有範圍。匯出帳戶層的 xpub,通常只涵蓋那個帳戶下可公開推導的分支,未必等於整個錢包的所有帳戶與用途;收款分支、找零分支、地址類型和推導路徑也要對得上。知道一串 xpub 很強大,仍不能只靠字首判斷它涵蓋哪一整套錢包結構。

能查看與能簽署是兩條權限線

持有合適 xpub 的監看端可以產生候選地址,再比對公開帳本,找出相關交易與 UTXO,也就是尚未花費的交易輸出。它也能整理餘額、準備未簽署交易,或把收款資訊交給付款人。

可是,從延伸公鑰反推出對應私鑰,在現行密碼學假設下並不具實務可行性。真正支出時,仍要由保存 xprv 或其他簽署祕密的一側產生有效簽章。這就是監看錢包與離線簽署裝置能分工的基礎:連網端負責觀察和組裝資料,控制端負責授權。

分工沒有讓連網端自動可信。遭入侵的監看工具雖然缺少簽署能力,仍可能顯示攻擊者替換過的收款地址,或在組裝未簽署交易時改掉收款對象與金額。離線端是否能讓人獨立核對即將簽署的內容,仍是另一道安全邊界。

外洩最先打穿的通常是隱私

單一地址像一個公開收款座標;帳戶 xpub 則可能讓持有人持續算出同一分支的新地址。旁人若取得正確路徑與地址類型,便能掃描鏈上紀錄,把原本看似分散的收款、找零、餘額與支出時間串成較完整的輪廓。

這不會自動揭露真人姓名。可是,xpub 若曾交給帶有帳號資料的錢包服務、交易平台、會計系統或其他已知對象,鏈上輪廓便可能和現實身分接上。之後即使每次收款都換新地址,那些地址仍可由同一份公開推導資料重新聚在一起。

暴露程度也取決於交出去的是哪一層。只分享某個收款分支,和分享能涵蓋整個帳戶多個分支的資料,觀察範圍並不相同。格式或路徑不相容也可能讓匯入工具漏掉部分紀錄;畫面顯示零餘額,無法證明那串 xpub 沒有其他可被追蹤的歷史。

還有一個不直覺的組合風險

BIP32 的一般公開推導有一項重要限制:若某人同時拿到父層 xpub,以及它底下任一把非強化子私鑰,便可能反推出父層延伸私密金鑰,進而取得該分支其他後代的支出能力。

普通交易簽章不等於子私鑰,日常花費也不會自然交出這份原始祕密。風險通常要等到不當匯出、軟體漏洞或備份外洩讓子私鑰真的落入同一方手上,才會和 xpub 組合起來。強化推導的用途之一,正是切斷這種從父公開資料向上回推的路徑。

這個例外沒有推翻「xpub 單獨不能簽署」的基本邊界,卻說明它比一把普通公鑰更值得謹慎處理。它代表整個子樹,還帶著參與推導的鏈碼;和其他局部祕密碰在一起時,後果可能跨越原本預期的範圍。

所以,判斷 xpub 外洩時需要分成兩層:單獨暴露通常先造成錢包結構與交易歷史可被監看;若又伴隨特定非強化子私鑰外洩,才可能升高為直接控制風險。把「公開金鑰」理解成密碼學上的公開材料,同時把「整個帳戶的監看能力」視為敏感資訊,才能準確看見它方便分工的價值與現實代價。