【发布时间】:2017-08-10 18:19:29
【问题描述】:
我试图通过删除代码中的 if 语句来解决时序泄漏,但由于 c++ 对 if 语句中整数输入的解释,我被卡住了。
请注意,我假设编译器确实创建了一个条件分支,这会导致时序信息泄露!
原代码为:
int s
if (s)
r = A
else
r = B
现在我正在尝试将其重写为:
int s;
r = sA+(1-s)B
因为 s 未绑定到 [0,1],所以如果 s 不在 [0,1] 范围内,我会遇到这样的问题:它会错误地乘以 A 和 B。如果不使用 s 上的 if 语句来解决这个问题,我该怎么办?
提前致谢
【问题讨论】:
-
使用
!!s进行规范化? -
在某些编译器/架构组合中,
r= s ? A : B;将被转换为无分支代码(使用条件赋值)。 -
在@nwp、
!!s * A + !s * B或更好的A + !s * (B - A)之后。 -
这不就是说:s = not not not s吗?如果有,为什么会有帮助?它解决了我的错误。
-
@David 我也没有,但我听说过timing attack(也在标签中),而定时泄漏似乎正是定时攻击成功的原因。
标签: c++ c if-statement timing-attack