Страница 1 из 1

российские ГОСТ-ы шифрования в OpenSSL

Добавлено: 15 июн 2013, 20:19
Olej
Дело выглядит так:

1. большую работу по алгоритмам ГОСТ ведёт "Криптоком"
Имеются следующие реализации российской криптографии для openssl:
Программный продукт МагПро КриптоПакет;
Поддержка ГОСТ в OpenSSL 0.9.8;
Поддержка ГОСТ в OpenSSL 1.0.0.

Поддерживаемая функциональность:
В соответствии с RFC 4357:
Электронная подпись ГОСТ Р 34.10-2001;
Распределение ключей VKO 34.10-2001;
Хэширование ГОСТ Р 34.11-94;
Симметричное шифрование ГОСТ 28147-89;
MAC (имитовставка) ГОСТ 28147-89.
работа с защищенными сообщениями по RFC 4490;
функциональность PKI по RFC 4491;
шифрсьюты TLS на базе российских алгоритмов в соответствии с draft-chudov-cryptopro-cptls.

Общую информацию лучше читать там.

2. Поддержка ГОСТ в OpenSSL существует давно (http://forum.russianfedora.ru/viewtopic.php?f=5&t=2849):
Уже как минимум с 2009го года в OpenSSL есть поддержка российских алгоритмов шифрования и ЭЦП ГОСТ. Тем не менее, ребята из Федоры упорно собирают OpenSSL без поддержки этих алгоритмов. Это понятно - все мы под КГБ^H^H^H ЦРУ^H^H^H (нувыпонели) ходим, и им, вероятно, не хочется с ними ссориться. Тем не менее, хотелось бы таки иметь полноценно собранный OpenSSL со всеми алгоритмами.
По моим наблюдениям, даже в OpenSSL 0.9.8 она уже есть (хотя считается, что в 1.0.0 и 1.0.1)

3. Но многие майнтейнеры дистрибутивов (Fedora, RedHat - это точно, но, похоже, что большинство) исключают поддержку ГОСТ опциями при сборке пакета.
Разговоры об этом идут, как минимум, 3 года ... а то и больше (http://forum.russianfedora.ru/viewtopic ... =150#p9504 - 2010г.):
GreyWolf писал(а):
Vascom писал(а):
GreyWolf писал(а):Вот было бы здорово, если бы в русской федоре, был бы openssl собранный с поддержкой ГОСТ-криптографии. А то постоянно приходится либо пересобирать самому, либо бдить, чтобы не дай бог не обновилась с родных репозиториев.
У вас есть готовый rpm? Вы готовы и дальше его поддерживать? Тогда его можно будет включить в репозиторий russianfedora.
RPM-то есть - периодически для своих нужд собираю, но тут посерьёзней проблема - FIPS и целенаправленное вырезание EC-алгоритмов RedHat'ом. Один из сотрудников Криптокома (чьими, по-сути, заслугами ГОСТ-алгортимы были продвинуты в OpenSSL) частенько на своём блоге на этот счёт пишет, к примеру, тут: http://vitus-wagner.livejournal.com/501859.html.
Может быть как-то попробовать пообщаться непосредственно с криптокомом на предмет мэйнтейнерства?
4. Эти вещи вылазят при сборке из исходников (при использовании собранных пакетов-приложений там вообще чудеса будут наблюдаться по сообщениям ошибок!), см. Криптовалютыhttps://copperlark.com/forum/index.php? ... 38#msg3938).
И такие вещи будут вылезать всё чаще!
Это пока ещё "цветочки".

Как решить эту проблему?

Кое-что из возможных решений подсказывает тот-же "Криптоком" (это для OpenSSL 1.0.1, но там рядом и для 1.0.0 есть):
Выполнить команду:

Код: Выделить всё

    ./config shared zlib enable-rfc3779 --prefix=/opt/cryptopack2
и далее как обычно...
Но это, как легко видеть - установка параллельной копии по другим путям, которые нужно указывать приложениям при сборке, или использовать символьные ссылки на библиотеки из /lib.

Я собрал так пробно по их рекомендациям OpenSSL в /opt:

Код: Выделить всё

bash-4.2$ ./openssl ciphers
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-SEED-SHA:DHE-DSS-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-SHA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5

Я так понимаю, ECDH-RSA-DES-CBC3-SHA и ему подобные во множестве алгоритмы - это и есть то, что требовалось.

Re: российские ГОСТ-ы шифрования в OpenSSL

Добавлено: 17 июн 2013, 08:38
Olej
Olej писал(а):Я так понимаю, ECDH-RSA-DES-CBC3-SHA и ему подобные во множестве алгоритмы - это и есть то, что требовалось.
Так как написано выше, я собрал (с проблемами) пакет из исходников CopperLark (Криптовалюты), использующий криптографирование по ГОСТ.

Код: Выделить всё

$ ./config shared zlib enable-rfc3779 --prefix=/opt/olenss-gost
Интересна не сама его сборка, а сборка в принципе параллельного экземпляра OpenSSL, который используется отдельными приложениями.

Код: Выделить всё

bash-4.2$ ldd CopperLark 
	linux-gate.so.1 =>  (0xb7750000)
	libminiupnpc.so.8 => /lib/libminiupnpc.so.8 (0x433f4000)
	librt.so.1 => /lib/librt.so.1 (0x42185000)
	libssl.so.1.0.0 => /lib/libssl.so.1.0.0 (0xb76cd000)
	libcrypto.so.1.0.0 => /lib/libcrypto.so.1.0.0 (0xb7500000)
	libdb_cxx-5.2.so => /lib/libdb_cxx-5.2.so (0xb7322000)
	libboost_system.so.1.48.0 => /lib/libboost_system.so.1.48.0 (0xb731d000)
	libboost_filesystem.so.1.48.0 => /lib/libboost_filesystem.so.1.48.0 (0xb72fd000)
	libboost_program_options.so.1.48.0 => /lib/libboost_program_options.so.1.48.0 (0xb72a8000)
	libboost_thread-mt.so.1.48.0 => /lib/libboost_thread-mt.so.1.48.0 (0xb728e000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x42162000)
...
Здесь легко видеть, что собранный экземпляр CopperLark использует самые последни из существующих в природе версии а). opensll + б). boost, а не те, которые ставятся из репозитария Fedora 17.
CopperLark - Бумажник_011.png
(73.19 КБ) 5596 скачиваний

