Algorithm-Design

為什麼說CRC是線性的?

  • April 5, 2016

通常認為 CRC 滿足線性恆等式 $ \oplus $ (異或)操作:

$ \operatorname{CRC}(a) \oplus \operatorname{CRC}(b) = \operatorname{CRC}(a \oplus b) $

但經過一些實驗和研究後,這似乎並不普遍

有問題的特定算法是HDLC、ANSI X3.66、ITU-T V.42、乙太網、串列 ATA、MPEG-2、PKZIP、Gzip、Bzip2、PNG(參見Wikipedia)中使用的算法,它使用多項式 $ \mathtt{0x04C11DB7} $ .

CRC在什麼意義上是線性的?這是一種誤解嗎?

在實踐中,CRC 操作通常以非零狀態開始。正因為如此,實際的方程通常是這樣的形式:

$$ crc(a) \oplus crc(b) = crc( a \oplus b ) \oplus c $$ 對於一些常數 $ c $ (這取決於長度 $ a $ , $ b $ ).

另一種表達方式是,對於三個任意等長的位串 $ a, b, c $ , 我們有:

$$ crc(a) \oplus crc(b) \oplus crc(c) = crc( a \oplus b \oplus c ) $$ 這種關係的技術術語是affine;在密碼學中,我們將其視為線性的,因為對於假設線性的攻擊,仿射同樣有效。

引用自:https://crypto.stackexchange.com/questions/34011