跳至主要內容

什麼是軟體錢包

今日已更新

軟體錢包的概念

軟體錢包用一個隨機數來生成主私鑰。

然後,再用一個確定性的、不可逆的算法,基於主私鑰生成任意數量的子私鑰。

那為什麼要用「確定、不可逆」的算法呢?因為「確定」才能保證從一個主私鑰可以生成出全部的子私鑰,而「不可逆」則是為了確保不能通過子私鑰反推出主私鑰。

之所以叫分層確定性錢包是因為私鑰的衍生結構是樹狀結構,父金鑰可以衍生一系列子金鑰,每個子金鑰又可以衍生出一系列孫金鑰,以此類推,無限衍生。

我們在首次創建 HD 錢包或者備份錢包時,會產生一個助記詞,助記詞是一連串的英⽂單詞,這一串單詞序列就可以創建種子,種子又可以創建所有的私鑰。單詞順序也是錢包的備份,可以恢復錢包。而種⼦對應的就是所確定性錢包的隨機數。

HD 錢包的優點在於只需要主公鑰,就可以生成出任意數量的子公鑰。也就是說,無需私鑰介入(主私鑰和子私鑰),就能基於主公鑰生成新(公鑰)地址,而這些地址其實都能被主私鑰所控制。

有利必有弊,當我們暴露助記詞時,也相當於將所有的私鑰拱手讓人了,你所擁有的數字資產的安全性也歸零了。

為什麼要有那麼多的私鑰

為什麼一個用戶得需要那麼多的私鑰,我們以比特幣交易的找零機制來說明。

⼀筆⽐特幣交易是⼀個含有輸⼊值和輸出值數據結構,該數據結構植⼊了將⼀筆資⾦從初始點(輸⼊值)轉移⾄⽬標地址(輸出值)的代碼信息。

談到比特幣的交易輸入和輸出,還必須了解一個名詞 UTXO(Unspent Transaction Output),它是⽐特幣交易的基本單位,是⼀個未經使⽤的交易輸出。⼀個⽤⼾的⽐特幣會被當作 UTXO 分散到數百個交易和數百個區塊中。實際上,並不存在儲存⽐特幣地址或賬⼾餘額的地點,只有被所有者鎖住的、分散的 UTXO。

⽐特幣可以被分割成表⽰⼋位⼩數的「聰」,⼀個 UTXO 可以是⼀「聰」的任意倍。UTXO 可以是任意值,但只要它被創造出來了,就像不能被切成兩半的硬幣⼀樣不可再分了。如果⼀個 UTXO ⽐⼀筆交易所需量⼤,它仍會被當作⼀個整體⽽消耗掉,但同時會在交易中⽣成零頭。

這段話是什麼意思,來舉個形象點的例子。如果你有一筆 20 ⽐特幣的 UTXO 並且想⽀付1⽐特幣,那麼你的交易必須消耗掉整個 20 ⽐特幣的 UTXO 並且產⽣兩個輸出:⼀個是⽀付了 1 ⽐特幣給接收⼈,另⼀個是⽀付 19 ⽐特幣的找零到你的錢包。這樣的話,⼤部分⽐特幣交易都會產⽣找零。

問題就來了,產生的找零應該返還原地址呢,還是返還到一個新地址。中本聰在設計比特幣時,運用的找零機制是創建了一個新的地址作為每筆交易的找零地址。這樣設計的好處,是為了保護交易用戶的隱私和避免一些安全隱患。

這在現實生活中,就好像你用多個名字和身份證在不同的銀行開通了數個銀行帳號,即便有人知道每個帳號上的資金往來情況,也是不能根據資金流向刨根溯源查到真正的數字貨幣擁有人的,這就是比特幣所謂的匿名性。

這樣你應該知道了一個錢包用戶為什麼需要那麼多的私鑰,因為公鑰和私鑰總是成對出現的,每筆交易都有可能產生一個找零地址,而與這些地址相對應的私鑰保管和備份就成了數字交易的技術難題。HD 錢包由一個公鑰就可以生成任意數量的子公鑰,這極大地解決了數字錢包的使用硬傷。

是否回答了您的問題?