常見問題解答
軟體錢包使用隨機數字來生成主私鑰。
然後,透過確定性且不可逆的演算法,它可以從該主私鑰衍生出無限數量的子私鑰。
為什麼我們需要確定性且不可逆的演算法?
因為確定性意味著所有子私鑰總是可以從同一個主私鑰生成,而不可逆意味著主私鑰不能從任何子私鑰重構。
這就是為什麼它被稱為分層確定性(HD)皮夾。 私鑰的衍生結構類似一棵樹:一個父金鑰可以衍生出多個子金鑰,每個子金鑰可以衍生出多個孫金鑰,而這個過程可以無限期地繼續下去。
首次創建 HD 錢包或備份錢包時,會生成助記詞。 助記詞由一組英文單字依序組成。此序列會用於生成種子,再由種子生成錢包中的所有私鑰。也就是說,助記詞就是錢包備份,可用於恢復錢包;而種子則對應確定性錢包背後的原始隨機數。
HD 皮夾的一大優點,就是只需要主公鑰就能生成任意數量的子公鑰。也就是說,可以從主公鑰建立新的公開位址,而無需存取主私鑰或子私鑰。不過,這些產生的位址最終仍由主私鑰控制。
當然,這種設計也存在風險。如果助記詞被暴露,本質上就等於暴露了所有私鑰。一旦發生這種情況,錢包中的數位資產的安全性實際上就會喪失。
為什麼需要這麼多私鑰?
用戶為什麼需要這麼多私鑰,可以透過比特幣交易中的找零機制來理解。
比特幣交易是一種包含輸入和輸出的資料結構,同時也包含將價值從來源(輸入)轉移到目的地址(輸出)所需的腳本資訊。
要理解比特幣的輸入和輸出,首先要了解 UTXO(未花費的交易輸出)。 UTXO 是比特幣交易的基本單位,代表尚未被花費的交易產出。單一比特幣實際上可能以 UTXO 的形式分佈在多筆交易和多個區塊中。比特幣並沒有存在一份集中記錄的簡單帳戶餘額;相反,鏈上只有分散的 UTXO,並由各自所有者控制。
UTXO 可以代表任何數量的價值,但一旦創建,它就不可分割,就像實體硬幣不能分成兩半一樣。如果 UTXO 的價值大於交易所需的金額,則仍然必須花費整個 UTXO,超出的部分將作為找零返還。
例如,假設您有一個價值 20 個單位的 UTXO,並且想要支付 1 個單位。該交易必須消耗完整的 20 單位 UTXO,並創建兩個輸出:一個輸出將 1 個單位發送給接收者,另一個輸出將 19 個單位作為找零發送回您的錢包。因此,大多數比特幣交易都會產生找零。
這就引出了另一個問題:找零應該要寄回原位址,還是要寄到新產生的位址?
當中本聰設計比特幣時,引入了找零地址機制:通常會建立一個新地址來接收每筆交易的找零。這樣做有助於保護用戶隱私,並降低部分安全風險。
在現實生活中,這類似於在不同銀行以不同名稱和身分開設多個銀行帳戶。即使有人可以觀察每個帳戶中的資金流動,他們也很難將所有資金追溯到數位資產的真正所有者。這是比特幣相對匿名性的部分原因。
這就是為什麼錢包用戶需要大量私鑰的原因。由於公鑰和私鑰總是成對存在,且每次交易都可能產生新的找零位址,逐一儲存和備份這些位址對應的私鑰會帶來很高的管理成本。 HD 錢包透過一個根金鑰派生任意數量的子公鑰和子私鑰,解決了這個問題,也顯著提升了數位錢包的可用性。
