2014.04.14 15:00

比特幣的架構、演算與經濟,為什麼AMD比NVIDIA還好挖?安全有什麼漏洞

ADVERTISEMENT

章節目錄:

第一章:

第二章:

第三章:

ADVERTISEMENT

第四章:

第五章:

如何防止歷史資料的偽造

如前段所述,比特幣最重要的靈魂就是歷史交易資料,因此必需想出方法讓它無法被輕易修改。同時比對每位使用者的資料庫是個方法,但是這方法太鳥了。中本聰使用的方式是利用Hashcash演算法,對每個資料塊做雜湊運算(Hash Function)並且把結果紀錄起來,代入下個區塊中。

ADVERTISEMENT

這種做法叫做proof-of-work,由於Hashcash很花時間,除非出現了某台比全網路用戶電腦總計算力加起來都還強大的外星人電腦,否則一定無法在全體善良用戶算出真實結果之前去偽造現在的交易資料塊,如果要竄改歷史資料那所需要花的工夫就更可怕了。得從你想改的那個時間點的特定區塊開始,一直重做雜湊運算直到現在的時間點為止,還得強迫每個人都相信你這台電腦的結果才是對的。所以偽造這件事,在目前比特幣運作上來說是很困難的。

隨時間增加運算難度

Hashcash有個好用的特性,那就是它的難度可以調整。比特幣的歷史資料串在一開始是使用較簡單的設定條件,所以很好找到符合條件的解,而越到後期就用越難的條件,因為參與的人增多計算力就越強大。比特幣的設計上,是希望使用者發布出來的交易訊息在10分鐘左右可以被加入歷史資料串,一旦被加入就完全不可否認或反轉,才會有人說比特幣交易需要10分鐘左右的確認。

若是在一堆電腦都在做Hascash的情況下難度還不改變,那麼可能不用2秒就可以加1個資料區塊到資料串中,這樣也會造成同步上的巨大問題,同時也會讓駭客可以更簡單竄改歷史紀錄。因而比特幣的系統設計上,會自動增加歷史資料串的Hash難度,只要現在的資料塊做完了Hashcash得到結果,就會自動發布到網路上,這時交易就完全無法否認了。

ADVERTISEMENT

比特幣的產生原理

各位讀者大概要問,講了這麼多,怎麼還沒講比特幣是怎麼生出來的啊?當然這樣設計精良的系統,可以用很多種方式產生貨幣的初始交易資料,好比說中本聰能在他本人初始的帳號中放進數億個比特幣,全天下的人都要向他本人領取。不過這位隱形水電工先生,顯然是個打死都不想接信件和電話的人,所以他用了一個很便捷的方式,就是在前段我們提到過的內容,那就是將所有的交易資料打包成資料塊,而資料塊做完Hashcash後會被加入歷史資料串。

我們一看所有的歷史資料塊,就會發現,每個找到Hashcash解的節點,都會得到一定數量的比特幣,每個資料塊的第一筆交易資訊就是「有n個比特幣被產生了,他的所有者是x先生」。我們來看看全世界第一個比特幣,這筆資料存在Block0中:

Block 0

ADVERTISEMENT

Short link: http://blockexplorer.com/b/0

Hash: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

Next block: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

Time: 2009-01-03 18:15:05

Difficulty: 1 ("Bits": 1d00ffff)

Transactions: 1

Total BTC: 50

Size: 285 bytes

Merkle root: 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

Nonce: 2083236893

這個資料塊就是中本聰本人發布的第一筆,我們可以看到當時的Hash難度只有1,而解開Hash的獎勵就是50個比特幣。按照系統的設計,每位使用者的會檢查資料塊產生的時間,和難度以及應得的數量,所以想要欺騙大家,解開1個block hash就產生1000個比特幣也是不太可能的。

最初的比特幣是由中本聰發布,共計有50個比特幣,當時難度只有Hash難度只有1而已。

挖礦一詞的起源

就原本設計者的想法,比特幣的交易是有可能需要付費的,但到目前為止除非是大量的區塊改變,否則應該是沒有人付過費用,但是在通訊協定中我們的確看到了付費欄。我們在之前已經提過,所有即時的交易資料會被收集起來變成資料區塊,交由網路上的使用者做Hashcash找到解,再加入歷史資料串中。由於做Hashcash要花費電力和網路頻寬等資源,所以此系統在設計上,對於開放自己的電腦做這件服務的人就給予了一定的金額獎勵。尤其在早期的運作狀態下,不但難度較低,而且獎勵金額也較高。這個動作便叫做挖礦。

比特幣的設計對於挖礦者的總計算力有嚴格的管控機制,一旦總計算力增加,不但Hashcash難度會增加,而且愈到後期給的獎勵會愈少,目前的獎勵就只有25比特幣。它目的是讓未來世界上只有固定數量的比特幣。直到網路上沒有挖礦者,那麼比特幣就會停止運作,因為沒有人打包交易資料到歷史資料串中。

由於歷史資料串是大家一起算的,有時是有可能出現你算的結果和我算的結果不同的事,所以系統在設計上使用了競爭方式來決定資料樹的最後走向。就是讓最先產生下個資料串的人變成歷史主流,而非主流則被淘汰。

下一頁:比特幣如何交易?竟然還能找錢

ADVERTISEMENT