Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Проверка циклическим избыточным кодом ( CRC ) является код ошибки обнаружения обычно используются в цифровых сетей и запоминающих устройств для обнаружения случайного изменения исходных данных. К блокам данных, поступающим в эти системы, прикрепляется короткое контрольное значение , основанное на остатке от полиномиального деления их содержимого. При извлечении расчет повторяется, и, если контрольные значения не совпадают, можно предпринять корректирующие действия против повреждения данных. CRC могут использоваться для исправления ошибок (см. Битовые фильтры ). [1]

CRC называются так потому, что значение проверки (проверки данных) является избыточным (оно расширяет сообщение без добавления информации ), а алгоритм основан на циклических кодах . CRC популярны, потому что их легко реализовать в двоичном оборудовании , легко анализировать математически и особенно хорошо при обнаружении общих ошибок, вызванных шумом в каналах передачи. Поскольку значение проверки имеет фиксированную длину, функция, которая его генерирует, иногда используется как хеш-функция .

Введение [ править ]

CRC основаны на теории циклических кодов с исправлением ошибок . Использование систематических циклических кодов, которые кодируют сообщения путем добавления контрольного значения фиксированной длины, с целью обнаружения ошибок в сетях связи, было впервые предложено У. Уэсли Петерсоном в 1961 году. [2] Циклические коды не только просты в использовании. реализуются, но имеют то преимущество, что они особенно хорошо подходят для обнаружения пакетных ошибок : непрерывных последовательностей ошибочных символов данных в сообщениях. Это важно, поскольку пакетные ошибки являются обычными ошибками передачи во многих каналах связи , включая магнитные и оптические устройства хранения. Обычно n-битовая CRC, применяемая к блоку данных произвольной длины, обнаружит любой одиночный пакет ошибок длиной не более n бит, а доля всех более длинных пакетов ошибок, которые он обнаружит, будет (1-2 - n ) .

Спецификация кода CRC требует определения так называемого порождающего полинома . Этот многочлен становится делителем в полиномиальном делении в столбик , при котором сообщение рассматривается как делимое, в котором частное отбрасывается, а остаток становится результатом. Важное предостережение заключается в том, что коэффициенты полинома вычисляются в соответствии с арифметикой конечного поля , поэтому операцию сложения всегда можно выполнять поразрядно-параллельно (нет переноса между цифрами).

На практике все обычно используемые CRC используют поле Галуа из двух элементов, GF (2) . Эти два элемента обычно называются 0 и 1, что соответствует компьютерной архитектуре.

CRC называется n- битным CRC, если его контрольное значение имеет длину n бит. Для заданного n возможно несколько CRC, каждый с различным полиномом. Такой многочлен имеет наивысшую степень n , что означает, что он имеет n + 1 член. Другими словами, многочлен имеет длину n + 1 ; для его кодирования требуется n + 1 бит. Обратите внимание, что в большинстве спецификаций полиномов либо отбрасываются MSB, либо LSB , поскольку они всегда равны 1. CRC и связанный с ним многочлен обычно имеют имя в форме CRC- n -XXX, как в таблице ниже.

Простейшая система обнаружения ошибок, бит четности , на самом деле представляет собой 1-битную CRC: она использует полином генератора  x + 1 (два члена) и имеет имя CRC-1.

Заявление [ править ]

Устройство с поддержкой CRC вычисляет короткую двоичную последовательность фиксированной длины, известную как контрольное значение или CRC , для каждого блока данных, который должен быть отправлен или сохранен, и добавляет его к данным, образуя кодовое слово .

Когда кодовое слово принимается или считывается, устройство либо сравнивает свое контрольное значение с одним, только что вычисленным из блока данных, либо, что эквивалентно, выполняет CRC для всего кодового слова и сравнивает полученное контрольное значение с ожидаемой константой остатка .

Если значения CRC не совпадают, то блок содержит ошибку данных.

Устройство может предпринять корректирующие действия, например перечитать блок или запросить его повторную отправку. В противном случае предполагается, что данные не содержат ошибок (хотя с некоторой небольшой вероятностью они могут содержать необнаруженные ошибки; это заложено в самой природе проверки ошибок). [3]

Целостность данных [ править ]

