ГОСТ в GnuTLS: сертификаты, VKO и защита сеанса¶
TLS защищает соединение от чтения и незаметного изменения данных, а также позволяет проверить подлинность стороны. GnuTLS — реализация этого протокола, в которой НАЙС.ОС включает криптографические алгоритмы ГОСТ.
Три независимых вопроса при установлении TLS-соединения¶
- Кому мы подключаемся? Сертификат X.509 содержит публичный ключ и имя владельца. Клиент проверяет имя сервера, цепочку удостоверяющих центров и назначение сертификата.
- Как согласуем ключ сеанса? Протокол выполняет согласование общего секрета. В ГОСТ-профилях для этого предусмотрен механизм VKO на эллиптических кривых.
- Как защищаем передаваемые данные? Данные шифруются согласованным симметричным алгоритмом и снабжаются механизмом контроля целостности.
Эти действия связаны, но используют разные алгоритмы. Поэтому нельзя считать, что одна строка Signature Algorithm: GOST в сертификате полностью описывает безопасность соединения.
Электронная подпись ГОСТ Р 34.10¶
Сервер может использовать ключ ГОСТ Р 34.10-2012/256 либо /512 для доказательства владения секретным ключом в рамках соответствующего TLS-профиля. Для подписи применяется хэш соответствующего семейства, обычно ГОСТ Р 34.11-2012 («Стрибог»).
Исторические сертификаты ГОСТ Р 34.10-2001 встречаются при интеграции с устаревшими системами. Их присутствие в криптографической библиотеке не означает, что этот профиль подходит для развёртывания нового сервиса; выбор определяется требованиями протокола и контрагентов.
VKO — согласование общего секрета¶
VKO («выработка ключа обмена») использует операции над эллиптическими кривыми для получения одинакового секрета на обеих сторонах соединения. Открытые параметры можно передавать по сети; закрытая ключевая часть не передаётся. Далее из полученного секрета выводятся ключи симметричного шифрования.
В ГОСТ-TLS для GnuTLS определены группы кривых и механизмы обмена, совместимые с описанными стандартами. Для взаимодействия клиент и сервер должны поддерживать хотя бы один общий допустимый профиль.
Чем защищается трафик¶
В ГОСТ-профилях TLS встречаются:
- Кузнечик — блочный шифр ГОСТ Р 34.12-2015 с блоком 128 бит.
- Магма — блочный шифр того же стандарта с блоком 64 бита.
- ГОСТ 28147-89 — историческое семейство симметричных алгоритмов.
- OMAC и IMIT — механизмы аутентификации сообщений в соответствующих наборах.
RFC 9189 описывает для TLS 1.2 сочетания KUZNYECHIK_CTR_OMAC, MAGMA_CTR_OMAC и 28147_CNT_IMIT. Название шифра в документации — лишь часть криптопрофиля: важно также согласование метода обмена ключами, версии TLS и параметров проверки целостности.
Пример полного смысла соединения¶
Когда клиент подключается к серверу с ГОСТ-сертификатом, проверка проходит этапы: определить имя сервера и корневой УЦ, удостовериться в допустимости сертификата, согласовать группы и подписи, установить общий секрет, вывести сессионные ключи, перейти к защищённой передаче данных. Ошибка любого этапа может привести к отказу в подключении — это не всегда «проблема сертификата».
Отношение к OpenSSL и libksba¶
OpenSSL используется программами, работающими с API OpenSSL, и обеспечивает свои механизмы ГОСТ Engine/Provider. GnuTLS самостоятельно ведёт TLS-сеанс. libksba помогает приложениям семейства GnuPG правильно разбирать сертификаты X.509 и контейнеры CMS; не является TLS-движком. Эти части НАЙС.ОС выполняют разные функции и дополняют друг друга.