Cyclische redundantiecontrole

A cyclische redundantiecontrole (CRC) is een Foutdetectiecode Vaak gebruikt in digitaal netwerk en opslagapparaten om accidentele wijzigingen in digitale gegevens te detecteren. Gegevensblokken die deze systemen invoeren, krijgen een korte Controleer waarde bijgevoegd, gebaseerd op de rest van een polynoomverdeling van hun inhoud. Bij het ophalen wordt de berekening herhaald en in het geval dat de controlewaarden niet overeenkomen, kunnen corrigerende maatregelen worden genomen tegen gegevenscorruptie. CRC's kunnen worden gebruikt foutcorrectie (zien bitfilters).[1]

CRC's worden zo genoemd omdat de controleren (gegevensverificatie) Waarde is een ontslag (het breidt het bericht uit zonder toe te voegen informatie) en de algoritme is gebaseerd op cyclisch codes. CRC's zijn populair omdat ze eenvoudig te implementeren zijn in binair hardware, gemakkelijk om wiskundig te analyseren, en bijzonder goed in het detecteren van gemeenschappelijke fouten veroorzaakt door lawaai in transmissiekanalen. Omdat de cheque -waarde een vaste lengte heeft, de functie die het genereert, wordt af en toe gebruikt als een hash-functie.

Invoering

CRC's zijn gebaseerd op de theorie van cyclisch Foutcorrectiecodes. Het gebruik van systematisch Cyclische codes, die berichten coderen door een controlewaarde met een vaste lengte toe te voegen, voor het doel van foutdetectie in communicatienetwerken, werden eerst voorgesteld door W. Wesley Peterson in 1961.[2] Cyclische codes zijn niet alleen eenvoudig te implementeren, maar hebben het voordeel dat ze bijzonder geschikt zijn voor de detectie van uitbarstfouten: aaneengesloten reeksen van foutieve gegevenssymbolen in berichten. Dit is belangrijk omdat burst -fouten in velen veel voorkomende transmissiefouten zijn communicatie kanalen, inclusief magnetische en optische opslagapparaten. Meestal een n-bit CRC toegepast op een gegevensblok met willekeurige lengte zal een enkele foutblokkeer niet langer detecteren dan n bits, en de fractie van alle langere foutuitbarstingen die het zal detecteren is (1 - 2n).

Specificatie van een CRC-code vereist een definitie van een zogenaamde generator polynoom. Deze polynoom wordt de deler in een Polynomiale lange divisie, die de boodschap aanneemt als de dividend en waarin de quotiënt wordt weggegooid en de rest wordt het resultaat. Het belangrijke voorbehoud is dat het polynoom coëfficiënten worden berekend op basis van de rekenkunde van een eindige veld, dus de toevoegingsbewerking kan altijd bitgewijs parallel worden uitgevoerd (er is geen carry tussen cijfers).

In de praktijk gebruiken alle vaak gebruikte CRC's de Galois Field, of eenvoudiger een eindig veld, van twee elementen, GF (2). De twee elementen worden meestal 0 en 1 genoemd, comfortabel bijpassende computerarchitectuur.

Een CRC wordt een n-bit CRC wanneer de cheque -waarde is n bits lang. Voor een gegeven n, Meerdere CRC's zijn mogelijk, elk met een ander polynoom. Zo'n polynoom heeft de hoogste graad n, wat betekent dat het heeft n + 1 Voorwaarden. Met andere woorden, de polynoom heeft een lengte van n + 1; de codering ervan vereist n + 1 bits. Merk op dat de meeste polynoomspecificaties de MSB of LSB, omdat ze altijd zijn 1. De CRC en bijbehorende polynoom hebben meestal een naam van de vorm Crc-n-Xxx zoals in de tafel onderstaand.

Het eenvoudigste foutdetectiesysteem, het pariteitsbit, is in feite een 1-bit CRC: het gebruikt de generatorpolynoomx + 1 (twee termen),[3] en heeft de naam CRC-1.

Sollicitatie

Een CRC-apparaat berekent een korte binaire volgorde van een korte lengte, bekend als de Controleer waarde of CRC, om elk blok van gegevens te verzonden of opgeslagen te worden en toe te voegen aan de gegevens, waardoor een codewoord.

Wanneer een codewoord wordt ontvangen of gelezen, vergelijkt het apparaat de controlewaarde met één vers berekend uit het gegevensblok, of gelijktijdig, voert een CRC uit op het hele codewoord en vergelijkt de resulterende controlewaarde met een verwacht residu constante.

Als de CRC -waarden niet overeenkomen, bevat het blok een gegevensfout.

Het apparaat kan corrigerende maatregelen ondernemen, zoals het herlezen van het blok of vragen dat het opnieuw wordt verzonden. Anders worden de gegevens verondersteld foutvrij te zijn (hoewel met enige kleine waarschijnlijkheid niet-gedetecteerde fouten kan bevatten; dit is inherent aan de aard van foutencontrole).[4]

Data-integriteit

CRC's zijn specifiek ontworpen om te beschermen tegen veelvoorkomende soorten fouten op communicatiekanalen, waar ze een snelle en redelijke zekerheid kunnen bieden van de integriteit van geleverde berichten. Ze zijn echter niet geschikt voor het beschermen tegen opzettelijke wijziging van gegevens.

Ten eerste, omdat er geen authenticatie is, kan een aanvaller een bericht bewerken en de CRC opnieuw berekenen zonder dat de vervanging wordt gedetecteerd. Wanneer ze naast de gegevens worden opgeslagen, beschermen CRC's en cryptografische hash zelf niet tegen opzettelijk Wijziging van gegevens. Elke toepassing die bescherming vereist tegen dergelijke aanvallen moet cryptografische authenticatiemechanismen gebruiken, zoals Berichtverificatiecodes of Digitale handtekeningen (die gewoonlijk zijn gebaseerd op Cryptografische hash functies).

Ten tweede is CRC, in tegenstelling tot cryptografische hashfuncties, een gemakkelijk omkeerbare functie, waardoor het ongeschikt is voor gebruik in digitale handtekeningen.[5]

Ten derde voldoet CRC aan een relatie vergelijkbaar met die van een lineaire functie (of meer nauwkeurig, een affiene functie):[6]

waar hangt af van de lengte van en . Dit kan ook als volgt worden vermeld, waar , en hebben dezelfde lengte

Als gevolg hiervan, zelfs als de CRC is gecodeerd met een Stream cijfer dat gebruikt XOR als zijn combinerende operatie (of modus van Blokcijfer die het effectief verandert in een stroomcijfer, zoals OFB of CFB), kunnen zowel de boodschap als de bijbehorende CRC worden gemanipuleerd zonder kennis van de coderingssleutel; Dit was een van de bekende ontwerpfouten van de Wired Equivalent Privacy (WEP) protocol.[7]

