node.js - 在 Node 中比较 hmac 签名的首选方法是什么?
问题描述
我读过进行字符串比较不是确定 hmac 签名是否匹配的首选方法。(转到第 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")
?
解决方案
不首选普通字符串比较的原因是它通常会在发现两个字符串之间存在差异时立即返回结果。这可以为基于时间的攻击打开大门;如果我试图猜测消息的正确 HMAC 并且我的猜测与第一个字符中的真实字符串不同,我会比第二个、第三个、第四个不同时更快地得到“失败”响应。 .. 特点。是的,时差很小,但确实可以测量。
首选技术是使用所谓的“恒定时间比较”功能。这种函数旨在消耗相同的时间,而不管参数不同的位置如何。通过在发现不匹配时不立即返回,它不会向攻击者提供有关不匹配位置的信息。
在 Node 中,适当的函数是crypto.timingSafeEqual(a,b)。
推荐阅读
- java - KafkaConsumer visibility across threads
- amazon-web-services - CloudWatch 警报 - 异常检测
- php - 使用 laravel 8 仅验证部分工作
- pyspark - 在事件 SqlSensor 上运行作业(插入表中)
- c# - 在 C# 中对字典列表进行分组
- java - 如何将我的Optaplanner程序封装成一个函数供其他平台调用?
- vim - 格式化vim中的文本列(对齐)
- java - Java 无法转换为 TLS AWS EC2 Debian
- python - 来自 JSON 的 Python 嵌套字典 - KeyError
- sonarqube - 声纳本地问题 SB4062:无法从程序集中加载“IsTestFileByName”任务