Перейти к содержанию

Симметричное ГОСТ-шифрование: Кузнечик, Магма, режимы

Канонический источник: Канонические параметры и ограничения: Кузнечик, Магма, CTR, CBC, MGM. Эта статья описывает работу установленного OpenSSL.

НАЙС.ОС предоставляет симметричные ГОСТ-алгоритмы через OpenSSL. Симметричное шифрование использует один секретный ключ для шифрования и расшифрования. Это отличается от ГОСТ Р 34.10, который предназначен для электронной подписи.

Выбор алгоритма

Шифр Размер блока Размер ключа Для чего используется
Кузнечик, ГОСТ Р 34.12-2015 128 бит 256 бит Современные криптографические профили
Магма, ГОСТ Р 34.12-2015 64 бита 256 бит Совместимые протоколы и стандартизованные профили
ГОСТ 28147-89 64 бита 256 бит Совместимость с существующими решениями

Блочный шифр сам по себе не определяет режим обработки данных. Для длинных сообщений используются CBC, CTR, CFB, ACPKM и другие режимы, предусмотренные протоколом.

1. Посмотреть доступные шифры

openssl list -cipher-algorithms | grep -Ei 'kuznyechik|magma|gost'
openssl enc -list | grep -Ei 'kuznyechik|magma|gost'

openssl enc поддерживает не каждую современную конструкцию, доступную через EVP. Для ACPKM/OMAC и контейнеров PFX используйте подходящий API или команду формата контейнера.

2. Демонстрационное шифрование файла

На лабораторной машине используйте пароль, запрашиваемый OpenSSL интерактивно:

printf 'Секретный тестовый файл\n' > plaintext.txt
openssl enc -kuznyechik-cbc -salt -pbkdf2 \
  -in plaintext.txt -out ciphertext.bin
openssl enc -d -kuznyechik-cbc -pbkdf2 \
  -in ciphertext.bin -out recovered.txt
cmp plaintext.txt recovered.txt

Этот пример используется, когда шифр присутствует в списке openssl enc -list, а парольная KDF поддерживает выбранный модуль. Для коммерческого формата зашифрованного файла согласуйте и зафиксируйте соление, IV, KDF, число итераций и механизм аутентификации данных.

3. Проверка на подмену

CBC и CTR не обеспечивают аутентификацию. Нельзя принимать успешно расшифрованный файл как подлинный только по отсутствию ошибок OpenSSL. Используйте отдельную подпись или проверенную комбинацию шифрования и MAC.

openssl dgst -md_gost12_256 plaintext.txt
openssl dgst -md_gost12_256 recovered.txt

Совпавшие хэши подтверждают совпадение байтов, но не происхождение шифртекста от доверенного отправителя.

4. ACPKM и OMAC

ACPKM применяется для периодического обновления ключевого материала внутри определённого режима работы блочного шифра. OMAC — алгоритм контроля целостности/подлинности с общим секретным ключом. В профилях PKCS#12 имена включают, например, kuznyechik-ctr-acpkm и kuznyechik-ctr-acpkm-omac.

openssl list -cipher-algorithms | grep -Ei 'ctr-acpkm|omac'

Параметры ACPKM и OMAC должны соответствовать формату получателя; выбирать произвольную комбинацию в прикладном протоколе нельзя.

5. Режимы и длина IV

Размер IV определяется размером блока и режимом шифрования. Для Кузнечика блок имеет длину 16 байт; для Магмы — 8 байт. IV не обязательно должен оставаться секретным, но требования к уникальности и повторному использованию зависят от режима. Повторять пару ключ+IV в CTR нельзя.

6. Рекомендации для приложений

В приложении предпочтителен EVP: он отделяет бизнес-логику от конкретного криптографического провайдера. Для больших файлов и обменных контейнеров выбирайте описанный стандартом формат и добавляйте аутентификацию. Для переноса ключа и сертификата используйте PFX, а не самодельный зашифрованный файл.

Далее: алгоритмы, PKCS#12, хэши и MAC.