Как работает память на смарт-карте и как получить доступ к уникальному идентификатору карты цифрового тахографа

Для моей первой стажировки я должен сделать кое-что потрясающее с европейскими считывателями тахографов.

Вкратце: я должен использовать устройство чтения смарт-карт, чтобы прочитать контактную (не радио-смарт-карту) карту компании ISO 7816, чтобы прочитать уникальный идентификатор этой карты. Ничего больше. Затем я должен отправить этот идентификатор вместе с ответом на сброс куда-то еще, где он обрабатывается, отвечает, а затем некоторые данные говорят вверх и вниз.

Там нет кода, я должен собрать все, включая сервер, где-то в будущем. Сейчас я сосредоточусь на карточной части. Я начал с нуля, и меня попросили использовать для этого C#. Я использую библиотеку PCSC-lite в Linux и уже могу взаимодействовать с картой. Я могу получить коды ответа на сброс и могу сделать некоторые другие вещи со смарт-картой, которые не важны для моего вопроса. Я также прочитал большинство спецификаций ISO 7816. Особенно то, что казалось мне важным. Мой код считывает ответы и проверяет, что такое sw1 и sw2. Так что я могу читать отладочную информацию. Так что я хотел бы думать, что я, по крайней мере, охватил некоторые основы ...

Я единственный в компании, кто может это делать.. Или должен уметь это делать. И я на последнем издыхании.

Может кто-нибудь, у кого есть опыт в этой области. Объясните мне простыми словами:

<сильный>1. Как устроена память на такой карте

<сильный>2. Как получить доступ к памяти

<сильный>3. Какие APDU и в каком порядке их отправлять, чтобы получить уникальный идентификатор карты (или указать мне направление, где я могу найти карту памяти или что-то в этом роде)

Что касается первого вопроса, я конкретно имею в виду: я знаю, что структура данных, похоже, работает с EF, которые мне нужно выбрать, а затем попытаться извлечь данные, используя правильные apdu. Но я не очень понимаю, как это работает или как строится структура памяти. Я читал файлы ISO, но они для меня немного сложны. Может быть, если мне помогут, я лучше их пойму.

Во втором вопросе я конкретно имею в виду: при нормальных обстоятельствах, какие Apdu и в каком порядке я должен их отправлять, чтобы получить доступ к части памяти.

Я уже много читал о переполнении стека по этому вопросу, но не смог найти ответ, который сработал для меня.

Я навсегда буду у вас в долгу, и вы помогли студенту, если вы так любезны ответить на мой вопрос :)

  • Оскар

person Oscar K    schedule 09.02.2021    source источник


Ответы (1)


Не уверен, понимаю ли я ваш вопрос (а со смарт-картами работаю много лет). На смарт-карте на основе файловой системы нет свободно плавающей доступной памяти (в отличие от тупых карт памяти, таких как SLE44), вы можете получить к ней доступ только через файлы (в данном случае EF). Хотя в принципе можно создавать новые файлы, для реальных карт требуется специальная аутентификация, и вряд ли у вас есть ключи для них.

Какие файлы уже существуют (и какие данные хранятся в какой записи/смещении/объекте данных) указано в спецификации, в вашем случае в одной из спецификаций найти здесь. Используемая спецификация имеет важное значение, поскольку сама карта может поддерживать множество приложений, и тахограф — лишь одно из них. Как только вы узнаете, где находятся данные, вы должны создать соответствующие команды SELECT / READ RECORD / READ BINARY.

person guidot    schedule 10.02.2021
comment
Вы сказали, что можете не понимать моих вопросов, но, вероятно, вы направили меня в правильном направлении. Большое тебе спасибо. Я вернусь к вам! :) - person Oscar K; 10.02.2021
comment
Быстрый дополнительный вопрос. Так как вы много работали со смарт-картами. Страница 102-103 ISO 7816-4 говорит мне, что так называемые исторические байты содержат уникальный идентификатор. Правильно ли я понимаю, что исторические байты - это те, которые также отправляются в ATR? Если это так, мне не нужно читать какую-либо память или использовать EF. Мне просто нужно однозначно идентифицировать карту, которая была вставлена ​​в ридер. - person Oscar K; 10.02.2021
comment
Я бы не стал полагаться на что-либо, не охваченное спецификацией. Любой другой идентификатор, предоставленный картой или операционной системой, может: а) не быть уникальным; б) вероятно, будет отличаться от идентификатора карты, который вам, вероятно, понадобится. - person guidot; 10.02.2021