哈希算法與加密通信、數字簽名


作為通信工程的學生,我在學習《信息論與編碼》這門課的時候了解過關於加密解密的一些知識,但覺得不夠深入,不甚過癮。

這幾天學習了跟密碼學有很大關聯的哈希算法,跟大家分享一下。

 

哈希算法是什么

 

    哈希,英文為Hash,有時翻譯為散列,所以哈希函數又叫做散列函數。度娘的解釋是“

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

哈希函數的運算結果就是哈希值,通常簡稱為哈希。

 

哈希算法的特點

 

哈希算法應該具備三個基本點:

    1.獨一無二,兩個不同的數據,要有不相同的哈希

    2.安全,給定數據M容易算出哈希值X,給定X不可算出M(單向算法)

    3.長度固定,給定一種哈希算法,不管輸入多大數據,輸出長度固定

    *當然,安全性只是相對而言,因為輸入取值范圍無限而哈希長度固定的話,如果輸入足夠龐大,肯定會找到兩個一樣的哈希值

假如出現了兩個不同輸入有相同輸出的情況,稱為碰撞(collision)。不同的哈希算法,位數越多,則安全級別越高,或者說抗碰撞性越好。

 

哈希算法的作用

 

    哈希的獨一無二保證了:如果數據在存儲或傳輸過程中有絲毫損壞,那它的哈希就會改變。哈希函數最常見的一個作用就是進行完整性校驗(Integrity Check),完成即數據無損壞。哈希函數的基本作用是給大數據算出一個摘要性的長度固定的字符,即哈希。

    哈希也可以叫做Checksum(校驗值)、Digest(摘要)、Fingerprint(指紋),大抵是一個意思:哈希可以代表數據本身。

 

哈希算法的分類與區別

 

    總體上分為兩類:普通哈希;加密哈希(cryptographic hash function)

    加密哈希跟普通哈希的區別就是安全性,一般原則是只要一種哈希算法出現過碰撞,就會不被推薦成為加密哈希了,只有安全度高的哈希算法才能用作加密哈希。

同時加密哈希其實也能當普通哈希來用,Git版本控制工具就是用SHA-1這個加密哈希算法來做完整性校驗的。一般來講越安全的哈希算法,處理速度也就越慢,所以並不是所有的場合都適合用加密哈希來替代普通哈希。

 

在密碼學領域,有兩個算法都是把數據做輸入,而輸出是一段誰也看不懂的數據。其中一個就是哈希算法,另外一個是加密算法。注意,哈希算法和加密算法是完全不同的。  

  • 哈希算法的輸出長度是固定的,而加密算法的輸出長度是跟數據本身長度直接相關的。

  • 哈希是不可以逆向運算出數據的,而加密算法的輸出是要能夠逆向運算出數據的。

  • 這里主要是強調加密哈希算法只是被用在加密過程中,但是它本身不是加密算法。

 

 

哈希算法的應用

 

    哈希算法有很多種,長度越長的算法基本認為越安全。安全度低的哈希算法被認為是普通哈希算法,主要用來做完整性校驗。安全度高的被稱為加密哈希算法,會被用在加密算法中。
    實際中常見的哈希算法有MD5、SHA-1和SHA-256等等,其中MD5通常用來進行數據校驗,SHA-1曾經是加密哈希算法,但是目前已經被除名,也只能做為一種安全度更高的校驗算法了。SHA-256依然是廣泛使用的加密哈希算法,在比特幣生成地址以及POW工作量證明算法中都會用到。

    主要應用大場景有兩個:

 

    1、網站注冊

        當我們提交用戶名密碼的時候,用戶名被會直接保存到網站的數據庫中,但是密碼卻不是直接保存的,而是先把密碼轉換成哈希,保存到數據庫中的其實是哈希。所以,即使是公司后台管理人員,也拿不到用戶的密碼。這樣,如果萬一公司數據庫泄露了,用戶的密碼依然是安全的。而當用戶自己登錄網站的時候,輸入密碼提交到服務器,服務器上進行相同的哈希運算,因為輸入數據沒變,所以哈希也不會變,登錄也就成功了
 

    2、區塊鏈和加密貨幣        

        比特幣地址生成的時候,就用到了 SHA-256 算法,POW 也就是工作量證明,用的也是這個算法。

 

所以,基本上凡是涉及到密碼學的地方,都會或多或少的用到哈希函數。
 

哈希的基本作用就是提供一個數據的摘要或者指紋,通常的使用場景就是完整性校驗。哈希算法有很多種,一般來講哈希越長的算法,安全性也就越高,安全度足夠高的哈希,或者說沒有任何人能夠成功實現碰撞的哈希,才有資格被考慮用在加密場合,而這類的哈希算法也被叫做加密哈希算法。

  

總而言之,哈希是密碼學的基礎,理解哈希是理解數字簽名和加密通信等技術的必要前提。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM