Какие методы я могу использовать, чтобы проанализировать и угадать 4-битный алгоритм контрольной суммы? - PullRequest
5 голосов
/ 03 мая 2011

[История вопроса]

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

У меня есть доступк списку существующих идентификаторов, которые уже имеют правильные контрольные суммы.Кроме того, поскольку контрольная сумма имеет только 16 возможных значений, я могу создать любой желаемый идентификатор и запустить его через систему аутентификации до 16 раз, пока не получу правильную контрольную сумму (но это довольно много времени)

[Вопрос]

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

Поэтому мой вопрос: если у меня есть данные (в шестнадцатеричном формате), например:

data        checksum
00029921    1
00013481    B
00026001    3
00004541    8

Какие методы я могу использовать, чтобы определить, какую контрольную сумму использовать?то есть я должен попробовать последовательные числа, такие как 00029921,00029922,00029923, ... или 00029911,00029921,00029931, ... Если я сделаю это, какие шаблоны я должен искать в изменяющейся контрольной сумме?

Аналогично,Скажет ли мне что-нибудь полезное о контрольной сумме при сравнении помененных цифр?т.е. 00013481 и 00031481

Есть ли что-нибудь еще, что могло бы сказать мне что-то полезное?Как насчет инвертирования одного бита или, возможно, одной шестнадцатеричной цифры?

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

stackoverflow.com / questions / 149617Алгоритм / как я мог угадать контрольную сумму stackoverflow.com / вопросы / 2896753 / найти алгоритм, который генерирует контрольную сумму cosc.canterbury.ac.nz / greg.ewing / essays / CRC-Reverse-Engineering.html

[ОТВЕТ]

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

data:

00024901 A
00024911 B
00024921 C
00024931 D
00042811 A
00042871 0
00042881 1
00042891 2
00042901 A
00042921 C
00042961 0
00042971 1
00042981 2
00043021 4
00043031 5
00043041 6
00043051 7
00043061 8
00043071 9
00043081 A
00043101 3
00043111 4
00043121 5
00043141 7
00043151 8
00043161 9
00043171 A
00044291 E

Из них я мог видеть, что при увеличении только одного значения назначение, контрольная сумма также была увеличена на то же значение, что и в:

00024901 A
00024911 B

Кроме того, замена двух цифр не изменила контрольную сумму:

00024901 A
00042901 A

Это означает, что значение многочлена (как минимум для этих двух позиций) должно быть одинаковым

Наконец, контрольная сумма для 00000000 была A, поэтому я вычислил сумму цифр плюс A mod 16:
((Σx i ) + 0xA) mod16
И этосоответствует всем ценностям, которые у меня были.Просто чтобы убедиться, что с первыми 3 цифрами, которые никогда не менялись в моих данных, не было ничего подлого, я придумал и проверил некоторые цифры, как предложил Эрик, и все они тоже с этим работали!

1 Ответ

8 голосов
/ 03 мая 2011

Многие контрольные суммы, которые я видел, используют простые взвешенные значения, основанные на положении цифр. Например, если веса равны 3,5,7, контрольная сумма может быть 3 * c [0] + 5 * c [1] + 7 * c [2], тогда mod 10 для результата. (В вашем случае мод 16, так как у вас есть 4-битная контрольная сумма)

Чтобы проверить, так ли это, я предлагаю вам ввести в систему несколько простых значений, чтобы получить ответ:

1000000 = ?
0100000 = ?
0010000 = ?

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

...