CRC – Cyclic Redundancy Check
CRC – Cyclic redundancy check, error detection, and error correction in some cases, it a common functionality used in many areas of computer science, communication protocol such as USB, IP4, TCP, Modbus, and many other protocol and formats and etc. This functionality is extremely important to reduce the number of errors, though they will not guarantee 100 percent in every cases. However, can reduce it significantly.
This is achieved by the CRC being expressed as a polynomial and taking advantage of remainder theory and etc. See the following youtube video for in-depth on how CRC works on a mathematical level.
There is a mathematical approach to solve how high the integrity capability is, or rather the probability of collision between different messages. However, the following command tool is a simple empirical way of determining how much collision can be expected for specific message size and number of bits flipped.,
There are however many algorithms with various levels of error detection strength, related to both computation time complexity and as well its size.
Tool
The Naive CRC Analysis program is a simple command-line tool for checking the quality of many common CRC algorithms and determines the probability of the collision.
The program works by generating a random message/data block of a specified size. Followed by creating a copy of the message, flips n-number of bits (corrupts the message), compute the CRC of the correct and corrupted data, if the CRC is equal, implies a collision, that is to say, on the receiving end of communication protocol, it would not be able to determine if the message has been corrupted or not, since the checksum matches.
The software is written to utilize multi-core systems, allowing to run on all threads on the system, separately independently, allowing for improved throughput, by using a task scheduler,
Example
The following is the help message, for all the command line arguments and etc.
Naive CRC Analysis A simple program for checking error detection Usage: CRCAnalysis [OPTION...] -v, --version Version information -h, --help helper information. -c, --crc arg CRC Algorithm (default: crc8) -p, --message-data-size arg Size of each messages in bytes. (default: 5) -e, --error-correction Perform Error Correction. -s, --samples arg Samples (default: 1000000) -t, --tasks arg Task (default: 2000) -b, --nr-of-error-bits arg Number of bits error added to each message (default: 1) -f, --forever Run it forever -l, --show-crc-list List of support CRC and Checksum Alg
By running without any argument will execute the default config
./CRCAnalysis
CRC: crc8, [1999/2000] NumberOfSamples 999500, collision: [0,0.000000] nr-error-bit 1
The following example specifies to use USB CRC of 5 bits, the message of 64 bytes, flip 2 random bits n the message. Perform analysis on 800000000 random messages, on cross 10000 individual tasks, that will evenly distribute all the samples.
CRCAnalysis --crc crc5_usb -p 64 -b 2 -s 800000000 --tasks 10000
CRC: crc5_usb, [9999/10000] NumberOfSamples 799920000, collision: [24313090,0.030394] nr-error-bit 2
Free/Open software developer, Linux user, Graphic C/C++ software developer, network & hardware enthusiast.