Связь NFC - Mifare Desfire AES - команда смены ключа
Я использую HID Omnikey 5321 для связи с тэгом Mifare DESFire EV1. Я использую WinSCard DLL (в C++), чтобы обернуть собственную команду DESFire в структуру сообщения ISO 7816 APDU. На теге у меня есть приложение с 3 ключами. Поскольку настройки ключа установлены на 0x0B, я аутентифицируюсь с главным ключом приложения, чтобы изменить значения ключей.
Мне удается изменить главный ключ приложения, но не ключи 1 и 2.
После AES-аутентификации с помощью главного ключа приложения я пытаюсь изменить ключ 2:
Old Key 2 = 00...00
New Key 2 = 22...22
Я рассчитываю CRC по (Старый ключ 2) XOR (Новый ключ 2)
CRCxor = F1 4A D1 C0
Я рассчитываю CRC над Native Command
Native Command = C4 02 (New Key 2)
CRCnc = C9 1F 03 80
Затем я шифрую с ключом сеанса и IV установлен в 00
32 bytes data to encipher : (New Key 2 XOR Old Key 2) (CRCxor) (CRCnc) 00...00
APDU отправлено
90 C4 00 00 21 02 (enciphered data) 00
В ответ я получаю код состояния "1E", который означает CRC или ошибку заполнения.
Я также пытаюсь без XORing данных. Я просто добавляю CRC, вычисленный по Native Command, как я сделал, чтобы успешно изменить мастер-ключ, но у меня все еще та же ошибка.
Я не знаю, где проблема.
1 ответ
Это всего лишь мысль, но если код вашего приложения написан на Python, убедитесь, что вы последовательно используете списки и байтовые массивы. Возможно, вы не передаете своему PCD те данные, которые, по вашему мнению, у вас есть.