我見過8位,16位和32位CRC。數據長度vs CRC長度
在什麼時候,我需要跳轉到一個更廣泛的CRC?
我的直覺反應是,它是基於該數據長度:
- 1-100字節:8位CRC
- 101 - 1000字節:16位CRC
- 1001 - ???字節:32位CRC
編輯: 尋找大約CRC和洛特的回答,這裏我們所擁有的維基百科頁面:
< 64字節:8位CRC
< 16K字節:16位CRC
< 512M字節:32位CRC
我見過8位,16位和32位CRC。數據長度vs CRC長度
在什麼時候,我需要跳轉到一個更廣泛的CRC?
我的直覺反應是,它是基於該數據長度:
編輯: 尋找大約CRC和洛特的回答,這裏我們所擁有的維基百科頁面:
< 64字節:8位CRC
< 16K字節:16位CRC
< 512M字節:32位CRC
這不是一個研究課題。這真是很好理解: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校驗和值。
如果使用CRC來檢測文件的更改,這是準確和有用的。但是,如果它被用作摘要來檢測文件中的重複內容,那麼它更復雜。具體而言,生日悖論要求我們考慮我們期望擁有多少不同的價值。 –
@Steven Sudit:正確。令人遺憾的是,這個問題太過模糊,無法確定使用「兒童權利公約」的情況。 –
我認爲任何*消息比CRC寬度(r-1,而不是2^r-1)都要多,消息映射到相同的校驗和。 IOW,任何長度超過一個字節的消息將具有重疊的CRC8映射。我認爲(其中之一)挑戰是設計映射,以使散列上的消息字符串的分佈是均勻的。 – ysap
我覺得CRC的大小更多的是與如何唯一你需要一個CRC,而不是輸入數據的大小。這與您計算CRC的項目的具體用法和數量有關。
的CRC應專門爲消息的長度來選擇,它不只是一個的CRC的大小的問題:http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf
的CRC的有效性依賴於多種因素。您不僅需要選擇CRC的大小,還需要選擇GENERATING POLYNOMIAL來使用。有複雜和非直觀的權衡取決於:
紙張循環冗餘碼多項式選擇對於嵌入式網絡,由菲利普·考夫曼和Tridib Chakravarty,在可靠的系統和網絡2004年國際大會的議事publised給出了一個很好的概述,並提出了一些recomendations。它還提供了進一步理解的參考書目。
http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf
CRC長度與文件大小的選擇是在一個更可能具有從「正確的」輸入相差三個或更少的比特比輸入到具有一個案件主要相關,其是大不相同的。給定兩個大量不同的輸入,錯誤匹配的可能性大約是1/256,其中大多數形式的8位校驗值(包括CRC),1/65536大多數形式的16位校驗值(包括CRC)等等.CRC的優點來自於對輸入的處理非常相似。
對於一個8位的CRC碼,它的多項式產生兩個長度爲128的週期,一個小於未被檢測到的數據包的單比特,雙比特或三比特錯誤的比例將不會是1/256 - 它會爲零。同樣,對於週期爲32768的16位CRC,使用32768位或更少的數據包。
然而,如果數據包長於CRC週期,那麼如果錯誤位之間的距離是CRC週期的倍數,則雙位錯誤將不會被檢測到。雖然這看起來可能不是很可能的情況,但是在捕獲長分組中的雙比特錯誤時,CRC8會比在捕捉「分組完全混亂」錯誤時差一些。如果雙比特錯誤是第二常見的失敗模式(在單比特錯誤之後),那將是不好的。但是,如果任何破壞某些數據的東西可能會破壞很多數據,那麼具有雙位錯誤的CRC的劣勢行爲可能不成問題。
2008年底發生的MD5攻擊是一個教科書中的CRC過於統一或太小的例子:http://www.win.tue.nl/hashclash/rogue-ca/ – bzlm
CRC不是哈希算法。這是查看是否有意無意翻轉的一種方法。我沒有看到與MD5鏈接的連接。我會再看看。 – Robert
@bzlm MD5與它無關。 CRC根本不會抵制這種攻擊,它們被用來檢測隨機錯誤,而不是惡意攻擊。 – starblue