Хочу представить свой пет-проект . Создан он в недрах tсl/tk, который, по моему мнению, многие недооценивают. В статье речь пойдет не столько о tcl (хотя все примеры и сам проект написаны именно на нем), а сколько о tk.
Многих интересует работа с токенами PKCS#11 с поддержкой российской криптографии в скриптовом языке Python.
В окружении Python имеется замечательный пакет PyKCS11, однако в нём отсутствует поддержка электронной подписи по ГОСТ Р 34.10-2012. Автор пакета PyKCS11, к сожалению, не планирует добавлять эту поддержку пакет. Как альтернатива PyKCS11, можно рассматривать пакет pyp11. В нём реализована поддержка следующих криптографических функций:
генерация ключевых пар по ГОСТ Р 34.10-2012 (512 и 1024 бита для открытого ключа), и даже по ГОСТ Р 34.10-2001;
подсчет хэша по ГОСТ Р 34.10-2012 (256 и 512 бит), а также по ГОСТ Р 34.11-94 и SHA1;
подписание и проверка подписи.
Из общих функций реализованы:
управление токенами (инициализация токена, установка и смена PIN-кодов);
получения списка слотов и информации о них;
импорт сертификатов и ключей (только для ГОСТ-криптографии):
установка меток для объектов (сертификаты, ключи);
и другие.
В конце прошлого года криптографическая утилита cryptoarmpkcs была портирована на платформу Android. В качестве ключевого контейнера для хранения персонального сертификата и ключевой пары использовался защищенный контейнер PKCS#12.
Теперь автор пошел дальше. Он не только учел критику, но и дополнил утилиту CryptoArmPKCS-A механизмами работы с криптографическим токенами PKCS#11 с поддержкой российской криптографии.
Речь идет не только о поддержки программного или аппаратных токенов, но и об использовании облачного токена. Для регистрации персонального токена в облаке разработано специальное приложение.
Сегодня скриптовый язык Tcl/Tk используется не только на компьютерах, но и с успехом портирован на платформу Android. Но именно на этой платформе стали особенно видны все недостатки диалога выбора файлов tcl/tk (tk_getSaveFile, tk_getOpenFile или tk_chooseDirectory).
Что не устраивает в этом диалоге? Отсутствие в нем элементарных операций с папками/файлами: создать, уничтожить, переименовать. Нет, не подумайте, в самом tcl все эти механизмы, естественно, реализованы, их просто нет в GUI диалога. В Linux это не так заметно, а вот на платформе Android этот диалог вызывает массу неудобств.
В итоге была создана балалайка (так еще называют пакеты/package для tcl) tkfe (tk file explorer).
При разработке пакета tkfe учитывались не только необходимость хотя бы элементарных операций с файлами/каталогами, но и желание иметь проводник как в отдельном окне, так и в отдельном фрейме, который пользователь может разместить как ему удобно в своем GUI.
В проекте имеется комплексный пример по использованию пакета. Естественно, этот диалог можно также использовать и на других платформах. Не составляет также труда перенести его на Python/TkInter.
В канун Нового Года вышла статья о том, что криптографическая утилита cryptoarmpkcs портирована на платформу Android.
Так как утилита написана на tcl/tk, то в качестве механизма портирования использовалась технология Androwish.
Примечательно то, что достаточно загрузить защищенный контейнер PKCS#12, который содержит сертификат и закрытый ключ владельца, во внутреннюю память и можно подписывать документы различными типами электронной подписи ГОСТ Р 34.10-2012.
В целом утилита позволяет уже сегодня следующие операции:
В комментариях на linux.org.ru к предыдущей версии утилиты cryptoarmpkcs пользователь questin4 резонно заметил:-«Развитие прекращается и больше не будут добавлять новые функции?».
Он был прав, вышла новая версия утилиты, в которой учтены многие замечания. Прежде всего это касается скачивания исходного кода и дистрибутивов. Для скачивания новых версий теперь достаточно открыть окно «О программе» и выбрать соответствующий дистрибутив.
Выпуск новой версии связан прежде всего с добавлением функционала разбора и просмотра ASN1-структур. При этом эти структуры могут храниться не только в DER и PEM-форматах, но и в шестнадцатеричном формате. Есть и утилита командной строки tclderdump, которую можно скачать отдельно. При использовании графической оболочки можно выделить кусок распарсенного кода и тут же его просмотреть в окне.
Вышла финальная версия утилиты cryproarmpkcs. Принципиальным отличием от предыдущих версий является добавление функций, связанных с созданием самоподписанных сертификатов. Сертификаты могут создаваться как с генерацией ключевой пары, так и по ранее созданным запросам на сертификаты (PKCS#10). Созданыый сертификат вместе с созданной ключевой парой помещается в защищенный контейнер PKCS#12. Контейнер PKCS#12 можно использовать при работе с openssl с поддержкой ГОСТ Р 34.10-2012.
Утилита абсолютно самодостаточная и работает на платформах Linux, Windows, OS X.
Вышла обновленная версия свободной утилиты cryptoarmpkcs, предназначенной для работы с сертификатами x509 v.3, храняшимеся как на токенах PKCS#11, с поддержкой российской криптографии, так и в защищенных контейнерах PKCS#12. Как правило, в контейнере PKCS#12 хранят личный сертификат и его закрытый ключ.
Утилита абсолютно самодостаточная и работает на платформах Linux, Windows, OS X.
Отличительной особенностью утилиты является то,что для формирования электронной подписи, не требуется установки никаких дополнительных СКЗИ (средст криптографической защимты информации) и хранилищ сертификатов. Вся информация, необходимая для формирования электронной подписи (цепочки сертификатов, списки отозванных сертификатов, а также ответы серверов OCSP и штампы времени), получается через Интернет.
Полученную подпись можно проверить, в частности, на сайте Госуслуг.
Утилита также позволяет создать запрос на квалифицированный сертификат с генерацией ключа на личном токене PKCS#11.
Утилита имеет удобный графический интерфейс.
( читать дальше... )
В свое время реализация отечественных криптографических алгоритмов в библиотеке libgcrypt очень меня вдохновила. Стало возможным задействовать эти алгоритмы и в Kleopatra и в Kmail и в GnuPg в целом, рассматривать библиотеку libgcrypt как алтернативу openssl с ГОСТ-ым engine. И все было замечательно до прошлой пятницы.
Меня попросили проверить электронную подпись ГОСТ Р 34.10-2012-256 для документа, созданного в Microsoft Office на MS Windows. И я ее решил проверить в Kleopatra (у меня стоит Linux). И что вы думаете, подпись оказалась неверной. Закрались сомнения. Решил проверить на openssl с ГОСТ-овым engine. Подпись успешно была проверена. Срочно переподписал файл в Kleopatra и он не прошел проверку на MS Windows. Попробовали другие файлы подписать и проверить, все было нормально. Встал вопрос в чем беда? Поскольку при подписании участвует хэш документа, было решено проверить вычисление хэш разными программами.
Сертификаты x509 используются организациями и гражданами.
Они выдаются в удостоверяющих центрах на отторгаемых носителях. Это токен/смарт-карта с поддержкой криптографических механизмов PKCS#11, для которой удобно иметь графическую утилиту. Она позволяет не только просматривать сертификаты, но и экспортировать сертификаты в файлы, и проверять валидность хранящихся на токенах сертификатов. На habr представлена такая кросплатформенная утилита, которая доступна для свободного скачивания вместе с исходным кодом для платформ Linux, OS X (macOS) и Windows (куда без него). Утилита имеет понятный графический интерфейс.
На Хабре представлена утилита для просмотра российских квалифицированных сертификатов (ГОСТ Р 34.10-2001/2012) на платформах Linux, OS X и даже Windows. Примечательно то, что она не только имеет двуязычный интерфейс (русский/английский), то и позволяет скачать цепочку корневых сертификатов, список отозванных сертификатов и сохранить распарсенный сертификат. Помимо дистрибутивов дан и ее исходный код. В качестве прототипа для сравнения выбрана утилита gcr-viewer.
Динамический язык программирования Tcl (Tool Command Language) празднует своё тридцатилетие. В январе 1989 года был опубликован первый экспериментальный выпуск языка Tcl, предложенный для тестирования сторонним разработчикам. Tcl представляет собой динамический язык программирования, распространяемый совместно с кроссплатформенной библиотекой базовых элементов графического интерфейса Tk. Несмотря на то, что основное распространение Tcl получил для создания интерфейсов пользователя и как встраиваемый язык, Tcl также подходит для других задач, таких как web-разработка, создание сетевых приложений, администрирование систем и тестирование.
Как написал один из пользователей почему он в него такой влюбленный:
вики, где есть даже игрушки (там можно подсмотреть интересное :)
От себя добавлю - со связкой tcl/tk знаком 20 лет (тоже Юбилей) и с удовольствием на ней пишу. Последнее что недавно написал это удостоверяющий центр CAFL63
Спасибо создателю этого замечательного языка Tcl/Tk!
На pypi.org выложен пакет fsb795, который имеет удивительно простой интерфейс для доступа к атрибутам квалифицированного сертификата, созданного в соответствии с требованиями Приказа ФСБ РФ от 27 декабря 2011 г. № 795 «Об утверждении требований к форме квалифицированного сертификата...»:
subjectSignTool() – возвращает строку с наименованием СКЗИ владельца сертификата;
issuerSignTool() – возвращает список из четырех элементов с информацией криптографических средствах издателя сертификата;
classUser() – возвращает строку с oid-ами классов защищенности СКЗИ владельца сертификата;
issuerCert() – возвращает информацию об издателя сертификата;
publicKey() – возвращает полную информацию о публичном ключе;
и т.д.
С использованием этого пакета на Python разработана утилита viewCertFL63 для просмотра квалифицированных сертификатов.
Пакет может оказаться очень полезной для разработчиков программного обеспечения PKI/ИОК
Сегодня в стандартной версии openssl отсутствует поддержка как ГОСТ Р 34.11-2012, так и ГОСТ Р 34.10-2012. Более того, в версии 1.1 поддержка криптографии ГОСТ исключена из стандартной поставки («The GOST engine was out of date and therefore it has been removed.»).
Все это заставляет искать альтернативные пути для работы с сертификатами, с электронной подписью («сообщениями формата CMS») и другими объектами ИОК на базе новой российской криптографии.
Одним из таких возможных путей является использование библиотеки GCrypt. В этой библиотеке реализована поддержка новых алгоритмов ГОСТ Р 34.11-2012 (алгоритмы хэширования) и ГОСТ Р 34.10-2012 (алгоритмы подписи).
Представлена утилита для создания запроса на квалифицированный сертификат с учетом требований Федерального закона от 6 апреля 2011г. №63-ФЗ «Об электронной подписи», а также «Требований к форме квалифицированного сертификата ключа проверки электронной подписи», утвержденных приказом ФСБ России от 27.12.2011 № 795.
Утилита написана на Tcl/Tk. Дистрибутив утилиты доступен здесь:
Представлен проект удостоверяющего центра CAFL63, созданного на базе утилиты OpenSSL, использующего СУБД SQLite3 для поддержки базы данных и имеющего развитый графический интерфейс на базе Tcl/Tk. УЦ создан с учетом требований Федерального закона от 6 апреля 2011г. №63-ФЗ «Об электронной подписи», а также «Требований к форме квалифицированного сертификата ключа проверки электронной подписи», утвержденных приказом ФСБ России от 27.12.2011 № 795. Дистрибутивы УЦ доступны для платформ Linux и Windows.