引介 | 數字貨幣錢包:生態及技術
第一章 錢包概述及其生態介紹
1.1 數字貨幣錢包生態結構
錢包作為數字貨幣行業的基礎設施,在數字貨幣行業中具有資產管理,鞏固使用者群體流量及導流的相關作用,下面的一張圖中大致介紹了數字貨幣錢包的生態結構。
- 錢包上游
作為錢包的主要流量來源。考慮到錢包的實際功能性,錢包的主要上游來自礦工及交易所交易使用者。礦工需要安全渠道長期儲存數字貨幣,交易所使用者為了資產的安全儲存將數字資產放置於錢包進行儲存。
- 錢包平行行業
平行關係中,傳統數字貨幣錢包業務與平行行業不存在重疊的機會,但為了豐富錢包的功能性,很多數字貨幣錢包加入了行情,社交,資訊的附加功能,既豐富了錢包的功能性又為錢包帶來了更多流量。
- 錢包下游
依託錢包的技術實現及資金儲存的屬性,數字貨幣錢包可以天然的作為Dapps,場外交易,資金管理,借貸等產業的流量入口。
隨著錢包交易功能的豐富且Dapps中就包含交易所,交易所與錢包的上下游關係變得越來越模糊。
1.2 數字貨幣錢包商業模式
數字貨幣錢包的商業模式主要圍繞錢包的生態結構展開,錢包的價值在於擁有數字貨幣行業中的巨大流量資源,而流量資源怎麼實現變現便是大家努力在數字貨幣錢包行業所探索的。下文將給出幾種比較成熟的商業合作模式。
- 引流返傭
交易所引流返傭
中心化交易所,錢包接入中心化交易所API,使用者可以直接在錢包中實現交易相關操作;去中心化交易所,目前去中心化交易所以基於以太坊智慧合約為主要型別。錢包需要提供Web3介面,以實現去中心化交易所與錢包地址直接的通訊功能。
Dapps引流返傭
目前市場上眾多的Dapps,極大豐富了區塊鏈世界的功能性。眾多數字貨幣錢包也開始接入Dapps,不斷豐富錢包的實用功能。
借貸引流返傭
錢包作為天然的資金流量入口,具有先天優勢。符合借貸行業對於資金的持續穩定需求。
- 資產管理
理財產品
錢包推出定期存款理財業務,錢包通過彙集資金進行投資或高頻套利交易賺取利潤。
- 手續費
場外交易手續費
為了規避風險,錢包使用者可以使用OTC功能,實現數字貨幣出金及入金。
交易功能手續費
一些錢包在其中內嵌了交易功能,使用者可以實現數字貨幣與主流數字貨幣之前的交易。
- 廣告
眾籌專案接入
眾籌專案為了增強品牌影響力,向錢包付費,實現新增Token,廣告宣傳的服務。
Dapps 接入
為豐富Dapps流量來源,Dapp開發者向錢包付費,實現接入。但目前由於Dapp接入錢包仍處於早期階段,多數Dapps接入錢包均為免費,實現雙向共贏流量吸引。
1.3 數字貨幣錢包發展展望
1.3.1 錢包型別
- HD多幣種錢包
HD錢包由於支援多幣種,且只需備份種子助記詞(詳情見3.4),提高了操作簡易性及相容性。
- 中心化,去中心化混合錢包
為降低使用者教育成本,早期接觸數字貨幣使用者更容易接受中心化數字貨幣錢包。混合型別錢包將起到良好的教育使用者的作用。
1.3.2 功能拓展
- 功能集合
功能集合化的數字貨幣錢包已經成為數字貨幣錢包的發展方向,未來將有更加豐富的功能與數字貨幣錢包對接。
1.3.3 合作方式
- 交易所與錢包
錢包作為穩定的流量來源,越來越多的數字貨幣交易所意識到錢包在數字貨幣生態中的重要作用。Coinbase收購Toshi Wallet;Binance 收購 Trust錢包。可見主流交易所傾向於擁有自己的數字貨幣錢包,以實現自己在整個生態中的拓展。
- 資產管理與錢包
目前錢包大多沒有自己的資產管理團隊,以錢包為資金入口,越來越多錢包將開發自己的交易系統並培養自己的量化交易團隊。
- 礦池與錢包
礦池作為礦工流量的匯集點,礦池與錢包的合作將更大限度提高礦工錢包使用者的轉化率。將來會出現越來越多的礦池與錢包合作共贏的新模式
- 零售商,結算機構與錢包
隨著數字貨幣得到越來越多的認可,零售商,結算機構將作為數字貨幣錢包上游,打通使用者使用數字貨幣消費壁壘。
第二章 錢包安全性
2.1 HD錢包使用安全注意事項
2.1.1 錢包種子/助記詞備份及儲存
對於HD錢包來說,有兩種不同型別的私鑰:主私鑰及每個不同數字貨幣的私鑰,備份主私鑰的同時建議備份常用地址私鑰
安全建議:
- 錢包應用下載好後,斷網生成錢包賬戶
- 備份主私鑰及主私鑰助記詞,備份時建議手寫或使用未聯網電腦列印
- 同時備份常用的幣種地址,備份時建議手寫或使用未聯網電腦列印
2.1.2 資金髮送及訊息簽名
由於資金髮送過程,會利用私鑰進行簽名,且進行聯網通訊。容易在聯網的情況下暴露私鑰在網際網路下,存在安全風險
安全建議:
使用離線錢包簽名傳送交易功能(imToken),詳細步驟可檢視imToken的冷錢包離線簽名方法
360003147833" rel="nofollow,noindex" target="_blank">https://help-center.token.im/hc/article/360003147833
2.1.3 錢包匯入
目前HD錢包匯入通常使用助記詞,私鑰的方式進行匯入。
安全建議:
- 使用助記詞進行匯入
- 避免使用聯網的裝置對私鑰,助記詞進行復制貼上操作
- 一些使用者體驗較差錢包,注意助記詞匯入時的空格
2.2 種子生成方式對於錢包的安全影響
概述:
錢包種子的隨機性決定了錢包的安全性,一旦錢包的隨機規律被獲知,將對錢包安全性造成毀滅性的打擊。怎樣保證錢包種子生成序列的隨機性,成為了各大錢包努力實現的目標。
由於種子隨機序列的生成演算法關係到錢包的安全性,目前各大主流錢包的種子生成演算法均未開源,保證黑客無法通過暴力碰撞的方式生成合法種子。
目前主要有幾種方式獲取種子隨機性序列
舉例說明種子生成方式對於錢包的安全性影響:
假如錢包A通過硬體資訊獲取種子隨機序列,而黑客B熟知目前主流手機終端型號及硬體資料。
黑客通過指令碼程式模擬隨機序列生成過程,隨機來源為熟知的硬體型號及硬體資料。生成了大量私鑰。
使用者C很不幸,所使用的硬體裝置恰好在黑客的隨機來源範圍內,那麼使用者C所生成的私鑰其實早就被黑客所控制,一旦使用者C向該地址充值資金,黑客便可以通過私鑰隨意控制使用者C的資金。
第三章 錢包設計原理
3.1 錢包相關概念概述
- 非確定性錢包及HD錢包概述
非確定性錢包:錢包中每一個私鑰隨機獨立生成,私鑰之間沒有邏輯關聯。
由於私鑰之間沒有邏輯關係,導致使用者需要每個地址都進行備份,使用者體驗較差。
HD(分層確定性)錢包:錢包中所有金鑰都由主金鑰生成,金鑰具有關聯性,擁有原始主金鑰便可以生成全部金鑰。
- 錢包種子/助記詞概述
錢包種子/助記詞:代表一個隨機數的單詞序列,序列可以再次建立種子,派生出更多金鑰。其長度通常為一組12到24的單詞序列
3.2 非確定性錢包設計原理
概述:
最早期的比特幣錢包採用這種方式,獨立的私鑰使錢包擁有更好的匿名安全性,但隨著數字貨幣的普及,易用性變得愈發重要,使得非確定錢包逐漸退出歷史舞臺。
非確定性錢包設計簡單,目前僅早期的數字貨幣錢包採用該模式。私鑰是由沒有邏輯關係的隨機序列生成,所以私鑰之間沒有邏輯關係。
3.3 HD錢包設計原理
概述:
HD錢包的實現是由比特幣BIP-32標準定義的HD錢包,BIP-44是對於BIP-32進行改進可以支援多幣種的HD錢包協議,錢包金鑰來源一個樹形結構。父金鑰派生出一系列子金鑰,子金鑰又可以派生出一系列孫金鑰。
- BIP-32:定義了HD錢包私鑰的生成過程
HD錢包金鑰路徑標識:
HD錢包金鑰的命名規則由路徑來標識,每一級通過“/ “分割。主私鑰派生出得私鑰以“m” 開頭,主公私鑰派生出得私鑰以“M”開頭,“/”後數字表示第幾個子金鑰。如,m/x/y 就是m/x的第y個子金鑰。
m/0’標示硬化子輩,在某數字加一瞥即標示該子輩的生成方式經過加密處理,無法通過子金鑰反推出其母金鑰,為了可以讓該層級下的金鑰可以在非安全環境中匯出可用公鑰。
- BIP-44
基於BIP-32,對每層樹狀結構賦予了特殊含義,制定了多幣種HD種子生成規則,指明預定義了五個層級,也是目前錢包大多數採取的HD種子標準
m / purpose’ / coin_type’ / account’ / change / address_index
以m/44'/60'/0'/0/0(imToken,MetaMask,Jaxx,MyEtherWallet,TREZOR,Exodus)標準為例:
coin_type具體編號詳見:
https://github.com/satoshilabs/slips/blob/master/slip-0044.md
故m/44'/60'/0'/0/0的含義為:第一個以太坊賬戶的私鑰
- 現有以太坊客戶端路徑實現
- m/44'/60'/0'/0/x: imToken(可以自定義路徑),MetaMask,Jaxx,MyEtherWallet,TREZOR,Exodus
- m/44'/60'/x’/0/0:KeepKey,MetaMask
- m/44'/60'/0'/x:Electrum,Ledger Chrome App
- m/44'/coin_type’/account’/0:Coinomi
3.4 錢包種子生成方式及原理
BIP-39:定義了助記詞編碼和種子的生成過程,種子的生成過程分為9步
- 建立一個128位到256位的隨機序列(儘可能保證隨機性)
- 取SHA256結果長度/32位,建立隨機序列校驗和
- 將校驗和加入到隨機序列末尾
- 生成序列分為12部分,每部分為11位( [128位隨機序列/32+128]/12=11 )
- 從預定義的2048單詞表中將每一個11位的值對映到一個單詞上
- 生成助記詞
當隨機序列長度不同時,生成助記詞數量也會有所不同
從備份的助記詞數量便可以反推回隨機序列位數
- 金鑰拉伸函式 PBKDF2 的第一個引數為第六步中生成的助記詞
- 金鑰拉伸函式 PBKDF2 的第二個引數,使用者提供的密碼字串(鹽),與助記詞拼接(保證使用者私鑰安全,但是遺忘密碼會造成資產丟失)
- PBKDF2 使用 HMAC-SHA512 演算法進行了 2048 輪雜湊運算對助記詞和鹽進行拉伸,生成一個 512 位的值作為最後的輸出。這個 512 位的值就是種子
為了與其他錢包進行相容,通常HD錢包不會在種子生成過程中新增使用者設定的密碼字串(鹽)。
這裡可以體驗到完整的種子生成過程: https://iancoleman.io/bip39/
第四章 附錄
4.1 現有非確定性錢包及HD錢包統攬
4.2 常見問題
- imToken,Trust等錢包僅支援ETH及ERC20 Tokens,為什麼錢包種子也為HD錢包格式?
目前主流錢包均採用HD錢包格式,為了與更多HD錢包相容,imToken等以太坊錢包選擇採取HD錢包種子格式
- 在HD錢包中,為什麼同一種數字貨幣會有多個地址?
為方便使用者使用,保證資產安全匿名性。HD錢包允許使用者窗戶建立多個子地址,相同數字貨幣地址在同一樹層級
- 錢包地址發生異常轉賬,應該怎麼做?
錢包出現資產減少,或傳送異常轉賬,應第一時間建立並備份一個全新錢包地址,並將資產轉移至全新地址。
- 如果助記詞匯入時發現錯誤,有沒有辦法找回?
如果是助記詞抄寫錯誤,可以通過助記詞詞碼錶,嘗試相近單詞進行匯入;如果助記詞缺少遺忘將沒有辦法導回資產,造成資產丟失。
[助記詞詞碼錶] https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
- 為什麼一些去中心化錢包仍需要進行註冊登陸?
衡量一個去中心化錢包最重要的是錢包私鑰能否能夠備份,使用者是否可以切實實時掌握自己的數字資產。需要註冊登陸有利用錢包和使用者建立聯絡,提供使用者服務水平。
有些錢包採用中心化及HD錢包兩種模式,給使用者更多選擇。
- 為什麼HD錢包中大多不能生成更多的ETH錢包地址?
由於ETH地址下通常會存在多種Token,使用者在生成新錢包後,難以實現ETH及Token共同轉換,而BTC/BCH採取UTXO結構,使用者在生成新地址後可以方便的在轉賬後將資產轉移至新地址中。
- 為什麼在HD錢包中顯示資產總量會分散在多個地址中?
由於BTC/BCH採用UTXO結構,使用者在傳送交易時,一筆交易的傳送方可以為多個地址,所以會出現分散在多個地址的情況。而ETH在HD錢包中通常沒有多個地址的情況。
由於BCH近期釋出了WHC(蟲洞協議),可以利用蟲洞協議生成Token,會造成類似ETH的Token情況出現,幣客錢包為此做出優化,將交易找零部分儘量放在WHC所在地址,避免了使用者出現錢包有餘額,但是無法轉賬WHC的情況。
引用
【BIP-32】 https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
【BIP-39】 https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
【BIP-44】 https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
【ethereumbook,wallets】 https://github.com/ethereumbook/ethereumbook/blob/develop/wallets.asciidoc
作者:DEx.top區塊鏈研究院
DEx.top區塊鏈研究院,在打造一個與 DEx.top使用者、區使用者、區塊鏈世界參與者共同研究、分享、互動的平臺。我們的團隊來自全球頂級的諮詢、金融、科研等機構,擁有深厚的學術背景。研究內容包括:區塊鏈領域的技術探究、行業調研、應用創新、模式探索等。