Как отправить APDU на карту Mifare Classic 1k?

То, чего я пытаюсь добиться, это отправить команду APDU на карту MIFARE Classic 1K, чтобы изменить ее клавиши A и B.

Мне удалось установить соединение с картой и использовать ключ по умолчанию (FFFFFFFFFFFF), чтобы прочитать блок 0 и блок 1. Я использовал приложение HID MifareSamples для него.

Теперь я хотел бы изменить ключ A по умолчанию на что-то другое. Я нашел решение здесь, в stackru ( MIFare Change KEY A и B), которое предполагает, что я должен отправить этот APDU:

Новый ключ A = 00 11 22 33 44 55 Биты доступа не перезаписаны. Ключ B не используется (поэтому FF FF FF FF FF FF)

=> Написать в сектор трейлера 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF FF

Я нашел хороший инструмент JSmartCard Explorer, который позволяет отправлять APDU на карты. Затем я прочитал спецификацию PCSC 3.2.2.1.4 Глава "Команда загрузки ключей" и понял, что команда должна выглядеть примерно так:

FF 82 00 00 18 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF

Но, к сожалению, инструмент JSmartCard не работает с "Команда не разрешена (без текущей EF)".

Что я делаю не так? Как я могу изменить ключ?

1 ответ

Прежде всего, карты MIFARE Classic не используют команды APDU. Следовательно, вы отправляете APDU не на карту, а на устройство чтения карт (которое переводит их в команды MIFARE Classic). Команды APDU, обрабатываемые читателем, обычно начинаются с байта класса FF,

В картах MIFARE Classic ключи (A и B) и условия доступа для каждого сектора хранятся в трейлере секторов (последний блок каждого сектора). Карта MIFARE Classic 1K имеет 16 секторов по 4 блока в каждом.

Поэтому, если вы хотите установить ключи и условия доступа для сектора 0, вам необходимо записать их в блок 3 (последний блок сектора 0). Стандарт PC/SC определяет команду записи (UPDATE BINARY) для карт памяти как:

FF D6 XXYY 10 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

куда XXYY адрес блока и ZZ... это данные, которые будут записаны в блок.

Формат сектора трейлера (см. Этот ответ для более подробной информации):

<key A> | access bits | general purpose byte | <key B>

Итак, чтобы установить

  • ключ A = 00 11 22 33 44 55
  • ключ B = 66 77 88 99 AA BB
  • биты доступа = 787788 (трейлер сектора доступен для записи только с помощью ключа B; биты доступа /GPB могут быть прочитаны с помощью ключа A или B; блоки данных могут быть записаны с использованием только ключа B; блоки данных могут быть прочитаны с помощью ключа A или B)
  • GPB установлен в 69

для сектора 0 вы должны использовать следующую команду записи:

FF D6 0003 10 001122334455 787788 69 66778899AABB

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

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