Установить собственные ключи аутентификации 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 выглядит следующим образом:
- Аутентифицируйся на секреторе, для которого ты хочешь сменить ключ.
- Прочитайте трейлер сектора, используя обычную операцию чтения (или сгенерируйте новый трейлер сектора, содержащий нужные байты доступа). Трейлер сектора является последним блоком сектора (т.е. для MF Classic 1K, блок 3 каждого сектора).
- Заполните секторный трейлер новыми ключами. Обратите внимание, что вы не сможете прочитать текущие ключи на шаге 2, поэтому вам нужно заполнить клавишу A и клавишу B (если они есть), даже если вы хотите, чтобы они оставались такими же, как и раньше!)
- Напишите секторный трейлер, используя обычную операцию записи.
- Выполните аутентификацию в другом секторе (если вы хотите, чтобы изменение вступило в силу немедленно).
Секторный трейлер отформатирован так:
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 для карт памяти, команды могут выглядеть так:
Загрузить ключ
xxxxxxxxxxxx
для ключевого слота 0 (в зависимости от вашего считывателя вам может понадобиться кодировать другой номер слота в P2; не забудьте адаптировать команду authenticate в этом случае):FF 82 2000 06 xxxxxxxxxxxx
Аутентифицировать сектор 0, используя этот ключ в качестве ключа A:
FF 86 0000 05 01 0000 60 00
Или аутентифицируйте сектор 0, используя этот ключ в качестве ключа B:
FF 86 0000 05 01 0000 61 00
Написать новый сектор трейлера для сектора 0 (в блоке 3):
FF D6 0003 10 xxxxxxxxxxxx zzzzzz gg yyyyyyyyyyyy