Задать вопрос
GloooM
@GloooM

Реверс протокола шифрования в закрытом устройстве. Возможно ли?

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

Реализовано таким образом, что первое устройство при попытке включения отправляет некую, судя по всему рандомную последовательность вида «43 50 47 9d e0 d1 21 8e» во второе устройство, которое в свою очередь преобразовывает её в «66 e8 f4 4f a0 d8 de 71» и работа разрешается. Видимо первое устройство сравнивает с заранее известным ему результатом. Алгоритм преобразования всегда дает одни и те-же ответы на выходе при одинаковых запросах, во времени не меняется.
Сами рфид метки считанные вторым устройством на алгоритм шифрования тоже не влияют, любая считанная метка приводит к шифрованию одним алгоритмом. Но алгоритм меняется каждый раз при обучении меток и судя по всему устройства 1 и 2 обмениваются неким ключом во время этой сервисной процедуры, дабы потом работать в паре.

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

Путем не хитрого анализа удалось самому понять, что из 8 байт, последние 2 в ответе являются просто инвертированными последними двумя байтами запроса и от ключа шифрования не меняются. Соответственно остается 6 байт для анализа.

Для предположительного ключа «30 95 ca 3b c8 98 5e 84»
Пары выглядят так:
Вход: 00 00 00 00 00 00
Выход: 62 1e af 7c da 27

Вход: 01 00 00 00 00
Выход: dd 3e 53 d6 50 05

Для ключа «39 72 98 4e 69 4a 6b af»
Вход: 00 00 00 00 00 00
Выход: 2d c2 cb 75 4e ec

Вход: 01 00 00 00 00 00
Выход: 2d d1 32 2c e4 69

Из наблюдений, первые 4 байта похоже шифруются отдельным блоком, и на их результат не влияют 5 и 6 байт в запросе. При изменении 5 и 6 байтов в запросе, в ответе меняются тоже только 5 и 6 байты, но при изменении первых 4 в запросе, 5 и 6 тоже меняются в ответе. В общем шифрование 5 и 6 байта похоже зависят от результатов шифрования первых четырех.

Возможно ли вообще по этим параметрам определить алгоритм шифрования? Или это гиблое занятие если нет доступа к прошивке? Может быть это некий общеизвестный алгоритм? Микроконтроллер во втором устройстве, которое занимается шифрованием — PIC16.
  • Вопрос задан
  • 3625 просмотров
Подписаться 2 Оценить Комментировать
Ответ пользователя hijaq К ответам на вопрос (4)
@hijaq
Конечно залочен, но на сколько я знаю, это не составляет больших проблем. Во всяком случае с PIC16 снимается 100%.
Ответ написан