среда, 20 мая 2015 г.

Хранение кодовой фразы в NFC-картах Mifare Classic Ultralight, 1K, 4K для картридеров ACR122, ACR1251

Кодовая фраза, состоящая из шести байт, хранится на NFC-картах (например, Mifare Classic 1K, ) вместе с секторами данных. Перед записью блока на карту или чтением c карты нужно пройти аутентификацию для доступа к сектору, содержащему указанный блок. Это справедливо для карт Mifare Classic 1K, 4K. Для самой простой и наименьшей по объему хранения данных карты Mifare Classic Ultralight аутентификация не нужна, доступ на запись и чтение к блоку данных её не требует.

Для карты Mifare Classic 1K каждый сектор состоит из четырех блоков: три блока данных (data block) и один дополнительный блок (trailer block). В этом блоке хранится информация для проверки доступа к блокам сектора. Описание (datasheet) карты хранения памяти (memory map) в картах Mifare Classic 1K можно посмотреть здесь.

В картридере ACR122 нет энергонезависимой памяти для хранения ключей доступа к картам для проверки. Перед работой с картами 6-байтный ключ должен быть загружен при помощи функции Load Authentication Keys APDU Format (11 bytes). Например, для дефолтного ключа FF FF FF FF FF FF с загрузкой в энергозависимую область хранения картридера с адресом 0x00 APDU-структура (записываемая в картридер команда) имеет следующий вид {FF 82 00 00h 06 FF FF FF FF FF FFh}. Затем перед доступом на чтение или запись к определенному блоку карты нужно пройти аутентификацию при помощи вызова одного из двух вариантов функции Load Authentication Keys APDU Format (6 Bytes) или (10 Bytes). Рассмотрим пример вызова функции (6 Bytes). Для аутентификации доступа к блоку 04h будем использовать тип ключа A (Type A) 60h, загруженный в область 00h. APDU-структура имеет следующий вид {FF 88 00 04 60 00h}. Теперь можно, например, прочитать 16-байтовый блок с адресом 04h при помощи функции Read Binary APDU Format (5 Bytes) APDU = {FF B0 00 04 10h}. Описание API работы картридера ACR122 можно посмотреть здесь.

Картридер ACR1251, в отличии от ACR122, имеет встроенную энергонезависимую память для хранения до 32 ключей для доступа к секторам карт. Описание API работы картридера ACR1251 можно скачать отсюда.

Для работы с картридером используется API проекта pcsc-lite, doxygen-документацию по которому можно найти на сайте проекта https://pcsclite.alioth.debian.org/api/.

Интересная статья про уязвимости карт Mifare Classic 1K http://habrahabr.ru/post/141213/.

Дополнительный материал:
1) MIFARE Ultralight datasheet
2) MIFARE Classic EV1 1K datasheet

Комментариев нет:

Отправить комментарий