HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)

目录

一 HMAC--Hash-based Message Authentication

1. **认证**:

2. **防止重放攻击**:

3. **加密**:

4. **数据完整性**:

5. **随机数生成**:

二 实例


一 HMAC--Hash-based Message Authentication

哈希操作本身通常是无密钥的,例如MD5、SHA-1、SHA-256、SHA-3等,它们接受任意长度的输入数据并产生固定长度的哈希值。然而,当密钥与哈希操作结合时,通常是为了实现某种形式的认证或加密,最典型的例子是HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)。

在HMAC中,密钥的作用如下:

1. **认证**:

 HMAC使用一个共享密钥结合哈希函数来生成一个消息摘要,这个摘要可以用来验证消息的完整性和来源。发送方使用密钥和消息计算HMAC,接收方使用相同的密钥和接收到的消息重新计算HMAC,然后比较两个HMAC值。如果它们匹配,那么接收方可以确信消息没有被篡改,并且来自正确的发送方。

2. **防止重放攻击**:

在某些情况下,HMAC可以防止重放攻击,即攻击者截获合法消息并稍后重新发送以欺骗接收方。由于HMAC使用了密钥,攻击者如果没有密钥,就无法生成正确的HMAC值。

3. **加密**:

虽然哈希函数本质上是非可逆的,不适合用于传统意义上的加密,但结合密钥的哈希函数可以用于构建某些加密协议,如一些密钥派生函数(KDFs)和身份验证协议。

4. **数据完整性**:

 在没有密钥的哈希操作中,任何拥有原始数据的人都可以计算出相同的哈希值。但是,在HMAC中,由于密钥的加入,即使知道原始数据,没有正确的密钥也无法计算出正确的HMAC值,从而确保了数据的完整性。

5. **随机数生成**:

在一些场景下,结合密钥的哈希函数可以用于生成伪随机数,例如在一些密码学协议中用于生成会话密钥。

综上所述,密钥在哈希操作中的使用主要集中在增强安全性,提供认证和防止篡改,它是实现安全通信和数据完整性的重要工具。在HMAC等协议中,密钥是与数据一同进行哈希计算的,这样产生的哈希值就不仅依赖于数据,也依赖于密钥,从而增加了破解难度和安全性。

二 实例

当然,我可以给出一个HMAC(Hash-based Message Authentication Code)使用的具体实例,这在Web开发和API认证中非常常见。HMAC结合了密钥和哈希函数,用于保证数据的完整性和来源认证。下面是一个使用Python语言和HMAC进行消息认证的例子:


import hmac
import hashlib

# 假设这是你的密钥,通常应该保存在一个安全的地方
key = b'secret_key'

# 这是你想要发送的消息
message = b'Hello, World!'

# 使用HMAC和SHA-256哈希算法生成消息认证码
h = hmac.new(key, message, digestmod=hashlib.sha256)
hmac_code = h.hexdigest()

# 输出HMAC码
print(f"HMAC code: {hmac_code}")

# 当接收方收到消息和HMAC码时,他可以使用同样的密钥和消息再次计算HMAC码
received_message = b'Hello, World!'
received_hmac_code = hmac_code

# 接收方使用HMAC和SHA-256再次计算HMAC码
v = hmac.new(key, received_message, digestmod=hashlib.sha256)
recomputed_hmac_code = v.hexdigest()

# 比较两个HMAC码是否一致,如果一致,则消息没有被篡改
if recomputed_hmac_code == received_hmac_code:
    print("Message is authentic and has not been tampered with.")
else:
    print("Warning: Message may have been tampered with or the key does not match.")

在这个例子中,发送方和接收方共享一个密钥`secret_key`。发送方计算消息`Hello, World!`的HMAC码,并将其与消息一起发送给接收方。接收方使用相同的密钥和收到的消息重新计算HMAC码,并将其与收到的HMAC码进行比较。如果两者匹配,接收方就可以确信消息没有被中间人篡改,并且确实是来自持有相同密钥的发送方。

这个过程可以应用于各种场景,比如API请求的安全性检查,其中客户端使用私有密钥对请求数据进行签名,服务器端使用相同的密钥验证签名,以确保请求的完整性和真实性。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HMACHash-based Message Authentication Code)是一种基于哈希函数的消息认证码,用于验证数据的完整性和真实性。 HMAC 的原理可以简单描述为:将密钥和消息一起输入哈希函数(如SHA-256),生成一个固定长度的哈希值。这个哈希值就是 HMAC。只有拥有相同密钥的人才能重新生成相同的 HMAC,因此 HMAC 可以用于验证消息的真实性和完整性。 具体来说,HMAC 的计算过程如下: 1. 选择一个合适的哈希函数 H(如 SHA-256)和一个密钥 K。 2. 对消息 M 进行填充(padding)。 3. 将填充后的消息 M 和密钥 K 输入哈希函数 H 中计算出 HMAC 值。 HMAC = H((K ⊕ opad) || H((K ⊕ ipad) || M)) 其中,|| 表示拼接操作,opad 和 ipad 是两个固定的常量,具体定义如下: opad = 0x5c5c5c5c… ipad = 0x36363636… 如果密钥 K 的长度小于哈希函数的块长度,则将密钥 K 填充至块长度。 如果密钥 K 的长度大于哈希函数的块长度,则将密钥 K 进行哈希运算,得到新的密钥 K',再将 K' 填充至块长度。 4. 将生成的 HMAC 值与接收到的 HMAC 值进行比较,如果相同,则消息 M 的真实性和完整性得到验证。 HMAC 的优点在于它不仅可以验证消息的完整性,还可以防止对密钥的攻击。由于 HMAC 使用了哈希函数,因此它具有不可逆性和雪崩效应,即使稍微修改了消息或密钥,生成的 HMAC 值也会有很大的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值