區塊鏈技術加密演算法為什麼不可篡改

區塊鏈採用密碼學的方法來保證已有資料不可能被篡改。
這個是誤解最多的部分,因為很多人一提到區塊鏈就只覺得是這個。誠然,這部分很重要,而且確實區塊鏈也因此得名,但這只是區塊鏈的定義的一部分。

 

這個部分的兩個核心要點是:

(1)密碼學雜湊函式;

(2)非對稱加密;
兩個都是密碼學的基礎概念,網上都有非常清晰的定義,我只簡單說下:
(密碼學)雜湊函式:一個函式Y=H(X),

有如下性質:

1)有X可以很容易算出Y;

2)有Y不可能算出X;

3)有Y不可能找到另一個X’使得H(X’)=Y;3.5,如果X和X’相差很小,H(X)和H(X’)則完全不相關。
     這東西主要用於驗證資訊完整性——在一個資訊後面放上這個資訊的雜湊值,這個值很小,例如256bit,而且計算方便。收到資訊之後收信人再算一遍雜湊值,對比兩者就知道這條資訊是否被篡改過了。如果被篡改過,哪怕只有一bit,整個雜湊值也會截然不同。而根據雜湊函式的性質,沒有人能夠偽造出另一個訊息具有同樣的雜湊值,也就是說篡改過的資料完全不可能通過雜湊校驗。
    非對稱加密:這東西很好理解——對稱加密就是有個金鑰,可以理解成保險箱鑰匙,你把訊息加密變成密文,沒有人能看懂這是啥,然後同一把鑰匙解密成原來的訊息。
非對稱加密就是有兩把鑰匙,一把叫公鑰,一把叫私鑰,用其中一把加密的話,只能用另一把解密,反之亦然。另一個重要的性質是,給你密文,明文和其中一把鑰匙,你還是解不出來另一把鑰匙是啥。原理基本上是基於一些困難數學問題,例如因數分解和離散對數,常用的有RSA,Diffie-Hellman和ECC(橢圓曲線),比特幣用的是橢圓曲線。
    非對稱加密除了和對稱加密一樣用於資訊加密之外,還有另一個用途,就是身份驗證。因為通常情況我們假設一對公私鑰,公鑰是公開的,而私鑰只有本人有,於是一個人如果有對應的私鑰,我們就可以認定他是本人。其中一個重要的應用就是數字簽名——某個訊息後面,發信人對這個訊息做雜湊運算,然後用私鑰加密。接著收信人首先對訊息進行雜湊運算,接著用相應的公鑰解密數字簽名,再對比兩個雜湊值,如果相同,就代表這個訊息是本人發出的而且沒有被篡改過。

 

以上是基礎知識,至於區塊鏈怎麼實現的,很簡單:
交易(資料)寫在區塊裡,簡單介紹一下yunbao區塊鏈技術。
第一個區塊叫創世區塊,寫啥都行。
    從第二個區塊開始,每個區塊的第一部分有前一區塊的雜湊值。此外,區塊裡的每一筆交易(資料),都有發起人的數字簽名來保證真實性和合法性。於是,先前區塊裡的任何資料都不可被篡改,原因見上。
到這為止有人可能會問:為什麼要弄個鏈啊?直接所有資料加個雜湊值不就行了?
因為——這個資料庫並不是靜止的啊。
資料庫的資料是會增加的,而每次增加的資料,就是一個區塊,於是這些生成時間不同的區塊,就以這種形式鏈在一起了。