6

Facebook 应用程序密钥是一个 32 个字符(0-9、af)的字符串,因此它表示一个 128 位字节数组。Facebook 使用它作为使用 HMAC-SHA256 生成签名请求的密钥。这是正确的用法吗?我认为 HMAC-SHA256 应该使用 256 位密钥。

4

2 回答 2

9

如果密钥的长度大于哈希的内部块大小,HMAC 将 HASH(key) 用作密钥。因此,大于哈希内部块大小的密钥不会提供比相同大小的密钥更好的安全性。根据 HMAC 规范,较短的密钥被零填充以等于散列的内部块大小。

在 HMAC-SHA-256 中使用 128 位密钥是不可能的。如果您的意思是 128 位用零填充到 512 位,那么对于短期身份验证来说可能没问题。我建议至少 256 位,理想情况下你会想要使用等于底层哈希的内部块大小的东西。

于 2012-08-31T01:04:51.107 回答
6

该页面说 256 位签名来自有效负载(facebook 正在签名的内容)+您的 128 位salt

所以是的,这听起来像是正确的用法。

秘密的 16 个字节(32 个字符)实际上并不是一个密钥,因为它用于加密和解密某些东西。相反,它是用于更改数字签名结果的一些数据(盐),通过非常轻微地更改输入,以便只有知道确切秘密和确切有效负载的人才能创建签名。

于 2012-08-31T00:52:35.173 回答