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