go - 试图从 Go 中理解这个函数,为什么要创建一个始终在恒定时间内运行的函数,它是如何工作的?

标签 go

我遇到了以下函数 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/

相关文章:

mongodb - Golang revel+mgo - 当结构变量具有小写名称时不返回数据

go - 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

go - 了解数组分配的大小

go - PGP文件解密\

go - 在go中将回溯堆栈拆分为结构

xml - Go语言中从xml中解码数组

arrays - Go中的多维数组

go - 如何从 map 界面解析特定键?

go - 从 golang 代码将文件发送到 Google Drive API 会产生错误 : Unsupported content with type: image/jpeg

unit-testing - 去/appengine : faster datastore tests