加密哈希函數

加密哈希函數定義

加密散列函數是一種算法,可以在一個數據塊上運行,例如單個文件或密碼,以產生稱為校驗和的值。

密碼散列函數的主要用途是驗證一段數據的真實性。 只有使用相同加密散列函數從每個文件生成的校驗和相同時,才能確保兩個文件相同。

一些常用的加密散列函數包括MD5SHA-1 ,但也存在許多其他散列函數。

注意:密碼散列函數通常簡稱為散列函數 ,但這在技術上並不正確。 哈希函數是一個更通用的術語,通常用於包含加密哈希函數以及其他類型的算法,如循環冗餘校驗。

加密哈希函數:一個用例

假設您下載最新版本的Firefox瀏覽器 。 無論出於何種原因,您需要從Mozilla網站以外的網站下載它。 如果沒有託管在您學會信任的站點上,您希望確保剛剛下載的安裝文件與Mozilla提供的完全相同。

使用校驗和計算器 ,您可以使用特定的加密散列函數(比如SHA-2)計算校驗和,然後將其與Mozilla網站上發布的散列函數進行比較。

如果他們是平等的,那麼你可以合理確定你下載的是Mozilla希望你擁有的下載。

查看什麼是校驗和? 有關這些特殊計算器的更多信息,以及使用校驗和的更多示例,以確保您下載的文件確實符合您的預期。

加密哈希函數是否可以被反轉?

加密散列函數旨在防止將其創建的校驗和反轉回原始文本的能力。

然而,即使它們幾乎不可能扭轉,但並不意味著它們100%保證數據安全。

稱為彩虹表的東西可以用來快速計算出校驗和的明文。 彩虹表基本上是詞典,它們列出了成千上萬,甚至數十億的這些以及相應的明文價值。

雖然這在技術上並不顛覆加密散列算法,但它可能也是如此,因為它非常簡單。 實際上,由於沒有彩虹表可以列出存在的每一個可能的校驗和,它們通常只對簡單的短語“有幫助”,比如弱密碼。

下面是一個彩虹表的簡化版本,用於展示在使用SHA-1加密散列函數時如何工作:

純文本 SHA-1校驗和
12345 8cb2237d0679ca88db6464eac60da96345513964
密碼1 e38ad214943daad1d64c102faec29de4afe9da3d
我愛我的狗 a25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

要使用校驗和計算出這些值,需要黑客了解使用哪種加密哈希算法來生成它們。

為了增加保護,一些存儲用戶密碼的網站在生成值之後但存儲之前對加密哈希算法執行附加功能。

這產生了一個新值,只有Web服務器可以理解,並且與原始校驗和不完全匹配。

例如,輸入密碼並生成校驗和後,可能會將其分成若干部分並重新排列,然後將其存儲在密碼數據庫中,或者某些字符可能與其他字符交換。 當用戶下次登錄時嘗試進行身份驗證時,Web服務器會反轉此附加功能,並再次生成原始校驗和,以驗證用戶的密碼是否有效。

這樣做有助於限制所有校驗和被盜的破解的有用性。

再一次,這裡的想法是執行一個未知的函數,以便如果黑客知道加密哈希算法但不知道這個自定義函數,那麼知道密碼校驗和是無益的。

密碼和加密哈希函數

與彩虹表類似,數據庫如何保存用戶密碼。 輸入密碼後,會生成校驗和並與使用用戶名記錄的校驗和進行比較。 如果兩者完全相同,則您可以獲得訪問權限。

考慮到密碼散列函數會產生不可逆校驗和,這是否意味著您可以將密碼設置為12345而不是12 @ 34 $ 5 ,因為校驗和本身無法被理解? 它絕對沒有 ,這就是為什麼......

正如你所看到的,僅僅通過查看校驗和就可以解密這兩個密碼:

用於12345的MD5: 827ccb0eea8a706c4c34a16891f84e7b

MD5 for 12 @ 34 $ 5: a4d3cc004f487b18b2ccd4853053818b

所以,乍一看,你可能會認為使用這些密碼絕對沒問題。 如果攻擊者試圖通過猜測MD5校驗和(沒有人這樣做)來試圖找出密碼,那麼這肯定是正確的,但是如果執行暴力或字典攻擊(這是一種常見的策略),則不是這樣。

蠻力攻擊是在猜測密碼時進行多次隨機抽取。 在這種情況下,猜測“12345”會很容易,但很難隨機找出另一個。 字典攻擊的相似之處在於,攻擊者可以從常用(和較少使用的)密碼列表中嘗試每個單詞,數字或短語,“12345”絕對是一個可以嘗試的密碼。

因此,即使加密哈希函數產生難以猜測的校驗和,您仍然應該為所有聯機和本地用戶帳戶使用複雜的密碼。

提示:如果您不確定自己是否被視為強密碼,請參閱弱密碼和強密碼的示例

有關加密哈希函數的更多信息

看起來加密散列函數似乎與加密相關,但兩者的工作方式卻截然不同。

加密是一個雙向的過程,其中某些東西被加密成不可讀,但隨後解密以再次正常使用。 您可能會加密已存儲的文件,以便任何訪問它們的用戶都無法使用它們,或者可以利用文件傳輸加密來加密通過網絡傳輸的文件,例如您在線上傳或下載的文件。

像上面描述的那樣,密碼散列函數的工作方式不同,因為校驗和不是用特殊的散列密碼來顛倒的,例如用特殊的解密密碼讀取加密文件。 加密散列函數的唯一目的是比較兩個數據,例如下載文件,存儲密碼,從數據庫中提取數據等。

加密散列函數可能為不同的數據段產生相同的校驗和。 發生這種情況時,稱為碰撞。 顯然,考慮到密碼散列函數的全部重點是為輸入到其中的每個數據進行完全獨特的校驗和,這是一個巨大的問題。

碰撞可能發生的原因是因為每個密碼散列函數產生固定長度的值而不管輸入數據如何。 例如,MD5加密散列函數為三個完全不同的數據塊生成827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983e10adc3949ba59abbe56e057f20f883e

第一個校驗碼是12345 ,第二個是700多個字母和數字,第三個是123456 。 所有三個輸入都有不同的長度,但自從使用MD5以來,結果總是只有32個字符。

正如你所看到的,對於可以創建的校驗和的數量實際上沒有限制,因為輸入中的每個微小變化應該產生完全不同的校驗和。 但是,由於一個加密哈希函數可以產生的校驗和數量有限制,所以總會有碰到碰撞的可能性。

這就是為什麼其他加密散列函數已經創建的原因。 雖然MD5生成一個32個字符的值,但SHA-1生成40個字符,SHA-2(512)生成128個字符。校驗和具有的字符數越多,發生衝突的可能性越小,因為它提供了更多的空間獨特的價值。