Berekening

Om een n-bit binaire CRC, lijn de bits in die de invoer op een rij vertegenwoordigen en plaats de (n + 1) -bitpatroon dat de deler van de CRC vertegenwoordigt (een "genoemd"polynoom") Onder het linkeruiteinde van de rij.

In dit voorbeeld zullen we 14 bits berichten coderen met een 3-bit CRC, met een polynoom x3 + x + 1. De polynoom is in binair geschreven als de coëfficiënten; Een 3e graad polynoom heeft 4 coëfficiënten (1x3 + 0x2 + 1x + 1). In dit geval zijn de coëfficiënten 1, 0, 1 en 1. Het resultaat van de berekening is 3 bits lang, daarom wordt het een 3-bit CRC genoemd. U hebt echter 4 bits nodig om de polynoom expliciet te vermelden.

Begin met het te coderen bericht:

11010011101100 

Dit wordt eerst opgevuld met nullen die overeenkomen met de bitlengte n van de CRC. Dit wordt gedaan zodat het resulterende codewoord binnen is systematisch het formulier. Hier is de eerste berekening voor het berekenen van een 3-bit CRC:

11010011101100 000 <--- Input rechts opgevuld met 3 bits 1011 <--- deler (4 bits) = x³ + x + 1 ------------------ 01100011101100 000 <- -- resultaat

Het algoritme werkt op de bits direct boven de deler in elke stap. Het resultaat voor die iteratie is de bitgewijze XOR van de polynoomdeler met de bits erboven. De bits niet boven de deler worden eenvoudig hieronder direct hieronder gekopieerd voor die stap. De deler wordt vervolgens naar rechts verschoven om aan te passen aan de hoogst resterende 1 bit in de invoer, en het proces wordt herhaald totdat de deler het rechteruiteinde van de ingangsrij bereikt. Hier is de volledige berekening:

11010011101100 000 <--- Input rechts opgevuld met 3 bits 1011 <--- Deler 01100011101100 000 <--- Resultaat (Opmerking De eerste vier bits zijn de XOR met de divisie eronder, de rest van de bits zijn ongewijzigd) 1011 <- -Divisor ... 00111011101100 000 1011 00010111101100 000 1011 00000001101100 000 <--- Merk op dat de deler zich beweegt om af te stemmen op de volgende 1 in het dividend (omdat quotiënt voor die stap nul was) 1011 (met andere woorden, het doet het 'T noodzakelijkerwijs een bit per iteratie verplaatsen) 00000000110100 000 1011 00000000011000 000 1011 00000000001110 000 1011 00000000000101 000 101 1 ----------------- 00000000000000 100 <-Rest (3 bits) . Divisie -algoritme stopt hier omdat het dividend gelijk is aan nul.

Aangezien de meest linkse deler elke invoerbit die het heeft aangeraakt, is het aangeraakt, wanneer dit proces eindigt, zijn de enige bits in de inputrij die niet-nul kunnen zijn de n bits aan de rechterkant van de rij. Deze n Bits zijn de rest van de divisiestap en zullen ook de waarde van de CRC -functie zijn (tenzij de gekozen CRC -specificatie om enkele nabewerking vereist).

De geldigheid van een ontvangen bericht kan eenvoudig worden geverifieerd door de bovenstaande berekening opnieuw uit te voeren, dit keer met de toegevoegde controle in plaats van nullen. De rest moet nul gelijk zijn als er geen detecteerbare fouten zijn.

11010011101100 100 <--- Input met controlewaarde 1011 <--- Deler 01100011101100 100 <--- Resultaat 1011 <--- Deler ... 0011101111100 100 ...... 00000000001110 100 1011 0000000000010101 100 101 1 --- --------------- 0000000000000000 000 <--- RESTER

Het volgende Python Code schetst een functie die de initiële CRC -rest voor een gekozen invoer en polynoom zal retourneren, met 1 of 0 als de initiële vulling. Merk op dat deze code werkt met stringingangen in plaats van ruwe nummers:

def CRC_REMAINDER(input_bitstring, polynomial_bitstring, initial_filler):  "" "Bereken de CRC -rest van een reeks bits met behulp van een gekozen polynoom.     Initial_filler moet '1' of '0' zijn.     "" "  polynomial_bitstring = polynomial_bitstring.lstrip('0')  len_input = Len(input_bitstring)  initial_padding = (Len(polynomial_bitstring) - 1) * initial_filler  input_padded_array = lijst(input_bitstring + initial_padding)  terwijl '1' in input_padded_array[:len_input]:  cur_shift = input_padded_array.inhoudsopgave('1')  voor i in bereik(Len(polynomial_bitstring)):  input_padded_array[cur_shift + i] \  = STR(inteken(polynomial_bitstring[i] ! = input_padded_array[cur_shift + i]))  opbrengst ''.meedoen(input_padded_array) [len_input:] def CRC_CHECK(input_bitstring, polynomial_bitstring, check_value):  "" "Bereken de CRC -controle van een reeks bits met behulp van een gekozen polynoom." ""  polynomial_bitstring = polynomial_bitstring.lstrip('0')  len_input = Len(input_bitstring)  initial_padding = check_value  input_padded_array = lijst(input_bitstring + initial_padding)  terwijl '1' in input_padded_array[:len_input]:  cur_shift = input_padded_array.inhoudsopgave('1')  voor i in bereik(Len(polynomial_bitstring)):  input_padded_array[cur_shift + i] \  = STR(inteken(polynomial_bitstring[i] ! = input_padded_array[cur_shift + i]))  opbrengst ('1' niet in ''.meedoen(input_padded_array) [len_input:]) 
>>> CRC_REMAINDER('11010011101100', '1011', '0') '100' >>> CRC_CHECK('11010011101100', '1011', '100') WAAR 

CRC-32-algoritme

Dit is een praktisch algoritme voor de CRC-32-variant van CRC.[8] De crctable is een memoisering van een berekening die zou moeten worden herhaald voor elke byte van de boodschap (Berekening van cyclische redundantiecontroles § Multi-bit berekening).

Functie CRC32 Invoer:       Gegevens: bytes // reeks bytes  Uitvoer:       CRC32: UINT32 // 32-bit niet-ondertekende CRC-32-waarde
// Initialiseer CRC-32 in startwaarde CRC32 ← 0xffffffff
Voor elk byte in gegevens doen nLookupIndex ← (CRC32 XOR BYTE) en 0xFF CRC32 ← (CRC32 SHR 8) XOR CRCTABLE [NLOOKUPINDEX] // crctable is een reeks van 256 32-bit constanten
// voltooi de CRC-32-waarde door alle bits om te keren CRC32 ← CRC32 XOR 0XFFFFFFFopbrengst CRC32


In C ziet het algoritme als zodanig uit:

#erbij betrekken  // uint32_t, uint8_t uint32_t CRC32(const uint8_t gegevens[], size_t Data_length) { 	uint32_t CRC32 = 0xffffffffu; 	 	voor (size_t i = 0; i < Data_length; i++) { 		const uint32_t lookupIndex = (CRC32 ^ gegevens[i])) & 0xff; 		CRC32 = (CRC32 >> 8) ^ Beschadigd[lookupIndex];  // crctable is een reeks van 256 32-bit constanten 	} 	 	// voltooi de CRC-32-waarde door alle bits om te keren 	CRC32 ^= 0xffffffffu; 	opbrengst CRC32; } 

Wiskunde

Wiskundige analyse van dit divisie-achtige proces laat zien hoe een deler te selecteren die goede foutdetectie-eigenschappen garandeert. In deze analyse worden de cijfers van de bitreeksen in een of andere variabele als de coëfficiënten van een polynoom genomen x—Coëfficiënten die elementen van het eindige veld zijn GF (2) (De Modulo 2 van de gehele getallen, d.w.z. een nul of een), in plaats van meer bekende getallen. De set binaire polynomen is een wiskundige ring.

Polynomen ontwerpen

De selectie van de generatorpolynoom is het belangrijkste onderdeel van de implementatie van het CRC -algoritme. De polynoom moet worden gekozen om de foutdetecterende mogelijkheden te maximaliseren en tegelijkertijd de algehele botsingskansen te minimaliseren.

Het belangrijkste kenmerk van de polynoom is de lengte (grootste graad (exponent) +1 van een term in de polynoom), vanwege de directe invloed op de lengte van de berekende controlewaarde.

De meest gebruikte polynoomlengtes zijn 9 bits (CRC-8), 17 bits (CRC-16), 33 bits (CRC-32) en 65 bits (CRC-64).[3]

Een CRC wordt een n-bit CRC wanneer de cheque -waarde is n-Bits. Voor een gegeven n, Meerdere CRC's zijn mogelijk, elk met een ander polynoom. Zo'n polynoom heeft de hoogste graad n, en daarom n + 1 termen (de polynoom heeft een lengte van n + 1). De rest heeft lengte n. De CRC heeft een naam van het formulier Crc-n-Xxx.

Het ontwerp van het CRC -polynoom hangt af van de maximale totale lengte van het te beschermen blok (data + CRC -bits), de gewenste foutbeschermingsfuncties en het type bronnen voor het implementeren van de CRC, evenals de gewenste prestaties. Een veel voorkomende misvatting is dat de "beste" CRC -polynomen van beide zijn afgeleid onherleidbare polynomen of onherleidbare polynomen maal de factor1 + x, die aan de code bijdraagt, de mogelijkheid om alle fouten te detecteren die een oneven aantal bits beïnvloeden.[9] In werkelijkheid moeten alle hierboven beschreven factoren de selectie van de polynoom aangaan en kunnen leiden tot een herleidbare polynoom. Het kiezen van een reduceerbaar polynoom zal echter resulteren in een bepaald deel van de gemiste fouten, omdat de quotiëntring heeft nul divisors.

Het voordeel van het kiezen van een primitief polynoom Aangezien de generator voor een CRC-code is dat de resulterende code een maximale totale bloklengte heeft in de zin dat alle 1-bits fouten binnen die bloklengte verschillende resten hebben (ook wel genoemd syndromen) en daarom, omdat de rest een lineaire functie van het blok is, kan de code alle 2-bits fouten binnen die bloklengte detecteren. Als is de mate van de primitieve generatorpolynoom, dan is de maximale totale bloklengte , en de bijbehorende code kan eventuele fouten met één bit of dubbel bits detecteren.[10] We kunnen deze situatie verbeteren. Als we de generatorpolynoom gebruiken , waar is een primitieve polynoom van graad , dan is de maximale totale bloklengte , en de code kan single, dubbel, drievoudig en oneven aantal fouten detecteren.

Een polynoom Dat toegeeft dat andere factorisaties kunnen worden gekozen om de maximale totale bloklengte in evenwicht te brengen met een gewenste foutdetectievermogen. De BCH -codes zijn een krachtige klasse van dergelijke polynomen. Ze ondervinden de twee bovenstaande voorbeelden. Ongeacht de reduceerbaarheidseigenschappen van een generatorpolynoom van graadr, als het de term "+1" omvat, kan de code foutpatronen detecteren die beperkt zijn tot een venster van r aaneengesloten bits. Deze patronen worden "foutbursts" genoemd.

Specificatie

Het concept van de CRC als een foutdetecterende code wordt ingewikkeld wanneer een implementator of normencommissie het gebruikt om een ​​praktisch systeem te ontwerpen. Hier zijn enkele complicaties:

  • Soms een implementatie Voorvoegt een vast bitpatroon naar de bitstream die moet worden gecontroleerd. Dit is handig wanneer klokfouten 0-bits voor een bericht kunnen invoegen, een wijziging die anders de controlewaarde ongewijzigd zou laten.
  • Meestal, maar niet altijd, een implementatie toevoegen n 0-bits (n De grootte van de CRC) naar de bitstream die moet worden gecontroleerd voordat de polynoomverdeling optreedt. Dergelijk toevoegen wordt expliciet aangetoond in de Berekening van CRC artikel. Dit heeft het gemak dat de rest van de originele bitstream met de toegevoegde cheque -waarde precies nul is, dus de CRC kan eenvoudig worden gecontroleerd door de polynomiale divisie op de ontvangen bitstream uit te voeren en de rest te vergelijken met nul. Vanwege de associatieve en commutatieve eigenschappen van de exclusieve-of-operatie kunnen praktische tabelgestuurde implementaties een resultaat verkrijgen dat numeriek equivalent is aan nul-uitzending zonder expliciet toe te voegen aan nullen, door een equivalent te gebruiken,[9] sneller algoritme dat het bericht bitstream combineert met de stroom die uit het CRC -register wordt verschoven.
  • Soms een implementatie exclusief-ors een vast bit patroon in de rest van de polynoomverdeling.
  • Bit bestelling: Sommige schema's beschouwen het lage-orde bit van elke byte als "eerste", wat vervolgens tijdens polynoomverdeling "linkmost" betekent, wat in strijd is met ons gebruikelijke begrip van "lage orde". Deze conventie is logisch wanneer seriepoort Transmissies zijn CRC-gecontroleerd in hardware, omdat sommige wijdverspreide seriële port transmissie-conventies eerst bytes die het minst significante bit overbrengen.
  • Byte -bestelling: Met multi-byte CRC's kan er verwarring zijn over de vraag of de byte die eerst wordt uitgezonden (of opgeslagen in de laagst geadresseerde byte van geheugen) de minst significante byte (LSB) of de meest significante byte (MSB) is. Sommige 16-bit CRC-schema's verwisselen bijvoorbeeld de bytes van de controlewaarde.
  • Weglating van het bit van hoge orde van de divisor polynomiaal: omdat het bit van hoge orde altijd 1 is, en omdat een n-bit CRC moet worden gedefinieerd door een (n + 1) -bit deler die overstromen een n-beetje register, sommige schrijvers gaan ervan uit dat het onnodig is om het bit van de deler te vermelden.
  • Weglating van het lage-orde bit van de divisor polynomiaal: omdat het bit met lage orde altijd 1 is, vertegenwoordigen auteurs zoals Philip Koopman polynomen met hun bit intact, maar zonder het lage-orde bit (de lage orde (de lage orde (de lage orde of 1 term). Deze conventie codeert voor de polynoom compleet met zijn graad in één geheel getal.

Deze complicaties betekenen dat er drie gemeenschappelijke manieren zijn om een ​​polynoom als een geheel getal uit te drukken: de eerste twee, die spiegelbeelden in binair zijn, zijn de constanten die in code worden gevonden; De derde is het nummer dat wordt gevonden in de papieren van Koopman. In elk geval wordt één term weggelaten. Dus het polynoom Kan worden getranscribeerd als:

  • 0x3 = 0b0011, vertegenwoordigt (MSB-FIRST-code)
  • 0xc = 0b1100, vertegenwoordigt (LSB-FIRST-code)
  • 0x9 = 0b1001, vertegenwoordigt (Koopman Notation)

In de onderstaande tabel worden ze weergegeven als:

Voorbeelden van CRC -representaties
Naam Normaal Teruggedraaid Omgekeerde wederzijds
CRC-4 0x3 0xc 0x9

Verduistering

CRC's in eigen protocollen kunnen zijn verdoezeld Door een niet-triviale beginwaarde en een laatste XOR te gebruiken, maar deze technieken voegen geen cryptografische sterkte toe aan het algoritme en kunnen dat zijn omgekeerd ontworpen met behulp van eenvoudige methoden.[11]

Normen en gemeenschappelijk gebruik

Er zijn talloze soorten cyclische redundantiecontroles opgenomen in Technische normen. In geen geval past één algoritme, of een van elke graad, bij elk doel; Koopman en Chakravarty bevelen aan om een ​​polynoom te selecteren volgens de toepassingsvereisten en de verwachte verdeling van berichtlengtes.[12] Het aantal verschillende CRC's in gebruik heeft ontwikkelaars verward, een situatie die auteurs hebben geprobeerd aan te pakken.[9] Er zijn drie polynomen gerapporteerd voor CRC-12,[12] Tweeëntwintig tegenstrijdige definities van CRC-16 en zeven van CRC-32.[13]

De algemeen toegepaste polynomen zijn niet de meest efficiënte mogelijke mogelijk. Sinds 1993 hebben Koopman, Castagnoli en anderen de ruimte van polynomen onderzocht tussen 3 en 64 bits in grootte,[12][14][15][16] voorbeelden vinden die veel betere prestaties hebben (in termen van Hamming -afstand voor een gegeven berichtgrootte) dan de polynomen van eerdere protocollen, en het publiceren van het beste hiervan met als doel de foutendetectievermogen van toekomstige normen te verbeteren.[15] Vooral, iSCSI en SCTP hebben een van de bevindingen van dit onderzoek aangenomen, de CRC-32C (Castagnoli) polynoom.

Het ontwerp van de 32-bit polynoom die het meest wordt gebruikt door standaardenlichamen, CRC-32-ieee, was het resultaat van een gezamenlijke inspanning voor de Rome Laboratorium en de Air Force Electronic Systems Division door Joseph Hammond, James Brown en Shyan-Shiang Liu van de Georgia Instituut van Technologie en Kenneth Brayer van de Mitre Corporation. De vroegst bekende optredens van de 32-bit polynomiale waren in hun publicaties van 1975: Technical Report 2956 door Brayer voor MITER, gepubliceerd in januari en vrijgegeven voor openbare verspreiding tot door openbare verspreiding DTIC in augustus,[17] en Hammond, Brown en Liu's rapport voor het Rome Laboratory, gepubliceerd in mei.[18] Beide rapporten bevatten bijdragen van het andere team. In december 1975 presenteerden Brayer en Hammond hun werk in een krant op de IEEE National Telecommunications Conference: de IEEE CRC-32 Polynomial is het genererende polynoom van een Hamming Code en werd geselecteerd voor zijn foutdetectieprestaties.[19] Toch komt de Castagnoli CRC-32C-polynoom die wordt gebruikt in ISCSI of SCTP overeen met zijn prestaties op berichten van 58 bits tot 131 kbits, en overtreft het in verschillende groottes, waaronder de twee meest voorkomende afmetingen van internetpakket.[15] De Itu-t G.HN Standaard maakt ook gebruik van CRC-32C om fouten in de payload te detecteren (hoewel het CRC-16-CCITT gebruikt voor Phy headers).

CRC-32C-berekening wordt als operatie in hardware geïmplementeerd (CRC32) van SSE4.2 instructieset, voor het eerst geïntroduceerd in Intel processors Nehalem Microarchitectuur. ARM AARCH64 Architectuur biedt ook hardware-versnelling voor zowel CRC-32- als CRC-32C-bewerkingen.

Polynoomrepresentaties van cyclische redundantiecontroles

De onderstaande tabel geeft alleen een overzicht van de polynomen van de verschillende algoritmen die worden gebruikt. Variaties van een bepaald protocol kunnen pre-inversie, post-inversie en omgekeerde bitbestelling opleggen zoals hierboven beschreven. De CRC32 die in GZIP en BZIP2 worden gebruikt, gebruikt bijvoorbeeld dezelfde polynoom, maar GZIP maakt gebruik van omgekeerde bit -bestelling, terwijl BZIP2 dat niet doet.[13] Merk op dat zelfs pariteitspolynomen in GF (2) met graad groter dan 1 zijn nooit primitief. Zelfs pariteitspolynoom gemarkeerd als primitief in deze tabel vertegenwoordigen een primitief polynoom vermenigvuldigd met . Het belangrijkste stukje polynoom is altijd 1 en wordt niet getoond in de hex -representaties.

Naam Toepassingen Polynomiale representaties Pariteit[20] Primitief[21] Maximale stukjes lading door Hamming -afstand[22][15][21]
Normaal Teruggedraaid Wederkerig Omgekeerde wederzijds ≥ 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2[23]
CRC-1 de meeste hardware; ook gekend als pariteitsbit 0x1 0x1 0x1 0x1 ook al
CRC-3-GSM mobiele netwerken[24] 0x3 0x6 0x5 0x5 oneven ja [25] 4
CRC-4-UTU Itu-t G.704, p. 12 0x3 0xc 0x9 0x9 oneven
CRC-5-EPC Gen 2 RFID[26] 0x09 0x12 0x05 0x14 oneven
CRC-5-UTU Itu-t G.704, p. 9 0x15 0x15 0x0b 0x1a ook al
CRC-5-USB USB tokenpakketten 0x05 0x14 0x09 0x12 oneven
CRC-6-CDMA2000-EEN mobiele netwerken[27] 0x27 0x39 0x33 0x33 oneven
CRC-6-CDMA2000-B mobiele netwerken[27] 0x07 0x38 0x31 0x23 ook al
CRC-6-DARC Gegevensradiokanaal[28] 0x19 0x26 0x0d 0x2c ook al
CRC-6-GSM mobiele netwerken[24] 0x2f 0x3d 0x3b 0x37 ook al ja [29] 1 1 25 25
CRC-6-ETU Itu-t G.704, p. 3 0x03 0x30 0x21 0x21 oneven
CRC-7 Telecomsystemen, ITU-T G.707, Itu-t G.832, MMC, SD 0x09 0x48 0x11 0x44 oneven
CRC-7-MVB Treincommunicatienetwerk, IEC 60870-5[30] 0x65 0x53 0x27 0x72 oneven
CRC-8 DVB-S2[31] 0xd5 0xab 0x57 0xea[12] ook al nee [32] 2 2 85 85
CRC-8-Autosar Auto -integratie,[33] Openingsveiligheid[34] 0x2f 0xf4 0xe9 0x97[12] ook al ja [32] 3 3 119 119
CRC-8-Bluetooth draadloze connectie[35] 0xa7 0xe5 0xcb 0xd3 ook al
CRC-8-CCITT Itu-t I.432.1 (02/99); Geldautomaat Hec, Isdn HEC en celafbakening, SMBUS PEC 0x07 0xe0 0xc1 0x83 ook al
CRC-8-Dallas/Maxim 1-draads bus[36] 0x31 0x8c 0x19 0x98 ook al
CRC-8-DARC Gegevensradiokanaal[28] 0x39 0x9c 0x39 0x9c oneven
CRC-8-GSM-B mobiele netwerken[24] 0x49 0x92 0x25 0xa4 ook al
CRC-8-SAE J1850 AES3; OBD 0x1d 0xb8 0x71 0x8e oneven
CRC-8-WCDMA mobiele netwerken[27][37] 0x9b 0xd9 0xb3 0xcd[12] ook al
CRC-10 GELDAUTOMAAT; Itu-t I.610 0x233 0x331 0x263 0x319 ook al
CRC-10-CDMA2000 mobiele netwerken[27] 0x3d9 0x26f 0x0df 0x3ec ook al
CRC-10-GSM mobiele netwerken[24] 0x175 0x2ba 0x175 0x2ba oneven
CRC-11 Flexray[38] 0x385 0x50e 0x21d 0x5c2 ook al
CRC-12 telecomsystemen[39][40] 0x80f 0xf01 0xe03 0xc07[12] ook al
CRC-12-CDMA2000 mobiele netwerken[27] 0xf13 0xc8f 0x91f 0xf89 ook al
CRC-12-GSM mobiele netwerken[24] 0xd31 0x8cb 0x197 0xe98 oneven
CRC-13-BBC Tijdsignaal, Radio Teleswitch[41][42] 0x1cf5 0x15e7 0x0bcf 0x1e7a ook al
CRC-14-DARC Gegevensradiokanaal[28] 0x0805 0x2804 0x1009 0x2402 ook al
CRC-14-GSM mobiele netwerken[24] 0x202d 0x2d01 0x1a03 0x3016 ook al
CRC-15-KAN 0xc599[43][44] 0x4cd1 0x19a3 0x62cc ook al
CRC-15-MPT1327 [45] 0x6815 0x540b 0x2817 0x740a oneven
CRC-16-Chakravarty Optimaal voor ladingen ≤64 bits[30] 0x2f15 0xa8f4 0x51e9 0x978a oneven
CRC-16-Arinc Acars toepassingen[46] 0xa02b 0xd405 0xa80b 0xd015 oneven
CRC-16-CCITT X.25, V.41, HDLC FCS, Xmodem, Bluetooth, Pactor, SD, Digrf, vele anderen; bekend als CRC-CCITT 0x1021 0x8408 0x811 0x8810[12] ook al
CRC-16-CDMA2000 mobiele netwerken[27] 0xc867 0xe613 0xcc27 0xe433 oneven
CRC-16-Desk draadloze telefoons[47] 0x0589 0x91a0 0x2341 0x82c4 ook al
CRC-16-T10-Dif SCSI Dif 0x8bb7[48] 0xedd1 0xdba3 0xc5db oneven
CRC-16-DNP DNP, IEC 870, M-bus 0x3d65 0xa6bc 0x4d79 0x9eb2 ook al
CRC-16-IBM Bisync, Modbus, USB, Ansi X3.28, SIA DC-07, vele anderen; ook gekend als CRC-16 en CRC-16-ANTSI 0x8005 0xa001 0x4003 0xc002 ook al
CRC-16-Openingsveiligheid-EEN Veiligheidsveldbus[34] 0x5935 0xac9a 0x5935 0xac9a[12] oneven
CRC-16-Openingsveiligheid-B Veiligheidsveldbus[34] 0x755b 0xdaae 0xb55d 0xbaad[12] oneven
CRC-16-Profibus Fieldbus -netwerken[49] 0x1dcf 0xf3b8 0xe771 0x8ee7 oneven
Fletcher-16 Gebruikt in Adler-32 A&B Checksums Vaak verward om een ​​CRC te zijn, maar eigenlijk een controlesom; zien Fletcher's checksum
CRC-17-CAN Kan FD[50] 0x1685b 0x1b42d 0x1685b 0x1b42d ook al
CRC-21-CAN Kan FD[50] 0x102899 0x132281 0x064503 0x18144c ook al
CRC-24 Flexray[38] 0x5d6dcb 0xd3b6ba 0xa76d75 0xaeb6e5 ook al
CRC-24-Radix-64 Openpgp, RTCM104v3 0x864cfb 0xdf3261 0xbe64c3 0xc3267d ook al
CRC-24-WCDMA Gebruikt in OS-9 RTOS. Residu = 0x800fe3.[51] 0x800063 0xc60001 0x8c0003 0xc00031 ook al ja[52] 4 4 8388583 8388583
CRC-30 CDMA 0x2030b9c7 0x38e74301 0x31ce8603 0x30185ce3 ook al
CRC-32 ISO 3309 (HDLC), Ansi X3.66 (ADCCP), FIPS Pub 71, Fed-STD-1003, ITU-T V.42, ISO/IEC/IEEE 802-3 (Ethernet), Sata, MPEG-2, Pkzip, Gzip, BZIP2, Posix CKSUM,[53] PNG,[54] Zmodem, vele anderen 0x04c11db7 0xedb88320 0xDB710641 0x82608edb[15] oneven ja 10 12 21 34 57 91 171 268 2974 91607 4294967263
CRC-32C (Castagnoli) iSCSI, SCTP, G.HN lading, SSE4.2, BTRFS, ext4, Ceph 0x1edc6f41 0x82f63b78 0x05EC76F1 0x8f6e37a0[15] ook al ja 6 8 20 47 177 5243 2147483615
CRC-32K (Koopman {1,3,28})) Uitstekend in Ethernet -framlengte, slechte prestaties met lange bestanden 0x741b8cd7 0xeb31d82e 0xd663b05d 0xba0dc66b[15] ook al nee 2 4 16 18 152 16360 114663
CRC-32K2 (Koopman {1,1,30})) Uitstekend in Ethernet -framlengte, slechte prestaties met lange bestanden 0x32583499 0x992c1a4c 0x32583499 0x992c1a4c[15] ook al nee 3 16 26 134 32738 65506
CRC-32Q luchtvaart; Aixm[55] 0x814141AB 0xd5828281 0xab050503 0xc0a0a0d5 ook al
Adler-32 Vaak verward om een ​​CRC te zijn, maar eigenlijk een controlesom; zien Adler-32
CRC-40-GSM GSM -besturingskanaal[56][57][58] 0x0004820009 0x9000412000 0x2000824001 0x8002410004 ook al
CRC-64-ECMA ECMA-182 p. 51, XZ Utils 0x42f0e1eba9ea3693 0xc96c5795d7870f42 0x92d8af2baf0e1e85 0xa17870f5d4f51b49 ook al
CRC-64-ISO ISO 3309 (HDLC), Zwitserse prot/Trembl; beschouwd als zwak voor hashing[59] 0x000000000000001B 0xD800000000000000000000 0xb000000000000001 0x800000000000000D oneven

Implementaties

CRC -catalogi

Zie ook

Referenties

  1. ^ "Een algoritme voor het corrigeren van cyclische redundantiecontroles". drdobbs.com. Gearchiveerd van het origineel op 20 juli 2017. Opgehaald 28 juni 2017.
  2. ^ Peterson, W. W.; Brown, D. T. (januari 1961). "Cyclische codes voor foutdetectie". Proceedings of the Ire. 49 (1): 228–235. doen:10.1109/jrproc.1961.287814. S2CID 51666741.
  3. ^ a b Ergen, Mustafa (21 januari 2008). "2.3.3 Foutdetectie codering". Mobiel breedband. Springer. pp. 29–30. doen:10.1007/978-0-387-68192-4_2. ISBN 978-0-387-68192-4.
  4. ^ Ritter, Terry (februari 1986). "The Great CRC Mystery". Dr. Dobb's Journal. 11 (2): 26–34, 76–83. Gearchiveerd Van het origineel op 16 april 2009. Opgehaald 21 mei 2009.
  5. ^ Stigge, Martin; Plötz, Henryk; Müller, Wolf; Redlich, Jens-Peter (mei 2006). "CRC omkeren - theorie en praktijk" (PDF). Humboldt University Berlijn. p. 17. SAR-PR-2006-05. Gearchiveerd van het origineel (PDF) Op 19 juli 2011. Opgehaald 4 februari 2011. De gepresenteerde methoden bieden een zeer eenvoudige en efficiënte manier om uw gegevens te wijzigen, zodat deze wordt berekend naar een CRC die u wilt of op zijn minst van tevoren weet.
  6. ^ "Algoritmeontwerp - Waarom zou CRC lineair zijn?". Cryptography Stack Exchange. Opgehaald 5 mei 2019.
  7. ^ Cam-Winget, Nancy; Housley, Russ; Wagner, David; Walker, Jesse (mei 2003). "Beveiligingsfouten in 802.11 Data Link -protocollen" (PDF). Communicatie van de ACM. 46 (5): 35–39. Citeseerx 10.1.1.14.8775. doen:10.1145/769800.769823. S2CID 3132937. Gearchiveerd (PDF) Van het origineel op 26 mei 2013. Opgehaald 1 november 2017.
  8. ^ "[MS-ABS]: 32-bit CRC-algoritme". msdn.microsoft.com. Gearchiveerd Van het origineel op 7 november 2017. Opgehaald 4 november 2017.
  9. ^ a b c Williams, Ross N. (24 september 1996). "Een pijnloze gids voor CRC -foutdetectie -algoritmen v3.0". Gearchiveerd van het origineel op 2 april 2018. Opgehaald 23 mei 2019.
  10. ^ Druk, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). "Sectie 22.4 Cyclische redundantie en andere controlesums". Numerieke recepten: The Art of Scientific Computing (3e ed.). Cambridge University Press. ISBN 978-0-521-88068-8. Gearchiveerd Van het origineel op 11 augustus 2011. Opgehaald 18 augustus 2011.
  11. ^ Ewing, Gregory C. (maart 2010). "Reverse-engineering een CRC-algoritme". Christchurch: University of Canterbury. Gearchiveerd Van het origineel op 7 augustus 2011. Opgehaald 26 juli 2011.
  12. ^ a b c d e f g h i j Koopman, Philip; Chakravarty, Tridib (juni 2004). Cyclische redundantiecode (CRC) polynoomselectie voor ingebedde netwerken (PDF). De internationale conferentie over betrouwbare systemen en netwerken. pp. 145–154. Citeseerx 10.1.1.648.9080. doen:10.1109/dsn.2004.1311885. ISBN 978-0-7695-2052-0. S2CID 793862. Gearchiveerd (PDF) Van het origineel op 11 september 2011. Opgehaald 14 januari 2011.
  13. ^ a b Cook, Greg (15 augustus 2020). "Catalogus van geparametreerde CRC -algoritmen". Gearchiveerd Van het origineel op 1 augustus 2020. Opgehaald 18 september 2020.
  14. ^ Castagnoli, G.; Bräuer, S.; Herrmann, M. (juni 1993). "Optimalisatie van cyclische redundantie-check-codes met 24 en 32 pariteitsbits". IEEE -transacties op communicatie. 41 (6): 883–892. doen:10.1109/26.231911.
  15. ^ a b c d e f g h Koopman, Philip (juli 2002). "32-bit cyclische redundantiecodes voor internettoepassingen". Proceedings Internationale conferentie over betrouwbare systemen en netwerken (PDF). De internationale conferentie over betrouwbare systemen en netwerken. pp. 459–468. Citeseerx 10.1.1.11.8323. doen:10.1109/dsn.2002.1028931. ISBN 978-0-7695-1597-7. S2CID 14775606. Gearchiveerd (PDF) Van het origineel op 16 september 2012. Opgehaald 14 januari 2011.
  16. ^ Koopman, Philip (21 januari 2016). "Beste CRC -polynomen". Carnegie Mellon Universiteit. Gearchiveerd Van het origineel op 20 januari 2016. Opgehaald 26 januari 2016.
  17. ^ Brayer, Kenneth (augustus 1975). Evaluatie van 32 graden polynomen in foutdetectie op de Satin IV Autovon -foutpatronen (Rapport). National Technical Information Service. ADA014825. Gearchiveerd Van het origineel op 31 december 2021. Opgehaald 31 december 2021.
  18. ^ Hammond, Joseph L. Jr.; Brown, James E.; Liu, Shyan-Shiang (1975). "Ontwikkeling van een transmissiefoutmodel en een foutcontrolemodel". NASA STI/Recon Technical Report N (Gepubliceerd mei 1975). 76: 15344. Bibcode:1975stin ... 7615344H. ADA013939. Gearchiveerd Van het origineel op 31 december 2021. Opgehaald 31 december 2021.
  19. ^ Brayer, Kenneth; Hammond, Joseph L. Jr. (december 1975). Evaluatie van foutdetectiepolynoomprestaties op het Autovon -kanaal. NTC 75: National Telecommunications Conference, 1-3 december 1975, New Orleans, Louisiana. Vol. 1. Institute of Electrical and Electronics Engineers. pp. 8-21–5. Bibcode:1975ntc ..... 1 .... 8b. Oclc 32688603. 75 CH 1015-7 CSCB.
  20. ^ CRC's met zelfs pariteit detecteren elk oneven aantal bitfouten, ten koste van de lagere hamming -afstand voor lange ladingen. Merk op dat pariteit wordt berekend over de gehele generatorpolynoom, inclusief impliciet 1 aan het begin of het einde. De volledige weergave van CRC-1 is bijvoorbeeld 0x3, met twee 1 bits. De pariteit is dus zelfs.
  21. ^ a b "32 bit CRC Zoo". gebruikers.ece.cmu.edu. Gearchiveerd Van het origineel op 19 maart 2018. Opgehaald 5 november 2017.
  22. ^ Payload betekent lengte exclusief CRC -veld. Een hamend afstand van d betekent dat d- 1 bit fouten kunnen worden gedetecteerd en ⌊ (d- 1)/2⌋ bitfouten kunnen worden gecorrigeerd
  23. ^ wordt altijd bereikt voor willekeurig lange berichten
  24. ^ a b c d e f ETSI TS 100 909 (PDF). V8.9.0. Sophia Antipolis, Frankrijk: European Telecommunications Standards Institute. Januari 2005. Gearchiveerd (PDF) Van het origineel op 17 april 2018. Opgehaald 21 oktober 2016.
  25. ^ "3 bit CRC Zoo". gebruikers.ece.cmu.edu. Gearchiveerd Van het origineel op 7 april 2018. Opgehaald 19 januari 2018.
  26. ^ Klasse-1 generatie-2 UHF RFID-protocol (PDF). 1.2.0. Epcglobal. 23 oktober 2008. p. 35. Gearchiveerd (PDF) Van het origineel op 19 maart 2012. Opgehaald 4 juli 2012. (Tabel 6.12)
  27. ^ a b c d e f Fysieke laagstandaard voor CDMA2000 -spreadspectrumsystemen (PDF). Revisie D versie 2.0. 3e generatie Partnership Project 2. oktober 2005. pp. 2–89–2–92. Gearchiveerd van het origineel (PDF) op 16 november 2013. Opgehaald 14 oktober 2013.
  28. ^ a b c "11. Foutcorrectiestrategie". ETSI EN 300 751 (PDF). V1.2.1. Sophia Antipolis, Frankrijk: European Telecommunications Standards Institute. Januari 2003. pp. 67–8. Gearchiveerd (PDF) Van het origineel op 28 december 2015. Opgehaald 26 januari 2016.
  29. ^ "6 bit CRC Zoo". gebruikers.ece.cmu.edu. Gearchiveerd Van het origineel op 7 april 2018. Opgehaald 19 januari 2018.
  30. ^ a b Chakravarty, Tridib (december 2001). Prestaties van cyclische redundantiecodes voor ingebedde netwerken (PDF) (Stelling). Philip Koopman, adviseur. Carnegie Mellon Universiteit. pp. 5, 18. Gearchiveerd (PDF) Van het origineel op 1 januari 2014. Opgehaald 8 juli 2013.
  31. ^ "5.1.4 CRC-8-encoder (alleen voor gepakte streams)". EN 302 307 (PDF). V1.3.1. Sophia Antipolis, Frankrijk: European Telecommunications Standards Institute. Maart 2013. p. 17. Gearchiveerd (PDF) Van het origineel op 30 augustus 2017. Opgehaald 29 juli 2016.
  32. ^ a b "8 bit CRC Zoo". gebruikers.ece.cmu.edu. Gearchiveerd Van het origineel op 7 april 2018. Opgehaald 19 januari 2018.
  33. ^ "7.2.1.2 8-bit 0x2f polynomiale CRC-berekening". Specificatie van CRC -routines (PDF). 4.2.2. München: Autosar. 22 juli 2015. p. 24. gearchiveerd van het origineel (PDF) op 24 juli 2016. Opgehaald 24 juli 2016.
  34. ^ a b c "5.1.1.8 Cyclisch redundantiecontroleveld (CRC-8 / CRC-16)". OpenSafety Safety Profile Specificatie: EPSG Working Draft Voorstel 304. 1.4.0. Berlijn: Ethernet PowerLink Standardization Group. 13 maart 2013. p. 42. gearchiveerd van het origineel op 12 augustus 2017. Opgehaald 22 juli 2016.
  35. ^ "B.7.1.1 HEC -generatie". Specificatie van het Bluetooth -systeem. Vol. 2. Bluetooth sig. 2 december 2014. pp. 144–5. Gearchiveerd Van het origineel op 26 maart 2015. Opgehaald 20 oktober 2014.
  36. ^ Whitfield, Harry (24 april 2001). "XFCNS voor berekeningen van cyclische redundantiecontrole". Gearchiveerd van het origineel op 25 mei 2005.
  37. ^ Richardson, Andrew (17 maart 2005). WCDMA -handboek. Cambridge University Press. p. 223. ISBN 978-0-521-82815-4.
  38. ^ a b Flexray -protocolspecificatie. 3.0.1. Flexray Consortium. Oktober 2010. p. 114. (4.2.8 header CRC (11 bits))
  39. ^ Perez, A. (1983). "Byte-wijze CRC-berekeningen". IEEE MICRO. 3 (3): 40–50. doen:10.1109/mm.1983.291120. S2CID 206471618.
  40. ^ Ramabadran, T.V.; Gaitonde, S.S. (1988). "Een tutorial over CRC -berekeningen". IEEE MICRO. 8 (4): 62–75. doen:10.1109/40.7773. S2CID 10216862.
  41. ^ "Longgave radiogegevens decoderen met behulp van en HC11 en een MC3371" (PDF). Freescale Semiconductor. 2004. AN1597/D. Gearchiveerd van het origineel (PDF) op 24 september 2015.
  42. ^ Ely, S.R.; Wright, D.T. (maart 1982). L.F. Radio-data: Specificatie van BBC Experimental Transmissions 1982 (PDF). Onderzoeksafdeling, Engineering Division, de British Broadcasting Corporation. p. 9. Gearchiveerd (PDF) Van het origineel op 12 oktober 2013. Opgehaald 11 oktober 2013.
  43. ^ Cyclische redundantiecontrole (CRC): PSOC Creator ™ Component Datasheet. Cypress halfgeleider. 20 februari 2013. p. 4. Gearchiveerd Van het origineel op 2 februari 2016. Opgehaald 26 januari 2016.
  44. ^ "Cyclische redundantiecontrole (CRC) in CAN -frames". Kan in automatisering. Gearchiveerd Van het origineel op 1 februari 2016. Opgehaald 26 januari 2016.
  45. ^ "3.2.3 Codering en foutcontrole". Een signaalstandaard voor mobiele radiosystemen met rompjes (MPT 1327) (PDF) (3e ed.). Ofcom. Juni 1997. p. 3. Gearchiveerd (PDF) Van het origineel op 14 juli 2012. Opgehaald 16 juli 2012.
  46. ^ Rehmann, Albert; Mestre, José D. (februari 1995). "Air Ground Data Link VHF Airline Communications and Reporting System (ACARS) Voorlopig testrapport" (PDF). Federal Aviation Authority Technical Center. p. 5. Gearchiveerd van het origineel (PDF) op 2 augustus 2012. Opgehaald 7 juli 2012.
  47. ^ "6.2.5 Foutcontrole". ETSI EN 300 175-3 (PDF). V2.5.1. Sophia Antipolis, Frankrijk: European Telecommunications Standards Institute. Augustus 2013. pp. 99, 101. Gearchiveerd (PDF) Van het origineel op 1 juli 2015. Opgehaald 26 januari 2016.
  48. ^ Thaler, Pat (28 augustus 2003). "16-bit CRC polynomiale selectie" (PDF). Incits T10. Gearchiveerd (PDF) Van het origineel op 28 juli 2011. Opgehaald 11 augustus 2009.
  49. ^ "8.8.4 Controleer Octet (FCS)". PROFIBUS -specificatie Normatieve onderdelen (PDF). 1.0. Vol. 9. Profibus International. Maart 1998. p. 906. gearchiveerd van het origineel (PDF) op 16 november 2008. Opgehaald 9 juli 2016.
  50. ^ a b Kan met flexibele gegevenssnelheidspecificatie (PDF). 1.0. Robert Bosch GmbH. 17 april 2012. p. 13. Gearchiveerd van het origineel (PDF) op 22 augustus 2013. (3.2.1 Gegevensframe)
  51. ^ "OS-9 besturingssysteem Systeemprogrammeurhandleiding". www.roug.org. Gearchiveerd Van het origineel op 17 juli 2018. Opgehaald 17 juli 2018.
  52. ^ Koopman, Philip P. (20 mei 2018). "24 bit CRC Zoo". gebruikers.ece.cmu.edu. Gearchiveerd Van het origineel op 7 april 2018. Opgehaald 19 januari 2018.
  53. ^ "cksum". pubs.opengroup.org. Gearchiveerd Van het origineel op 18 juli 2018. Opgehaald 27 juni 2017.
  54. ^ Boutell, Thomas; Randers-Pehrson, Glenn; et al. (14 juli 1998). "PNG (Portable Network Graphics) Specificatie, versie 1.2". Libpng.org. Gearchiveerd Van het origineel op 3 september 2011. Opgehaald 3 februari 2011.
  55. ^ AIXM -primer (PDF). 4.5. Europese organisatie voor de veiligheid van luchtnavigatie. 20 maart 2006. Gearchiveerd (PDF) Van het origineel op 20 november 2018. Opgehaald 3 februari 2019.
  56. ^ ETSI TS 100 909 Gearchiveerd 17 april 2018 op de Wayback -machine versie 8.9.0 (januari 2005), sectie 4.1.2 a
  57. ^ Gammel, Berndt M. (31 oktober 2005). Matpack -documentatie: crypto - codes. MATPACK.DE. Gearchiveerd Van het origineel op 25 augustus 2013. Opgehaald 21 april 2013. (Opmerking: mpcrc.html is opgenomen met de MATPack gecomprimeerde softwarebroncode, under/html/libdoc/crypto)
  58. ^ Geremia, Patrick (april 1999). "Cyclische redundantiecontrole berekening: een implementatie met behulp van de TMS320C54X" (PDF). Texas Instrumenten. p. 5. Gearchiveerd (PDF) Van het origineel op 14 juni 2012. Opgehaald 4 juli 2012.
  59. ^ Jones, David T. "Een verbeterde 64-bit cyclische redundantiecontrole voor eiwitsequenties" (PDF). Universiteits Hogeschool Londen. Gearchiveerd (PDF) Van het origineel op 7 juni 2011. Opgehaald 15 december 2009.

Verder lezen

Externe links