Python < 2.7.7中的抗时间攻击比较

-1 投票
1 回答
654 浏览
提问于 2025-04-18 18:25

在Python 2.7.7版本中,新增了一个叫做hmac.compare_digest的功能,它的目的是为了让字符串比较更安全,能抵御一些时间攻击。

可惜的是,2.7.7版本其实也不算太久远,但很多系统还是在用更老的版本,比如Ubuntu 14.04。

那么,在这些老版本的系统中,有没有办法比较认证字符串,而不需要用户自己去编译Python(而且还得定期重新编译以保持安全更新)呢?

1 个回答

1

你需要避免短路运算。可以使用类似下面的代码:

sum(i != j for i, j in zip(hmac1.digest(), hmac2.digest()))

这里有个和 compare_digest 一样的注意事项:

注意:如果 a 和 b 的长度不同,或者发生了错误,理论上可能会通过时间攻击泄露关于 a 和 b 的类型和长度的信息,但不会泄露它们的具体值。

撰写回答