Expertus metuit
Sergey Stolyarov | 2019-04-24 в 16:13

В 2017 году я написал статью Смарт-карты и программирование с примерами кода C/C++. Однако для обучения этот язык подходит плохо, поскольку предполагает достаточно низкоуровневое и многословное использование функций и данных, поэтому я решил сначала переписать все примеры на Java, однако в процессе пришлось значительно переосмыслить старый текст, обновить и переработать с учётом накопившегося опыта, ошибок и замечаний.

Статья 2017 «заморожена» и я не планирую её больше обновлять, однако вы можете её читать, если хотите понять, как всё работает на сравнительно низком уровне, где вручную нужно выделять и освобождать ресурсы, инициализировать буферы и так далее.

Это очень большой текст о смарт-картах и о том, как писать клиентский софт на Java для их использования. От вас требуется только знание Java, понимание базовых алгоритмов, структур данных и, собственно, смарткарты с терминалами. Все примеры ориентированы на unix-окружение, в первую очередь это linux и mac os x. Мобильные операционные системы не рассматриваются. Код, вероятно, работает в windows-окружении, однако я это не тестировал. Все примеры полностью независимы друг от друга и не используют никакие сторонние библиотеки или общие файлы.

Язык Java я выбрал по нескольким причинам. Во-первых, он достаточно высокого уровня и вы избавлены от ручного управления памятью. Во-вторых, в Java очень богатая стандартная библиотека. В третьих, Java как платформа работает на разных операционных системах практически одинаково, что очень упрощает процесс обучения. И самое главное, в штатной поставке платформы уже есть поддержка библиотеки для работы со смарт-картами. Я выбрал современную базовую версию SDK — 11 — и все примеры кода написаны с учётом работающих в этой версии фич (типа использования ключевого слова var для автоматического вывода типов).

❈ ❈ ❈

Для выполнения всех примеров кода вам нужен USB-терминал (ридер) для смарт-карт. В некоторых примерах можно использовать USB крипто-токен (eToken, yubico и т.п.), они используют тот же программный интерфейс.

Ещё в статье очень много новых англоязычных терминов, сокращений, ссылок на международные стандарты и спецификации. Слишком глубоко в детали я вдаваться не стану, но буду ссылаться на внешние документы. Очень желательно как минимум понимать английский, так как все оригинальные стандарты и спецификации написаны на нём.

Для более глубокого понимания вам нужно обязательно иметь под рукой упоминаемые стандарты. К сожалению, стандарты ISO/IEC недоступны для свободного скачивания, однако их при желании можно найти в интернете. Их официальные русские переводы (ГОСТ), однако, свободно доступны и ссылки на них вы найдёте в тексте.

Другие стандарты доступны для свободного скачивания и я тоже дам ссылки на них.

Sergey Stolyarov | 2017-03-10 в 12:54

Внимание. Данный текст — устарел, я написал новую статью Смарт-карты и программирование (java), где в качестве языка примеров используется Java, а не C/C++. Если вы хотите просто узнать о смарт-картах, то читайте новую статью.

В новом тексте исправлены ошибки, уточнены формулировки, а также добавлены новые примеры, например, работа с контактными картами памяти SLE5542. Кроме того, там теперь есть оглавление.

Это статья о смарт-картах и о том, как писать софт для работы с ними. Никакого опыта в предметной области от вас не требуется, только знание C и C++ для понимания примеров кода, а также базовых структур данных, битов, байтов, указателей, malloc/new/free/delete и так далее. Все примеры ориентированы на unix-окружение, в первую очередь это linux и mac os x. Windows и мобильные операционные системы не рассматриваются.

Для всех примеров кода вам нужен десктопный терминал-ридер для смарт-карт. Для некоторых примеров подойдёт USB-крипто-токен — они работают через тот же интерфейс, что и смарт-карты.

Ещё в этом тексте будет очень много новых англоязычных терминов, сокращений, ссылок на международные стандарты и спецификации. Слишком глубоко в детали я вдаваться не стану, но буду ссылаться на внешние документы.

Очень желательно знать английский язык, так как все оригинальные стандарты и спецификации написаны на нём.

Первые примеры будут на С — это язык библиотеки pcsc, а затем переключусь на C++11 и собственную библиотеку-обёртку над pcsc.

Примерный план статьи:

  • как подключиться к библиотеке;
  • как подключиться к терминалу;
  • базовые сведения об архитектуре PC/SC, терминология;
  • базовые сведения о коммуникации с картой;
  • несколько простейших примеров с картами;
  • работа с «тупыми» бесконтактными картами памяти Mifare;
  • более подробно о работе с микропроцессорными картами;
  • пример работы с банковской картой.
←новые старые→
© 2006—2019 Sergey Stolyarov | Работает на Pyrone