CRC специально разработаны для защиты от распространенных типов ошибок в каналах связи, где они могут обеспечить быструю и разумную гарантию целостности доставленных сообщений. Однако они не подходят для защиты от преднамеренного изменения данных.

Во-первых, поскольку нет аутентификации, злоумышленник может отредактировать сообщение и пересчитать CRC без обнаружения подстановки. При хранении вместе с данными CRC и криптографические хеш-функции сами по себе не защищают от преднамеренного изменения данных. Любое приложение, которому требуется защита от таких атак, должно использовать механизмы криптографической аутентификации, такие как коды аутентификации сообщений или цифровые подписи (которые обычно основаны на криптографических хэш- функциях).

Во-вторых, в отличие от криптографических хэш-функций, CRC - это легко обратимая функция, что делает ее непригодной для использования в цифровых подписях. [4]

В-третьих, CRC - это линейная функция со свойством, которое [5]

в результате, даже если CRC шифруются с помощью потокового шифра , который использует XOR в качестве операции комбинирования (или режима из блочного шифра , который эффективно превращает его в потоковом шифр, такие как OFB или CFB), оба сообщений и связанный с ним CRC можно манипулировать без знания ключа шифрования; это был один из хорошо известных недостатков конструкции протокола Wired Equivalent Privacy (WEP). [6]

Вычисление [ править ]

Чтобы вычислить n- битный двоичный CRC, выровняйте биты, представляющие ввод, в строку и поместите ( n + 1 ) -битовый шаблон, представляющий делитель CRC (называемый « полиномом ») под левым концом строки. .

В этом примере мы закодируем 14 бит сообщения с помощью 3-битной CRC с полиномом x 3 + x + 1 . Многочлен записывается в двоичном формате как коэффициенты; многочлен 3-й степени имеет 4 коэффициента ( 1 x 3 + 0 x 2 + 1 x + 1 ). В этом случае коэффициенты равны 1, 0, 1 и 1. Результат вычисления составляет 3 бита.

Начните с сообщения, которое нужно закодировать:

11010011101100

Сначала он дополняется нулями, соответствующими длине битов n CRC. Это сделано для того, чтобы полученное кодовое слово было в систематической форме. Вот первый расчет для вычисления 3-битной CRC:

11010011101100 000 <--- ввод справа, дополненный 3 битами1011 <--- делитель (4 бита) = x³ + x + 1------------------01100011101100 000 <--- результат

Алгоритм воздействует на биты непосредственно над делителем на каждом шаге. Результатом этой итерации является побитовое исключающее ИЛИ полиномиального делителя с битами над ним. Биты не выше делителя просто копируются прямо ниже для этого шага. Затем делитель сдвигается вправо, чтобы выровняться с наивысшим оставшимся 1 битом во входных данных, и процесс повторяется до тех пор, пока делитель не достигнет правого конца входной строки. Вот весь расчет:

11010011101100 000 <--- ввод справа, дополненный 3 битами1011 <--- делитель01100011101100 000 <--- результат (обратите внимание, что первые четыре бита - это XOR с делителем ниже, остальные биты не меняются) 1011 <--- делитель ...00111011101100 000 101100010111101100 000 101100000001101100 000 <--- обратите внимание, что делитель перемещается, чтобы выровняться со следующей 1 в дивиденде (поскольку частное для этого шага было равно нулю) 1011 (другими словами, он не обязательно перемещается на один бит за итерацию)00000000110100 000 101100000000011000 000 101100000000001110 000 101100000000000101 000 101 1-----------------00000000000000 100 <--- остаток (3 бита). Алгоритм деления на этом останавливается, так как дивиденд равен нулю.

Поскольку крайний левый бит делителя обнулял каждый входной бит, которого он касался, когда этот процесс завершается, единственными битами во входной строке, которые могут быть отличными от нуля, являются n битов в правом конце строки. Эти n битов являются остатком от шага деления, а также будут значением функции CRC (если выбранная спецификация CRC не требует некоторой постобработки).

Достоверность полученного сообщения можно легко проверить, снова выполнив вышеуказанный расчет, на этот раз с добавленным контрольным значением вместо нулей. Остаток должен быть равен нулю, если нет обнаруживаемых ошибок.

11010011101100 100 <--- ввод с контрольным значением1011 <--- делитель01100011101100 100 <--- результат 1011 <--- делитель ...00111011101100 100......00000000001110 100 101100000000000101 100 101 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  =  ( len ( polynomial_bitstring )  -  1 )  *  начальный_филлер input_padded_array  =  список ( input_bitstring  +  initial_padding ),  а  «1»  в  input_padded_array [: len_input ]:  cur_shift  =  input_padded_array . index ( '1' )  для  i  в  диапазоне ( len ( polynomial_bitstring )):  input_padded_array [ cur_shift  +  i ] \ =  str ( int ( polynomial_bitstring [я ]  ! =  input_padded_array [ cur_shift  +  i ]))  return  '' . присоединиться ( 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 ),  а  '1'  в  input_padded_array [:len_input ]:  cur_shift  =  input_padded_array . index ( '1' )  для  i  в  диапазоне ( len ( polynomial_bitstring )):  input_padded_array [ cur_shift  +  i ] \ =  str ( int ( polynomial_bitstring [ i ]  ! =  input_padded_array [ cur_shift  +  i ]))  return  ( '1'  не  в  '' .присоединиться ( input_padded_array ) [ len_input :])
>>> crc_remainder ( '11010011101100' ,  '1011' ,  '0' ) '100' >>> crc_check ( '11010011101100' ,  '1011' ,  '100' ) Истина

Алгоритм CRC-32 [ править ]

Это практический алгоритм для варианта CRC CRC-32. [7] CRCTable является мемоизация из расчета , что необходимо будет повторяться для каждого байта сообщения ( Вычисление проверки циклический избыточного кода § многоразрядных вычислений ).

Функция CRC32  Вход: данные: байты  // Массив байтов  Выход: crc32: UInt32  // 32-битное беззнаковое значение CRC-32 
// Инициализация CRC-32 начальным значением crc32 ← 0xFFFFFFFF
для каждого байта в данных do nLookupIndex ← (crc32 xor byte) и 0xFF; crc32 ← (crc32 shr 8) xor CRCTable [nLookupIndex] // CRCTable - это массив из 256 32-битных констант
// Завершить значение CRC-32, инвертируя все битыcrc32 ← crc32 xor 0xFFFFFFFFвернуть crc32

Математика [ править ]

Математический анализ этого процесса, подобного делению, показывает, как выбрать делитель, который гарантирует хорошие свойства обнаружения ошибок. В этом анализе цифры битовых цепочек берутся в качестве коэффициентов многочлена от некоторой переменной x - коэффициентов, которые являются элементами конечного поля GF (2) , вместо более привычных чисел. Набор двоичных многочленов представляет собой математическое кольцо .

Создание многочленов [ править ]

Выбор полинома генератора является наиболее важной частью реализации алгоритма CRC. Полином должен быть выбран, чтобы максимизировать возможности обнаружения ошибок при минимизации общей вероятности столкновения.

Наиболее важным атрибутом полинома является его длина (наибольшая степень (показатель) +1 любого члена в полиноме) из-за его прямого влияния на длину вычисляемого контрольного значения.

Наиболее часто используемые полиномиальные длины:

  • 9 бит (CRC-8)
  • 17 бит (CRC-16)
  • 33 бита (CRC-32)
  • 65 бит (CRC-64)

CRC называется n- битной CRC, если ее контрольное значение равно n- битам. Для заданного n возможно несколько CRC, каждый с различным полиномом. Такой многочлен имеет наивысшую степень n , а значит, n + 1 член (длина многочлена n + 1 ). Остаток имеет длину n . CRC имеет имя в форме CRC- n -XXX.

Дизайн полинома CRC зависит от максимальной общей длины блока, который должен быть защищен (данные + биты CRC), желаемых функций защиты от ошибок и типа ресурсов для реализации CRC, а также желаемой производительности. Распространенное заблуждение состоит в том, что «лучшие» полиномы CRC получаются либо из неприводимых полиномов, либо из неприводимых полиномов, умноженных на множитель  1 + x , что добавляет к коду способность обнаруживать все ошибки, влияющие на нечетное количество бит. [8] В действительности, все факторы, описанные выше, должны входить в выбор полинома и могут привести к приводимому полиному. Однако выбор приводимого полинома приведет к определенной доле пропущенных ошибок из-за того, что фактор-кольцо имеетделители нуля .

Преимущество выбора примитивного полинома в качестве генератора для кода CRC заключается в том, что результирующий код имеет максимальную общую длину блока в том смысле, что все однобитовые ошибки в пределах этой длины блока имеют разные остатки (также называемые синдромами ), и, следовательно, поскольку остаток является линейной функцией блока, код может обнаруживать все 2-битные ошибки в пределах этой длины блока. Если - это степень полинома примитивного генератора, то максимальная общая длина блока равна , и связанный с ним код способен обнаруживать любые однобитовые или двухбитовые ошибки. [9] Мы можем исправить эту ситуацию. Если мы используем порождающий полином , где - примитивный полином степени, то максимальная общая длина блока равна , и код может обнаруживать одиночные, двойные, тройные и любое нечетное количество ошибок.

Затем может быть выбран полином, который допускает другие факторизации, чтобы сбалансировать максимальную общую длину блока с желаемой мощностью обнаружения ошибок. Эти коды БЧХ являются мощным классом таких многочленов. Они включают два приведенных выше примера. Независимо от свойств сводимости порождающего полинома степени  r , если он включает член «+1», код сможет обнаруживать шаблоны ошибок, которые ограничены окном из r смежных битов. Эти шаблоны называются «пакетами ошибок».

Спецификация [ править ]

Концепция CRC как кода обнаружения ошибок усложняется, когда разработчик или комитет по стандартам используют его для разработки практической системы. Вот некоторые из сложностей:

  • Иногда реализация добавляет фиксированный битовый шаблон к проверяемому битовому потоку. Это полезно, когда ошибки синхронизации могут вставлять 0-биты перед сообщением, изменение, которое в противном случае оставило бы значение проверки неизменным.
  • Обычно, но не всегда, реализация добавляет n 0-битов ( n - размер CRC) к потоку битов, который нужно проверить до того, как произойдет полиномиальное деление. Такое добавление явно продемонстрировано в статье « Вычисление CRC» . Это удобно тем, что остаток от исходного потока битов с добавленным контрольным значением равен нулю, поэтому CRC можно проверить, просто выполнив полиномиальное деление полученного потока битов и сравнив остаток с нулем. Благодаря ассоциативным и коммутативным свойствам операции «исключающее ИЛИ» практические реализации, управляемые таблицами, могут получить результат, численно эквивалентный добавлению нулей без явного добавления нулей, с помощью эквивалента,[8] более быстрый алгоритм, объединяющий поток битов сообщения с потоком, смещенным из регистра CRC.
  • Иногда реализация с использованием операции исключающего ИЛИ включает фиксированный битовый шаблон в остаток полиномиального деления.
  • Порядок битов: в некоторых схемах младший бит каждого байта рассматривается как «первый», что во время полиномиального деления означает «крайний левый», что противоречит нашему обычному пониманию «младшего разряда». Это соглашение имеет смысл, когда передача через последовательный порт проверяется аппаратно с помощью CRC, потому что некоторые широко распространенные соглашения о передаче через последовательный порт сначала передают байты младшего разряда.
  • Порядок байтов : при использовании многобайтовых CRC может возникнуть путаница в отношении того, является ли байт, переданный первым (или сохраненный в байте с наименьшим адресом памяти), младшим (LSB) или старшим (MSB) байтом. Например, некоторые 16-битные схемы CRC меняют местами байты контрольного значения.
  • Пропуски бит высокого порядка дивизора полинома: Поскольку бит высокого порядка всегда равен 1, и так как п -разрядных CRC должно быть определено ап ( п + 1 ) -битных делителем , который перетекает п -разрядного регистре , некоторые авторы считают, что нет необходимости упоминать старший бит делителя.
  • Пропуск младшего бита полинома делителя: поскольку младший бит всегда равен 1, такие авторы, как Филип Купман, представляют полиномы с неповрежденным старшим битом, но без младшего бита ( член или 1) . Это соглашение кодирует многочлен вместе со степенью в одно целое число.

