问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

密码学基础:Hash、MAC、HMAC的区别与联系

创作时间:
作者:
@小白创作中心

密码学基础:Hash、MAC、HMAC的区别与联系

引用
CSDN
1.
https://m.blog.csdn.net/wangyx1234/article/details/140584650

在信息安全领域,数据的完整性保护是一个核心问题。Hash、MAC和HMAC是三种常用的数据完整性保护机制,它们各有特点和适用场景。本文将详细介绍这三种机制的区别与联系,帮助读者更好地理解它们的工作原理和应用场景。

Hash

Hash是一种从一段数据中创建小的数字“指纹”的方法。就像一个人的指纹代表一个人的信息一样,Hash对输入的数据进行整理,生成一个代表该输入数据的“指纹”数据。通常该指纹数据也可称之为摘要、散列、校验和。常见的Hash有CRC、SHA1、SHA2、SHA3、SHA256和MD5。

生成Hash_code的数学表达式可以简写为:

hash_code = sha256(message);

Hash具有抗碰撞的特性,即在指定的输入范围内保证两个不同的数据生成的摘要是不同的。借助此特性,Hash最大的用途是通过小体积的摘要值,来执行数据的完整性校验。以上图为例,发送方将1G的消息数据和MD5算法生成的128bit的摘要发送给接收方;接收方接收到消息+摘要后也使用MD5算法重新计算消息的摘要,然后对比接收到的摘要与计算后的摘要,若两者相等就代表消息没有发生误码或者被篡改。

常见的Hash函数:

  • Hash函数并不能保证数据来自合法的发送方,如果是不法分子使用MD5算法发送一段数据+摘要给到数据接收者,那么接收者仍旧会接收该数据,从而造成安全风险。

MAC

MAC,即消息认证码。与Hash类似,它也用一段小的数据(称为MAC)来代表一段数据,不同的是,MAC在生成消息认证码时使用对称加密来保证数据来自约定好的合法的伙伴。

mac_code的计算方法可以通过下述数学公式进行表达:

mac_code = mac_algorithm(mac_key + message);

MAC的认证机制如下:

  1. 发送者和接收者存储对称加密的密钥。
  2. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
  3. 收信者用同样的MAC算法计算收到的消息的MAC值,并对比接收到的mac与计算后的mac。

从本质上讲,MAC是一种算法,它将消息与共享密钥组合在一起作为输入,输出一个代表共享密钥和消息的数据。MAC可用于数据完整性和身份验证。消息、密钥中的任何更改都会导致不同的MAC,因此只要没有密钥,攻击者就无法识别和验证MAC。

MAC算法可能受到长度扩展攻击

MAC算法面临的常见威胁是长度扩展攻击。要实现长度扩展攻击只需要知道密钥的长度和使用的算法即可。

假设MAC算法是:

mac_code = md5("my_key" + "my_message1")

原始要发送的消息+mac是:

"my_message1" + mac1

然而使用过md5计算的开发人员都知道,MD5计算具备可循环冗余计算的特性:

md5_code1 = md5("base");
md5_code2 = md5(md5_code1  + "extern");

其中,md5_code1、md5_code2都是正确的md5 mca。即在计算md5 mac时,可以在上一次的基础上追加一个数据,得到的MD5数据仍旧是正确的MD5 mac。

那么作为攻击者,要实现长度扩展攻击,主要需完成下面几步:

  1. 设法获取MAC算法的KEY的加密数据secret的长度(不需要知道key的值)。
  2. 生成一个附加消息(extern)。使用原始消息对应的md5_code1与扩展的消息(攻击数据)生成md5_code2。
  3. 重新组合secret + base + extern + md5_code2,这样接收方在接收到数据后,运行md5算法并对secret执行解密数据,就会发现数据是对的,然而实际上,攻击者在原始的base信息后面增加了一段恶意的数据extern,这中恶意数据可能是一些窃取、攻击类信息,容易造成安全隐患。

