恒定时间&表达式的工作评估对于防止加密算法中的旁道攻击非常重要。但是,我不知道Java中的false / true和0/1之间有任何恒定时间的转换。
作为反例,
int x = p ? 1 : 0;
似乎没有该属性,因为执行中的分支可能意味着表达式的评估存在可检测的差异。在C / C ++中,
int x = p;
可以解决这个问题,但Java中不允许这种隐式转换。有便携式解决方案吗?当然更快更好。
请注意,这与Convert boolean to int in Java不同 因为那个问题不考虑恒定的时间。
答案 0 :(得分:1)
好的,不要投票支持这个答案,因为我没有时间对其进行验证,但我正在考虑:
body
这使得答案总是执行操作,双向执行分支并依赖于这两个位。