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

ГОСТ-сертификаты X.509: алгоритмы, ключи, параметры

В НАЙС.ОС сертификаты ГОСТ обрабатываются в привычной инфраструктуре X.509. Для пользователя такой сертификат похож на сертификат RSA или ECDSA: он имеет владельца, издателя, назначение и срок действия. Отличие находится в алгоритмах и кодировании криптографических полей.

Из чего состоит сертификат

Поле Что означает
Subject Владелец сертификата: пользователь, служба или организация
Issuer Кто выпустил сертификат
Serial Number Номер, присвоенный удостоверяющим центром
Validity Начало и окончание срока действия
SubjectPublicKeyInfo Алгоритм ключа, набор параметров, публичная часть ключа
SignatureAlgorithm Алгоритм, которым УЦ подписал сертификат
SignatureValue Непосредственно значение подписи УЦ
Extensions SAN, KeyUsage, EKU, BasicConstraints, SKI, AKI и др.

ГОСТ-поля идентифицируются OID — числовыми международными обозначениями алгоритмов и параметров. OID не является секретом или «номером сертификата». Это способ без двусмысленности назвать математическую схему.

Основные идентификаторы

OID Значение
1.2.643.2.2.19 Открытый ключ ГОСТ Р 34.10-2001
1.2.643.7.1.1.1.1 Открытый ключ ГОСТ Р 34.10-2012/256
1.2.643.7.1.1.1.2 Открытый ключ ГОСТ Р 34.10-2012/512
1.2.643.2.2.3 Подпись ГОСТ Р 34.10-2001 / ГОСТ Р 34.11-94
1.2.643.7.1.1.3.2 Подпись ГОСТ 2012/256
1.2.643.7.1.1.3.3 Подпись ГОСТ 2012/512

Алгоритм открытого ключа и алгоритм подписи сертификата — это разные поля. Например, у сертификата может быть ключ одного типа, но подпись удостоверяющего центра должна обрабатываться по алгоритму, указанному в SignatureAlgorithm.

Почему важны наборы кривых

ГОСТ-подпись использует эллиптическую кривую. В сертификате её параметры задаются зарегистрированным OID (publicKeyParamSet). Помимо кривой формат может содержать OID алгоритма хэширования (digestParamSet). Для исторических профилей также встречается набор параметров шифрования (encryptionParamSet).

В российских системах можно встретить CryptoPro-A, B, C, их исторические варианты для обмена ключами, а также наборы ТК26 для ключей 256 и 512 бит. Некоторые наборы описывают математически одну и ту же кривую под разными OID — система сопоставляет их при чтении сертификата.

Почему публичный ГОСТ-ключ нельзя читать как ECDSA

В ГОСТ-сертификатах публичные координаты представлены последовательно и в формате little-endian: сначала младшие байты. Между тем обычное внутреннее представление EC-точки нередко использует префикс несжатой точки 04, затем координаты big-endian. libksba преобразует внешний формат в подходящее представление для libgcrypt. Именно это обеспечивает корректное понимание ключа, независимо от интерфейса конечной программы.

Размеры также определены профилем: публичное значение 256-битного ключа содержит две 32-байтовые координаты; для 512-битного — две 64-байтовые. Параметры, длина и кодирование должны согласовываться.

Как посмотреть сертификат в НАЙС.ОС

Инструмент для чтения без изменения сертификата:

openssl x509 -in certificate.pem -noout -text

Если сертификат в двоичном формате DER:

openssl x509 -inform DER -in certificate.cer -noout -text

Для просмотра через инструменты GnuTLS:

certtool --certificate-info --infile certificate.pem

При проверке обращайте внимание на Public Key Algorithm, Signature Algorithm, Key Usage, Extended Key Usage, дату действия и владельца. Если сертификат не открывается в одной программе, это ещё не означает повреждения: форматы и поддержка конкретных OID у разных приложений могут отличаться.

Дополнительно

Официальные описания формата: RFC 4491, RFC 9215.