在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java中的計(jì)時(shí)攻擊

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

計(jì)時(shí)攻擊

Timing Attack ,時(shí)序攻擊,是一種側(cè)信道攻擊,攻擊者嘗試分析加密算法的時(shí)間執(zhí)行順序來推導(dǎo)出密碼。每個(gè)邏輯運(yùn)算都需要執(zhí)行時(shí)間,但是 根據(jù)不同的輸入值,精確測(cè)量執(zhí)行時(shí)間,根據(jù)執(zhí)行時(shí)間反推出密碼的一些區(qū)域

簡(jiǎn)單理解,就是破解密碼的人,通過不同的輸入策略組合嘗試去驗(yàn)證密碼,得到不同的執(zhí)行時(shí)間,從而反推出密碼的區(qū)域,降低破解密碼的難度。

下面可以使用Java簡(jiǎn)單描述一下。

我們看一下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;
}

以上方法中字符串比較一旦遇到不同的字符,那么就直接返回失敗。

那么看一下下面的3行代碼的執(zhí)行時(shí)間。

"adfg".equals("abcd");
"abfg".equals("abcd");
"abcg".equals("abcd");

以上的3行字符串比較方法執(zhí)行時(shí)間是不同的。

執(zhí)行時(shí)間: 第一行 < 第二行 < 第三行

假如現(xiàn)在我們要猜出另外一個(gè)字符串,那么如果我們用暴力窮舉猜測(cè)字符串,則 根據(jù)不同的字符串組合,得到的執(zhí)行時(shí)間是不一樣的,那么根據(jù)不同的執(zhí)行時(shí)間分析,就可以知道前面幾個(gè)字符串是否正確,從而縮小范圍

以上是一個(gè)計(jì)時(shí)攻擊的簡(jiǎn)單例子,實(shí)際密碼加密,公私鑰加密算法是比較復(fù)雜的,但是也要考慮計(jì)時(shí)攻擊的影響。

多年前斯坦福的教授們專門針對(duì)這些問題發(fā)表過相關(guān)的論文,下面這篇于2005年發(fā)表在《Computer networks》的期刊論證了遠(yuǎn)程網(wǎng)絡(luò)計(jì)時(shí)攻擊的可能性。

圖片

計(jì)時(shí)攻擊的防御

那么對(duì)于計(jì)時(shí)攻擊這種要如何防止呢, 大部分的做法是使單向加密,或者密碼驗(yàn)證的算法執(zhí)行時(shí)間不會(huì)隨著輸入值的不同而規(guī)律變化 。換句話說就是 不同的輸入值的執(zhí)行時(shí)間相同 ,或者 執(zhí)行時(shí)間隨機(jī)分布無法規(guī)律判斷

2009年jdk6的一個(gè)升級(jí)中就有相關(guān)的優(yōu)化來防止計(jì)時(shí)攻擊。MessageDigest是java.security包里面的類,主要用于SHA或 MD5 等密碼上安全的報(bào)文摘要功能而設(shè)計(jì)。最終會(huì)用到其equals方法。而這個(gè)改動(dòng)就是針對(duì)equals方法。

圖片

其中關(guān)鍵的改動(dòng)就是判斷字符串相等時(shí),不再看到不相等的字符就返回false。而是 對(duì)比完所有的字符之后再返回結(jié)果 。這樣代碼的執(zhí)行時(shí)間就大致相同。

圖片

同時(shí)2021年jdk8的補(bǔ)丁也有相關(guān)的優(yōu)化,

圖片

乍一看上面的代碼已經(jīng)比較完美了。但是。。。。

密碼字符串的信息 還有長(zhǎng)度信息

還是有坑哈。。。。。
其實(shí)上述中的代碼還有一個(gè)問題,就是 不同長(zhǎng)度的字符串的執(zhí)行時(shí)間也不一樣 ,那么如果我搞一輪不同長(zhǎng)度字符串窮舉之后,可以 根據(jù)運(yùn)行計(jì)算時(shí)間的不同可以推出密碼的長(zhǎng)度 。再進(jìn)行破解相對(duì)容易一點(diǎn)。

再看如今Java17中的這個(gè)方法, 長(zhǎng)度不同時(shí)也不會(huì)立馬返回false ,而是照常執(zhí)行整個(gè)代碼,這樣就避免了根據(jù)執(zhí)行時(shí)間先得到密碼的長(zhǎng)度。

//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;
}

小結(jié)

