Вычисление отпечатка файла по алгоритму вычисления хэш-функции, соответствующему ГОСТ 34.11 с помощью OpenSSL.
В СМЭВ 3.х появилось файловое хранилище, оно обязательно, если суммарный объем вложений сообщения превышает 5 Мб. При этом суммарный объем файлов сообщения увеличивается до 1 Гб.
Выдержка из документации СМЭВ 3.х по работе с файловым хранилищем:
вычислить отпечаток файла по алгоритму вычисления хэш-функции, соответствующему ГОСТ 34.11;
Как вычислить хэш и что нам понадобится?
Так сложилось, не все ведут разработку программного обеспечения для госуслуг на Java (СМЭВ предлагает пример клиента с реализацией всего функционала), поэтому пришлось как-то выкручиваться.
Все действия производились на компьютере под управлением Windows 7 professional x64 с установленной бесплатной библиотекой OpenSSL версии 1.0.2e.
ГОСТ Р 34.11-94 криптографическая хэш-функция
Стандарт ГОСТ Р 34.11-94, разработан в 1994 г. и описывает российскую криптографическую хэш-функцию. Можете Скачать текст ГОСТ Р 34.11-94.
Конфигурирование OpenSSL.
Редактируем файл openssl.cfg
В начало конфигурационного файла OpenSSL, openssl.cnf добавляем:
openssl_conf = openssl_def
и в конец файла вставляем:
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
default_algorithms = ALL
engine_id = gost
Описание вставленных параметров:
- Параметр default_algorithms указывает на использование движком всех алгоримов, которые есть в движке
- Параметр engine_id указывает на название движка значение gost
Сохраняем конфигурационный файл.
Вычисление хеш по ГОСТ 34.11
Консольная утилита openssl входящая в бесплатную библиотеку OpenSSL 1.0.2e поддерживает ГОСТ Р 34.11-94 c параметрами CryptoPro. Формат вывода хэша - младшие байты первыми.
Создадим пустой текстовый файл empty.txt, от которого мы будем получать хэш. Запускаем командную консоль Windows (командой cmd)
Пример вызова:
openssl dgst -md_gost94 empty.txt
Результат:
md_gost94(empty.txt)= 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0
Для вычисления параметра Hash в xml описании передаваемого в файловое хранилище СМЭВ 3.х, необходимо полученный хеш представленный в hex виде перекодировать в Base64.
openssl dgst -md_gost94 -binary путь_имя_файла | openssl base64 -out путь_имя_файла.hash
Вот и все.
Важно!
Кстати сразу не заработало, пока не были установлены конфигурационные константы для openssl в командной строке выполните команды:
set OPENSSL_CONF=путь_до_файла\openssl.cfg
set OPENSSL_ENGINES=путь_до_openssl
Контрольные значения
Значение хеша для пустого файла empty.txt:
хеш 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0
Значение хеша в base64 для пустого файла empty.txt:
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsA=
P.S.
Большое спасибо Орлову Юрию из компании Лисси Крипто в помощи по настройке openssl, настоящий профессионал своего дела.
Это мой первый пост, прошу прощение за какие-то неточности и корявости изложения.
0 комментариев