反轉 N 個 CRC 步驟
從已知的 CRC 結果(我們稱之為CRC1)開始,我是否可以撤消最後N位的 CRC 操作,這樣我就可以獲得沒有最後N位 的消息序列的 CRC(我們稱之為CRC2 )。
$$ M(x) - message \ M = {M1,LastBits} \CRC_1=CRC{M}\CRC_2=CRC{M_1} $$ 是否存在函式 F() : $$ F(CRC_1,LastBits) = CRC_2 $$ 我的預感是,這樣一個可以展開最後N個CRC 步驟的函式將有 2 N個可能的解決方案。
如果我們使用多項式算術,這是最容易理解的。
消息的CRC $ m(x) $ 是餘數 $ r(x) $ 的 $ m(x) x^k $ 除以 CRC 多項式時 $ f(x) $ . 或者更方便的是,CRC 等於消息乘以 $ x^k $ 以 CRC 多項式為模, $ r(x) \equiv m(x) x^k \pmod{f(x)} $ .
如果消息包含前綴 $ m_1 $ 和一個後綴 $ m_2 $ 長度 $ n $ , 我們可以表示為 $ m(x) = m_1(x) x^n + m_2(x) $ . 如果 CRC $ m_1 $ 是 $ r_1(x) $ 和 CRC $ m_2(x) $ 是 $ r_2(x) $ ,那麼 CRC $ m(x) $ 是
$$ r(x) \equiv (m_1(x) x^n + m_2(x)) x^k \equiv r_1(x) x^n + r_2(x) \pmod{f(x)}. $$ 如果 $ f(x) $ 不是的倍數 $ x $ (它不會),有一個多項式 $ g(x) $ 這樣 $ x g(x) \equiv 1 \pmod{f(x)} $ , 進而
$$ r_1(x) \equiv r_1(x) (x g(x))^n \equiv (r(x) - r_2(x)) g(x)^n \equiv (r(x) - m_2(x) x^k) g(x)^n \pmod{f(x)}. $$ 換句話說,你首先找到你想要的東西 $ g(x) $ ,然後計算一個差值,乘以一個合適的冪 $ g(x) $ ,然後在除以時取餘數 $ f(x) $ .