比特幣:如何實現「交易」和「記錄」

在比特幣網絡上執行交易的程序都是開源的,這表示任何人只要有電腦和網絡就可以進行交易。然而,程序的錯誤有可能導致你的比特幣會不見。還記得嗎?比特幣是分散式網絡,並沒有專屬的客服人員替你找回遺失的錢或錢包密碼。所以你想要用比特幣進行交易,建議使用正式的比特幣錢包軟件,並且妥善保存你的錢包密碼或私鑰。

嗯,瞭解,但它真的安全嗎?而且它為什麼叫做區塊鏈?

任何人都可以進到比特幣網絡,並且只需要出示他的公鑰就可以進行交易。如果一直使用同一個公鑰,所有的交易紀錄就會指向同一個帳戶。比特幣網絡允許你產生多個錢包,每個錢包都擁有自己的公鑰和私鑰。這麼做可以讓你用不同的錢包做消費。沒有一個公開的方式可以知道你是這多個錢包的擁有者,除非你將每個錢包的比特幣轉到同一個錢包去。

比特幣地址(Bitcoin addresses),也就是錢包,的總數是 2^¹⁶⁰或1461501637330902918203684832716283019655932542976。在讓任何人都可以擁有錢包的情況下,用這麼大的數字可以防止一些可能的攻擊。

話雖如此,仍然有一個安全漏洞會被利用:如果把錢轉出後馬上取消交易。交易信息會在網絡裡的節點間傳遞,所以兩個交易信息抵達同一個節點的時間會不一樣。黑客送出一個交易信息,在等商家把貨物寄出後,再送出一個取消交易的信息。這種情況下,有些節點會先收到第二個信息,而把第一個信息視為非法。如何知道交易信息之間的優先順序?使用時間戳(timestamp),但它容易被偽造。因此這會發生一些舞弊現象。

節點間會為了交易的順序而意見不合,所以區塊鏈系統設計的一套機制讓所有節點可以遵循一致的交易順序。

比特幣網絡為了將交易信息排出順序,所以將它們包成一組,稱為區塊(block),每個區塊包含的若干個交易信息和一個連到前個區塊的連接。隨著時間,一個區塊跟著另一個區塊,形成一條時間鏈,這就是區塊鏈。

比特幣:如何實現“交易”和“記錄”

▲圖6 區塊鏈的序列結構

在時間序列上,同個區塊內的交易信息被認為是同時發生,還未被打包進區塊的交易信息會被視為未確認狀態。每個節點都可以將若干個交易信息打包成區塊發送到網絡上,並建議其為鏈上的最新候選區塊。

因為任何節點都可以發送候選區塊,系統如何決定誰才是可以放在鏈上的最新區塊?

區塊鏈系統使用加密哈希函數(cryptographic hash function)設計了一道複雜的數學題,候選區塊只要有正確答案,就可以成為鏈上的最新區塊。

這個答案是由節點計算後一起被打包進區塊。答案是一個數字,得到答案的唯一方法就是用猜的,猜到對為止。一臺普通配置的電腦需要花一年的時間才能猜對答案。所謂團結就是力量,區塊鏈網絡裡有很多臺電腦(節點),一起猜,只需要平均10分鐘就可找到答案。

哪個節點先猜到了答案,它就先有權利將它的候選區塊放到鏈上。

要找茬的話:如果兩個節點同時猜到答案,同時將各自的候選區塊放在鏈上,會怎麼樣?每個節點都有一份區塊鏈副本,當節點拿到其他節點丟出來的候選區塊(已有正確答案的),就會把區塊放到副本鏈上,同時系統會要求節點搜尋網絡裡有沒有比它的副本鏈更長的鏈,如果有,捨棄原有的鏈,取用更長的鏈。

比特幣:如何實現“交易”和“記錄”

▲圖7 解決鏈模糊邏輯

事實上,節點同時猜對答案的發生機率很低,所以整個區塊鏈會很快地穩定下來,收斂成單一條鏈。話雖如此,不一致的鏈尾區塊仍存在潛在的安全問題。如果區塊屬於較短的鏈尾上(如圖7的區塊B),一旦系統決定採用其他更長的鏈(如圖7的區塊A和N),則區塊B內的所有交易信息會被設定回到未確認狀態。

我們來看看Mary如何利用鏈尾模糊現象來進行攻擊。Mary要付錢給John,John要出貨給Mary,因為節點總是取用長鏈執行其上的交易信息,這個時候Mary假造一個更長的鏈,裡面包含了一個取消交易的信息,於是John可能會財貨兩失。

比特幣:如何實現“交易”和“記錄”

