相信不少人昨天晚上被突如其來的區塊鏈刷了個屏。
中共中央政治局10月24日下午就區塊鏈技術發展現狀和趨勢進行第十八次集體學習。中共中央總書記習近平在主持學習時強調,區塊鏈技術的集成應用在新的技術革新和產業變革中起著重要作用。我們要把區塊鏈作為核心技術自主創新的重要突破口,明確主攻方向,加大投入力度,著力攻克一批關鍵核心技術,加快推動區塊鏈技術和產業創新發展。
公眾號:人民日報習近平:把區塊鏈作為核心技術自主創新重要突破口
可能有一些讀者有疑問,“區塊鏈”到底是什么?為什么會這么受重視呢?今天,小編就來帶大家一起了解一下。
引言
首先,區塊鏈是一種電子化數據的存儲方法。數據是以區塊的形式出現的,想象一下有很多存儲著數字化數據的區塊。這些區塊都鏈接在了一起,為其內部數據賦予了不可變性。當一個數據塊被鏈接到了這條鏈上,其內部數據就再也無法更改了。一旦某個區塊被添加到了鏈上,里面的數據對任何人都是公開可見的。這項技術具有非凡的革新意義,可以用來記錄我們能想到的幾乎所有數據(例如,產權、身份、余額、病歷等等),同時不存在被篡改記錄的風險。假設我買了一套房子,把產權證拍照上傳到了區塊鏈上,我就可以證明我在那個時刻享有這套房產的所有權。也就是說,區塊鏈是一種存儲數據且保證數據不被篡改的方法。這聽上去不錯,不過隨之而來的問題是:我們是怎么實現這樣的技術的?
(校對注:吹毛求疵來說,這一段表述并非無懈可擊,但姑且可以這么先記著。)
第一階——交易數據
好吧,我們先拿比特幣區塊鏈做個例子。比特幣區塊鏈是現存歷史最悠久的區塊鏈。在比特幣區塊鏈上,每個區塊的大小在 1 MB 左右。至截稿日,這條鏈上已經累積了 52.5 萬個區塊,鏈上存儲的數據總量約為 52.5 萬 MB 。(校對注:其實遠遠沒有 52.5萬 MB,因為在早期,很多區塊都沒有打滿 1MB。)
比特幣區塊鏈上僅存儲比特幣的交易數據 。它就像是一個龐大的交易記錄庫,可追溯至第一筆比特幣交易。在本文中,我們假設有一條存儲交易數據的區塊鏈,就像比特幣區塊鏈那樣。
第二階——(通過哈希運算)鏈接區塊
想象有三個存儲著交易數據的區塊(如圖一所示)。
這三個區塊內都存有一些交易數據。這沒什么特別的。就好比是三個獨立的 word 文檔,里面描述了交易的內容和余額變化情況。文檔 1 會按照時間順序從第一筆交易開始記錄,直到數據量達到 1 MB 為止,之后的交易會記錄在文檔 2 中,直到數據量達到 1 MB 為止,以此類推。這些文檔就是數據塊。它們一個接著一個聯系(鏈接)在一起。為此,每個區塊會根據其內部數據串生成一個特殊的(數字)簽名。如果這個區塊中的數據發生任何變動,即使只改變了一個數字,這個區塊的簽名也會發生改變。這是如何實現的?欲知詳情,請閱讀步驟三中的哈希運算部分。
(校對注:如上文所述,實際情形中的區塊并不是個個都接近區塊大小的上限,實際數據大小要看把區塊打包上鏈的礦工在區塊中記錄了多少交易,而他們并不會等到有了 1MB 交易數據才開始動手。實際情形見下文)
假設區塊 1 中記錄了兩筆交易,分別是交易 1 和交易 2 。這兩筆交易的總數據量達到了 1 MB (實際上一個區塊中包含的交易筆數遠不止這點)。根據這個區塊內的數據串會生成一個簽名。假設這個簽名是 “X32” 。如下圖所示:
請記住,即使區塊 1 中存儲的數據改動了一個數字,也會得到一個完全 不同的簽名!只要將區塊 1 的簽名添加到區塊 2 中,就可以將區塊 1 的數據與區塊 2 關聯起來。區塊 1 的簽名也包含在區塊 2 的數據串內,因此這個簽名與區塊 2 中的其它數據一樣,成了區塊 2 簽名的數據基礎。如下圖所示:
正是這些簽名將區塊鏈接在了一起,形成了一條區塊鏈。現在加上區塊 3 ,整條鏈的情況如下圖所示:
現在,假設區塊 1 中的數據被 更改了。比方說 Damian 和 George 之間的交易被更改了。Damian 向 George 發送了 500 個而非 100 個比特幣。由于區塊 1 中的數據串改變了,其簽名也相應改變了。更改過數據之后,區塊 1 的簽名不再是 “X32” ,而是變成了 “W10” ,如下圖所示:
-請訪問 r/BlockchainSchool 查看更多關于區塊鏈的科普知識-
這樣一來,區塊 1 的新簽名 “W10” 跟之前添加進區塊 2 數據串的舊簽名 “X32” 產生了沖突。區塊 1 和區塊 2 之間的鏈接就斷了。這條鏈上的其他用戶就會知道區塊 1 中的數據被更改了。為了維護區塊鏈的不可變性,其他用戶會拒絕同步更改后的交易信息,依舊維持原有的交易記錄(即 Damian 向 George 發送 100 BTC )不變,整條鏈依舊保持完整。這就意味著,要想不露痕跡地篡改交易,必須將區塊 2 數據串中區塊 1 的舊簽名替換成新簽名。然而,一旦區塊 2 中的數據串發生變化,區塊 2 的簽名也會隨之發生變化。假設區塊 2 的簽名從 “9BZ” 變成了“PP4” 。那么區塊 2 和區塊 3 之間的鏈接就斷了!
區塊鏈上的區塊對所有人都是可見的。因此,如果篡改者真想要不露痕跡地篡改交易,就必須保證篡改之后的區塊仍然都聯系在一起(否則人們就很容易發現哪個區塊跟其他區塊并不相連,進而判斷出該區塊已經被改過了)。也就是說,改掉一個區塊必須為后續的所有區塊計算新的簽名。可以認為這幾乎是不可能的,但要理解這是為什么,請看下文。
第三階——生成簽名(哈希值)
那么,我們以區塊 1 為例再畫一個示意圖。假設區塊 1 只記錄一筆交易,即 Thomas 向 David 發送 100 BTC 。需要根據這個數據串生成一個簽名。在區塊鏈上,這個簽名是通過密碼學哈希函數生成的。密碼學哈希函數是一個極其復雜的數學公式:將任意數據串作為輸入值代入公式,可以得到一個獨一無二的 64 位輸出值。例如,你可以將 “Jinglebells” 一詞代入這個哈希函數(哈希函數的種類有很多,這只是其中一例),得到的輸出為:
761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868
只要這個輸入中有一個字符發生變化,包括改變大小寫或是增加空格和標點,就會得到截然不同的輸出。如果你在這個輸入后面加上一個句號變成了“Jinglebells.”,得到的輸出就變成了:
B9B324E2F987CDE8819C051327966DD4071ED72D998E0019981040958FEC291B
如果我們把句號去掉,還是能得到跟之前一樣的輸入:
761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868
對于同一個密碼學哈希函數來說,相同的輸入必定會得到相同的輸出,不同的輸入必定會得到不同的輸出。比特幣區塊鏈就是利用哈希函數為區塊生成簽名的,將區塊中的數據作為輸入,得到的輸出就是區塊的簽名。我們再來看看只含有一筆交易( Thomas 向 David 發送 100 BTC )的區塊 1 示意圖。
假設區塊 1 中的 數據串如下所示:
Block 1 Thomas -100 David +100
將這個數據串輸入哈希函數,得到的輸出(簽名)如下所示:
BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF
這個簽名會被添加進區塊 2 的中。再假設現在 David 向 Jimi 轉了 100 BTC ,這筆交易被打包進了區塊 2 。那么如下圖所示:
區塊 2 的數據串如下所示:
Block 2 David -100 Jimi +100 BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF
將這個數據串輸入哈希函數,得到的輸出(簽名)如下所示:
25D8BE2650D7BC095D3712B14136608E096F060E32CEC7322D22E82EA526A3E5
這就是區塊 2 的簽名。每一個區塊都會通過這個密碼學哈希函數生成一個數字簽名。哈希函數種類繁多,比特幣區塊鏈用的是 SHA-256 哈希算法。
但是,(僅有上述措施顯然還不夠)如果有人想篡改區塊中的數據,TA 可以在篡改之后生成新的簽名,塞下一個區塊中,然后逐個逐個區塊生成新的簽名,這些改動后的區塊還是形成了一條鏈,他人就沒法分辨出數據已經被更改過了。如何防止這種情形呢?
答案是只有符合特定要求的哈希值(簽名)才會被區塊鏈接受。這就是第四階中介紹的挖礦。
第四階——什么是合格的簽名?由誰來簽署區塊?
并非所有的簽名都符合要求。區塊鏈協議會預先確定一些要求,比如,在比特幣區塊鏈上,只有以連續的零開頭的數字簽名相對應的區塊才能上鏈。例如,只有在數字簽名以不少于 連續10 個零開頭的情況下,對應的區塊才能上鏈。
然而,由第三小節可知,每個數據串對應的哈希值都是 唯一的。如果一個區塊的簽名(哈希值)開頭少于 10 個零呢?為了獲得符合條件的區塊簽名,需要反復改變輸入的數據串,直到能生成以連續 10 個零開頭的簽名為止。但由于交易數據和元數據(區塊編號、時間戳等等)需要保持原樣(否則意義就改變了),每個區塊里面還另外添加了一段特定長度的、可以改動的數據。想把區塊添加到鏈上時,人們可以不斷改變這段數據,直到找到一個合格的簽名,然后確定下這段數據的具體值。這段數據就是區塊的nonce。nonce 不是預先確定的數據,而是應實際需要而找出的一串完全隨機的數字(注:圖中所示的其他數據可以由任意字符組成,nonce 只能由數字組成)。
綜上所述,區塊包含:1)交易數據;2)上一個區塊的簽名;3)nonce 。這種通過反復更改 nonce、對區塊數據進行哈希運算、尋找合格簽名的過程就叫做 挖礦,也就是 礦工所做的事。礦工投入大量電力,轉化成算力,不斷代入 nonce 進行哈希運算,直到找到合格的簽名(輸出)為止。礦工手中掌握的算力越多,哈希運算的速度就越快,搶先找到合格簽名的可能性就越高。這是一種 反復試錯 的過程,如下圖所示:
-注:nonce 必須是數字(詳情請閱讀 r/BlockchainSchool 上的講解)-
區塊鏈網絡上的任何用戶都可以通過下載并啟動 挖礦軟件 來參與挖礦,實際上,這就是用他們的硬件計算能力來計算區塊的 nonce 。以比特幣區塊鏈上的 Block #521,477 為例:
-源自區塊鏈瀏覽器 blockchain.com –
可以看出,這個區塊的哈希值(簽名)和上一個區塊的哈希值都是以相同數量的零開頭的。找到這樣一個哈希值并非易事,需要付出大量算力和時間,或者 運氣爆棚。沒錯,有時候運氣爆棚的礦工在幾分鐘之內就能算出合格的簽名,花的算力也很少。Block #523034 就是一個極其罕見的例子。一個算力很少的小礦工很快就找到了合格的簽名,而其他礦工的算力加起來是他的 7 萬億倍。相比之下,贏得 Powerball 彩票頭獎的概率是 2.92 億分之一,而這位幸運兒挖到礦的概率是中頭獎的 1/24000 。
不要小看這些零。這一小節的重點是,找到一個合格的簽名很難。
第五階——區塊鏈的不可變性是如何是實現的?
正如第三階中所述,更改某個區塊會導致它的簽名改變,與后續區塊記錄的對不上,從而與后面的區塊斷開鏈接。要想讓網絡中的其他參與者接受這個被更改過的區塊,就要把它跟后面的區塊重新鏈接起來。也就是說,一個區塊的簽名變了,跟在它后面的所有區塊的簽名都要改變,才能讓別人覺得這是一條前后一致的鏈。
你想起什么事沒有?
如第四節所述,簽名必須符合要求!雖然更改所有區塊的簽名看似可行,但是要花費很多成本和時間,因此被認為是不可能的,原因如下:
假設有一個礦工惡意篡改了某個區塊內的交易,然后根據哈希運算為這個區塊連同跟在它后面的所有區塊生成了新的簽名,以此讓網絡中的其他參與者都接受被篡改過的交易。問題在于,網絡中的其他礦工也在原來的鏈上不斷為新的區塊計算簽名。隨著新的區塊不斷上鏈,作惡的礦工也要重新計算這些區塊的簽名。他必須保證所有區塊都鏈接在一起,包括不斷被添加到鏈上的新區塊。除非這個礦工擁有的算力超過全網其他人的總算力,否則他永遠趕超不了其他礦工。
(校對注:這一段的實際意思是,只要礦工都在自己看到的最長區塊鏈上挖礦,所有算力就會隨時間自然匯聚到一條主鏈上,而攻擊者只有制造出一條比當前主鏈更長的鏈,才能成功改變大家共同認可的交易記錄。這種始終以最長鏈為主鏈(有效鏈)的原則,就是所謂的 “最長鏈規則”,是 Nakamoto Concensus(中本聰共識機制)的一部分。另,并不是所有區塊鏈都采用了中本聰共識。)
如今有數百萬用戶在比特幣區塊鏈上挖礦,由此可以推定某個惡意參與者或實體的算力是不可能超過全網剩余算力的。這就意味著網絡中的其他參與者不可能接受任何對區塊鏈的修改,從而實現了區塊鏈的不可變性。一旦數據被添加到區塊鏈上,就無法再修改了。
只有一種例外,就是惡意參與者的算力真的超過全網其他人的算力總和。從理論上來說,這種情況下是有可能篡改區塊鏈的(即改變大家共同認可的歷史記錄)。這就叫做 51% 攻擊(我寫了另一篇文章來解釋這種情形),過去也有很多區塊鏈遭受過這種攻擊。
(校對注:目前為止,遭受過 51% 攻擊的著名區塊鏈有 bitGold、Verge、Ethereum Classic。)
實際上,對比特幣區塊鏈發動 51% 攻擊所能獲得的收益遠抵不上高昂的攻擊成本。要想獲得足夠多的算力,除了要負擔硬件、冷卻設備和存儲空間方面的成本,還要承擔被千夫所指的風險,更重要的是,會對被攻擊區塊鏈的生態系統造成極大的損害,攻擊所得的收益也會大幅貶值。51% 攻擊實際上就是以一己之力對抗區塊鏈上的其他用戶。這也就是為何參與挖礦的用戶人數越多,整條鏈的安全性就越高。
恭喜你已經又進了一階!現在,你應該已經理解(大型)區塊鏈被認為具有不可更改性的原因了吧。不過現在又出現一個很重要的問題:如何防止礦工將偽造的交易數據添加到區塊鏈上?從技術上來說是做不到的。關于區塊鏈交易的詳細解釋可參見這篇文章。
(校對注:只有私鑰掌控者才能花費相應地址中的資金,而礦工并不知道你的私鑰,他人只能通過你公開的公鑰來驗證某筆交易是不是你發起的。所以偽造交易并不可行)
第六階——如何治理區塊鏈?由誰決定規則?
……
區塊鏈協議自動以最長鏈上的交易記錄為準,將這條鏈視為代表絕大多數參與者的鏈。打造最長鏈需要消耗全網絕大部分算力。被篡改過的區塊就與最長鏈斷開了鏈接,因此會被全網絕大多數節點自動拒絕。
在比特幣區塊鏈上, 所有交易歷史和錢包余額都是公開可見的(blockchain.info)。任何人都可以查看任一錢包的余額情況,或是始自(2009 年 1 月 3 日的)第一筆交易的所有交易記錄。雖然任何人都能查看錢包余額,但是這些錢包的所有者大多都是不為人知的。例如,一個錢包里存有 6.9 萬個比特幣,至本文截稿之時價值約 5 億美元。這個錢包在 2015 年 4 月使用過一次,之后就再也沒有過交易。
(校對注:這一部分其實并沒有回答 “由誰決定規則” 的問題,只大概說明了 “根據現有規則,這種技術是可以實現的”。公鏈治理是一個復雜的問題,也超出了這篇文章需要說明的范圍了。)
第七階——這些對密碼學貨幣有何意義?
密碼學貨幣從本質上來說都是比特幣的變體。絕大多數加密貨幣都是按照自己的區塊鏈協議搭建的,遵循不同于比特幣的規則。比特幣應當被歸類為一種貨幣,也就是說它明確具備貨幣功能。門羅幣也是一種具有相同功能的加密貨幣,不過它的區塊鏈協議還增加了一些規則來增強隱私性(提高交易溯源的難度)。
不過,用區塊鏈發行的資產可以被賦予很多種不同的用途,這點由發行方決定,如此發行的資產一般被稱為“代幣”。這些代幣可以賦予其所有人某種權利,例如社交媒體渠道、 水電等等。所有這些資產交易都記錄在不同的區塊鏈上,并且可以通過幣安之類的交易所進行線上交易。
代幣其實是一種新型互聯網貨幣,可能會影響到一部分行業,其中一個典型的例子就是股票市場。在未來,公司股份之類的產權很有可能會以代幣的形式存儲到區塊鏈上。區塊鏈不僅限于以代幣的形式代表實物價值,也可以安全地記錄病歷、身份、歷史記錄、納稅記錄等數據。
原文鏈接: https://blog.goodaudience.com/blockchain-for-beginners-what-is-blockchain-519db8c6677a
作者: Jimi S.
1、本文只代表作者個人觀點,不代表本站觀點,僅供大家學習參考;
2、本站屬于非營利性網站,如涉及版權和名譽問題,請及時與本站聯系,我們將及時做相應處理;
3、歡迎各位網友光臨閱覽,文明上網,依法守規,IP可查。
作者 相關信息
內容 相關信息
? 昆侖專題 ?
? 十九大報告深度談 ?
? 新征程 新任務 新前景 ?
? 習近平治國理政 理論與實踐 ?
? 我為中國夢獻一策 ?
? 國資國企改革 ?
? 雄安新區建設 ?
? 黨要管黨 從嚴治黨 ?
圖片新聞