區塊鏈技術架構分析(4)-hash演算法

區塊鏈技術架構分析(4)-hash演算法

來自專欄區塊鏈基礎教程1 人贊了文章

Hash,一般翻譯做「散列」,也有直接音譯為「哈希」的,就是把任意長度的輸入(又叫做預映射pre-image)通過散列演算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

哈希能夠實現數據從一個維度向另一個維度的映射,通常使用哈希函數實現這種映射。通常業界使用y = hash(x)的方式進行表示,該哈希函數實現對x進行運算計算出一個哈希值y。

A、哈希演算法的特點

l 哈希演算法接受一段明文後,以一種不可逆的方式,將其轉化為一段長度較短、位數固定的散列數據,計算高效。

l collision-free 即衝突概率小,如果兩個哈希值是不相同的(根據同一函數),那麼這兩個哈希值的原始輸入也是不相同的;如果兩個哈希值相同,兩個輸入值很可能是相同的,但不絕對肯定二者一定相等(可能出現哈希碰撞)。

l 能夠隱藏原始信息:例如區塊鏈中各個節點之間對交易的驗證只需要驗證交易的信息熵,而不需要對原始信息進行比對,節點間不需要傳輸交易的原始數據只傳輸交易的哈希即可,常見演算法有SHA系列和MD5等演算法。

l 加密過程不可逆,即無法通過輸出的散列數據倒推原本的明文是什麼。

l 輸入的明文與輸出的散列數據一一對應,任何一個輸入信息的變化,都必將導致最終輸出的散列數據的變化,衝突的概率非常小。

B、哈希的用法

哈希在區塊鏈中用處廣泛,其一我們稱之為哈希指針(Hash Pointer),哈希指針是指該變數的值是通過實際數據計算出來的且指向實際的數據所在位置,即其既可以表示實際數據內容又可以表示實際數據的存儲位置。如下圖所示:

image

HashPointer在區塊鏈中主要有兩處使用,第一個就是構建區塊鏈數據結構,從上面的區塊數據結構中就可以知道,每個區塊都包含了上一個區塊的hash值(即hash

pointer),這樣的好處在於後面區塊可以查找前面所有區塊中的信息,而且區塊的HashPointer的計算包含了前面區塊的信息從而一定程度上保證了區塊鏈的不易篡改的特性。第二個就是用於構建Merkle

Tree.,Merkle Tree的各個節點使用HashPointer進行構建。

哈希還在其他技術中有所應用例如:交易驗證以及數字簽名等等。


推薦閱讀:

觀劉巍然老師同態加密文章筆記
《Crick 4 *4 *4 遺傳密碼錶》的起草origin與修訂evolution (七)
《Crick 4 *4 *4 遺傳密碼錶》的起草origin與修訂evolution (五)
密碼學基礎-Hash演算法
AES演算法實現

TAG:哈希函數 | 密碼學 | 演算法 |