比特幣&數字貨幣(week3&4)筆記

第三周講的是 Bitcoin script。

第四周講的是 How to store and use Bitcoins,總共分幾個部分。

1,如何存儲使用比特幣

之前的內容說過,Bitcoin有public key和private key。

  • public key:就是address,相當於節點在比特幣網路里的id。

  • private key:用於簽署數字簽名。

保存管理比特幣實際上是保存和管理你的key,特別是private key,因為其它的信息(例如某個public key擁有多少比特幣)可以從區塊鏈中獲取。而 private key決定了你的比特幣是否只有你才能使用。

因此,key的存儲有三個要點:

  • availiability,你自己能使用你的比特幣

  • secruity,安全性,除了你本人沒有其他人能使用你的比特幣

  • convenience,方便性,你可以方便地使用你的比特幣

當然,最簡單的方法是將key保存在本地的一個文件中,這樣雖然很方便,但是安全性和可用性較低。

更複雜一點的方法是錢包軟體,將比特幣保存在錢包軟體里,錢包軟體為你提供良好的ui交互,並且將你的比特幣分散在不同的key里,而你不用關注這個層次的問題。

分散在不同的key是一個有效的方法,這增加了入侵的難度。

2,hot storage,cold storage

key的存儲有hot 和 cold兩種。

  • hot,在線存儲,方便但較不安全

  • cold,離線存儲,安全但不方便

如何綜合利用hot和cold兩種存儲方式的優點呢?

我們把比特幣存儲在hot和cold兩端,hot和cold知道對方的地址。hot可以接受和轉出比特幣,所以即使cold不接入網路,hot也能通過cold的地址來使cold接受比特幣。當然cold端因為不接入網路,所以cold不能轉出比特幣,只能接受比特幣,當然這樣也使cold端的比特幣也是安全的。

如果hot存儲的比特幣過多,還可以轉入cold,更安全的存儲。所以hot一定要清楚cold的地址,但是按照比特幣錢包分散存儲的原則,每次比特幣交易最好使用不同的地址,如果總是使用同一個cold 的地址,毫無疑問是不夠安全的。

hot有兩種方法來得到cold的地址,一種是cold一次生成大批地址給hot依次使用,一種是hot每次需要地址時去cold獲取。但這兩種方法顯然都有各自的局限性。

比特幣的解決方法是hierarchical key:

常規的key在生成後會有:

  • public key 即address

  • private key

可以認為是兩段字元串,直接生成了兩條key的信息。

而 hierarchical key生成的是

  • addr info:傳入參數給info來生成對應的 public key

  • key info:傳入參數給info來生成對應的 private key

傳入對應的參數給addr info 和 key info 生成的private key 和public key 就是對應的,等價於直接生成的。但addr info不會泄漏任何private key的信息,所以addr info可以放在hot端,而key info可以放在cold端。這樣hot端只需要在一開始獲得addr info就可以持續獲得足夠的在cold端有對應private key的 public key。

我們可能會將cold端的key保存在某個設備上,或者列印在紙張上,加密存儲在某個地方等等。

3,split and share key

但這樣仍然可能不夠安全,因此我們提出了分割 key 成份,分開保存的方法。

首先將key分成n塊:

  • 如果給出n塊key的信息,將得到key

  • 如果不夠n塊key的信息,將無法獲得任何信息

假設 S 是 private key, 一個[0,p)的整數,我們再隨機生成一個 [0,p) 的整數 R。將S分成兩份,分別是:

  • S1 = (S+R)%P

  • S2 = (S+2R)%P

因為R是隨機生成的,所以S1和S2可能是0到p的任意數,但是如果要通過S1,S2得到S,必須要解出R,很明顯這相當於一個二元一次方程,知道兩個點就可以解出方程,但至少需要兩個點,也就是兩份key的信息,如果少於兩份,那麼將無法得到任何信息。

我們可以通過增加元來將key分成更多份,這樣入侵者必須拿到多份才能得到key。

4,payment service

如今已經有許多的商家在網站上支持比特幣支付,而商家支持比特幣支付通常是使用了某種比特幣的 pay service。

商家在網站上添加payment service的代碼(一段html,類似一個支付按鈕),當用戶使用比特幣支付時:

  • 1、用戶點擊商家在網站添加的payment service 按鈕。

  • 2、用戶和payment service之間使用比特幣交易。用戶把比特幣支付給payment service。

  • 3、payment service將用戶支付成功的確認信息返回給商家,並最終付給商家美元或其他貨幣。

因此支付服務必須用比特幣兌換美元來保證比特幣的流入和美元的流出。

5,transaction fee

之前在挖礦的時候講過,生成新的區塊不僅會獲得產生新的比特幣的獎勵,交易發起者還會支付小費給區塊產生者。

這是作為區塊產生者工作的獎勵,同時也鼓勵礦工產生對應交易的區塊。因此礦工當然傾向於產生小費高的交易對應的區塊。


推薦閱讀:

亮燈問題、楊輝三角與Sierpinski三角形
科學家爸爸如何讓孩子愛上數學?——啟蒙篇(三)
情(píng)人(ān)節(yè) ? 有人推妹子,有人推公式……
常微分方程的解法的推導過程?

TAG:比特币Bitcoin | 加密 | 趣味数学 |