Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming > #5890

Re: Size of a CRC (or similar) code for a given length of message

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.programming
Subject Re: Size of a CRC (or similar) code for a given length of message
Date 2015-09-25 13:05 +0200
Organization A noiseless patient Spider
Message-ID <mu39mh$6gg$1@dont-email.me> (permalink)
References <mu35qo$o6g$1@dont-email.me>

Show all headers | View raw


On 25/09/15 11:59, James Harris wrote:
> I see from
> 
>   https://en.wikipedia.org/wiki/Cyclic_redundancy_check
> 
> that, typically, an n-bit CRC applied to a data block of arbitrary
> length will detect a single error burst up to n bits long.
> 
> That's fine - or as fine as the complex mathematics of CRCs gets! - but
> if looking to select a CRC calculation (or some other data integrity
> check) are there any guidelines on how wide the CRC code should be for
> given levels of assurance against random corruption for a given size of
> message?
> 
> At the moment I am looking to protect a very short header of about 12
> bytes, give or take, and wonder what levels of confidence a certain
> number of CRC bits would give against data corruption.
> 
> For example, if I used a 3-bit CRC to protect a 12-byte header how
> 'good' would that be compared to a 5-bit CRC? And if the header became
> 24 bytes, say, what effect would that have on the effectiveness of 3-bit
> and 5-bit CRCs? (Always assuming that other aspects of the CRC
> calculation are chosen well.)
> 
> If I later wanted to protect a message of a thousand or a
> hundred-thousand bytes how wide would the CRC need to be to maintain a
> similar level of confidence?
> 
> Any ideas?
> 
> James
> 

There are no fixed rules here - it depends not only on the message
length, but also on the risk of corruption, the type of corruption, and
the consequence of incorrectly accepting a corrupted message.  Very
roughly speaking, if there is no pattern in the corruption, then an
n-bit CRC gives you a 1 in 2^n chance of accepting a corrupted message.

If you are doing this in software rather than hardware (such as an
FPGA), then it is much easier if your crc is 8-bit, 16-bit, 32-bit, etc.
 My rule of thumb is that I use a 16-bit CRC for up to about 100 byte
telegrams, and 32-bit CRC for bigger transfers or as a crc over a series
of transfers.  For small 8-bit micros and short telegrams, I use an
8-bit CRC to reduce the calculations.  But if the application already
has crc checks for one size, then I typically use that for everything
rather than mixing and matching.

You can do the calculations using tables - typically 256 entry tables
calculating the crc byte for byte, as it is much easier and faster than
doing it bit for bit.  Pick "standard" crcs, such as CRC-8-Dallas/Maxim,
CRC-16-CCITT or CRC-16-IBM, or CRC-32 as given in the wiki page.  These
make it easier to find existing tables, or examples to check your own
implementation.  They also make it likely that you can use accelerating
hardware (as found in some microcontrollers).  Beware that there are
many variants possible, such as different seeds, or different orderings.
 And if you might want to send all zeros in your data, make sure you
have a seed in the CRC - otherwise your crc will also be zero.

Back to comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Size of a CRC (or similar) code for a given length of message James Harris <james.harris.1@gmail.com> - 2015-09-25 10:59 +0100
  Re: Size of a CRC (or similar) code for a given length of message David Brown <david.brown@hesbynett.no> - 2015-09-25 13:05 +0200
    Re: Size of a CRC (or similar) code for a given length of message James Harris <james.harris.1@gmail.com> - 2015-09-25 13:42 +0100
      Re: Size of a CRC (or similar) code for a given length of message David Brown <david.brown@hesbynett.no> - 2015-09-25 15:15 +0200
  Re: Size of a CRC (or similar) code for a given length of message Julio Di Egidio <julio@diegidio.name> - 2015-09-25 04:07 -0700
    Re: Size of a CRC (or similar) code for a given length of message David Brown <david.brown@hesbynett.no> - 2015-09-25 14:32 +0200
      Re: Size of a CRC (or similar) code for a given length of message Julio Di Egidio <julio@diegidio.name> - 2015-09-25 05:40 -0700
    Re: Size of a CRC (or similar) code for a given length of message James Harris <james.harris.1@gmail.com> - 2015-09-25 13:45 +0100
  Re: Size of a CRC (or similar) code for a given length of message Öö Tiib <ootiib@hot.ee> - 2015-09-25 04:17 -0700
    Re: Size of a CRC (or similar) code for a given length of message David Brown <david.brown@hesbynett.no> - 2015-09-25 14:36 +0200
      Re: Size of a CRC (or similar) code for a given length of message James Harris <james.harris.1@gmail.com> - 2015-09-25 13:49 +0100

csiph-web