2015-07-04 2 views
9

Существуют различные смарт-карты, поддерживающие ISO 14443-4. Например, Mifare Plus с собственным набором команд. Или другие карты с разными командами (т. Е. 7816-4 APDU).Как отличить различные карты ISO 14443-4?

Я разработал некоторое программное обеспечение для устройства чтения карт памяти, и мне нужно определить, какие команды поддерживает карта (например, если он поддерживает команды в структуре ISO 7816-4 или нет).

Каков рекомендуемый способ отличить их? Должен ли я просто попробовать некоторые команды из набора команд Mifare Plus и проверить, получаю ли я правильные ответы? Или есть более умный способ сделать это?

ответ

8

Во время протокола подключения меняются некоторые параметры, которые можно использовать для определения возможностей карты. Например, байт SAK будет информировать читателя, является ли карта ISO 14443-4, и даже если это MIFARE Plus (есть документ NXP, объясняющий, какие биты вы должны прочитать). Затем у вас есть ATS (Answer To Select), который содержит много полезной информации о карте. Взгляните на ISO 14443-4 и на ISO 7816-4.

+1

Да, я знаю это, но ATS можно изменить в карточках Mifare Plus, поэтому он не на 100% надежен. И я подозреваю, что могут существовать другие карты (не семейства Mifare), которые имеют тот же SAK. NXP рекомендует оценивать только бит 6 SAK, чтобы увидеть, поддерживает ли карта ISO 14443-4 и игнорировать другие биты. –

+1

Вероятно, лучшим способом будет реализация «прагматичного» подхода: сначала используйте SAK и ATS (так что вы охватите большинство карт), а также несколько тестовых команд для угловых случаев. Будет ли программное обеспечение вашего читателя поддерживать все общие карты Mifare Plus или только те, которые персонализированы для конкретного приложения или услуги? – mictter

+0

Думаю, этого будет достаточно, чтобы обрабатывать персонализированные, а также новые пустые карты для персонализации. –

2

Никогда не используйте ATQ! Используйте SAK только для карт без 14443-4 (например, Mifare Classic)! ATS также является плохой практикой, поскольку другой поставщик карт может устанавливать его по-разному.

Теперь, как это сделать:

Единственный способ, как думать о карте и не сойти с ума, это представить его, как это полный стек связи (см модель OSI).

Имейте в виду, что ваша цель - соединить два приложения: одно на карте и одно на вашем компьютере. 14443-4 предоставляет механизм для отправки сообщений и не заботится о его содержимом.

В дополнение к этому реализованы интерфейсы разных карт, и если обе стороны: card-carddriver совместимы, они будут общаться. Если нет, на этом уровне будут ошибки. Поэтому вы знаете, что вам нужно будет использовать другой драйвер карты.

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

Your Application 
    | CardProtocol/7816-4 
    | | 14443-4 
    | | | 14443 
    | | | | radio waves 
    | | | 14443 (in card) 
    | | 14443-4 (in card) 
    | CardProtocol/7816-4 (in card) 
    Application/Appdata (in card) 

Конечно между каждым слоем должен быть некоторый интерфейс.

Если у вас есть два приложения, которые хотят общаться, попробуйте один, а затем попробуйте секунд.

ошибка на уровне приложений => не совместимое приложение на карте

ошибка на уровне CardProtocol => есть не совместимая карта

Точка ваша связь должна succed на всех уровнях, так что не беспокоиться, чтобы попытаться связаться с картой с помощью несовместимого протокола - если вы (каким-то чудом) не получите ошибку на уровне CardProtocol, вы обязательно получите один на своем уровне приложения, и результат будет таким же. Удачи!

P.S. Есть еще несколько сложных ситуаций, таких как «одно приложение поверх двух протоколов/типов карт», но с ними также можно легко справляться.