區塊演義(二),我只是一條鏈
上一篇文章作為開篇介紹了區塊鏈的歷史。而這裡區塊演義的第二篇,將為大家介紹區塊鏈最核心的部分。
有請區塊鏈自我介紹。
「大渣好,我是區塊鏈,我姓區塊,不是區喔,名叫塊鏈。」
不開玩笑了,入正題。
正題的第一步,你需要了解單向函數。
「給定任意兩個集合X和Y。 函數f:X Y 稱為單向的,如果對每一個x屬於X,很容易計算出函數f(x)的值,而對大多數y屬於Y, 要確定滿足y=f(x)的x是計算上困難的(假設至少有這樣一個x存在)。」
不想看數學定義的看這兒,單向函數就是給定一條二進位序列,例如0100010101110101001010101001010101,輸出一個固定長度的,通常比輸入短的二進位序列,例如根據上述輸入,函數生成100101001。
厲害的單向函數有一個名叫牽一髮動全身的性質,就是把輸入序列改動一點點,例如上面輸入序列隨便一個位數從零改成一,那麼函數輸出與100101001相差甚遠,例如輸出立刻變成101110000。厲害的單向函數世界上還果真有!他們就是MD-5和SHA-256安全散列。
單向函數的性質可以做什麼呢?數字摘要!也就是利用單向函數,根據文件(本質是二進位序列)生成一段很小位數的二進位數列。如果單向函數厲害,我們利用牽一髮動全身效應,可以防止文件被串改。
不考慮實現電子貨幣和其他功能的實現,最簡單的區塊鏈只是一個數據結構,如下圖:
註:此圖來自中本聰的論文
圖中叫block的就是區塊,說白了就是由0到1組合成的一大段二進位碼。而block中會有一段二進位碼是上一個區塊的HASH值(HASH是一種很厲害的單向函數,忘記了可以看看本文的開始處)。區塊中還有一段二進位碼名叫NONCE,暫且在這兒理解為待定代數X。TX暫且理解為區塊的大段二進位碼的其他內容,根據設計者就區塊鏈技術要實現的目標功能而安排不同的內容。
有了HASH函數在,block與block之間便產生一個可驗證的關係,即區塊鏈,且一環扣一環。只要有一個block其中的位數被篡改了,後面的block的hash值自然對不上,於是大家都知道這一條鏈中的某block被篡改過。
這就是單獨一條區塊鏈的靜態不可篡改性。
到這兒,區塊鏈的靜態特點已經說完了,到目前,至少我們拿到一條區塊鏈,從第一個區塊開始,我們就可以驗證它有木有被篡改過。
那麼如何保證網路上只對一條區塊鏈形成共識呢?而不是多條?這就要用另外一種機制來保障了,這是區塊鏈在生成中的動態防篡改機制了。這個話題留給下一篇文章。
總結,區塊鏈的不可篡改性分兩個:1.靜態防篡改(hash實現)。2.動態防篡改(即維持只有一條是公認的鏈,預先透漏一個,交由挖礦實現)。
TAG:全球大搜羅 |