Работа с ГОСТ TLS в реальных проектах: костыли, решения и опыт

Работа с ГОСТ TLS в реальных проектах: костыли, решения и опыт

Привет, Хабр! Меня зовут Максим Теплых, эксперт по тестированию на проникновение в ИТ-компании Innostage. В этой статье я хочу рассмотреть тему, которая с годами становится все более актуальной — тестирование систем, использующих ГОСТ TLS. Кратко расскажу о самой технологии, а также покажу подходы и наработки, которые применяем на практике.

Заранее приношу извинения за объемное и несколько затянутое введение. Хотя изложение начинается не с динозавров и не с истории древней Руси, тему все же необходимо раскрыть с некоторой предыстории.

За годы практики нам приходилось сталкиваться с большим разнообразием технологий: одни были нишевые, другие популярными, но с нотками экзотики. Сегодня я расскажу о довольно привычной вещи, с которой многие встречаются ежедневно, но зачастую не замечают.

В 2015 году появился отечественный стандарт ГОСТ Р 34.12-2015, и мир узнал ещё одно необычное название для серьёзной технологии — «Кузнечик». За этим названием скрывался симметричный блочный алгоритм шифрования, который уже в 2018 году стал частью национального стандарта шифрования в России ГОСТ 34.12-2018.

Имя это стало чуть более известно из-за новостей о новых требованиях для оборудования сетей 5G. Для тех, кто читает это название впервые или просто хочет познакомиться с алгоритмом поближе, рекомендую две хорошие статьи: Статья про Кузнечик простыми словами и более подробная статья .

Итак, зачем понадобился новый алгоритм? Это часть усилий по достижению технологического суверенитета и важный этап в развитии другой отечественной технологии, о которой и пойдёт речь.

Эта технология — ГОСТ TLS. Она непростая и комплексная. По сути, это набор отечественных криптографических решений, используемых при реализации протокола TLS.

Протокол TLS (Transport Layer Security) представляет собой один из наиболее широко используемых механизмов для установления защищенного канала связи. Он основан на SSL (Secure Sockets Layer) версии 3.0 и за время развития сильно изменился. Сейчас актуальна версия TLS 1.3, хотя TLS 1.2 остаётся наиболее распространённой.

Протокол TLS (Transport Layer Security) представляет собой один из наиболее широко используемых механизмов для установления защищенного канала связи. Он основан на SSL (Secure Sockets Layer) версии 3.0 и за время развития сильно изменился. Сейчас актуальна версия TLS 1.3, хотя TLS 1.2 остаётся наиболее распространённой.

Как понятно из описания, это технология для защиты данных, передаваемых по каналам связи. Распространенность и привычность протокола TLS мало кого удивит, он есть буквально повсюду. Например, вы читаете эту статью через HTTPS, который также использует TLS. Но что насчёт его отечественной версии?

Отчасти могу понять скептицизм некоторых наших соотечественников в вопросах наших технологий, однако именно ГОСТ TLS стал той темной лошадкой, которая получила распространение и доказала свою жизнеспособность. Пусть это не всегда заметно, но системы, использующие ГОСТ TLS, есть практически у каждого из нас. Государственные сайты поддерживают работу через ГОСТ TLS. Ваше мобильное приложение Госуслуг или налоговой, большую часть трафика шифрует с помощью того самого Кузнечика. Множество систем КИИ, да и просто критичных для бизнеса работает только с использованием ГОСТ TLS, который стал привычным и незаметным для большинства пользователей.

Но в чем тогда ценность статьи, если я так хвалю эту технологию? Для обычного пользователя ГОСТ TLS стал незаметной частью жизни, а вот для разработки и тестирования он часто оказывается серьёзной проблемой.

Проблемы индейцев

Для обычных пользователей таких систем и сайтов проблем особых нет. Весь heavy lifting на себя берут приложения с решениями для работы с ГОСТ TLS или этим занимается браузер. Для тестировщиков и разработчиков этого совершенно недостаточно.

Например, в задачах анализа защищённости и пентеста нам нужно нечто большее, чем просто браузер с поддержкой ГОСТа. Разработчикам, в свою очередь, приходится искать способы, как встроить в существующую инфраструктуру новые компоненты, которые могут работать с ГОСТ.