HMAC

HMAC算法本质属于MAC算法的一种。其保留了对称密钥、生成MAC消息认证码的特点。但是进一步结合了哈希函数和密钥加密技术。

根据用于计算MAC的哈希函数,可以定义许多示例,目前主要集合了MD和SHA两大系列消息摘要算法。其中MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。

HAMC通常可以使用下述数学表达式来简单概述:

HMAC = Hash(key1 + Hash(key2 + message))

HMAC使用两个密钥,并执行两轮哈希计算。该算法的第一轮从原始消息和第一个密钥K1生成内部哈希HMAC1。然后,第二轮使用生成的内部哈希和第二个密钥K2创建最终的HMAC。接收方计算自己的HMAC,并将其与接收的HMAC进行比较,以验证消息的身份验证和完整性,如下图所示:

HAMC算法具有以下特点:

  • HMAC输出和原有的哈希算法长度一致。
  • HMAC机制依赖于两轮对称加密时密钥的安全性,密钥一旦泄露就不安全了。

HMAC算法的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下:

  1. 先由客户端向服务器发出一个验证请求。
  2. 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
  3. 客户端将收到的随机数与自己的密钥进行HMAC-SHA1运算并得到一个结果作为认证证据传给服务器(此为响应)。
  4. 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-SHA1运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。

从挑战-应用的使用场景看HMAC算法的安全性:

HMAC算法引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:

  1. 使用的密钥是双方事先约定的,第三方不可能知道,因此数据的收发方是可信的。由上面介绍应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。
  2. HMAC算法与一般的加密重要的区别在于它具有“瞬时”性,即破解只在本条消息有效,对其他消息被破解无法提供帮助,而加密算法被破解后,以前的加密消息就可能被解密。

总结

  • 本文主要介绍Hash、MAC、HMAC的联系与区别,层层递进地描述了如何增加数据的安全性。
  • 本文还介绍了长度扩展攻击的基本实现原理,HMAC算法通过执行两轮Hash运算对抗这种攻击。
  • hash只能验证数据完整性,无法保证数据防篡改,计算过程无密钥参与。
  • MAC既可以验证数据完整性,也可以验证数据是由原始发送方发出的,计算过程有密钥参与,使用对称加密算法构造。
  • HMAC是mac的一种,可以验证数据完整性,也可以验证数据是由原始发送方发出的,使用hash函数来构造,hmac输出长度与原始HASH算法的长度一样。
  • HASH旨在检测数据的意外更改,而HMAC旨在检测故意更改。
  • MAC算法通常不单独使用。取而代之的是,它们被集成到加密算法中,构建了我们所说的AEAD(具有关联数据的身份验证加密)。它们还可以与哈希函数结合使用,创建HMAC、SHA1-HMAC和MD5-HMAC等算法。
  • HMAC和数字签名都确保了消息的完整性和真实性。完整性意味着消息未被更改。真实性表示收件人确信邮件来自发件人。
  • MAC和HMAC之间的主要区别在于消息认证码(代表消息的一小段数据,就像数据的指纹)的计算方式。在MAC算法中,消息认证码通常是通过将加密函数直接应用于消息和密钥来计算的。HMAC使用更复杂的结构,涉及哈希函数的两次传递,以及内部和外部填充的使用。
  • HMAC可以任何HASH算法一起使用,使其成为MAC应用程序的灵活选择。HMAC已被广泛用于各种协议和标准,包括IPsec、SSL/TLS和SSH。
  • HMAC的缺点是其使用共享密钥,这存在不可否认性问题。如果发送方或接收方的密钥遭到泄露,攻击者将很容易创建未经授权的消息,实现中间人攻击。
  • 当代密码学的关键支柱是数据机密性、数据完整性、身份验证和不可否认性。我们可以通过下述文章进一步了解密码学相关的知识。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号