github 上的 cookie 签名是否需要 sha1?

Is sha1 necessary in cookie-signature on github?

我不知道为什么第42行使用sha1 在 https://github.com/tj/node-cookie-signature/blob/master/index.js

在index.js的第42行可以看到

return sha1(mac) == sha1(val) ? str : false;

我试过将其更改为

return mac == val ? str : false;

而且 sign 和 unsign 函数似乎仍然可以正常工作。

这里使用sha1的原因是什么?这是一种安全问题吗?这里需要sha1吗?

它可以帮助防止定时攻击。字符串比较将 return false 第一个不同的字符。因此,比较时间越长,字符串开头匹配的字符就越多。攻击者可以尝试猜测第一个字符,然后是下一个字符,依此类推。

当然,这样的攻击并不容易。但是,如果延迟足够低并且可以以高速率进行足够多的尝试,那么这可能是一个问题。

通过散列,比较有效地变成常数时间。