stringtranslate.com

Циклическая проверка избыточности

Проверка циклическим избыточным кодом ( 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 (два члена), [3] и имеет название CRC-1.

Приложение

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

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

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

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

Целостность данных

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

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

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

В-третьих, CRC удовлетворяет соотношению, аналогичному соотношению линейной функции (или, точнее, аффинной функции ): [6]

где зависит от длины и . Это также можно сформулировать следующим образом, где , и имеют одинаковую длину

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

Вычисление

Чтобы вычислить 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 бита, поэтому его называют 3-битным CRC. Однако для явного указания полинома вам нужны 4 бита.

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

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 <--- обратите внимание, что делитель перемещается, чтобы совместиться со следующей единицей в делимом (поскольку частное для этого шага было равно нулю) 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 строки битов,  используя  выбранный полином . 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' в input_padded_array [: len_input ]: cur_shift = input_padded_array . индекс ( '1' ) для i в диапазоне ( len ( polynomial_bitstring )): input_padded_array [ cur_shift + i ] \ = str ( int ( polynomial_bitstring [ i ] != 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 = список ( input_bitstring + Initial_padding ) в то время как '1' в input_padded_array [: len_input ]: cur_shift = input_padded_array . индекс ( '1' ) для i в диапазоне ( len ( polynomial_bitstring )): input_padded_array [ cur_shift + i ] \ = str ( int ( polynomial_bitstring [ i ] != input_padded_array [ cur_shift + i ])) return ( '1' нет в ' ' .join ( input_padded_array )[ len_input :])                                       
>>> crc_remainder ( '11010011101100' ,  '1011' ,  '0' ) '100' >>> crc_check ( '11010011101100' ,  '1011' ,  '100' ) True

Математика

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

Проектирование полиномов

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

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

Наиболее часто используемые длины полиномов — 9 бит (CRC-8), 17 бит (CRC-16), 33 бита (CRC-32) и 65 бит (CRC-64). [3]

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

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

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

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

Спецификация

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

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

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

Обфускация

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 для обнаружения ошибок в полезной нагрузке (хотя для заголовков PHY он использует CRC-16-CCITT ).

Вычисление CRC-32C реализовано аппаратно как операция ( CRC32) набора инструкций SSE4.2 , впервые представленного в микроархитектуре Nehalem процессоров Intel . Архитектура ARM AArch64 также обеспечивает аппаратное ускорение операций CRC-32 и CRC-32C.

Полиномиальные представления

В таблице ниже перечислены только полиномы различных используемых алгоритмов. Вариации конкретного протокола могут налагать прединверсию, постинверсию и обратный порядок битов, как описано выше. Например, CRC32, используемый в Gzip и Bzip2, использует один и тот же полином, но Gzip использует обратный порядок битов, а Bzip2 — нет. [12] Обратите внимание, что даже полиномы четности в GF(2) со степенью больше 1 никогда не являются примитивными. Даже полином четности, помеченный как примитивный в этой таблице, представляет собой примитивный полином, умноженный на . Самый старший бит многочлена всегда равен 1 и не отображается в шестнадцатеричных представлениях.

Реализации

CRC-каталоги

Смотрите также

Рекомендации

  1. ^ «Алгоритм проверки ошибок циклическим избыточным кодом» . drdobbs.com . Архивировано из оригинала 20 июля 2017 года . Проверено 28 июня 2017 г.
  2. ^ Петерсон, WW; Браун, Д.Т. (январь 1961 г.). «Циклические коды для обнаружения ошибок». Труды ИРЭ . 49 (1): 228–235. дои : 10.1109/JRPROC.1961.287814. S2CID  51666741.
  3. ↑ Аб Эрген, Мустафа (21 января 2008 г.). «2.3.3 Кодирование обнаружения ошибок». Мобильного широкополосного доступа . Спрингер . стр. 29–30. дои : 10.1007/978-0-387-68192-4_2. ISBN 978-0-387-68192-4.
  4. ^ Риттер, Терри (февраль 1986 г.). «Великая тайна CRC». Журнал доктора Добба . 11 (2): 26–34, 76–83. Архивировано из оригинала 16 апреля 2009 года . Проверено 21 мая 2009 г.
  5. ^ Стигге, Мартин; Плёц, Хенрик; Мюллер, Вольф; Редлих, Йенс-Петер (май 2006 г.). «Реверс CRC – теория и практика» (PDF) . Университет Гумбольдта в Берлине. п. 17. САР-ПР-2006-05. Архивировано из оригинала (PDF) 19 июля 2011 года . Проверено 4 февраля 2011 г. Представленные методы предлагают очень простой и эффективный способ изменить ваши данные так, чтобы они вычислялись по CRC, который вы хотите или, по крайней мере, знаете заранее.
  6. ^ «Разработка алгоритма - Почему CRC называют линейным?». Обмен стеками криптографии . Проверено 5 мая 2019 г.
  7. ^ Кэм-Вингет, Нэнси; Хаусли, Расс; Вагнер, Дэвид; Уокер, Джесси (май 2003 г.). «Недостатки безопасности в протоколах передачи данных 802.11» (PDF) . Коммуникации АКМ . 46 (5): 35–39. CiteSeerX 10.1.1.14.8775 . дои : 10.1145/769800.769823. S2CID  3132937. Архивировано (PDF) из оригинала 26 мая 2013 г. . Проверено 1 ноября 2017 г. 
  8. ^ abc Уильямс, Росс Н. (24 сентября 1996 г.). «Безболезненное руководство по алгоритмам обнаружения ошибок CRC V3.0». Архивировано из оригинала 2 апреля 2018 года . Проверено 23 мая 2019 г.
  9. ^ Пресс, WH; Теукольский, С.А.; Феттерлинг, WT; Фланнери, BP (2007). «Раздел 22.4 Циклическая избыточность и другие контрольные суммы». Численные рецепты: искусство научных вычислений (3-е изд.). Издательство Кембриджского университета. ISBN 978-0-521-88068-8. Архивировано из оригинала 11 августа 2011 года . Проверено 18 августа 2011 г.
  10. ^ Юинг, Грегори К. (март 2010 г.). «Реверс-инжиниринг алгоритма CRC». Крайстчерч: Кентерберийский университет. Архивировано из оригинала 7 августа 2011 года . Проверено 26 июля 2011 г.
  11. ^ abcdefghij Купман, Филип; Чакраварти, Тридиб (июнь 2004 г.). «Выбор полинома циклического избыточного кода (CRC) для встроенных сетей». Международная конференция по надежным системам и сетям, 2004 г. (PDF) . стр. 145–154. CiteSeerX 10.1.1.648.9080 . дои : 10.1109/DSN.2004.1311885. ISBN  978-0-7695-2052-0. S2CID  793862. Архивировано (PDF) из оригинала 11 сентября 2011 года . Проверено 14 января 2011 г.
  12. ↑ Аб Кук, Грег (15 августа 2020 г.). «Каталог параметризованных алгоритмов CRC». Архивировано из оригинала 1 августа 2020 года . Проверено 18 сентября 2020 г.
  13. ^ Кастаньоли, Г.; Бройер, С.; Херрманн, М. (июнь 1993 г.). «Оптимизация циклических кодов проверки избыточностью с 24 и 32 битами четности». Транзакции IEEE в области коммуникаций . 41 (6): 883–892. дои : 10.1109/26.231911.
  14. ^ abcdefgh Купман, Филип (июль 2002 г.). «32-битные циклические избыточные коды для интернет-приложений». Материалы Международной конференции по надежным системам и сетям (PDF) . стр. 459–468. CiteSeerX 10.1.1.11.8323 . дои : 10.1109/DSN.2002.1028931. ISBN  978-0-7695-1597-7. S2CID  14775606. Архивировано (PDF) из оригинала 16 сентября 2012 года . Проверено 14 января 2011 г.
  15. ^ Купман, Филип (21 января 2016 г.). «Лучшие полиномы CRC». Университет Карнеги Меллон. Архивировано из оригинала 20 января 2016 года . Проверено 26 января 2016 г. .
  16. ^ Брайер, Кеннет (август 1975 г.). Оценка полиномов 32 градусов при обнаружении ошибок в шаблонах ошибок SATIN IV Autovon (отчет). Национальная служба технической информации . АДА014825. Архивировано из оригинала 31 декабря 2021 года . Проверено 31 декабря 2021 г.
  17. ^ Хаммонд, Джозеф Л. младший; Браун, Джеймс Э.; Лю, Шьян-Шян (1975). «Разработка модели ошибок передачи и модели контроля ошибок». Технический отчет N НАСА Sti/Recon (опубликован в мае 1975 г.). 76 : 15344. Бибкод : 1975STIN...7615344H. АДА013939. Архивировано из оригинала 31 декабря 2021 года . Проверено 31 декабря 2021 г.
  18. ^ Брайер, Кеннет; Хаммонд, Джозеф Л. младший (декабрь 1975 г.). Оценка эффективности полинома обнаружения ошибок на канале AUTOVON. NTC 75: Национальная конференция по телекоммуникациям, 1–3 декабря 1975 г., Новый Орлеан, Луизиана. Том. 1. Институт инженеров электротехники и электроники. стр. 8–21–5. Бибкод : 1975ntc.....1....8B. OCLC  32688603. 75 CH 1015-7 CSCB.
  19. ^ CRC с четной четностью обнаруживают любое нечетное количество битовых ошибок за счет меньшего расстояния Хэмминга для длинных полезных данных. Обратите внимание, что четность вычисляется по всему полиному генератора, включая подразумеваемую 1 в начале или в конце. Например, полное представление CRC-1 — это 0x3, который имеет два бита 1. Таким образом, его четность четная.
  20. ^ ab «32-битный зоопарк CRC». user.ece.cmu.edu . Архивировано из оригинала 19 марта 2018 года . Проверено 5 ноября 2017 г.
  21. ^ Полезная нагрузка означает длину без учета поля CRC. Расстояние Хэмминга d означает, что  можно обнаружить d - 1 битовых ошибок и  исправить ⌊( d - 1)/2⌋ битовых ошибок.
  22. ^ всегда достигается для сообщений произвольной длины
  23. ^ abcdef ETSI TS 100 909 (PDF) . Версия 8.9.0. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2005 г. Архивировано (PDF) из оригинала 17 апреля 2018 г. Проверено 21 октября 2016 г.
  24. ^ "3-битный зоопарк CRC" . user.ece.cmu.edu . Архивировано из оригинала 7 апреля 2018 года . Проверено 19 января 2018 г.
  25. ^ Протокол UHF RFID класса 1 поколения 2 (PDF) . 1.2.0. EPCglobal . 23 октября 2008 г. с. 35. Архивировано (PDF) из оригинала 19 марта 2012 года . Проверено 4 июля 2012 г.(Таблица 6.12)
  26. ^ abcdef Стандарт физического уровня для систем с расширенным спектром cdma2000 (PDF) . Редакция D версии 2.0. Проект партнерства третьего поколения 2. Октябрь 2005 г. стр. 2–89–2–92. Архивировано из оригинала (PDF) 16 ноября 2013 года . Проверено 14 октября 2013 г.
  27. ^ abc «11. Стратегия исправления ошибок». ETSI EN 300 751 (PDF) . В1.2.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Январь 2003 г., стр. 67–8. Архивировано (PDF) из оригинала 28 декабря 2015 года . Проверено 26 января 2016 г. .
  28. ^ "6-битный зоопарк CRC" . user.ece.cmu.edu . Архивировано из оригинала 7 апреля 2018 года . Проверено 19 января 2018 г.
  29. ^ аб Чакраварти, Тридиб (декабрь 2001 г.). Производительность кодов циклической избыточности для встроенных сетей (PDF) (Диссертация). Филип Купман, советник. Университет Карнеги Меллон. стр. 5, 18. Архивировано (PDF) из оригинала 1 января 2014 года . Проверено 8 июля 2013 г.
  30. ^ «5.1.4 Кодер CRC-8 (только для пакетированных потоков)» . EN 302 307 (PDF) . В1.3.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Март 2013. с. 17. Архивировано (PDF) из оригинала 30 августа 2017 года . Проверено 29 июля 2016 г.
  31. ^ ab «8-битный зоопарк CRC». user.ece.cmu.edu . Архивировано из оригинала 7 апреля 2018 года . Проверено 19 января 2018 г.
  32. ^ «7.2.1.2 8-битный полиномиальный расчет CRC 0x2F» . Спецификация процедур CRC (PDF) . 4.2.2. Мюнхен: АВТОСАР. 22 июля 2015 г. с. 24. Архивировано из оригинала (PDF) 24 июля 2016 года . Проверено 24 июля 2016 г.
  33. ^ abc «5.1.1.8 Поле проверки циклическим избыточным кодом (CRC-8 / CRC-16)» . Спецификация профиля безопасности openSAFETY: Рабочий проект предложения EPSG 304. 1.4.0. Берлин: Группа стандартизации Ethernet POWERLINK. 13 марта 2013 г. с. 42. Архивировано из оригинала 12 августа 2017 года . Проверено 22 июля 2016 г.
  34. ^ «B.7.1.1 Поколение HEC» . Спецификация системы Bluetooth. Том. 2. Bluetooth-сигнал. 2 декабря 2014. С. 144–5. Архивировано из оригинала 26 марта 2015 года . Проверено 20 октября 2014 г.
  35. Уитфилд, Гарри (24 апреля 2001 г.). «XFCN для расчетов проверки циклическим избыточным кодом». Архивировано из оригинала 25 мая 2005 года.
  36. Ричардсон, Эндрю (17 марта 2005 г.). Справочник WCDMA. Издательство Кембриджского университета. п. 223. ИСБН 978-0-521-82815-4.
  37. ^ ab Спецификация протокола FlexRay . 3.0.1. Консорциум FlexRay. Октябрь 2010. с. 114.(4.2.8 CRC заголовка (11 бит))
  38. ^ Перес, А. (1983). «Побайтовые вычисления CRC». IEEE микро . 3 (3): 40–50. дои : 10.1109/MM.1983.291120. S2CID  206471618.
  39. ^ Рамабадран, ТВ; Гайтонда, СС (1988). «Учебник по вычислениям CRC». IEEE микро . 8 (4): 62–75. дои : 10.1109/40.7773. S2CID  10216862.
  40. ^ «Декодирование длинноволновых радиоданных с использованием HC11 и MC3371» (PDF) . Свободный полупроводник. 2004. АН1597/Д. Архивировано из оригинала (PDF) 24 сентября 2015 года.
  41. ^ Эли, СР; Райт, DT (март 1982 г.). Данные LF Radio: спецификация экспериментальных передач BBC, 1982 г. (PDF) . Исследовательский отдел инженерного отдела Британской радиовещательной корпорации. п. 9. Архивировано (PDF) из оригинала 12 октября 2013 года . Проверено 11 октября 2013 г.
  42. ^ Проверка циклическим избыточным кодом (CRC): Техническое описание компонента PSoC Creator™. Кипарисовый полупроводник. 20 февраля 2013 г. с. 4. Архивировано из оригинала 2 февраля 2016 года . Проверено 26 января 2016 г. .
  43. ^ «Циклический избыточный код (CRC) в кадрах CAN» . CAN в автоматизации . Архивировано из оригинала 1 февраля 2016 года . Проверено 26 января 2016 г. .
  44. ^ «3.2.3 Кодирование и проверка ошибок». Стандарт сигнализации для транкинговых частных наземных мобильных радиосистем (MPT 1327) (PDF) (3-е изд.). Офком . Июнь 1997. с. 3. Архивировано (PDF) из оригинала 14 июля 2012 г. Проверено 16 июля 2012 г.
  45. ^ Реманн, Альберт; Местре, Хосе Д. (февраль 1995 г.). «Отчет о предварительных испытаниях системы воздушно-земной линии передачи данных VHF для авиакомпании (ACARS)» (PDF) . Технический центр Федерального управления гражданской авиации. п. 5. Архивировано из оригинала (PDF) 2 августа 2012 года . Проверено 7 июля 2012 г.
  46. ^ «6.2.5 Контроль ошибок» . ETSI EN 300 175-3 (PDF) . В2.5.1. София Антиполис, Франция: Европейский институт телекоммуникационных стандартов. Август 2013. стр. 99, 101. Архивировано (PDF) из оригинала 1 июля 2015 года . Проверено 26 января 2016 г. .
  47. Талер, Пэт (28 августа 2003 г.). «Выбор 16-битного полинома CRC» (PDF) . ИНЦИТС Т10. Архивировано (PDF) из оригинала 28 июля 2011 года . Проверено 11 августа 2009 г.
  48. ^ «8.8.4 Контрольный октет (FCS)» . Нормативные части спецификации PROFIBUS (PDF) . 1.0. Том. 9. Профибус Международный. Март 1998 г. с. 906. Архивировано из оригинала (PDF) 16 ноября 2008 года . Проверено 9 июля 2016 г.
  49. ^ ab CAN с гибкой спецификацией скорости передачи данных (PDF) . 1.0. Роберт Бош ГмбХ. 17 апреля 2012 г. с. 13. Архивировано из оригинала (PDF) 22 августа 2013 года.(3.2.1 КАДР ДАННЫХ)
  50. ^ «Руководство программиста операционной системы OS-9» . сайт roug.org . Архивировано из оригинала 17 июля 2018 года . Проверено 17 июля 2018 г.
  51. ^ Купман, Филип П. (20 мая 2018 г.). «24-битный зоопарк CRC». user.ece.cmu.edu . Архивировано из оригинала 7 апреля 2018 года . Проверено 19 января 2018 г.
  52. Ссылки _ pubs.opengroup.org . Архивировано из оригинала 18 июля 2018 года . Проверено 27 июня 2017 г.
  53. ^ Бутелл, Томас; Рандерс-Персон, Гленн; и другие. (14 июля 1998 г.). «Спецификация PNG (переносимая сетевая графика), версия 1.2». Libpng.org. Архивировано из оригинала 3 сентября 2011 года . Проверено 3 февраля 2011 г.
  54. ^ Учебник по AIXM (PDF) . 4.5. Европейская организация по безопасности аэронавигации . 20 марта 2006 г. Архивировано (PDF) из оригинала 20 ноября 2018 г. . Проверено 3 февраля 2019 г.
  55. ^ ETSI TS 100 909. Архивировано 17 апреля 2018 г. в Wayback Machine, версия 8.9.0 (январь 2005 г.), раздел 4.1.2 a.
  56. Гаммель, Берндт М. (31 октября 2005 г.). Документация Matpack: Крипто – Коды. Matpack.de. Архивировано из оригинала 25 августа 2013 года . Проверено 21 апреля 2013 г.(Примечание: MpCRC.html включен в исходный код сжатого программного обеспечения Matpack в /html/LibDoc/Crypto)
  57. ^ Джеремия, Патрик (апрель 1999 г.). «Вычисление проверки циклическим избыточным кодом: реализация с использованием TMS320C54x» (PDF) . Инструменты Техаса. п. 5. Архивировано (PDF) из оригинала 14 июня 2012 года . Проверено 4 июля 2012 г.
  58. ^ Джонс, Дэвид Т. «Улучшенная 64-битная проверка циклической избыточности для белковых последовательностей» (PDF) . Университетский колледж Лондона. Архивировано (PDF) из оригинала 7 июня 2011 года . Проверено 15 декабря 2009 г.

дальнейшее чтение

Внешние ссылки