1. 程式人生 > >是什麼使區塊鏈防篡改

是什麼使區塊鏈防篡改

雜湊演算法是區塊鏈中保證交易資訊不被篡改的單向密碼機制。雜湊演算法接收一段明文後,會以一種不可逆的方式將其轉化為一段長度較短、位數固定的雜湊資料。


它有兩個特點:


 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼;


● 輸入的明文與輸出的雜湊資料一一對應,任何一個輸入資訊的變化,都必將導致最終輸出的雜湊資料的變化。


在區塊鏈中,通常使用SHA-256(安全雜湊演算法)進行區塊加密,這種演算法的輸入長度為256位,輸出的是一串長度為32位元組的隨機雜湊資料。


區塊鏈通過雜湊演算法對一個交易區塊中的交易資訊進行加密,並把資訊壓縮成由一串數字和字母組成的雜湊字串。區塊鏈的雜湊值能夠唯一而準確地標識一個區塊,區塊鏈中任意節點通過簡單的雜湊計算都可以獲得這個區塊的雜湊值,計算出的雜湊值沒有變化也就意味著區塊中的資訊沒有被篡改。

下面舉個例子詳細瞭解下


▌場景一、小星和阿呆在籃球場


小星:阿呆,你是不是口渴了,你要不要去買水喝,順便幫我買一瓶哈。

阿呆:呵呵,你的小心思我還不知道,你自己也口渴了吧,你去,我不去。

小星:哎哎,咱們不扯這些沒用的,來拋硬幣,好不好,正面你去,反面我去,公平吧,如何?

阿呆:好吧。

………


▌場景二、小星與阿呆即時聊天中


阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點哈。

小星:哦,要不你來我家玩吧,你順便帶上披薩。

阿呆:小星,你竟然都這麼說了,看來只能拋硬幣解決了。

小星:丫的,這個怎麼拋,我怎麼知道你有沒有搞鬼。

阿呆:嗯,那到也是,要不這樣。


1.考慮對結果加密


阿呆:我心中想一個數,假設為A,然後A在乘以一個數B,得到結果C。A是我的金鑰,我把結果C告訴你。你來猜A是奇數還是偶數,猜中了,算你贏。


小星:這不行,如果你告訴我C是12,我猜A是奇數,你可以說A是4,B是3。我猜A是偶數,你可以說A是3,B是4。要不你告訴我C是多少的時候,也告訴我B是多少。


阿呆:那這不行,告訴你C和B,不等於告訴你A是多少了,還猜個屁。不行得換個方式。


2.不可逆加密


阿呆:小星,你看這樣可以不,我想一個A,經過下面的過程:


1.A+123=B
2.B^2=C
3.取C中第2~4位數,組成一個3位數D
4.D/12的結果求餘數,得到E


阿呆:我把E和上述計算方式都告訴你,你猜A是奇數還是偶數,然後我告訴你A是多少,你可以按上述的計算過程來驗證我是否有說謊。


小星:嗯,我想想,假如阿呆你想的A為5,那麼:


5+123=128
128^2=16384
D=638 E=638mod12=53


(mod表示除法的求餘數)


小星:咦,厲害了,一個A值對應一個唯一的E值,根據E還推算不出來A。你太賤了,好吧,這個算公平,誰撒謊都能被識別出來。


小星:阿呆,你出題吧 ……


這種丟掉一部分資訊的加密方式稱為“單向加密”,也叫雜湊演算法。


問題:阿呆有沒有可能事先找出一奇一偶,按上述加密運算得到一樣的結果呢?

答案:有可能的,如何解決這個問題呢?增加上述演算法的難度,以至於阿呆很難找到。


3.雜湊演算法


一個可靠的雜湊演算法,應該滿足:


1.對於給定的資料M,很容易算出雜湊值X=F(M);
2.根據X很難反算出M;
3.很難找到M和N使得F(N)=F(M)。


密碼學中的雜湊函式有3個重要的性質,即抗碰撞性、原像不可逆、難題友好性。碰撞性,就是指阿呆事先找出一奇一偶使得雜湊結果一致,但這在計算上是不可行的。


首先,把大空間的訊息壓縮到小空間上,碰撞肯定是存在的。假設雜湊值長度固定為256位,如果順序取1,2,…2^256+1, 這2^256+1個輸入值,逐一計算其雜湊值,肯定能找到兩個輸入值使得其雜湊值相同。但不要高興的太早,因為你得有時間把它算出來,才是你的。


為什麼這麼說呢?


根據生日悖論,如果隨機挑選其中的2^128+1輸入,則有99.8%的概率發現至少一對碰撞輸入。那麼對於雜湊值長度為256位的雜湊函式,平均需要完成2^128次雜湊計算,才能找到碰撞對。如果計算機每秒進行10000次雜湊計算,需要約10^27年才能完成2^128次雜湊計算。


所以,不要想著阿呆作弊了,因為估計也活不了這麼久。當然如果計算機運算能力大幅提升,就有可能,這也是為什麼說量子計算機對區塊鏈有影響了。


那這個有什麼用途呢?


用來驗證資訊的完整性,因為如果資訊在傳遞過程中被篡改,那麼執行雜湊計算得到的雜湊值與原來的雜湊值不一樣。在區塊鏈中,雜湊函式的抗碰撞性用來做區塊和交易的完整性驗證,一有篡改就能被識別出來。