HMAC 与密钥派生

仅通过计算 hash_func(key + msg) 获得 MAC(消息认证码)被认为是不安全的(参见详细信息)。建议改用 HMAC 算法,例如 HMAC-SHA256HMAC-SHA3-512 或其他安全的 MAC 算法。

什么是 HMAC?

HMAC = 基于哈希的消息认证码(使用密码学哈希函数计算的 MAC 码):

HMAC(key, msg, hash_func) -> hash

所得 MAC 码是与秘密密钥混合的消息哈希。它具有哈希的密码学属性:不可逆抗碰撞等。

hash_func 可以是任何密码学哈希函数,例如 SHA-256SHA-512RIPEMD-160SHA3-256BLAKE2s

HMAC 用于保证消息的真实性完整性,有时也用于密钥派生

密钥派生函数(KDF)

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

function(password) -> key

可以把 SHA256 用作一种非常简单的 KDF 函数:直接对密码进行哈希。但不要这样做,因为这不安全。简单哈希容易受到字典攻击

作为一种更复杂的 KDF 函数,可以使用称为“”的随机值,通过计算 HMAC(salt, msg, SHA256) 从密码派生密钥。盐与派生密钥一同存储,之后用于再次从密码派生出相同密钥。

HKDF(基于 HMAC 的密钥派生)适合从高熵的输入密钥材料中派生一个或多个密钥,但不适合直接处理低熵密码。从密码派生密钥时,应使用专门的密码 KDF,如 PBKDF2BcryptScryptArgon2。后续将讨论这些 KDF 函数。

HMAC 计算——示例

要更好地理解 HMAC 及其计算方式,可以试用此在线工具:https://www.freeformatter.com/hmac-generator.html

尝试计算 HMAC('sample message', '12345', 'SHA256')

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

请亲自尝试上述示例。

results matching ""

    No results matching ""