您现在的位置是:电脑教程 >>正文
相等有时候也不安全!你知道吗?
电脑教程872人已围观
简介哈喽,大家好,我是指北君。最近世界杯看了几场球赛,克罗地亚淘汰巴西, 摩洛哥淘汰葡萄牙。两场都非常精彩,克罗地亚的坚韧令人佩服,绝境逆袭。总之这一届世界杯绝对会影响以后足球的战术打法。言归正传哈,最近 ...
哈喽 ,候也大家好 ,不安我是全知指北君 。
最近世界杯看了几场球赛,候也克罗地亚淘汰巴西 ,不安 摩洛哥淘汰葡萄牙。全知两场都非常精彩,候也克罗地亚的不安坚韧令人佩服 ,绝境逆袭。全知总之这一届世界杯绝对会影响以后足球的候也战术打法。
言归正传哈 ,不安最近依然在搬砖哈 ,全知看到了关于计时攻击的候也内容,建站模板而这个又和我们常用的不安equals方法关系密切 。然后就迫不及待的全知去扒一扒了。
计时攻击Timing Attack ,时序攻击 ,是一种侧信道攻击 ,攻击者尝试分析加密算法的时间执行顺序来推导出密码。每个逻辑运算都需要执行时间 ,但是根据不同的输入值,精确测量执行时间,根据执行时间反推出密码的源码库一些区域 。
简单理解,就是破解密码的人 ,通过不同的输入策略组合尝试去验证密码,得到不同的执行时间 ,从而反推出密码的区域,降低破解密码的难度。
下面可以使用Java简单描述一下。
我们看一下Java中的String equals方法(Java17)
复制public boolean equals(Object anObject){ if (this == anObject) { return true; } return (anObject instanceof String aString) && (!COMPACT_STRINGS || this.coder == aString.coder) && StringLatin1.equals(value, aString.value);}//StringLatin1.equals@IntrinsicCandidate
public static boolean equals(byte[] value, byte[] other){ if (value.length == other.length) { for (int i = 0; i < value.length; i++) { if (value[i] != other[i]) { return false; } } return true; } return false;}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.以上方法中字符串比较一旦遇到不同的香港云服务器字符 ,那么就直接返回失败。
那么看一下下面的3行代码的执行时间 。
复制"adfg".equals("abcd");"abfg".equals("abcd");"abcg".equals("abcd");1.2.3.以上的3行字符串比较方法执行时间是不同的 。
执行时间: 第一行 < 第二行 < 第三行
假如现在我们要猜出另外一个字符串 ,那么如果我们用暴力穷举猜测字符串 ,则根据不同的字符串组合,得到的执行时间是不一样的高防服务器