HMAC的工作原理,为什么HMAC适合文件传输?

数据完整性对于保护通信至关重要,通常通过称为 HMAC 的机制实现。了解它是什么以及今天如何使用它!

概述

数据完整性检查对于安全通信至关重要。它们使通信方能够验证他们收到的消息的完整性和真实性。在 FTPS、SFTP 和 HTTPS 等安全文件传输协议中,数据完整性/消息身份验证通常通过称为 HMAC 的机制实现。在这篇文章中,我们解释了 HMAC 是什么、它的基本内部工作原理以及它如何保护数据传输。

HMAC的工作原理,为什么HMAC适合文件传输?-南华中天

数据完整性检查在安全文件传输中的重要性

业务决策和流程高度依赖于准确可靠的数据。如果数据被篡改并且这些变化未被注意到,它可能会影响决策和流程。因此,如果您的数据必须通过网络传输,尤其是像 Internet 这样危险的网络,您必须采取预防措施来保持其完整性,或者至少知道它是否已被黑客入侵或更改。这正是 FTPS、SFTP 和 HTTPS 等安全文件传输协议配备防止数据完整性威胁机制的原因。目前最常用的机制是 HMAC。

什么是 HMAC?

HMAC 代表 Keyed-Hashing for Message Authentication。它是通过对数据(待验证)和共享密钥运行加密哈希函数(如 MD5、SHA1 和 SHA256)获得的消息验证码。HMAC 在RFC 2104 中指定。

HMAC 与数字签名几乎相似。它们都强制执行完整性和真实性。他们都使用加密密钥。它们都使用哈希函数。主要区别在于数字签名使用非对称密钥,而 HMAC 使用对称密钥(无公钥)。

HMAC的工作原理,为什么HMAC适合文件传输?-南华中天

HMAC 的工作原理

要了解 HMAC 的工作原理,让我们首先检查如何使用散列函数(单独)对文件传输进行数据完整性检查。假设客户端应用程序从远程服务器下载文件。假设客户端和服务器已经就通用哈希函数达成一致,例如 SHA2。

在服务器发出文件之前,它首先使用 SHA2 哈希函数获取该文件的哈希值。然后它将该哈希(例如消息摘要)与文件本身一起发送。客户端收到这两项(例如下载文件和哈希)后,获取下载文件的 SHA2 哈希,然后将其与下载的哈希进行比较。如果两者匹配,则意味着文件未被篡改。

如果攻击者设法拦截下载的文件,更改文件的内容,然后将更改后的文件转发给接收者,那么该恶意行为就不会被忽视。这是因为,一旦客户端通过约定的散列算法运行被篡改的文件,生成的散列将与下载的散列不匹配。这将使接收者知道文件在传输过程中被篡改。

所以哈希函数应该保护你的文件,对吧?没那么快。虽然散列函数可以建立数据完整性,但它不能建立真实性。客户端如何知道它收到的消息来自合法来源?

这就是为什么 FTPS、SFTP 和 HTTPS 等安全文件传输协议使用 HMAC 而不仅仅是散列函数的原因。当两方通过这些安全文件传输协议交换消息时,这些消息将伴随 HMAC 而不是普通的散列。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?您通常会根据其底层哈希函数选择 HMAC。因此,例如,如果性能对您来说比安全性更重要,您会想要使用 HMAC-MD5。另一方面,如果安全性更为关键,那么您可能想要使用 HMAC-SHA256 来代替。