區塊鏈小知識:哈希算法成為區塊鏈的基本構成部分

Hash,也可翻譯成“散列”,它是一種加密算法,一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程,並且無論信息正文中的內容有多大,哈希函數總能用固定長度的數據來表述正文裡的所有內容,即哈希函數是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

區塊鏈小知識:哈希算法成為區塊鏈的基本構成部分


哈希的算法有很多種類,在比特幣系統中使用的是SHA-256和RIPEMD-160算法,不過除了生成地址的其中一個環節外使用到RIPEMD-160算法外(由於RIPEMD也是哈希算法的一種,RIPEMD-160有時候也被稱為哈希160),其它使用哈希運算的地方的都是用SHA-256算法,這在2008年是被認為最安全最先進的算法之一,哈希256算法提供了由數字和字母構成的長度為64的十六進制字符串(換算成二進制的話,就剛好是256個0或者1二進制數字串),該算法有個特點,就是不管你輸入的是一個詞語還是一本書的內容,比如輸入《紅樓夢》這本鉅著,最終生成的哈希值都是64個字符串,而且只要輸入信息有一小點變化,比如一個空格或一個小數點,輸出的哈希值都會變化。該算法除了有輸出長度固定的特點外,還有單向不可逆以及防止篡改特性,就是說如果輸入A,經過哈希運算得到B,但不能夠輸入B而反推得到A;另外就是輸入的A中,只要有一小點改變,如一個字母或一個字節的變動,經過哈希算法得出來數值都會有改變,就不是之前的B了。由於哈希算法得出的哈希值是固定長度,即範圍有限,但輸入數據卻是無限的,那就存在著兩個不同的A,經過哈希算法之後得到相同的B的可能性,這種情況就叫“哈希碰撞”,比特幣系統就巧妙利用這個“哈希碰撞”,讓礦工們用窮舉法不斷去運算出哈希值,即工作量證明方式去碰撞出正確答案的哈希值,誰第一個碰撞出來誰就獲得比特幣獎勵,故此挖礦的算力實際指的是每秒鐘多少次哈希碰撞。

區塊鏈小知識:哈希算法成為區塊鏈的基本構成部分


下面舉例說明:

假設現在有交易數據C、D、E,隨機數用Nonce表示,難度要求是哈希值必須是000開頭,那麼系統裡計算的哈希值如下:

Ha1= Hash(C+Nonce1)

Ha2= Hash(D+ Ha1+Nonce2)

Ha3= Hash(E+ Ha2+Nonce3)

同時要求Ha1、Ha2、Ha3都是000開頭。在這種情況下由於哈希值不能逆推,而C、D、E的數值已經確定,那就只能不斷地去試隨機數Nonce,直到找到滿足Ha1、Ha2、Ha3都是000開頭的數值,這個試的過程就形象稱之為挖礦。

區塊鏈小知識:哈希算法成為區塊鏈的基本構成部分



分享到:


相關文章: