Графическая
утилита для тестирования СКЗИ и контроля криптографических объектов
Утилита lsp11ssl является примером диалогового приложения, написанного на языке Lua.
Утилита позволяет выполнять криптографические операции PKCS#11 и OpenSSL в диалоговой форме, размещая исходные данные и результаты на токенах/smartcard, во временных сессионных объектах, в файлах или в переменных Lua.
Утилита позволяет подключить одну или несколько библиотек PKCS#11 и переключать текущий контекст выполнения операций между разными токенами, не завершая открытые сессии, путем переключения страниц в главном окне и выбора слота на странице соответствующей библиотеки. Выполнение прикладных функций всегда производится в текущем контексте, т.е. с одним токеном или вообще без токена.
Если активен контекст PKCS#11 (открыта и выбрана соответствующая страница библиотеки PKCS#11 в главном окне), то доступны операции PKCS#11 и OpenSSL, причем операции OpenSSL выполняются через ENGINE lc_p11_core, связанный с соответствующим токеном.
Особенностью lc_p11_core является то, что он выполняет с помощью токена только операции с объектами ключевой пары, а все остальные операции (хеширование, симметричное шифрование и др.) поддерживаются в нем криптографической библиотекой LISSI-Crypto Core (LCC).
Утилита работает только с теми слотами, в которых она обнаружила токены при открытии библиотеки. Если токен вытащить во время работы активного контекста соответствующей библиотеки, то утилита сообщит об этом событии. Заметим, что при этом все сессии на слоте автоматически закрываются, поэтому после обратной вставки токена сессию на данном слоте нужно открыть заново с помощью пункта меню Session/Open.
Утилита использует специально собранную версию OpenSSL 1.0.0, которая называется LCSSL. Для того, чтобы утилита могла загрузить ENGINE, путь к папке, где хранятся lc_core.dll, lc_p11_core.dll и lc_rand.dll, следует прописать в переменной среды LCSSL_ENGINES.
Заметим, что для многих операций с токеном требуется логин, поэтому нужно не забывать выполнять его в пункте Login меню Session. Если логин не произведен, то в списке объектов токена на странице контекста не будут представлены приватные объекты, а некоторые функции вообще нельзя будет выполнить. Добавим также, что для токенов различного типа могут действовать различные требования для авторизации пользователя при выполнении операций.
Если контекст PKCS#11 не активен (выбрана страница lc_core в главном окне), то механизмы PKCS#11 не доступны, а криптографические операции выполняются только через OpenSSL и ENGINE lc_core, работающий без токенов и поддерживающий все российские криптографические алгоритмы с помощью библиотеки LCC.
Имеется возможность загрузки исходных данных для выполнения прикладных операций из файлов или из переменных Lua.
Результирующие данные могут быть сохранены в файлах или в переменных Lua.
Данные могут быть сгенерированы и случайным образом средствами OpenSSL, причем имеется возможность задать умалчиваемый ENGINE для интерфейса RAND, например - lc_rand.
Состав объектов PKCS#11 и значения их атрибутов могут быть изменены пользователем в соответствующих диалогах, если такая операция допустима по стандарту.
При генерации ключей утилита позволяет редактировать исходные шаблоны атрибутов, используемые для создания объектов.
Утилита позволяет выполнять служебные операции с токеном от имени пользователя и SO - инициализировать токен, изменять PIN и т.д.
Утилита полезна при тестировании прикладных программ, использующих различные криптографические операции на уровне механизмов стандарта PKCS#11 и интерфейсов OpenSSL, потому что результаты выполнения этих операций можно сразу же увидеть визуально.
Кроме того, утилита предоставляет удобный интерфейс для работы со списком объектов токена и их атрибутами.
Для организации диалогов используются модули wxLua, являющиеся интерфейсными обертками вокруг библиотек wxWidgets.
Для доступа к библиотекам PKCS#11 используется интерфейсный модуль LuaCryptoki. Для доступа к функциям OpenSSL используется интерфейсный модуль lua-openssl, модифицированный для поддержки российских криптографических алгоритмов.
Предполагается, что пути к загружаемым Lua-модулям заданы в переменных среды LUA_PATH и LUA_CPATH, а сами модули установлены в системе соответствующим образом.
Следует особо отметить, что в реализации модуля lua-openssl задействован универсальный механизм поддержки иерархии классов объектов, первоначально созданный в проекте LuaSocket.
Именно с помощью данного механизма в скриптах Lua единообразно обеспечивается обработка интерфейсных объектов OpenSSL типа EVP_PKEY, X509, EVP_CIPHER, EVP_MD, PKCS7, PKCS12 и т.д.
Пользователь может изменить состав и структуру диалогов утилиты, а также порядок выполнения криптографических операций по своему усмотрению, модифицируя соответствующие скрипты.
Основным скриптом программы, содержащим алгоритмы выполнения прикладных операций, является файл lcp11ssl.lua.
Используются
также скрипты P11Ctx.lua, P11Names.lua, OpenSSLNames.lua, Factory.lua,
TokenObject.lua, Template.lua, Attribute.lua, LuaData.lua, oids.lua, wxid.lua,
hex.lua, csrdlg.lua, x509dlg.lua.
Проект
утилиты кроссплатформенный.
Документация
- Криптографическая диалоговая Lua-утилита для OpenSSL и PKCS#11 открыть...