【发布时间】:2012-08-25 19:10:57
【问题描述】:
Facebook 应用程序密钥是一个 32 个字符(0-9,a-f)的字符串,因此它表示一个 128 位字节数组。 Facebook uses this as the key to generate signed request using HMAC-SHA256。这是正确的用法吗?我认为 HMAC-SHA256 应该使用 256 位密钥。
【问题讨论】:
标签: cryptography hmac
Facebook 应用程序密钥是一个 32 个字符(0-9,a-f)的字符串,因此它表示一个 128 位字节数组。 Facebook uses this as the key to generate signed request using HMAC-SHA256。这是正确的用法吗?我认为 HMAC-SHA256 应该使用 256 位密钥。
【问题讨论】:
标签: cryptography hmac
如果密钥的长度大于哈希的内部块大小,HMAC 将 HASH(key) 用作密钥。因此,大于散列内部块大小的密钥不会提供比相同大小的密钥更好的安全性。根据 HMAC 规范,较短的键被零填充以等于散列的内部块大小。
不可能将 128 位密钥与 HMAC-SHA-256 一起使用。如果您的意思是 128 位用零填充到 512 位,那么对于短期身份验证来说可能没问题。我建议至少 256 位,理想情况下你会希望使用等于底层哈希的内部块大小的东西。
【讨论】:
hash_hmac function如何处理不够长的键。
【讨论】:
hash_hmac function,其中第三个参数是$secret。看到这条线$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
Returns a string containing the calculated message digest。消息摘要与签名相同,在这种情况下,术语 key 与 salting 的概念同义。查看en.wikipedia.org/wiki/Hash-based_message_authentication_code 表明 key 在散列之前连接到有效负载上。