Вопрос или проблема
Я успешно аутентифицировался с помощью DES и смог изменить ключ на своей карте. Ниже приведены детали:
Старый ключ: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Новый ключ: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
После успешной аутентификации с использованием 0x0A и изменения ключа, у меня возникли проблемы при попытке совместить циклический nonce считывателя с расшифрованным ответом после аутентификации с карты.
Вот поток данных:
Запрос данных: {длина = 7, байты = 0x901a0000010000}
Ответные данные: {длина = 10, байты = 0xace4f80c25bd82d891af}
Ответ: AC E4 F8 0C 25 BD 82 D8 91 AF
Извлеченный ответ: AC E4 F8 0C 25 BD 82 D8
Nonce карты (rndB): 5C AC 17 98 90 01 E5 12
Циклический nonce (rndBr): AC 17 98 90 01 E5 12 5C
Вот значения открытого текста и шифрованного текста для моего шага шифрования:
Открытый текст: FF 88 3B C1 EF 06 38 97 AC 17 98 90 01 E5 12 5C
Шифрованный текст: 64 B3 6E 44 C3 0E E7 79 98 AE 2F 3F A4 5F D8 D7 D5 3F FB D6 46 D1 0A BB
Вот что я отправляю на следующем шаге:
Запрос данных: {длина = 22, байты = 0x90af00001064b36e44c30ee77998ae2f3fa45fd8d700}
Ответные данные: {длина = 10, байты = 0xce9c95f4960ff4969100}
Ответ: CE 9C 95 F4 96 0F F4 96 91 00
Значения nonce, с которыми я работаю:
Nonce считывателя с карты (rndA2): 84 F4 6D E2 F5 1F E5 97
Исходный nonce A (rndA): FF 88 3B C1 EF 06 38 97
Ответ или решение
Проблема, с которой вы столкнулись, связана с синхронизацией между карточкой и считывателем после изменения ключа и успешной аутентификации. Давайте рассмотрим основные моменты, которые могут привести к ситуации, когда аутентификация с использованием DES проходит успешно, но не удается сопоставить вращённый нонс (nonce) считывателя с расшифрованным ответом от карточки.
Анализ проблемы
-
Смена ключа: Вы упомянули, что сменили ключ с
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
на00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
. Эта операция должна быть выполнена корректно, однако стоит удостовериться, что вы правильно применили новый ключ для всех криптографических операций после её установки. -
Вращение на нонс: После аутентификации генерируется nonce с использованием значений с 카드 и считывателя. Обратите внимание на порядок, в котором вы обмениваетесь значениями. В вашем случае вращённый нонс (rndBr) был успешно извлечён, что является хорошим знаком.
-
Значение и длина запросов и ответов: Убедитесь, что длина передаваемых данных соответствует указанным значениям. Вы указали, что первый запрос имел длину 7, а ответ длился 10 байтов. Это может создавать несоответствие, если считыватель не ожидает правильного количества байтов.
Возможные причины несовпадения
-
Неправильный порядок байтов: Возможно, вы неправильно обрабатываете порядок байтов при создании и расшифровке данных. Убедитесь, что все байты передаются в правильном порядке, соответствующем спецификациям Mifare.
-
Ошибка в расшифровке: Проверьте, что вы корректно применяете алгоритм DES с новым ключом к входным данным. Особенно обратите внимание на то, как вы формировали
PlainText
для шифрования. Он должен включать верные значения nonce, а не старые. -
Некорректные данные для аутентификации: Проверьте, что данные, которые вы используете для аутентификации после смены ключа, корректны и соответствуют ожиданиям устройства.
Рекомендации по отладке
-
Логгирование всех промежуточных значений: Введите ведение журнала всех промежуточных значений, которые вы используете в процессе аутентификации и при шифровании. Это поможет вам более детально понять, где происходит ошибка.
-
Проверка всех переходов состояний: Убедитесь, что вы правильно переходите от одного состояния к другому, особенно после смены ключа. Каждое состояние должно сопровождаться корректным использованием текущего ключа.
-
Тестирование с известными данными: Попробуйте получить известные рабочие значения для проверок, чтобы убедиться, что ваш процесс шифрования и расшифрования действительно работает, как ожидалось.
Заключение
Если вы выполните указанные шаги, это должно помочь выявить и устранить проблемы, связанные с несоответствием вращённого nonce и расшифрованного ответа. Правильная синхронизация между карточкой и считывателем, а также корректная работа алгоритмов шифрования являются ключом к успешной аутентификации. Если проблема всё ещё не решится, рассмотрите возможность выполнения серийного анализа всех передаваемых данных для более глубокого понимания проблемы.