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