### Effect of Initial Seed Values on CRCs and Checksums

Checksums and CRCs involve a repeated computation over the length of a dataword that

accumulates a result to form an FCS value. The accumulation value must be initialized to some

known value for this process to produce a predictable result for any given codeword. When the

initial value is unstated, it is typically assumed to be zero.

In some cases, a non-zero value is used instead, such as 0xFFFF for a 16-bit checksum or CRC.

This has the advantage of making an all zero codeword impossible. Perhaps more importantly

for Fletcher checksum, ATN-32, and CRCs, this has the additional advantage of causing leading

zeros of a message to affect the FCS value. To better understand, consider a CRC initialized

with an all zero seed value. Any number of all zero dataword chunks can be fed into the CRC

and it will stay at a zero value, throwing away information about how many zero chunks have

been processed. However, if the CRC computation is initialized to any non-zero value,

processing chunks with a value of zero will cycle patterns through the CRC, tracking the number

of zero-valued chunks that have been processed as a sort of counter. This can help with

situations in which additional leading-zero bytes have been erroneously added to a dataword.

In general, any non-zero seed value can be used. The value selected does not affect

error-detection properties beyond those previously discussed. In particular, CRC error detection,

in terms of the BER fault model, is independent of the seed value used.

The CRC and checksum values can be alternately or additionally modified to create an FCS

value. A common modification is to XOR the result of a checksum computation with a value,

such as 0xFFFF, which inverts bits, but does not lose any of the information content of the

checksum computation. In some cases, CRC result values must be bit-reversed to preserve burst

error properties across the dataword to FCS boundary, depending upon the computation method and message bit ordering in the dataword.

The "seed value" is sometimes also called the "initial value"

Source:

accumulates a result to form an FCS value. The accumulation value must be initialized to some

known value for this process to produce a predictable result for any given codeword. When the

initial value is unstated, it is typically assumed to be zero.

In some cases, a non-zero value is used instead, such as 0xFFFF for a 16-bit checksum or CRC.

This has the advantage of making an all zero codeword impossible. Perhaps more importantly

for Fletcher checksum, ATN-32, and CRCs, this has the additional advantage of causing leading

zeros of a message to affect the FCS value. To better understand, consider a CRC initialized

with an all zero seed value. Any number of all zero dataword chunks can be fed into the CRC

and it will stay at a zero value, throwing away information about how many zero chunks have

been processed. However, if the CRC computation is initialized to any non-zero value,

processing chunks with a value of zero will cycle patterns through the CRC, tracking the number

of zero-valued chunks that have been processed as a sort of counter. This can help with

situations in which additional leading-zero bytes have been erroneously added to a dataword.

In general, any non-zero seed value can be used. The value selected does not affect

error-detection properties beyond those previously discussed. In particular, CRC error detection,

in terms of the BER fault model, is independent of the seed value used.

The CRC and checksum values can be alternately or additionally modified to create an FCS

value. A common modification is to XOR the result of a checksum computation with a value,

such as 0xFFFF, which inverts bits, but does not lose any of the information content of the

checksum computation. In some cases, CRC result values must be bit-reversed to preserve burst

error properties across the dataword to FCS boundary, depending upon the computation method and message bit ordering in the dataword.

**Note:**The "seed value" is sometimes also called the "initial value"

Source:

- Koopman, Driscoll, Hall, "Selection of Cyclic Redundancy Code and Checksum Algorithms to Ensure Critical Data Integrity," DOT/FAA/TC-14/49 , March 2015

## Comments

## Post a Comment