巡回冗長検査( CRC ) は、デジタルネットワークやストレージデバイスでデジタルデータの偶発的な変更を検出するために一般的に使用されるエラー検出コードです。 [1] [2]これらのシステムに入力されるデータブロックには、その内容の多項式除算の剰余に基づいて 短いチェック値が添付されます。取得時に計算が繰り返され、チェック値が一致しない場合は、データ破損に対する修正措置が講じられます。CRC はエラー訂正に使用できます(ビットフィルターを参照)。[3]
CRC は、チェック(データ検証) 値が冗長(情報を追加せずにメッセージを拡張) であり、アルゴリズムが巡回コードに基づいていることから、このように呼ばれています。CRC は、バイナリハードウェアでの実装が簡単で、数学的に分析しやすく、伝送チャネルのノイズによって発生する一般的なエラーの検出に特に適しているため、人気があります。チェック値は固定長であるため、それを生成する関数はハッシュ関数として使用されることがあります。
導入
CRC は巡回 誤り訂正符号の理論に基づいています。通信ネットワークでの誤り検出を目的として、固定長のチェック値を追加することでメッセージをエンコードする体系的な巡回符号の使用は、 1961 年にW. Wesley Petersonによって初めて提案されました。 [4]巡回符号は実装が簡単なだけでなく、バースト エラー(メッセージ内の誤ったデータ シンボルの連続シーケンス) の検出に特に適しているという利点があります。バースト エラーは、磁気および光ストレージ デバイスを含む多くの通信チャネルで一般的な伝送エラーであるため、これは重要です。通常、任意の長さのデータ ブロックに適用されたnビットの CRC は、 nビットを超えない単一のエラー バーストを検出し、検出されるすべてのより長いエラー バーストの割合は、約(1 − 2 − n )です。
CRC コードの仕様には、いわゆる生成多項式の定義が必要です。この多項式は、メッセージを被除数として受け取り、商が破棄されて剰余が結果となる多項式長除算の除数になります。重要な注意点は、多項式係数は有限体の算術に従って計算されるため、加算演算は常にビット単位で並列に実行できることです (桁間の繰り上がりはありません)。
実際には、一般的に使用されるすべての CRC は、2 つの要素の有限体GF(2)を使用します。2 つの要素は通常 0 と 1 と呼ばれ、コンピュータ アーキテクチャに適合しています。
CRC は、チェック値がnビット長の場合、 nビット CRC と呼ばれます。 nが与えられた場合、それぞれが異なる多項式を持つ複数の CRC が可能です。このような多項式の最高次数はnで、これはn + 1項を持つことを意味します。言い換えると、多項式の長さはn + 1で、エンコードにはn + 1ビットが必要です。ほとんどの多項式仕様では、MSbまたはLSb は常に 1 であるため、どちらかが省略されることに注意してください。CRC と関連する多項式には、通常、次の表に示すように、 CRC- n -XXXという形式の名前が付けられます。
最も単純なエラー検出システムであるパリティビットは、実際には1ビットのCRCです。これは生成多項式 x + 1(2つの項)を使用し、[5] CRC-1という名前が付けられています。
応用
CRC 対応デバイスは、送信または保存される各データ ブロックに対して、チェック値またはCRCと呼ばれる短い固定長のバイナリ シーケンスを計算し、それをデータに追加してコードワードを形成します。
コードワードが受信または読み取られると、デバイスはそのチェック値をデータ ブロックから新たに計算された値と比較するか、または同等に、コードワード全体に対して CRC を実行し、結果のチェック値を予想される剰余定数と比較します。
CRC 値が一致しない場合は、ブロックにデータ エラーが含まれます。
デバイスは、ブロックの再読み込みや再送信の要求などの修正アクションを実行する場合があります。それ以外の場合、データはエラーがないとみなされます(ただし、わずかな確率で、検出されていないエラーが含まれている可能性があります。これはエラーチェックの性質上当然のことです)。[6]
データの整合性
CRC は、通信チャネル上の一般的なエラーから保護するために特別に設計されており、配信されるメッセージの整合性を迅速かつ合理的に保証できます。ただし、データの意図的な変更から保護するには適していません。
まず、認証がないため、攻撃者はメッセージを編集し、CRC を再計算しても置換が検出されません。CRC と暗号化ハッシュ関数は、データと一緒に保存されると、それ自体では意図的なデータ変更から保護されません。このような攻撃に対する保護を必要とするアプリケーションは、メッセージ認証コードやデジタル署名(通常は暗号化ハッシュ関数に基づく)などの暗号化認証メカニズムを使用する必要があります。
第二に、暗号ハッシュ関数とは異なり、CRCは簡単に元に戻せる関数であるため、デジタル署名に使用するには適していません。[7]
第三に、CRCは線形関数(より正確にはアフィン関数)と同様の関係を満たす:[8]
ここで、はおよびの長さに依存します。これは、、およびが同じ長さである として次のようにも言えます。
その結果、CRCがXORを結合演算として使用するストリーム暗号(またはOFBやCFBなどのブロック暗号を効果的にストリーム暗号に変換するモード)で暗号化されたとしても、メッセージと関連するCRCの両方を暗号化キーを知らなくても操作することができます。これは、 Wired Equivalent Privacy (WEP)プロトコルのよく知られた設計上の欠陥の1つでした。[9]
計算
nビットのバイナリ CRC を計算するには、入力を表すビットを 1 行に並べ、CRC の除数 (「多項式」と呼ばれる) を表す ( n + 1 ) ビット パターンを行の左端の下に配置します。
この例では、14 ビットのメッセージを 3 ビット CRC でエンコードします。多項式はx 3 + x + 1です。多項式は係数としてバイナリで記述されます。3 次多項式には 4 つの係数 ( 1 x 3 + 0 x 2 + 1 x + 1 ) があります。この場合、係数は 1、0、1、1 です。計算結果は 3 ビット長であるため、3 ビット CRC と呼ばれます。ただし、多項式を明示的に示すには 4 ビットが必要です。
エンコードするメッセージから始めます:
11010011101100
まず、CRC のビット長nに対応するゼロが埋め込まれます。これは、結果のコード ワードが体系的な形式になるように行われます。3 ビット CRC を計算するための最初の計算は次のとおりです。
11010011101100 000 <--- 入力右側に3ビット追加 1011 <--- 除数(4ビット) = x³ + x + 1 ------------------ 01100011101100 000 <--- 結果
アルゴリズムは、各ステップで除数のすぐ上のビットに作用します。その反復の結果は、多項式除数とその上のビットのビット単位の XOR です。除数より上ではないビットは、そのステップで単にすぐ下にコピーされます。次に、除数は入力の残りの最上位 1 ビットに揃うように右にシフトされ、除数が入力行の右端に達するまでこのプロセスが繰り返されます。計算全体は次のとおりです。
11010011101100 000 <--- 入力右側に3ビット追加
1011 <--- 除数
01100011101100 000 <--- 結果 (最初の 4 ビットは下の除数との XOR であり、残りのビットは変更されないことに注意してください)
1011 <--- 除数 ...
00111011101100 000
1011
00010111101100 000
1011
00000001101100 000 <--- 除数が被除数の次の 1 と一致するように移動することに注意してください (そのステップの商は 0 だったため)
1011 (言い換えれば、反復ごとに必ずしも 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コードは、選択された入力と多項式の初期 CRC 剰余を返す関数の概要を示しています。初期パディングは 1 または 0 です。このコードは生の数値ではなく文字列入力で機能することに注意してください。
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 .範囲( len ( polynomial_bitstring ))内のiのインデックス( '1' ) : input_padded_array [ cur_shift + i ] \
= str ( int ( polynomial_bitstring [ i ] != input_padded_array [ cur_shift + i ])) ''を返します。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 .範囲( len ( polynomial_bitstring ))内のiのインデックス( '1' ) : input_padded_array [ cur_shift + i ] \
= str ( int ( polynomial_bitstring [ i ] != input_padded_array [ cur_shift + i ]))戻り値( '1' は''に含まれません。join ( input_padded_array )[ len_input : ])
>>> crc_remainder ( '11010011101100' , '1011' , '0' )
'100'
>>> crc_check ( '11010011101100' , '1011' , '100' )
真
数学
この除算のようなプロセスを数学的に分析すると、エラー検出特性を保証する除数を選択する方法が明らかになります。この分析では、ビット列の数字は、より一般的な数値ではなく、有限体GF(2)の要素である変数xの多項式の係数(2 を法とする整数、つまり 0 または 1) として扱われます。2 進多項式の集合は数学的な環です。
多項式の設計
生成多項式の選択は、CRC アルゴリズムを実装する上で最も重要な部分です。多項式は、全体的な衝突確率を最小限に抑えながら、エラー検出機能を最大化するように選択する必要があります。
多項式の最も重要な属性は長さ(多項式内の任意の項の最大次数(指数)+1)です。これは、計算されたチェック値の長さに直接影響するためです。
最も一般的に使用される多項式の長さは9ビット(CRC-8)、17ビット(CRC-16)、33ビット(CRC-32)、および65ビット(CRC-64)である。[5]
CRC は、チェック値がnビットの場合、 nビット CRC と呼ばれます。 nが与えられた場合、それぞれが異なる多項式を持つ複数の CRC が可能です。このような多項式の最高次数はnであるため、項数はn + 1です(多項式の長さはn + 1です)。剰余の長さはnです。CRC の名前は、CRC- n -XXX の形式です。
CRC多項式の設計は、保護するブロックの最大合計長(データ+ CRCビット)、必要なエラー保護機能、CRCを実装するためのリソースの種類、および必要なパフォーマンスによって異なります。よくある誤解は、「最良の」CRC多項式は、既約多項式または既約多項式に係数 1 + xを掛けたものから導き出されるというもので、これにより、奇数ビットに影響するすべてのエラーを検出する機能がコードに追加されます。[10]実際には、上記のすべての要因が多項式の選択に影響し、既約多項式につながる可能性があります。ただし、既約多項式を選択すると、商環にゼロの約数があるため、一定の割合でエラーが見逃されることになります。
CRC コードの生成元として原始多項式を選択する利点は、結果として得られるコードが最大合計ブロック長を持つこと、つまりそのブロック長内のすべての 1 ビット エラーが異なる剰余 (シンドロームとも呼ばれる) を持つことであり、剰余はブロックの線形関数であるため、コードはそのブロック長内のすべての 2 ビット エラーを検出できることです。 が原始生成多項式の次数である場合、最大合計ブロック長は であり、関連付けられているコードは任意の 1 ビット エラーまたは 2 ビット エラーを検出できます。[11]この状況を改善できます。 が次数の原始多項式である生成多項式 を使用すると、最大合計ブロック長は であり、コードは 1 つ、2 つ、3 つ、および任意の奇数のエラーを検出できます。
最大合計ブロック長と望ましいエラー検出能力とのバランスをとるために、他の因数分解を許容する多項式を選択できます。BCHコードは、このような多項式の強力なクラスです。BCH コードは、上記の 2 つの例を包含します。次数rの生成多項式の簡約性特性に関係なく 、"+1" 項が含まれている場合、コードはr 個の連続ビットのウィンドウに限定されたエラー パターンを検出できます。これらのパターンは "エラー バースト" と呼ばれます。
仕様
エラー検出コードとしての CRC の概念は、実装者または標準化委員会が実際のシステムを設計するためにそれを使用する場合、複雑になります。次に、その複雑さの一部を示します。
- 実装によっては、チェックするビットストリームに固定ビット パターンをプレフィックスとして付けることがあります。これは、クロッキング エラーによってメッセージの前に 0 ビットが挿入される可能性があり、この変更によってチェック値が変更されない場合に便利です。
- 通常、実装では、多項式除算が行われる前に、チェック対象のビットストリームにn 個の0 ビット( nは CRC のサイズ)を追加します(ただし、常にそうとは限りません)。このような追加は、 「CRC の計算」の記事で明示的に示されています。この方法には、チェック値が追加された元のビットストリームの余りがちょうど 0 になるという利便性があるため、受信したビットストリームに対して多項式除算を実行し、余りを 0 と比較するだけで CRC をチェックできます。排他的論理和演算の結合性と可換性により、実際のテーブル駆動型実装では、メッセージ ビットストリームと CRC レジスタからシフトアウトされるストリームを組み合わせる同等の[10]より高速なアルゴリズムを使用することで、明示的に 0 を追加せずに、数値的にゼロ追加と同等の結果を得ることができます。
- 場合によっては、実装によって、多項式除算の剰余に固定ビット パターンを排他的論理和で演算します。
- ビット順序:一部の方式では、各バイトの下位ビットを「最初」と見なします。これは、多項式除算中に「左端」を意味し、これは「下位」の一般的な理解とは相反します。この規則は、シリアル ポート送信がハードウェアで CRC チェックされる場合に意味を持ちます。これは、広く普及しているシリアル ポート送信規則の一部が、バイトを最下位ビットから最初に送信するためです。
- バイト順序: マルチバイト CRC では、最初に送信されるバイト (またはメモリの最下位アドレス バイトに格納されるバイト) が最下位バイト (LSB) なのか最上位バイト (MSB) なのかが不明になる場合があります。たとえば、一部の 16 ビット CRC 方式では、チェック値のバイトが入れ替わります。
- 除数多項式の上位ビットの省略: 上位ビットは常に 1 であり、nビット CRC はnビットレジスタをオーバーフローする( n + 1 ) ビットの除数によって定義される必要があるため、除数の上位ビットについて言及する必要はないと考える作成者もいます。
- 除数多項式の下位ビットの省略: 下位ビットは常に 1 なので、Philip Koopman などの著者は、上位ビットはそのままで下位ビット (または 1 項) を省略して多項式を表します。この規則により、多項式とその次数が 1 つの整数にエンコードされます。
これらの複雑さにより、多項式を整数として表現する一般的な方法は 3 つあります。最初の 2 つはバイナリで鏡像となり、コード内の定数です。3 つ目は Koopman の論文にある数値です。 いずれの場合も、1 つの項が省略されます。したがって、多項式は次のように書き直すことができます。
- 0x3 = 0b0011、(MSBファーストコード)を表す
- 0xC = 0b1100、(LSBファーストコード)を表す
- 0x9 = 0b1001、(クープマン表記)を表す
以下の表では以下のように示されています:
難読化
独自プロトコルのCRCは、非自明な初期値と最終的なXORを使用することで難読化される可能性がありますが、これらの手法はアルゴリズムに暗号強度を追加するものではなく、簡単な方法でリバースエンジニアリングすることができます。 [12]
標準と一般的な使用
多種多様な巡回冗長検査が技術標準に組み込まれている。1つのアルゴリズム、または各次数のアルゴリズムがあらゆる目的に適しているわけではない。KoopmanとChakravartyは、アプリケーションの要件と予想されるメッセージ長の分布に応じて多項式を選択することを推奨している。[13]使用されている異なるCRCの数は開発者を混乱させており、著者はこの状況に対処しようとしてきた。[10] CRC-12には3つの多項式が報告されており、 [13] CRC-16には22の矛盾する定義があり、CRC-32には7つの多項式がある。 [14]
一般的に適用される多項式は、最も効率的なものではありません。1993 年以来、Koopman、Castagnoli らは 3 ビットから 64 ビットのサイズの多項式空間を調査し、[13] [15] [16] [17]以前のプロトコルの多項式よりもはるかに優れたパフォーマンス (特定のメッセージ サイズに対するハミング距離の観点から) を持つ例を見つけ、将来の標準のエラー検出能力を向上させる目的でその中から最良の例を公開しました。[16]特に、iSCSIとSCTP は、この研究の成果の 1 つである CRC-32C (Castagnoli) 多項式を採用しました。
標準化団体で最も一般的に使用されている32ビット多項式であるCRC-32-IEEEの設計は、ジョージア工科大学のジョセフ・ハモンド、ジェームズ・ブラウン、シャイアン・シアン・リウとマイター社のケネス・ブレイヤーによるローマ研究所と空軍電子システム部門の共同作業の結果でした。32ビット多項式が最も古く登場したのは、1975年の出版物です。マイター向けのブレイヤーによる技術レポート2956は1月に発行され、8月にDTICを通じて一般に公開されました[18]、およびローマ研究所向けのハモンド、ブラウン、リウのレポートは5月に発行されました[19] 。両方のレポートには、他のチームからの貢献が含まれていました。 1975 年 12 月、Brayer と Hammond は IEEE National Telecommunications Conference で論文を発表し、IEEE CRC-32 多項式はハミング コードの生成多項式であり、そのエラー検出性能のために選択されたと述べました。[20] それでも、iSCSI や SCTP で使用されている Castagnoli CRC-32C 多項式は、58 ビットから 131 kbits のメッセージでその性能に匹敵し、インターネット パケットの最も一般的な 2 つのサイズを含むいくつかのサイズ範囲でそれを上回ります。[16] ITU -T G.hn標準でも、ペイロードのエラーを検出するために CRC-32C を使用します (ただし、 PHY ヘッダーには CRC-16-CCITT を使用します)。
CRC-32C 計算は、 IntelプロセッサのNehalemマイクロアーキテクチャで初めて導入されたSSE4.2CRC32命令セットの操作 ( ) としてハードウェアに実装されています。ARM AArch64アーキテクチャは、CRC-32 と CRC-32C の両方の操作にハードウェア アクセラレーションも提供します。
多項式表現
以下の表には、使用されているさまざまなアルゴリズムの多項式のみが記載されています。特定のプロトコルのバリエーションでは、前述のように、事前反転、事後反転、および逆ビット順序が課される場合があります。たとえば、Gzip と Bzip2 で使用される CRC32 は同じ多項式を使用しますが、Gzip は逆ビット順序を採用していますが、Bzip2 は採用していません。[14] GF(2) の次数が 1 より大きい偶数パリティ多項式は、決して原始的ではないことに注意してください。この表で原始的とマークされている偶数パリティ多項式は、原始多項式に を掛けたものを表します。多項式の最上位ビットは常に 1 であり、16 進表現では表示されません。
実装
- GNU Radio 3.6.1 までの CRC32 の実装 (2012 年頃)
- さまざまな CRC から選択できる CRC チェックサム計算用の C クラス コード
CRCカタログ
- パラメータ化されたCRCアルゴリズムのカタログ
- CRC多項式動物園
参照
参考文献
- ^ Pundir, Meena; Sandhu, Jasminder Kaur (2021). 「機械学習を使用したワイヤレスセンサーネットワークのサービス品質の体系的なレビュー:最近の傾向と将来のビジョン」。ネットワークとコンピューターアプリケーションジャーナル。188 :103084。doi : 10.1016 / j.jnca.2021.103084。巡回
冗長検査(CRC)メカニズムは、データが送信者から受信者に送信されるときにデータを保護し、エラービットからの整合性を保護するために使用されます。
- ^ Schiller, Frank; Mattes , Tina (2007). 「決定論的および確率的オートマトンによる安全性重視の通信のための CRC 多項式の分析」2006 年の技術プロセスの障害検出、監視、安全性。Elsevier。pp. 944– 949。doi :10.1016 / b978-008044485-7/50159-7。ISBN 978-0-08-044485-7巡回冗長検査 (CRC) は、
多項式除算の結果としてのチェックサムを使用して、データ転送時に検出されないエラーの可能性を低く抑える効率的な方法です。
- ^ 「巡回冗長検査の誤り訂正アルゴリズム」drdobbs.com。 2017年7月20日時点のオリジナルよりアーカイブ。2017年6月28日閲覧。
- ^ Peterson, WW; Brown, DT (1961年1月). 「エラー検出のための巡回コード」. Proceedings of the IRE . 49 (1): 228– 235. doi :10.1109/JRPROC.1961.287814. S2CID 51666741.
- ^ ab 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。
- ^ Ritter, Terry (1986年2月). 「The Great CRC Mystery」. Dr. Dobb's Journal . 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 に計算されるようにできます。
- ^ 「アルゴリズム設計 - 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 日閲覧。
- ^ abc 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 巡回冗長検査およびその他のチェックサム」。数値レシピ: 科学計算の技法(第 3 版)。ケンブリッジ大学出版局。ISBN 978-0-521-88068-8. 2024年7月13日時点のオリジナルよりアーカイブ。2024年8月20日閲覧。
- ^ Ewing, Gregory C. (2010 年 3 月)。「CRC アルゴリズムのリバースエンジニアリング」。クライストチャーチ: カンタベリー大学。2011 年 8 月 7 日時点のオリジナルよりアーカイブ。2011年7 月 26 日閲覧。
- ^ abcdefghij 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日閲覧。
- ^ ab Cook, Greg (2020年8月15日). 「Catalogue of parametrised CRC algorithms」。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. doi :10.1109/26.231911.
- ^ abcdefgh Koopman, Philip (2002 年 7 月)。「インターネット アプリケーション向け 32 ビット巡回冗長コード」。Proceedings International Conference on Dependable Systems and Networks ( 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日閲覧。
- ^ Hammond, Joseph L. Jr.; Brown, James E.; Liu, Shyan-Shiang ( 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 日、ルイジアナ州ニューオーリンズ。第 1 巻。電気電子技術者協会。pp. 8 ~ 21 ~ 5。Bibcode : 1975ntc.....1....8B。OCLC 32688603。75 CH 1015-7 CSCB。
- ^ 偶数パリティの CRC は、長いペイロードのハミング距離が低くなるという代償を払って、奇数ビットエラーを検出します。パリティは、先頭または末尾の暗黙の 1 を含め、生成多項式全体にわたって計算されることに注意してください。たとえば、CRC-1 の完全な表現は 0x3 で、1 ビットが 2 つあります。したがって、そのパリティは偶数です。
- ^ ab "32 Bit CRC Zoo". users.ece.cmu.edu . 2018年3月19日時点のオリジナルよりアーカイブ。2017年11月5日閲覧。
- ^ ペイロードはCRCフィールドを除いた長さを意味します。ハミング距離dは、d − 1ビットのエラーを検出でき、⌊( d − 1)/2⌋ビットのエラーを訂正できることを意味します。
- ^は 任意の長さのメッセージに対して常に達成される
- ^ abcdef 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日閲覧。
- ^ クラス1第2世代UHF RFIDプロトコル(PDF) . 1.2.0. EPCglobal . 2008年10月23日. p. 35. 2012年3月19日時点のオリジナルよりアーカイブ(PDF) . 2012年7月4日閲覧。(表6.12)
- ^ abcdef cdma2000拡散スペクトルシステムの物理層標準(PDF) 。リビジョンDバージョン2.0。第3世代パートナーシッププロジェクト2。2005年10月。pp. 2–89–2–92。 2013年11月16日時点のオリジナル(PDF)からアーカイブ。 2013年10月14日閲覧。
- ^ abc 「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日閲覧。
- ^ ab Chakravarty, Tridib (2001 年 12 月). 組み込みネットワーク向け巡回冗長コードのパフォーマンス(PDF) (論文). フィリップ・クープマン (アドバイザー)。カーネギーメロン大学。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 日閲覧。
- ^ ab "8 Bit 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日閲覧。
- ^ abc "5.1.1.8 巡回冗長検査フィールド (CRC-8 / CRC-16)"。openSAFETY Safety Profile 仕様: 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。
- ^ ab FlexRayプロトコル仕様。3.0.1。Flexrayコンソーシアム。2010年10月。p.114。(4.2.8 ヘッダーCRC(11ビット))
- ^ Perez, A. (1983). 「バイト単位のCRC計算」. IEEE Micro . 3 (3): 40– 50. doi :10.1109/MM.1983.291120. S2CID 206471618.
- ^ Ramabadran, TV; Gaitonde, SS (1988). 「CRC計算に関するチュートリアル」. IEEE Micro . 8 (4): 62– 75. doi :10.1109/40.7773. S2CID 10216862.
- ^ 「HC11 と MC3371 を使用した長波無線データのデコード」(PDF)。Freescale Semiconductor。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月。3ページ。 2012年7月14日時点のオリジナルからアーカイブ(PDF) 。 2012年7月16日閲覧。
- ^ Rehmann, Albert; Mestre, José D. (1995 年 2 月). 「Air Ground Data Link VHF Airline Communications and Reporting System (ACARS) Preliminary Test Report」(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日閲覧。
- ^ Thaler, Pat (2003 年 8 月 28 日). 「16 ビット CRC 多項式選択」(PDF) . INCITS T10. 2011 年 7 月 28 日時点のオリジナルよりアーカイブ(PDF) . 2009 年8 月 11 日閲覧。
- ^ 「8.8.4 Check Octet (FCS)」。PROFIBUS仕様規範部分(PDF) 。1.0。第9巻。Profibus International。1998年3月。906ページ。 2008年11月16日時点のオリジナル(PDF)からアーカイブ。 2016年7月9日閲覧。
- ^ ab CAN with Flexible Data-Rate 仕様(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 Bit CRC Zoo」. 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) 仕様、バージョン 1.2」. Libpng.org. 2011 年 9 月 3 日時点のオリジナルよりアーカイブ。2011年2 月 3 日閲覧。
- ^ 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)。University College London。2011年6月7日時点のオリジナルよりアーカイブ(PDF) 。 2009年12月15日閲覧。
さらに読む
- ウォーレン・ジュニア、ヘンリー・S (2013)。「14. 巡回冗長検査」。Hacker 's Delight (第 2 版) 。Addison Wesley。pp . 319– 330。ISBN 978-0-321-84268-8。
- Koopman, Philip (2024)。チェックサムと巡回冗長検査の理解。ASIN B0CVXWDZ99 。
外部リンク
- Mitra , Jubin; Nayak, Tapan (2017 年 1 月)。「再構成可能な非常に高いスループットと低レイテンシを備えた CRC 32 の VLSI (FPGA) 設計アーキテクチャ」。Integration 、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 日に取得。— ビットフィルター
- Warren, Henry S. Jr. 「巡回冗長検査」(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。「ブログ: チェックサムと 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 ライブラリ
