Search code examples
crc

use at most 10 bits to corrupt the transmitted message to make an undetectable error (CRC-32)


How can i use at most 10 bits to corrupt the transmitted message(P(x)) to pass the CRC-32 ?

CRC-32 polynomials:

enter image description here

P(x): transmitted message C(x): CRC-32 polynomials E(x): error bits

A trivial way to do this is to let E(x) = C(x) and add C(x) to P(x). But this will change 15 bits in P(x) as there are 15 nonzero terms in C(x).

So is there any way to use at most 10 bits-change to pass CRC-32 ?


Solution

  • Yes, depending on the length of the message, you can certainly find codewords of weight 10, or even less. See Table 1 in this paper. The first column is for the polynomial you tried to refer to.

    Here is an example codeword with weight 10, 56 bits in hex: 01 80 92 14 00 40 24. Or it can be described with the bit positions set: 0 15 17 20 23 26 28 46 50 53. (So it is really a 54-bit codeword, since the last two zeros are not needed.)

    If you set bit positions 0, 49961, and 91639, with all other bits set to zero, you have a codeword of weight 3.