Re: российские ГОСТ-ы шифрования в OpenSSL

Добавлено: 17 июн 2013, 08:44
Olej
И краткий промежуточный итог того, как обстоят дела в этом очень важном вопросе (OpenSSL + ГОСТ + дистрибутивы Linux) ... что само по себе куда важнее кошелька CopperLark ;-) :

1. Russian Fedora
Сложности были следующие:
1) компиляции OpenSSL с ГОСТ мешали FIPS патчи
2. OpenSSL 1.0 получил сертификат безопасности FIPS 140-2
03.07.2012
Проект OpenSSL получил для версии библиотеки 1.0 сертификат соответствия стандарту безопасности FIPS 140-2, определяющего требования к криптографическим модулям, необходимые для их использования в государственных учреждениях США. Сертификат выдан Американским институтом стандартов и технологий (NIST) после проведения соответствующего аудита кода проекта.
Смешно, да? :-o :
- майнтейнеры Russian Fedora тулят в репозитарии сборку OpenSSL (ключевого пакета, на который завязана вся система, начиная от инсталлятора yum)...
- которая собрана с FIPS-патчами...
- которые делает соответствие какому-то говённому US стандарту безопасности...
- но тем самым отметая возможность использования российских стандартов безопасности.
Смешно...

Re: российские ГОСТ-ы шифрования в OpenSSL

Добавлено: 18 окт 2016, 14:11
Olej
ГОСТ Р 34.12 '15 на SSE2, или Не так уж и плох Кузнечик
11 октября в 19:38
Приказом от 19 июня 2015 года №749 в качестве нового стандарта блочного шифрования утвержден ГОСТ Р 34.12 2015. Стандарт разработан Центром защиты информации и специальной связи ФСБ России с участием ОАО «ИнфоТеКС», внесен Техническим комитетом по стандартизации ТК 26 «Криптографическая защита информации», и вступил в действие с 1 января 2016 года.
Этот стандарт содержит описания двух блочных шифров: «Магмы» с длиной блока в 64 бита и «Кузнечика» с длиной блока в 128 бит; при этом «Магма» — всего лишь новое название для старого, всем хорошо известного блочного шифра ГОСТ 28147 '89 (на самом деле, не совсем новое, именно под этим кодовым названием разрабатывался прежний стандарт блочного шифрования вплоть до 1994 года) с зафиксированными узлами замены. «Наконец–то, история нас чему–то научила», — скажете вы, и будете правы.
В эту же тему:

- В ГОСТе сидел «Кузнечик» из песочницы
В июне этого года в России был принят новый стандарт блочного шифрования — ГОСТ Р 34.12-2015. Этот стандарт помимо старого доброго ГОСТ 28147-89, который теперь называется «Магма» и имеет фиксированный набор подстановок, содержит описание блочного шифра «Кузнечик». О нем я и расскажу в этом посте.
- Open-source реализации отечественных криптоГОСТов
На выходных решил поискать open-source реализации отечественных криптографических стандартов. Прежде всего интересовали новые: хэш-функция Стрибог (ГОСТ Р 34.11-2012), Кузнечик (ГОСТ Р 34.12-2015) и ЭЦП (ГОСТ Р 34.10-2012 или 2001 (без 512-бит) ). Старый ГОСТ 28147-89 специально не искал, поскольку найти его реализацию никаких проблем нет уже давно.
Итак, давайте посмотрим, что же получилось. Сразу предупреждаю, что корректность реализаций не проверял.
- Пошаговая работа ГОСТ Р 34.12-2015 в режиме ECB
Изображение
Не так давно появилась статья посвящённая новому стандарту блочного шифрования — ГОСТ Р 34.12-2015. В которой достаточно подробно описаны все новшества этого алгоритма. В этой статье я попробую объяснить пошаговое действие алгоритма в режиме простой замены, чтобы ещё нагляднее пользователи смогли оценить достоинства отечественного стандарта. В процессе развёртки раундовых ключей и в режиме зашифрования используются одни и те же преобразования, поэтому выносить отдельно этот вопрос не станем. Для большего понимания каждое преобразование будет пояснять часть кода реализации стандарта на языке С++