В чем разница между APDU ISO 14443-3 и ISO 7816-4? Я спрашиваю об этом, потому что кажется, что некоторые карты используют первый для связи с ридером, некоторые второй. Я смущен этим, хотел бы получить хорошее представление об этом. Например, я думаю, что Mifare Classic использует ISO 14443-3. Но что меня здесь смутило, так это то, что когда я писал приложение для связи с Mifare classic, я отправлял ему APDU.
Стандарты связи со смарт-картами
Ответы (2)
Стандарт ISO 14443 определяет физический транспортный протокол RF для связи между картой и считывателем (см., например, http://www.openpcd.org/ISO14443 для краткого обзора). Он стандартизирует такие вещи, как использование битов четности, алгоритмы CRC, размер кадра, механизм подтверждения и т. д. По сути, определены 2 различных типа связи: тип A и тип B. Причина этого во многом историческая: существовали разные виды продукты на рынке до определения стандарта, которые более или менее соответствуют типу А и типу В в части 3 стандарта ISO 14443.
Часть 4 стандарта по существу определяет коммуникационный уровень, поверх которого становится возможным общий тип связи. Обычно это ISO 7816-4, хотя существуют бесконтактные карты (например, MIFARE DESFire и MIFARE Plus), которые (также) вместо этого используют собственную структуру команд.
ISO 7816 — это набор стандартов контактных смарт-карт. Часть 4 стандартизирует формат команд-ответов и ряд команд: APDU. Это создает ситуацию, когда с программной точки зрения нет реальной разницы между общением с помощью контактного считывателя смарт-карт и бесконтактного. В обоих случаях программное обеспечение может использовать APDU для связи со смарт-картой. Так много программных библиотек, реализующих поддержку считывателя смарт-карт, используют APDU в качестве основного модуля связи с картой.
Это очень удобно, за исключением того факта, что некоторые популярные бесконтактные карты, такие как MIFARE Classic, не понимают APDU (так как они даже не поддерживают ISO 14443-4). Поэтому производители бесконтактных считывателей карт создали своего рода «виртуальный» формат APDU (с использованием проприетарного байта класса в APDU) для решения этой проблемы. Микропрограмма кард-ридера (или драйвер на ПК) перехватывает C-APDU и переводит их в соответствующую команду MIFARE Classic, а ответ карты переводит в R-APDU. Таким образом, разработчики программного обеспечения могут использовать свою предпочитаемую коммуникационную библиотеку смарт-карт и по-прежнему взаимодействовать с картами MIFARE Classic.
Карты MIFARE DESFire предлагают аналогичный механизм, но на самом деле именно карта управляет трансляцией APDU из собственного набора команд и в него. Это возможно, потому что карта использует связь ISO 14443-4.
Хорошая инфографика, показывающая множество стандартов и спецификаций бесконтактных смарт-карт и NFC по отношению друг к другу, можно найти по адресу http://open-nfc.org/documents/PRE_NFC_0804-250%20NFC%20Standards.pdf
Обзор других стандартов смарт-карт см., например. http://www.smartcardbasics.com/smart-card-standards.html. Этот вопрос также может содержать соответствующую информацию.
На самом деле 14443-3 соответствует 7816-3, потому что здесь мы говорим о проблемах протокола. Карты Mifare (как простые карты памяти) не понимают APDU. Чтобы вообще обращаться к ним через PCSC, драйверы считывателей предлагают APDU (которые не стандартизированы и поэтому могут различаться для разных марок считывателей). Они не передаются на карту, а выбираются и интерпретируются считывателем или его драйвером. Существует также семейство смарт-карт, понимающих настоящие APDU на основе 14443 и использующих протокол T-CL, как проездные документы, соответствующие требованиям ИКАО.