Есть ли такие решения на рынке? Ответ неутешительный: готовых инструментов для отладки нет, есть только заготовки.

Существующие технические решения

Работать без госта

Самый простой вариант для проведения любых тестирований — просить доступ к стендам, где не используется ГОСТ TLS. Решение простое, но зачастую неприменимое.

В моей практике были случаи, когда удавалось договориться с заказчиком и получить доступ к тестируемой системе в обход ГОСТ TLS. Но чаще всего никто не хочет разворачивать дополнительный стенд или клонировать боевую систему — это дорого.

Отсюда вопрос: как работать с ГОСТ TLS при тестировании?

Работа через существующие инструменты

Много лет назад стало понятно: готовых инструментов нет, необходимо использовать то, что есть.

А что же есть?

Браузеры с поддержкой ГОСТ TLS. Они построены на базе Chromium, и в них можно поставить нужные плагины, превратив их в подобие BurpSuite.

Раньше были браузеры с нативной поддержкой ГОСТа. Сейчас они либо устарели, либо используют msspi (через сторонний криптопровайдер). Например, https://github.com/deemru/Chromium-Gost — это Chromium с msspi, который работает с криптопровайдером Крипто ПРО CSP. Яндекс бразуер также умеет работать с msspi из коробки.

Раньше были браузеры с нативной поддержкой ГОСТа. Сейчас они либо устарели, либо используют msspi (через сторонний криптопровайдер). Например, https://github.com/deemru/Chromium-Gost — это Chromium с msspi, который работает с криптопровайдером Крипто ПРО CSP. Яндекс бразуер также умеет работать с msspi из коробки.

Решение рабочее, но неудобное. Возможности BurSuite и ZAP нельзя полноценно реализовать через браузерные плагины. Есть инструменты и утилиты, которые невозможно пропустить через браузер.

Хочется перебрать файлы по словарю? Не получится, надо придумывать другой способ.

Существующий пласт проблем

В поисках решений мы провели анализ, почему существующие инструменты не работают с ГОСТ TLS.

В «красной» части ИБ для тестирования веб-приложений уже много лет используют два инструмента:

Но нас интересовал конкретный вопрос: почему ни один из них не работает с ГОСТом? Изучив вопрос поближе, мы разбили проблему на две части: криптография и сертификаты.

Снова возвращаемся к «Кузнечику» и «Стрибогу»: первый — алгоритм шифрования, второй — алгоритм хэширования. Сначала казалось, что инструменты, созданные за пределами России, просто не поддерживают эти алгоритмы и придётся всё переписывать.

Реальность оказалась несколько интереснее.

ZAP использует OpenSSL и его модули, а Burp Suite — библиотеку Bouncy Castle. И в обоих случаях поддержка ГОСТ-алгоритмов есть:

Bouncy Castle — поддерживает ГОСТ «из коробки»

Bouncy Castle — поддерживает ГОСТ «из коробки»

OpenSSL — поддержку можно добавить через модули или получить вместе с КриптоПРО CSP

OpenSSL — поддержку можно добавить через модули или получить вместе с КриптоПРО CSP

Получается, поддержка криптографии есть. Тогда почему всё равно не работает?

Все подобные инструменты реализуют атаку MITM, точнее технику ssl-split.

В чем же суть? Браузер открывает сайт через HTTP-прокси, в роли которого выступает ZAP или Burp. Инструмент устанавливает соединение с сайтом, получает его сертификат и генерирует самоподписанную копию. Благодаря этому он может расшифровывать HTTPS-трафик: принимает данные от браузера, обрабатывает их и отправляет на сервер.

Где возникает проблема? Всё работает до момента генерации самоподписанного сертификата. Даже если инструмент умеет устанавливать соединение с использованием ГОСТ TLS, он не может корректно обработать сертификат, полученный от сервера. Сертификаты ГОСТ внешне похожи на обычные TLS-сертификаты, но отличаются содержимым. Поля, их идентификаторы и значения хоть и поддерживаются библиотеками, но полноценной работы с ними в этих инструментах нет. Ни Burp Suite, ни ZAP не умеют преобразовывать ГОСТ-сертификаты в привычный формат RSA/ECC. Разработчики просто не закладывали такой сценарий.

Ниже приведены примеры различий между OID и значениями полей в сертификатах:

Международный сертификат (RSA/ECC)

Алгоритм подписи

sha256WithRSAEncryption (1.2.840.113549.1.1.11)

1.2.643.7.1.1.3.2 (для 256-бит)

Алгоритм хэширования

SHA-256 (2.16.840.1.101.3.4.2.1)

ГОСТ Р 34.11-2012 (1.2.643.7.1.1.2.2)

Алгоритм ключа

RSA (1.2.840.113549.1.1.1) или EC (1.2.840.10045.2.1)

ГОСТ Р 34.10-2012 (1.2.643.7.1.1.1.1 для 256 бит)

Параметры ключа

Параметры эллиптической кривой (например, prime256v1) или NULL для RSA

Параметры эллиптической кривой, специфичные для ГОСТ.

DN (Distinguished Name)

Стандартные поля: CN, O, C и т.д.

Могут использоваться те же поля, но иногда с добавлением специфических, например, INN (ИНН) или OGRN (ОГРН).

Изобретение костылей

Из полученных знаний получили два варианта действий:

Переписывать куски ZAP/BurpSuite

Переписывать куски ZAP/BurpSuite

Отдать работу с ГОСТом другому инструменту

Отдать работу с ГОСТом другому инструменту

Мы выбрали второй вариант.

Что он предполагает:

ZAP/BurpSuite переводятся в конфигурацию, которая реализует логику ssl-strip. То есть получает шифрованный трафик, расшифровывает и передает дальше.

ZAP/BurpSuite переводятся в конфигурацию, которая реализует логику ssl-strip. То есть получает шифрованный трафик, расшифровывает и передает дальше.

Мы работаем с расшифрованными данными: смотрим, меняем.

Мы работаем с расшифрованными данными: смотрим, меняем.

ZAP/BurpSuite отправляет незашифрованные данные в другой инструмент.

ZAP/BurpSuite отправляет незашифрованные данные в другой инструмент.

Другой инструмент производит взаимодействие с оригинальным сайтом с помощью ГОСТ TLS и передает данные.

Другой инструмент производит взаимодействие с оригинальным сайтом с помощью ГОСТ TLS и передает данные.

Схема вполне логичная и позволяет просто сбросить с ZAP/BurpSuite задачу, которую они не могут выполнить.

Если представить все в виде схемы, то выглядит это так:

Преимущество данной схемы в том, что мы можем пропускать через новый инструмент все что захотим (fuff, dirb, sqlmap, iisns). А при достаточных мощностях можно использовать один инструмент для нескольких специалистов одновременно, это немного упростит жизнь тому, кто это будет настраивать.

Для реализации такой схемы у нас целых четыре варианта костылей.

Самый простой, быстрый и бесплатный.

В комплекте поставки КриптоПро CSP есть утилита stunnel с поддержкой ГОСТ TLS. С помощью нее можно создать тоннель до нужного нам сайта, и все шифрование она возьмет на себя. Ссылка на сайт криптопро: https://cryptopro.ru/products/other/stunnel

Пример конфигурации такой конструкции (stunnel.conf):

Пример конфигурации такой конструкции (stunnel.conf):

Запуск нашей конфигурации:

/opt/cprocsp/sbin/amd64/stunnel_thread stunnel.conf

/opt/cprocsp/sbin/amd64/stunnel_thread stunnel.conf

После запуска нужный сайт становится доступен на localhost на порту 1500. Подключение к нему происходит через обычный http без шифрования.

Не забываем прописать себе новый адрес сайта в hosts

Плюсы: решение работает, есть поддержка авторизации по сертификатам.

Минусы: для каждого сайта нужна отдельная настройка. Не подходит для работы с мобильными приложениями (к этой проблеме вернёмся позже).

Вариант с минимальными затратами на разработку или покупку. На нём мы в итоге и остановились.

Этот подход основан на том, что nginx в unix дистрибутивах вполне спокойно пользуется криптографией из openssl. При этом никаких специальных патчей или сложных настроек не требуется.

Здесь есть маленькая загвоздка, после версии 1.1.0 openssl перестал поддерживать ГОСТ криптографию. Но это поправимо. На просторах open-source существует репозиторий https://github.com/gost-engine/engine , в нем лежит имплементация отечественной криптографии для openssl. Можно взять и собрать нужный модуль с криптографией для своих потребностей.

Собрав библиотеку, переместите ее в /usr/local/ssl/lib/engines-3/ и пропишите ее в конфигурацию для openssl.

Если собирать модуль из исходников вам не хочется, то существует и другой способ: https://github.com/rnixik/docker-openssl-gost

В этом репозитории представлены примеры docker-контейнеров и их build-файлов. Внутри контейнеров находятся готовые сборки OpenSSL, nginx и curl. Подробное описание реализации приведено в отдельной статье .

Обратите внимание, репозиторий и контейнеры давно не обновлялись. В старых версиях есть security баги, не говорите, что мы не предупреждали.

Обратите внимание, репозиторий и контейнеры давно не обновлялись. В старых версиях есть security баги, не говорите, что мы не предупреждали.

Если собираете свой образ путем копирования библиотек из готового примера, то не забудьте их активировать.

echo "/usr/local/ssl/lib" >> /etc/ ld.so .conf.d/ssl.conf && ldconfig

echo "/usr/local/ssl/lib" >> /etc/ ld.so .conf.d/ssl.conf && ldconfig

Так можно делать и вместо прописывания конфигурации для openssl при ручной сборке.

Разобравшись с openssl, переходим к части с nignx.

Есть два пути:

устанавливаем его после того, как собрали все для openssl

устанавливаем его после того, как собрали все для openssl

пересобираем, если установили до сборки.

пересобираем, если установили до сборки.

Конфигурация nginx для наших целей — простой reverse-proxy, но с некоторыми нюансами:

Безусловно главная часть в данной конфигурации — это настройка поддерживаемых алгоритмов шифрования. За это отвечают две строки:

proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM

proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM

Включенные старые версии TLS, можно убрать, но мы оставили их на случай разных сценариев. Поддержку TLSv1.3 для работы с ГОСТ TLS добавить не удалось, они так и не смогли подружиться.

В качестве приятных бонусов этой конфигурации: она позволяет работать не только с 443 портом на целевом ресурсе. Заголовок Host корректно обрабатывается даже при указании порта после адреса. Условно говоря, при поступлении запроса с заголовком:

Host: gost.site.ru:8443

Host: gost.site.ru:8443

Данная конфигурация будет использовать:

proxy_pass https://$host

proxy_pass https://$host

Что будет равноценно:

proxy_pass https://gost.site.ru:8443

proxy_pass https://gost.site.ru:8443

Если говорить о других параметрах, в глаза бросаются настройки буферов. Это конфигурационные изменения, к которым мы пришли в ходе работы. Часть из них ускоряет проксирование, часть позволяет обрабатывать большие заголовки HTTP-запросов (например, при большом количестве cookie).

Блок с указанием резолвера ситуативный и зависит от вашей конфигурации.

Приведённый конфиг корректно работает только для HTTP/1.1 и ниже. Причина проста: хотя HTTP/2 формально не требует TLS, большинство браузеров и клиентов используют его только с шифрованием.

Если нужно добавить поддержку http2, меняем конфиг:

Плюсы метода очевидны: его не нужно перенастраивать под каждый сайт. Работа через BurpSuite идет так, будто проблема с ГОСТ TLS отсутствует.

Минусы: из-за особенностей конструкции, для перебора vhosts придется переделывать конфигурацию.

Вариант похож на первый, но требует затрат. В составе продукта КриптоПРО CSP есть компонент с поддержкой msspi (тот самый механизм, который используется в браузерах для работы с ГОСТ TLS).

Веб-серверы nginx и Apache могут работать с msspi, но для этого требуется изменение их кода. У КриптоПРО есть готовые решения:

Для nignx есть бинарный патч

Для nignx есть бинарный патч

Для apache есть кастомный модуль mod_ssl

Для apache есть кастомный модуль mod_ssl

Ознакомиться можно по ссылке .

Недостатки этого подхода в том, что он требует довольно большие лицензии Крипто ПРО CSP, а использование бинарных патчей ограничивает возможность обновления веб-серверов.

Преимущества: поддержка TLSv1.3 работает, и такое решение может пройти сертификацию.

С точки зрения конфигурации серверов для наших задач отличий от первого варианта нет.

Последний вариант — разработка собственного инструмента.

Тем, кто отважится отправиться в это занимательное путешествие, мы дадим несколько ссылок на полезные материалы:

https://github.com/deemru/msspi — репозиторий с msspi

https://github.com/deemru/msspi — репозиторий с msspi

https://github.com/deemru/go‑msspi — реализация msspi для go. У go своя криптография под капотом, потому заставить работать его с ГОСТ та еще задачка, но решение уже существует

https://github.com/deemru/go‑msspi — реализация msspi для go. У go своя криптография под капотом, потому заставить работать его с ГОСТ та еще задачка, но решение уже существует

https://www.bouncycastle.org/ — здесь есть криптография на любой вкус и языки. И ГОСТ там тоже есть.

https://www.bouncycastle.org/ — здесь есть криптография на любой вкус и языки. И ГОСТ там тоже есть.

Мы, в свою очередь, на такое путешествие не отважились, но возможность реализации видна (да и просится на самом деле).

Интеграция инструментов с выбранными решениями

С вариантами реализации мы закончили, переходим к настройке BurpSuite/ZAP.

Если выбрали вариант работы через stunnel, то никаких серьезных настроек не потребуется. Необходимо лишь направить трафик на порт stunnel через инструмент. Просто заранее проверьте в настройках прокси браузера и системы, чтобы адрес stunnel не стоял в исключениях (часто в исключениях прокси стоят "серые" сети, и по умолчанию отключено проксирование для localhost ).

При использовании nginx/apache настройка сложнее. BurpSuite и ZAP для этой схемы должны работать в режиме ssl-strip.

Для BurpSuite можно настроить еще один listener со специальной конфигурацией:

Такая конфигурация потребует включения https на стороне reverse-прокси, т.к. она не работает как ssl-strip. Опция Convert HTTPS links to HTTP во вкладке настроек прокси работает нестабильно и не всегда подходит. Также возможны проблемы с обработкой заголовка Host: в какой-то момент эта конфигурация перестала добавлять в конец адреса используемый порт, что нарушает работу с любыми портами в reverse-прокси.

Для решения можно использовать бесплатное расширение для BurpSuite — Target Redirector. Она может пересылать исходящие запросы на нужный адрес на основе простых правил, выполнять ssl-strip и переписывать заголовок Host в корректном формате.

Пример конфигурации расширения:

Здесь все логично и понятно:

Редирект запросов к любым сайтам

Редирект запросов к любым сайтам

Работающих через https

Работающих через https

Пересылка на адрес 127.0.0.1, порт 8081

Пересылка на адрес 127.0.0.1, порт 8081

Пересылка в виде http (plaintext), по сути, выполнение ssl-strip

Пересылка в виде http (plaintext), по сути, выполнение ssl-strip

Заголовок Host выставляется как в оригинальном запросе, но с указанием порта

Заголовок Host выставляется как в оригинальном запросе, но с указанием порта

Такое расширение с приведённой конфигурацией позволяет использовать все преимущества reverse-прокси.

Если возникают ошибки с протоколом http2, отключите опцию выбора http2 по умолчанию в настройках Network -> HTTP -> HTTP2. Если http2 необходим, воспользуйтесь приведенным примером конфигурации для nginx и в настройках Target Redirector выставьте опцию redirect as https.

Настройка ZAP для этой схемы требует дополнительной реализации. Вероятно, потребуется создать расширение с функциональностью, аналогичной Target Redirector, либо использовать готовые решения для этой задачи, если они доступны.

С настройкой инструментов для работы с сайтами за ГОСТ TLS мы разобрались. Но нам необходимо учитывать и мобильные приложения.

Все могло бы быть просто и красиво, привычные настройки, привычные действия, известные всем скрипты для frida. Но… Мобильные приложения, которые могут работать с ГОСТ TLS, имеют под капотом кастомные http-клиенты. Это могут быть решения, написанные вокруг продуктов от КриптоПРО, а могут быть и самописные реализации (с использованием того же bouncycastle). В зависимости от реализации, такие клиенты могут работать как со всеми шифрами (ГОСТ/неГОСТ), так и только с конкретным типом (только ГОСТ). Отсюда возникает новая проблема: как заставить работать ГОСТовые клиенты и при этом видеть их трафик?