以上就是計(jì)時(shí)攻擊的一些簡(jiǎn)單內(nèi)容,網(wǎng)絡(luò)安全中的冰山一角。再次致敬這些維護(hù)JDK源碼的大師們!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2988

    瀏覽量

    109031
  • 字符
    +關(guān)注

    關(guān)注

    0

    文章

    237

    瀏覽量

    25567
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4896

    瀏覽量

    70565
  • 加密算法
    +關(guān)注

    關(guān)注

    0

    文章

    218

    瀏覽量

    25822
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    JavarestTemplate的使用

    JavarestTemplate的使用
    的頭像 發(fā)表于 01-13 15:41 ?1311次閱讀

    最新防攻擊教程

    最新防攻擊教程 別人攻擊的使用方法 傳奇防御攻擊 傳奇攻擊方法超級(jí)CC 超級(jí)穿墻CC 穿金盾CC 穿墻CC攻擊器 防穿墻DDOS 傳奇網(wǎng)關(guān)
    發(fā)表于 09-06 20:42

    CC攻擊

    CC攻擊是DDOS(分布式拒絕服務(wù))的一種,相比其它的DDOS攻擊CC似乎更有技術(shù)含量一些。這種攻擊你見不到虛假IP,見不到特別大的異常流量,但造成服務(wù)器無法進(jìn)行正常連接,聽說一條ADSL足以搞掂
    發(fā)表于 09-10 15:59

    網(wǎng)絡(luò)攻擊的相關(guān)資料分享

    持續(xù)檢測(cè)現(xiàn)有網(wǎng)絡(luò)的流量變化或者變化趨勢(shì),從而得到相應(yīng)信息的一種被動(dòng)攻擊方式。主動(dòng)攻擊:是指通過一系列的方法,主動(dòng)地獲取向被攻擊對(duì)象實(shí)施破壞的一種
    發(fā)表于 12-23 07:00

    cc攻擊防御解決方法

    靜態(tài)頁(yè)面由于動(dòng)態(tài)頁(yè)面打開速度慢,需要頻繁從數(shù)據(jù)庫(kù)調(diào)用大量數(shù)據(jù),對(duì)于cc攻擊者來說,甚至只需要幾臺(tái)肉雞就可以把網(wǎng)站資源全部消耗,因此動(dòng)態(tài)頁(yè)面很容易受到cc攻擊。正常情況靜態(tài)頁(yè)面只有幾十kb,而動(dòng)態(tài)
    發(fā)表于 01-22 09:48

    對(duì)Rijndael的JAVA差分攻擊與防范

    本文探討了對(duì)Rijndael算法的各種攻擊,介紹了一種對(duì)Rijndael算法差分攻擊JAVA實(shí)現(xiàn),提出了幾種防范對(duì)Rijndael算法差分攻擊的方法。關(guān)鍵詞:Rijndael;
    發(fā)表于 08-22 10:06 ?14次下載

    java數(shù)組的三種定義方式_java數(shù)組的定義及使用方法(推薦)

    java,數(shù)組是一種很常用的工具,本文將介紹來java數(shù)組的三種定義方式以及java數(shù)組的
    發(fā)表于 01-29 09:53 ?3.3w次閱讀

    java學(xué)習(xí)——java的反射學(xué)習(xí)筆記

    本文檔內(nèi)容介紹了java學(xué)習(xí)java的反射學(xué)習(xí)筆記,供參考
    發(fā)表于 03-13 14:19 ?0次下載

    如何預(yù)防區(qū)塊鏈的日蝕攻擊和DDos攻擊

    日蝕攻擊( Eclipse Attack )是面向?qū)Φ龋?P2P )網(wǎng)絡(luò)的一種攻擊類型,攻擊者通過攻擊手段使得受害者不能從網(wǎng)絡(luò)的其它部分接
    發(fā)表于 08-26 10:43 ?2539次閱讀
    如何預(yù)防區(qū)塊鏈<b class='flag-5'>中</b>的日蝕<b class='flag-5'>攻擊</b>和DDos<b class='flag-5'>攻擊</b>

    java怎么使用HTTP代理

    java怎么使用HTTP代理,華益云python爬蟲ip
    的頭像 發(fā)表于 09-01 14:31 ?1908次閱讀

    JavaGet和Post的使用

    JavaGet和Post的使用
    的頭像 發(fā)表于 01-12 15:38 ?1055次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>中</b>Get和Post的使用

    如何區(qū)分Javaprint和println

    在最開始學(xué)習(xí)Java的時(shí)候?qū)W到sout+enter鍵可以輸出結(jié)果,顯示的是System.out.println();而在Python是直接使用print。那么在Javaprint和
    的頭像 發(fā)表于 02-21 15:10 ?1517次閱讀

    Java創(chuàng)建對(duì)象有哪些方式

    1 問題 作為Java開發(fā)者,經(jīng)常創(chuàng)建很多對(duì)象,你是否知道Java創(chuàng)建對(duì)象有哪些方式呢?
    的頭像 發(fā)表于 02-24 10:29 ?1275次閱讀

    Java的線程狀態(tài)轉(zhuǎn)換

    Java 中線程的生命周期中一共有 6 種狀態(tài)。New(新創(chuàng)建);Runnable(可運(yùn)行);Blocked(被阻塞);Waiting(等待);Timed Waiting(計(jì)時(shí)等待);Terminated(被終止)。
    的頭像 發(fā)表于 06-02 10:07 ?878次閱讀
    在<b class='flag-5'>Java</b><b class='flag-5'>中</b>的線程狀態(tài)轉(zhuǎn)換

    Java時(shí)間戳的使用

    Java時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?496次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>中</b>時(shí)間戳的使用
    主站蜘蛛池模板: 亚色综合| 天天影视亚洲 | 91极品反差婊在线观看 | 亚洲精品乱码久久久久久蜜桃图片 | 深夜国产成人福利在线观看女同 | 天天好b| 久久久久国产一级毛片高清版 | 性色aⅴ闺蜜一区二区三区 性色成人网 | 欧美日本一区二区三区生 | 性视频网址 | 午夜视频在线观看国产 | 国产成人精品曰本亚洲78 | 午夜视频福利在线 | 免费一级欧美片在线观免看 | 成人涩涩网站 | 久久精品久久久 | 天天干天天操天天爽 | 在线视频91| 四虎地址8848最新章节 | 欧美xx网站| 日韩有色 | 无遮挡很爽很污很黄的网站w | 噜噜噜噜噜久久久久久91 | 夜夜骑首页 | 国产视频久 | 日本高清高色 | 久久综合九色综合98一99久久99久 | 午夜狠狠操 | 一日本道加勒比高清一二三 | 狠狠色噜噜狠狠狠狠五月婷 | 女人张开腿让男人做爽爽 | 男男污肉高h坐便器调教 | 国产一区二区在线视频播放 | 国产单男 | 亚洲午夜久久 | 在线播放亚洲视频 | 色老成人精品视频在线观看 | 黄视频免费观看 | 又潮又黄的叫床视频 | 四虎影视在线影院在线观看 | 777国产精品永久免费观看 |