▲圖8 Mary的攻擊方法

系統如何防止這類攻擊?剛提到所有節點會合力找到數學題的答案才能把候選區塊放到鏈上,單靠一臺電腦去猜是非常困難,Mary必須比網絡上所有的節點更快找到答案,才可能把假造的候選區塊放到鏈上。就算她成功假造了第一個區塊,還有第二個、第三個區塊,每次都要跟整個網絡上節點們做競賽。如果Mary用一臺超級快的電腦呢?因為網絡上有大量的節點,Mary不可能在確切的時間點假造多個區塊來進行攻擊。

如果她控制了網絡上一半的節點,她有50%的機率可以成功假造區塊,但如果要連續假造兩個區塊,機率降到25%。想假造越多的區塊,Mary的成功機率越低。

比特幣區塊鏈系統的交易信息是被數學競賽保護著:黑客是跟整個網絡做競速。

所以,交易信息隨著時間越來越安全。越舊的區塊比越新的區塊更安全。平均10分鐘就有一個新的區塊加到鏈上,大概一個小時後,裡面的交易信息有很高的機率已經被執行了,而且是不可逆的。

比特幣:如何實現“交易”和“記錄”

▲圖9 區塊鏈的交易安全

為了轉錢出去,你的錢包必須先驗證有錢轉進來過,網絡上所有的交易都會經過這樣的驗證。雞生蛋,蛋生雞,但一開始的比特幣從哪來?

為了平衡軟件錯誤或錢包密碼遺失所造成的通貨緊縮,系統會把一些回饋金給解開數學題的節點。為了得到回饋金而去執行軟件的行為,稱為“挖礦” —— 就像挖金礦一樣。

回饋金是一種激勵,推動人們去建立節點,順帶貢獻一些計算效能來幫助整個網絡的運算和穩定。

因為一臺電腦需要花很長的時間解題(大約平均一年),所以幾個節點可以組成一個群組一起解題。這種方式會比較快,而且平分得到的回饋金。這種群組稱為挖礦池(mining pools)。

有些挖礦池很大,可能擁有整個網絡超過20%的計算效能。這可能會有安全性問題,就像剛剛Mary那個例子。但就算挖礦池得到50%的計算效能,時間越久,交易信息就越安全。

然而,有些挖礦池會限制節點的數量避免過大的計算效能來保障網絡的安全。

而且隨著時間整個網絡的計算效能會提升,例如技術的創新或節點數量的增加,區塊鏈網絡會重新調整數學題的難度,讓產生新的區塊的時間保持在10分鐘。這麼做可以促使網絡的穩定和安全。

再者,每四年挖礦的回饋金會減半,所以隨著時間人們對挖礦的興趣會減少。為了避免節點停止挖礦,系統允許每筆交易信息可以附帶一點回饋金,節點便可以獲得額外的利益。

因為這個機制,如果交易信息帶有較高的回饋金,就會比較快被執行。這表示你想要你的交易快點被執行,就得附加比較高的回饋金。跟銀行的手續費來比,比特幣的交易回饋金顯得比較少,而且跟交易量無關。

比特幣:如何實現“交易”和“記錄”

▲圖10 比特幣交易

現在你已經對區塊鏈有一個初步的瞭解,我們來快速看一下它為什麼有趣。

使用區塊鏈技術有幾個相當顯著的好處:

•你可完全控制自己的身家財產,沒有第三方機構組織保管或限制你使用它。

•交易成本非常低,讓我們可以實現小額支付(micropayments)。

•財產可以在幾分鐘內就完成轉移,交易紀錄可以在幾個小時內獲得保障。

•任何人可以在任何時間驗證每個交易紀錄,區塊鏈具有高透明度。

•應用區塊鏈技術可以打造任何去中心化的應用軟件,它可以快速且安全管理和傳送數據。

然而,有一些挑戰需要克服:

•交易紀錄都是匿名的。一方面保障了用戶的隱私,另一方面管制機構無法追蹤非法的交易行為。

•即使很多交易平臺興起,仍不容易使用比特幣買東西。

•比特幣就像其他的虛擬貨幣,非常不穩定:在市場上不容易取得而且需求劇烈變化。比特幣的價格很容易受到虛擬貨幣市場的突發事件影響。

•區塊鏈技術還處於起步階段,每天都有新的發展讓區塊鏈更安全且穩定。

整體來說,區塊鏈技術在許多行業上也具有潛在的革命性,例如從廣告到能源。它的主要影響力是源自於去中心化的概念和不需要無形的信賴,很多的應用正在發展中。


分享到:


相關文章: