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 | 2018-12-05 в 14:23

Здесь описывается как конвертировать HDD в виртуалбокс с fixed на dynamic и наоборот. По мотивам вот этой статьи https://www.howtogeek.com/312456/how-to-convert-between-fixed-and-dynamic-disks-in-virtualbox/.

Традиционный дисклеймер: linux, command line only.

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

Sergey Stolyarov | 2018-09-27 в 10:00

GnuTLS — это программная библиотека для работы с SSL/TLS и сертификатами. Она может примерно то же, что и openssl, но разрабатывается независимо. Аналогично в составе gnutls есть набор консольных программ для работы с сертификатами, протоколами и прочими данными: certtool, gnutls-serv, gnutls-cli и т.д.

В плане работы с файлами сертификатов, ключей и CSR-запросов утилиты gnutls умеют делать практически то же самое, что и бинарник openssl. В этой статье я детально опишу типичные сценарии использования: создание ключей, сертификатов, запросов на сертификат, подписывание сертификатов.

Другие мои статьи на эту тему, но на базе openssl:

Certtool входит в состав gnutls и в debian/ubuntu ставится командой:

$ sudo apt install gnutls-bin

На макоси gnutls ставится через Homebrew:

$ brew install gnutls
Sergey Stolyarov | 2018-09-14 в 11:23

С какой-то из версий freetype опять разломали отображение шрифтов и они снова стали выглядеть размыто и нечётко.

Единственный способ глобально исправить — это прописать вот такое в файл /etc/environment:

FREETYPE_PROPERTIES="truetype:interpreter-version=35"

Это заставляет freetype использовать указанную версию интерпретатора, в этой версии шрифты рисуются нормально.

Sergey Stolyarov | 2018-03-27 в 10:56

Эта статья о том, как настроить зашифрованное (SSL) RDP-подключение к виртуалкам на VirtualBox. В качестве гостевой системы используется Linux (Debian/Ubuntu). Базовая документация, на основе которой написана статья: https://www.virtualbox.org/manual/ch07.html.

У VirtualBox есть возможность подключаться к экрану запущенной виртуалки через RDP. Однако в GUI все необходимые для этого настройки отсутствуют и нужно использовать утилиту VBoxManage в командной строке.

Чего мы хотим добиться: защищённое TLS-соединение до виртуальной машины с аутентификацией по логину и паролю. Все настройки делаем целиком из командной строки.

Sergey Stolyarov | 2018-03-10 в 13:35

Задача: использовать сертификаты Let's Encrypt для персонального сервера: вебсервер, почта, xmpp.

Серверный софт: Nginx, Prosody. В будущем — Exim4.

Базовая инструкция: https://certbot.eff.org/#debianstretch-nginx

Дальше всё для моего домена, это в точности та конфигурация, которая у меня на сервере.

Текст будет обновляться по мере возникновения новых проблем.

Sergey Stolyarov | 2017-12-13 в 23:28

SSH Agent (SSH Агент) хранит в памяти компьютера приватные SSH-ключи. Когда программа /usr/bin/ssh (или другая подобная) пытается подключиться к серверу при помощи ключа, она сначала делает запрос к SSH Agent и просит у него приватный ключ, если у агента он есть, то ключ отдаётся программе и она его использует для подключения.

В linux и macos по умолчанию стоит /usr/bin/ssh-agent из openssh, однако он малофунциональный и сложный в настройке. Вместо него можно использовать агент из комплекта gnupg (gpg-agent), он умеет не только PGP-ключами управлять, но и выполнять функцию SSH Агента. У gpg-agent есть два преимущества: он настраивается, а также позволяет задавать пароли для шифрования ключей в памяти.

Sergey Stolyarov | 2017-09-10 в 11:26

Disclaimer: это краткая заметка о настройке «чистого» firefox под мои требования. Всё с учётом Firefox 57+ и местами 63+. Аналогичная моя статья о настройках chrome.

Текст постоянно обновляется.

Sergey Stolyarov | 2017-04-13 в 20:14

Индекс (оглавление) очень помогает в навигации по PDF-документу. Однако в некоторых PDF-файлах его нет. Добавить его можно через командлайновую программу pdftk (она есть для всех операционных систем).

Схема простая:

  1. экспорт метаданных в файл;
  2. добавление в файл метаданных оглавления;
  3. обновление метаданных в исходном документе.
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