Программа gostsum для виндовс
Facebook Если у вас не работает этот способ авторизации, сконвертируйте свой аккаунт по ссылке ВКонтакте Google RAMBLER&Co ID
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
Пришел на саппорт реквест, который саппротеры до меня проэскалировали. Хотя мы еще вроде как продукта на базе OpenSSL 1.0.0 не продаем, но вопросы уже задают:
> Нас интересует работа ГОСТ (89, 94, 2001) в openssl, и хотелось бы
> посмотреть на работу этих алгоритмов.
> Из описания на вашем сайте поддержки российских криптоалгоритмов в
> openssl, дана информация что в состав openssl версии 1.0.0 и выше уже
> включена поддержка росалгоритмов, разработанные вами.
> Я использовал src.rpm и rpm-пакеты openssl версии 1.0.0-3 из репозитария
> Fedora.
> При пересборке и установке openssl, и после выполнения любой команды с
> обращением к требуемым алгоритмам появляется ошибка, например:
> ---------------------------------
> openssl req -newkey gost2001:A -keyout mykey.p8 -out mykey.req
> Unknown algorithm gost2001
> ---------------------------------
> Пытался пересобирать пакет, отредактировав spec-файл (по разным
> источникам надо добавить парамерты в блок конфигурации enable-gost89
> enable-2001, по другим просто enable-gost) всё равно алгоритмы ГОСТ не
> были включены после установки
Блин, по каким-таким источникам? Скрипт Configure в OpenSSL не автоконфом каким сгенерен, человеком писан. Его читать можно. Там даже комментарии есть. И это есть единственный и неповторимый источником знаний о том, какие возможны опции. enable-gost бывает. Но она включена по умолчанию.
Засада в том, что в fedora собирают OpenSSL с no-ec. А если no-ec, то извините, никакого вам ГОСТа Потому что гост на эллиптических кривых. Еще почему-то также требуется dsa и dh. Если что-то из этих трех выключено, то $disable выставляется в "forced" и никакие отдельные enable не помогут, пока не сделаешь enable пререквизиту.
Вторая засада заклюючается в fips. Это - американская сертификация. И требования этой сертификации запрещают использовать не-фипс алгоритмы. Редхатовцы собирают openssl в FIPS mode, чем эффективно режут возможность работы с неамериканскими национальными алгоритмами.
Плюс еще у них некоторые приложения вроде sshd используют FIPS-cпецифичный API, поэтому сделать drop-in replacement не так-то просто, хотя и возможно.
И еще эти извращенцы из RedHat включили в свой rpm патчик, который искусственно занижает OPENSSL_VERSION_NUMBER до номера версии той беты, с котрой они впервые собирались. Хотя с тех пор уже вышло три беты и два релиза. Потому что у них тот же sshd проверяет OPENSSL_VERSION_NUMBER на ТОЧНОЕ равенство. Ну если бы он хотя бы младшую цифру проверял на больше либо равно.
Я понимаю, что человек столкнувшийся впервые с криптографией может всех этих тонкостей не знать. Но читать-то код на perl уметь надо!
В связи с тем, что при использовании для подсчета контрольных сумм стандартной для Linux программы md5sum, полученные контрольные суммы могут различаться в зависимости от использования диска (устройства) или образа (файла), рекомендуем Вам использовать входящую в состав Astra Linux программу gostsum . Помимо соответствия ГОСТ, использование gostsum гарантирует корректный подсчёт контрольных сумм независимо от использования с дисками или с образами.
В состав операционных систем специального назначения Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) и далее, а также операционной системы Astra Linux Common Edition и далее, включен пакет libgost, содержащий библиотеки, реализующие алгоритмы и процедуры вычисления хэш-функций в соответствии с действующим ГОСТ Р 34.11-2012.
Для подсчета контрольных сумм оптических носителей и их файловых образов в состав пакета включена утилита gostsum.
При вычислении контрольных сумм утилита gostsum:
- По умолчанию использует алгоритм ГОСТ Р 34.11-2012 с длиной хэш-кода 256 бит (опция --gost-2012);
- Допускает использование алгоритма ГОСТ Р 34.11-2012 с длиной хэш-кода 512 бит (опция --gost-2012-512 );
- Допускает использование алгоритма ГОСТ Р 34.11-94 (опция --gost-94).
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Astra Linux Common Edition 2.12
Пример использования gostsum:
Для справки: при необходимости образ диска можно создать командой:
Начиная с версии gostsum_2.2.0 (Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20190912SE16 (оперативное обновление 3) в программу gostdum добавлен функционал проверки контрольных сумм файлов в deb-пакетах . Для проверки используется опция -e или --deb, включающая режим работы с *.deb пакетом, в котором для каждого файла из указанного пакета будут напечатаны контрольные суммы:
В состав операционных систем специального назначения Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) и далее, а также операционной системы Astra Linux Common Edition и далее, включен пакет libgost, содержащий библиотеки, реализующие алгоритмы и процедуры вычисления хэш-функций в соответствии с действующим ГОСТ Р 34.11-2012.
Для подсчета контрольных сумм оптических носителей и их файловых образов в состав пакета включена утилита gostsum.
При вычислении контрольных сумм утилита gostsum:
- По умолчанию использует алгоритм ГОСТ Р 34.11-2012 с длиной хэш-кода 256 бит (опция --gost-2012);
- Допускает использование алгоритма ГОСТ Р 34.11-2012 с длиной хэш-кода 512 бит (опция --gost-2012-512 );
- Допускает использование алгоритма ГОСТ Р 34.11-94 (опция --gost-94).
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Astra Linux Common Edition 2.12
Пример использования gostsum:
gostsum -d /dev/cdrom (для дисков)
gostsum -d /home/user/1test.iso (для образов)
Для справки: при необходимости образ диска можно создать командой:
Начиная с версии gostsum_2.2.0 (Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20190912SE16 (оперативное обновление 3) в программу gostdum добавлен функционал проверки контрольных сумм файлов в deb-пакетах . Для проверки используется опция -e или --deb, включающая режим работы с *.deb пакетом, в котором для каждого файла из указанного пакета будут напечатаны контрольные суммы:
Готовил я как-то тесты для системы, один из модулей которой помимо всего остального вычислял значение хеш-функции для загружаемого файла. В ТЗ был прописан и необходимый алгоритм — ГОСТ Р 34.11-94. За эталон я взял значение хеша, посчитанного сторонней утилитой Rhash.
Понимая, что функция вычисляется стандартной библиотекой, я больше для очистки совести отправил запрос, соответствующий загрузке файла в модуль. Но судьба человека полна неожиданностей. И стоит только расслабиться, как видишь нечто подобное:
Кто не прав — разработчик модуля или утилиты?
Оказалось, ни то, ни другое.
Дело в том, что ГОСТ Р 34.11-94 подразумевает использование параметров — так называемых узлов замены и стартового вектора хеширования. Но не регламентирует конкретные значения. Тем не менее в приложении к ГОСТ есть примеры данных значений и рекомендация:
После изучения предметной области выяснилось, что существует два RFC. RFC 4357, в котором используются параметры, созданные «КриптоПро», и RFC 5831 с теми самыми значениями из ГОСТ. Rhash по умолчанию считает хеш по RFC 5831. Использование параметров «КриптоПро» необходимо явно указывать:
rhash --gost-cryptopro
Казалось бы, проблема решена. Но, чтобы было еще интереснее, стандарт не определяет формат вывода хеша. А поэтому возникает вопрос с порядком байтов.
Для непосвященных — существует два основных способа представления данных. От старшего байта к младшему (Big-endian), и наоборот (Little-endian).
Рассмотрим пример. Для наглядности выделены байты.
Big-endian последовательность байт:
rhash --gost-cryptopro --gost-reverse
8a86e83f27233af4de7f5ccf399f6db9f94733c9980f5e3cec82a75c75a84b96
rhash --gost-cryptopro
964ba8755ca782ec3c5e0f98c93347f9b96d9f39cf5c7fdef43a23273fe8868a
Таким образом, противоречия нет — все вышеперечисленные значения, а также
rhash --gost --gost-reverse
c1b7ef56b21c9d0cebd7296ee081b7523d018d5279bc5eb32637e6b6cf9e6cf8
Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум потребуется специальный интерфейс для получения команд от системы. А раз есть требования и ограничения, то есть и скрипты, и милые сердцу костылики для преодоления.
Статья будет полезна тем, кто, как и я — «программист не настоящий».
В отличие от назначенных заданий служба работает постоянно, запускается при старте ПК и может управляться средствами Windows. А еще регулярно запускаемому скрипту могут понадобиться данные с предыдущего запуска, и может быть полезно получение данных из внешних источников — например, в случае TCP или Web сервера.
Лично мне за последние пять лет приходилось создавать службу три с половиной раза:
- Потребовалось создать сервис на fail2ban для Windows 2003., который работал с логами FileZilla и Apache, а при подозрении на брутфорс блокировал IP штатными средствами Windows — ipsec.
- Аналог телнет-сервера для домашних версий Windows. Понадобилось выполнять команды на удаленных рабочих станциях, которые были под управлением Windows 7 Home. По сути, вторая попытка поиграть в службы.
- Музыкальный проигрыватель для торгового зала под Windows. Задачу по ТЗ можно было решить при помощи mpd и пачки скриптов, но я решил — если уж делать скрипты, то почему бы и не «сваять» проигрыватель самому. За основу взял библиотеку BASS.dll.
- Когда выбирали веб-сервер с поддержкой загрузки файлов под Windows, одним из вариантов был HFS. Сам по себе работать он не может, поэтому пришлось «запихивать» его в службу. В результате решение не понравилось, и просто установили «тему» Apaxy на web-сервере Apache.
Для создания службы можно использовать взрослые языки программирования вроде C. Но если вы не хотите связываться с Visual Studio, то возьмите готовые утилиты. Существуют платные решения вроде FireDaemon Pro или AlwaysUp, но мы традиционно сосредоточимся на бесплатных.
Этот уже немолодой механизм состоит из двух компонентов: утилиты instsrv.exe для установки сервиса и srvany.exe — процесса для запуска любых исполняемых файлов. Предположим, что мы создали веб-сервер на PowerShell при помощи модуля Polaris. Скрипт будет предельно прост:
Работа так называемого «сервера».
Теперь попробуем превратить скрипт в службу. Для этого скачаем Windows Resource Kit Tools, где будут наши утилиты. Начнем с того, что установим пустой сервис командой:
Где WebServ — имя нашего нового сервиса. При необходимости через оснастку services.msc можно задать пользователя, под которым будет запускаться служба, и разрешить взаимодействие с рабочим столом.
Теперь пропишем путь к нашему скрипту при помощи магии реестра. Параметры службы есть в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services\WebServ. В нем нам нужно добавить новый раздел Parameters и создать там строковый параметр Application, указав в нем путь к исполняемому файлу. В случае скрипта PowerShell он будет выглядеть так:
Настроенная служба.
Можно запустить и радоваться.
Работающая служба.
Однако у этого способа есть недостатки:
- Утилиты старые, разработаны до изобретения PowerShell, UAC и прочих вещей.
- Srvany не контролирует работу приложения. Даже если оно выпадет в ошибку, служба продолжит свое дело как ни в чем не бывало.
- Придется донастраивать и копаться в реестре. Вы же помните, что копаться в реестре небезопасно?
Поэтому перейдем к методу, частично лишенному этих проблем.
Существует утилита под названием NSSM — Non-Sucking Service Manager, что можно перевести как не-плохой менеджер служб. В отличие от предыдущей, она поддерживается разработчиком, и исходный код опубликован на сайте. Помимо обычного способа, доступна и установка через пакетный менеджер Chocolately.
Создать сервис можно из обычной командной строки, вооружившись документацией на сайте разработчика. Но мы воспользуемся PowerShell. Потому что можем, разумеется.
Установка через PowerShell.
Для разнообразия проверим работу службы не браузером, а тоже через PowerShell командой Invoke-RestMethod.
И вправду работает.
В отличие от srvany, этот метод позволяет перезапускать приложение на старте, перенаправлять stdin и stdout и многое другое. В частности, если не хочется писать команды в командную строку, то достаточно запустить GUI и ввести необходимые параметры через удобный интерфейс.
GUI запускается командой:
Настроить можно даже приоритет и использование ядер процессора.
Действительно, возможностей куда больше, чем у srvany и ряда других аналогов. Из минусов бросается в глаза недостаточный контроль над всем процессом.
Налицо нехватка «жести». Поэтому я перейду к самому хардкорному методу из всех опробованных.
Поскольку я давний любитель этого скриптового языка, то не смог пройти мимо библиотеки под названием _Services_UDF v4. Она снабжена богатой документацией и примерами, поэтому под спойлером сразу приведу полный текст получившегося скрипта.
Итак, попробуем «завернуть» в нее наш веб-сервис:
Разберу подробнее момент запуска приложения. Он начинается после операции $bServiceRunning = True и превращается в, казалось бы, бесконечный цикл. На самом деле этот процесс прервется, как только служба получит сигнал о завершении — будь то выход из системы или остановка вручную.
Поскольку программа для скрипта является внешней (powershell.exe), то после выхода из цикла нам нужно закончить ее работу с помощью ProcessClose.
Для этого скрипт необходимо скомпилировать в .exe, а затем установить службу, запустив exe с ключом -i.
Оно работает!
Разумеется, этот способ не самый удобный, и все дополнительные возможности придется реализовывать самостоятельно, будь то повторный запуск приложения при сбое или ротация логов. Но зато он дает полный контроль над происходящим. Да и сделать в итоге можно куда больше — от уведомления в Telegram о сбое службы до IPC-взаимодействия с другими программами. И вдобавок — на скриптовом языке, без установки и изучения Visual Studio.
Читайте также: