我遇到了以下函数 crypto/subtle 包,这引起了我很大的好奇心,希望有人能解释一下它背后的目的。谢谢,
// ConstantTimeByteEq returns 1 if x == y and 0 otherwise.
27 func ConstantTimeByteEq(x, y uint8) int {
28 z := ^(x ^ y)
29 z &= z >> 4
30 z &= z >> 2
31 z &= z >> 1
32
33 return int(z)
34 }
最佳答案
它可以防止针对密码系统的定时攻击:任何代码路径都需要完全相同的时间。
如果您不注意时间安排,您会打开一个旁道,从而泄露您的 secret 信息。例如。您可以确定密码的第一个字符是“R”,因为如果您的错误密码以“R”开头,系统失败速度会加快 10ns。重复下一个字符,直到找到密码。
实现密码学真的很难。真的真的很难。
关于go - 试图从 Go 中理解这个函数,为什么要创建一个始终在恒定时间内运行的函数,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411964/