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

離線錢包

一些全服務錢包程序可以作為兩個獨立的錢包來運行操作:一個程序實例作為僅簽名錢包(經常叫做離線錢包),另外一個程序實例作為有網絡連接的錢包(經常叫做在線錢包或僅監視錢包)。

之所以被稱為離線錢包,因為它是被設計在一個未聯網設備上運行的,這大大降低了攻擊的數量。如果是這種情況的話,通常都是要用戶用可插拔USB設備進行所有數據的傳輸。工作流程大概是這樣的:

1 (離線)禁止所有網絡連接,安全錢包軟件。以離線模式打開錢包程序,創建父私鑰和公鑰。拷貝父公鑰到可移動介質。

2 (在線)在另一個設備上安裝錢包軟件,這臺設備是連接到網絡上的,從移動介質上導入父公鑰。就像全服節點一樣,分發公鑰來接收支付。當準備好花費的時候,填好輸出細節,並保存好錢包產生的未簽名交易數據,拷貝到可移動介質。

3 (離線)在離線實例中打開未簽名交易,檢查一下輸出細節,確保花費的數量和支付的地址。這防止惡意軟件欺騙用戶簽名一個付給攻擊者的交易。檢查沒問題之後,給交易簽名並保存到可移動介質。

4 (在線)在在線實例中打開簽名的交易,然後廣播到點對點的網絡中。

離線錢包主要的優點就是比全服務錢包大大的改善安全性。只要離線錢包不出錯,用戶在簽名之前檢查了所有的交易,用戶的比特幣就是安全的,即使在線錢包缺少抵抗力。

離線錢包最主要的缺點就是麻煩。為了最大的安全性,他們需要用戶專門的設備來做離線任務。當要花費比特幣的時候,離線設備隨時啟動,用戶必須要在兩個設備之間通過物理拷貝數據。

硬件錢包

硬件錢包是專門運行僅簽名錢包的設備。他們的貢獻是消除了很多現在通用操作系統的弱點,允許他們安全直接的和其他設備通信,不要用戶手動的傳輸數據。用戶流程是這樣的:

1 (硬件)創建父私鑰和公鑰。連接硬件錢包和聯網設備,這樣就能獲得父公鑰。

2 (網絡)就像全服務錢包那樣,分發公鑰來接收支付。當準備好花費比特幣的時候,填好交易細節,連接硬件錢包,點擊花費。網絡錢包自動發送交易細節給硬件錢包。

3 (硬件)在硬件錢包屏幕上檢查交易細節。一些硬件錢包會提示輸入密碼或pin碼。硬件對這個交易進行簽名並上傳給網絡錢包。

4 (網絡)網絡錢包接收到簽名的交易並把它廣播到比特幣網絡。

硬件錢包主要的優點是大大提高了安全性,而且沒有離線錢包那麼麻煩。

最主要的缺點還是麻煩,雖然說比離線錢包好點,但是用戶還是必須買一個硬件錢包,不管去哪裡需要交易的時候都得帶著。

另外一個缺點(希望是臨時的),到目前為止,非常少的流行錢包支持硬件錢包-儘管幾乎所有的流行的錢包程序都聲稱要支持至少一種硬件錢包的願望。

僅分發錢包

不安全的環境中運行錢包程序,比如web服務,可以設計用來分發公鑰(包含P2PKH和P2SH地址)。一般兩種方法設計這些極簡單的錢包:

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

用一些公鑰和地址預填充到數據庫裡,根據請求分發公鑰腳本或地址,使用數據庫的一個條目。為避免密鑰重用,web服務應該跟蹤用過的密鑰,避免用盡所有公鑰。下一種方式建議使用父公鑰,這會使得簡單。

使用父公鑰創建一些子公鑰。為避免密鑰重用,必需要有辦法避免同樣的公鑰分發兩次。每個密鑰是一個數據庫的條目,或自增的指針指向密鑰的索引。

兩種方法都沒有顯著的增加開銷,特別是無論如何都要使用數據庫,為了跟蹤交易要用數據庫關聯收到的支付和公鑰。


分享到:


相關文章: