您现在的位置是:物联网 >>正文
相等有时候也不安全!你知道吗?
物联网9人已围观
简介哈喽,大家好,我是指北君。最近世界杯看了几场球赛,克罗地亚淘汰巴西, 摩洛哥淘汰葡萄牙。两场都非常精彩,克罗地亚的坚韧令人佩服,绝境逆袭。总之这一届世界杯绝对会影响以后足球的战术打法。言归正传哈,最近 ...
哈喽 ,候也大家好 ,不安我是全知指北君。
最近世界杯看了几场球赛,候也克罗地亚淘汰巴西,不安 摩洛哥淘汰葡萄牙。全知两场都非常精彩,候也克罗地亚的不安坚韧令人佩服 ,绝境逆袭。全知总之这一届世界杯绝对会影响以后足球的候也战术打法。
言归正传哈 ,不安最近依然在搬砖哈,全知看到了关于计时攻击的候也内容,高防服务器而这个又和我们常用的不安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行字符串比较方法执行时间是不同的。
执行时间 : 第一行 < 第二行 < 第三行
假如现在我们要猜出另外一个字符串,那么如果我们用暴力穷举猜测字符串 ,则根据不同的字符串组合 ,得到的执行时间是不一样的建站模板,那么根据不同的执行时间分析,就可以知道前面几个字符串是否正确 ,从而缩小范围 。
以上是一个计时攻击的简单例子 ,实际密码加密,公私钥加密算法是比较复杂的,但是也要考虑计时攻击的影响。服务器租用
多年前斯坦福的教授们专门针对这些问题发表过相关的论文 ,下面这篇于2005年发表在《Computer networks》的期刊论证了远程网络计时攻击的可能性 。

那么对于计时攻击这种要如何防止呢 ,大部分的做法是使单向加密,或者密码验证的算法执行时间不会随着输入值的不同而规律变化 。换句话说就是不同的云计算输入值的执行时间相同,或者执行时间随机分布,无法规律判断。
2009年jdk6的一个升级中就有相关的优化来防止计时攻击。MessageDigest是java.security包里面的类,主要用于SHA或 MD5 等密码上安全的报文摘要功能而设计 。最终会用到其equals方法 。而这个改动就是针对equals方法。

其中关键的改动就是判断字符串相等时 ,不再看到不相等的字符就返回false 。而是对比完所有的字符之后再返回结果。这样代码的执行时间就大致相同。

同时2021年jdk8的补丁也有相关的优化 ,

乍一看上面的代码已经比较完美了。但是 。。 。。
密码字符串的信息 还有长度信息
还是有坑哈 。 。。。。
其实上述中的代码还有一个问题 ,就是不同长度的字符串的执行时间也不一样 ,那么如果我搞一轮不同长度字符串穷举之后,可以根据运行计算时间的不同可以推出密码的长度 。再进行破解相对容易一点 。
再看如今Java17中的这个方法,长度不同时也不会立马返回false,而是照常执行整个代码,这样就避免了根据执行时间先得到密码的长度。
复制//MessageDigest
public static boolean isEqual(byte[] digesta, byte[] digestb){ if (digesta == digestb) return true; if (digesta == null || digestb == null) { return false; } int lenA = digesta.length; int lenB = digestb.length; if (lenB == 0) { return lenA == 0; } int result = 0; result |= lenA - lenB; // time-constant comparison
for (int i = 0; i < lenA; i++) { // If i >= lenB, indexB is 0; otherwise,i.
int indexB = ((i - lenB) >>> 31) * i; result |= digesta[i] ^ digestb[indexB]; } return result == 0;}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25. 小结以上就是计时攻击的一些简单内容,网络安全中的冰山一角 。再次致敬这些维护JDK源码的大师们!
不断防范 ,不断升级才有了我们越来越安全的代码。
jdk changeset:
http://hg.openjdk.java.net/jdk6/jdk6/jdk/rev/562da0baf70bhttp://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/54441ec952f7http://crypto.stanford.edu/~dabo/papers/ssl-timing.pdfTags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“算法与编程”。http://www.bzli.cn/html/059a699934.html
相关文章
人工智能在网络安全领域的风险与优势
物联网ChatGPT 等生成式 AI 平台正在彻底改变我们获取信息、回答问题甚至开发软件代码的方式。根据 KPMG 网络安全调查:安全运营中心 (SOC) 领导者观点,三分之二 (66%) 的安全领导者认为 ...
【物联网】
阅读更多如何构建 Exchange 服务器恢复策略以克服勒索软件攻击
物联网当前,对于内部部署 Exchange 服务器的勒索软件攻击已经非常常见,因为它们存储了敏感和机密信息,以及业务数据。攻击者经常利用漏洞来访问组织的网络,并窃取或加密数据以勒索赎金。即使攻击者没有成功加 ...
【物联网】
阅读更多如何实现OT网络安全?
物联网在大流行后的复苏世界中,互联性和数字化继续以前所未有的速度加速。随着先进技术的渗透和工业设备的互联,组织越来越依赖运营技术(OT)来保持业务运营和竞争力。此外,在许多情况下,这些进步已经成为推动新收入 ...
【物联网】
阅读更多
热门文章
最新文章
友情链接
- 手机安装APP提示解析错误怎么办
- 比较820和X10处理器(探索两款处理器的性能和特点,为你的智能设备做出明智选择)
- Excel突出显示前10%数据的方法
- 如何设置笔记本电脑启动U盘(一步步教你将U盘设置为笔记本电脑的启动选项)
- Excel表格中将竖列数据求和的方法教程
- 夏新录音笔的优劣势及使用体验(解析夏新录音笔的功能特点、录音效果及用户评价)
- 了解120gPro(性能出众、拍照优秀、续航强大,让你畅快体验智能科技的魅力)
- 小米4A手机的优势与特点(性价比高,配置强大,适合日常使用)
- 磁盘损坏(从备份到专业工具,多种修复方法帮您解决磁盘损坏的问题)
- 撕歌怎么关掉背景音乐 b2b信息平台香港物理机源码库企业服务器亿华云网站建设云服务器