www.wikidata.de-de.nina.az
Dieser Artikel wurde im Projekt Kryptologie zur Verbesserung eingetragen Hilf mit ihn zu bearbeiten und beteilige dich an der Diskussion Vorlage Projekthinweis Wartung KryptologieFolgende Verbesserungen waren gut Hallo Der vorliegende WP Artikel ist fur nicht allgemeinverstandlich befunden worden Es ware daher eine Hilfe wenn jemand mit Sachverstand sich dieser Thematik mal annehmen konnte Grusse A Abdel Rahim Diskussion 19 35 2 Sep 2023 CEST Die zyklische Redundanzprufung englisch cyclic redundancy check daher meist CRC ist ein Verfahren zur Bestimmung eines Prufwerts fur Daten um Fehler bei der Ubertragung oder Speicherung erkennen zu konnen Im Idealfall kann das Verfahren sogar die empfangenen Daten selbstandig korrigieren um eine erneute Ubertragung zu vermeiden Es wurde 1961 von W Wesley Peterson entwickelt 1 Inhaltsverzeichnis 1 Allgemeines 2 Verfahren 2 1 Beispiel 2 2 Umsetzung 2 3 Andere Startwerte 2 4 Nullproblem und Nachbearbeitung 3 Erkannte Fehler 3 1 Ein Bit Fehler 3 2 Zwei isolierte Ein Bit Fehler 3 3 Ungerade Anzahl von Fehlern 3 4 Bundelfehler 3 5 Beispiel 3 6 Erkannte Fehler nach der Bitfiltertheorie 4 Berechnung einer CRC Prufsumme in C und Pascal bzw Delphi 5 Polynome und Typen 6 Siehe auch 7 Weblinks 8 EinzelnachweiseAllgemeines BearbeitenVor der Datenspeicherung oder Ubertragung wird fur jeden Datenblock der Nutzdaten zusatzliche Redundanz in Form eines sogenannten CRC Werts angefugt Dieser ist ein nach einem bestimmten Verfahren berechneter Prufwert mit dessen Hilfe man wahrend der Speicherung bzw Ubertragung eventuell aufgetretene Fehler erkennen kann Zur Uberprufung der Daten wird dasselbe Berechnungsverfahren auf den Datenblock einschliesslich des angefugten CRC Werts angewandt Ist das Ergebnis dann null kann angenommen werden dass der Datenblock unverfalscht ist Verschiedene technische Anwendungen weichen allerdings von diesem Schema ab indem sie beispielsweise die Berechnung mit einem bestimmten Wert initialisieren oder den CRC Wert vor der Ubermittlung invertieren CRC ist so ausgelegt dass Fehler bei der Ubertragung der Daten wie sie beispielsweise durch Rauschen auf der Leitung verursacht werden konnten mit hoher Wahrscheinlichkeit entdeckt werden CRCs von seriellen Datenubertragungen konnen sehr einfach in Hardware realisiert werden Zum Beispiel werden Datenubertragungen uber Ethernet sowie die meisten Festplatten Ubertragungen mit CRC Verfahren gepruft Das CRC Verfahren ist nur fur die Erkennung von zufalligen Fehlern ausgelegt Es ist nicht geeignet die Integritat der Daten zu bestatigen Das heisst es ist verhaltnismassig leicht durch beabsichtigte Modifikation einen Datenstrom zu erzeugen der den gleichen CRC Wert wie eine gegebene Nachricht hat Wenn eine solche Sicherheit gefordert ist mussen kryptografische Hash Funktionen wie beispielsweise SHA oder Signatur Funktionen wie beispielsweise RSA zum Einsatz kommen Der Name des Verfahrens beruht darauf dass der angefugte Wert keinen Informationsgehalt besitzt der nicht bereits in dem zugrunde liegenden Datenblock enthalten ist Er ist deshalb redundant CRCs beruhen auf zyklischen Codes Das sind Block Codes die die Eigenschaft haben dass jede zyklische Verschiebung der Bits eines gultigen Code Worts ebenfalls ein gultiges Code Wort ist Verfahren BearbeitenDieser Artikel oder Abschnitt ist nicht allgemeinverstandlich formuliert Die Mangel sind unter Diskussion Zyklische Redundanzprufung beschrieben Wenn du diesen Baustein entfernst begrunde dies bitte auf der Artikeldiskussionsseite und erganze den automatisch erstellten Projektseitenabschnitt Wikipedia Unverstandliche Artikel Zyklische Redundanzprufung um Erledigt 1 Die Berechnung des CRC Werts beruht auf Polynomdivision Die Folge der zu ubertragenden Bits wird als binares Polynom betrachtet Beispiel Die Bitfolge 1 0 0 1 1 1 0 1 entspricht dem Polynom1 x 7 0 x 6 0 x 5 1 x 4 1 x 3 1 x 2 0 x 1 1 x 0 x 7 x 4 x 3 x 2 1 displaystyle 1 cdot x 7 0 cdot x 6 0 cdot x 5 1 cdot x 4 1 cdot x 3 1 cdot x 2 0 cdot x 1 1 cdot x 0 x 7 x 4 x 3 x 2 1 nbsp Die Bitfolge der Codereprasentation der Daten wird durch ein vorher festzulegendes Generatorpolynom das CRC Polynom Modulo mod 2 geteilt wobei ein Rest bleibt Dieser Rest ist der CRC Wert Bei der Ubertragung des Datenblocks hangt man den CRC Wert an den originalen Datenblock an und ubertragt ihn mit Um zu verifizieren dass die Daten keinen Fehler beinhalten wird der empfangene Datenblock mit angehangtem CRC Wert als Binarfolge interpretiert erneut durch das CRC Polynom Modulo geteilt und der Rest ermittelt Wenn kein Rest bleibt ist entweder kein Fehler aufgetreten oder es ist ein sehr unwahrscheinlicher Fehler aufgetreten der in Polynomdarstellung das CRC Polynom als Faktor hat Es ist darauf zu achten dass es sich bei den Einsen und Nullen der Kommunikation mit CRC nicht um die Reprasentation einer Zahl sondern um ein Polynom handelt Das bedeutet dass die Modulodivision mit Binarzahlen oder Zahlen allgemein beispielsweise mit dem Taschenrechner nicht auf das richtige Ergebnis fuhrt Die Datenubertragung erfordert bestimmte unerlassliche Ubereinkommen Zum einen muss dem Empfanger bewusst sein dass uberhaupt eine gesicherte Ubertragung der Ursprungsdaten stattfinden soll An der Art des eintreffenden Datenstromes allein ist dies nicht zu erkennen Zum anderen muss der Empfanger dasselbe CRC Polynom und Rechenverfahren benutzen wie der Sender Und schliesslich muss der Empfanger die Information besitzen wo sich im Datenstrom die zusatzlich zu den Daten ubertragene Prufsumme befindet Beispiel Bearbeiten Es folgt ein Beispiel in dem fur einen Binarcode von 5 Bit der CRC berechnet und uberpruft werden soll Das Generatorpolynom CRC Polynom lautet 110101 1 x 5 1 x 4 0 x 3 1 x 2 0 x 1 1 x 0 displaystyle 1x 5 1x 4 0x 3 1x 2 0x 1 1x 0 nbsp und ist somit 5 Grades Der zu ubertragenden Bitfolge welche auch als Rahmen engl frame bezeichnet wird werden n displaystyle n nbsp Nullen angehangt Rahmen mit Anhang wobei n displaystyle n nbsp dem Grad des Generatorpolynoms entspricht bzw der Anzahl der Bits des Generatorpolynoms minus eins Generatorpolynom 110101 zuvor festgelegt Rahmen 11011 Nutzdaten Rahmen mit Anhang 1101100000 das Generatorpolynom hat r displaystyle r nbsp Stellen also werden r 1 n displaystyle r 1 n nbsp Nullen erganzt hier ist n 5 displaystyle n 5 nbsp Nun wird der Rahmen mit Anhang von links her durch das Generatorpolynom dividiert Dabei wird ausschliesslich das exklusive OR XOR verwendet Wenn man dies im ersten Schritt anwendet wird aus 110110 XOR 110101 die Zahl 000011 wobei gilt 1 XOR 1 0 1 XOR 0 1 0 XOR 1 1 0 XOR 0 0 Es folgt das vollstandige Beispiel immer mit der ersten gemeinsamen 1 anfangen 1101100000 110101 0000110000 110101 00101 Rest An den Rahmen ohne Anhang wird nun der Rest angehangt Dieser muss ebenfalls aus n displaystyle n nbsp Bit bestehen Damit hangen wir nun 00101 an den Rahmen an Ubertragener Rahmen 1101100101Diese Nachricht kann jetzt beispielsweise uber ein Netzwerk ubertragen werden Wenn die Nachricht beim Empfanger eintrifft kann dieser uberprufen ob sie korrekt angekommen ist Mittels Division durch das Generatorpolynom kann jetzt die fehlerhafte Ubertragung erkannt werden Korrekte Ubertragung der Nachricht 1101100101Das Generatorpolynom wie oben 1101011101100101 110101 110101 110101 00000 Der Rest der Division ist gleich null Es ist also wahrscheinlich kein Fehler aufgetreten Fehlerhaft ubertragene Nachricht Beispiel 1 b 0 b 01100101Das Generatorpolynom wie oben 1101011001100101 110101 100110 110101 100111 110101 100100 110101 100011 110101 10110 Der Rest der Division 10110 ist ungleich null Also ist ein Fehler aufgetreten Bei der Uberprufung auf Richtigkeit konnen folgende vier Falle auftreten Der Rest der Division ist null und die Nachricht ist richtig Der Rest der Division ist null und die Nachricht ist fehlerhaft dieser Fall ist unwahrscheinlich kann aber vorkommen wenn das Fehlerpolynom ein Vielfaches des Generatorpolynoms ist oder wenn sich zwei Fehler in der gleichen Ubertragung gegenseitig aufheben Der Rest der Division ist ungleich null und die Nachricht ist fehlerhaft Der Rest der Division ist ungleich null und die Nachricht ist richtig dieser Fall tritt ein wenn lediglich der angehangte Rest fehlerhaft ubertragen wird dies ist jedoch ebenfalls unwahrscheinlich da der ubertragene Rest im Vergleich zur Gesamtlange des Pakets kurz ist Umsetzung Bearbeiten Das CRC Verfahren lasst sich sowohl in einfachen Hardware Bausteinen als auch in Software realisieren Verwendet wird ein Schieberegister mit n Bits dabei ist n der Grad des Erzeugerpolynoms etwa ein 32 Bit Schieberegister bei CRC 32 und ein Bit Datenstrom beliebiger Lange gefolgt von n Null Bits Pseudocode des Algorithmus hochstwertiges Bit ganz links Multiplikation mit 2 bedeutet ein Schieben um eine Stelle nach links crc 0000 Startwert fur alle Bits b im Datenstrom wenn das am weitesten links stehende Bit von crc 1 ist crc crc 2 b xor CRC Polynom sonst crc crc 2 bcrc enthalt das Ergebnis Durch Verwendung einer Tabelle die etwa bei einer CRC 8 fur jedes der 256 moglichen Bytes den zugehorigen CRC Wert enthalt lasst sich obiger Algorithmus um den Faktor 8 beschleunigen Das resultiert daraus dass ein Tabelleneintrag 8 Bits 1 Byte enthalt und B a s i s S t e l l e n 2 8 256 displaystyle mathrm Basis mathrm Stellen 2 8 256 nbsp verschiedene Tabelleneintrage existieren Die Geschwindigkeitssteigerung wird durch den direkten Zugriff auf die Tabelle mithilfe der zu berechnenden Bitfolge realisiert indem die gesuchte CRC 8 Berechnung an der Stelle in der Tabelle steht welche den binaren Wert der zu berechnenden Bitfolge als Index hat Die Operationen Linksschieben und Exklusiv Oder machen die CRC hervorragend geeignet zur Verwendung in Logikschaltungen Die CRC eines Datenstroms kann bitweise oder auch Byte weise usf berechnet und vom Sender an die Daten angehangt werden Der Empfanger des Datenstroms kann den CRC genauso wie der Sender berechnen jedoch unter Einbeziehung des CRC Das Ergebnis inklusive des CRC muss dann gleich null sein sonst enthalt der Strom Bitfehler CRC Typen werden oft anhand des als Divisor verwendeten Polynoms unterschieden im Hexadezimal Format Eines der meistverwendeten CRCs u a von Ethernet FDDI ZIP und PNG benutzt ist das Polynom 0x04C11DB7 bekannt als CRC 32 Es stellte sich heraus dass einige Polynome besser schutzen als andere Fur CRC haufig verwendete Polynome sind das Ergebnis umfangreicher mathematischer und empirischer Analysen und keine Zufallszahlen auch wenn sie so aussehen Andere Startwerte Bearbeiten Die Implementierung fuhrt eine Polynomdivision aus wenn als Startwert 0000 verwendet wird Oft findet man andere Startwerte etwa 1111 Dies entspricht einer Polynomdivision wenn die ersten n Bits des Datenstroms invertiert werden Ein Startwert ungleich 0000 ist vorzuziehen da fehlende Bits innerhalb fuhrender Nullen im Datenstrom sonst nicht erkannt werden ebenso wie bei einer gewohnlichen Division zahlen bei einer Polynomdivision fuhrende Nullen nicht Nullproblem und Nachbearbeitung Bearbeiten Eine weitere Problematik stellt das Nullproblem dar das in zweierlei Form auftritt Produziert ein Datenstrom zufallig einen CRC gleich null so ist der CRC auch dann null wenn dem Datenstrom zusatzliche Nullen angehangt werden oder falls der Datenstrom mit einer oder mehreren Nullen endet einige dieser letzten Nullen entfernt werden Ist dem Ende des Datenstroms der CRC angehangt so wie es ein Sender eben verschickt und bei der Ubertragung werden nach dem gesendeten CRC noch zusatzliche Nullen angefugt so konnen diese zusatzlichen Nullen am Ende nicht erkannt werden Das Nullproblem in beiden Ausfuhrungen ist unabhangig davon ob Startwerte gleich null oder ungleich null verwendet werden Das Nullproblem in beiden Ausfuhrungen wird vermieden indem die Bits des CRC Ergebnisses invertiert werden Erfolgt im Empfanger die CRC Prufung derart dass der Empfanger einen CRC aus dem empfangenen Datenpaket berechnet wobei das Datenpaket aus Datenstrom und angehangtem CRC besteht so ist im Falle eines unveranderten nichtinvertierten CRC des Senders der berechnete CRC im Empfanger stets null Im Falle eines invertierten CRC des Senders ist der berechnete CRC im Empfanger immer der gleiche Wert dieser wird auch als Magic Number bezeichnet Das Nullproblem der zweiten Ausfuhrung kann auch vermieden werden indem die Reihenfolge der CRC Bits umgekehrt wird Unerkannt bleibt jedoch der Fall wo der CRC gleich null ist was das Nullproblem der ersten Art darstellt Das bisher beschriebene Nullproblem bezieht sich also auf die Problematik am Ende des Datenstroms zusatzlich hinzugefugte oder verlorengegangene Nullen zu erkennen Dies ist jedoch nur dann notig wenn aufgrund vorherrschender Randbedingungen nicht sichergestellt werden kann dass die Grosse der Daten unverandert bleibt Von einem Nullproblem spricht man jedoch bisweilen auch dann wenn es problematisch ist wenn ein Datenstrom aus lauter Nullen auch einen CRC gleich Null erzeugt Ein CRC gleich null aus Null Daten entsteht unabhangig vom Generatorpolynom grundsatzlich wenn der CRC Startwert gleich null ist und die Bits des resultierenden CRC nicht invertiert werden Dieses Problem kann somit vermieden werden indem ein Startwert ungleich null festgelegt wird oder aber auch die resultierenden CRC Bits invertiert werden Der bekannte CRC 32 verwendet sowohl 1111 als Startwert als auch ein inverses Ergebnis Bei CRC 16 wird ebenfalls meist 1111 verwendet das Ergebnis jedoch nicht invertiert In beiden Fallen bleibt die Reihenfolge der CRC Bits unverandert Erkannte Fehler BearbeitenIst das CRC Polynom gut gewahlt konnen mit dem oben beschriebenen Verfahren alle Einbitfehler jede ungerade Anzahl von verfalschten Bits sowie alle Bundelfehler der Lange r displaystyle leq r nbsp erkannt werden wobei r displaystyle r nbsp der Grad des CRC Polynoms ist Zusatzlich werden alle Fehler also auch unabhangige Vierbit Sechsbit Achtbitfehler usw erkannt deren Polynomdarstellung einen kleineren Grad als das CRC Polynom hat Zweibitfehler werden entgegen der landlaufigen Meinung nicht grundsatzlich erkannt Warum das so ist bzw wie das CRC Polynom zu wahlen ist folgt aus den kommenden Uberlegungen Sei G x displaystyle G x nbsp das CRC Polynom Generatorpolynom und T x displaystyle T x nbsp die Polynomdarstellung der um den CRC Wert erweiterten zu ubertragenden Bitfolge Wenn ein Fehler bei der Ubertragung auftritt kommt in Polynomdarstellung beim Empfanger nicht T x displaystyle T x nbsp sondern T x E x displaystyle T x E x nbsp an Die zu E x displaystyle E x nbsp gehorende Bitfolge hat an jeder Bitposition die bei der zu ubertragenden Bitfolge invertiert bzw verfalscht wurde eine 1 Wenn der Empfanger die um den CRC Wert erweiterte Bitfolge erhalt berechnet er T x E x G x displaystyle T x E x G x nbsp Da T x G x 0 displaystyle T x G x 0 nbsp per Definition von T x displaystyle T x nbsp ist das Ergebnis E x G x displaystyle E x G x nbsp Ein Bit Fehler Bearbeiten Wenn ein Ein Bit Fehler aufgetreten ist gilt E x x i displaystyle E x x i nbsp wobei i displaystyle i nbsp bestimmt welches Bit invertiert ist Wenn nun G x displaystyle G x nbsp zwei oder mehr Terme enthalt wird G x displaystyle G x nbsp niemals E x displaystyle E x nbsp teilen Zwei isolierte Ein Bit Fehler Bearbeiten Sind zwei isolierte Ein Bit Fehler aufgetreten gilt E x x i x j displaystyle E x x i x j nbsp wobei i gt j displaystyle i gt j nbsp Klammert man x j displaystyle x j nbsp aus lasst sich dies auch als E x x j x i j 1 displaystyle E x x j x i j 1 nbsp schreiben Da G x displaystyle G x nbsp nicht durch x displaystyle x nbsp teilbar sein kann reicht es zu fordern dass G x displaystyle G x nbsp nicht x k 1 displaystyle x k 1 nbsp teilt fur alle k displaystyle k nbsp bis zum maximalen Wert von i j displaystyle i j nbsp das heisst der maximalen Rahmenlange Einfache Polynome geringen Grades die eine sichere Ubertragung fur lange Rahmen ermoglichen sind bekannt Zum Beispiel teilt x 15 x 14 1 displaystyle x 15 x 14 1 nbsp den Term x k 1 displaystyle x k 1 nbsp nicht fur jedes k displaystyle k nbsp kleiner 32767 Ungerade Anzahl von Fehlern Bearbeiten Ist eine ungerade Anzahl von Bits verfalscht enthalt E x displaystyle E x nbsp eine ungerade Anzahl von Termen z B x 7 x 2 1 displaystyle x 7 x 2 1 nbsp aber nicht z B x 2 1 displaystyle x 2 1 nbsp Wahlt man das CRC Polynom so dass es x 1 displaystyle x 1 nbsp als Faktor hat werden alle Fehler mit einer ungeraden Anzahl von verfalschten Bits erkannt Beweis Bei der Division durch ein Polynom mit gerader Paritat Anzahl der Terme in dem Polynom also Anzahl der Einsen in der Bitfolge ist die Geradheit oder Ungeradheit der Paritat im Divisions Rest gleich der des Dividenden denn aus 00 wird 11 und umgekehrt und aus 01 wird 10 und umgekehrt x 1 displaystyle x 1 nbsp ist das kleinste Polynom mit gerader Paritat Bei E x G x displaystyle E x G x nbsp wird also stets x displaystyle x nbsp oder 1 displaystyle 1 nbsp als Rest bleiben wenn E x displaystyle E x nbsp ungerade Paritat hat Damit ist E x displaystyle E x nbsp nicht durch G x displaystyle G x nbsp teilbar Bundelfehler Bearbeiten Alle Bundelfehler eng Burst der Lange k r displaystyle k leq r nbsp wobei r displaystyle r nbsp der Grad des CRC Polynoms ist werden erkannt Ein Bundelfehler der Lange k displaystyle k nbsp lasst sich schreiben als x i x k 1 1 x i b x displaystyle x i x k 1 cdots 1 x i b x nbsp wobei i displaystyle i nbsp bestimmt wie viele Bitpositionen von der rechten Seite der empfangenen Bitfolge bzw des empfangenen Rahmens der Bundelfehler entfernt ist Wenn der Fehler erkannt werden soll muss die Division von E x x i b x displaystyle E x x i b x nbsp durch G x displaystyle G x nbsp einen Rest ergeben Da G x displaystyle G x nbsp immer den Term x 0 displaystyle x 0 nbsp enthalt sind G x displaystyle G x nbsp und x displaystyle x nbsp teilerfremd Das heisst wenn G x x i b x displaystyle G x x i b x nbsp dann muss G x b x displaystyle G x b x nbsp Dies ist jedoch nicht moglich da per Annahme der Grad von b x displaystyle b x nbsp kleiner ist d e g b x k 1 displaystyle mathrm deg b x k 1 nbsp als der Grad von G x displaystyle G x nbsp Der Rest kann niemals 0 sein und der Bundelfehler wird erkannt Beispiel Bearbeiten Das Generatorpolynom G x x 16 x 15 x 2 1 displaystyle G x x 16 x 15 x 2 1 nbsp IBM CRC 16 lasst sich als G x x 15 x 1 x 1 displaystyle G x x 15 x 1 x 1 nbsp faktorisieren Wegen des Faktors x 1 displaystyle x 1 nbsp ist dieser CRC in der Lage alle Fehler ungerader Anzahl erkennen zu konnen Weiterhin ist die kleinste positive ganze Zahl k bei welcher das Generatorpolynom G x displaystyle G x nbsp das Polynom x k 1 displaystyle x k 1 nbsp teilt k 32767 Dies bedeutet dass alle beliebig angeordneten zweifachen Bitfehler sicher erkannt werden wenn die Blocklange kleiner als 32768 ist Weiter werden alle Bundelfehler der Lange 16 oder kleiner sicher erkannt Bundelfehler mit einer Lange von 17 sind mit einer Wahrscheinlichkeit von 0 99997 erkennbar Alle Bundelfehler mit einer Lange von 18 und mehr sind mit einer Wahrscheinlichkeit von 0 99998 erkennbar 2 Erkannte Fehler nach der Bitfiltertheorie Bearbeiten Der Vollstandigkeit halber sei hier folgendes erganzt Ein beliebiges Generatorpolynom erkennt samtliche Bundelfehler die nicht langer als das Generatorpolynom sind bis auf eines namlich jenes welches das gleiche Bitmuster hat wie das Generatorpolynom Das beinhaltet naturlich auch Ein Bit Fehler als Bundelfehler der Lange 1 Ein Generatorpolynom mit gerader Anzahl von Termen erkennt jede ungerade Anzahl von Bitfehlern Mit der Bitfiltertheorie lasst sich zeigen dass nur solche Zweibitfehler nicht erkannt werden deren Abstand ein Vielfaches des Zyklus der Periode des langsten Bitfilters ist Bei optimal gewahlten Generatorpolynomen vom Grad n displaystyle n nbsp mit gerader Anzahl von Termen ist dieser Abstand 2 n 1 1 displaystyle 2 n 1 1 nbsp also beispielsweise bei n 16 displaystyle n 16 nbsp betragt diese Periode immerhin 32767 also mehr als 4000 Bytes Es lasst sich ahnlich zeigen dass alle Ein Bit Fehler korrigiert werden konnen wenn der Datenblock nicht langer als die eben erwahnte Periode ist Das folgt daraus dass die Reste nach Division durch das Generatorpolynom alle verschieden sind so weit man verschiedene Reste von denen es hochstens 2 n displaystyle 2 n nbsp gibt haben kann Allerdings lassen unter Umstanden Drei Bit Fehler die gleichen Reste so dass in diesem Fall eine Korrektur das Ergebnis noch mehr verfalschen kann Allerdings sind Ein und Zwei Bit Fehler immer mit Sicherheit zu unterscheiden Genaueres entnehme man der Referenz Analyse des CRC Verfahrens mit Bitfiltern Dort findet sich auch eine Liste optimaler Generatorpolynome verschiedener Grade Berechnung einer CRC Prufsumme in C und Pascal bzw Delphi BearbeitenCRC 32 Implementierung in der Programmiersprache CDas folgende C Programm berechnet die CRC 32 des 8 Bit langen Datenstroms 10001100 include lt stdio h gt include lt stdlib h gt include lt stdint h gt typedef unsigned int32 uint32 t gt fur MS VS define CRC32POLY 0x04C11DB7 CRC 32 Polynom const uint8 t bitstream 1 0 0 0 1 1 0 0 const int bitcount 8 uint32 t crc32 0 Schieberegister int main for int i 0 i lt bitcount i if crc32 gt gt 31 amp 1 bitstream i crc32 crc32 lt lt 1 CRC32POLY else crc32 crc32 lt lt 1 printf 0x 08X n crc32 Modifizierte CRC32 Startwert 111 invertiertes Ergebnis mit umgekehrter BitfolgeStandards wie Ethernet modifizieren den Algorithmus Als Startwert wird 111 111 verwendet dies entspricht einer Invertierung der ersten 32 Bits im Datenstrom Besteht der Datenstrom aus Bytes wird das niedrigstwertige Bit zuerst verwendet Alle Bits im Ergebnis werden invertiert und die Bitreihenfolge wird gedreht das heisst das hochstwertige Bit erscheint zuerst Das folgende Programm berechnet einen solchen modifizierten CRC Wert include lt stdio h gt include lt stdlib h gt include lt stdint h gt define CRC32MASKREV 0xEDB88320 CRC 32 Bitmaske umgekehrte Bitfolge const uint8 t bitstream 1 0 0 0 1 1 0 0 ASCII 1 LSB zuerst const int bitcount 8 uint32 t crc32 rev 0 Schieberegister Startwert 111 int main for int i 0 i lt bitcount i if crc32 rev amp 1 bitstream i crc32 rev crc32 rev gt gt 1 CRC32MASKREV else crc32 rev crc32 rev gt gt 1 printf 0x 08X n crc32 rev inverses Ergebnis MSB zuerst IBM CRC 16 Implementierung in der Programmiersprache Pascal DelphiDas folgende Pascal Programm berechnet einen IBM CRC 16 Wert mit Startwert 111 und umgekehrter Bitfolge uber ein Array of Byte und gibt diese aus const Polynom Word A001 Initial Word FFFF var CRC Word N I Integer B Byte begin CRC Initial for I Low Buffer to High Buffer do begin B Buffer I CRC CRC xor B for N 1 to 8 do if CRC and 1 gt 0 then CRC CRC shr 1 xor Polynom else CRC CRC shr 1 end Showmessage IntToHex CRC 4 Ausgabe end CRC CCITT Implementierung in der Programmiersprache Pascal DelphiDas folgende Pascal Programm berechnet einen CRC CITT Wert mit Startwert 0 uber ein Array of Byte und gibt diese aus const Polynom Word 1021 Initial Word 0 var CRC Word N I Integer B Word begin CRC Initial for I Low Buffer to High Buffer do begin B Buffer I CRC CRC xor B shl 8 for N 1 to 8 do if CRC and 8000 lt gt 0 then CRC CRC shl 1 xor Polynom else CRC CRC shl 1 end CRC CRC and FFFF Showmessage IntToHex CRC 4 Ausgabe end Polynome und Typen BearbeitenDie Faktorisierungen der nachfolgenden binaren Generatorpolynome sind modulo 2 zu betrachten Name Polynom Lange MHD AnmerkungenCRC CCITT CRC 4 x 4 x 1 displaystyle x 4 x 1 nbsp 15 3 Identisch mit dem 15 11 Hamming CodeUSB CRC 5 x 5 x 2 1 displaystyle x 5 x 2 1 nbsp 31 3 Identisch mit dem 31 26 Hamming CodeBluetooth x 5 x 4 x 2 1 x 1 x 4 x 1 displaystyle x 5 x 4 x 2 1 x 1 x 4 x 1 nbsp 15 Verkurzter 15 10 Hamming Code SD MMC Card CRC 7 x 7 x 3 1 displaystyle x 7 x 3 1 nbsp 127 3 Identisch mit dem 127 120 Hamming CodeCRC 8 Dallas Maxim 1 Wire Bus x 8 x 5 x 4 1 x 1 x 7 x 6 x 5 x 3 x 2 x 1 displaystyle x 8 x 5 x 4 1 x 1 x 7 x 6 x 5 x 3 x 2 x 1 nbsp 127 4 Beschrieben bei Dallas Maxim 3 CRC 8 ITU T x 8 x 2 x 1 x 1 x 7 x 6 x 5 x 4 x 3 x 2 1 displaystyle x 8 x 2 x 1 x 1 x 7 x 6 x 5 x 4 x 3 x 2 1 nbsp 127 4 ISDN Header Error Control 4 Kap 7 3 2 2 CRC 8 SAE J1850 x 8 x 4 x 3 x 2 1 displaystyle x 8 x 4 x 3 x 2 1 nbsp 255 3 Verwendet bei AES EBUCRC 12 x 12 x 11 x 3 x 2 x 1 x 1 x 11 x 2 1 displaystyle x 12 x 11 x 3 x 2 x 1 x 1 x 11 x 2 1 nbsp CAN CRC x 15 x 14 x 10 x 8 x 7 x 4 x 3 1 x 1 x 7 x 3 1 x 7 x 3 x 2 x 1 displaystyle x 15 x 14 x 10 x 8 x 7 x 4 x 3 1 x 1 x 7 x 3 1 x 7 x 3 x 2 x 1 nbsp 127 6CRC CCITT CRC 16 x 16 x 12 x 5 1 x 1 x 15 x 14 x 13 x 12 x 4 x 3 x 2 x 1 displaystyle x 16 x 12 x 5 1 x 1 x 15 x 14 x 13 x 12 x 4 x 3 x 2 x 1 nbsp 32767 4 Verwendet bei XMODEM CRC HDLC X 25 5 Kap 2 2 7 4 Anhang I IBM CRC 16 x 16 x 15 x 2 1 x 1 x 15 x 1 displaystyle x 16 x 15 x 2 1 x 1 x 15 x 1 nbsp 32767 4CRC DNP CRC 16 x 16 x 13 x 12 x 11 x 10 x 8 x 6 x 5 x 2 1 displaystyle x 16 x 13 x 12 x 11 x 10 x 8 x 6 x 5 x 2 1 nbsp x 1 x 15 x 14 x 13 x 11 x 8 x 5 x 1 displaystyle x 1 x 15 x 14 x 13 x 11 x 8 x 5 x 1 nbsp CRC 16 VOV 04 05 1 x 16 x 14 x 13 x 11 x 10 x 9 x 8 x 6 x 5 x 1 displaystyle x 16 x 14 x 13 x 11 x 10 x 9 x 8 x 6 x 5 x 1 nbsp x 8 x 4 x 3 x 2 x 1 x 8 x 6 x 5 x 4 x 2 1 displaystyle x 8 x 4 x 3 x 2 x 1 x 8 x 6 x 5 x 4 x 2 1 nbsp CRC 24 IETF RFC2440 x 24 x 23 x 18 x 17 x 14 x 11 x 10 x 7 x 6 x 5 x 4 x 3 x 1 displaystyle x 24 x 23 x 18 x 17 x 14 x 11 x 10 x 7 x 6 x 5 x 4 x 3 x 1 nbsp x 1 x 23 x 17 x 13 x 12 x 11 x 9 x 8 x 7 x 5 x 3 1 displaystyle x 1 x 23 x 17 x 13 x 12 x 11 x 9 x 8 x 7 x 5 x 3 1 nbsp CRC 24 Mode S x 24 x 23 x 22 x 21 x 20 x 19 x 18 x 17 x 16 x 15 x 14 x 13 x 12 x 10 x 3 1 displaystyle x 24 x 23 x 22 x 21 x 20 x 19 x 18 x 17 x 16 x 15 x 14 x 13 x 12 x 10 x 3 1 nbsp x 1 x 6 x 5 x 4 x 2 1 x 17 x 16 x 15 x 13 x 10 x 8 x 7 x 5 x 4 x 3 x 1 displaystyle x 1 x 6 x 5 x 4 x 2 1 x 17 x 16 x 15 x 13 x 10 x 8 x 7 x 5 x 4 x 3 x 1 nbsp Bei Framelange bis 112 Bits fehlerkorrigierend bis 5 BitCRC 32 IEEE 802 3 x 32 x 26 x 23 x 22 x 16 x 12 x 11 x 10 x 8 x 7 x 5 x 4 x 2 x 1 displaystyle x 32 x 26 x 23 x 22 x 16 x 12 x 11 x 10 x 8 x 7 x 5 x 4 x 2 x 1 nbsp 2 32 1 displaystyle 2 32 1 nbsp 3 Verwendet bei Ethernet 6 CRC 64 ISO 3309 x 64 x 4 x 3 x 1 displaystyle x 64 x 4 x 3 x 1 nbsp CRC 64 ECMA 182 7 x 64 x 62 x 57 x 55 x 54 x 53 x 52 x 47 x 46 x 45 x 40 x 39 x 38 x 37 x 35 x 33 displaystyle x 64 x 62 x 57 x 55 x 54 x 53 x 52 x 47 x 46 x 45 x 40 x 39 x 38 x 37 x 35 x 33 nbsp x 32 x 31 x 29 x 27 x 24 x 23 x 22 x 21 x 19 x 17 x 13 x 12 x 10 x 9 x 7 x 4 x 1 displaystyle x 32 x 31 x 29 x 27 x 24 x 23 x 22 x 21 x 19 x 17 x 13 x 12 x 10 x 9 x 7 x 4 x 1 nbsp x 1 2 x 15 x 1 x 15 x 10 x 5 x 1 x 15 x 12 x 3 x 1 x 17 x 14 x 12 x 11 x 10 x 9 x 8 x 5 x 4 x 3 1 displaystyle x 1 2 x 15 x 1 x 15 x 10 x 5 x 1 x 15 x 12 x 3 x 1 x 17 x 14 x 12 x 11 x 10 x 9 x 8 x 5 x 4 x 3 1 nbsp Verwendet bei XZ UtilsDie Spalte MHD gibt die minimale Hamming Distanz an die zwei Bitfolgen mit gultigem CRC Wert unterscheidet Ein CRC Algorithmus kann also jeden Fehler erkennen der innerhalb der angegebenen maximalen Lange weniger als MHD Bit Positionen betrifft Wird die maximale Lange uberschritten gibt es bei jedem CRC Algorithmus Zwei Bit Fehler die nicht erkannt werden z B zwei Fehler die genau Lange Positionen auseinanderliegen CRC Werte werden haufig als Prufsummen bezeichnet obwohl die Berechnung der Kontrollbits nicht nur durch gewohnliche Addition geschieht Der Begriff Prufsumme wurde zuerst im Zusammenhang mit Paritatsbits benutzt die sich als eine echte Summe uber Z 2 displaystyle mathbb Z 2 nbsp berechnen lassen Dabei hat sich der Begriff so sehr eingeburgert dass er als Bezeichnung fur die Berechnung von allgemeinen Kontrollbits ubernommen wurde Die Prufpolynome wurden aus einer Vielzahl von moglichen Polynomen so ausgewahlt dass sich fur den damit erzeugten Code gunstige Eigenschaften ergeben Beispiel Wenn ein Polynom eine gerade Anzahl von Termen in x aufweist CRC16 CCITT 4 und CRC16 IBM 4 nicht aber CRC 4 3 ist das Binom x 1 als Faktor darin enthalten Dieses Binom bewirkt eine Paritatsprufung wodurch im entstehenden Code alle Fehler mit einer ungeraden Anzahl von Fehlerstellen in jedem Fall erkennbar sind Siehe auch BearbeitenSimple File Verification Slicing by EightWeblinks BearbeitenCRC JavaScript Rechner und C Code Online CRC Rechner fur die gangigsten CRCs mit CRC Berechnungsroutinen in C und ANSI C zum Download engl A Painless Guide to CRC Error Detection Algorithms Memento vom 19 Mai 2019 im Internet Archive engl The CRC Project engl Eine Implementierung von CRC in C mit Template Klassen Fehlererkennung mittels CRC Analyse des CRC Verfahrens mit BitfilternEinzelnachweise Bearbeiten W W Peterson Cyclic Codes for Error Detection In Proceedings of the IRE Vol 49 No 1 1961 S 228 235 Todd K Moon Error Correction Coding John Wiley amp Sons 2005 ISBN 0 471 64800 0 S 149 Dallas Maxim DS18S20 S 6 Memento vom 1 April 2010 im Internet Archive PDF 250 kB auf datasheets maxim ic com ITU T Recommendation I432 1 International Telecommunication Union Februar 1999 S 5 6 abgerufen am 9 Marz 2011 ITU T Recommendation X 25 International Telecommunication Union Oktober 1996 S 9 145 abgerufen am 9 Marz 2011 IEEE Std 802 3 2015 Section 1 IEEE Computer Society 9 September 2015 S 112 abgerufen am 4 Mai 2018 ECMA 182 Abgerufen von https de wikipedia org w index php title Zyklische Redundanzprufung amp oldid 236980657