區塊鏈主要應用的密碼學有兩個部分,一個是雜湊演算法,另一個是非對稱加密。而這節課,小K君主要講一下,區塊鏈密碼學中的“雜湊演算法”是什麼?
簡單來說,雜湊演算法就是一種特殊的函式,不論我輸入多長的一串字元,只要透過這個函式,都可以得到一個固定長度的輸出值。就好比我們的身份證號碼一樣,無論你是北京人、還是上海人,每個人的身份證號碼都是18位而且全國唯一。
同理,雜湊實際也是一種壓縮對映,它可以把任意長度的輸入變換成固定長度的輸出。永遠都是固定256位元的長度。這個得到的輸出值就叫做雜湊值。
雜湊演算法有三個特點,分別是單向性、抗篡改和抗碰撞,它們賦予了區塊鏈不可篡改、匿名等特性,並保障了整個區塊鏈體系的安全。
先說第一個特點,單向性。所謂的單向性,就是指在雜湊函式中,由輸入可以得到輸出,但透過輸出卻幾乎不可能反推回輸入。比如,我們輸入已知字串 A ,得到雜湊值是F(A),但是我們透過這個雜湊值F(A),卻沒有辦法反推回來得到我們輸入的資料。
區塊鏈在資料打包成區塊的過程中,資料都會透過雜湊演算法進行加工,正是基於雜湊演算法的單向性,區塊鏈才有效保護了我們資訊的安全性。
雜湊演算法的第二個特點是抗篡改能力。所謂的抗篡改能力就是指,對於任意一個輸入,哪怕是很小的改動,比如一個標點符號,其雜湊值的變化也會非常大。
它的這個特性在區塊與區塊的連線中,就起到了關鍵性的作用。
區塊鏈的每一個區塊,都會以上一個區塊的雜湊值作為標識,透過雜湊演算法再進行加工,這樣後面區塊不僅可以查詢到前面的所有區塊,也可以驗證前面區塊資料有沒有被更改,除非有人能破解整條鏈上的所有雜湊值,否則,資料一旦記錄在鏈上,就不可能被篡改。
雜湊演算法的第三個特點是抗碰撞能力。所謂碰撞,就是輸入兩個不同的資料,最後得到了一個相同的輸出結果,就跟我們逛街時候撞衫一樣。
而抗碰撞,就是對於大部分的輸入,都能得到一個獨一無二的輸出。注意,這裡只能說出現碰撞的概率極低,但不意味著不存在碰撞,因為現存的任何一種雜湊演算法在概率學上都是無法證明不會發生碰撞的。
雜湊演算法的第三個特點主要應用在區塊鏈的賬戶地址中,在區塊鏈的世界中,任何一筆交易或者賬戶的地址都是完全依託於雜湊演算法生成的,這樣做的目的就是保證交易或者賬戶地址在區塊鏈網路中的唯一性,無論我這筆轉賬轉了多少錢或轉給了多少個人,在區塊鏈這個大賬本中都是唯一的存在。
總的來說,雜湊演算法在區塊鏈技術中是最基礎的存在,它就像是我們體內的白細胞,不僅區塊鏈的每個部分都離不開它,而且它還賦予了區塊鏈種種特點,保護著整個區塊鏈體系的安全。