Modify a message to have a desired CRC signature.


spoof will help you modify a message to make the CRC of that message equal any desired value. spoof does not need the message itself, but just the length of the message, the exclusive-or of the message's current CRC and the desired new CRC, and a set of bit locations in the message to potentially modify. spoof will then deliver a subset of those locations whose bits should be inverted. Then the modified message will have the desired CRC.


The purpose of spoof is to illustrate the extremely non-cryptographic nature of a Cyclic Redundancy Check (CRC) as a signature. Since a CRC is a linear operation on the message, it is easy to invert the operation to construct messages with any desired CRC. spoof runs in O(log(n)) time, where n is the length of the message.


Simply compile and link spoof.c and fline.c with a standard C compiler and library. "standard" here is defined as C99. spoof.c is a command line program that takes input from stdin and produces output on stdout.


This input, specifying a 4-bit CRC with polynomial x4+x+1 reflected, an exclusive-or of the current and desired CRC of 1111, a message length of 89 (decimal) bytes, and four candidate bit locations to change in byte offset and bit number:

4 1 c
f 89
37 0
41 0
45 0
49 0

will produce this output:

invert these bits in the sequence:
offset bit
    41 0


This code is under the zlib license, permitting free commercial use.