想知道更多關於區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】 鏈客,有問必答!!
哈希函數是密碼學中的一個重要分支,該函數是一類數學函數,它能夠在有限的合理時間內,將任意長度的消息變換成固定長度的二進制串,且不可逆,這個輸出值就是哈希值,也叫散列值或消息摘要。以hash函數爲基礎的hash算法,在數字簽名,實現數據完整性,merkle樹數據存儲和檢索等方面有着普遍的應用。
在比特幣系統中使用了兩個密碼學hash函數,一個是SHA256,另外一個是ripemd160。ripemd160主要用於生成比特幣地址,SHA256是比特幣鏈上幾乎全部加密算法的hash函數。算法
hash函數也叫散列函數,雜湊函數。它是一種單向密碼機制,也就是隻能加密,而不能解密。數學表達式能夠爲:h=H(m),其中H是哈希函數,m是要加密的信息,h是輸出的固定長度的哈希值。運算過程是設定一個初始向量,對消息補長到算法要求長度,將補長後的消息拆分紅N份數據塊,N份數據塊與初始向量經過hash算法進行迭代循環運算,最終獲得固定長度的hash值。
hash函數具備如下特色:安全
壓縮性:對任意長度的信息加密成固定長度的hash值;
單向性:hash函數的數學原理沒有逆運算,因此不能將hash值轉換成加密前的信息;
抗碰撞性:hash函數的運算過程至關複雜,包含多種數學運算和大量變量循環運算,要知足兩個不一樣的消息產生相同的hash值幾乎不可能發生;
高靈敏性:任何微小的輸入都有可能對輸出產生巨大的影響。
典型的hash函數有兩類:消息摘要算法(MD5)和安全散列算法(SHA)。函數
理想的hash函數對於不一樣的輸入獲得兩個不一樣的hash值。在實際中,若是存在兩個不一樣的信息m,m'使H(m)=H(m'),那麼就稱m和m'是該函數的一個碰撞。簡言之,hash碰撞是指兩個不一樣的消息在同一個哈希函數做用下,產生兩個相同的哈希值。
爲了保證數據安全性和不可篡改性,實際hash算法要足夠複雜使其有很強的hash抗碰撞性。
hash抗碰撞性分爲兩種:一種是弱抗碰撞性,即指定的消息x和函數H,去求消息y,使H(x)=H(y)在計算上是不可行的;另外一個是強抗碰撞性,即給定函數H,對於任意一對不一樣的消息x和y,使得H(x)=H(y)在計算上也是不可行的。區塊鏈