誤り検出符号(アヤマリケンシュツゴウ)とは | 意味や読み方など丁寧でわかりやすい用語解説
誤り検出符号(アヤマリケンシュツゴウ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
誤り検出符号 (アヤマリケンシュツゴウ)
英語表記
Error detection code (エラーデテクションコード)
用語解説
誤り検出符号とは、デジタルデータの通信や記録において、データに誤りが発生していないかを検出するために付加される冗長な情報のことである。コンピュータが扱うデータは0と1のビット列で構成されているが、データをネットワーク経由で送信したり、ハードディスクなどの記憶媒体に保存したりする過程で、電気的なノイズや物理的な媒体の劣化など、様々な要因によってビットが反転してしまうことがある。例えば、本来「0」であったビットが「1」に、「1」が「0」に変わってしまう現象がこれにあたる。このようなデータの破損は、プログラムの誤動作やファイルの破損に直結するため、データの信頼性を確保する上で極めて重大な問題となる。誤り検出符号は、こうしたデータの誤りを検知し、データが正常な状態であるかを検証する役割を担う。その基本的な仕組みは、送信側や書き込み側で、元のデータから特定の計算ルールに基づいて短い符号を算出し、元のデータに付け加えて送付・記録するというものである。そして、受信側や読み込み側で、受け取ったデータ本体から送信側と全く同じ計算ルールで符号を算出し直し、データに付加されてきた符号と比較する。この二つの符号が一致すれば、データは途中で変化しておらず正常であると判断できる。もし一致しなければ、伝送路上あるいは記録媒体上で何らかの誤りが発生したと判断し、通信プロトコルの場合はデータの再送を要求するなど、適切な後続処理へと繋げることができる。
誤り検出符号には、その計算方法や検出能力に応じて複数の種類が存在する。最も単純で古典的な方式がパリティチェックである。これは、一定長のデータブロックに含まれる「1」のビットの個数に着目する方法だ。例えば偶数パリティでは、データブロック内の「1」の総数が偶数になるように、パリティビットと呼ばれる1ビットの符号(0または1)を付加する。受信側は、受け取ったデータブロック(パリティビットを含む)の「1」の総数を数え、それが偶数でなければ誤りが発生したと判断する。この方法は計算が非常に簡単で高速だが、同時に2つのビットで誤りが発生した場合は「1」の個数の偶奇が変化しないため、誤りを検出できないという弱点を持つ。この検出能力を高めた方式として、データを二次元的に配置し、行と列のそれぞれに対してパリティビットを付加する水平垂直パリティチェック(二次元パリティチェック)もある。
パリティチェックよりも少し複雑で、より検出能力の高い方式としてチェックサムがある。これは、データを特定のビット数(例えば16ビット)ごとに分割し、それらの数値をすべて足し合わせるなどの演算を行った結果を符号として利用する方式である。IPやTCPといったインターネット通信で中心的に利用されるプロトコルでも、ヘッダ情報が破損していないかを確認するためにチェックサムが用いられている。計算コストと検出能力のバランスが取れているため、多くの場面で採用されている。
現在、非常に強力で信頼性が高い誤り検出符号として広く利用されているのが、CRC(Cyclic Redundancy Check、巡回冗長検査)である。CRCは、データのビット列を特定の数式(生成多項式)で割り算し、その余りを符号としてデータに付加する方式である。この計算は一見複雑に思えるが、ハードウェアで効率的に実装できるため高速な処理が可能である。CRCの最大の特長は、連続したビットがまとめて誤るバースト誤りに対する検出能力が極めて高いことである。通信経路上で発生するノイズは、単一のビットだけでなく、近接する複数のビットに影響を与えることが多いため、この特性は非常に重要となる。その高い信頼性から、有線LANの規格であるイーサネットや、ハードディスク、SSD、ファイルの圧縮形式であるZIPなど、データの一貫性が厳しく求められる様々な技術で標準的に採用されている。
これらの誤り検出符号は、あくまでデータの誤りを「検出」することを目的としており、誤ったビットがどこで発生したかを特定し、それを正しい値に「訂正」する機能は持たないのが一般的である。誤りの訂正まで行う技術は誤り訂正符号(ECC)と呼ばれ、より多くの冗長情報を必要とする高度な仕組みである。誤り検出符号は、システムの要求する信頼性、許容される計算コストやデータ量の増加分などを考慮し、最適な方式が選択される。これにより、我々が日常的に利用するデジタルシステムのデータは、その完全性が保たれているのである。