居然!用2分鐘就說清楚了什麼是區塊鏈

居然!用2分鐘就說清楚了什麼是區塊鏈

在區塊鏈網絡上,數據以區塊的形式存儲,想象一下有很多存儲著數據的區塊,它們被鏈接在一起,這些數據一旦被鏈接就對鏈上的任何人都可見,並且再也無法改變了。這是一項具有非凡革新意義的技術,可以用來記錄我們能想到的幾乎所有數據(如:產權、身份、餘額、病歷等等),不用擔心被篡改

我們以比特幣為例,來看看區塊鏈是什麼樣子的。

比特幣區塊鏈是現存歷史最悠久的區塊鏈,它只存儲比特幣的交易數據,就像一個龐大的交易記錄庫,可追溯至第一筆比特幣交易。

假設有三個存儲著數據的區塊,如下圖:

居然!用2分鐘就說清楚了什麼是區塊鏈

這三個區塊內都存儲了一些交易數據,就像三個獨立的excel表格一樣,記錄了交易的內容。

區塊1按照時間順序從第一筆交易開始記錄,直到存滿(1MB),之後的交易記錄會繼續依次存到區塊2、區塊3,以此類推.

每個數據塊會根據內部數據生成一個特殊的獨一無二的數字簽名。

將區塊1的數字簽名添加到區塊2中,就把區塊1的數據和區塊2的數據關聯起來了,區塊1的簽名與區塊2的其他數據一樣成為了區塊2簽名的基礎。如下圖:

居然!用2分鐘就說清楚了什麼是區塊鏈

正是這些簽名將數據塊鏈接在了一起,形成了一條區塊鏈。現在加上區塊3,這條鏈就像這樣:

居然!用2分鐘就說清楚了什麼是區塊鏈

為什麼說它無法更改

先看看簽名是怎麼生成的。

將數據塊中數據串,代入一個哈希函數得到一個獨一無二的64位的值就是簽名。

這看上去好像只需要逐個生成新的簽名就可以神不知鬼不覺的更改數據了。怎麼避免這種情況的發生呢?

我們再定義一下挖礦

區塊鏈協議會對簽名有一些要求,只有合格的簽名才可以作為簽名用,比如比特幣區塊鏈會根據前面一定數量的區塊簽名的算力,給出目前簽名的難度,比如只有不少於連續10個零開頭的簽名才算是合格的簽名,對應的區塊才可以上鍊。

不要小看這“連續10個零開頭”的規定,就是它讓篡改數據的人頭疼。

因為並不知道代入什麼值才可以得到連續10個零開頭的64位的值,只能不斷的改變代入哈希函數的值計算,直到得到合格的簽名為止,這個過程中不知道需要代入多少次,純粹看運氣。

數據塊中的交易記錄、上一個塊的簽名,是不可變數據,如果只將它們代入哈希函數會得出一個固定的值。

數據塊中除了那些不可變數據,還另外添加了一段特定長度的、可以改動的數據,這就是nonce。nonce不是預先確定的數據,而是根據實際需要而找出的一串完全隨機的數字。

也就是不斷改變nonce,直到找到一個合格的簽名,確定下nonce的值。這種反覆更改nonce,對區塊數據進行哈希運算以尋找合格簽名的過程叫做挖礦[1],也就是礦工做的事。

最長鏈規則

在區塊鏈上的所有礦工都必須在區塊鏈協議[2]下工作,這是中本聰共識機制的一部分,始終以最長鏈為主鏈(有效鏈)的原則,所謂的“最長鏈規則”。(不是所有區塊鏈都採用了中本聰共識機制)。

現在,我們再次假設有一個攻擊者修改了某個數據塊的數據。並且他想為之後所有的數據塊生成新的簽名。注意,網絡上不只有他一個礦工,如今比特幣區塊鏈上有數百萬礦工,其他的礦工都在夜以繼日的挖礦,在不斷的生成新的數據塊,新的簽名。這個攻擊者要有多大的算力多麼爆棚的運氣才可以超過全網的礦工。

挖礦需要投入大量的電力,轉化成算力,來找到合格的簽名。也就是說找到一個合格的簽名相當難,而且是需要大量成本的,而要超過全網的礦工,其成本投入不可估量。

總結

區塊鏈上的礦工數越多,整條鏈的安全性就越高。

有一種例外,惡意參與者的算力真的超過全網其他人的總和,從理論上講是有可能篡改區塊鏈的,這就叫做51%攻擊,目前遭受過51%攻擊[3]的著名區塊鏈如bitGold、Verge、Ethereum Classic。


分享到:


相關文章: