Expertus metuit
Sergey Stolyarov | 2023-10-16 в 22:14

Эта статья является уже третьей в серии об использовании смарт-карт. Первая — Смарт-карты и программирование — была написана в 2017 году и все примеры в ней были на языках C и C++. Вторая — Смарт-карты и программирование (java) — в 2019 и в качестве базового использовался язык Java. И вот пришло время для очередной переработки, на этот раз всё на примере python3, код на котором получается компактным, выразительным и понятным. Кроме нового языка за эти годы накопились отзывы, замечания и предложения, появился опыт использования других устройств (криптографических USB-токенов, других типов бесконтактных карт), всё это отражено в тексте, который значительно отличается от предыдущих статей в структуре и формулировках.

Если вы только знакомитесь с этими технологиями, рекомендую читать именно эту статью, я постарался в ней учесть все недостатки прошлых, уточнить и прояснить терминологию, а также более детально раскрыть некоторые моменты. Ещё я добавил несколько новых разделов, которых не было в прошлых статьях: чипы Mifare Ultralight, NFC-метки и NDEF, прямое обращение к радиомодулю считывателя для выполнения произвольных команд NFC, банковские карты МИР, SIM-карты.

Мы все активно пользуемся смарт-картами, даже не зная этого, чиповые банковские карты, NFC-метки, бесконтактные пропуски-ключи, USB-ключ для электронной подписи, сим-карты в телефонах — это всё смарт-карты. В этом очень большом тексте я детально расскажу об использовании смарт-карт на уровне прикладного ПО. Здесь будет много теории, много ссылок на стандарты и спецификации, много кода. Я не ставил цель написать энциклопедию, для этого формата статьи не хватит, но дать обзорное представление о предметной области вполне можно. В конце есть список книг, в которых тема смарт-карт раскрыта детально и системно.

Я выбрал Python за его простоту, доступность, удобство использования и богатую библиотеку модулей. От вас не требуется никаких дополнительных знаний, кроме Python и операционной системы, на которой вы будете запускать код. Изначально всё программное окружение ориентировано на Unix-подобные системы — разнообразные варианты Linux и macOS, однако всё должно работать и в Windows (однако я не проверял). Все демонстрационные программы используют консоль (терминал), поэтому должны работать примерно одинаково везде, я не использую никаких GUI-библиотек, только командную строку.

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

Практически все доступные сторонние материалы (стандарты, спецификации, книги) написаны по-английски, поэтому вам нужно его знать, если хотите самостоятельно изучить тему более глубоко.

Если у вас есть предложения по содержимому, можете писать прямо в комментариях или напрямую на мой email: [email protected]

Sergey Stolyarov | 2023-04-19 в 09:58

На сайте госуслуг можно заказать различные отчёты и выписки, подписанные электронной подписью. Основной документ обычно идёт в формате PDF, а электронная подпись скачивается отдельным файлом с расширением sig, так называемая отcоединённая электронная подпись. Выглядит скачивание документов с сайта примерно так:

 report

На самом сайте госуслуг есть онлайновый сервис проверки подписи, однако проверить можно и на локальной linux-машине без сторонних проприетарных программ.

Sergey Stolyarov | 2022-06-23 в 23:48

Эта статья — нечто вроде инструкции по использованию USB криптотокенов в терминале (консоли) линукса и макоси. Ориентирована она прежде всего на российские реалии и рассматривает доступные у нас устройства и программное обеспечение.

Здесь не рассматриваются подробно детали устройства сертификатов и ключей, для этого я рекомендую прочитать статью Ещё больше и лучше о цифровых сертификатах: X.509, PKI, PKCS, где я подробно рассматриваю прикладную криптографию, сертификаты, ключи, а также консольные инструменты для работы с ними.

Базовая операционная система: ubuntu/debian на архитектуре amd64, однако многие сценарии также применимы к макоси версии Catalina или выше (только intel, на arm не проверял), а также для линуксов на другой архитектуре, если для неё существуют подходящие драйверы устройств.

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

❈ ❈ ❈

В рамках этой статьи я рассматриваю прежде всего штатные инструменты, которые применимы к любым токенам, поэтому все проприетарные криптопровайдеры типа Криптопро тут не описаны. Я настоятельно рекомендую сначала прочитать статью, прежде чем покупать криптотокен, для экспериментов вы можете использовать программный эмулятор SoftHSM (он описан ниже). К сожалению, на российском рынке очень много откровенно мусорных устройств, которые я советую игнорировать, про это я тоже отдельно напишу, поэтому экспериментируйте только с SoftHSM, для понимания принципов работы инфраструктуры он подходит идеально.

