New*_*ang 3 cryptography hmac node.js
我已经读过,进行字符串比较并不是确定hmac签名是否匹配的首选方法.(转到步骤5)所以,在Node中,给出类似这样的东西
const hmac = crypto.createHmac("sha256", signingSecret).update(buf, encoding);
const computed = `${version}=${hmac.digest('hex')}`;
if(computed !== req.header("signature")){
throw
}
Run Code Online (Sandbox Code Playgroud)
如果不是用于字符串比较,那么这条线的首选方式是什么computed !== req.header("signature")?
普通字符串比较不是首选的原因是,一旦找到两个字符串之间的差异,它通常会返回结果.这可以为基于时间的攻击敞开大门; 如果我正在尝试猜测一条消息的正确HMAC并且我的猜测与其第一个字符中的真实字符串不同,那么我将得到一个"失败"响应,而不是差异在第二,第三,第四. ..性格.是的,时差很小,但实际上可以衡量.
首选技术是使用所谓的"恒定时间比较"功能.无论参数的位置如何,这种函数都被设计为消耗相同的时间.一旦发现不匹配就不返回,它会向攻击者提供关于不匹配位置的信息.
在Node中,相应的函数是crypto.timingSafeEqual(a,b).
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |