Как я мог угадать алгоритм контрольной суммы?

Предположим, у меня есть несколько пакетов с 16-битной контрольной суммой в конце. Я хотел бы угадать, какой алгоритм контрольной суммы используется.

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

Затем я попробовал несколько вариантов CRC16, но без особого успеха.

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

Предыстория: у меня есть серийный протокол RFID с какой-то контрольной суммой. Я могу без проблем воспроизводить сообщения и интерпретировать результаты (без проверки контрольной суммы), но я не могу отправлять измененные пакеты, потому что устройство сбрасывает их на пол.

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

дамп файлов с данными доступны, если самого вопроса недостаточно :-)

Нужна справочная документация?БЕЗБОЛЕЗНЕННОЕ РУКОВОДСТВО ПО АЛГОРИТМАМ ОБНАРУЖЕНИЯ ОШИБОК CRC - отличная ссылка, которую я нашел, задав вопрос здесь.

В конце концов, после очень полезной подсказки в принятом ответе, чем CCITT, я использовал этот калькулятор CRC и xored сгенерировали контрольную сумму с известной контрольной суммой, чтобы получить 0xffff, что привело меня к выводу, что окончательный xor равен 0xffff в потоке CCITT 0x0000.

Можете ли вы получить контрольные суммы для любых данных?

Mike F 29.09.2008 20:59

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

dpavlin 29.09.2008 21:14

Стандарт CCITT определяет XOR с 0x0000? Разве это не всегда запрет?

unwind 20.10.2008 12:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
3
15 724
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Я действительно не понимаю, зачем кому-то это знать.

Я понимаю, зачем кому-то это нужно - если они проводят обратную разработку формата файла для создания этих файлов. Я сделал это.

Paul Tomblin 29.09.2008 21:04

Правильный. У меня есть серийный протокол RFID с какой-то контрольной суммой. Я могу без проблем воспроизводить сообщения и интерпретировать результаты (без проверки контрольной суммы), но я не могу отправлять измененные пакеты, потому что устройство сбрасывает их на пол.

dpavlin 29.09.2008 21:06

Это может быть не CRC, это может быть код с исправлением ошибок, например код Рида-Соломона.

Коды ECC часто составляют значительную часть размера исходных данных, которые они защищают, в зависимости от частоты ошибок, которые они хотят обработать. Если размер сообщений превышает примерно 16 байт, 2 байта ECC будет недостаточно, чтобы быть полезными. Так что, если сообщение большое, вы, скорее всего, правы, что это своего рода CRC.

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

dpavlin 29.09.2008 21:20

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

dpavlin 29.09.2008 21:23
Ответ принят как подходящий

Для CRC необходимо учитывать ряд переменных:

Polynomial
No of bits (16 or 32)
Normal (LSB first) or Reverse (MSB first)
Initial value
How the final value is manipulated (e.g. subtracted from 0xffff), or is a constant value

Типичные CRC:

LRC:    Polynomial=0x81; 8 bits; Normal; Initial=0; Final=as calculated
CRC16:  Polynomial=0xa001; 16 bits; Normal; Initial=0; Final=as calculated
CCITT:  Polynomial=0x1021; 16 bits; reverse; Initial=0xffff; Final=0x1d0f
Xmodem: Polynomial=0x1021; 16 bits; reverse; Initial=0; Final=0x1d0f
CRC32:  Polynomial=0xebd88320; 32 bits; Normal; Initial=0xffffffff; Final=inverted value
ZIP32:  Polynomial=0x04c11db7; 32 bits; Normal; Initial=0xffffffff; Final=as calculated

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

Это "самодельный" алгоритм. В этом случае это может занять некоторое время. В противном случае попробуйте стандартные алгоритмы.

Попробуйте изменить старший или младший бит последнего байта и посмотрите, как это изменит CRC. Это укажет направление.

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

Из вашего комментария о RFID следует, что CRC имеет отношение к коммуникации. Обычно для связи используется CRC16, хотя CCITT также используется в некоторых системах.

С другой стороны, если это UHF RFID-метка, то есть несколько схем CRC - 5-битная и несколько 16-битных. Они задокументированы в стандартах ISO и технических паспортах IPX.

IPX:  Polynomial=0x8005; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6B: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6C: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
    Data must be padded with zeroes to make a multiple of 8 bits
ISO CRC5: Polynomial=custom; 5 bits; Reverse; Initial=0x9; Final=shifted left by 3 bits
    Data must be padded with zeroes to make a multiple of 8 bits
EPC class 1: Polynomial=custom 0x1021; 16 bits; Reverse; Initial=0xffff; Final=post processing of 16 zero bits

Вот вам ответ !!!!

Проработав ваши журналы, CRC является CCITT. Первый байт 0xd6 исключается из CRC.

Я медленно теряю волосы (снова). Я пытался использовать CCITT со своими данными, но у меня это не работает. Можете ли вы поделиться фрагментом реализации и / или воспроизвести CRC на zorc.breitbandkatze.de/crc.html или lammertbies.nl/comm/info/crc-calculation.html

dpavlin 03.10.2008 00:09

Не обращайте на меня внимания, окончательный xor равен 0xffff, а не 0x0000, как с ccitt ... Я сравнил контрольную сумму ccitt с самой контрольной суммой, и это привело меня в правильном направлении ...

dpavlin 03.10.2008 00:39

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

Сайт https://defuse.ca/checksums.htm

есть ли один, который может пойти другим путем, когда это возможно?

CQM 26.03.2017 12:53

Другие вопросы по теме