Циклическая проверка избыточности - Cyclic redundancy check
А циклическая проверка избыточности (CRC) является код обнаружения ошибок обычно используется в цифровых сети и устройства хранения для обнаружения случайных изменений необработанных данных. Блоки данных, поступающие в эти системы, получают краткую проверить значение прилагается, исходя из оставшейся части полиномиальное деление их содержания. При извлечении расчет повторяется, и, если контрольные значения не совпадают, могут быть предприняты корректирующие действия против повреждения данных. CRC могут использоваться для исправление ошибки (видеть битовые фильтры ).[1]
CRC так называются, потому что проверить (проверка данных) значение - это избыточность (он расширяет сообщение без добавления Информация ) и алгоритм основан на циклический коды. CRC популярны, потому что их просто реализовать в двоичном формате. аппаратное обеспечение, легко поддается математическому анализу и особенно хороши при обнаружении распространенных ошибок, вызванных шум в каналах передачи. Поскольку значение проверки имеет фиксированную длину, функция который порождает его, иногда используется как хеш-функция.
CRC был изобретен В. Уэсли Петерсон в 1961 г .; 32-битная функция CRC, используемая в Ethernet и многих других стандартах, является результатом работы нескольких исследователей и была опубликована в 1975 году.
Вступление
CRC основаны на теории циклический коды с исправлением ошибок. Использование систематический циклические коды, которые кодируют сообщения путем добавления контрольного значения фиксированной длины, с целью обнаружения ошибок в сетях связи, были впервые предложены В. Уэсли Петерсон в 1961 г.[2]Циклические коды не только просты в реализации, но и особенно хорошо подходят для обнаружения пакетные ошибки: непрерывные последовательности ошибочных символов данных в сообщениях. Это важно, поскольку пакетные ошибки являются распространенными ошибками передачи во многих каналы связи, включая магнитные и оптические запоминающие устройства. Обычно п-битовая CRC, примененная к блоку данных произвольной длины, обнаружит любой одиночный пакет ошибок длиной не более п битов, а доля всех более длинных пакетов ошибок, которые он обнаружит, равна (1 − 2−п).
Спецификация кода CRC требует определения так называемого порождающий полином. Этот многочлен становится делитель в полиномиальное деление в столбик, который принимает сообщение как дивиденд и в котором частное отбрасывается и остаток становится результатом. Важное предостережение: многочлен коэффициенты рассчитываются по арифметике конечное поле, поэтому операцию сложения всегда можно выполнять поразрядно-параллельно (нет переноса между цифрами).
На практике все обычно используемые CRC используют Поле Галуа из двух элементов, GF (2). Эти два элемента обычно называются 0 и 1, что соответствует компьютерной архитектуре.
CRC называется п-bit CRC, когда его контрольное значение п биты длинные. Для данного п, возможно несколько CRC, каждый со своим полиномом. Такой многочлен имеет высшую степень п, что означает п + 1 термины. Другими словами, многочлен имеет длину п + 1; его кодирование требует п + 1 биты. Обратите внимание, что в большинстве спецификаций полиномов либо отсутствует MSB или же LSB, так как они всегда равны 1. CRC и связанный многочлен обычно имеют имя в форме CRC-п-XXX как в стол ниже.
Самая простая система обнаружения ошибок, бит четности, на самом деле является 1-битным CRC: он использует полином генератораИкс + 1 (два термина) и имеет имя CRC-1.
Заявление
Устройство с поддержкой CRC вычисляет короткую двоичную последовательность фиксированной длины, известную как проверить значение или же CRC, для каждого блока данных, который должен быть отправлен или сохранен, и добавляет его к данным, образуя кодовое слово.
Когда кодовое слово принимается или считывается, устройство либо сравнивает свое контрольное значение с одним, только что вычисленным из блока данных, либо, что эквивалентно, выполняет CRC для всего кодового слова и сравнивает полученное контрольное значение с ожидаемым. остаток постоянный.
Если значения CRC не совпадают, то блок содержит ошибку данных.
Устройство может предпринять корректирующие действия, например перечитать блок или запросить его повторную отправку. В противном случае предполагается, что данные не содержат ошибок (хотя с некоторой небольшой вероятностью они могут содержать необнаруженные ошибки; это заложено в самой природе проверки ошибок).[3]
Целостность данных
CRC специально разработаны для защиты от распространенных типов ошибок в каналах связи, где они могут обеспечить быструю и разумную уверенность в том, что честность доставленных сообщений. Однако они не подходят для защиты от преднамеренного изменения данных.
Во-первых, поскольку нет аутентификации, злоумышленник может отредактировать сообщение и пересчитать CRC без обнаружения подстановки. При хранении вместе с данными CRC и криптографические хеш-функции сами по себе не защищают от преднамеренный модификация данных. Любое приложение, которое требует защиты от таких атак, должно использовать криптографические механизмы аутентификации, такие как коды аутентификации сообщений или же цифровые подписи (которые обычно основаны на криптографический хеш функции).
Во-вторых, в отличие от криптографических хеш-функций, CRC - это легко обратимая функция, что делает ее непригодной для использования в цифровых подписях.[4]
В-третьих, CRC - это линейная функция с собственностью, которая[5]
в результате, даже если CRC зашифрован с помощью потоковый шифр который использует XOR как его объединяющая операция (или Режим из блочный шифр который эффективно превращает его в потоковый шифр, такой как OFB или CFB), и сообщением, и связанным CRC можно манипулировать без знания ключа шифрования; это был один из известных недостатков конструкции Конфиденциальность, эквивалентная проводной сети (WEP) протокол.[6]
Вычисление
Чтобы вычислить п-битовая двоичная CRC, выровняйте биты, представляющие ввод в строке, и поместите (п + 1) -битовый шаблон, представляющий делитель CRC (называемый "многочлен ") под левым концом ряда.
В этом примере мы закодируем 14 бит сообщения с помощью 3-битной CRC с полиномом Икс3 + Икс + 1. Многочлен записывается в двоичном формате как коэффициенты; многочлен 3-й степени имеет 4 коэффициента (1Икс3 + 0Икс2 + 1Икс + 1). В этом случае коэффициенты равны 1, 0, 1 и 1. Результат вычисления составляет 3 бита.
Начните с сообщения, которое нужно закодировать:
11010011101100
Сначала он дополняется нулями, соответствующими длине в битах. п КПР. Это сделано для того, чтобы полученное кодовое слово было в систематический форма. Вот первый расчет для вычисления 3-битной CRC:
11010011101100 000 <--- ввод справа, дополненный 3 битами 1011 <--- делитель (4 бита) = x³ + x + 1 ------------------ 01100011101100 000 <- - результат
Алгоритм воздействует на биты непосредственно над делителем на каждом шаге. Результатом этой итерации является побитовое исключающее ИЛИ полиномиального делителя с битами над ним. Биты не выше делителя просто копируются прямо ниже для этого шага. Затем делитель сдвигается вправо, чтобы выровняться с наивысшим оставшимся 1 битом на входе, и процесс повторяется, пока делитель не достигнет правого конца входной строки. Вот весь расчет:
11010011101100 000 <--- ввод справа, дополненный 3 битами 1011 <--- divisor01100011101100 000 <--- результат (обратите внимание, что первые четыре бита - это XOR с делителем ниже, остальные биты не изменяются) 1011 <--- divisor ... 00111011101100 000 101100010111101100 000 101100000001101100 000 <--- обратите внимание, что делитель перемещается для выравнивания со следующей 1 в дивиденде (так как частное для этого шага было равно нулю) 1011 (другими словами, он не обязательно перемещается один бит на итерацию) 00000000110100 000 101100000000011000 000 101100000000001110 000 101100000000000101 000101 1 ----------------- 00000000000000 100 <--- остаток (3 бита). Алгоритм деления на этом останавливается, так как дивиденд равен нулю.
Поскольку крайний левый бит делителя обнулял каждый входной бит, которого он касался, когда этот процесс завершается, единственными битами во входной строке, которые могут быть отличными от нуля, являются n битов в правом конце строки. Эти п биты представляют собой остаток от шага деления, а также будут значением функции CRC (если только выбранная спецификация CRC не требует некоторой постобработки).
Достоверность полученного сообщения можно легко проверить, снова выполнив вышеуказанный расчет, на этот раз с добавленным контрольным значением вместо нулей. Остаток должен быть равен нулю, если нет обнаруживаемых ошибок.
11010011101100 100 <--- ввод с контрольным значением 1011 <--- делитель 01100011101100 100 <--- результат 1011 <--- делитель ... 00111011101100 100 ...... 00000000001110 100 101100000000000101 100101 1 ------ ------------ 00000000000000 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 = initial_filler * (len(polynomial_bitstring) - 1) input_padded_array = список(input_bitstring + initial_padding) пока '1' в input_padded_array[:len_input]: cur_shift = input_padded_array.индекс('1') за я в классифицировать(len(polynomial_bitstring)): input_padded_array[cur_shift + я] = ул.(int(polynomial_bitstring[я] != input_padded_array[cur_shift + я])) возвращаться ''.присоединиться(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 = список(input_bitstring + initial_padding) пока '1' в input_padded_array[:len_input]: cur_shift = input_padded_array.индекс('1') за я в классифицировать(len(polynomial_bitstring)): input_padded_array[cur_shift + я] = ул.(int(polynomial_bitstring[я] != input_padded_array[cur_shift + я])) возвращаться ('1' нет в ''.присоединиться(input_padded_array)[len_input:])
>>> crc_check('11010011101100','1011','100')Истинный>>> crc_remainder('11010011101100','1011','0')'100'
CRC-32 алгоритм
Это практический алгоритм для варианта CRC-32.[7] CRCTable - это мемоизация вычисления, который пришлось бы повторить для каждого байта сообщения (Вычисление циклических проверок избыточности § Многобитовые вычисления ).
Функция CRC32 Вход: данные: байты // Массив байтов Выход: crc32: UInt32 // 32-битное беззнаковое значение crc-32
// Инициализируем crc-32 начальным значениемcrc32 ← 0xFFFFFFFF
для каждого байт в данные делать nLookupIndex ← (crc32 xor byte) и 0xFF; crc32 ← (crc32 shr 8) xor CRCTable [nLookupIndex] // CRCTable - это массив из 256 32-битных констант
// Завершаем значение CRC-32, инвертируя все битыcrc32 ← crc32 xor 0xFFFFFFFFвозвращаться crc32
Математика
Математический анализ этого процесса, подобного делению, показывает, как выбрать делитель, который гарантирует хорошие свойства обнаружения ошибок. В этом анализе цифры битовых строк принимаются как коэффициенты многочлена от некоторой переменной Икс- коэффициенты, являющиеся элементами конечного поля GF (2), вместо более привычных чисел. Набор двоичных многочленов представляет собой математическую звенеть.
Разработка многочленов
Выбор полинома генератора является наиболее важной частью реализации алгоритма CRC. Полином должен быть выбран, чтобы максимизировать возможности обнаружения ошибок при минимизации общей вероятности столкновения.
Наиболее важным атрибутом полинома является его длина (наибольшая степень (показатель) +1 любого члена в полиноме) из-за его прямого влияния на длину вычисляемого контрольного значения.
Наиболее часто используемые полиномиальные длины:
- 9 бит (CRC-8)
- 17 бит (CRC-16)
- 33 бита (CRC-32)
- 65 бит (CRC-64)
CRC называется п-bit CRC, когда его контрольное значение п-биты. Для данного п, возможно несколько CRC, каждый со своим полиномом. Такой многочлен имеет высшую степень п, и поэтому п + 1 слагаемые (длина многочлена п + 1). Остаток имеет длину п. CRC имеет имя в форме CRC-п-XXX.
Дизайн полинома CRC зависит от максимальной общей длины блока, который должен быть защищен (данные + биты CRC), желаемых функций защиты от ошибок и типа ресурсов для реализации CRC, а также желаемой производительности. Распространенное заблуждение состоит в том, что "лучшие" полиномы CRC выводятся либо из неприводимые многочлены или неприводимые многочлены, умноженные на множитель1 + Икс, что добавляет к коду возможность обнаруживать все ошибки, влияющие на нечетное количество бит.[8] В действительности все описанные выше факторы должны входить в выбор полинома и могут привести к приводимому полиному. Однако выбор приводимого многочлена приведет к определенной доле пропущенных ошибок из-за того, что фактор-кольцо имеет делители нуля.
Преимущество выбора примитивный многочлен поскольку генератор для кода CRC заключается в том, что результирующий код имеет максимальную общую длину блока в том смысле, что все 1-битные ошибки в пределах этой длины блока имеют разные остатки (также называемые синдромы ) и, следовательно, поскольку остаток является линейной функцией блока, код может обнаруживать все 2-битные ошибки в пределах этой длины блока. Если - степень полинома примитивного образующего, то максимальная общая длина блока равна , а соответствующий код может обнаруживать любые однобитовые или двухбитовые ошибки.[9] Мы можем исправить эту ситуацию. Если использовать порождающий полином , куда примитивный многочлен степени , то максимальная общая длина блока равна , а код способен обнаруживать одиночные, двойные, тройные и любое нечетное количество ошибок.
Полином который допускает, что тогда могут быть выбраны другие факторизации, чтобы сбалансировать максимальную общую длину блока с желаемой мощностью обнаружения ошибок. В Коды BCH являются мощным классом таких многочленов. Они включают два приведенных выше примера. Независимо от свойств приводимости порождающего полинома степенир, если он включает термин "+1", код сможет обнаруживать шаблоны ошибок, которые ограничены окном р смежные биты. Эти шаблоны называются «пакетами ошибок».
Технические характеристики
Концепция CRC как кода обнаружения ошибок усложняется, когда разработчик или комитет по стандартам используют его для разработки практической системы. Вот некоторые из сложностей:
- Иногда реализация префиксы фиксированного битового шаблона в проверяемый битовый поток. Это полезно, когда ошибки синхронизации могут вставлять 0-биты перед сообщением, изменение, которое в противном случае оставило бы значение проверки неизменным.
- Обычно, но не всегда, реализация добавляет п 0-биты (п размер CRC) к потоку битов, который необходимо проверить до того, как произойдет полиномиальное деление. Такое добавление явно демонстрируется в Вычисление CRC статья. Это удобно тем, что остаток от исходного потока битов с добавленным контрольным значением равен нулю, поэтому CRC можно проверить, просто выполнив полиномиальное деление полученного потока битов и сравнив остаток с нулем. Благодаря ассоциативным и коммутативным свойствам операции «исключающее ИЛИ» практические реализации, управляемые таблицами, могут получить результат, численно эквивалентный добавлению нулей без явного добавления нулей, с помощью эквивалента,[8] более быстрый алгоритм, который объединяет поток битов сообщения с потоком, смещенным из регистра CRC.
- Иногда реализация исключающее ИЛИ фиксированный битовый шаблон в остаток от полиномиального деления.
- Битовый порядок: В некоторых схемах младший бит каждого байта рассматривается как «первый», что во время полиномиального деления означает «крайний левый», что противоречит нашему обычному пониманию «младшего разряда». Это соглашение имеет смысл, когда Серийный порт передачи проходят аппаратную проверку CRC, потому что некоторые широко распространенные соглашения о передаче через последовательный порт сначала передают байты младшего разряда.
- Порядок байтов: При использовании многобайтовых CRC может возникнуть путаница в отношении того, является ли байт, переданный первым (или сохраненный в байте с наименьшим адресом памяти), младшим (LSB) или старшим (MSB) байтом. Например, некоторые 16-битные схемы CRC меняют местами байты контрольного значения.
- Пропуск старшего бита полинома делителя: поскольку старший бит всегда равен 1, и поскольку п-bit CRC должен быть определен (п + 1) -битовый делитель, который переливается ан п-кусочек регистр, некоторые авторы считают, что нет необходимости упоминать старший бит делителя.
- Пропуск младшего бита полинома делителя: поскольку младший бит всегда равен 1, такие авторы, как Филип Купман, представляют полиномы с неповрежденным старшим битом, но без младшего бита ( или 1 семестр). Это соглашение кодирует многочлен вместе со степенью в одно целое число.
Эти сложности означают, что есть три общих способа выразить многочлен как целое число: первые два, которые являются зеркальными изображениями в двоичном формате, представляют собой константы, найденные в коде; третий - номер, найденный в бумагах Купмана. В каждом случае один член опускается. Итак, многочлен можно записать как:
- 0x3 = 0b0011, представляющий (MSB-первый код)
- 0xC = 0b1100, представляющий (LSB-первый код)
- 0x9 = 0b1001, представляющий (Обозначения Купмана)
В таблице ниже они показаны как:
Имя | Нормальный | Обратный | Обратный взаимный |
---|---|---|---|
CRC-4 | 0x3 | 0xC | 0x9 |
Запутывание
CRC в проприетарных протоколах могут быть запутанный с использованием нетривиального начального значения и финального XOR, но эти методы не добавляют криптографической стойкости алгоритму и могут быть реконструированный используя простые методы.[10]
Стандарты и общее использование
Многочисленные разновидности циклических проверок избыточности были включены в технические стандарты. Ни в коем случае не один алгоритм или по одной каждой степени подходит для всех целей; Купман и Чакраварти рекомендуют выбирать полином в соответствии с требованиями приложения и ожидаемым распределением длин сообщений.[11] Количество используемых различных CRC сбивает разработчиков с толку, и авторы стремились исправить эту ситуацию.[8] Сообщается о трех полиномах для CRC-12,[11] двадцать два противоречащих друг другу определения CRC-16 и семь - CRC-32.[12]
Обычно применяемые полиномы не самые эффективные из возможных. С 1993 года Купман, Кастаньоли и другие исследовали пространство многочленов размером от 3 до 64 бит,[11][13][14][15] найти примеры, которые имеют гораздо лучшую производительность (с точки зрения Расстояние Хэмминга для данного размера сообщения), чем полиномы более ранних протоколов, и опубликовать лучшие из них с целью улучшения способности обнаружения ошибок будущих стандартов.[14] Особенно, iSCSI и SCTP приняли один из результатов этого исследования - полином CRC-32C (Кастаньоли).
Дизайн 32-разрядного многочлена CRC-32-IEEE, наиболее часто используемого органами стандартизации, стал результатом совместных усилий по созданию Римская лаборатория и Отдел электронных систем ВВС Джозефом Хаммондом, Джеймсом Брауном и Шьян-Шианг Лю из Технологический институт Джорджии и Кеннет Брейер из Mitre Corporation. Самые ранние известные появления 32-битного полинома были в их публикациях 1975 года: Технический отчет 2956 Брайера для Mitre, опубликованный в январе и выпущенный для публичного распространения через DTIC в августе,[16] и отчет Хаммонда, Брауна и Лю для Римской лаборатории, опубликованный в мае.[17] Оба отчета содержали материалы другой команды. В декабре 1975 года Брейер и Хаммонд представили свою работу в докладе на Национальной конференции по телекоммуникациям IEEE: полином IEEE CRC-32 - это порождающий полином Код Хэмминга и был выбран за способность обнаруживать ошибки.[18] Даже в этом случае полином CRC-32C Кастаньоли, используемый в iSCSI или SCTP, соответствует своей производительности для сообщений от 58 бит до 131 кбит и превосходит его в нескольких диапазонах размеров, включая два наиболее распространенных размера интернет-пакетов.[14] В ITU-T G.hn стандарт также использует CRC-32C для обнаружения ошибок в полезной нагрузке (хотя он использует CRC-16-CCITT для Заголовки PHY ).
Вычисление CRC32C реализовано аппаратно как операция (CRC32
) из SSE4.2 набор команд, впервые представленный в Intel процессоры Nehalem микроархитектура. CRC32C операции также определены в AArch64.
Полиномиальные представления циклических проверок избыточности
В таблице ниже перечислены только многочлены различных используемых алгоритмов. Варианты конкретного протокола могут налагать преинверсию, пост-инверсию и обратный порядок битов, как описано выше. Например, CRC32, используемый в Gzip и Bzip2, использует один и тот же многочлен, но Gzip использует обратный порядок битов, а Bzip2 - нет.[12]Обратите внимание, что полиномы четности в GF (2) со степенью больше 1 никогда не бывают примитивными. Полином четности, помеченный как примитивный в этой таблице, представляет собой примитивный полином, умноженный на .
Имя | Использует | Полиномиальные представления | Паритет[19] | Примитивный[20] | Максимальные биты полезной нагрузки на Расстояние Хэмминга[21][14][20] | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Нормальный | Обратный | Взаимный | Обратный взаимный | ≥ 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2[22] | ||||
CRC-1 | большая часть оборудования; также известный как бит четности | 0x1 | 0x1 | 0x1 | 0x1 | четное | ||||||||||||||||
CRC-3-GSM | мобильные сети[23] | 0x3 | 0x6 | 0x5 | 0x5 | странный | да [24] | – | – | – | – | – | – | – | – | – | – | – | – | – | 4 | ∞ |
CRC-4-ITU | ITU-T G.704, п. 12 | 0x3 | 0xC | 0x9 | 0x9 | странный | ||||||||||||||||
CRC-5-EPC | RFID поколения 2[25] | 0x09 | 0x12 | 0x05 | 0x14 | странный | ||||||||||||||||
CRC-5-ITU | ITU-T G.704, п. 9 | 0x15 | 0x15 | 0x0B | 0x1A | четное | ||||||||||||||||
CRC-5-USB | USB токен-пакеты | 0x05 | 0x14 | 0x09 | 0x12 | странный | ||||||||||||||||
CRC-6-CDMA2000 -А | мобильные сети[26] | 0x27 | 0x39 | 0x33 | 0x33 | странный | ||||||||||||||||
CRC-6-CDMA2000 -B | мобильные сети[26] | 0x07 | 0x38 | 0x31 | 0x23 | четное | ||||||||||||||||
CRC-6-DARC | Радиоканал данных[27] | 0x19 | 0x26 | 0x0D | 0x2C | четное | ||||||||||||||||
CRC-6-GSM | мобильные сети[23] | 0x2F | 0x3D | 0x3B | 0x37 | четное | да [28] | – | – | – | – | – | – | – | – | – | – | 1 | 1 | 25 | 25 | ∞ |
CRC-6-ITU | ITU-T G.704, п. 3 | 0x03 | 0x30 | 0x21 | 0x21 | странный | ||||||||||||||||
CRC-7 | телекоммуникационные системы, ITU-T G.707, ITU-T G.832, MMC, SD | 0x09 | 0x48 | 0x11 | 0x44 | странный | ||||||||||||||||
CRC-7-MVB | Сеть связи поездов, IEC 60870-5[29] | 0x65 | 0x53 | 0x27 | 0x72 | странный | ||||||||||||||||
CRC-8 | DVB-S2[30] | 0xD5 | 0xAB | 0x57 | 0xEA[11] | четное | нет [31] | – | – | – | – | – | – | – | – | – | – | 2 | 2 | 85 | 85 | ∞ |
CRC-8-АВТОСАР | автомобильная интеграция,[32] OpenSafety[33] | 0x2F | 0xF4 | 0xE9 | 0x97[11] | четное | да [31] | – | – | – | – | – | – | – | – | – | – | 3 | 3 | 119 | 119 | ∞ |
CRC-8-Bluetooth | беспроводная связь[34] | 0xA7 | 0xE5 | 0xCB | 0xD3 | четное | ||||||||||||||||
CRC-8-CCITT | ITU-T I.432.1 (02/99); Банкомат HEC, ISDN HEC и разграничение клеток, SMBus PEC | 0x07 | 0xE0 | 0xC1 | 0x83 | четное | ||||||||||||||||
CRC-8-Даллас /Максим | 1-Wire автобус[35] | 0x31 | 0x8C | 0x19 | 0x98 | четное | ||||||||||||||||
CRC-8-DARC | Радиоканал данных[27] | 0x39 | 0x9C | 0x39 | 0x9C | странный | ||||||||||||||||
CRC-8-GSM -B | мобильные сети[23] | 0x49 | 0x92 | 0x25 | 0xA4 | четное | ||||||||||||||||
CRC-8-SAE J1850 | AES3; OBD | 0x1D | 0xB8 | 0x71 | 0x8E | странный | ||||||||||||||||
CRC-8-WCDMA | мобильные сети[26][36] | 0x9B | 0xD9 | 0xB3 | 0xCD[11] | четное | ||||||||||||||||
CRC-10 | Банкомат; ITU-T I.610 | 0x233 | 0x331 | 0x263 | 0x319 | четное | ||||||||||||||||
CRC-10-CDMA2000 | мобильные сети[26] | 0x3D9 | 0x26F | 0x0DF | 0x3EC | четное | ||||||||||||||||
CRC-10-GSM | мобильные сети[23] | 0x175 | 0x2BA | 0x175 | 0x2BA | странный | ||||||||||||||||
CRC-11 | FlexRay[37] | 0x385 | 0x50E | 0x21D | 0x5C2 | четное | ||||||||||||||||
CRC-12 | телекоммуникационные системы[38][39] | 0x80F | 0xF01 | 0xE03 | 0xC07[11] | четное | ||||||||||||||||
CRC-12-CDMA2000 | мобильные сети[26] | 0xF13 | 0xC8F | 0x91F | 0xF89 | четное | ||||||||||||||||
CRC-12-GSM | мобильные сети[23] | 0xD31 | 0x8CB | 0x197 | 0xE98 | странный | ||||||||||||||||
CRC-13-BBC | Сигнал времени, Радиотелевизор[40][41] | 0x1CF5 | 0x15E7 | 0x0BCF | 0x1E7A | четное | ||||||||||||||||
CRC-14-DARC | Радиоканал данных[27] | 0x0805 | 0x2804 | 0x1009 | 0x2402 | четное | ||||||||||||||||
CRC-14-GSM | мобильные сети[23] | 0x202D | 0x2D01 | 0x1A03 | 0x3016 | четное | ||||||||||||||||
CRC-15-МОЖЕТ | 0xC599[42][43] | 0x4CD1 | 0x19A3 | 0x62CC | четное | |||||||||||||||||
CRC-15-MPT1327 | [44] | 0x6815 | 0x540B | 0x2817 | 0x740A | странный | ||||||||||||||||
CRC-16-Chakravarty | Оптимально для полезной нагрузки ≤64 бит[29] | 0x2F15 | 0xA8F4 | 0x51E9 | 0x978A | странный | ||||||||||||||||
CRC-16-ARINC | ACARS Приложения[45] | 0xA02B | 0xD405 | 0xA80B | 0xD015 | странный | ||||||||||||||||
CRC-16-CCITT | X.25, V.41, HDLC FCS, XMODEM, Bluetooth, PACTOR, SD, DigRF, многие другие; известный как CRC-CCITT | 0x1021 | 0x8408 | 0x811 | 0x8810[11] | четное | ||||||||||||||||
CRC-16-CDMA2000 | мобильные сети[26] | 0xC867 | 0xE613 | 0xCC27 | 0xE433 | странный | ||||||||||||||||
CRC-16-DECT | беспроводные телефоны[46] | 0x0589 | 0x91A0 | 0x2341 | 0x82C4 | четное | ||||||||||||||||
CRC-16-T10 -DIF | SCSI DIF | 0x8BB7[47] | 0xEDD1 | 0xDBA3 | 0xC5DB | странный | ||||||||||||||||
CRC-16-DNP | DNP, IEC 870, M-автобус | 0x3D65 | 0xA6BC | 0x4D79 | 0x9EB2 | четное | ||||||||||||||||
CRC-16-IBM | Bisync, Modbus, USB, ANSI X3.28, SIA DC-07, многие другие; также известный как CRC-16 и CRC-16-ANSI | 0x8005 | 0xA001 | 0x4003 | 0xC002 | четное | ||||||||||||||||
CRC-16-OpenSafety -А | полевая шина безопасности[33] | 0x5935 | 0xAC9A | 0x5935 | 0xAC9A[11] | странный | ||||||||||||||||
CRC-16-OpenSafety -B | полевая шина безопасности[33] | 0x755B | 0xDAAE | 0xB55D | 0xBAAD[11] | странный | ||||||||||||||||
CRC-16-Profibus | сети fieldbus[48] | 0x1DCF | 0xF3B8 | 0xE771 | 0x8EE7 | странный | ||||||||||||||||
Флетчер-16 | Используется в Адлер-32 Контрольные суммы A и B | Часто путают с CRC, но на самом деле это контрольная сумма; видеть Контрольная сумма Флетчера | ||||||||||||||||||||
CRC-17-CAN | CAN FD[49] | 0x1685B | 0x1B42D | 0x1685B | 0x1B42D | четное | ||||||||||||||||
CRC-21-CAN | CAN FD[49] | 0x102899 | 0x132281 | 0x064503 | 0x18144C | четное | ||||||||||||||||
CRC-24 | FlexRay[37] | 0x5D6DCB | 0xD3B6BA | 0xA76D75 | 0xAEB6E5 | четное | ||||||||||||||||
CRC-24-Радикс-64 | OpenPGP, RTCM 104v3 | 0x864CFB | 0xDF3261 | 0xBE64C3 | 0xC3267D | четное | ||||||||||||||||
CRC-24-WCDMA | Используется в ОС-9 ОСРВ. Остаток = 0x800FE3.[50] | 0x800063 | 0xC60001 | 0x8C0003 | 0xC00031 | четное | да[51] | – | – | – | – | – | – | – | – | – | – | 4 | 4 | 8388583 | 8388583 | ∞ |
CRC-30 | CDMA | 0x2030B9C7 | 0x38E74301 | 0x31CE8603 | 0x30185CE3 | четное | ||||||||||||||||
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,[52] PNG,[53] ZMODEM, многие другие | 0x04C11DB7 | 0xEDB88320 | 0xDB710641 | 0x82608EDB[14] | странный | да | – | 10 | – | – | 12 | 21 | 34 | 57 | 91 | 171 | 268 | 2974 | 91607 | 4294967263 | ∞ |
CRC-32C (Кастаньоли) | iSCSI, SCTP, G.hn полезная нагрузка SSE4.2, Btrfs, ext4, Ceph | 0x1EDC6F41 | 0x82F63B78 | 0x05EC76F1 | 0x8F6E37A0[14] | четное | да | 6 | – | 8 | – | 20 | – | 47 | – | 177 | – | 5243 | – | 2147483615 | – | ∞ |
CRC-32K (Купман {1,3,28}) | Отлично при длине кадра Ethernet, низкая производительность при работе с длинными файлами | 0x741B8CD7 | 0xEB31D82E | 0xD663B05D | 0xBA0DC66B[14] | четное | нет | 2 | – | 4 | – | 16 | – | 18 | – | 152 | – | 16360 | – | 114663 | – | ∞ |
CRC-32K2 (Купман {1,1,30}) | Отлично при длине кадра Ethernet, низкая производительность при работе с длинными файлами | 0x32583499 | 0x992C1A4C | 0x32583499 | 0x992C1A4C[14] | четное | нет | – | – | 3 | – | 16 | – | 26 | – | 134 | – | 32738 | – | 65506 | – | ∞ |
CRC-32Q | авиация; AIXM[54] | 0x814141AB | 0xD5828281 | 0xAB050503 | 0xC0A0A0D5 | четное | ||||||||||||||||
Адлер-32 | Часто путают с CRC, но на самом деле это контрольная сумма; видеть Адлер-32 | |||||||||||||||||||||
CRC-40-GSM | Канал управления GSM[55][56][57] | 0x0004820009 | 0x9000412000 | 0x2000824001 | 0x8002410004 | четное | ||||||||||||||||
CRC-64-ECMA | ECMA-182 п. 51, XZ Utils | 0x42F0E1EBA9EA3693 | 0xC96C5795D7870F42 | 0x92D8AF2BAF0E1E85 | 0xA17870F5D4F51B49 | четное | ||||||||||||||||
CRC-64-ISO | ISO 3309 (HDLC ), Swiss-Prot /TrEMBL; считается слабым для хеширования[58] | 0x000000000000001B | 0xD800000000000000 | 0xB000000000000001 | 0x800000000000000D | странный | ||||||||||||||||
Реализации
- Реализация CRC32 в Gnuradio;
- Код класса C для вычисления контрольной суммы CRC с множеством различных CRC на выбор
Каталоги CRC
Смотрите также
- Математика циклических проверок избыточности
- Вычисление циклических проверок избыточности
- Список хеш-функций
- Список алгоритмов контрольной суммы
- Информационная безопасность
- Простая проверка файла
- LRC
Рекомендации
- ^ «Алгоритм исправления ошибок циклических проверок избыточности». drdobbs.com. Архивировано из оригинал 20 июля 2017 г.. Получено 28 июн 2017.
- ^ Peterson, W. W .; Браун, Д. Т. (январь 1961 г.). «Циклические коды для обнаружения ошибок». Труды IRE. 49 (1): 228–235. Дои:10.1109 / JRPROC.1961.287814. S2CID 51666741.
- ^ Риттер, Терри (февраль 1986). "Великая тайна КПР". Журнал доктора Добба. 11 (2): 26–34, 76–83. Получено 21 мая 2009.
- ^ Стигге, Мартин; Плётц, Хенрик; Мюллер, Вольф; Редлих, Йенс-Петер (май 2006 г.). «Обращение CRC вспять - теория и практика» (PDF). Берлин: Университет Гумбольдта в Берлине: 17. Архивировано из оригинал (PDF) 19 июля 2011 г.. Получено 4 февраля 2011.
Представленные методы предлагают очень простой и эффективный способ изменить ваши данные, чтобы они вычисляли CRC, который вы хотите или, по крайней мере, знаете заранее.
Цитировать журнал требует| журнал =
(помощь) - ^ «Дизайн алгоритма - Почему CRC называется линейным?». Обмен криптографическим стеком. Получено 5 мая 2019.
- ^ Кам-Вингет, Нэнси; Хаусли, Расс; Вагнер, Давид; Уокер, Джесси (май 2003 г.). «Недостатки безопасности в протоколах передачи данных 802.11» (PDF). Коммуникации ACM. 46 (5): 35–39. CiteSeerX 10.1.1.14.8775. Дои:10.1145/769800.769823. S2CID 3132937.
- ^ «[MS-ABS]: 32-битный алгоритм CRC». msdn.microsoft.com.
- ^ а б c Уильямс, Росс Н. (24 сентября 1996 г.). "Безболезненное руководство по алгоритмам обнаружения ошибок CRC V3.0". Архивировано из оригинал 2 апреля 2018 г.. Получено 23 мая 2019.
- ^ Нажмите, WH; Теукольский С.А.; Феттерлинг, штат Вашингтон; Фланнери, ВР (2007). «Раздел 22.4 Циклическое резервирование и другие контрольные суммы». Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк: Издательство Кембриджского университета. ISBN 978-0-521-88068-8.
- ^ Юинг, Грегори С. (март 2010 г.). "Обратное проектирование алгоритма CRC". Крайстчерч: Кентерберийский университет. Получено 26 июля 2011.
- ^ а б c d е ж грамм час я j Купман, Филипп; Чакраварти, Тридиб (июнь 2004 г.). Выбор полинома циклического избыточного кода (CRC) для встроенных сетей (PDF). Международная конференция по надежным системам и сетям. С. 145–154. CiteSeerX 10.1.1.648.9080. Дои:10.1109 / DSN.2004.1311885. ISBN 978-0-7695-2052-0. S2CID 793862. Получено 14 января 2011.
- ^ а б Кук, Грег (15 августа 2020 г.). «Каталог параметризованных алгоритмов CRC». Получено 18 сентября 2020.
- ^ Castagnoli, G .; Bräuer, S .; Херрманн, М. (июнь 1993 г.). «Оптимизация циклических кодов проверки избыточности с 24 и 32 битами четности». Транзакции IEEE по коммуникациям. 41 (6): 883–892. Дои:10.1109/26.231911.
- ^ а б c d е ж грамм час Купман, Филипп (июль 2002 г.). «32-битные циклические коды избыточности для Интернет-приложений». Труды Международной конференции по надежным системам и сетям (PDF). Международная конференция по надежным системам и сетям. С. 459–468. CiteSeerX 10.1.1.11.8323. Дои:10.1109 / DSN.2002.1028931. ISBN 978-0-7695-1597-7. S2CID 14775606. Получено 14 января 2011.
- ^ Купман, Филипп (21 января 2016 г.). «Лучшие полиномы CRC». Питтсбург: Университет Карнеги-Меллона. Получено 26 января 2016.
- ^ Брейер, Кеннет (август 1975). «Оценка полиномов 32 градусов при обнаружении ошибок на шаблонах ошибок SATIN IV Autovon». Национальная служба технической информации: 74. Получено 3 февраля 2011. Цитировать журнал требует
| журнал =
(помощь)[постоянная мертвая ссылка ] - ^ Хаммонд, Джозеф Л., младший; Браун, Джеймс Э .; Лю, Шянь-Шианг (1975). «Разработка модели ошибок передачи и модели контроля ошибок» (PDF). Технический отчет NASA Sti / Recon N (опубликовано в мае 1975 г.). 76: 74. Bibcode:1975STIN ... 7615344H. Получено 7 июля 2012.
- ^ Брейер, Кеннет; Хаммонд, Джозеф Л. младший (декабрь 1975 г.). «Оценка работы полинома обнаружения ошибок на канале АВТОВОН». Запись конференции. Национальная конференция по телекоммуникациям IEEE, Новый Орлеан, штат Луизиана. 1. Нью-Йорк: Институт инженеров по электротехнике и электронике. С. 8–21–8–25. Bibcode:1975нтк ..... 1 .... 8Б.
- ^ CRC с четностью обнаруживают любое нечетное количество битовых ошибок за счет меньшего расстояния Хэмминга для длинных полезных данных. Обратите внимание, что четность вычисляется по всему полиному генератора, включая подразумеваемую 1 в начале или в конце. Например, полное представление CRC-1 - 0x3, которое имеет два бита 1. Таким образом, его соотношение четное.
- ^ а б "32-битный зоопарк CRC". users.ece.cmu.edu.
- ^ Полезная нагрузка означает длину без учета поля CRC. Расстояние Хэмминга d Значит это d - могут быть обнаружены 1 битовые ошибки и ⌊ (d - 1) / 2⌋ битовые ошибки могут быть исправлены
- ^ всегда достигается для произвольно длинных сообщений
- ^ а б c d е ж ETSI TS 100 909 (PDF). V8.9.0. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2005 г.. Получено 21 октября 2016.
- ^ "3-битный зоопарк CRC". users.ece.cmu.edu.
- ^ Протокол УВЧ RFID поколения 2 класса 1 (PDF). 1.2.0. EPCglobal. 23 октября 2008 г. с. 35 год. Получено 4 июля 2012. (Таблица 6.12)
- ^ а б c d е ж Стандарт физического уровня для систем с расширенным спектром cdma2000 (PDF). Редакция D версии 2.0. Проект партнерства третьего поколения 2. Октябрь 2005 г., стр. 2–89–2–92. Архивировано из оригинал (PDF) 16 ноября 2013 г.. Получено 14 октября 2013.
- ^ а б c «11. Стратегия исправления ошибок». ETSI EN 300 751 (PDF). V1.2.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2003. С. 67–8.. Получено 26 января 2016.
- ^ "6-битный зоопарк CRC". users.ece.cmu.edu.
- ^ а б Чакраварти, Тридиб (декабрь 2001 г.). Производительность кодов циклического резервирования для встроенных сетей (PDF) (Тезис). Филип Купман, советник. Питтсбург: Университет Карнеги-Меллона. стр.5, 18. Получено 8 июля 2013.
- ^ «5.1.4 Кодер CRC-8 (только для пакетированных потоков)». EN 302 307 (PDF). V1.3.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Март 2013. с. 17. Получено 29 июля 2016.
- ^ а б "8-битный зоопарк CRC". users.ece.cmu.edu.
- ^ «7.2.1.2 Вычисление 8-битного полинома 0x2F CRC». Спецификация процедур CRC (PDF). 4.2.2. Мюнхен: АВТОСАР. 22 июля 2015. с. 24. Архивировано из оригинал (PDF) 24 июля 2016 г.. Получено 24 июля 2016.
- ^ а б c «5.1.1.8 Поле циклического контроля избыточности (CRC-8 / CRC-16)». Спецификация профиля безопасности openSAFETY: рабочее предложение 304 EPSG. 1.4.0. Берлин: Группа стандартизации Ethernet POWERLINK. 13 марта 2013. с. 42. Архивировано с оригинал 12 августа 2017 г.. Получено 22 июля 2016.
- ^ «B.7.1.1 Генерация HEC». Спецификация системы Bluetooth. 2. Bluetooth SIG. 2 декабря 2014. С. 144–5.. Получено 20 октября 2014.
- ^ Гарри Уитфилд (24 апреля 2001 г.). "XFCN для расчетов циклической проверки избыточности". Архивировано из оригинал 25 мая 2005 г.
- ^ Ричардсон, Эндрю (17 марта 2005 г.). Справочник WCDMA. Кембридж, Великобритания: Издательство Кембриджского университета. п. 223. ISBN 978-0-521-82815-4.
- ^ а б Спецификация протокола FlexRay. 3.0.1. Консорциум Flexray. Октябрь 2010. с. 114. (4.2.8 CRC заголовка (11 бит))
- ^ Перес, А. (1983). «Побайтовые вычисления CRC». IEEE Micro. 3 (3): 40–50. Дои:10.1109 / MM.1983.291120. S2CID 206471618.
- ^ Ramabadran, T.V .; Гайтонде, С.С. (1988). «Учебник по вычислениям CRC». IEEE Micro. 8 (4): 62–75. Дои:10.1109/40.7773. S2CID 10216862.
- ^ http://www.freescale.com/files/microcontrollers/doc/app_note/AN1597.pdf
- ^ Ely, S.R .; Райт, Д.Т. (март 1982 г.). L.F. Radio-Data: спецификация экспериментальных передач BBC 1982 г. (PDF). Исследовательский отдел инженерного отдела Британской радиовещательной корпорации. п. 9. Получено 11 октября 2013.
- ^ Cyclic Redundancy Check (CRC): Техническое описание компонентов PSoC Creator ™. Cypress Semiconductor. 20 февраля 2013. с. 4. Получено 26 января 2016.
- ^ «Циклический контроль избыточности (CRC) в кадрах CAN». CAN в автоматизации. Получено 26 января 2016.
- ^ «3.2.3 Кодирование и проверка ошибок». Стандарт сигнализации для транкинговых частных наземных мобильных радиосистем (MPT 1327) (PDF) (3-е изд.). Ofcom. Июнь 1997. с. 3. Получено 16 июля 2012.
- ^ Реманн, Альберт; Местре, Хосе Д. (февраль 1995 г.). "Предварительный отчет об испытаниях системы авиационной связи и передачи данных по воздуху и земле (ACARS)" (PDF). Технический центр Федерального авиационного управления: 5. Получено 7 июля 2012. Цитировать журнал требует
| журнал =
(помощь) - ^ «6.2.5 Контроль ошибок». ETSI EN 300 175-3 (PDF). V2.5.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Август 2013. С. 99, 101.. Получено 26 января 2016.
- ^ Талер, Пат (28 августа 2003 г.). «Выбор 16-битного полинома CRC» (PDF). INCITS T10. Получено 11 августа 2009. Цитировать журнал требует
| журнал =
(помощь) - ^ «8.8.4 Проверить октет (FCS)». Нормативные части спецификации PROFIBUS (PDF). 1.0. 9. Profibus International. Март 1998. с. 906. Архивировано с оригинал (PDF) 16 ноября 2008 г.. Получено 9 июля 2016.
- ^ а б CAN с гибкой спецификацией скорости передачи данных (PDF). 1.0. Роберт Бош ГмбХ. 17 апреля 2012. с. 13. Архивировано из оригинал (PDF) 22 августа 2013 г. (3.2.1 КАДР ДАННЫХ)
- ^ "Руководство программиста операционной системы OS-9". www.roug.org.
- ^ Филип П. Купман (20 мая 2018 г.). "24-битный зоопарк CRC". users.ece.cmu.edu.
- ^ "cksum". pubs.opengroup.org.
- ^ Бутелл, Томас; Рандерс-Персон, Гленн; и другие. (14 июля 1998 г.). "Спецификация PNG (переносимая сетевая графика), версия 1.2". Libpng.org. Получено 3 февраля 2011.
- ^ Праймер AIXM (PDF). 4.5. Европейская организация по безопасности аэронавигации. 20 марта 2006 г.. Получено 3 февраля 2019.
- ^ ETSI TS 100 909 версия 8.9.0 (январь 2005 г.), раздел 4.1.2 a
- ^ Гаммель, Берндт М. (31 октября 2005 г.). Документация Matpack: Крипто - Коды. Matpack.de. Получено 21 апреля 2013. (Примечание: MpCRC.html включен в исходный код сжатого программного обеспечения Matpack, в / html / LibDoc / Crypto)
- ^ Геремия, Патрик (апрель 1999). «Вычисление с циклическим контролем избыточности: реализация с использованием TMS320C54x» (PDF) (SPRA530). Техасских инструментов: 5. Получено 4 июля 2012. Цитировать журнал требует
| журнал =
(помощь) - ^ Джонс, Дэвид Т. «Улучшенная 64-битная циклическая проверка с избыточностью для белковых последовательностей» (PDF). Университетский колледж Лондона. Получено 15 декабря 2009. Цитировать журнал требует
| журнал =
(помощь)
дальнейшее чтение
- Уоррен-младший, Генри С. (2013). Хакерское наслаждение (2-е изд.). Эддисон Уэсли – Pearson Education, Inc. ISBN 978-0-321-84268-8.
внешняя ссылка
- Митра, Джубин; Наяк, Тапан (январь 2017 г.). «Реконфигурируемая архитектура CRC 32 с очень высокой пропускной способностью и малой задержкой VLSI (FPGA)». Интеграция, Журнал СБИС. 56: 1–14. Дои:10.1016 / j.vlsi.2016.09.005.
- Циклические проверки избыточности, MathPages, обзор обнаружения ошибок различных многочленов
- Уильямс, Росс (1993). «Безболезненное руководство по алгоритмам обнаружения ошибок CRC». Архивировано из оригинал 3 сентября 2011 г.. Получено 15 августа 2011.
- Блэк, Ричард (1994). «Быстрая проверка CRC32 в программном обеспечении». Синяя книга. Группа системных исследований, Компьютерная лаборатория, Кембриджский университет. Алгоритм 4 использовался в Linux и Bzip2.
- Kounavis, M .; Берри, Ф. (2005). «Системный подход к созданию высокопроизводительных программных генераторов CRC» (PDF). Intel., Алгоритмы нарезки на 4 и на 8 единиц
- Ковальк, В. (август 2006 г.). «CRC Cyclic Redundancy Check, анализ и исправление ошибок» (PDF). Universität Oldenburg. - Битовые фильтры
- Уоррен, Генри С., мл. "Циклическая проверка избыточности" (PDF). Хакерское наслаждение. Архивировано из оригинал (PDF) 3 мая 2015 г. - теория, практика, оборудование и программное обеспечение с упором на CRC-32.
- Обратное проектирование алгоритма CRC
- Повар, Грег. «Каталог параметризованных алгоритмов CRC». CRC RevEng.
- Купман, Фил. «Блог: Checksum and CRC Central». - включает ссылки на PDF-файлы с 16- и 32-битной CRC Расстояния Хэмминга
- Купман, Филипп; Дрисколл, Кевин; Холл, Брендан (март 2015 г.). «Циклический код избыточности и алгоритмы контрольной суммы для обеспечения целостности критически важных данных» (PDF). Федеральная авиационная администрация. DOT / FAA / TC-14/49.