2010-02-23 142 views
27

我見過8位,16位和32位CRC。數據長度vs CRC長度

在什麼時候,我需要跳轉到一個更廣泛的CRC?

我的直覺反應是,它是基於該數據長度:

  1. 1-100字節:8位CRC
  2. 101 - 1000字節:16位CRC
  3. 1001 - ???字節:32位CRC

編輯: 尋找大約CRC和洛特的回答,這裏我們所擁有的維基百科頁面:

< 64字節:8位CRC

< 16K字節:16位CRC

< 512M字節:32位CRC

+0

2008年底發生的MD5攻擊是一個教科書中的CRC過於統一或太小的例子:http://www.win.tue.nl/hashclash/rogue-ca/ – bzlm

+7

CRC不是哈希算法。這是查看是否有意無意翻轉的一種方法。我沒有看到與MD5鏈接的連接。我會再看看。 – Robert

+3

@bzlm MD5與它無關。 CRC根本不會抵制這種攻擊,它們被用來檢測隨機錯誤,而不是惡意攻擊。 – starblue

回答

27

這不是一個研究課題。這真是很好理解:http://en.wikipedia.org/wiki/Cyclic_redundancy_check

數學是非常簡單的。一個8位的CRC將所有消息歸爲256個值之一。如果您的消息長度超過了幾個字節,則具有相同散列值的多個消息的可能性會越來越高。

16位CRC,同樣,給你65536個可用的哈希值之一。任何兩個消息具有這些值之一的機率是多少?

的32位CRC爲您提供了約4十億可用的哈希值。

從維基百科文章:「最大總塊長度等於2**r − 1」。這是一點點。您不需要做太多的研究就可以看到2**9 - 1是511位。使用CRC-8,多於64個字節的消息將具有相同的CRC校驗和值。

+0

如果使用CRC來檢測文件的更改,這是準確和有用的。但是,如果它被用作摘要來檢測文件中的重複內容,那麼它更復雜。具體而言,生日悖論要求我們考慮我們期望擁有多少不同的價值。 –

+0

@Steven Sudit:正確。令人遺憾的是,這個問題太過模糊,無法確定使用「兒童權利公約」的情況。 –

+0

我認爲任何*消息比CRC寬度(r-1,而不是2^r-1)都要多,消息映射到相同的校驗和。 IOW,任何長度超過一個字節的消息將具有重疊的CRC8映射。我認爲(其中之一)挑戰是設計映射,以使散列上的消息字符串的分佈是均勻的。 – ysap

2

我覺得CRC的大小更多的是與如何唯一你需要一個CRC,而不是輸入數據的大小。這與您計算CRC的項目的具體用法和數量有關。

5

的CRC的有效性依賴於多種因素。您不僅需要選擇CRC的大小,還需要選擇GENERATING POLYNOMIAL來使用。有複雜和非直觀的權衡取決於:

  • 通道的預期誤碼率。
  • 錯誤是傾向於發生在突發中還是傾向於分散(突發很常見)
  • 要保護的數據的長度 - 最大長度,最小長度和分佈。

紙張循環冗餘碼多項式選擇對於嵌入式網絡,由菲利普·考夫曼和Tridib Chakravarty,在可靠的系統和網絡2004年國際大會的議事publised給出了一個很好的概述,並提出了一些recomendations。它還提供了進一步理解的參考書目。

http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf

1

CRC長度與文件大小的選擇是在一個更可能具有從「正確的」輸入相差三個或更少的比特比輸入到具有一個案件主要相關,其是大不相同的。給定兩個大量不同的輸入,錯誤匹配的可能性大約是1/256,其中大多數形式的8位校驗值(包括CRC),1/65536大多數形式的16位校驗值(包括CRC)等等.CRC的優點來自於對輸入的處理非常相似。

對於一個8位的CRC碼,它的多項式產生兩個長度爲128的週期,一個小於未被檢測到的數據包的單比特,雙比特或三比特錯誤的比例將不會是1/256 - 它會爲零。同樣,對於週期爲32768的16位CRC,使用32768位或更少的數據包。

然而,如果數據包長於CRC週期,那麼如果錯誤位之間的距離是CRC週期的倍數,則雙位錯誤將不會被檢測到。雖然這看起來可能不是很可能的情況,但是在捕獲長分組中的雙比特錯誤時,CRC8會比在捕捉「分組完全混亂」錯誤時差一些。如果雙比特錯誤是第二常見的失敗模式(在單比特錯誤之後),那將是不好的。但是,如果任何破壞某些數據的東西可能會破壞很多數據,那麼具有雙位錯誤的CRC的劣勢行爲可能不成問題。