主な標準CRC
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/05 03:09 UTC 版)
巡回冗長検査は唯一の標準規格があるわけではなく、例えば CRC-12 では3種類の多項式が使われている。また、CRC-16 にはよく使われているものが8種類、CRC-32 は3種類存在する。よく使われている多項式が最も効果的とは限らない。1993年から2004年にかけて、Koopman と Castagnoli らは16ビットまでと、24ビットおよび32ビットの多項式の総当り的調査を行った。そして、それまで利用されていたものよりも(そのメッセージ長でのハミング距離の観点で)性能のよい多項式を発見し、今後の標準化に役立てられるよう発表した。iSCSIはその研究成果を取り入れている。 よく使われるCRC-32多項式は、IEEE勧告のものも V.42、イーサネット、FDDI、ZIP、PNG などで使われているものも、ハミング符号の生成多項式を使っている。これは、誤り検出性能がよいためである。ただし、iSCSIで使っている Castagnoli CRC-32C の方がさらに優れている。 以下の表は、実際に使われている各種アルゴリズムの多項式である。プロトコルによっては、これに事前の逆転や事後の逆転、ビット順序の反転などを施すことがある。独自プロトコルでのCRCは、目くらましとして初期値を複雑化させたり最後にXORしたりすることがあるが、それによって暗号的に強くなるわけではない。 注: ここでは、最上位ビットを省略している。上の特化したCRCの節参照。 名称多項式 (用途)標準 / 反転 (相反多項式の反転)CRC-1 x + 1 (各種ハードウェア。パリティビット) 0x1 / 0x1 (0x1) CRC-4-ITU x4 + x + 1 (ITU G.704, p. 12) 0x3 / 0xC (0x9) CRC-5-ITU x5 + x4 + x2 + 1 (ITU G.704, p. 9) 0x15 / 0x15 (0x1A) CRC-5-USB x5 + x2 + 1 (USBトークンパケット) 0x05 / 0x14 (0x12) CRC-6-ITU x6 + x + 1 (ITU G.704, p. 3) 0x03 / 0x30 (0x21) CRC-7 x7 + x3 + 1 (通信系、MMC、SD) 0x09 / 0x48 (0x44) CRC-8-ATM x8 + x2 + x + 1 (ATM Header Error Correction) 0x07 / 0xE0 (0x83) CRC-8-CCITT x8 + x7 + x3 + x2 + 1 (1-Wire バス) 0x8D / 0xB1 (0xC6) CRC-8-Dallas/Maxim x8 + x5 + x4 + 1 (1-Wire バス) 0x31 / 0x8C (0x98) CRC-8 x8 + x7 + x6 + x4 + x2 + 1 0xD5 / 0xAB (0xEA ) CRC-8-SAE J1850 x8 + x4 + x3 + x2 + 1 0x1D / 0xB8 (0x8E) CRC-10 x10 + x9 + x5 + x4 + x + 1 0x233 / 0x331 (0x319) CRC-11 x11 + x9 + x8 + x7 + x2 + 1 (FlexRay) 0x385 / 0x50E (0x5C2) CRC-12 x12 + x11 + x3 + x2 + x + 1 (通信系、 ) 0x80F / 0xF01 (0xC07) CRC-15-CAN x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1 0x4599 / 0x4CD1 (0x62CC) CRC-16-Fletcher CRCではない。フレッチャーの検査合計 Adler-32 A & B CRC で使用 CRC-16-CCITT x16 + x12 + x5 + 1 (X.25、V.41、CDMA、Bluetooth、XMODEM、HDLC、PPP、IrDA、BACnet; CRC-CCITTとも) 0x1021 / 0x8408 (0x8810 ) CRC-16-IBM x16 + x15 + x2 + 1 (SDLC、USB、その他; CRC-16とも) 0x8005 / 0xA001 (0xC002) CRC-24-Radix-64 x24 + x23 + x18 + x17 + x14 + x11 + x10 + x7 + x6 + x5 + x4 + x3 + x + 1 (FlexRay) 0x864CFB / 0xDF3261 (0xC3267D) CRC-30 x30 + x29 + x21 + x20 + x15 + x13 + x12 + x11 + x8 + x7 + x6 + x2 + x + 1 (CDMA) 0x2030B9C7 / 0x38E74301 (0x30185CE3) CRC-32-Adler CRCではない; Adler-32 Adler-32参照 CRC-32 x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 (V.42, MPEG-2, zlib, PNG ) 0x04C11DB7 / 0xEDB88320 (0x82608EDB ) CRC-32C (Castagnoli) x32 + x28 + x27 + x26 + x25 + x23 + x22 + x20 + x19 + x18 + x14 + x13 + x11 + x10 + x9 + x8 + x6 + 1 (iSCSI, Btrfs, VHDX) 0x1EDC6F41 / 0x82F63B78 (0x8F6E37A0 ) CRC-32K (Koopman) x32 + x30 + x29 + x28 + x26 + x20 + x19 + x17 + x16 + x15 + x11 + x10 + x7 + x6 + x4 + x2 + x + 1 0x741B8CD7 / 0xEB31D82E (0xBA0DC66B ) CRC-64-ISO x64 + x4 + x3 + x + 1 (HDLC — ISO 3309) 0x000000000000001B / 0xD800000000000000 (0x800000000000000D) CRC-64-ECMA-182 x64 + x62 + x57 + x55 + x54 + x53 + x52 + x47 + x46 + x45 + x40 + x39 + x38 + x37 + x35 + x33 + x32 + x31 + x29 + x27 + x24 + x23 + x22 + x21 + x19 + x17 + x13 + x12 + x10 + x9 + x7 + x4 + x + 1 (ECMA-182 p.63) 0x42F0E1EBA9EA3693 / 0xC96C5795D7870F42 (0xA17870F5D4F51B49) 以下は、かつて使われていたが、現在はハッシュ関数などに置換されたもの。 CRC-128 (IEEE) CRC-256 (IEEE)
※この「主な標準CRC」の解説は、「巡回冗長検査」の解説の一部です。
「主な標準CRC」を含む「巡回冗長検査」の記事については、「巡回冗長検査」の概要を参照ください。
- 主な標準CRCのページへのリンク