區塊鏈概念1:Hash 算法

想知道更多區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】
鏈客,有問必答!!

做用
在學習哈希算法前,咱們須要知道哈希在區塊鏈的做用
哈希算法的做用以下:
區塊鏈經過哈希算法對一個交易區塊中的交易信息進行加密,並把信息壓縮成由一串數字和字母組成的散列字符串。git

區塊鏈的哈希值可以惟一而精準地標識一個區塊,區塊鏈中任意節點經過簡單的哈希計算都接得到這個區塊的哈希值,計算出的哈希值沒有變化也就意味着區塊鏈中的信息沒有被篡改。github

定義算法

hash (哈希或散列)算法是信息技術領域很是基礎也很是重要的技術。它能任意長度的二進制值(明文)映射爲較短的固定長度的二進制值(hash 值),而且不一樣的明文很難映射爲相同的 hash 值。安全

例如計算一段話「hello blockchain world, this is yeasy@github」的 md5 hash 值爲 89242549883a2ef85dc81b90fb606046。網絡

$ echo 「hello blockchain world, this is yeasy@github」|md5 
89242549883a2ef85dc81b90fb606046 
這意味着咱們只要對某文件進行 md5 hash 計算,獲得結果爲 89242549883a2ef85dc81b90fb606046,這就說明文件內容極大機率上就是 「hello blockchain world, this is yeasy@github」。可見,hash 的核心思想十分相似於基於內容的編址或命名。函數

注:md5 是一個經典的 hash 算法,其和 SHA-1 算法都已被 證實 安全性不足應用於商業場景。性能

一個優秀的 hash 算法,將能實現:學習

正向快速:給定明文和 hash 算法,在有限時間和有限資源內能計算出 hash 值。 
逆向困難:給定(若干) hash 值,在有限時間內很難(基本不可能)逆推出明文。 
輸入敏感:原始輸入信息修改一點信息,產生的 hash 值看起來應該都有很大不一樣。 
衝突避免:很難找到兩段內容不一樣的明文,使得它們的 hash 值一致(發生衝突)。 
衝突避免有時候又被稱爲「抗碰撞性」。若是給定一個明文前提下,沒法找到碰撞的另外一個明文,稱爲「抗弱碰撞性」;若是沒法找到任意兩個明文,發生碰撞,則稱算法具備「抗強碰撞性」。區塊鏈

流行的算法this

目前流行的 hash 算法包括 MD5(已被證實不夠安全)和 SHA-1,二者均以 MD4 爲基礎設計的。

MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest 的縮寫。其輸出爲 128 位。MD4 並不足夠安全。

MD5(RFC 1321)是 Rivest 於1991年對 MD4 的改進版本。它對輸入仍以 512 位分組,其輸出是 128 位。MD5 比 MD4 複雜,而且計算速度要慢一點,但更安全一些。MD5 並不足夠安全。

SHA1 (Secure Hash Algorithm)是由 NIST NSA 設計,它的輸出爲長度 160 位的 hash 值,所以抗窮舉性更好。SHA-1 設計時基於和 MD4 相同原理,而且模仿了該算法。

爲了提升安全性,NIST NSA 還設計出了 SHA-22四、SHA-25六、SHA-384,和 SHA-512 算法(統稱爲 SHA-2),跟 SHA-1 算法原理相似。

性能

通常的,hash 算法都是算力敏感型,意味着計算資源是瓶頸,主頻越高的 CPU 進行 hash 的速度也越快。

也有一些 hash 算法不是算力敏感的,例如 scrypt,須要大量的內存資源,節點不能經過簡單的增長更多 CPU 來得到 hash 性能的提高。 
數字摘要

顧名思義,數字摘要是對數字內容進行 hash 運算,獲取惟一的摘要值來指代原始數字內容。

數字摘要是解決確保內容沒被篡改過的問題(利用 hash 函數的抗碰撞性特色)。

數字摘要是 hash 算法最重要的一個用途。

在網絡上下載軟件或文件時,每每同時會提供一個數字摘要值,用戶下載下來原始文件能夠自行進行計算,並同提供的摘要值進行比對,以確保內容沒有被修改過。 

相關文章
相關標籤/搜索