這個是誤解最多的部分,因為很多人一提到區塊鏈就只覺得是這個。誠然,這部分很重要,而且確實區塊鏈也因此得名,但這只是區塊鏈的定義的一部分。
這個部分的兩個核心要點是:(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(橢圓曲線),比特幣用的是橢圓曲線。
非對稱加密除了和對稱加密一樣用于信息加密之外,還有另一個用途,就是身份驗證。因為通常情況我們假設一對公私鑰,公鑰是公開的,而私鑰只有本人有,于是一個人如果有對應的私鑰,我們就可以認定他是本人。其中一個重要的應用就是數字簽名——某個消息后面,發信人對這個消息做哈希運算,然后用私鑰加密。接著收信人首先對消息進行哈希運算,接著用相應的公鑰解密數字簽名,再對比兩個哈希值,如果相同,就代表這個消息是本人發出的而且沒有被篡改過。
以上是基礎知識,至于區塊鏈怎么實現的,很簡單:
交易(數據)寫在區塊里。
第一個區塊叫創世區塊,寫啥都行。
從第二個區塊開始,每個區塊的第一部分有前一區塊的哈希值。此外,區塊里的每一筆交易(數據),都有發起人的數字簽名來保證真實性和合法性。于是,先前區塊里的任何數據都不可被篡改,原因見上。
到這為止有人可能會問:為什么要弄個鏈啊?直接所有數據加個哈希值不就行了?
因為——這個數據庫并不是靜止的啊。
數據庫的數據是會增加的,而每次增加的數據,就是一個區塊,于是這些生成時間不同的區塊,就以這種形式鏈在一起了。
至于如何增加區塊,就涉及到第三個部分——共識算法。
新聞熱點
疑難解答