Договор с электронной подписью может прочитать любой, к кому попадет файл: подпись не скрывает текст. Скрыть его от посторонних помогает шифр, а проверить, не изменили ли файл, — хеш-функция. Подпись, шифрование и хеширование относятся к криптографии, но алгоритмы у них разные, и в российских стандартах у каждой задачи свой номер.
Криптографическую хеш-функцию описывает ГОСТ Р 34.11, а в ГОСТ Р 34.12 вошли два блочных шифра, «Кузнечик» и «Магма». Главного алгоритма в семействе ГОСТ Р 34 нет, и заменить один механизм другим не получится: хеширование не предназначено для восстановления исходного файла, а блочный шифр не устанавливает, кто владеет ключом подписи.
В документации попадаются как ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 и ГОСТ Р 34.12-2015, так и межгосударственные ГОСТ 34.10-2018, ГОСТ 34.11-2018 и ГОСТ 34.12-2018. Версии 2018 года подготовили на основе российских национальных стандартов, в России они действуют с 1 июня 2019 года. Актуальный статус документов публикует Росстандарт.
Из-за разных годов в обозначениях легко запутаться, но новый номер не означает, что появился совершенно другой «Стрибог» или новая система цифровой подписи.
ГОСТ Р 34.10 и «Стрибог»: что происходит при подписании файла
Прежде чем отправить договор в PDF, на него ставят электронную подпись. Сначала криптографическая программа прогоняет содержимое файла через ГОСТ Р 34.11 и получает хеш фиксированной длины, а затем подставляет его в алгоритм подписи по ГОСТ Р 34.10.
ГОСТ Р 34.11-2012 задает семейство хеш-функций с результатом длиной 256 или 512 бит. За алгоритмом закрепилось название «Стрибог», хотя официально стандарт называется куда прозаичнее — «Функция хэширования». Размер файла на длину хеша не влияет: и небольшой текстовый документ, и архив в несколько гигабайт дают значение заранее определенного размера.
Хеш часто называют цифровым отпечатком файла. Аналогия годится, пока от нее не ждут слишком многого: штатного способа собрать исходный документ из хеша нет. Если изменить входные данные, изменится и результат вычисления, а криптографическая стойкость функции должна мешать подобрать другое сообщение с нужным значением.
Полностью исключить коллизии нельзя: вариантов исходных данных несравнимо больше, чем возможных 256- или 512-битных хешей, так что два разных сообщения математически могут дать одинаковый результат. Для хорошей криптографической функции важно другое — чтобы целенаправленный поиск подходящей коллизии требовал нереалистичных вычислительных ресурсов.
Схема ГОСТ Р 34.10-2012 построена на эллиптических кривых и паре связанных ключей: закрытый хранит владелец, открытый можно передавать другим участникам. Для проверки программе нужны открытый ключ, данные и подпись.
В стандарте есть варианты с параметрами порядка 256 и 512 бит. Сама подпись состоит из двух чисел, r и s: в двоичном виде они занимают 64 байта в 256-битном варианте и 128 байт в 512-битном. Файл подписи бывает гораздо крупнее, потому что в контейнеры CMS и CAdES могут входить сертификаты, метки времени и дополнительные служебные сведения.
Вычисляя подпись, программа использует одноразовое значение k. Если оно повторится или генератор выдаст предсказуемое число, в схеме появится серьезная уязвимость. Атаковать саму эллиптическую кривую в такой ситуации не придется: ошибки при генерации k может хватить, чтобы раскрыть закрытый ключ.
Кому принадлежит открытый ключ, ГОСТ Р 34.10 не устанавливает: ключ с конкретным владельцем связывают сертификат и инфраструктура открытых ключей. Квалифицированная электронная подпись в России — одновременно криптографический механизм и юридический инструмент, и требования к ней задают Федеральный закон № 63-ФЗ «Об электронной подписи» и связанные нормативные акты.
«Кузнечик» и «Магма»: где начинается шифрование
Содержимое скрывают симметричные блочные шифры из ГОСТ Р 34.12-2015. «Кузнечик» обрабатывает блоки по 128 бит, «Магма» — по 64 бита, а ключ у обоих длиной 256 бит. Конструкция «Магмы» связана с ГОСТ 28147-89, но новый стандарт закрепил конкретные параметры алгоритма.
Симметричному шифру нужен общий секретный ключ: отправитель шифрует им данные, а получатель тем же ключом их расшифровывает. Сам ключ приходится безопасно передать, согласовать или получить через отдельный криптографический механизм. Если отправить пароль в одном письме с зашифрованным архивом, пользы от шифрования почти не останется.
Одного «Кузнечика» для большого файла недостаточно: базовый алгоритм принимает на вход блок фиксированного размера. Как обрабатывать длинное сообщение, задает режим работы блочного шифра. Российские режимы описаны в ГОСТ Р 34.13-2015 и ГОСТ 34.13-2018: простая замена (ECB), гаммирование (CTR), гаммирование с обратной связью по выходу (OFB), простая замена с зацеплением (CBC), гаммирование с обратной связью по шифртексту (CFB) и выработка имитовставки.
Режим простой замены шифрует каждый блок независимо, и одинаковые блоки открытого текста при одном ключе превращаются в одинаковые блоки шифртекста. Содержимое отдельных блоков останется скрытым, но структура исходных данных может проступить сквозь шифрование. Неудачно выбранный режим способен свести на нет преимущества стойкого блочного шифра.
В 2023 году изменение № 1 к ГОСТ 34.13-2018 добавило режимы CTR-ACPKM и MGM. На больших объемах информации CTR-ACPKM периодически преобразует ключ. MGM относится к аутентифицированному шифрованию и позволяет одновременно скрывать содержимое и проверять целостность и аутентичность данных.
Удобный пример для MGM — сетевой пакет. Часть заголовка может передаваться открыто, полезную нагрузку шифруют, а получатель должен обнаружить подмену любой защищаемой части сообщения. В MGM открытые связанные данные можно включить в проверку аутентичности вместе с зашифрованной информацией.
| Стандарт | Задача | Основные параметры | Чего не делает |
|---|---|---|---|
| ГОСТ Р 34.10-2012 | Цифровая подпись | Варианты 256 и 512 бит | Не скрывает содержимое документа |
| ГОСТ Р 34.11-2012 | Хеширование | Хеш 256 или 512 бит | Не предназначен для восстановления исходных данных |
| ГОСТ Р 34.12-2015 | Блочное шифрование | Ключ 256 бит, блок 128 или 64 бита | Не задает полный протокол обмена данными |
| ГОСТ 34.13-2018 | Режимы работы блочных шифров | ECB, CTR, OFB, CBC, CFB, MAC, CTR-ACPKM, MGM | Без базового блочного шифра не применяется |
Один документ и сразу несколько ГОСТов
Компания отправляет партнеру договор. Партнеру нужно проверить подпись и заметить, если файл изменили, а посторонний не должен прочитать содержимое во время передачи.
Программа отправителя вычисляет хеш договора по ГОСТ Р 34.11 и закрытым ключом создает подпись по ГОСТ Р 34.10. Получатель заново считает хеш документа и проверяет подпись открытым ключом. Если в договоре заменили сумму, реквизиты или другой подписанный фрагмент, изменятся данные, по которым идет проверка.
Чтобы текст не достался посторонним, данные дополнительно шифруют «Кузнечиком» или «Магмой» в выбранном режиме. Откуда берутся ключи, как долго их используют, какие синхропосылки применяют и как проверяют целостность шифртекста, определяет протокол.
В сертификатах и протоколах алгоритмы обозначают объектными идентификаторами OID. Российские криптографические идентификаторы обычно входят в ветвь 1.2.643. По OID программа распознает алгоритм подписи, хеш-функцию, набор параметров или другую криптографическую сущность. Человеку запоминать длинные последовательности чисел незачем, а программам такой формат удобен.
Устройство российских алгоритмов можно изучить и без русскоязычного текста стандарта. Англоязычные спецификации опубликованы в серии RFC как информационные документы: ГОСТ Р 34.10-2012 описан в RFC 7091, «Стрибог» — в RFC 6986, «Кузнечик» — в RFC 7801, «Магма» — в RFC 8891. Там же разработчик найдет тестовые примеры.
Библиотека с поддержкой ГОСТ и сертифицированное средство криптографической защиты информации — не одно и то же. Разработчик может реализовать «Кузнечик» или «Стрибог», проверить код по тестовым векторам и использовать его в собственном проекте. Но для систем, где нормативные требования обязывают применять сертифицированные СКЗИ, одной поддержки нужного алгоритма недостаточно.
Отказываться от AES, SHA-2, SHA-3 или других международных алгоритмов в пользу ГОСТов нужно не в каждом программном продукте. Выбор зависит от требований к системе, протокола, модели угроз и нормативной среды. В регулируемых российских системах бывает прямо предписано применять определенные отечественные алгоритмы и сертифицированные средства защиты.
Надежная защита получается, только если правильно собрана вся цепочка, включая генерацию и хранение ключей, сертификаты, протоколы и реализацию криптографических операций. Криптография ломается не только там, где в алгоритме нашли слабость. Украденный закрытый ключ позволяет злоумышленнику пользоваться чужой криптографической идентичностью, а утечка симметричного ключа открывает доступ к зашифрованным данным. Неправильный режим работы, повтор синхропосылки или плохой генератор случайных чисел могут испортить схему без всякого криптоанализа «Кузнечика» или эллиптической кривой.
Вопросы и ответы
Чем ГОСТ Р 34.10 отличается от ГОСТ Р 34.11?
ГОСТ Р 34.10 задает схему цифровой подписи, а ГОСТ Р 34.11 описывает криптографическую хеш-функцию. Когда документ подписывают, сначала вычисляют его хеш, и уже это значение участвует в алгоритме подписи.
Что такое «Стрибог»?
«Стрибог» — семейство хеш-функций из ГОСТ Р 34.11-2012. Стандарт предусматривает хеш длиной 256 или 512 бит.
Чем «Кузнечик» отличается от «Магмы»?
Длина ключа у обоих блочных шифров одинаковая, 256 бит. Размер блока разный: 128 бит у «Кузнечика» и 64 бита у «Магмы». Различается и внутренняя конструкция алгоритмов.
Зачем нужен ГОСТ 34.13, если существует ГОСТ Р 34.12?
ГОСТ Р 34.12 определяет сами блочные шифры, «Кузнечик» и «Магму». ГОСТ 34.13 задает режимы, в которых их применяют к сообщениям произвольной длины, в том числе CTR, CBC, CFB, CTR-ACPKM и MGM.
Поддержка ГОСТ делает программу сертифицированным СКЗИ?
Нет. Программа может реализовать криптографический алгоритм по ГОСТу и при этом не иметь статуса сертифицированного средства криптографической защиты информации. Для регулируемых систем могут действовать отдельные требования к применяемым средствам защиты и их сертификации.
Почему встречаются ГОСТ Р 34.10-2012 и ГОСТ 34.10-2018?
ГОСТ Р 34.10-2012 — российский национальный стандарт. На его основе подготовили межгосударственный ГОСТ 34.10-2018, который в России ввели в действие с 1 июня 2019 года.