【问题标题】:What is the preferred way of comparing hmac signatures in Node?在 Node 中比较 hmac 签名的首选方法是什么?
【发布时间】:2018-07-23 20:02:32
【问题描述】:

我已经读到,进行字符串比较不是确定 hmac 签名是否匹配的首选方法。 (Go to Step 5) 所以,在 Node 中,给定这样的东西

const hmac = crypto.createHmac("sha256", signingSecret).update(buf, encoding);
const computed = `${version}=${hmac.digest('hex')}`;

if(computed !== req.header("signature")){
   throw
}

如果不用于字符串比较,那么执行此行的首选方式是:computed !== req.header("signature")

【问题讨论】:

标签: node.js cryptography hmac


【解决方案1】:

不首选普通字符串比较的原因是它通常会在发现两个字符串之间存在差异时立即返回结果。这可以为基于时间的攻击打开大门;如果我试图猜测消息的正确 HMAC 并且我的猜测与第一个字符中的真实字符串不同,我会比第二个、第三个、第四个不同时更快地得到“失败”响应。 .. 特点。是的,时差很小,但确实可以测量。

首选技术是使用所谓的“恒定时间比较”功能。这种函数旨在消耗相同的时间,而不管参数不同的位置如何。通过在发现不匹配时不立即返回,它不会向攻击者提供有关不匹配位置的信息。

在 Node 中,适当的函数是 crypto.timingSafeEqual(a,b)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多