回覆列表
  • 1 # 雁塔菜農

    HotCRC計算器中有多個碰撞,而目前官方的只有一個“CRC碰撞”,即不同的明文(待校驗資料流),相同的結果(校驗和)。

    CRC出值碰撞是根據CRC逆運算,在明文不變,結果不變,指定出值後,逆運算出“初值”。

    由於數字上將CRC校驗劃歸為“單向雜湊函式”,故它在理論上是沒有逆運算的。

    但是菜農找到CRC的“陷門”後,即明文長度等於權值長度後,即可從“密文”中逆運算出“明文”。

    由於明文和初值滿足交換律,故在明文長度是權值長度的整數倍時,即最後一組明文長度等於權值長度時,此時初值可以用逆運算得到。

    即可以用“CRC出值碰撞”求初值。

    在一般的CRC保護應用上,都是有明文和校驗和兩部分構成保護機制,它的依據就是CRC演算法是不公開的,或是很難逆向的。

    利用CRC出值碰撞保護原理:

    令校驗和恆為0,出值恆為0。已知被保護的明文,還有逆運算後的初值(由HotCRC求出)。

    因為在保護程式裡,執行的是CRC正運算,故對明文計算CRC後更為0。

    然後用這個“0”到處異或,例如對LED或LCD字串輸出時異或這個“0”,字元輸出不會發生變化即錯誤。

    為何要這個“0”呢?

    因為它非常了對校驗和驗證的分支!即對校驗和判斷的程式,故阻止或加大難度了逆向工程。

    特別指出,當明文長度不為權值長度的整數倍時,即最後一組明文長度小於權值長度,故初值和明文不滿足交換律,故沒有逆運算。

    此時的初值,攻防雙方都必須用正運算對初值進行窮舉!以求出初值。

  • 2 # 雁塔菜農

    CRC初值碰撞是在明文不變,結果不變,指定CRC初值後,“正運算”出CRC出值。

    它的應用主要是設定初值和出值都不為特定值的CRC簡寫式。

    特別是在明文不等長且明文長度不是權值長度的整數倍時,該不為特定值的這組初值和出值將是唯一的,故此時的CRC主要成員都是CRC

    金鑰了,例如逆向CRC8,需要窮舉:

    權值(256次)*方向(2次)*初值(256次)*出值(256次)

    故當CRCn中的n足夠大時,其CRC演算法非常難以逆向或無法破逆向。

    因為窮舉的時間成本太高,可能是百年或萬年等。

  • 中秋節和大豐收的關聯?
  • 如何處理與上級的關係,我非常討厭我的上級,該如何辦?