ГОСТ-сертификаты 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-байтовые. Параметры, длина и кодирование должны согласовываться.
Как посмотреть сертификат в НАЙС.ОС¶
Инструмент для чтения без изменения сертификата:
Если сертификат в двоичном формате DER:
Для просмотра через инструменты GnuTLS:
При проверке обращайте внимание на Public Key Algorithm, Signature Algorithm, Key Usage, Extended Key Usage, дату действия и владельца. Если сертификат не открывается в одной программе, это ещё не означает повреждения: форматы и поддержка конкретных OID у разных приложений могут отличаться.