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

Justinas

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

为什么我们需要为守护程序创建一个新会话?

来自分类常见问题

为什么我们需要argc而argv末尾总是有一个null?

来自分类Dev

为什么我们需要一个servlet名称?

来自分类Dev

Android:为什么我们需要一个IBinder来使Messenger与Handler通信?

来自分类Dev

为什么我们需要一个用户提供的const对象构造函数?

来自分类Dev

为什么我们需要另一个模式来进行模式缝合?

来自分类Dev

为什么我们需要在React Hook中返回一个函数?

来自分类Dev

Java LRUCache,为什么我们需要另一个集合

来自分类Dev

为什么我们需要 WalletApi 的“startWatching”功能?

来自分类Dev

为什么我们需要使用一个`var`来定义许多变量?

来自分类Dev

Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

来自分类Dev

F#类型与“:?Type as name”匹配:为什么我们需要一个新名称?

来自分类Dev

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

来自分类Dev

为什么我们需要在运行时实例化一个类型?

来自分类Dev

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

来自分类Dev

为什么我们需要一个扫描器对象来在 java 中获取输入

来自分类Dev

为什么我们需要构建一个boost库,仅仅包含头文件是不够的,因为boost是模板

来自分类Dev

我们为什么需要容器?

来自分类Dev

为什么我们需要IO?

来自分类Dev

JavaScript-为什么我们必须从自调用函数返回一个函数?

来自分类Dev

为什么我们不能声明一个类型为void的变量?

来自分类Dev

为什么我们只有一个带有@Inject批注的构造函数?

来自分类Dev

我们为什么要把glGetError放在一个循环中?

来自分类Dev

为什么我们必须在代码的顶部声明一个包?

来自分类Dev

为什么我们不能扩展一个以上的班级

来自分类Dev

为什么我们必须在代码的顶部声明一个包?

来自分类Dev

为什么我们必须从一个小部件更新多个小部件?

Related 相关文章

  1. 1

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  2. 2

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  3. 3

    为什么我们需要为守护程序创建一个新会话?

  4. 4

    为什么我们需要argc而argv末尾总是有一个null?

  5. 5

    为什么我们需要一个servlet名称?

  6. 6

    Android:为什么我们需要一个IBinder来使Messenger与Handler通信?

  7. 7

    为什么我们需要一个用户提供的const对象构造函数?

  8. 8

    为什么我们需要另一个模式来进行模式缝合?

  9. 9

    为什么我们需要在React Hook中返回一个函数?

  10. 10

    Java LRUCache,为什么我们需要另一个集合

  11. 11

    为什么我们需要 WalletApi 的“startWatching”功能?

  12. 12

    为什么我们需要使用一个`var`来定义许多变量?

  13. 13

    Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

  14. 14

    F#类型与“:?Type as name”匹配:为什么我们需要一个新名称?

  15. 15

    为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

  16. 16

    为什么我们需要在运行时实例化一个类型?

  17. 17

    为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

  18. 18

    为什么我们需要一个扫描器对象来在 java 中获取输入

  19. 19

    为什么我们需要构建一个boost库,仅仅包含头文件是不够的,因为boost是模板

  20. 20

    我们为什么需要容器?

  21. 21

    为什么我们需要IO?

  22. 22

    JavaScript-为什么我们必须从自调用函数返回一个函数?

  23. 23

    为什么我们不能声明一个类型为void的变量?

  24. 24

    为什么我们只有一个带有@Inject批注的构造函数?

  25. 25

    我们为什么要把glGetError放在一个循环中?

  26. 26

    为什么我们必须在代码的顶部声明一个包?

  27. 27

    为什么我们不能扩展一个以上的班级

  28. 28

    为什么我们必须在代码的顶部声明一个包?

  29. 29

    为什么我们必须从一个小部件更新多个小部件?

热门标签

归档