Загрузил AtomicReg

Не все полиномы одинаково полезны или почему CRC32 давно не тот

Реклама
Журнал Эмбеддед-Инженера
БЛОГ 2020
О БЛОГЕ
ГЕНЕРАТОРЫ
ВСЕ СТАТЬИ
ОБ АВТОРЕ
Поиск ...

РАЗДЕЛЫ
Не все полиномы одинаково полезны или
почему CRC32 давно не тот
 ASIC/FPGA, Алгоритмы, Криптография
1. Терминология
2. Критерии качества
3. Дань традициям
4. Мораль
5. Тест на внимательность
6. Литература
Терминология
Часто под CRC подразумевают две разные вещи:
Cyclic Redundancy Code — применяется в помехоустойчивом
кодировании для обнаружения и исправления ошибок
Cyclic Redundancy Check — использование циклических кодов в

ASIC/FPGA

RHEL/CentOS

Автоэлектроника

Алгоритмы

Криптография

Линукс

Обратная Разработка [Rev.Eng.]

Программирование

Радиотехника

Тех.Документация

Электронные компоненты

Электронные самоделки
качестве хэш-функции для проверки целостности принимаемых даных
Поскольку большинство современных проводных каналов связи обладают достаточными
характеристиками для поддержания хорошего BER, то зачастую достаточно убедиться в том, что
сообщение не искажено во время прохождения по внешнему каналу, а для этого достаточно
использования циклических кодов в качестве контрольных сумм (перезапрос «бракованного» кадра как
правило в большинстве интерфейсов происходит на более высоком протокольном уровне).
Критерии качества
Качественным критерием оценки контрольной суммы является вероятность возникновения коллизии —
ЕЖЕНЕДЕЛЬНЫЙ ДАЙДЖЕСТ:
е-мейл…
ПОДПИСКА
т.е. необнаружения искажения данных: подразумевается искажение данных таким образом, что
подсчитанный CRC (от искаженных данных) совпадет с референсным CRC (либо одновременно исказятся
и CRC и данные в канале передачи). Причём, чем длиннее сообщение, тем больше вероятность
ТЕГИ
появления коллизии — больше возможностей для того чтобы «звёзды совпали», поэтому часто выбор
длины полинома для подсчёта CRC соотносят с размером пакета, к которому этот CRC применяют.
asciidoc
bash
BitCoin
BLE
BTC
CAN BUS
CAN FD
Минковского — она служит некоей метрикой различности двух объектов (в нашем случае — двух
DIY
GCC
gitignore
пакетов: переданного и принятого). В терминах CRC, HD — это минимально возможное число бит
iPhone
Для этого ввели такой термин как Расстояние Хэмминга (Hamming Distance, HD) или Метрика
сообщения, инверсия которых может привести к коллизии (необнаружению повреждения сообщения).
Так, например в стандарте CAN (от Bosch GmbH) используемый полином вкупе с длиной сообщений
обеспечивает HD=6, что означает, что не существует никаких комбинаций 1-, 2-, 3-, 4- и 5-битных ошибок
Git
ISO11898
CentOS
myopensource
PHP
RF
SVG
RHEL
(здесь ошибка — инверсия передаваемого бита в сообщении), которые не были бы необнаруживаемыми,
STM8
Verilog
но существует как минимум одна комбинация 6-ти битной ошибки, которую невозможно обнаружить с
WordPress
помощью используемого полинома CRC.
ПЛИС
Также необходимо отметить, что на правильность выбора полинома для того или иного протокола (и
майнинг биткоинов
Xilinx
СБИС
iOS
LIN BUS
notification
SDCC
VHDL
yum
crypto
IEEE1685
Lattice
monitoring
PLL
blockchain
SHA256
Vivado
БД
Скрипты
PDF
Линукс
криптография
получения конкретного значения HD) зависит и скорость передачи информации — характер ошибок и их
динамика может сильно меняться (например, за счет увеличения скорости передачи — появляться пачки
ошибок), вот для примера какие цифры фигурируют в знакомых мне протоколах:
ПОПУЛЯРНОЕ
Сдвиг парадигмы «блогерства»
Установка Xilinx Vivado на
линукс на примере CentOS 7
PushOver: Получение
уведомлений на смартфоне
CentOS 7: советы и шпаргалки
Связь скорости передачи, длины сообщения и выбора
степени полинома CRC
Yum: советы и шпаргалки
Дань традициям
В большинстве стандартизированных протоколов используются контрольные суммы CRC, однако часто
используемые в них стандартизованные полиномы не являются самыми эффективными в терминах
WordPress: советы и
шпаргалки
эффективного расстояния Хэмминга (HD), в [1] затрагивается вопрос на всю глубину: большинство
стандартов в плане обнаружения ошибок не столь эффективны, как могли бы быть, из-за того, что
используется полином для контрольной суммы, однажды выбранный на этапе утверждения стандарта.
STM8S-Discovery. Теперь с
CAN-шиной
Наиболее яркий пример — стандарт на Ethernet-пакеты IEEE 802.3, который использует самый
популярный 32-разрядный полином, но в то же время, использование иных 32-разрядных полиномов
(CRC32C, CRC32K, etc) позволило бы достичь лучших показателей (в терминах HD) в различных
диапазонах длин передаваемых сообщений, посмотрим на таблицу:
ПОЛУЧАЙ
СТАТЬИ
на почту*
введите е-мейл
ПОДПИСАТЬСЯ
*дайджест статей рассылается
не чаще раза в неделю
Видно, что стандартный полином CRC32 на пакетах свыше 372 байт имеет HD=4, в то время как CRC32K
на пакетах до 2045 байт имеет HD=6, А если оперировать Jumbo-фреймами, то CRC32C на пакетах до 16
КБайт обеспечивает HD=4 (в то время как стандартный CRC32 обеспечивает HD=4 при длине пакета до
11,5 КБайт). Т.о. видно, что если есть возможность отойти от стандарта (например, создание своего
полностью кастомного оборудования для стандартных протоколов, которое работает только во
внутренней собственной инфраструктуре) следует воспользоваться этой возможностью — в случае
стандартного Ethernet можно сделать модификацию под какой-нибудь Industrial Ethernet
с CRC32C/CRC32K, снизив вероятность необнаружения ошибки или увеличив размер пакета по
отношению к стандартному, не снижая при этом имеющегося HD.
Мораль
Не только при конструировании новых протоколов обмена, но и при реализации стандартных полезно
сверяться прежде всего не со стандартами, а с работами, подобными Best CRC Polynomials, особенно
если специфике вашей работы свойственно выжимать максимум из возможного и где цена
необнаружения ошибки высока (Aerospace/Aircraft, Industrial, Automotive).
Следующим призывом будет там где это возможно писать на верилоге модули CRC, конфигурируемые не
параметрами, а в процессе работы (on-the- y). Это легко реализуется (в первую очередь — с
минимальными аппаратными затратами), если вычислять CRC через последовательную реализацию
(LFSR), а не по 4/8/N-бит за такт.
Тест на внимательность
В заголовке статьи использована картинка с LFSR, реализующим 24-битный CRC на verilog (из BLE), а не
CRC32 из IEEE 802.3 как могло показаться.
Литература
1. Philip Koopman, Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks
2. Блейхут Ричард. Теория и практика кодов, контролирующих ошибки [Theory and Practice of Error
Control Codes] — М.: Мир, 1986.
3. Richard W. Hamming. Error-detecting and error-correcting codes, Bell System Technical Journal
29(2):147-160, 1950.
Записи По Теме:
[opensource]: генератор аппаратного движка ECC и SECDED
CAN FD: ISO11898-1:2015 против Robert Bosh GmbH
[opensource]: Аппаратный криптодвижок ГОСТ 28147-89
[WiP][opensource]: Аппаратный криптодвижок ГОСТ P34.12-2015 aka «Кузнечик»
Как сделать ферму майнинга коинов на ASICах и не обанкротиться
checksum
collision
CRC-32C
CRC-32K
CRC32
Hamming distance
IEEE802.3
Industrial Protocol
Verilog
 Эффективное оборудование для майнинга коинов или не так страшен ASIC: особенности реализации
GitStats — замечательная статистика для git-репозитория 
ПОПУЛЯРНЫЕ ТЕМЫ
НОВЫЕ СТАТЬИ
НАВИГАЦИЯ
ASIC/FPGA
14
Сдвиг парадигмы «блогерства»
О блоге
Линукс
11
Каналы полезной информации и дайджест мира
ASIC/FPGA
Проекты
Электронные самоделки
8
Тех.Документация
7
Криптография
6
[WiP] Использование моста USB-to-SPI MCP2210 в
Линукс
GitStats — замечательная статистика для gitрепозитория
Оборудование
Генераторы
Все статьи
Блог 2020+
Скачать