Ответ нашелся довольно быстро. У нас уже есть веб-сервер с поддержкой ГОСТ TLS, осталось только соорудить такую конструкцию, которая принимает соединения с шифрованием ГОСТ и передает уже plaintext запросы в наш открытый BurpSuite, а оттуда уже в ранее созданную конструкцию.

Общий вид такой схемы:

Настройка nginx

Пример конфигурации для нашего nginx сервера:

Это еще одна reverse-proxy. В этом случае он пересылает уже расшифрованный траффик в BurpSuite.

За это отвечает этот блок конфигурации:

В конфигурации указано два варианта сертификатов. Nginx поддерживает использование разных сертификатов и ключей для разных алгоритмов шифрования. В нашем случае это сертификат для ГОСТ TLS и сертификат для стандартного TLS. Это позволяет использовать одну прокси для всех вариантов http-клиентов (поскольку у нас есть поддержка всех вариантов шифрования).

В разделе ssl_ciphers указываем поддержку ГОСТ - GOST2001-GOST89-GOST89:HIGH:MEDIUM

Представленная на схеме карусель запросов внутри BurpSuite реализуется с помощью двух новых litener'а и одного правила для TLS-passthru.

Первый listener:

Порт 8084 на адресе доступном для мобильного приложения

Порт 8084 на адресе доступном для мобильного приложения

Request handling — переадресация на адрес 127.0.0.1:8082, Invisible proxy включено

Request handling — переадресация на адрес 127.0.0.1:8082, Invisible proxy включено

Второй listener:

Порт 8083 на localhost

Порт 8083 на localhost

Request handling — Invisible proxy включить

Request handling — Invisible proxy включить

Правило для TLS -passthru (в разделе Proxy):

адрес 127.0.0.1 порт 8082

адрес 127.0.0.1 порт 8082

Настройки для Target Redirector немного изменяются, правила редиректа переключаются с redirect only https на redirect both.

Проверить работоспособность можно с помощью curl с поддержкой ГОСТ TLS. Обратите внимание, в качестве прокси используется новый созданный listener на порту 8084.

curl -k https://gost.cryptopro.ru/ -x " http://host.docker.internal:8084 " -vvv --ciphers GOST2012-GOST8912-GOST8912

curl -k https://gost.cryptopro.ru/ -x " http://host.docker.internal:8084 " -vvv --ciphers GOST2012-GOST8912-GOST8912

Для тестируемого мобильного приложения необходимо указать http-proxy <адрес_BurpSuite>:8084. Некоторые http-клиенты на Andorid игнорируют системные настройки. В этих случаях можно использовать следующие варианты.

С помощью iptables перенаправить нужный порт в нашу прокси:

iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination <адрес_BurpSuite>:8084 iptables -t nat -A POSTROUTING -p tcp --dport 443 -j MASQUERADE

iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination <адрес_BurpSuite>:8084

iptables -t nat -A POSTROUTING -p tcp --dport 443 -j MASQUERADE

Или ставим на телефон ProxyDroid и настраиваем прокси через него:

Pinnig'а сертификаты и отключения их проверки зависят от конкретного приложения. Если у вас есть опыт тестирования мобильных приложений, то требуется разобрать apk, найти нужную функцию и написать хук-скрипт для frida.

Преимущества решений, построенных вокруг openssl

Основное преимущество реализации через сборку модуля для openssl заключается в том, что многие утилиты и инструменты используют его для реализации криптографии.

Например, при написании автоматизации на python можно использовать библиотеки urlib3 и requests для реализации http клиента с поддержкой ГОСТ TLS.

Небольшой hello world:

Или другой вариант: собрать curl, после установки модуля для openssl. В этом случае он будет корректно работать с ГОСТ TLS.

Вместо вывода

ГОСТ TLS все чаще встречается в наших проектах, и для работы с ним регулярно приходится искать обходные решения. При этом крупные вендоры, занимающиеся отечественной криптографии, не предлагают базовых рекомендаций и подходящих решений для отладки. Вопрос, как будет развиваться ситуация с появлением отечественных стандартов 5G, также использующих ГОСТ, остается открытым.

Надеемся, что приведённые в статье подходы будут полезны в вашей работе. Они не универсальны, но все описанные выше методы проверены в реальных проектах.

← Cybersecurity