Эти сложности означают, что существует три распространенных способа выражения многочлена как целого числа: первые два, которые являются зеркальными изображениями в двоичном формате, представляют собой константы, обнаруженные в коде; третий - номер, найденный в бумагах Купмана. В каждом случае один член опускается. Таким образом, многочлен можно записать как:

  • 0x3 = 0b0011, представляющий (MSB-первый код)
  • 0xC = 0b1100, представляющий (LSB-первый код)
  • 0x9 = 0b1001, представляющий (нотация Купмана)

В таблице ниже они показаны как:

Обфускация [ править ]

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 никогда не являются примитивными. Полином четности, помеченный как примитивный в этой таблице, представляет собой примитивный полином, умноженный на . Обратите внимание, что старший бит полинома всегда равен 1 и не отображается в шестнадцатеричном представлении.

Реализации [ править ]

  • Реализация CRC32 в Gnuradio ;
  • Код класса C для вычисления контрольной суммы CRC с множеством различных CRC на выбор

Каталоги CRC [ править ]

  • Каталог параметризованных алгоритмов CRC
  • CRC Полиномиальный зоопарк

См. Также [ править ]

  • Математика циклических проверок избыточности
  • Вычисление циклических проверок избыточности
  • Список хеш-функций
  • Список алгоритмов контрольной суммы
  • Информационная безопасность
  • Простая проверка файла
  • LRC

Ссылки [ править ]

  1. ^ «Алгоритм исправления ошибок циклических проверок избыточности» . drdobbs.com . Архивировано из оригинала 20 июля 2017 года . Проверено 28 июня 2017 года .
  2. ^ Петерсон, WW; Браун, Д. Т. (январь 1961 г.). «Циклические коды для обнаружения ошибок». Труды ИРЭ . 49 (1): 228–235. DOI : 10.1109 / JRPROC.1961.287814 . S2CID 51666741 . 
  3. ^ Риттер, Терри (февраль 1986). «Великая тайна КПР» . Журнал доктора Добба . 11 (2): 26–34, 76–83 . Проверено 21 мая 2009 года .
  4. ^ Стигге, Мартин; Плётц, Хенрик; Мюллер, Вольф; Редлих, Йенс-Петер (май 2006 г.). «Обращение CRC вспять - теория и практика» (PDF) . Берлин: Университет Гумбольдта в Берлине: 17. Архивировано из оригинального (PDF) 19 июля 2011 года . Проверено 4 февраля 2011 года . Представленные методы предлагают очень простой и эффективный способ изменить ваши данные, чтобы они вычисляли CRC, который вы хотите или, по крайней мере, знаете заранее. Cite journal requires |journal= (help)
  5. ^ "Дизайн алгоритма - Почему CRC называется линейным?" . Обмен криптографическим стеком . Дата обращения 5 мая 2019 .
  6. ^ Cam-Winget, Нэнси; Хаусли, Расс; Вагнер, Давид; Уокер, Джесси (май 2003 г.). «Недостатки безопасности в протоколах передачи данных 802.11» (PDF) . Коммуникации ACM . 46 (5): 35–39. CiteSeerX 10.1.1.14.8775 . DOI : 10.1145 / 769800.769823 . S2CID 3132937 .   
  7. ^ «[MS-ABS]: 32-битный алгоритм CRC» . msdn.microsoft.com .
  8. ^ a b c Уильямс, Росс Н. (24 сентября 1996 г.). «Безболезненное руководство по алгоритмам обнаружения ошибок CRC V3.0» . Архивировано из оригинального 2 -го апреля 2018 года . Дата обращения 23 мая 2019 .
  9. ^ Нажмите, WH; Теукольский С.А.; Феттерлинг, штат Вашингтон; Фланнери, ВР (2007). «Раздел 22.4 Циклическое резервирование и другие контрольные суммы» . Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк: Издательство Кембриджского университета. ISBN 978-0-521-88068-8.
  10. Юинг, Грегори С. (март 2010 г.). «Обратное проектирование алгоритма CRC» . Крайстчерч: Кентерберийский университет . Проверено 26 июля 2011 года .
  11. ^ a b c d e f g h i j Купман, Филипп; Чакраварти, Тридиб (июнь 2004 г.). Выбор полинома циклического избыточного кода (CRC) для встроенных сетей (PDF) . Международная конференция по надежным системам и сетям . С. 145–154. CiteSeerX 10.1.1.648.9080 . DOI : 10,1109 / DSN.2004.1311885 . ISBN   978-0-7695-2052-0. S2CID  793862 . Проверено 14 января 2011 года .
  12. ^ a b Кук, Грег (15 августа 2020 г.). «Каталог параметризованных алгоритмов CRC» . Дата обращения 18 сентября 2020 .
  13. ^ Castagnoli, G .; Bräuer, S .; Херрманн, М. (июнь 1993 г.). «Оптимизация циклических кодов проверки избыточности с 24 и 32 битами четности». IEEE Transactions on Communications . 41 (6): 883–892. DOI : 10.1109 / 26.231911 .
  14. ^ a b c d e f g h Купман, Филипп (июль 2002 г.). «32-битные циклические коды избыточности для Интернет-приложений». Труды Международной конференции по надежным системам и сетям (PDF) . Международная конференция по надежным системам и сетям . С. 459–468. CiteSeerX 10.1.1.11.8323 . DOI : 10,1109 / DSN.2002.1028931 . ISBN   978-0-7695-1597-7. S2CID  14775606 . Проверено 14 января 2011 года .
  15. ^ Купман, Филипп (21 января 2016). «Лучшие полиномы CRC» . Питтсбург: Университет Карнеги-Меллона . Проверено 26 января +2016 .
  16. ^ Брейер, Кеннет (август 1975). «Оценка 32-градусных многочленов при обнаружении ошибок на шаблонах ошибок SATIN IV Autovon» . Национальная служба технической информации : 74 . Проверено 3 февраля 2011 года . Cite journal requires |journal= (help)[ постоянная мертвая ссылка ]
  17. ^ Хаммонд, Джозеф Л., младший; Браун, Джеймс Э .; Лю, Шянь-Шианг (1975). «Разработка модели ошибок передачи и модели контроля ошибок» (PDF) . Технический отчет NASA Sti / Recon N (опубликован в мае 1975 г.). 76 : 74. Bibcode : 1975STIN ... 7615344H . Проверено 7 июля 2012 года .
  18. ^ Брейер, Кеннет; Хаммонд, Джозеф Л. младший (декабрь 1975 г.). «Оценка работы полинома обнаружения ошибок на канале АВТОВОН». Запись конференции . IEEE Национальная конференция по телекоммуникации и связи, Новый Орлеан, La. 1 . Нью-Йорк: Институт инженеров по электротехнике и электронике. С. 8–21–8–25. Bibcode : 1975ntc ..... 1 .... 8B .
  19. ^ CRC с четностью обнаруживают любое нечетное количество битовых ошибок за счет меньшего расстояния Хэмминга для длинных полезных данных. Обратите внимание, что четность вычисляется по всему полиному генератора, включая подразумеваемую 1 в начале или в конце. Например, полное представление CRC-1 - 0x3, которое имеет два бита 1. Таким образом, его соотношение четное.
  20. ^ a b "32-битный зоопарк CRC" . users.ece.cmu.edu .
  21. ^ Полезная нагрузка означает длину без учета поля CRC. Хэмминга расстояние д означаетчто d  - 1 битовые ошибки могут быть обнаружены и ⌊ ( д  - 1) / 2⌋ битовые ошибки могут быть исправлены
  22. ^ всегда достигается для произвольно длинных сообщений
  23. ^ Б с д е е ETSI TS 100 909 (PDF) . V8.9.0. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2005 . Проверено 21 октября +2016 .
  24. ^ "3-битный зоопарк CRC" . users.ece.cmu.edu .
  25. ^ Протокол UHF RFID поколения 2 класса 1 (PDF) . 1.2.0. EPCglobal . 23 октября 2008 г. с. 35 . Проверено 4 июля 2012 года . (Таблица 6.12)
  26. ^ a b c d e f Стандарт физического уровня для систем с расширенным спектром cdma2000 (PDF) . Редакция D версии 2.0. Проект партнерства третьего поколения 2. Октябрь 2005 г., стр. 2–89–2–92. Архивировано из оригинального (PDF) 16 ноября 2013 года . Проверено 14 октября 2013 года .
  27. ^ a b c «11. Стратегия исправления ошибок». ETSI EN 300 751 (PDF) . V1.2.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2003. С. 67–8 . Проверено 26 января +2016 .
  28. ^ "6-битный зоопарк CRC" . users.ece.cmu.edu .
  29. ^ a b Чакраварти, Тридиб (декабрь 2001 г.). Производительность кодов циклического резервирования для встроенных сетей (PDF) (Диссертация). Филип Купман, советник. Питтсбург: Университет Карнеги-Меллона. С. 5, 18 . Проверено 8 июля 2013 года .
  30. ^ "5.1.4 Кодер CRC-8 (только для пакетированных потоков)". EN 302 307 (PDF) . V1.3.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Март 2013. с. 17 . Дата обращения 29 июля 2016 .
  31. ^ a b "8-битный зоопарк CRC" . users.ece.cmu.edu .
  32. ^ "7.2.1.2 Вычисление 8-битного полинома 0x2F CRC". Спецификация процедур CRC (PDF) . 4.2.2. Мюнхен: АВТОСАР. 22 июля 2015. с. 24. Архивировано из оригинального (PDF) 24 июля 2016 года . Дата обращения 24 июля 2016 .
  33. ^ a b c "5.1.1.8 Поле циклического контроля избыточности (CRC-8 / CRC-16)". Спецификация профиля безопасности openSAFETY: рабочее предложение 304 EPSG . 1.4.0. Берлин: Группа стандартизации Ethernet POWERLINK. 13 марта 2013. с. 42. Архивировано из оригинала 12 августа 2017 года . Дата обращения 22 июля 2016 .
  34. ^ «B.7.1.1 Генерация HEC». Спецификация системы Bluetooth . 2 . Bluetooth SIG. 2 декабря 2014. С. 144–5 . Проверено 20 октября 2014 года .
  35. Гарри Уитфилд (24 апреля 2001 г.). «XFCN для расчетов с циклической проверкой избыточности» . Архивировано из оригинального 25 мая 2005 года.
  36. Ричардсон, Эндрю (17 марта 2005 г.). Справочник WCDMA . Кембридж, Великобритания: Издательство Кембриджского университета. п. 223. ISBN 978-0-521-82815-4.
  37. ^ a b Спецификация протокола FlexRay . 3.0.1. Консорциум Flexray. Октябрь 2010. с. 114. (4.2.8 CRC заголовка (11 бит))
  38. Перейти ↑ Perez, A. (1983). «Побайтовые вычисления CRC». IEEE Micro . 3 (3): 40–50. DOI : 10.1109 / MM.1983.291120 . S2CID 206471618 . 
  39. ^ Рамабадран, телевидение; Гайтонде, СС (1988). «Учебник по вычислениям CRC». IEEE Micro . 8 (4): 62–75. DOI : 10.1109 / 40.7773 . S2CID 10216862 . 
  40. ^ http://www.freescale.com/files/microcontrollers/doc/app_note/AN1597.pdf
  41. ^ Эли, SR; Райт, Д.Т. (март 1982 г.). LF Radio-Data: спецификация экспериментальных передач BBC 1982 (PDF) . Исследовательский отдел инженерного отдела Британской радиовещательной корпорации. п. 9 . Проверено 11 октября 2013 года .
  42. ^ Циклический контроль избыточности (CRC): Техническое описание компонента PSoC Creator ™ . Cypress Semiconductor. 20 февраля 2013. с. 4 . Проверено 26 января +2016 .
  43. ^ «Циклический контроль избыточности (CRC) в кадрах CAN» . CAN в автоматизации . Проверено 26 января +2016 .
  44. ^ «3.2.3 Кодирование и проверка ошибок». Стандарт сигнализации для транкинговых частных наземных мобильных радиосистем (MPT 1327) (PDF) (3-е изд.). Ofcom . Июнь 1997. с. 3 . Проверено 16 июля 2012 года .
  45. ^ Реманн, Альберт; Местре, Хосе Д. (февраль 1995 г.). «Предварительный отчет об испытаниях системы авиационной связи и передачи данных по воздуху и земле (ACARS)» (PDF) . Технический центр Федерального авиационного управления: 5 . Проверено 7 июля 2012 года . Cite journal requires |journal= (help)
  46. ^ «6.2.5 Контроль ошибок». ETSI EN 300 175-3 (PDF) . V2.5.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Август 2013. С. 99, 101 . Проверено 26 января +2016 .
  47. Перейти ↑ Thaler, Pat (28 августа 2003 г.). «Выбор 16-битного полинома CRC» (PDF) . INCITS T10 . Проверено 11 августа 2009 года . Cite journal requires |journal= (help)
  48. ^ «8.8.4 Проверить октет (FCS)». Нормативные части спецификации PROFIBUS (PDF) . 1.0. 9 . Profibus International. Март 1998. с. 906. Архивировано из оригинального (PDF) 16 ноября 2008 года . Дата обращения 9 июля 2016 .
  49. ^ a b CAN с гибкой спецификацией скорости передачи данных (PDF) . 1.0. Роберт Бош ГмбХ. 17 апреля 2012. с. 13. Архивировано из оригинального (PDF) 22 августа 2013 года. (3.2.1 КАДР ДАННЫХ)
  50. ^ "Руководство программиста операционной системы OS-9" . www.roug.org .
  51. Филип П. Купман (20 мая 2018 г.). "24-битный зоопарк CRC" . users.ece.cmu.edu .
  52. ^ "cksum" . pubs.opengroup.org .
  53. ^ Бутелл, Томас; Рандерс-Персон, Гленн; и другие. (14 июля 1998 г.). «Спецификация PNG (переносимая сетевая графика), версия 1.2» . Libpng.org . Проверено 3 февраля 2011 года .
  54. ^ AIXM Primer (PDF) . 4.5. Европейская организация по безопасности аэронавигации . 20 марта 2006 . Дата обращения 3 февраля 2019 .
  55. ^ ETSI TS 100909 версия 8.9.0 (январь 2005 г.), раздел 4.1.2 a
  56. ^ Gammel, Берндт М. (31 октября 2005). Документация Matpack: Крипто - Коды . Matpack.de . Проверено 21 апреля 2013 года . (Примечание: MpCRC.html включен в исходный код сжатого программного обеспечения Matpack, в / html / LibDoc / Crypto)
  57. ^ Geremia, Патрик (апрель 1999). «Вычисление с контролем циклического избыточного кода: реализация с использованием TMS320C54x» (PDF) (SPRA530). Техасские инструменты: 5 . Проверено 4 июля 2012 года . Cite journal requires |journal= (help)
  58. ^ Джонс, Дэвид Т. «Улучшенная 64-битная циклическая проверка избыточности для белковых последовательностей» (PDF) . Университетский колледж Лондона . Проверено 15 декабря 2009 года . Cite journal requires |journal= (help)

