跟大家一起學習區塊鏈技術系列之一 比特幣之錢包(1)

一個區塊鏈錢包指的是一個錢包程序或一個錢包文件。錢包程序創建公鑰來接收比特幣,並用相應的私鑰來花費這些比特幣。錢包文件為錢包程序存儲私鑰和其他與交易相關信息(可選)。

本系列錢包程序和錢包文件在分兩部分介紹。

錢包程序

允許花費和接收比特幣是錢包軟件的基本功能-但是一個特定的錢包不一定兩件事情都做。兩個錢包可以一起工作,一個程序分發公鑰用於接收比特幣,另一個程序用於簽名交易並花費比特幣。

錢包程序還需要和點對點的網絡進行交互,從區塊鏈上獲取信息,或廣播新的交易。然而,分發公鑰和簽名交易本身不需要和點對點網絡交互。

錢包系統有三個必要的、獨立的部分:公鑰分發程序,簽名程序,網絡程序。在以後的部分,我們會描述這些部分的一般組合。

注意:我們一般的談論公鑰分發的時候,在很多情況下,P2PKH或P2SH哈希分發會代替公鑰的分發,實際會在要花費輸出的時候才會分發公鑰。

全服務錢包

一個最簡單的錢包是可以執行上面提到的三個必要部分:產生私鑰,計算相應公鑰,幫助必要的時候分發公鑰,監視發送到公鑰的輸出,創建並簽名交易來花費這些輸出,廣播簽名過的交易。

跟大家一起學習區塊鏈技術系列之一 比特幣之錢包(1)

截止到現在,幾乎所有的流行的錢包都可以作為全服務錢包。

全服務錢包最主要的優點就是容易使用。一個單獨的程序做了一個用戶想要接收和花費比特幣相關的所有事情。

最主要的缺點是私鑰存在了一個可以聯網的機器上了。這種設備的妥協是屢見不鮮,網絡連接使得從妥協的設備傳輸私鑰到攻擊者變得容易。

為了保護比特幣不被盜竊,很多的錢包程序給用戶選擇可以加密錢包文件(包含私鑰)。不用私鑰的時候,這種方法可以保護私鑰洩露,但是如果攻擊者從內存取得加密的密鑰或讀取解密的密鑰,這就無法保護了。

僅簽名錢包

為了提高安全性,私鑰由一個獨立的錢包程序在一個更加安全的環境下產生和保存,這些僅簽名錢包和一個和點對點網絡交互的錢包配合使用。

僅簽名錢包程序通常使用確定性的密鑰產生方法來產生父私鑰和公鑰,這些密鑰可以產生子私鑰和公鑰。

跟大家一起學習區塊鏈技術系列之一 比特幣之錢包(1)

當第一次運行的時候,僅簽名錢包創建一個父私鑰並把相應的父公鑰傳給具備網絡連接的錢包。

有網絡連接的錢包用父公鑰產生子公鑰,選擇性的幫助分發他們,監視發送到這些公鑰上的輸出,創建未簽名的交易來花費這些輸出,並把未簽名的交易傳給僅簽名錢包。

經常,用戶通過僅簽名錢包可以檢查這些未簽名交易的細節(尤其是輸出的細節)。

在這個可選的檢查步驟後,僅簽名錢包用父私鑰產生合適的子私鑰並對這些交易簽名,把簽名的交易傳回給有網絡連接的錢包。

有網絡連接的錢包把這筆交易廣播到點對點的網絡中去。

後面會介紹兩種僅簽名錢包:離線錢包和硬件錢包。


分享到:


相關文章: