来源
https://coolshell.cn/articles/21003.html
example
boolean safeEqual(String a
, String b
) {
if (a
.length() != b
.length()) {
return false;
}
int equal
= 0;
for (int i
= 0; i
< a
.length(); i
++) {
equal
|= a
.charAt(i
) ^ b
.charAt(i
);
}
return equal
== 0;
}
问题: 1,为啥要用异或来判断是否相等? 2,不想等为啥不直接返回?
计时攻击
计时攻击(Wikipedia)是旁道攻击(或称”侧信道攻击”, Side Channel Attack, 简称SCA) 的一种,旁通道攻击是指基于从计算机系统的实现中获得的信息的任何攻击 ,而不是基于实现的算法本身的弱点(例如,密码分析和软件错误)。时间信息,功耗,电磁泄漏甚至声音可以提供额外的信息来源,可以加以利用。在很多物理隔绝的环境中(黑盒),往往也能出奇制胜,这类新型攻击的有效性远高于传统的密码分析的数学方法。(注:企图通过社会工程学欺骗或强迫具有合法访问权限的人来破坏密码系统通常不被视为旁道攻击)
避免攻击者可以通过观察不同的输入计算机的响应时间来判断出字符串的值