一尘不染

为什么我们需要一个恒定时间*单字节*比较功能?

go

在Go标准库中,有一个ConstantTimeByteEq函数,如下所示:

func ConstantTimeByteEq(x, y uint8) int {
    z := ^(x ^ y)
    z &= z >> 4
    z &= z >> 2
    z &= z >> 1

    return int(z)
}

现在,我了解了对恒定时间 字符串
(数组等)进行比较的必要性,因为常规算法可能会在第一个不相等元素之后短路。但是在这种情况下,是否已经将两个固定大小的整数进行常规比较已经不是在CPU级别进行恒定时间的操作了?


阅读 211

收藏
2020-07-02

共1个答案

一尘不染

不必要。而且很难说出编译器在进行优化后会发出什么信息。对于高级“比较一个字节”,您可能会得到不同的机器代码。在侧边通道中仅泄漏一点点,可能会将您的加密从“基本坚不可摧”更改为“希望不值得破解所需的钱”。

2020-07-02