什麼是加密哈希? [初學者指南]

已發表: 2019-08-07
目錄
  • 什麼是加密哈希?

  • 加密哈希解釋

  • 加密哈希函數屬性

  • 常用哈希算法

  • 加密貨幣中的散列

  • 密碼存儲中的哈希函數

  • 包起來

  • 很有可能,在你和你的朋友編造了一個代碼來互相傳遞其他人無法理解的信息的那一天。 至少你認識這樣的人。

    一些像這樣的人認真對待這款遊戲並繼續將其變成了職業。

    其他人成為了魔術師——所謂的心術師。 在密碼的幫助下,他們利用自己的“精神力量”猜出卡片、數字等。

    這個簡單的兒童遊戲變成了所謂的加密、散列和所有其他函數,這些函數從給定的輸入中生成看似不可讀的代碼。

    今天,我們將深入編碼的神奇世界,看看密碼散列什麼、它的內部工作原理和它的應用程序。

    所以,事不宜遲,讓我們直接進入。

    什麼是加密哈希?

    密碼散列函數是一種用於安全目的哈希函數 它有幾個區別於非加密屬性的屬性。 讓我們一步一步地分解它。

    什麼是哈希?

    散列是用於壓縮數據的方法。

    儘管如此,它並不是每個人都知道的典型壓縮,例如 .zip 或 .rar 文件。

    散列使​​用散列算法為數據創建代碼 代碼代表一串字符,充當該文件的“指紋”。

    我們都知道指紋很小,但它們包含的數據量很大。 您知道,諸如我們的姓名、面孔、地址和其他敏感信息之類的信息。 散列是類似的——它採用任意大小的數據並將其轉換為相對較小的字符序列。

    無論輸入的大小如何,在散列時總是得到固定長度的輸出

    哈希函數示例

    所以這裡有一個例子來說明這是如何發生的。 對於此演示,我們將使用 256 位安全散列算法,稱為 SHA-256。 它是最常見的散列算法之一,而且事實證明——它也被比特幣使用

    信息消息的哈希
    你好3639EFCD08ABB273B1619E82E78C29A7DF02C1051B1820E99FC395DCAA3326B8
    歡迎來到 TechJury B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B
    (整篇文章的內容) 9247D0E6C7A2A45976DCC3D2393A52658B6DDFC846d8AF5743400EA12FB9DE74

    看,雖然消息的長度不同,但它們都得到一個 64 個字符的哈希值。 這也稱為哈希值摘要

    如果您對一本書甚至整個圖書館的內容進行哈希處理,您將獲得相同的固定長度結果。 您也可以使用其他類型的數據(視頻、圖片等)執行此操作。

    什麼是偉大的關於哈希是,你會得到一個完全不同的散列值,即使你做最小改動。 它被稱為雪崩效應

    例如,如果你的女朋友/男朋友刪除了你前任的所有照片,文件夾的哈希值就會改變。 這樣,您無需檢查每張圖片就知道出了什麼問題。

    讓我們再看一個例子,說明哈希函數在實踐中的作用。 對於下一個示例,我對“什麼是 VPN? ”文章,它看起來像這樣:

    然後我從文章中刪除了一個詞並再次對其進行了哈希處理。 結果如下:

    刪除單個單詞完全改變了哈希值 如果您想檢查是否對文件進行了任何更改,這將特別有用。

    當您處理大量信息時,它甚至更有幫助。 例如,一個加密貨幣區塊鏈每天存儲數千筆交易。

    現在讓我們更深入地了解加密散列的真正含義。

    加密哈希解釋

    當您需要安全性和隱私時,加密哈希就派上用場了。 加密散列的缺點是它通常比其他類型的散列 如果您需要快速散列並且不需要高級別的安全性 - 非加密散列更好。 例如 - 如果您正在創建一些非敏感數據的索引。

    非加密和加密散列之間的主要區別在於後者極難破解。 請注意,這並非不可能。 儘管如此,加密哈希使得破解哈希幾乎是不可能的。

    要使散列函數成為加密散列,它必須具有多個屬性。

    加密哈希函數屬性

    如果您想將散列用於加密目的,散列函數必須滿足幾個要求才能被認為是安全的。

    屬性 #1 – 速度

    如果你喜歡花哨的詞——加密哈希函數應該是計算效率高的。 這意味著散列函數應該能夠在幾分之一秒內生成散列。

    來源

    屬性 #2 – 雪崩效應

    雪崩效應意味著即使消息的微小變化也會導致散列值的重大變化

    信息消息的哈希
    歡迎來到 TechJury B7FFC27E0A6F559E1F63A927B6132A42124CC790F9EFD0FCFF4C3B653AA0DF4B
    歡迎來到 Techjury 66251AE6324F670BF988465E49B9CEAA2F8C4E72E1D61336D3794301116C092B

    在第二條消息中使用小寫的“j”完全改變了哈希碼

    這是一個簡單的哈希函數示例,但您明白了。 它非常實用,可以快速顯示是否有任何數據被更改。

    屬性 #3 加密哈希函數應該是確定性的

    這意味著無論您同一輸入使用哈希函數多少次,您將始終獲得相同的輸出 這很明顯,因為如果您為同一條消息獲得隨機散列,則整個過程將毫無意義。

    屬性 #4 – 預映像電阻(單向函數)

    這意味著很難通過輸出獲得輸入。

    簡而言之,您無法通過反向加密哈希函數來獲取數據。 儘管如此,這並不意味著不可能看到消息。

    這是交易。

    有兩種方法可以找到散列消息。

    1. 將哈希與現有的哈希列表進行比較,例如:Dehash.me。 通常,網絡犯罪分子擁有自己的翻譯(去哈希)消息數據庫。
    2. 執行暴力攻擊。

    要使用蠻力破解散列,您必須選擇一條消息,對其進行散列,然後將其與您擁有的散列進行比較。 最好的情況——你從第一次嘗試就得到了它。 儘管如此,這種情況發生的可能性非常小。

    最壞的情況 - 您在上次嘗試中發現它。 這意味著您必須散列所有可能的消息並將它們與您擁有的消息進行比較。 數量不同,取決於哈希算法

    為了舉例,讓我們使用 SHA-256。 在這種情況下,您必須找到2 256 -1哈希值優先。 可以肯定地說,這不可能在幾輩子內完成,然後就讓它留在那裡。

    現在。

    加密散列的原像抵抗特性散列與加密的爭論中起著重要作用

    看——你可以解密加密的消息,但你不能加密哈希做同樣的事情

    您可以將哈希視為冰沙。 您無法像從冰沙中提取香蕉和牛奶一樣,從哈希中提取消息。

    另一方面,加密更像是一個保險箱。 它可以保護您的貴重物品,但總有一把鑰匙可以打開它。

    特性 #5 – 抗碰撞性

    這意味著兩個不同的消息不應該能夠產生相同的哈希值 從數學的角度來看,這無論如何都是不可能的。

    您已經知道哈希值具有固定長度。 這意味著輸出組合有限 另一方面,輸入是無限的 因此,理論上,兩條不同的消息有可能產生相同的哈希值

    儘管如此,密碼學中散列函數使得散列衝突的機率幾乎可以忽略不計。

    看。

    所有這些屬性都確保了加密散列的安全性和可用性 所以是時候了解不同的加密哈希函數了。

    常用哈希算法

    散列算法有不同的類別(家族)。 它們之間的核心區別在於每個產生的哈希值及其安全屬性。

    以下是最常用的:

    消息摘要算法 (MD)

    MD5 是許多公司選擇的散列函數,但在 2004 年被破壞。當成功碰撞或針對它的前映像攻擊時,散列算法被認為是破壞的。 儘管如此,許多網站仍繼續使用 MD5 哈希函數進行文件驗證。

    例如,當您下載一個文件時,您可以將其哈希值與站點上的哈希值進行比較,以確保沒有人篡改過它。

    MD 系列由 MD2、MD3、MD4、MD5(所有這些都已損壞)和 MD6(不那麼流行)組成。

    下面是 MD5哈希函數示例

    信息MD5 哈希
    技術陪審團FECE553512085FF6B5E213C8EFF9F30D

    MD5 產生一個 128 位的哈希值,長度為 32 個字符。

    由於其缺陷,消息摘要算法不再被視為加密哈希函數

    安全散列算法(SHA)

    最大的加密散列函數家族由四類組成:

    • SHA-0
    • SHA-1
    • SHA-2
    • SHA-3

    SHA-0 有很多缺陷,並沒有被廣泛使用。 SHA-1 試圖修復它們,但在 2005 年被破壞了。

    SHA-2 及其子類在今天被普遍使用,直到 SHA-3 證明自己是一種更安全的功能。

    SHA-2 系列由四個成員組成 – SHA-224、SHA-256、SHA-384 和 SHA-512,它們的不同之處在於其哈希值的位數 到目前為止,還沒有對 SHA-2加密哈希算法的成功攻擊

    以下是一些使用 SHA-2 類的哈希函數示例

    信息技術陪審團
    SHA-256 FF3E4985DAFF59392EAE60DEC66EC823CAF9575B81903729053A999B9B2C708E
    SHA-384 77653BC173A561E3378373F64E447FB3AEDC691F387BB599656E6AB63B9C5D34

    523C298C59C94802A478F8C3F36E9CDF

    SHA-512 C975F1074E969FAEA76C15084881F7694DE4D542F9E4DF934AFA52470952A362

    25F7ED63D023AB05746DDAFDFED96D57A7AF5344EB91589A09952D102DD3AB04

    RACE 完整性原語評估消息摘要 (RIPEMD)

    最初,RIPEMD 是為一個名為 RIPE 的歐盟項目創建的。 RIPEMD 系列中有五個散列函數。

    • RIPEMD
    • RIPEMD-128
    • RIPEMD-160
    • RIPEMD-256
    • RIPEMD-320

    2004 年,原始的 RIPEMD哈希函數發生了衝突 這就是它不再使用的原因。 目前,RIPEMD-160 是最常見的。 這是它的外觀:

    信息RIPEMD-160 摘要
    技術陪審團ca25dc64fb00c8becb21eddf50805fbc106eed00

    漩渦浴缸

    這個加密散列函數名稱與家電製造商無關。 漩渦星系啟發算法的名稱。

    Whirlpool哈希算法的有趣之處在於,它的創建者之一是 Vincent Rijmen,他是AES高級加密標準的共同創建者

    Whirlpool 是一個 512 位的哈希函數,其摘要表示一個 128 個字符的字符串。

    加密散列函數一個例子

    信息惠而浦哈希
    技術陪審團2E9A775FA4450549FCB6F6CDC4761865715D46FF8003E93CC614EF7C9E3D42A93

    D5A663B4E48674C5155417D686D81ABDBC12FB32A1B650C5E44F24E80156E7D

    這些是當今最常見的哈希算法

    所以,既然您了解了散列的基礎知識,讓我們看看它在現實生活中的應用。

    加密貨幣中的散列

    我們已經解釋了比特幣是什麼以及區塊鍊如何工作的,所以我們將直接進入散列。

    密碼散列函數是cryptocurrencies必要的,因為它保證的blockchain的最重要的特徵之一-不變性

    由於加密貨幣區塊鏈處理大量交易,因此它們使用散列。 這是一種比在分類帳中保留每筆交易的每條記錄更實用和安全的方法。

    在比特幣的情況下,礦工運行一系列 SHA-256 函數來創建塊的哈希值。 然後後者接收時間戳。 一旦節點達成共識,區塊就會被添加到區塊鏈中。 該塊不僅有自己的哈希,而且還包含前一個哈希,從而將它們鏈接在一起。

    由於雪崩效應,任何篡改塊的嘗試都是不可能的。 如果有人試圖更改區塊中的交易,他們也必須更改每個連續的交易。 這樣的操作將需要如此多的計算能力和時間,這實際上是不可能的

    這使得散列成為區塊鏈安全性的關鍵特徵。

    現在。

    不同的加密貨幣在其區塊鏈中使用不同的哈希算法。

    例如,比特幣使用 SHA-256 進行工作量證明。 然而,比特幣使用兩種哈希算法來生成公共地址(密鑰)——SHA-256 和 RIPEMD-160。 這是由中本聰完成的,目的是為公鑰提供更好的保護並降低衝突的機率。

    另一方面,以太坊使用 Keccak-256哈希算法,這是 SHA-3 的基礎。

    在撰寫本文時,還沒有對這些算法中的任何一種進行成功攻擊。

    即使您不進入加密貨幣市場,您仍然每天都在使用散列函數。

    怎麼樣?

    密碼存儲中的哈希函數

    公司使用四種主要技術來存儲我們的密碼——純文本、加密和散列函數 最後一種方法是這些技術中的兩種或多種的組合。

    讓我們看看有什麼區別。

    以純文本形式存儲密碼 - 一個很大的禁忌

    以純文本形式存儲密碼是……聽起來就是這樣。

    像這樣:

    用戶名:約翰·史密斯

    密碼:johnsmith93

    該公司的數據庫包含相同的信息——用戶:John Smith,密碼:johnsmith93。

    如果公司重視客戶的隱私,則應避免這種情況。 (希望Facebook 的人會讀到這個。)

    這種方法的缺點是顯而易見的——如果網絡犯罪分子滲透到公司的數據庫中,他們可以看到所有的用戶名和密碼。

    使用加密存儲密碼

    加密是保護密碼的更好方法。 它會將您的密碼轉換為不可讀的數字和字母序列。

    這是它的工作原理:

    用戶名:約翰·史密斯

    密碼:johnsmith93

    當公司使用加密來保護您的密碼時,數據庫條目如下所示:

    用戶名:約翰·史密斯

    密碼:I8Zdy1QBthsk2ie1HHsl+66bf20fDDcdCtXURqa07iQ=

    如果網絡犯罪分子獲得了這個密碼,它就毫無用處——他們不能用它來闖入賬戶。 儘管如此,理論上它可以被解密。

    如果惡意行為者獲得了您的加密密碼,他們可以使用各種工具對其進行解密。 儘管如此,與僅獲取純文本密碼相比,它需要更多的時間和更高的計算技能。

    幸運的是,有足夠強大的加密算法可以作為保護密碼的安全方法。

    通過散列算法存儲密碼

    散列加密經常被誤認為是同一個東西並且可以互換使用。 然而,它們之間有一個關鍵的區別

    散列函數與加密一樣,也會將您的密碼轉換為不可讀的數字和字母序列。 關鍵的區別是它只能以一種方式工作 與解密不同,您無法逆轉散列過程。話雖如此,如果網絡犯罪分子獲得了您密碼的哈希值,通常他們無能為力。

    有許多哈希函數可用,但讓我們在示例中使用 SHA-256。

    用戶名:約翰·史密斯

    密碼(散列):e7c95991f28e529b4d3b37611e5f3b6a6a43600ce148af0c42d3d38c06365af5

    現在。

    儘管散列無法還原為其原始文本,但仍有大量消息及其散列。 不幸的是,如果惡意行為者獲得其哈希值,他們仍然可以破解您的密碼。 值得慶幸的是,如果您使用強密碼,發生這種情況的可能性非常小。 在這種情況下,我們將使用不同的示例。

    密碼存儲中的哈希函數示例

    假設您的密碼是 123456。(永遠不要使用那個密碼,而是創建一個強密碼。)

    如果我們使用 SHA-256散列算法,這是它的散列

    8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

    不幸的是,這個散列配置在一個去散列消息列表中。

    問題更大,因為許多人使用相同的密碼。 因此,如果數據庫被黑客入侵並且網絡犯罪分子找到了密碼的哈希值,他們可以將其用於每個使用相同密碼的用戶。 更不用說許多人對不同的帳戶使用相同的密碼,這將使他們脫離煎鍋並進入火中。

    不過,您可以做一些事情來防止這種情況發生。

    首先,使用強密碼並為不同的帳戶創建不同的密碼。

    您可以做的另一件事是在哈希中添加“ salt ”。 鹽醃哈希增加了額外的價值,您的密碼,並產生不同的密碼哈希為每個輸入。

    例如,每個使用密碼 123456 和“salts”的用戶都會得到不同的哈希值。

    每個示例都是123456加鹽哈希

    $2y$10$pIxpMnhlQmt1t.EUYK1G/eHkb7Roo/XhPybKyFZSAqk/50BW10a8。

    $2y$10$sCLqOpeA4R.St/8IaUWF9.m01MM4YbY.qTwbCY3.K5z.cd5lwxL6W

    那麼,公司可以保護您的密碼的最佳方式是什麼?

    它是上述所有技術的組合——例如 Dropbox 所做的。

    來源: Dropbox

    所以這就是你每天處理散列的方式,甚至沒有意識到。

    包起來

    總而言之——散列有很多好處。

    您可以散列任何類型的數據——無論是用於索引,還是用於檢查更改。 這使得散列對於合約、下載、密碼存儲等很有用。

    加密貨幣也在發展。 不僅僅是我們現在擁有的玩家,還有新玩家正在熱身加入其中。 甚至Facebook 也會發布 Libra ,所以我們一定會更多地使用哈希。

    也許 Facebook 會為其他大公司發布自己的加密貨幣鋪平道路——為什麼不使用新的哈希機制呢? 只有時間會給出答案。

    下次見!

    常問問題

    什麼是哈希值?

    您可以將哈希值視為任何信息的指紋——文件、文件夾、交易塊等。一旦將哈希函數應用於任何數據,後者就會收到一個哈希值。

    它由一個固定長度的字符串組成——像這樣:

    信息哈希值
    你好D44426ACA8AE0A69CDBC4021C64FA5AD68CA32FE
    什麼是密碼學?

    密碼學是使用代碼(如散列和加密)保護數據的方法。

    只要需要更高的安全性和隱私性,開發人員就會應用密碼學。 它將純文本(或其他數據)轉換為不可讀的隨機字符字符串。 這保證了信息安全不被窺探。

    什麼是哈希函數?

    散列函數是轉換隨機大小的數據為字符的一個對應的固定長度的字符串,也稱為散列的操作

    有兩類散列函數——非加密和加密散列函數 後者用於加密貨幣和密碼存儲,並提供更高的安全性。