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 | 2023-04-16 в 03:37

Ещё одна тема, на которой паразитируют техно-гики в России — это государственный удостоверяющий центр (SSL/TLS сертификат). К сожалению, тема крайне сложна и особенности этой технологии знают и понимают буквально единицы специалистов, остальные просто беспредметно истерят. Проблема с текущей моделью в TLS кроется совершенно в другой области и прилагать усилия по исправлению нужно именно там, но это крайне сложно, поскольку придётся бодаться с огромным межгосударственным болотом и корпоративными интересами.

Напомню историю вопроса. В 2022 году в госдуму был внесён законопроект № 244043-8, в котором предусматривается создание российского национального удостоверяющего центра (УЦ) для централизованного выпуска TLS-сертификатов для, например, сайтов. Обоснование было предельно рациональным: западные УЦ стали отказывать российским клиентам в обслуживании и перестали выдавать сертификаты для их сайтов, поэтому решили создать свой собственный УЦ, чтобы не зависеть от западных. Чтобы выданные этим новым удостоверяющим центром сертификаты корректно обслуживались на компьютерах пользователей, им нужно добавить корневой сертификат удостоверяющего центра в доверенные. И в этой статье я максимально подробно расскажу, что же это означает, какие от этого могут быть проблемы, как их можно решить и почему это никогда не будет решено.

Sergey Stolyarov | 2023-03-03 в 22:51

СКУД (система контроля и управления доступом, Physical Access Control System, PACS) — это набор программно-аппаратных средств контроля и управления физическим доступом к дверям, воротам, турникетам и другим технологическим отверстиями. В систему входит множество датчиков, замков, камер и другое оборудование, но в данной статье меня будут интересовать только физические электронные ключи доступа, их типы, особенности, характеристики, проблемы и недостатки.

    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-23 в 19:27

    В Google Chrome переключение между табами по Ctrl+Tab всегда происходит по порядку следования табов. То есть нажатие на Ctrl+Tab всегда переключает на следующий по порядку таб, а Ctrl+Shift+Tab — на предыдущий. Это чрезвычайно неудобно, если приходится быстро и часто переключаться между несколькими табами, которые находятся в разных местах. Такая фича называется Most recently used switch (MRU Switch). В других браузерах такое поведение включается штатным образом через настройки, но не в chrome. Есть даже очень старая задача из трекера на эту тему, но она была без всяких комментариев закрыта гуглом несмотря на сотни комментариев.

    Раньше было можно изменить поведение через расширения, но Google и эту возможность заблокировал, причём именно для сочетания Ctrl+Tab, внятного объяснения тоже не последовало.

    Способ 1, через расширение QuicKey

    Однако пользователи нашли способ. В chrome web store есть расширение QuicKey и в нём описана возможность включить MRU Switch через хак девелоперской консоли.

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

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

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

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

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

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

    Sergey Stolyarov | 2020-09-15 в 10:13

    Рисование буллетов и других маркеров

    ► ● • ∙ ◆ ◇ ◈ ◉ ○ ∘ ◦ ◼ ◻ ▪ ∙ ▫ ★ ☆ ♦ ♢ ✓ ☑ ☒ ∗

    ▶ ▼ ◀ ▲ △ ▷ ▽ ◁

    ← ↑ → ↓ ↖ ↗ ↘ ↙

    Рисование блоков

    Тонкие одинарные линии: ┌ ┐ └ ┘ ─ │ ┬ ┴ ┤ ├ ┼
    
    И пример блока из них:
    ┌─┬┐ 
    ├─┼┤   
    ├─┴┤
    └──┘
    
    ┌ ─ ┬ ┐
    
    │ ─ ┼ ┤   
    
    ├ ─ ┴ ┤
    
    └ ─ ─ ┘
    

    Рисование отбивок

    Звёздочки по центру:

    ❈ ❈ ❈

    Линии по центру:

    ──────────────────

    ══════════════════

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