Установить собственные ключи аутентификации MiFare Classic с APDU C#

Я использую SMARTCARD API от CardWerk.

Как я могу изменить ключ по умолчанию ((byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF) используя APDU?

APDU состоит из КЛАССА, ИНСТРУКЦИИ, P1, P2. Я читал документацию, но я не могу найти, какие параметры мне нужны, чтобы изменить фактический ключ на новый.

1 ответ

Решение

Процесс смены ключей карты MIFARE Classic выглядит следующим образом:

  1. Аутентифицируйся на секреторе, для которого ты хочешь сменить ключ.
  2. Прочитайте трейлер сектора, используя обычную операцию чтения (или сгенерируйте новый трейлер сектора, содержащий нужные байты доступа). Трейлер сектора является последним блоком сектора (т.е. для MF Classic 1K, блок 3 каждого сектора).
  3. Заполните секторный трейлер новыми ключами. Обратите внимание, что вы не сможете прочитать текущие ключи на шаге 2, поэтому вам нужно заполнить клавишу A и клавишу B (если они есть), даже если вы хотите, чтобы они оставались такими же, как и раньше!)
  4. Напишите секторный трейлер, используя обычную операцию записи.
  5. Выполните аутентификацию в другом секторе (если вы хотите, чтобы изменение вступило в силу немедленно).

Секторный трейлер отформатирован так:

xx xx xx xx xx xx zz zz zz gg yy yy yy yy yy yy

куда xx xx xx xx xx xx является ключом А, yy yy yy yy yy yy является ключом B и zz zz zz являются байтами доступа, которые обеспечивают права доступа на основе ключей. gg является байтом общего назначения без какого-либо специального значения, если только вы не используете каталог приложения MIFARE или отображение NDEF NXP для использования MIFARE Classic в качестве тега NFC).

Имейте в виду, что установка байтов доступа к недопустимому значению сделает карту недоступной!

Пример сектора трейлера может выглядеть так:

FF FF FF FF FF FF 78 77 88 00 FF FF FF FF FF FF

Условия доступа означают, что вы можете читать с помощью клавиши A и читать / писать с помощью клавиши B.

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

Однако, если ваш ридер поддерживает команды PC/SC 2.01 для карт памяти, команды могут выглядеть так:

  1. Загрузить ключ xxxxxxxxxxxx для ключевого слота 0 (в зависимости от вашего считывателя вам может понадобиться кодировать другой номер слота в P2; не забудьте адаптировать команду authenticate в этом случае):

    FF 82 2000 06 xxxxxxxxxxxx
    
  2. Аутентифицировать сектор 0, используя этот ключ в качестве ключа A:

    FF 86 0000 05 01 0000 60 00
    
  3. Или аутентифицируйте сектор 0, используя этот ключ в качестве ключа B:

    FF 86 0000 05 01 0000 61 00
    
  4. Написать новый сектор трейлера для сектора 0 (в блоке 3):

    FF D6 0003 10 xxxxxxxxxxxx zzzzzz gg yyyyyyyyyyyy
    
Другие вопросы по тегам