Sergey Stolyarov | 2021-12-17 в 12:15

В этом тексте описаны полезные вещи, которые можно делать с Android через adb shell. И часто их можно сделать только так.

Чтобы выполнить инструкции из этой статьи, нужно сначала включить режим разработчика на телефоне:

  • зайти в раздел Настройки/SettingsО телефоне/About Phone;
  • найдите пункт с номером сборки (Build number) и нажимайте его быстро до тех пор, пока не появится надпись типа «Теперь вы стали разработчиком»
  • в телефонах с MIUI нужно нажимать по пункту MIUI Version
Sergey Stolyarov | 2020-12-18 в 12:00

Иногда нужно выполнить простые операции над видеофайлами без установки специализированного GUI-софта. Для некоторых из них есть альтернативы из командной строки.

Чаще всего мы будем использовать ffmpeg.

Sergey Stolyarov | 2020-09-12 в 13:39

Брошюра — это маленькая книжка. Если вы распечатаете PDF-файл, то получите просто набор страниц, и даже если распечатать по две страницы на лист, то получится всё равно набор страниц. Однако можно документ напечатать в виде брошюры, когда страницы располагаются на листе так, что вы можете каждый сложить пополам, вложить их друг в друга и прошить/скрепить по линии сгиба. На выходе получится полноценная маленькая книжка.

В линуксе есть очень удобная программа pdfbook, которая конвертирует обычный PDF в брошюру, которую вы можете распечатать как обычный документ на обычном принтере и потом скрепить вместе по линии сгиба. Запускается она просто:

[user@shell]% pdfbook --a4paper input.pdf

На выходе получается файл input-book.pdf, который можно отправлять на печать.

pdfbook входит в состав пакета texlive-extra-utils (в debian/ubuntu ставится стандартной командой sudo apt install texlive-extra-utils), также вы можете поставить в макоси через brew, но для этого требуется установленный mactex.

Sergey Stolyarov | 2020-09-05 в 00:12

Четыре года назад я написал статью Человеческим языком о цифровых сертификатах: ASN.1, X.509, PKI, в которой постарался максимально понятно рассказать о цифровых сертификатах с примерами их использования через консоль и openssl. С того времени многое изменилось: openssl версии 1 ушёл в массы, появились и стали активно использоваться его форки (libressl и boringssl), появилась (типа) поддержка гостовских алгоритмов. Плюс я получил неожиданно много обратной связи, чего совершенно не ожидал, и в итоге появился этот полностью переработанный и актуализированный текст.

*Целевая аудитория этой статьи — айтишники, поверхностно знакомые с понятием цифрового сертификата и сопутствующими понятиями и техническими стандартами (X.509, PKI, PKCS). Текст не является пересказом документации или сборником рецептов, воспринимайте его как короткий учебник, рассказывающий о базовых концептах криптографии и сложившейся вокруг стандарта X.509 инфраструктуры.

Чаще всего цифровой сертификат ассоциируется с браузером, веб-сайтом и шифрованием трафика в HTTPS-соединении. И обычно на самом факте существования сертификата у большинства айтишников понимание темы заканчивается. Многие статьи на эту тему с самого начала топят читателя в абстрактных и несущественных деталях (например, раз, два, три). Между тем, базовые концепции системы сертификатов очень простые и я о них расскажу.

В центре внимания у меня именно сертификат, так как именно вокруг него крутятся все остальные концепты.

Текст состоит из двух частей: достаточно подробная теоретическая основа (включая несколько базовых понятий из криптографии) и практическая часть с конкретными примерами на openssl. Все новые понятия в тексте вводятся последовательно, а примеры из практической части используют файлы, созданные в предшествующих разделах. Я старался пользоваться официальной русской терминологией, принятой в стандартах и литературе.

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

Для полноценной работы вам понадобится linux с терминалом и установленным openssl версии 1.0 или выше. С некоторым оговорками подойдёт macos с терминалом (в macos последних версий установлен форк openssl под названием libressl).

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-14 в 11:23

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

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

FREETYPE_PROPERTIES="truetype:interpreter-version=35"

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

←новые старые→
© 2006—2023 Sergey Stolyarov | Работает на pyrengine