Электронная подпись ГОСТ: создание и проверка¶
В НАЙС.ОС подпись ГОСТ можно сформировать через openssl dgst с закрытым ключом ГОСТ Р 34.10 и соответствующим хэш-алгоритмом ГОСТ Р 34.11. Проверка выполняется открытым ключом из файла или сертификата.
Подготовка файлов¶
umask 077
mkdir -p ~/gost-lab/sign && cd ~/gost-lab/sign
printf 'Документ для проверки ГОСТ\n' > contract.txt
openssl genpkey -algorithm gost2012_256 \
-pkeyopt paramset:TCA -out signer.key
openssl pkey -in signer.key -pubout -out signer.pub
Подпись ГОСТ 2012/256 + Стрибог-256¶
Файл contract.sig — бинарная подпись; не пытайтесь интерпретировать его как текст.
Проверка подписи¶
Ожидаемый результат: Verified OK. После изменения хотя бы одного байта проверка должна завершиться неуспешно.
cp contract.txt modified.txt
printf 'неавторизованное изменение\n' >> modified.txt
openssl dgst -md_gost12_256 \
-verify signer.pub -signature contract.sig modified.txt
Подпись ГОСТ 2012/512 + Стрибог-512¶
openssl genpkey -algorithm gost2012_512 \
-pkeyopt paramset:A -out signer512.key
openssl pkey -in signer512.key -pubout -out signer512.pub
openssl dgst -md_gost12_512 -sign signer512.key \
-out contract512.sig contract.txt
openssl dgst -md_gost12_512 -verify signer512.pub \
-signature contract512.sig contract.txt
Подпись бинарного файла¶
openssl dgst -md_gost12_256 -sign signer.key \
-out archive.sig firmware.tar.gz
openssl dgst -md_gost12_256 -verify signer.pub \
-signature archive.sig firmware.tar.gz
Имя firmware.tar.gz — пример; используйте свой реальный файл. Подпись привязана к содержимому, а не к имени.
Передать подпись в текстовом виде¶
openssl base64 -A -in contract.sig -out contract.sig.b64
openssl base64 -d -A -in contract.sig.b64 -out restored.sig
cmp contract.sig restored.sig
Base64 не шифрует данные; это только текстовая упаковка бинарной подписи.
Открытый ключ из сертификата¶
openssl x509 -in signer.crt -pubkey -noout > signer-from-cert.pub
openssl dgst -md_gost12_256 -verify signer-from-cert.pub \
-signature contract.sig contract.txt
signer.crt должен содержать сертификат именно используемой пары ключей. При проверке подписи отдельно проверяйте доверенную цепочку, срок действия, допустимое использование ключа и статус сертификата: успешная математическая проверка подписи ещё не равна полной проверке электронной подписи в документообороте.
Проверка большого файла и контроль воспроизводимости¶
openssl dgst -md_gost12_256 contract.txt
sha256sum contract.txt # независимый не-ГОСТ контроль файла
stat -c '%s байт' contract.txt
Храните исходные байты, подпись, сертификат проверяющего профиля и сведения об алгоритме. Для форматов с присоединённой подписью (CMS) применяйте отдельную процедуру.
Ошибки и интерпретация¶
| Симптом | Причина |
|---|---|
Verification failure |
Данные, подпись или открытый ключ не совпадают |
unable to load key |
Неправильный формат или пароль контейнера |
unsupported |
ГОСТ-профиль не загружен или операция недоступна в выбранном API |
| Проверка проходит, но документ не принимают | Не тот профиль сертификата, OID, формат подписи или цепочка доверия |
Продолжение: сертификаты, CMS, ключи.