timingSafeEqual()对比哈希
Cyber Security

timingSafeEqual()对比哈希

在对比密码哈希的时候,会用到timingSafeEqual() ,如下代码
export async function comparePasswords({ password, salt, hashedPassword, }: { password: string salt: string hashedPassword: string }) { const inputHashedPassword = await hashPassword(password, salt) // 为什么不直接 return inputHashedPassword === hashedPassword? return crypto.timingSafeEqual( Buffer.from(inputHashedPassword, "hex"), Buffer.from(hashedPassword, "hex") ) }
在密码学和安全编程中,crypto.timingSafeEqual() 是一个非常重要的函数,用于比较两个字符串或缓冲区的内容是否相等。它的主要目的是防止时序攻击(Timing Attack)

什么是时序攻击?

时序攻击是一种侧信道攻击(Side-Channel Attack),攻击者通过观察程序执行的时间差异来推断敏感信息。例如:
  • 在密码验证的场景中,如果程序使用普通的字符串比较(如 === 或 ==),当比较的字符串不匹配时,程序可能会提前返回 false,而匹配时则需要比较所有字符。
  • 这种时间差异可以被攻击者利用,逐步推断出正确的密码或哈希值。

crypto.timingSafeEqual() 的作用

这是一种安全的比较方法,确保无论两个缓冲区的内容是否匹配,比较操作的时间都是相同的。这样可以防止攻击者通过时间差异推断出敏感信息。