HMAC和密钥导出(HMAC and Key Derivation)

简单地计算hash_func(key+msg)以获得MAC(消息认证码)被认为是不安全的。建议改用HMAC算法,例如HMAC-SHA256或HMAC-SHA3-512或其他安全MAC算法。

什么是HMAC?

HMAC= Hash-based Message Authentication Code (MAC code,使用加密哈希函数计算):

HMAC(key, msg, hash_func) -> hash

结果MAC代码是混合了密钥的消息散列。它具有哈希的密码特性:不可逆、抗冲突等。
hash_func可以是任何加密哈希函数,如SHA-256、SHA-512、RIPEMD-160、SHA3-256或BLAKE2s。
HMAC用于消息真实性、消息完整性,有时用于密钥推导

密钥导出函数(key derivation function,KDF)

密钥导出函数(KDF)是将可变长度密码转换为固定长度密钥(位序列)的函数:

function(password) -> key

作为一个非常简单的KDF函数,我们可以使用SHA256:只需对密码进行哈希。不要这样做,因为这是不安全的。简单哈希容易受到字典攻击
作为更复杂的KDF函数,您可以通过使用称为“salt”的随机值计算HMAC(salt、msg、SHA256)来派生密码,该值与派生密钥一起存储,稍后用于从密码中再次派生同一密钥。
使用HKDF(基于HMAC的密钥推导)进行密钥推导的安全性低于现代KDF,因此专家建议使用更强的密钥推导函数,如PBKDF2、Bcrypt、Scrypt和Argon2。我们将在后面讨论所有这些KDF函数。

HMAC 计算- 举例

要更好地了解HMAC及其计算方法,请尝试以下在线工具:Free Online HMAC Generator / Checker Tool (MD5, SHA-256, SHA-512) - FreeFormatter.com

 

 计算HMAC('sample message', '12345', 'SHA256'):

HMAC('sample message', '12345', 'SHA256') =
  'ee40ca7bc90df844d2f5b5667b27361a2350fad99352d8a6ce061c69e41e5d32'

在Python中,我们可以按如下方式计算HMAC代码(使用hashlib和hmac库):

import hashlib, hmac, binascii

def hmac_sha256(key, msg):
  return hmac.new(key, msg, hashlib.sha256).digest()

key = b"12345"
msg = b"sample message"
print(binascii.hexlify(hmac_sha256(key, msg)))

运行上面的代码示例:***HMAC SHA256 Examples in Python - Python Repl - Replit

上面的代码将计算并打印预期的HMAC代码(如我们前面的示例中所示):

ee40ca7bc90df844d2f5b5667b27361a2350fad99352d8a6ce061c69e41e5d32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值