在Go标准库中,有一个ConstantTimeByteEq函数,如下所示:
func ConstantTimeByteEq(x, y uint8) int {
z := ^(x ^ y)
z &= z >> 4
z &= z >> 2
z &= z >> 1
return int(z)
}
现在,我了解了对恒定时间字符串(数组等)进行比较的必要性,因为常规算法可能会在第一个不相等元素之后短路。但是在这种情况下,两个固定大小的整数的常规比较是否已经在CPU级别进行了恒定时间的运算呢?
不必要。而且很难说出编译器在进行优化后将发出什么信息。对于高级“比较一个字节”,您可能会得到不同的机器代码。在侧边通道中仅泄漏一点点,可能会将您的加密从“基本坚不可摧”更改为“希望不值得破解所需的钱”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句