數(shù)據(jù)完整性對于保護(hù)通信至關(guān)重要,通常通過稱為 HMAC 的機(jī)制實現(xiàn)。了解它是什么以及今天如何使用它!
概述
數(shù)據(jù)完整性檢查對于安全通信至關(guān)重要。它們使通信方能夠驗證他們收到的消息的完整性和真實性。在 FTPS、SFTP 和 HTTPS 等安全文件傳輸協(xié)議中,數(shù)據(jù)完整性/消息身份驗證通常通過稱為 HMAC 的機(jī)制實現(xiàn)。在這篇文章中,我們解釋了 HMAC 是什么、它的基本內(nèi)部工作原理以及它如何保護(hù)數(shù)據(jù)傳輸。
數(shù)據(jù)完整性檢查在安全文件傳輸中的重要性
業(yè)務(wù)決策和流程高度依賴于準(zhǔn)確可靠的數(shù)據(jù)。如果數(shù)據(jù)被篡改并且這些變化未被注意到,它可能會影響決策和流程。因此,如果您的數(shù)據(jù)必須通過網(wǎng)絡(luò)傳輸,尤其是像 Internet 這樣危險的網(wǎng)絡(luò),您必須采取預(yù)防措施來保持其完整性,或者至少知道它是否已被黑客入侵或更改。這正是 FTPS、SFTP 和 HTTPS 等安全文件傳輸協(xié)議配備防止數(shù)據(jù)完整性威脅機(jī)制的原因。目前最常用的機(jī)制是 HMAC。
什么是 HMAC?
HMAC 代表 Keyed-Hashing for Message Authentication。它是通過對數(shù)據(jù)(待驗證)和共享密鑰運(yùn)行加密哈希函數(shù)(如 MD5、SHA1 和 SHA256)獲得的消息驗證碼。HMAC 在RFC 2104 中指定。
HMAC 與數(shù)字簽名幾乎相似。它們都強(qiáng)制執(zhí)行完整性和真實性。他們都使用加密密鑰。它們都使用哈希函數(shù)。主要區(qū)別在于數(shù)字簽名使用非對稱密鑰,而 HMAC 使用對稱密鑰(無公鑰)。
HMAC 的工作原理
要了解 HMAC 的工作原理,讓我們首先檢查如何使用散列函數(shù)(單獨)對文件傳輸進(jìn)行數(shù)據(jù)完整性檢查。假設(shè)客戶端應(yīng)用程序從遠(yuǎn)程服務(wù)器下載文件。假設(shè)客戶端和服務(wù)器已經(jīng)就通用哈希函數(shù)達(dá)成一致,例如 SHA2。
在服務(wù)器發(fā)出文件之前,它首先使用 SHA2 哈希函數(shù)獲取該文件的哈希值。然后它將該哈希(例如消息摘要)與文件本身一起發(fā)送。客戶端收到這兩項(例如下載文件和哈希)后,獲取下載文件的 SHA2 哈希,然后將其與下載的哈希進(jìn)行比較。如果兩者匹配,則意味著文件未被篡改。
如果攻擊者設(shè)法攔截下載的文件,更改文件的內(nèi)容,然后將更改后的文件轉(zhuǎn)發(fā)給接收者,那么該惡意行為就不會被忽視。這是因為,一旦客戶端通過約定的散列算法運(yùn)行被篡改的文件,生成的散列將與下載的散列不匹配。這將使接收者知道文件在傳輸過程中被篡改。
所以哈希函數(shù)應(yīng)該保護(hù)你的文件,對吧?沒那么快。雖然散列函數(shù)可以建立數(shù)據(jù)完整性,但它不能建立真實性。客戶端如何知道它收到的消息來自合法來源?
這就是為什么 FTPS、SFTP 和 HTTPS 等安全文件傳輸協(xié)議使用 HMAC 而不僅僅是散列函數(shù)的原因。當(dāng)兩方通過這些安全文件傳輸協(xié)議交換消息時,這些消息將伴隨 HMAC 而不是普通的散列。HMAC 使用散列函數(shù)和共享密鑰。
共享密鑰為交換方提供了一種確定消息真實性的方法。也就是說,它為雙方提供了一種驗證他們收到的消息和 MAC(更具體地說,HMAC)是否真的來自他們應(yīng)該進(jìn)行交易的一方的方法。
密鑰啟用此功能,因為它是在密鑰交換期間生成的,這是一個需要雙方參與的初步過程。只有參與密鑰交換的那兩個方會知道共享密鑰是什么。反過來,如果他們使用共享密鑰計算消息的相應(yīng) MAC,他們將是唯一能夠得出相同結(jié)果的人。
為什么 HMAC 適合文件傳輸?
除了啟用數(shù)據(jù)完整性和消息認(rèn)證的能力之外,HMAC 是出色的文件傳輸數(shù)據(jù)完整性檢查機(jī)制的另一個原因是它的效率。正如文章了解散列中所討論的,散列函數(shù)可以獲取任意長度的消息并將其轉(zhuǎn)換為固定長度的摘要。這意味著,即使您有相對較長的消息,它們相應(yīng)的消息摘要也可以保持較短,從而使您能夠最大限度地利用帶寬。
選擇 HMAC 函數(shù)
由于 HMAC 的屬性(尤其是其加密強(qiáng)度)高度依賴于其底層哈希函數(shù),因此通常基于該哈希函數(shù)來識別特定的 HMAC。所以我們有 HMAC 算法,其名稱為 HMAC-MD5、HMAC-SHA1 或 HMAC-SHA256。
您可能聽說過 MD5 的碰撞相關(guān)漏洞。值得注意的是,盡管 HMAC-MD5 具有底層的 MD5 哈希函數(shù),但并未受到這些漏洞的影響。無論如何,SHA-1 在密碼學(xué)上仍然比 MD5 強(qiáng),而SHA-2(以及它的不同形式,如 SHA-224、SHA-256、SHA-512)在密碼學(xué)上也比 SHA1 強(qiáng),所以您需要考慮到這一點.
那么您應(yīng)該使用哪個 HMAC?您通常會根據(jù)其底層哈希函數(shù)選擇 HMAC。因此,例如,如果性能對您來說比安全性更重要,您會想要使用 HMAC-MD5。另一方面,如果安全性更為關(guān)鍵,那么您可能想要使用 HMAC-SHA256 來代替。