Дальнейшее чтение [ править ]

  • Уоррен-младший, Генри С. (2013). Восторг хакера (2-е изд.). Эддисон Уэсли - ISBN Pearson Education, Inc.  978-0-321-84268-8.

Внешние ссылки [ править ]

  • Митра, Джубин; Наяк, Тапан (январь 2017 г.). «Реконфигурируемая архитектура CRC 32 с очень высокой пропускной способностью и малой задержкой VLSI (FPGA)». Интеграция, Журнал СБИС . 56 : 1–14. DOI : 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) . Хакерское наслаждение . Архивировано 3 мая 2015 года из оригинального (PDF) . - теория, практика, оборудование и программное обеспечение с упором на CRC-32.
  • Обратное проектирование алгоритма CRC
  • Повар, Грег. «Каталог параметризованных алгоритмов CRC» . CRC RevEng .
  • Купман, Фил. «Блог: Контрольная сумма и CRC Central» .- включает ссылки на PDF-файлы, содержащие 16- и 32-битные расстояния Хэмминга CRC
  • Купман, Филипп; Дрисколл, Кевин; Холл, Брендан (март 2015 г.). «Циклический код избыточности и алгоритмы контрольной суммы для обеспечения критической целостности данных» (PDF) . Федеральная авиационная администрация. DOT / FAA / TC-14/49.
  • ISO / IEC 13239: 2002: Информационные технологии. Телекоммуникации и обмен информацией между системами. Процедуры управления каналом передачи данных высокого уровня (HDLC).
  • CRC32-Castagnoli Linux библиотека