巡回冗長検査 ( CRC ) は、デジタルネットワークやストレージデバイスで一般的に使用される エラー検出コード で、デジタルデータの偶発的な変更を検出します。これらのシステムに入力されるデータブロックには、その内容の多項式除算 の余りに基づく短いチェック値が付加されます。データ取得時には、この計算が繰り返され、チェック値が一致しない場合は、データ破損に対する修正措置が講じられます。CRC は エラー訂正 に使用できます(ビットフィルタを 参照)。[ 1 ]
CRCは、チェック (データ検証)値が冗長性( 情報 を追加せずにメッセージを拡張する)であり、アルゴリズムが 巡回 符号 に基づいていることから、このように呼ばれています。CRCは、バイナリハードウェア での実装が容易で、数学的に解析しやすく、特に伝送チャネルのノイズ によって引き起こされる一般的なエラーの検出に優れているため、広く利用されています。チェック値の長さが固定されているため、それを生成する関数は ハッシュ関数 として使用されることがあります。
応用 CRC対応デバイスは、送信または保存される各データブロックに対して、チェック値 またはCRCと呼ばれる短い固定長のバイナリシーケンスを計算し、それをデータに追加して コードワード を形成します。
符号語が受信または読み取られると、デバイスは、そのチェック値をデータブロックから新たに計算された値と比較するか、あるいは同等に、符号語全体に対してCRCを実行し、結果として得られたチェック値を期待される剰余 定数と比較します。
CRC値が一致しない場合、そのブロックにはデータエラーが含まれています。
デバイスは、ブロックを再読み込みしたり、再送信を要求したりするなど、修正措置を講じる場合があります。それ以外の場合は、データはエラーがないものとみなされます(ただし、ごくわずかな確率で検出されないエラーが含まれている可能性があります。これはエラーチェックの性質上避けられないものです)。[ 4 ]
データ整合性 CRC(証明書誤り訂正)は、通信チャネルにおける一般的なエラーから保護するために特別に設計されており、配信されたメッセージの完全性 を迅速かつ合理的に保証することができます。しかし、意図的なデータ改ざんから保護するには適していません。
まず、認証がないため、攻撃者はメッセージを編集してCRCを再計算しても、改ざんが検出されません。CRCと暗号学的ハッシュ関数は、データとともに保存される場合、それ自体では意図的なデータ改ざんから保護されません。このような攻撃から保護する必要のあるアプリケーションは、 メッセージ認証コード やデジタル署名(これらは一般的に 暗号学的ハッシュ 関数に基づいています)などの暗号学的認証メカニズムを使用する必要があります。
第二に、暗号学的ハッシュ関数とは異なり、CRCは容易に可逆な関数であるため、デジタル署名での使用には適していません。[ 5 ]
第三に、CRCは線形関数 (より正確にはアフィン関数 )と同様の関係を満たします。 [ 6 ]
CRC ( x ⊕ y ) = CRC ( x ) ⊕ CRC ( y ) ⊕ c {\displaystyle \operatorname {CRC} (x\oplus y)=\operatorname {CRC} (x)\oplus \operatorname {CRC} (y)\oplus c} どこc {\displaystyle c} 長さによってx {\displaystyle x} そしてy {\displaystyle y} これは次のようにも表現できます。x {\displaystyle x} 、y {\displaystyle y} そしてz {\displaystyle z} 同じ長さである
CRC ( x ⊕ y ⊕ z ) = CRC ( x ) ⊕ CRC ( y ) ⊕ CRC ( z ) ; {\displaystyle \operatorname {CRC} (x\oplus y\oplus z)=\operatorname {CRC} (x)\oplus \operatorname {CRC} (y)\oplus \operatorname {CRC} (z);} その結果、CRCがXORを 結合演算として使用するストリーム暗号(またはOFBやCFBなど、実質的にストリーム暗号に変換する ブロック暗号 のモード)で暗号化されていても、暗号化キーを知らなくてもメッセージと関連するCRCの両方を操作できてしまう。これは 、Wired Equivalent Privacy (WEP)プロトコルのよく知られた設計上の欠陥の1つだった。[ 7 ]
計算 n ビットのバイナリCRCを計算するには、入力を表すビットを1行に並べ、CRCの除数(「多項式」と呼ばれる)を表す( n +1 )ビットのパターンを行の左端の下に配置します。
この例では、14 ビットのメッセージを、多項式 x³ + x + 1 を用いた 3 ビット CRC でエンコードします。多項式は係数としてバイナリで表されます。3 次多項式には 4 つの係数 ( 1 x³ + 0 x² + 1 x + 1 ) があります。この場合、係数は 1、0、1、1 です。 計算結果は 3 ビット長なので、3 ビット CRC と呼ばれます。ただし、多項式を明示的に示すには 4 ビットが必要です。
まず、エンコードするメッセージを用意します。
11010011101100 まず、CRCのビット長nに対応するゼロで埋めます。これは、結果として得られるコードワードが 体系的な 形式になるようにするためです。3ビットCRCを計算するための最初の計算式は次のとおりです。
11010011101100 000 <--- 入力は右から3ビットでパディングされています 1011 <--- 除数 (4 ビット) = x^3 + x + 1 ------------------ 01100011101100 000 <--- 結果 このアルゴリズムは、各ステップで除数の直上のビットに対して作用します。その反復の結果は、多項式の除数とそれより上のビットとのビットごとのXOR演算です。除数より上ではないビットは、そのステップでは単純に直下にコピーされます。次に、除数は入力の残りの最上位の1ビットに揃えるように右にシフトされ、除数が入力行の右端に達するまでこのプロセスが繰り返されます。計算全体は次のとおりです。
11010011101100 000 <--- 入力は右から3ビットでパディングされています 1011 <--- 除数 01100011101100 000 <--- 結果(最初の4ビットは下の除数とのXOR演算結果で、残りのビットは変更されません) 1011 <--- 除数 ... 00111011101100 000 1011 00010111101100 000 1011 00000001101100 000 <--- 除数は、被除数の次の 1 に揃えるように移動します (そのステップの商はゼロだったため) 1011(つまり、必ずしも1回の反復で1ビットずつ移動するとは限らない) 00000000110100 000 1011 00000000011000 000 1011 00000000001110 000 1011 00000000000101 000 101 1 ----------------- 00000000000000 100 <--- 余り (3 ビット)。被除数がゼロなので、除算アルゴリズムはここで停止します。 左端の除数ビットが触れた入力ビットをすべてゼロにするため、この処理が終了すると、入力行でゼロ以外の値を取り得るビットは、行の右端にあるnビットのみとなります。これらのn ビットは除算ステップの剰余であり、CRC関数の値にもなります(ただし、選択したCRC仕様で後処理が要求されている場合は除きます)。
受信メッセージの有効性は、上記の計算を再度実行し、今度はゼロの代わりにチェック値を加えることで簡単に検証できます。検出可能なエラーがなければ、余りはゼロになるはずです。
11010011101100 100 <--- チェック値付き入力 1011 <--- 除数 01100011101100 100 <--- 結果 1011 <--- 除数 ... 00111011101100 100 …… 00000000001110 100 1011 00000000000101 100 101 1 ------------------ 000000000000000 000 <--- 余り 以下のPython コードは、指定された入力と多項式に対して、初期パディングとして1または0を用いた初期CRC剰余を返す関数を示しています。このコードは、生の数値ではなく文字列入力に対応しています。
def crc_remainder ( input_bitstring , polynomial_bitstring , initial_filler ): """選択した多項式を使用してビット列のCRC剰余を計算します。initial_filler は'1'または'0'である必要があります。 """ polynomial_bitstring = polynomial_bitstring . lstrip ( "0" ) len_input = len ( input_bitstring ) initial_padding = ( len ( polynomial_bitstring ) - 1 ) * initial_filler input_padded_array = list ( input_bitstring + initial_padding ) while "1" in input_padded_array [: len_input ]: cur_shift = input_padded_array . index ( "1" ) for i in range ( len ( polynomial_bitstring )): input_padded_array [ cur_shift + i ] \ = str ( int ( polynomial_bitstring [ i ] != input_padded_array [ cur_shift + i ])) return "" . join ( input_padded_array )[ len_input :] def crc_check ( input_bitstring , polynomial_bitstring , check_value ): """選択した多項式を使用してビット列のCRCチェックを計算します。""" polynomial_bitstring = polynomial_bitstring . lstrip ( "0" ) len_input = len ( input_bitstring ) initial_padding = check_value input_padded_array = list ( input_bitstring + initial_padding ) while "1" in input_padded_array [: len_input ]: cur_shift = input_padded_array . index ( "1" ) for i in range ( len ( polynomial_bitstring )): input_padded_array [ cur_shift + i ] \ = str ( int ( polynomial_bitstring [ i ] != input_padded_array [ cur_shift + i ])) return ( "1" not in "" . join ( input_padded_array )[ len_input :]) >>> crc_remainder ( '11010011101100' , '1011' , '0' ) '100' >>> crc_check ( '11010011101100' , '1011' , '100' ) True
数学 この除算のようなプロセスを数学的に解析すると、優れたエラー検出特性を保証する除数を選択する方法が明らかになります。この解析では、ビット列の桁は、より馴染みのある数値ではなく、ある変数x の多項式の係数(有限体GF(2) の要素( 2 を法とする整数、つまり 0 または 1))として扱われます。バイナリ多項式の集合は数学的な環 です。
多項式の設計 CRCアルゴリズムの実装において、生成多項式の選択は最も重要な部分である。多項式は、エラー検出能力を最大化しつつ、全体的な衝突確率を最小化するように選択する必要がある。
多項式の最も重要な属性は、その長さ(多項式内の任意の項の最大次数(指数)+1)です。これは、計算されるチェック値の長さに直接影響を与えるためです。
最も一般的に使用される多項式の長さは、9ビット(CRC-8)、17ビット(CRC-16)、33ビット(CRC-32)、および65ビット(CRC-64)です。[ 3 ]
CRCのチェック値がnビットの場合、そのCRCは nビットCRCと呼ばれます。n が 与えられた場合、複数のCRCが存在し、それぞれ異なる多項式を持ちます。このような多項式の最高次数はnで あり、したがってn +1 個の項を持ちます(多項式の長さはn +1 です)。残りの部分の長さはn です。CRCの名前はCRC- n -XXXの形式になります。
CRC多項式の設計は、保護対象ブロックの最大合計長(データ+CRCビット)、必要なエラー保護機能、CRC実装用リソースの種類、および必要なパフォーマンスに依存します。よくある誤解は、「最良」のCRC多項式は既約多項式 、または既約多項式に係数1+ x を掛けたものから導出され、奇数ビットに影響を与えるすべてのエラーを検出する機能がコードに追加されるというものです。[ 8 ] 実際には、上記で説明したすべての要素が多項式の選択に関与し、既約多項式につながる可能性があります。ただし、既約多項式を選択すると、商環にゼロ因子が あるため、一定割合のエラーが見逃されます。
CRCコードの生成子として原始多項式を 選択する利点は、結果として得られるコードの総ブロック長が最大になることです。つまり、そのブロック長内のすべての1ビットエラーは異なる剰余(シンドローム とも呼ばれる)を持ち、剰余はブロックの線形関数であるため、そのコードはそのブロック長内のすべての2ビットエラーを検出できます。r {\displaystyle r} は原始生成多項式の次数であり、最大総ブロック長は2 r − 1 2r-1 、そして関連するコードは、1ビットまたは2ビットのエラーを検出できます。[ 9 ] ただし、生成多項式を使用するとg ( x ) = p ( x ) ( 1 + x ) {\displaystyle g(x)=p(x)(1+x)} 、 どこp {\displaystyle p} は次数が の原始多項式ですr − 1 {\displaystyle r-1} すると、最大ブロック長は2 r − 1 − 1 {\displaystyle 2^{r-1}-1} また、このコードは、単一、二重、三重、および任意の奇数個のエラーを検出できます。
多項式g ( x ) {\displaystyle g(x)} これにより、最大総ブロック長と所望のエラー検出能力とのバランスを取るために、他の因数分解を選択できる。BCHコードは 、このような多項式の強力なクラスである。これらは上記の 2 つの例を包含する。次数rの生成多項式の還元可能性特性に関係なく、それが「+1」項を含む場合、コードは r 個の連続するビットのウィンドウ内に限定されたエラー パターンを検出できる。これらのパターンは「エラー バースト」と呼ばれる。
仕様 CRCをエラー検出コードとして捉える概念は、実装者や標準化委員会が実用的なシステムを設計する際に複雑化します。以下にその複雑さの一部を示します。
実装によっては、チェック対象のビットストリームに固定のビットパターンを付加すること があります。これは、クロックエラーによってメッセージの先頭に0ビットが挿入され、そうでなければチェック値が変更されないような場合に有効です。 通常、実装では、多項式除算が行われる前に、チェック対象のビットストリームにn 個 の 0 ビット ( nは CRC のサイズ) を追加しますが、常にそうとは限りません。このような追加は 、CRC の計算に関する 記事で明示的に示されています。この方法の利点は、チェック値が追加された元のビットストリームの余りが正確にゼロになるため、受信したビットストリームに対して多項式除算を実行し、余りをゼロと比較するだけで CRC をチェックできることです。排他的論理和演算の結合法則と交換法則により、実用的なテーブル駆動の実装では、メッセージ ビットストリームと CRC レジスタからシフトアウトされるストリームを組み合わせる同等のより高速なアルゴリズム[ 8 ] を使用することで、ゼロを明示的に追加することなく、ゼロ追加と数値的に同等の結果を得ることができます。 実装によっては、固定ビットパターンを 多項式除算の剰余に排他的論理和演算することがある。 ビット順序: 一部の方式では、各バイトの最下位ビットを「最初」とみなしますが、多項式除算では「最左端」となり、これは私たちが通常理解する「最下位」とは異なります。この慣習は、シリアルポート 伝送がハードウェアでCRCチェックされる場合に理にかなっています。なぜなら、広く普及しているシリアルポート伝送方式の中には、バイトを最下位ビットから送信するものがあるためです。バイト順序 :マルチバイトCRCでは、最初に送信されるバイト(またはメモリのアドレスが最も低いバイトに格納されるバイト)が最下位バイト(LSB)なのか最上位バイト(MSB)なのかが混乱することがあります。例えば、16ビットCRC方式の中には、チェック値のバイトを入れ替えるものがあります。除数多項式の上位ビットの省略 : 上位ビットは常に 1 であり、n ビット CRC は n ビット レジスタをオーバーフローする (n + 1) ビット除数によって定義されなければならないため、除数 の 上位 ビット について言及 する必要はないと考える著者もいます。除数多項式の下位ビットの省略 : 下位ビットは常に 1 なので、Philip Koopman などの著者は上位ビットはそのままにして下位ビット (x 0 {\displaystyle x^{0}} または 1 項)。この規則では、次数を含めた多項式を 1 つの整数で符号化します。これらの複雑さから、多項式を整数として表現する一般的な方法は 3 つあります。最初の 2 つはバイナリで鏡像関係にあり、コードに見られる定数です。3 つ目はクープマンの論文に見られる数値です。 いずれの場合も、1 つの項が省略されます。 したがって、多項式はx 4 + x + 1 {\displaystyle x^{4}+x+1} 次のように転写される可能性があります。
0x3 = 0b0011 は、x 4 + ( 0 x 3 + 0 x 2 + 1 x 1 + 1 x 0 ) {\displaystyle x^{4}+(0x^{3}+0x^{2}+1x^{1}+1x^{0})} (最上位ビット優先コード) 0xC = 0b1100、( 1 x 0 + 1 x 1 + 0 x 2 + 0 x 3 ) + x 4 {\displaystyle (1x^{0}+1x^{1}+0x^{2}+0x^{3})+x^{4}} (LSB-firstコード) 0x9 = 0b1001 は、( 1 x 4 + 0 x 3 + 0 x 2 + 1 x 1 ) + x 0 {\displaystyle (1x^{4}+0x^{3}+0x^{2}+1x^{1})+x^{0}} (クープマン記法) 以下の表では、それらは次のように示されています。
規格と一般的な使用法 巡回冗長検査のさまざまな種類が技術標準 に組み込まれています。 1 つのアルゴリズム、または各次数につき 1 つのアルゴリズムがすべての目的に適しているわけではありません。 Koopman と Chakravarty は、アプリケーションの要件とメッセージ長の予想される分布に応じて多項式を選択することを推奨しています。[ 11 ] 使用されている CRC の種類の多さが開発者を混乱させており、著者らはこの状況に対処しようとしてきました。[ 8 ] CRC-12 には 3 つの多項式が報告されており、[ 11 ] CRC-16 には 22 の矛盾する定義があり、CRC-32 には 7 つの定義があります。[ 12 ]
一般的に使用されている多項式は、最も効率的なものではありません。1993 年以来、Koopman、Castagnoli らは、3 ビットから 64 ビットのサイズの多項式の空間を調査し、[ 11 ] [ 13 ] [ 14 ] [ 15 ] 以前のプロトコルの多項式よりもはるかに優れたパフォーマンス (特定のメッセージ サイズに対するハミング距離 の観点から) を持つ例を見つけ、将来の標準のエラー検出能力を向上させる目的で、これらの最良のものを公表しました。[ 14 ] 特に、iSCSI とSCTP は 、この研究の発見の 1 つです。CRC-32C (Castagnoli) 多項式です。
標準化団体で最も一般的に使用されている 32 ビット多項式 CRC-32-IEEE の設計は、ローマ研究所 と空軍電子システム部門のために、ジョージア工科大学の Joseph Hammond、James Brown、Shyan-Shiang Liu、および Mitre Corporation の Kenneth Brayerが共同で取り組んだ結果である。32 ビット多項式が最初に登場したことが知られているのは、1975 年の出版物である。Mitre の Brayer による技術レポート 2956 は 1 月に発行され、8 月にDTICを通じて一般に公開された [ 16 ] 、および Hammond、Brown、Liu によるローマ研究所のレポートは 5 月に発行された[ 17 ] である。どちらのレポートにも、もう一方のチームからの貢献が含まれている。 1975 年 12 月、Brayer と Hammond は IEEE National Telecommunications Conference で論文を発表し、IEEE CRC-32 多項式はハミング符号 の生成多項式であり、エラー検出性能に基づいて選択されたことを明らかにしました。[ 18 ] それでも、iSCSI や SCTP で使用される Castagnoli CRC-32C 多項式は、58 ビットから 131 kbit までのメッセージでその性能に匹敵し、インターネット パケットの最も一般的な 2 つのサイズを含むいくつかのサイズ範囲でそれを上回ります。[ 14 ] ITU -T G.hn 標準もペイロードのエラー検出に CRC-32C を使用しています (ただし、PHY ヘッダー には CRC-16-CCITT を使用しています)。
CRC-32C 演算は、 SSE4.2 命令セットの演算 ( CRC32)としてハードウェアで実装されており、これはIntel プロセッサのNehalem マイクロアーキテクチャで初めて導入されました。ARM AArch64アーキテクチャ は 、CRC-32 および CRC-32C 演算の両方に対してハードウェア アクセラレーションを提供します。
多項式表現 以下の表には、使用されているさまざまなアルゴリズムの多項式のみが記載されています。特定のプロトコルのバリエーションでは、上記のように、前倒し、後倒し、およびビット順序の反転を課すことができます。たとえば、GzipとBzip2で使用されるCRC-32は同じ多項式を使用しますが、Gzipはビット順序を反転させ、Bzip2は反転させません。[ 12 ] 次数が1より大きいGF(2) の偶数パリティ多項式は決して原始的ではないことに注意してください。この表で原始的とマークされている偶数パリティ多項式は、原始多項式にを乗じたものを表します。( x + 1 ) {\displaystyle \left(x+1\right)} 多項式の最上位ビットは常に1であり、16進数表現には表示されません。
実装 GNU Radio 3.6.1(2012年頃)までのCRC32の実装 さまざまなCRCから選択できるCRCチェックサム計算のためのCクラスコード CRC-32 - ロゼッタコード
CRCカタログ パラメータ化されたCRCアルゴリズムのカタログ CRC多項式動物園
参考文献 ↑ 「エラー訂正巡回冗長検査のアルゴリズム」 . drdobbs.com . 2017年7月20日のオリジナルからアーカイブ済み。 2017年 6月28日 取得 。 ↑ Peterson, WW; Brown, DT (1961年1月)「誤り検出のための巡回符号」 Proceedings of the IRE . 49 (1): 228–235 . Bibcode : 1961PIRE...49..228P . doi : 10.1109/JRPROC.1961.287814 . S2CID 51666741 . 1 2 Ergen, Mustafa (2008年1月21日). "2.3.3 エラー検出符号化". モバイルブロードバンド . Springer . pp. 29–30 . doi : 10.1007/978-0-387-68192-4_2 . ISBN 978-0-387-68192-4 。↑リッター、テリー ( 1986年2月)。 「CRCの大ミステリー」 。 ドクター ・ドッブズ・ジャーナル 。11(2):26–34、76–83。 2009 年 4 月 16日のオリジナルから アーカイブ。 2009年 5月21日 取得 。 ↑ Stigge, Martin; Plötz, Henryk; Müller, Wolf; Redlich, Jens-Peter (2006 年 5 月)。 「CRC の逆算 – 理論と実践」 (PDF) 。フンボルト大学ベルリン。p. 17。SAR-PR-2006-05。2011 年 7 月 19 日に オリジナル (PDF)からアーカイブ。2011 年 2 月 4 日 に取得 。 提示された方法は、データを変更して、希望する、または少なくとも事前にわかっている CRC を計算するための非常に簡単で効率的な方法を提供します。 ↑ 「アルゴリズム設計 – CRCが線形であると言われる理由とは?」 。 Cryptography Stack Exchange 。 2019年 5月5日 取得 。 ↑ Cam-Winget, Nancy; Housley, Russ; Wagner, David; Walker, Jesse (2003 年 5 月)。 「802.11 データ リンク プロトコルのセキュリティ上の欠陥」 (PDF) 。 Communications of the ACM 。 46 (5): 35– 39。 CiteSeerX 10.1.1.14.8775 。 doi : 10.1145/769800.769823 。 S2CID 3132937 。 2013 年 5 月 26 日にオリジナルから アーカイブ (PDF) 。 2017 年 11 月 1 日 に取得 。 1 2 3 Williams, Ross N. (1996年9月24日). "CRCエラー検出アルゴリズムの簡単なガイド V3.0" . 2018年4月2日に オリジナル からアーカイブ済み 。 2019年 5月23日 に取得。 ↑ Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007). 「第 22.4 巡回冗長性とその他のチェックサム」 . Numerical Recipes: The Art of Scientific Computing (第 3 版). Cambridge University Press. ISBN 978-0-521-88068-8 2024年7月13日にオリジナルからアーカイブされました。2024年 8月20日に 取得されました 。↑ Ewing, Gregory C. (2010年3月). 「CRCアルゴリズムのリバースエンジニアリング」 . クライストチャーチ:カンタベリー大学。 2011年8月7日のオリジナルから アーカイブ済み。 2011年 7月26日 取得 。 1 2 3 4 5 6 7 8 9 10 Koopman, Philip; Chakravarty, Tridib (2004年6月)「組み込みネットワークにおける巡回冗長コード(CRC)多項式選択」。 2004 年 国際信頼性システム・ネットワーク会議 ( PDF ) 。pp . 145–154。CiteSeerX 10.1.1.648.9080。doi : 10.1109 / DSN.2004.1311885。ISBN 978-0-7695-2052-0 . S2CID 793862 . 2011年9月11日にオリジナルからアーカイブ(PDF)されました 。 2011年 1月14日 に取得。 1 2 Cook, Greg (2020年8月15日). 「パラメータ化されたCRCアルゴリズムのカタログ」 . 2020年8月1日のオリジナルから アーカイブ済み 。 2020年 9月18日 取得。 ↑ Castagnoli, G.; Bräuer, S.; Herrmann, M. (1993 年 6 月). "24 ビットおよび 32 ビットのパリティ を 持つ巡回冗長検査符号の最適化". IEEE Transactions on Communications . 41 (6): 883–892 . Bibcode : 1993ITCom..41..883C . doi : 10.1109/26.231911 . 1 2 3 4 5 6 7 8 Koopman, Philip (2002年7月). 「インターネットアプリケーション向け32ビット巡回冗長コード」. 国際信頼性システム・ネットワーク会議議事録 (PDF) . pp. 459–468 . CiteSeerX 10.1.1.11.8323 . doi : 10.1109/DSN.2002.1028931 . ISBN 978-0-7695-1597-7 . S2CID 14775606 . 2012年9月16日にオリジナルからアーカイブ(PDF)されました 。 2011年 1月14日 に取得。 ↑ Koopman, Philip (2016年1月21日). "Best CRC Polynomials" . カーネギーメロン大学。 2016年1月20日のオリジナルから アーカイブ済み 。 2016年 1月26日 取得。 ↑ Brayer, Kenneth (1975 年 8 月). SATIN IV Autovon エラーパターンにおけるエラー検出における 32 次多項式の評価 (レポート). National Technical Information Service . ADA014825. 2021 年 12 月 31 日時点のオリジナルから アーカイブ済み。2021 年 12 月 31 日 取得 。 ↑ ハモンド、ジョセフ・L・ジュニア、ブラウン、ジェームズ・E、リュウ、シャンシャン(1975)。 「伝送誤差モデルと誤差制御モデルの開発」 。NASA Sti/Recon テクニカル レポート N. 76 ( 1975 年 5 月発行):15344。Bibcode : 1975STIN...7615344H。ADA013939。2021 年12 月 31 日のオリジナルから アーカイブ。2021 年 12 月 31 日 取得 。 ↑ Brayer, Kenneth; Hammond, Joseph L. Jr. (1975 年 12 月). AUTOVON チャネルにおける誤り検出多項式性能の評価 . NTC 75 : National Telecommunications Conference, 1975 年 12 月 1 ~ 3 日、ルイジアナ州ニューオーリンズ. Vol. 1. Institute of Electrical and Electronics Engineers. pp. 8–21–5. Bibcode : 1975ntc.....1....8B . OCLC 32688603 . 75 CH 1015-7 CSCB. ↑ 偶数パリティのCRCは、奇数個のビットエラーを検出できますが、ペイロードが長い場合、ハミング距離が小さくなります。パリティは、先頭または末尾の暗黙の1を含め、生成多項式全体で計算されることに注意してください。たとえば、CRC-1の完全な表現は0x3で、1ビットが2つあります。したがって、そのパリティは偶数です。 1 2 "32 ビット CRC Zoo" . users.ece.cmu.edu . 2018 年 3 月 19 日にオリジナルから アーカイブされました 。2017 年 11 月 5 日 に取得。 ↑ ペイロードとはCRCフィールドを除く長さを意味します。ハミング距離がd であるということは、 d - 1ビットのエラーを検出でき、⌊( d - 1)/2⌋ビットのエラーを訂正できることを意味します。 ↑ は任意の長さのメッセージに対して常に達成されます 1 2 3 4 5 6 ETSI TS 100 909 (PDF) 。V8.9.0。フランス、ソフィア・アンティポリス:欧州電気通信標準化機構。2005年1月。 2018年4月17日にオリジナルから アーカイブ (PDF) 。 2016年 10月21日 に取得 。 ↑ "3 Bit CRC Zoo" . users.ece.cmu.edu . 2018年4月7日のオリジナルから アーカイブ済み。 2018年 1月19日 取得 。 ↑ Class-1 Generation-2 UHF RFID Protocol (PDF) . 1.2.0. EPCglobal . 2008年10月23日. p. 35. 2012年3月19日にオリジナルから アーカイブ (PDF) 。 2012年 7月4日 に取得。 (表6.12)1 2 3 4 5 6 CDMA2000スペクトラム拡散システムの物理層標準 (PDF) 。改訂版Dバージョン2.0。第3世代パートナーシッププロジェクト2。2005年10月。pp. 2–89–2–92。 2013年11月16日に オリジナル (PDF) からアーカイブ。 2013年 10月14日 に取得 。 1 2 3 「11. エラー訂正戦略」。ETSI EN 300 751 (PDF) 。V1.2.1。フランス、ソフィア・アンティポリス:欧州電気通信標準化機構。2003年1月。pp. 67–8 。 2015年12月28日にオリジナルから アーカイブ (PDF) 。 2016年 1月26日 取得 。 ↑ "6 Bit CRC Zoo" . users.ece.cmu.edu . 2018年4月7日のオリジナルから アーカイブ済み。 2018年 1月19日 取得 。 1 2 Chakravarty, Tridib (2001 年 12 月). 組み込みネットワークにおける巡回冗長符号の性能 (PDF) (学位論文). Philip Koopman 指導教官. カーネギーメロン大学. pp. 5, 18. 2014 年 1 月 1 日のオリジナルから アーカイブ (PDF) . 2013 年 7 月 8 日 取得 。 ↑ 「5.1.4 CRC-8 エンコーダ (パケット化されたストリームのみ)」。 EN 302 307 (PDF) 。V1.3.1。フランス、ソフィア・アンティポリス:欧州電気通信標準化機構。2013 年 3 月。p. 17。2017 年 8 月 30 日にオリジナルから アーカイブ (PDF) 。2016 年 7 月 29 日 に取得 。 1 2 "8 ビット CRC Zoo" . users.ece.cmu.edu . 2018 年 4 月 7 日のオリジナルから アーカイブ済み。2018 年 1 月 19 日 に取得 。 ↑ 「7.2.1.2 8ビット0x2F多項式CRC計算」。CRC ルーチンの仕様 (PDF) 。4.2.2。ミュンヘン:AUTOSAR。2015年7月22日。p.24。 2016年7月24日に オリジナル (PDF) からアーカイブ。 2016年 7月24日 に取得 。 1 2 3 "5.1.1.8 巡回冗長検査フィールド (CRC-8 / CRC-16)". openSAFETY 安全プロファイル仕様: EPSG 作業草案提案 304 . 1.4.0. ベルリン: Ethernet POWERLINK 標準化グループ。2013 年 3 月 13 日。p. 42。2017 年 8 月 12 日の オリジナル からアーカイブ。2016 年 7 月 22 日 取得 。 ↑ 「B.7.1.1 HEC世代」。Bluetooth システム仕様書 。第 2巻。Bluetooth SIG。2014年12月2日。pp. 144–5 。 2015年3月26日にオリジナルから アーカイブ。 2014年 10月20日 に取得 。 ↑ Whitfield, Harry (2001年4月24日). "巡回冗長検査計算のためのXFCN" . 2005年5月25日に オリジナル からアーカイブ済み。 ↑ リチャードソン、アンドリュー(2005年3月17日)。WCDMA ハンドブック 。 ケンブリッジ大学 出版局。p.223。ISBN 978-0-521-82815-4 。1 2 FlexRay プロトコル仕様 . 3.0.1. Flexray コンソーシアム. 2010 年 10 月. p. 114. (4.2.8 ヘッダーCRC (11ビット))↑ Perez, A. (1983). "Byte-Wise CRC Calculations". IEEE Micro . 3 (3): 40–50 . Bibcode : 1983IMicr...3c..40P . doi : 10.1109/MM.1983.291120 . S2CID 206471618 . ↑ Ramabadran, TV; Gaitonde, SS (1988). "CRC計算に関するチュートリアル". IEEE Micro . 8 (4): 62–75 . Bibcode : 1988IMicr...8d..62R . doi : 10.1109/40.7773 . S2CID 10216862 . ↑ 「HC11とMC3371を使用した長波無線データ復号」 (PDF) 。フリースケール・セミコンダクター。2004年。AN1597/D。 2015年9月24日に オリジナル (PDF) からアーカイブ済み。 ↑ Ely, SR; Wright, DT (1982年3月). LF Radio-Data: 1982年のBBC実験送信の仕様 (PDF) . 英国放送協会、エンジニアリング部門、研究部。p. 9. 2013年10月12日のオリジナルから アーカイブ (PDF) 。 2013年 10月11日 取得 。 ↑ 巡回冗長検査 (CRC): PSoC Creator コンポーネント データシート 。Cypress Semiconductor。2013 年 2 月 20 日。p. 4。2016 年 2 月 2 日のオリジナルから アーカイブ。2016 年 1 月 26 日 取得 。 ↑ 「CANフレームにおける巡回冗長検査(CRC)」 . CAN in Automation . 2016年2月1日時点のオリジナルから アーカイブ済み。 2016年 1月26日 取得 。 ↑ 「3.2.3 エンコーディングとエラーチェック」。 トランキング方式の私的陸上移動無線システム用信号規格(MPT 1327) (PDF) (第3 版)。Ofcom 。 1997年6月。p. 3。 2012年7月14日にオリジナルから アーカイブ (PDF) 。 2012年 7月16日 取得 。 ↑ Rehmann, Albert; Mestre, José D. (1995 年 2 月) 「航空地上データリンク VHF 航空会社通信報告システム (ACARS) 予備試験報告書」 (PDF) . 連邦航空局技術センター。p. 5。2012 年 8 月 2 日に オリジナル (PDF) からアーカイブ済み。2012 年 7 月 7 日 に取得 。 ↑ 「6.2.5 エラー制御」。ETSI EN 300 175-3 (PDF) 。V2.5.1。フランス、ソフィア・アンティポリス:欧州電気通信標準化機構。2013年8月。99、101ページ。 2015 年7月1日にオリジナルから アーカイブ (PDF) 。 2016年 1月26日 取得 。 1 2 3 NVM Express™ コマンドセット仕様 ↑ Thaler, Pat (2003年8月28日). 「16ビットCRC多項式選択」 (PDF) . INCITS T10. 2011年7月28日のオリジナルから アーカイブ (PDF) 。 2009年 8月11日 取得 。 ↑ "8.8.4 チェックオクテット (FCS)". PROFIBUS 仕様規範部分 (PDF) . 1.0. Vol. 9. Profibus International. 1998 年 3 月. p. 906. 2008 年 11 月 16 日に オリジナル (PDF)からアーカイブ済み。2016 年 7 月 9 日 に取得 。 1 2 CAN with Flexible Data-Rate Specification (PDF) . 1.0. Robert Bosch GmbH. 2012年4月17日。p. 13。 2013年8月22日に オリジナル (PDF) からアーカイブされました。 (3.2.1 データフレーム)↑ 「OS-9 オペレーティングシステム システムプログラマーズマニュアル」 。roug.org 。 2018年7月17日のオリジナルから アーカイブ済み 。 2018年 7 月17日 に取得。 ↑ Koopman, Philip P. (2018年5月20日). "24ビットCRC動物園" . users.ece.cmu.edu . 2018年4月7日のオリジナルから アーカイブ済み 。 2018年 1月19日 取得。 ↑ "cksum" . pubs.opengroup.org . 2018年7月18日のオリジナルから アーカイブ済み。 2017年 6月27日 取得 。 ↑ Boutell, Thomas; Randers-Pehrson, Glenn; et al. (1998年7月14日). "PNG (Portable Network Graphics) Specification, Version 1.2" . Libpng.org. 2011年9月3 日のオリジナルから アーカイブ済み。 2011年 2月3日 取得 。 ↑ 「ReFS の整合性ストリーム」 。 ↑ " [ MS-VHDX ] : 構造" 。 ↑ AIXM入門 (PDF) 。4.5. 欧州航空航法安全機構 。2006年3月20日。 2018年11月20日のオリジナルから アーカイブ (PDF) 。 2019年 2月3日 取得 。 ↑ ETSI TS 100 909 2018年4月17日にWayback Machine に アーカイブ済みバージョン8.9.0(2005年1月)、セクション4.1.2 a ↑ Gammel, Berndt M. (2005年10月31日). Matpackドキュメント: Crypto – Codes . Matpack.de. 2013年8月25日のオリジナルから アーカイブ済み 。 2013年 4月21日 取得。 (注:MpCRC.htmlは、Matpackで圧縮されたソフトウェアのソースコードに同梱されており、/html/LibDoc/Cryptoディレクトリにあります。)↑ Geremia, Patrick (1999年4月) 「巡回冗長検査計算:TMS320C54xを使用した実装」 (PDF) . Texas Instruments. p. 5. 2012年6月14日のオリジナルから アーカイブ (PDF) 。 2012年 7月4日 取得 。 ↑ Jones, David T. 「タンパク質配列のための改良型64ビット巡回冗長検査」 (PDF) . ユニバーシティ・カレッジ・ロンドン。 2011年6月7日のオリジナルから アーカイブ (PDF) 。 2009年 12月15日 取得 。
外部リンク Mitra, Jubin; Nayak, Tapan (2017年1月)「CRC 32の再構成可能な超高スループット低遅延VLSI(FPGA)設計アーキテクチャ」Integration, the VLSI Journal . 56 : 1–14 . doi : 10.1016/j.vlsi.2016.09.005 . 巡回冗長検査、MathPages、さまざまな多項式のエラー検出の概要 Williams, Ross (1993). "CRCエラー検出アルゴリズムの簡単なガイド"。2011年9月3日にオリジナルからアーカイブ済み。2011年8月15日 に取得。ブラック、リチャード(1994)。「ソフトウェアによる高速CRC32」。ブルーブック 。ケンブリッジ大学コンピュータ研究所システム研究グループ。 アルゴリズム4はLinuxとBzip2で使用されました。Kounavis, M.; Berry, F. (2005). "高性能ソフトウェアベースCRCジェネレータ構築のための体系的アプローチ" (PDF) . Intel. 2006年12月16日のオリジナルからアーカイブ(PDF) . 2007年 2月4日 取得 . 4分割および8分割アルゴリズムKowalk, W. (2006年8月). 「CRC巡回冗長検査:エラーの分析と訂正」(PDF) . オルデンブルク大学。2007年6月11日のオリジナルからアーカイブ(PDF) 。 2006年 9月1日 取得 。 — ビットフィルターウォーレン、ヘンリー・S・ジュニア「巡回冗長検査」(PDF) 。Hacker 's Delight 。 2015年5月3日にオリジナル(PDF) からアーカイブ済み。 ―理論、実践、ハードウェア、ソフトウェアについて、CRC-32に重点を置いて解説する。CRCアルゴリズムのリバースエンジニアリング( 2011年8月7日、 Wayback Machine にアーカイブ済み) Cook, Greg. 「パラメータ化されたCRCアルゴリズムのカタログ」 . CRC RevEng . 2020年8月1日時点のオリジナルからアーカイブ済み。 2020年 9月18日 取得 。 Koopman, Phil. 「ブログ: Checksum and CRC Central」。 — 16ビットおよび32ビットCRCハミング距離を示すPDFへのリンクが含まれています — (2023年4月) 「生命に関わるネットワークがHD=6を提供する傾向がある理由」Koopman, Philip; Driscoll, Kevin; Hall, Brendan (2015 年 3 月) 「重要なデータの完全性を確保するための巡回冗長コードとチェックサムアルゴリズム」(PDF) 。連邦航空局。DOT/FAA/TC-14/49。2015年 5 月 18 日のオリジナルからアーカイブ(PDF) 。2015 年 5 月 9 日 取得 。 Koopman, Philip (2023年1月).巡回冗長検査計算のメカニズム – YouTube経由。 ISO/IEC 13239:2002:情報技術-電気通信およびシステム間の情報交換-高レベルデータリンク制御(HDLC)手順 CRC32-Castagnoli Linux ライブラリ