Expertus metuit
Sergey Stolyarov | 2025-03-25 в 21:25

В статье описывается, как менять невидимые настройки Google Chrome — корпоративные правила (policies).

Sergey Stolyarov | 2024-03-24 в 21:56

Давно и успешно пользуюсь макосью и за долгие годы накопилось множество конфигов, настроек и улучшений.

Про эффективную работу с клавиатурой я уже писал в статье Клавиатурные сочетания макоси и русская раскладка, про замену штатного SSH agent на аналогичный из gnupg в статье Меняем ssh-agent на gpg-agent. В этой статье будет про конфигурацию и софт.

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 | 2022-06-23 в 23:48

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

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

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

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

❈ ❈ ❈

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

Sergey Stolyarov | 2021-03-24 в 22:34

Я много работаю с текстом и активно пользуюсь клавиатурными сочетаниями (keyboard shortcuts). На макбуке и в макоси в целом писать текст очень удобно из-за мощной и эргономичной системы клавиатурных сочетаний, они предсказуемо и одинаково работают в разных приложениях. Однако много людей такой полезной функциональностью не пользуются или даже не знают про её существование, а ведь иначе работа с компактной клавиатурой макбука сильно тормозится.

Клавиатура в мак-устройствах отличается от привычной ПК-клавиатуры набором модальных клавиш. Вместо привычных Shift, Alt, Control, Win там другие: Shift, Option, Control, Command и Fn. Только Shift (и частично Fn) работает одинаково на обоих системах, но остальные клавиши — нет, например, для сохранения документа стандартное сочетание в маке Command-S вместо Ctrl-S в винде.

В этом тексте я ограничусь только командами редактирования и навигации по документам, они применимы везде, где можно печатать текст: текстовые редакторы, поля ввода в формах, браузер и так далее. Большой (но не полный) список доступных можно найти на сайте apple: https://support.apple.com/en-gb/HT201236.

Apple использует специальные символы для обозначения этих клавиш:

  • Shift —
  • Option/Alt —
  • Control/Ctrl — ^
  • Command —

Однако в этом тексте у меня только обычные осмысленные названия клавиш типа Ctrl-A. Также все они исключительно для латинской раскладки, то есть никаких Ctrl-Ф вместо Ctrl-A.

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-12-13 в 23:28

Что такое и зачем нужен SSH Agent

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

Без SSH Agent SSH-клиент напрямую читает ключи с диска, в линуксе и макоси они лежат в каталоге ~/.ssh, если ключ зашифрован, то клиент спрашивает соответствующую парольную фразу. SSH Agent импортирует ключи к себе в хранилище и требует задать новую парольную фразу для доступа к ключу. Агент запоминает, когда клиент запрашивал ключ и может потребовать ввести парольную фразу и/или показать дополнительный диалог с подтверждением.

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

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;
  • более подробно о работе с микропроцессорными картами;
  • пример работы с банковской картой.
Sergey Stolyarov | 2016-07-16 в 09:20

В unix-системе питоновские пакеты совсем не обязательно нужно ставить в системные каталоги (в /usr/, например). Благодаря virtualenv, пакеты можно установить в любой каталог, инициализировать локально окружение в терминале через специальный скрипт и дальше пользоваться всеми установленными в том каталоге библиотеками и программами. Локальный набор пакетов очень удобен для разработчика, так как позволяет на одной системе переключаться между разными их версиями.

В статье я описываю не только концепт, но и всю процедуру подготовки локального окружения. Сразу же уточнение: всё работает только в терминале, то есть вы запускаете терминал, «активируете» в нём нужный каталог с пакетами и дальше в этом терминале работаете. Базовая операционная система — linux, *bsd или mac os x. Windows я не рассматриваю.

Итак, нам понадобится установленный системно python3. Для линукса он ставится из пакетов вашего репозитория, для макоси — скачивается с офсайта https://www.python.org/downloads/mac-osx/ или через brew. В принципе, можно пользоваться штатной версией из макоси, но она гарантированно не будет последней. Например, в Macos Sonoma 14.5 штатно установлен python3 версии 3.9.6, хотя через brew уже доступна 3.12.3 (июнь 2024 года).

Sergey Stolyarov | 2015-08-29 в 19:41

По умолчанию GIMP подхватывает все системные шрифты макоси, а их очень много, причём бо́льшая часть бесполезна и только мешает. Из настроек программы это никак не регулируется.

Я предполагаю, что вы используете официальную сборку GIMP с официального сайта.

GIMP использует fontconfig для поиска доступных шрифтов, а конфигурационный файл для fontconfig хранится в /Applications/GIMP.app/Contents/Resources/etc/fonts/fonts.conf, поэтому просто открываем его любым редактором и комментируем строчки, содержащие пути к системным каталогам со шрифтами (это /Library/Fonts и /System/Library/Fonts). Можно также добавить свои каталоги, чтобы искать шрифты для редактора специально в них.

Вот пример уже отредактированной секции:

    <dir>/usr/share/fonts</dir>
    <dir>~/Library/Fonts</dir>
    <dir>~/Library/GimpFonts</dir>
    <!--<dir>/Library/Fonts</dir>-->
    <!--<dir>/System/Library/Fonts</dir>-->
    <dir prefix="xdg">fonts</dir>
    <!-- the following element will be removed in the future -->
    <!--<dir>~/.fonts</dir>

Здесь закомментированы каталоги /Library/Fonts и /System/Library/Fonts, а также добавлен каталог ~/Library/GimpFonts (в него я добавил симлинки на действительно нужные системные шрифты из /Library/Fonts и /System/Library/Fonts).

Дальше перезапускаем программу и всё.

Также я написал скрипт, который автоматизирует все описанные операции и делает чуть больше, его можно скачать с моего гитхаба fix-mac-gimp-fonts.

Дополнение 2025 года

Начиная с какой-то версии macos, уже нельзя просто так отредактировать приложение. Операционная система это определяет и не даёт его больше запускать, выдавая сообщение типа “GIMP.app” is damaged and can’t be opened. You should move it to the Bin. Естественно, удалять не надо, просто нажмите пока Cancel.

Отредактированное приложение попадает в карантин и его извлечь оттуда можно такой командой:

$ xattr -dr com.apple.quarantine /Applications/GIMP.app

После этого ещё раз запустить и снова в этом же диалоге нажать Cancel. Далее нужно зайти в системные настройки, раздел Privacy & Security, долистать до секции Security; там появится новая секция про GIMP с кнопкой Open anyway. Нажимаем её, вводим пароль и в новом диалоге нажимаем Open. Теперь GIMP будет запускать с модифицированным конфигом.

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