4 Требования к Системам
Эскизный вариант для обсуждения (2026-10-13): спорные места помечены (!ai Дис: <код>), где В-1…В-13 — вопросы раздела 3 отчёта сверки (work/ps01/сверка_с_обновлёнными_источниками.md), О-2 / Д-3 / М-4 — строки таблиц расхождений того же отчёта, И66 — вопрос реестра work/OQ.md. После принятия решений пометки снимаются.
4.2 Требования к проводимым работам
4.2.1. Реализовать функцию взаимодействия с внешними информационными системами в части получения и передачи сведений о сертификатах УКЭП и о событиях жизненного цикла сертификатов УКЭП посредством прикладного программного интерфейса (API) для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 1 Требований к функциям Заявки. Обеспечивается взаимодействие с внешними информационными системами в части получения и передачи сведений о квалифицированных сертификатах ключей проверки электронной подписи, созданных аккредитованными удостоверяющими центрами и Головным удостоверяющим центром, функции которого осуществляет уполномоченный федеральный орган (далее — сертификаты УКЭП), и о событиях их жизненного цикла посредством прикладного программного интерфейса (REST API). Внесение сведений о сертификате УКЭП выполняется в приватный канал сертификатов УЦ с разбором (парсингом) сертификата, форматно-логическим контролем, проверкой уникальности, проверкой цепочки доверия по реестру аккредитации и сертификатов УЦ и криптографическими проверками; события жизненного цикла вносятся методами изменения статуса и логической отмены; сведения о сертификатах предоставляются по заданному фильтру. Перенос сведений в публичный канал сертификатов УЦ выполняется автоматически сервисом-ретранслятором ЕСИА.
Требования к функциям. В рамках данного требования необходимо:
Реализовать процесс внесения сведений о сертификате УКЭП, обеспечивающий: приём сертификата в кодировках PEM и DER; декодирование и разбор (парсинг) сертификата; проверку существования сертификата и поиск сертификатов цепочки доверия в реестре аккредитации и сертификатов УЦ; форматную проверку сертификата; проверку уникальности; криптографическую проверку электронной подписи сертификата; полную криптографическую проверку цепочки доверия и статуса отзыва; запрос списка отозванных сертификатов из локального хранилища; регистрацию сертификата с созданием записи и события «начало действия сертификата»; возврат идентификатора записи.
Обеспечить форматно-логический контроль сведений о сертификате УКЭП: проверки парсинга с ограничениями согласно таблице 1, фоновые семантические проверки и обязательные для сертификатов УКЭП проверки с формированием перечня предупреждений согласно таблице 2.
Реализовать функцию изменения статуса сертификата с проверкой допустимости перехода по статусной модели, идемпотентностью и возвратом кодов ошибок согласно таблице 4.
Реализовать функцию логической отмены сертификата с возвратом кодов ошибок согласно таблице 5.
Реализовать метод получения данных сертификатов по заданному фильтру в приватном канале сертификатов.
4.2.1.1 Требования к внесению сведений о сертификатах УКЭП в приватном канале
Внесение сведений о сертификате УКЭП выполняется методом создания записи о сертификате в приватном канале: POST /certificate/guc/create — для канала аккредитации и сертификатов ГУЦ, POST /certificate/qual/create — для приватных каналов квалифицированных сертификатов (!ai Дис: В-1). На вход метода подаётся сертификат (certificate), на выходе возвращается идентификатор вида YYYY-MM-DDTHH:MM:SSZ;hashTBS — конкатенация даты начала действия сертификата (время в формате UTC), знака «;» и значения хэш-функции от TBS сертификата (!ai Дис: В-5 — фактический ответ стенда расширенный). Состав записи о сертификате УКЭП в приватном канале приведён в п. 4.2.4.1.
Процесс внесения сведений должен выполняться в следующей последовательности:
Приём и декодирование сертификата: проверка непустого входа, ограничение размера входных данных, определение кодировки (PEM / Base64 / DER), декодирование.
Парсинг сертификата: первичная проверка DER-структуры, построение ASN.1-дерева с контролем лимитов (таблица 1), разбор структуры X.509 (tbsCertificate, signatureAlgorithm, signatureValue, поля TBS, имя издателя и владельца, расширения, открытый ключ), вычисление хэша TBS (
hashTBS, ГОСТ Р 34.11-2012, 256 бит).Проверка существования сертификата в реестре аккредитации и сертификатов УЦ; отказ при наличии записи с таким идентификатором и
logicalCancelFlag= False (!ai Дис: О-2).Форматная проверка сертификата.
Для несамоподписанного сертификата — запрос родительских сертификатов из реестра аккредитации и сертификатов УЦ и проверка цепочки доверия; отказ при отсутствии родительского сертификата. Для корневого сертификата — проверка допустимости регистрации корневого сертификата в канале и наличия идентичного сертификата в локальном хранилище.
Запрос списка отозванных сертификатов из локального хранилища; криптографические проверки (проверка электронной подписи сертификата средствами СКЗИ, полная криптографическая проверка цепочки доверия и статуса отзыва). Неуспех полной криптографической проверки цепочки доверия и статуса отзыва не завершает выполнение фатальной ошибкой: формируется предупреждение и фиксируется
error_depth(!ai Дис: В-13).Регистрация сертификата: создание записи о сертификате, создание записи в истории изменения статуса с событием «1» (начало действия сертификата) (!ai Дис: В-2) и
updatedAt=validityNotBefore, установление полейisCheckedиlogicalCancelFlagв значение False, возврат идентификатора записи.Перенос сведений в публичный канал сертификатов (п. 4.2.4.3) — параллельно с внесением сведений в приватный канал (!ai Дис: В-12).
Фоновые проверки сертификата выполняются после внесения записи о сертификате и формируют перечень предупреждений; по завершении проверок поле isChecked принимает значение True и выполняется перенос статуса в публичный реестр сертификатов.
Ограничения парсинга сертификатов приведены в таблице 1.
Таблица 1. Ограничения парсинга сертификатов
Параметр | Значение |
| 16 |
| 10 000 |
| 64 |
| 64 |
| 8 192 байт |
| 256 КБ |
| 16 |
| ГОСТ Р 34.11-2012, 256 бит |
Состав предупреждений форматно-логического контроля для сертификатов УКЭП приведён в таблице 2 (фоновые семантические проверки — общие для сертификатов обоих типов — и обязательные для УКЭП проверки).
Таблица 2. Предупреждения форматно-логического контроля сертификатов УКЭП
Проверка | Код предупреждения | Условие |
Версия формата |
| tbs.version ≠ 2 |
Серийный номер |
| serialNumber не целое число; serialNumber ≤ 0 |
Алгоритм подписи |
| несовпадение tbsCertificate.signature и Certificate.signatureAlgorithm; OID алгоритма подписи не из множества {1.2.643.7.1.1.3.2, 1.2.643.7.1.1.3.3} |
Ключ проверки ЭП |
| subjectPublicKey пуст; алгоритм открытого ключа несовместим с алгоритмом подписи (для 1.2.643.7.1.1.3.2 допустим ключ 1.2.643.7.1.1.1.1; для 1.2.643.7.1.1.3.3 — 1.2.643.7.1.1.1.2) |
Тип владельца |
| взаимоисключающие идентификаторы (OGRN+OGRNIP либо OGRNIP+INNLE); тип владельца не определён; состав полей subject не соответствует требованиям к квалифицированному сертификату соответствующего типа владельца |
Атрибуты имени |
| атрибут subject/issuer не соответствует требованиям к типу или длине значения (countryName — ровно 2 символа; OGRN — 13 цифр; SNILS — 11; INN — 12; INNLE — 10; OGRNIP — 15) |
Страна |
| country в subject / issuer не равно «RU» (с указанием типа владельца) |
Полномочия издателя |
| issuer.ogrn отсутствует или отличается от {1047702026701, 1037700013020, 1047797019830, 1047707030513} |
AKI |
| расширение AKI не содержит authorityCertSerialNumber |
keyUsage |
| расширение keyUsage отсутствует; бит 7 установлен без бита 4; бит 8 установлен без бита 4 |
privateKeyUsagePeriod |
| расширение отсутствует; расширение критично (critical = true) |
Политики сертификации |
| расширение certificatePolicies отсутствует; отсутствуют идентификаторы класса средства ЭП 1.2.643.100.113.1 … 1.2.643.100.113.6; нарушено накопительное правило (для класса N должны присутствовать идентификаторы всех классов 1…N-1) |
identificationKind |
| расширение отсутствует; значение вне множества {0, 1, 2, 3}; расширение критично |
Средства ЭП |
| расширение subjectSignTool/issuerSignTool отсутствует; тип или длина не соответствуют (UTF8String, subjectSignTool/signTool/cATool — от 1 до 200 символов, signToolCert/cAToolCert — от 1 до 100 символов); расширение критично |
Сроки действия |
| время регистрации меньше tbs.validity.notBefore; время регистрации превышает tbs.validity.notAfter |
Издатель и аккредитация |
| сертификат издателя не был действителен на дату начала действия регистрируемого сертификата (notBefore); УЦ не имел действующей аккредитации на дату начала действия сертификата (notBefore) — проверка не выполняется для канала аккредитации и сертификатов ГУЦ и приватного канала сертификатов ГУЦ |
Помимо перечисленных выполняются общие фоновые семантические проверки сертификата (для сертификатов обоих типов) с формированием предупреждений: корректность версии TBS и уникальных идентификаторов; корректность полей validity (формат дат, порядок интервала, кодирование времени); необычно малые/большие серийный номер, открытый ключ и срок действия; дублирование серийного номера и открытого ключа в канале; пустые имена и атрибуты; корректность расширений subjectAltName, extendedKeyUsage, authorityKeyIdentifier, subjectKeyIdentifier, basicConstraints; корректность значений OID, перечислимых и булевых полей; неизвестные критические расширения; соответствие признаков роли УЦ (cA, keyCertSign, pathLenConstraint); корректность keyUsage и privateKeyUsagePeriod.
Коды ошибок создания записи о сертификате в приватном канале приведены в таблице 3.
Таблица 3. Коды ошибок создания записи о сертификате в приватном канале
Код | Расшифровка |
ERR-0010 | Пустой запрос |
ERR-0701 | Размер входных данных слишком велик |
ERR-0702 | Множественные PEM-блоки |
ERR-0703 | Пустое тело PEM-сертификата |
ERR-0704 | Ошибка формата кодировки BASE64 |
ERR-0705 | Ошибка декодирования PEM |
ERR-0706 | Пустая строка после очистки |
ERR-0707 | Ошибка DER-структуры |
ERR-0708 | Ошибка ASN.1 декодирования |
ERR-0709 | Превышение вложенности ASN.1 дерева |
ERR-0710 | Превышение размера DER-структуры |
ERR-0711 | Не является структурой X.509 |
ERR-0712 | Некорректная структура TBS |
ERR-0713 | Некорректный тип данных ASN.1 |
ERR-0714 | Нарушение структуры имени |
ERR-0715 | Нарушение структуры поля подписи ASN.1 |
ERR-0716 | Нарушение структуры поля открытый ключ |
ERR-0717 | Ошибка декодирования расширения |
ERR-0718 | Ошибка извлечения TBS |
ERR-0719 | Некорректный размер TBS |
ERR-0720 | Ошибка расчёта значения хэш-функции от TBS |
ERR-0721 | Сертификат с таким _id уже существует в реестре |
ERR-0722 | Подпись сертификата не прошла криптографическую проверку |
ERR-0723 | Не найден ни один кандидат в родители и сертификат не может быть зарегистрирован как корневой |
ERR-0724 | Параметры сертификата не соответствуют допустимым параметрам корневого сертификата для данного канала |
ERR-0725 | В локальном хранилище не найден полностью идентичный сертификат |
ERR-0726 | Алгоритм подписи из signatureAlgorithm не поддерживается СКЗИ |
ERR-0727 | СКЗИ завершило проверку подписи с внутренней ошибкой |
ERR-0728 | Не удалось сформировать начальный json-объект регистрации сертификата |
4.2.1.2 Требования к изменению статуса сертификатов УКЭП
Изменение статуса сертификата выполняется методом POST /certificate/guc/status-update (канал аккредитации и сертификатов ГУЦ) либо POST /certificate/qual/status-update (приватные каналы квалифицированных сертификатов) (!ai Дис: В-1) с указанием идентификатора сертификата (cert), времени вступления изменения в силу (updatedAt), события (event) и причины изменения статуса (reason) (!ai Дис: В-9). При выполнении метода должна проверяться допустимость перехода по статусной модели (п. 4.2.4.2), а также что поле logicalCancelFlag сертификата имеет значение False. Результат изменения переносится в публичный канал сертификатов сервисом-ретранслятором.
Коды ошибок изменения статуса сертификата приведены в таблице 4.
Таблица 4. Коды ошибок изменения статуса сертификата
Код | Расшифровка |
ERR-0010 | Пустой запрос |
ERR-0729 | Отсутствует сертификат |
ERR-0801 | Отсутствует значение updatedAt |
ERR-0802 | У поля updatedAt некорректный формат |
ERR-0803 | Отсутствует значение event |
ERR-0804 | У поля event некорректный формат |
ERR-0805 | Невозможный переход по статусной модели |
4.2.1.3 Требования к логической отмене сертификатов УКЭП
Логическая отмена сертификата выполняется методом POST /certificate/guc/certificate-cancel (канал аккредитации и сертификатов ГУЦ) либо POST /certificate/qual/certificate-cancel (приватные каналы квалифицированных сертификатов) с указанием идентификатора сертификата (cert) (!ai Дис: В-1, Э-7). Метод применяется к сертификату с флагом logicalCancelFlag = False; в результате флаг устанавливается в значение True, и сертификат с флагом True переносится в публичный канал сервисом-ретранслятором.
Коды ошибок логической отмены сертификата приведены в таблице 5.
Таблица 5. Коды ошибок логической отмены сертификата
Код | Расшифровка |
ERR-0010 | Пустой запрос |
ERR-0730 | Отсутствует отменяемый сертификат |
ERR-0731 | Ошибка разбора идентификатора cert |
4.2.1.4 Требования к получению данных сертификатов по заданному фильтру
Метод получения данных сертификатов по заданному фильтру в приватном канале сертификатов: GET /certificate/qual/search?param=Значение для поиска, где param принимает значения: commonName, OGRN, SNILS, INN, INNLE, OGRNIP; фильтрация выполняется по равенству структур. Получение сведений об указанном сертификате выполняется методом GET /certificate/qual/{YYYY-MM-DDTHH:MM:SSZ;hashTBS}/info?logicalCancelFlag=False; при отсутствии флага поиска выдаётся информация по всем записям о сертификате в реестре (!ai Дис: В-1).
4.2.2. Реализовать функцию взаимодействия с внешними информационными системами в части получения и передачи сведений о сертификатах УНЭП и о событиях жизненного цикла сертификатов УНЭП посредством прикладного программного интерфейса (API) для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 2 Требований к функциям Заявки. Обеспечивается взаимодействие с внешними информационными системами в части получения и передачи сведений о неквалифицированных сертификатах ключей проверки электронной подписи, созданных в соответствии с Правилами, утверждёнными постановлением Правительства Российской Федерации от 01.12.2021 № 2152 (далее — сертификаты УНЭП), и о событиях их жизненного цикла посредством прикладного программного интерфейса (REST API). Сведения о сертификатах УНЭП размещаются в отдельных каналах инфраструктуры Госключ: канале сертификатов издателей Госключ и приватном канале неквалифицированных сертификатов Госключ; издатель сертификата УНЭП идентифицируется по значению атрибута commonName, проверка полномочности издателя по ОГРН и проверка аккредитации издателя не выполняются, поиск сертификатов цепочки доверия выполняется по реестру сертификатов издателей Госключ, а форматно-логический контроль выполняется с применением профильных проверок с кодами вида UNQCERT_*.
Требования к функциям. В рамках данного требования необходимо:
Реализовать процесс внесения сведений о сертификате УНЭП, обеспечивающий: приём сертификата в кодировках PEM и DER; парсинг сертификата; проверку существования сертификата и поиск сертификатов цепочки доверия в реестре сертификатов издателей Госключ; форматную проверку сертификата; проверку уникальности; криптографическую проверку электронной подписи сертификата; полную криптографическую проверку цепочки доверия и статуса отзыва; запрос списка отозванных сертификатов из локального хранилища; регистрацию сертификата с созданием записи и события «начало действия сертификата»; возврат идентификатора записи. Проверка аккредитации издателя не выполняется; тип канала регистрации определяется по настроечной политике канала: для канала с типом «неквалифицированный» применяются проверки неквалифицированных сертификатов.
Обеспечить форматно-логический контроль сведений о сертификате УНЭП: проверки парсинга с ограничениями согласно п. 4.2.1.1 (таблица 1), фоновые семантические проверки (общие для сертификатов обоих типов) и обязательные для сертификатов УНЭП проверки с формированием перечня предупреждений согласно таблице 6.
Реализовать функцию изменения статуса сертификата с проверкой допустимости перехода по статусной модели, идемпотентностью и возвратом кодов ошибок (состав и расшифровка — согласно п. 4.2.1.2, таблица 4).
Реализовать функцию логической отмены сертификата с возвратом кодов ошибок (состав и расшифровка — согласно п. 4.2.1.3, таблица 5).
Реализовать метод получения данных сертификатов по заданному фильтру в приватном канале неквалифицированных сертификатов.
4.2.2.1 Требования к внесению сведений о сертификатах УНЭП в приватных каналах
Внесение сведений о сертификате УНЭП выполняется методом создания записи о сертификате в приватном канале: POST /certificate/goskey/create — для канала сертификатов издателей Госключ, POST /certificate/unqual/create — для приватных каналов неквалифицированных сертификатов (!ai Дис: В-1). На вход метода подаётся сертификат, на выходе возвращается идентификатор вида YYYY-MM-DDTHH:MM:SSZ;hashTBS (!ai Дис: В-5). Последовательность процесса внесения сведений — как для сертификатов УКЭП (п. 4.2.1.1), со следующими отличиями:
проверка существования сертификата и поиск родительских сертификатов цепочки доверия выполняются в реестре сертификатов издателей Госключ (у сертификатов УКЭП — в реестре аккредитации и сертификатов УЦ);
проверка полномочности издателя по ОГРН и проверка аккредитации издателя на дату начала действия сертификата не выполняются;
по завершении внесения сведений в приватный канал запускается процедура переноса сведений в публичный канал неквалифицированных сертификатов (каналы: канал сертификатов издателей Госключ, приватный канал неквалифицированных сертификатов).
Коды ошибок создания записи о сертификате в приватном канале — ERR-0010, ERR-0701 … ERR-0728 (состав и расшифровка — согласно п. 4.2.1.1, таблица 3).
4.2.2.2 Требования к форматно-логическому контролю сведений о сертификатах УНЭП
Форматно-логический контроль сертификатов УНЭП выполняется по определённому типу сертификата — ROOT_CA (корневой), SUB_CA (промежуточный) или END_ENTITY (конечного пользователя); тип сертификата определяется по составу полей сертификата. Жёсткие проверки критичности расширений, предусмотренные для сертификатов УКЭП, в отношении сертификатов УНЭП не выполняются. Состав обязательных для сертификатов УНЭП проверок и предупреждений приведён в таблице 6.
Таблица 6. Предупреждения форматно-логического контроля сертификатов УНЭП
Проверка | Код предупреждения | Условие |
Версия формата |
| tbs.version ≠ 2 |
Серийный номер |
| serialNumber не целое число; serialNumber ≤ 0 |
Алгоритм подписи |
| несовпадение tbsCertificate.signature и Certificate.signatureAlgorithm; OID алгоритма подписи не из множества {1.2.643.7.1.1.3.2, 1.2.643.7.1.1.3.3} |
Ключ проверки ЭП |
| subjectPublicKey пуст; алгоритм открытого ключа несовместим с алгоритмом подписи |
identificationKind |
| расширение отсутствует; значение вне множества {0, 1, 2, 3} |
Тип сертификата |
| тип сертификата не удалось определить по составу полей: не выполнено ни одно из условий для типов ROOT_CA, SUB_CA, END_ENTITY |
Профиль корневого сертификата (ROOT_CA) |
| отсутствует publicKeyParamSet; отсутствует subjectKeyIdentifier; keyUsage содержит биты, отличные от keyCertSign и cRLSign; basicConstraints отсутствует, либо CA ≠ true, либо pathLenConstraint ≠ 1; identificationKind ≠ 0 |
Профиль промежуточного сертификата (SUB_CA) |
| отсутствует publicKeyParamSet; отсутствует SKI; keyUsage содержит посторонние биты; basicConstraints не соответствует профилю; identificationKind ≠ 0; отсутствуют расширения cRLDistributionPoints, authorityInformationAccess |
Профиль сертификата конечного пользователя (END_ENTITY) |
| в subject отсутствует ровно один экземпляр commonName, countryName, surname, givenName, SNILS; отсутствует publicKeyParamSet; отсутствует SKI; keyUsage содержит биты, отличные от digitalSignature и contentCommitment; basicConstraints присутствует с CA = true; расширение extendedKeyUsage отсутствует либо не содержит OID 1.3.6.1.5.5.7.3.4; отсутствуют cRLDistributionPoints, authorityInformationAccess |
Профиль сертификата с неопределённым типом |
| отсутствует publicKeyParamSet; отсутствует SKI; отсутствует keyUsage; бит 7 установлен без бита 4; бит 8 установлен без бита 4 |
Атрибуты имени |
| атрибут subject/issuer не соответствует требованиям к типу или длине значения (с указанием поля и стороны) |
Страна |
| country в subject / issuer не равно «RU» |
AKI |
| расширение AKI не содержит ни поля authorityKeyIdentifier, ни одновременно обоих полей authorityCertIssuer и authorityCertSerialNumber |
privateKeyUsagePeriod |
| расширение отсутствует |
Политики сертификации |
| расширение certificatePolicies отсутствует; отсутствуют идентификаторы класса средства ЭП 1.2.643.100.113.1 … 1.2.643.100.113.6; нарушено накопительное правило |
Средства ЭП |
| расширение subjectSignTool/issuerSignTool отсутствует; тип или длина не соответствуют (UTF8String, subjectSignTool/signTool/cATool — от 1 до 200 символов, signToolCert/cAToolCert — от 1 до 100 символов) |
Сроки действия |
| время регистрации меньше tbs.validity.notBefore; время регистрации превышает tbs.validity.notAfter |
Издатель |
| сертификат издателя не был действителен на дату начала действия регистрируемого сертификата (notBefore) |
4.2.2.3 Требования к изменению статуса сертификатов УНЭП
Изменение статуса сертификата выполняется методами POST /certificate/goskey/status-update (канал сертификатов издателей Госключ) и POST /certificate/unqual/status-update (приватные каналы неквалифицированных сертификатов) (!ai Дис: В-1) с указанием идентификатора сертификата (cert), времени вступления изменения в силу (updatedAt), события (event) и причины изменения статуса (reason) (!ai Дис: В-9). Коды ошибок изменения статуса — ERR-0010, ERR-0729, ERR-0801 … ERR-0805 (состав и расшифровка — согласно п. 4.2.1.2, таблица 4).
4.2.2.4 Требования к логической отмене сертификатов УНЭП
Логическая отмена сертификата выполняется методами POST /certificate/goskey/certificate-cancel и POST /certificate/unqual/certificate-cancel с указанием идентификатора сертификата (!ai Дис: В-1). Коды ошибок — ERR-0010, ERR-0730 (состав и расшифровка — согласно п. 4.2.1.3, таблица 5).
4.2.2.5 Требования к получению данных сертификатов по заданному фильтру
Метод получения данных сертификатов по заданному фильтру в приватном канале неквалифицированных сертификатов: GET /certificate/unqual/search?param=Значение для поиска, где param принимает значения: commonName, OGRN, SNILS, INN, INNLE, OGRNIP; фильтрация выполняется по равенству структур. Получение сведений об указанном сертификате выполняется методом GET /certificate/unqual/{YYYY-MM-DDTHH:MM:SSZ;hashTBS}/info?logicalCancelFlag=False; при отсутствии флага поиска выдаётся информация по всем записям о сертификате в реестре (!ai Дис: В-1).
4.2.3. Реализовать функцию взаимодействия с внешними информационными системами в части получения и передачи сведений об аккредитации удостоверяющих центров посредством прикладного программного интерфейса (API) для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 3 Требований к функциям Заявки. Аккредитация удостоверяющих центров и изменение её статуса осуществляются оператором ИС ГУЦ — федеральным органом исполнительной власти, уполномоченным в сфере использования электронной подписи; статусы аккредитации удостоверяющих центров относятся к активам инфраструктуры открытых ключей, регистрируемым в распределённых реестрах. Достоверная фиксация событий жизненного цикла аккредитации (предоставление, приостановление, возобновление, прекращение, аннулирование) обеспечивает возможность предоставления сведений о статусе аккредитации на любой момент времени в прошлом — условие признания действительности квалифицированной электронной подписи (статья 11 Закона № 63-ФЗ) и основу автоматизированного контроля (надзора) в сфере электронной подписи. Обеспечивается приём от головного удостоверяющего центра сведений об удостоверяющих центрах и событиях жизненного цикла их аккредитации через программный интерфейс (REST API) с контролем корректности вносимых сведений, защитой от повторной обработки запросов и ведением статусной модели аккредитации.
Требования к функциям. В рамках данного требования необходимо:
Реализовать функцию регистрации нового удостоверяющего центра.
Реализовать функцию изменения сведений об удостоверяющем центре.
Реализовать функцию дополнения сведений об удостоверяющем центре.
Реализовать функцию создания аккредитации удостоверяющего центра.
Реализовать функцию изменения статуса аккредитации удостоверяющего центра.
Реализовать функцию отмены события аккредитации удостоверяющего центра.
4.2.3.1 Требования к ведению сведений об удостоверяющем центре
Реализовать функцию регистрации нового удостоверяющего центра, обеспечивающую:
приём сведений об удостоверяющем центре: ОГРН, ИНН, полное наименование, адрес расположения;
форматно-логический контроль поступающих данных, в том числе проверку корректности ОГРН и ИНН по установленным алгоритмам, с отказом в регистрации и возвратом кода ошибки при несоответствии;
отказ в регистрации с возвратом кода ошибки, если сведения об удостоверяющем центре уже находятся в реестре.
Обоснование: постановка удостоверяющего центра на учёт в реестре — отправная точка жизненного цикла его аккредитации; внесение сведений с некорректными ОГРН и ИНН либо повторная регистрация не допускаются. Допускается первичная постановка УЦ на учёт в реестре, с неполными данными и их последующим обогащением.
Реализовать функцию изменения сведений об удостоверяющем центре, обеспечивающую:
приём изменённых сведений (не менее одного из: полное наименование, адрес расположения) с указанием даты и времени начала действия изменения, причины изменения и ссылки на решение об изменении сведений;
контроль целостности запроса, обеспечивающий отказ от повторной обработки одного и того же изменения.
Обоснование: сведения об удостоверяющем центре изменяются при изменении его реквизитов; каждое изменение фиксируется с датой и временем начала действия, повторная обработка одного и того же изменения не допускается.
Реализовать функцию дополнения сведений об удостоверяющем центре, обеспечивающую:
приём дополнительных сведений (не менее одного из: сайт, адрес электронной почты, контактный телефон, сведения о программно-аппаратных комплексах);
контроль полноты сведений о программно-аппаратном комплексе: в случае заполнения хотя бы одного из полей (псевдоним ПАК, средство УЦ, класс средств электронной подписи) остальные поля также должны быть заполнены;
контроль целостности запроса, обеспечивающий отказ от повторной обработки одного и того же дополнения.
Обоснование: сведения дополняются по мере появления информации о средствах электронной подписи и контактных данных; сведения о программно-аппаратных комплексах должны быть полными, повторная обработка одного и того же дополнения не допускается.
4.2.3.2 Требования к ведению аккредитации удостоверяющего центра
Реализовать функцию создания аккредитации удостоверяющего центра, обеспечивающую:
приём сведений: дата и время начала аккредитации, дата и время окончания действия аккредитации, причина, ссылка на решение;
установление аккредитации статуса «предоставлена»;
отказ с возвратом кода ошибки, если период аккредитации совпадает с периодом действующей аккредитации удостоверяющего центра.
Обоснование: предоставление аккредитации — основание для выдачи удостоверяющим центром квалифицированных сертификатов ключей проверки электронных подписей; период предоставляемой аккредитации не должен совпадать с действующим.
Реализовать функцию изменения статуса аккредитации удостоверяющего центра, обеспечивающую:
приём нового статуса с указанием даты и времени начала действия изменения, причины и ссылки на решение;
проверку допустимости изменения статуса по статусной модели (п. 4.2.3.3) с отказом и возвратом кода ошибки при недопустимом изменении;
при аннулировании аккредитации — установление даты и времени начала действия изменения равными дате начала аккредитации.
Обоснование: приостановление, возобновление, прекращение и аннулирование аккредитации — действующие сценарии управления аккредитацией со стороны оператора ИС ГУЦ; недопустимые изменения статуса должны отклоняться, нарушения процессов изменения статуса выявляются автоматическим контролем (надзором) в сфере электронной подписи.
Реализовать функцию отмены события, обеспечивающую:
отмену последнего неотменённого события аккредитации удостоверяющего центра;
запрет отмены события предоставления аккредитации;
возврат к предыдущему состоянию аккредитации при отмене;
фиксацию признака отмены, времени отмены и хэша запроса на отмену;
контроль уникальности запроса на отмену, обеспечивающий отказ от повторной обработки одного и того же запроса.
Обоснование: ошибочно внесённое событие аккредитации должно быть отменено с возвратом к предыдущему состоянию; событие предоставления аккредитации отмене не подлежит, повторная обработка одного и того же запроса на отмену не допускается.
4.2.3.3 Требования к реализации статусной модели изменения состояния аккредитации
Аккредитация удостоверяющего центра может находиться в одном из следующих состояний: «предоставлена», «прекращена», «приостановлена», «возобновлена», «аннулирована».
Допустимы следующие изменения состояния аккредитации:
«предоставлена» → «приостановлена», «прекращена», «аннулирована»;
«приостановлена» → «возобновлена», «прекращена», «аннулирована»;
«возобновлена» → «приостановлена», «прекращена», «аннулирована»;
«прекращена» → «аннулирована».
Изменения состояния, не указанные в пункте 2, должны отклоняться с возвратом кода ошибки.
4.2.4. Реализовать функцию регистрации в распределённых реестрах сведений о сертификатах УКЭП и о событиях жизненного цикла сертификатов УКЭП для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 4 Требований к функциям Заявки. Обеспечивается ведение в распределённых реестрах данных о сертификатах УКЭП и о событиях их жизненного цикла. Достоверная фиксация сведений о сертификатах УКЭП и событиях их жизненного цикла, а также возможность проверки статуса сертификата и статуса аккредитации выдавшего его удостоверяющего центра на любой момент времени в прошлом — условия признания действительности усиленной квалифицированной электронной подписи (статья 11 Федерального закона № 63-ФЗ). Данные о сертификатах УКЭП разделяются между двумя каналами распределённого реестра: приватным каналом сертификатов УЦ, содержащим сведения из сертификата (в том числе персональные данные владельца), сам сертификат и события его жизненного цикла, и публичным каналом сертификатов УЦ, содержащим открытый ключ, сведения о периоде действия сертификата и события его жизненного цикла. Для сертификатов УКЭП обязательна проверка аккредитации издателя сертификата — как при внесении сведений о сертификате, так и при определении его статуса на заданную дату.
Требования к функциям. В рамках данного требования необходимо:
Реализовать ведение в приватном канале сертификатов УЦ записей о сертификатах УКЭП с составом полей согласно таблице 7.
Обеспечить ведение истории изменения статуса сертификата с составом полей согласно таблице 8 и ведение статусной модели сертификата согласно таблицам 9–10.
Обеспечить перенос сведений о сертификатах УКЭП и событиях их жизненного цикла в публичный канал сертификатов УЦ с составом полей согласно таблице 11.
Обеспечить формирование идентификаторов записей о сертификатах единым механизмом (п. 4.2.4.4).
4.2.4.1 Требования к ведению сведений о сертификатах УКЭП в приватном канале
Доступ к чтению и записи в приватном канале сертификатов УЦ имеют УЦ-владелец канала и ЕСИА. Приватный канал может содержать персональные данные владельца сертификата.
Запись о сертификате УКЭП в приватном канале содержит следующие сведения (таблица 7).
Таблица 7. Состав записи о сертификате УКЭП в приватном канале
Поле | Назначение |
| Идентификатор записи в CouchDB; формируется чейнкодом при создании записи единым механизмом (п. 4.2.4.4) |
| Значение хэш-функции от TBS сертификата (ГОСТ Р 34.11-2012, 256 бит) |
| UUID сертификата издателя; для самоподписанного сертификата |
| Тип владельца сертификата: |
| Версия формата сертификата |
| Серийный номер сертификата |
| Сведения о ключе проверки ЭП владельца: |
| Дата начала действия сертификата (время в формате UTC) |
| Дата окончания действия сертификата (время в формате UTC) |
| Сведения об издателе / о владельце: |
| Уникальные идентификаторы владельца / издателя |
| Расширения: |
| Идентификатор алгоритма ЭП сертификата |
| Значение ЭП сертификата |
| Исходный сертификат |
| Перечень неизвестных объектных идентификаторов (OID) расширений |
| Перечень ошибок, найденных при форматной проверке сертификата (предупреждения) |
| Флаг форматной проверки структуры сертификата (True / False) |
| Флаг логической отмены (True / False) |
| Время создания записи в канале (время формирования пользователем запроса на внесение сведений в чейнкод; формат UTC) |
* отмечены обязательные поля.
Внесение сведений о сертификате УКЭП в приватный канал выполняется методом создания записи о сертификате (п. 4.2.1.1).
4.2.4.2 Требования к ведению событий жизненного цикла сертификатов УКЭП
Для каждого сертификата УКЭП ведётся история изменения статуса сертификата с составом полей согласно таблице 8.
Таблица 8. Состав записи истории изменения статуса сертификата
Поле | Назначение |
| Идентификатор записи об истории; формируется как комбинация uuid сертификата и суффикса HIST |
| История изменения статуса сертификата (массив событий) |
| Версия записи об истории изменения статуса сертификата |
| Время вступления изменения статуса сертификата в силу (время в формате UTC) |
| Событие изменения статуса сертификата: 0 — аннулирование сертификата; 1 — начало действия сертификата; 2 — прекращение действия сертификата; 3 — возобновление действия сертификата (!ai Дис: В-2) |
| Причина изменения статуса сертификата (коды причин отзыва сертификатов; поле может быть пустым) |
| Флаг отмены события (True / False) |
| Время создания записи в канале (время формирования пользователем запроса на внесение сведений в чейнкод; формат UTC) |
* отмечены обязательные поля.
Статусная модель сертификата приведена в таблицах 9–10. Сертификат может находиться в агрегированных состояниях «Действует» и «Не действует». События и причины изменения статуса приведены в таблице 9.
Таблица 9. События и причины изменения статуса сертификата
Событие | Причины |
0 — Аннулирование сертификата | регистрируется независимо от основного статуса; после аннулирования итоговый статус всегда «Не действует»; аннулирование не запрещает регистрацию последующих событий; reason = 11 — расшифровка не установлена (!ai Дис: В-9) |
1 — Начало действия сертификата | reason = 16 — расшифровка не установлена (!ai Дис: В-9) |
2 — Прекращение действия сертификата | reason = 0 — отозван по неустановленной причине; 1 — ключ подписи скомпрометирован; 2 — скомпрометирован ключ подписи УЦ; 3 — изменена принадлежность; 4 — сертификат заменён новым; 5 — прекращение деятельности; 6 — временно приостановлен; 9 — отозваны привилегии у владельца; 10 — скомпрометирован ключ атрибутного центра сертификации; истёк срок действия сертификата (код не указан) |
3 — Возобновление действия сертификата | reason = 8 — удалён из списка отозванных сертификатов |
Состояние «Не действует» включает также случаи: срок действия сертификата не наступил; срок действия сертификата истёк.
Таблица 10. Допустимые переходы между причинами изменения статуса
Строка | Причина в запросе 0 | Причина в запросе 1 | Причина в запросе 2 | Причина в запросе 3 |
Предыдущее изменение статуса: 0 | - | - | + | + |
Предыдущее изменение статуса: 1 | + | - | + | - |
Предыдущее изменение статуса: 2 | + | - | - | + |
Предыдущее изменение статуса: 3 | + | - | + | - |
Последующее изменение статуса: 0 | - | - | + | + |
Последующее изменение статуса: 1 | + | - | - | - |
Последующее изменение статуса: 2 | + | - | - | + |
Последующее изменение статуса: 3 | + | - | + | - |
Изменение статуса отсутствует | + | - | + | + |
«+» — переход допустим, «-» — переход недопустим. Изменения статуса, не предусмотренные таблицей, должны отклоняться. Идемпотентность запроса изменения статуса обеспечивается проверкой перехода по статусной модели.
Изменение статуса сертификата выполняется методом согласно п. 4.2.1.2, логическая отмена сертификата — методом согласно п. 4.2.1.3.
4.2.4.3 Требования к ведению сведений о сертификатах УКЭП в публичном канале
Публичный канал сертификатов УЦ содержит сведения о сроках действия сертификатов, выданных удостоверяющим центром, и информацию об изменении их статусов. Доступ к записи в канале имеет ЕСИА; доступ к чтению — у всех участников канала. Персональные данные владельца сертификата и сам сертификат в публичный канал не переносятся.
Таблица 11. Состав записи о сертификате УКЭП в публичном канале
Поле | Назначение |
| Идентификатор записи в CouchDB; формируется чейнкодом единым механизмом (п. 4.2.4.4) |
| Значение хэш-функции от TBS сертификата (ГОСТ Р 34.11-2012, 256 бит) |
| UUID сертификата издателя; для самоподписанного сертификата |
| Серийный номер сертификата |
| ОГРН издателя; если поле ОГРН издателя в сертификате пустое, поле также пустое |
| Ключ проверки ЭП |
| Дата начала действия сертификата |
| Дата окончания действия сертификата |
| Период действия секретного ключа ( |
| Флаг форматной проверки структуры сертификата (True / False) |
| Флаг логической отмены (True / False) |
| Время создания записи о сертификате в распределённом реестре |
* отмечены обязательные поля.
Перенос сведений в публичный канал выполняется сервисом-ретранслятором ЕСИА: после внесения сведений в приватный канал сертификатов сервис-ретранслятор перехватывает событие о внесении, запрашивает копирование данных из приватного канала и вызывает внутренний метод чейнкода публичного канала на запись данных (!ai Дис: В-12). Переносятся: _id, hashTBS, issuerUUID, serialNumber, issuerOGRN, subjectPublicKey, validityNotBefore, validityNotAfter, privateKeyUsagePeriod; при переносе формируются модель сведений о сертификате (с полями isChecked = False, logicalCancelFlag = False, createdAtCC) и модель истории с записью события «1» (начало действия сертификата) (!ai Дис: В-2). Изменения статуса и логическая отмена переносятся в публичный канал соответствующими внутренними методами чейнкода.
4.2.4.4 Требования к формированию идентификаторов записей о сертификатах
Идентификаторы записей о сертификатах формируются автоматически единым механизмом:
внешний идентификатор сертификата (
cert) (!ai Дис: В-12) — конкатенация даты начала действия сертификатаvalidityNotBefore(время в формате UTC,YYYY-MM-DDTHH:MM:SSZ), знака «;» и значения хэш-функции от TBS сертификатаhashTBS(ГОСТ Р 34.11-2012, 256 бит);идентификатор записи в CouchDB (
_id) — формируется чейнкодом по данным сертификата: структура включает версию чейнкода, контрольную сумму, тип актива (для КСКПЭП — значение 2), идентификатор реестра, идентификатор издателя сертификата и идентификатор актива (74 младших бита хэша серийного номера сертификата) (!ai Дис: М-4); при формировании проверяется уникальность идентификатора, коллизии разрешаются повторным хэшированием с фиксацией в сервисной базе данных сервисного чейнкода;идентификатор записи об истории статуса сертификата — комбинация uuid сертификата и суффикса HIST;
issuerUUID— uuid сертификата издателя; для самоподписанного сертификата равен_id.
Значение идентификатора одного актива одинаково для разных каналов.
(!ai Дис: В-6) По обновлённым диаграммам последовательности закрепление глобального идентификатора выполняется отдельной транзакцией через RegistryContract с фиксацией записи в журнале коллизий; в снимке 261002 и в редакции 260714 такой отдельной транзакции нет — состав требования подлежит уточнению.
4.2.5. Реализовать функцию регистрации в распределённых реестрах сведений о сертификатах УНЭП и о событиях жизненного цикла сертификатов УНЭП для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 5 Требований к функциям Заявки. Обеспечивается ведение в распределённых реестрах данных о сертификатах УНЭП и о событиях их жизненного цикла. Сертификаты УНЭП выпускаются в инфраструктуре Госключ и не требуют проверки аккредитации издателя: у сертификатов УНЭП не применяются проверка полномочности издателя по ОГРН и проверка аккредитации издателя, а статус сертификата на заданную дату определяется только по истории событий сертификата без обращения к реестру аккредитации. Сведения о сертификатах УНЭП размещаются в отдельных каналах инфраструктуры Госключ: канал сертификатов издателей Госключ предназначен для регистрации корневых и подчинённых сертификатов издателей, приватный канал неквалифицированных сертификатов Госключ — для регистрации сертификатов конечных пользователей; издатель сертификата УНЭП идентифицируется по значению атрибута commonName (CN), а не по ОГРН, вследствие чего поле issuerOGRN при переносе сведений о сертификате УНЭП в публичный канал сертификатов УЦ остаётся пустым. Ведение сертификатов УНЭП в отдельных каналах обусловлено различием нормативного регулирования: требования к форме квалифицированного сертификата ключа проверки электронной подписи установлены приказом ФСБ России от 27 декабря 2011 г. № 795, требования к сертификатам УНЭП — Правилами, утверждёнными постановлением Правительства Российской Федерации от 01.12.2021 № 2152.
Требования к функциям. В рамках данного требования необходимо:
Реализовать ведение в приватных каналах неквалифицированных сертификатов записей о сертификатах УНЭП с составом полей согласно п. 4.2.4.1 (модель сведений о сертификате в приватном канале для сертификатов УНЭП идентична модели для сертификатов УКЭП).
Обеспечить ведение истории изменения статуса сертификата и статусной модели сертификата — для сертификатов УНЭП состав полей истории, события и причины изменения статуса, правила аннулирования и таблица допустимых переходов идентичны приведённым в п. 4.2.4.2.
Обеспечить перенос сведений о сертификатах УНЭП и событиях их жизненного цикла в публичный канал сертификатов УЦ с составом полей согласно п. 4.2.4.3 (состав записи в публичном канале для сертификатов УНЭП идентичен составу для сертификатов УКЭП; поле
issuerOGRNдля сертификатов УНЭП, издатель которых не имеет ОГРН, пустое).Обеспечить формирование идентификаторов записей о сертификатах единым механизмом (п. 4.2.5.4; тип актива для НСКПЭП — значение 3).
4.2.5.1 Требования к ведению сведений о сертификатах УНЭП в приватных каналах
Доступ к чтению и записи в приватных каналах неквалифицированных сертификатов имеют УЦ-владелец канала и ЕСИА. Каналы неквалифицированных сертификатов: канал сертификатов издателей Госключ (регистрация корневых и подчинённых сертификатов издателей Госключ) и приватный канал неквалифицированных сертификатов Госключ (регистрация сертификатов конечных пользователей). Допустимые параметры издателя для каналов приведены в таблице 12.
Таблица 12. Каналы неквалифицированных сертификатов и допустимые параметры издателя
Канал | Допустимые параметры issuer | Допустимые типы | Регистрация корневого сертификата | Параметры корневого сертификата (issuer/subject) | Полная криптографическая проверка цепочки и отзыва |
Канал сертификатов издателей Госключ | CN = Специализированный центр сертификации | CA | допускается | CN = Специализированный центр сертификации | выполняется |
Приватный канал неквалифицированных сертификатов Госключ | CN = Госуслуги. Неквалифицированная электронная подпись | EE | не допускается | — | выполняется |
Внесение сведений о сертификате УНЭП в приватный канал выполняется методом создания записи о сертификате (п. 4.2.2.1); состав записи о сертификате УНЭП идентичен составу записи о сертификате УКЭП в приватном канале (п. 4.2.4.1). Коды ошибок создания записи — ERR-0010, ERR-0701 … ERR-0728 (состав и расшифровка — согласно п. 4.2.1.1, таблица 3).
4.2.5.2 Требования к ведению событий жизненного цикла сертификатов УНЭП
История изменения статуса сертификата УНЭП ведётся с составом полей и по статусной модели, идентичным приведённым в п. 4.2.4.2 (события 0 — аннулирование, 1 — начало действия, 2 — прекращение действия, 3 — возобновление действия; причины отзыва; правила аннулирования; таблица допустимых переходов). Изменение статуса сертификата выполняется методами согласно п. 4.2.2.3, логическая отмена — методами согласно п. 4.2.2.4.
4.2.5.3 Требования к ведению сведений о сертификатах УНЭП в публичном канале
Состав записи о сертификате в публичном канале сертификатов УЦ, состав записи истории и порядок переноса сведений сервисом-ретранслятором ЕСИА — как в п. 4.2.4.3. Для сертификатов УНЭП, издатель которых не имеет ОГРН, поле issuerOGRN пустое. Перенос данных в публичный канал неквалифицированных сертификатов применяется для каналов: канал сертификатов издателей Госключ; приватный канал неквалифицированных сертификатов.
4.2.5.4 Требования к формированию идентификаторов записей о сертификатах
Идентификаторы записей о сертификатах УНЭП формируются автоматически единым механизмом (п. 4.2.4.4); для типа актива НСКПЭП в структуре идентификатора записи в CouchDB применяется значение 3.
4.2.6. Реализовать функцию регистрации в распределённых реестрах сведений об аккредитации удостоверяющих центров для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 6 Требований к функциям Заявки. Сведения об аккредитации удостоверяющих центров и сведения о средствах электронной подписи и удостоверяющих центрах относятся к активам инфраструктуры открытых ключей. Ведение сведений об аккредитации удостоверяющих центров в распределённом реестре обеспечивает достоверную фиксацию статуса аккредитации каждого удостоверяющего центра и возможность проверки этого статуса на любой момент времени в прошлом, в том числе для признания действительности квалифицированных сертификатов, выданных аккредитованными удостоверяющими центрами, а также связанных усиленных электронных подписей.
Требования к функциям. В рамках данного требования необходимо:
Реализовать ведение записи удостоверяющего центра, содержащей сведения: ОГРН и ИНН удостоверяющего центра, полное наименование, адрес расположения, сайт, адрес электронной почты, контактный телефон, сведения о применяемых программно-аппаратных комплексах (псевдоним ПАК, средство УЦ, класс средств электронной подписи, срок действия закрытого ключа).
Обеспечить хранение истории изменения и дополнения сведений об удостоверяющем центре, включая идентификаторы изменения и дополнения записи, причину изменения сведений и ссылку на решение об изменении сведений.
Реализовать ведение записи об аккредитации удостоверяющего центра, содержащей сведения: дату начала аккредитации, дату окончания действия аккредитации, статус (предоставлена, прекращена, приостановлена, возобновлена, аннулирована), причину изменения статуса и ссылку на решение об изменении статуса.
Обеспечить хранение истории аккредитации, включая сведения об отменённых событиях (признак отмены, время отмены, хэш запроса на отмену события).
Обеспечить форматно-логический контроль поступающих данных: проверку корректности ОГРН и ИНН по установленным алгоритмам, представление даты и времени в формате RFC 3339, время — UTC, без долей секунды, ограничение длин значений полей.
Обеспечить формирование идентификаторов записей единым механизмом и автоматическое ведение служебных сведений (версия записи, время внесения сведений в реестр, время обновления записи в реестре).
4.2.6.1 Требования к реализации функции ведения записей в БД Глобального состояния (world state)
Для обеспечения хранения сведений об удостоверяющих центрах и их аккредитации необходимо реализовать ведение в БД Глобального состояния записей следующих видов:
запись «Удостоверяющий центр» — актуальные сведения об удостоверяющем центре;
запись «История изменения данных удостоверяющего центра» — версии сведений об удостоверяющем центре после их изменения и дополнения;
запись «Аккредитация удостоверяющего центра» — актуальные сведения об аккредитации удостоверяющего центра;
запись «История аккредитации удостоверяющего центра» — события жизненного цикла аккредитации.
Каждая запись должна содержать вид записи, версию записи и служебные сведения о времени внесения и обновления записи в реестре. Идентификаторы записей должны формироваться автоматически единым механизмом. Состав и значения полей записей должны соответствовать требованиям пунктов 4.2.1–4.2.5 настоящего раздела.
4.2.7. Реализовать функцию маршрутизации запросов в распределённых реестрах для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 7 Требований к функциям Заявки. В высокодинамичных средах, характеризующихся частым созданием записей об активах, со временем происходит деградация производительности реестров; подсистема ИС ГУЦ «Распределённые реестры объектов инфраструктуры открытых ключей» (далее — Реестры PKI) относится к таковым. В связи с этим обеспечивается механизм ротации каналов, под которым понимается периодическое создание нового канала, миграция на него актуальной бизнес-логики и участников с сохранением возможности доступа к данным старых каналов. Межканальная маршрутизация запросов к объектам и разрешение возможных коллизий между объектами обеспечиваются сервисным чейнкодом, размещаемым в канале ГУЦ (!ai Дис: В-7).
Требования к функциям. В рамках данного требования необходимо:
Реализовать функцию регистрации реестра в сервисном чейнкоде, обеспечивающую: приём всех полей сервисной базы данных, кроме идентификатора реестра; присвоение идентификатора реестра (0 — при регистрации нового издателя актива; значение, увеличенное на 1, — при ротации канала, но не более 31); фиксацию момента ввода канала в эксплуатацию.
Реализовать функцию ротации канала, обеспечивающую: создание нового канала с миграцией на него актуальной бизнес-логики и участников с сохранением возможности доступа к данным ранее созданных каналов; задействование ротации по мере наполнения канала и периодической ротации; вывод канала из эксплуатации по истечении времени жизни всех активов с фиксацией момента вывода канала из эксплуатации; перевод выведенного из эксплуатации канала в «холодный» режим (!ai Дис: В-7).
Обеспечить расчётные сроки эксплуатации каналов до ротации (таблица 13).
Обеспечить ведение сервисной базы данных сервисного чейнкода, содержащей сведения о реестрах (действующих и ротированных), с составом полей согласно таблице 15.
Обеспечить формирование идентификатора объекта по данным актива: по значению ОГРН УЦ — для сведений об аккредитации удостоверяющего центра; по значению хэша серийного номера и Issuer.OGRN (или хэша от поля Issuer) — для сведений о сертификате; по значению электронной подписи и ОГРН издателя сертификата подписи (или хэша от поля Issuer издателя) — для сведений об электронной подписи.
Обеспечить структуру идентификатора объекта — 128-битовый вектор (RFC 9562) с составом полей согласно таблице 16 и соответствием типов актива согласно таблице 17.
Реализовать функцию маршрутизации запроса к объекту канала по идентификатору объекта: определение типа и ключевой даты искомого актива, версии сервисного чейнкода; вычисление издателя актива; поиск реестра актива для данного издателя; возврат пары значений «наименование канала + наименование чейнкода» (!ai Дис: В-7, Р-8).
Реализовать функцию определения реестра по данным актива (формирование идентификатора объекта и его маршрутизация) и функцию подбора всех возможных (по версиям сервисного чейнкода) реестров для данного актива и его издателя.
Реализовать функцию определения типа актива по данным актива — возврат числового значения в соответствии с версией сервисного чейнкода.
Реализовать функцию определения ключевой даты актива по данным актива.
Реализовать функцию определения версии сервисного чейнкода — текущей либо актуальной на заданный момент времени.
Обеспечить разрешение коллизий между владельцами реестров (issuerID, issuerIDAddon, roundsNum): при обнаружении коллизии создаётся дополнительная запись в сервисной базе данных; при маршрутизации проверяется наличие записи о коллизии, данные о записи уточняются по точному значению идентификатора.
Обеспечить разрешение коллизий между объектами реестра (collisionID, uniqueIDForCollision): при обнаружении коллизии создаётся дополнительная запись в сервисной базе данных; при маршрутизации проверяется наличие записи о коллизии, данные о записи уточняются по точному значению идентификатора.
4.2.7.1 Требования к функции ротации каналов
Ротация канала выполняется вручную следующей последовательностью действий (таблица 14).
Таблица 13. Расчётное время эксплуатации каналов до ротации
Канал | Время эксплуатации до следующей ротации | Основание определения |
Канал ГУЦ | 15 лет | по времени действия сертификатов, выпускаемых для данного канала, и по наполняемости канала — в течение 15 лет объём данных составит ~15 МБ |
Приватный / публичный канал квалифицированных / неквалифицированных сертификатов | 1 год | по времени действия сертификатов, выпускаемых для данного канала |
Канал электронных подписей | 1 год | по времени действия сертификатов подписантов |
Таблица 14. Последовательность действий при ротации канала
Шаг | Роль | Описание действия |
1 | Оператор сети | Запросить MSP-конфигурации у организаций — участников каналов |
2 | Оператор сети | Создать конфигурацию канала configtx.yaml |
3 | Оператор сети | Сгенерировать genesis-блок |
4 | Оператор сети | Создать канал |
5 | Администратор узла | Получить генезис-блок канала |
6 | Администратор узла | Присоединить конкретный peer к каналу |
7 | Все | Проверка присоединения пиров к каналу, видимость пиров участников в канале |
8 | Оператор сети | Регистрация канала в сервисном чейнкоде |
9 | Оператор сети | По наступлении времени вывода канала из эксплуатации — создание нового канала (начиная с шага 1) и поддержка старого канала для внесения информации о жизненном цикле действующих активов |
10 | Оператор сети | Перевод старого канала в «холодный» режим по истечении времени жизни всех активов |
Ротация канала для активов отражается изменением значения идентификатора реестра: для нового создаваемого канала идентификатор увеличивается на 1. Момент ввода канала в эксплуатацию фиксируется в сервисной базе данных и выступает временем начала периода вносимых в канал активов; момент вывода канала из эксплуатации фиксирует начало работы канала в «холодном» режиме.
Каждому поколению каналов соответствует индекс ротации (0 … N+1): канал ГУЦ (mcc), приватные каналы сертификатов ГУЦ, публичные и приватные каналы квалифицированных и неквалифицированных сертификатов УЦ, канал электронных подписей; системные имена каналов и чейнкодов включают индекс поколения. Сервисный чейнкод (service_cc) развёрнут у каждого участника (ГУЦ, УЦ) и при переходе к очередному поколению каналов переводится на новое поколение (!ai Дис: В-7).
4.2.7.2 Требования к ведению сервисной базы данных сервисного чейнкода
Таблица 15. Состав сервисной базы данных сервисного чейнкода
Поле | Значение |
serviceCCVersion | Версия сервисного чейнкода (s_cc) |
MSPID | Идентификатор участника сети |
issuerID | Идентификатор издателя актива (владельца реестра) |
issuerIDAddon | Хэш от идентификатора владельца актива |
roundsNum | Количество раундов взятия хэша в issuerID для решения коллизии |
assetType | Тип актива реестра/канала (1 = УЦ, 2 = КСКПЭП, 3 = НСКПЭП, 4 = ЭП) |
channelName | Системное имя канала |
chaincodeName | Системное имя чейнкода данного канала для данного актива |
registryID | Идентификатор реестра, пара «канал + чейнкод» для ключа «s_cc + владелец + тип реестра» |
collisionID | UUID объекта, имеющего коллизию |
uniqueIDForCollision | Уникальное значение, разрешающее коллизию для объекта |
roundsNumHashActiveID | Количество раундов взятия хэша от serialNumber для решения коллизии uniqueIDForCollision |
dateTimeOpened | Момент ввода канала в эксплуатацию (или дата первого актива, выпущенного в текущей логике s_cc, то есть до создания канала) |
dateTimeClosed | Момент вывода канала из эксплуатации или NULL (не может быть позднее, чем dateTimeOpened следующей записи registryID) |
Информация о созданном (затем ротируемом) канале указывается в поле registryID с указанием даты dateTimeOpened, выступающей в качестве времени начала периода вносимых активов в канал. Поле dateTimeClosed указывает на время вывода канала из эксплуатации: с этого времени канал принимает только информацию об изменении жизненного цикла активов (до истечения времени их действия), а также работает в «холодном» режиме.
4.2.7.3 Требования к структуре идентификатора объекта и типам актива
Таблица 16. Структура идентификатора объекта
№ | Разрядность | Назначение |
1 | 3 бита | Версия чейнкода |
2 | 3 бита | Контрольная сумма (вычисляется как побитовая сумма последующих триад для последующих 42 бит) |
3 | 1 бит | Глобальность адреса |
4 | 1 бит | Область действия |
5 | 3 бита | Тип актива |
6 | 5 бит (!ai Дис: В-4) | Идентификатор реестра (начинается с 00000) |
7 | 32 бита (!ai Дис: В-4) | Идентификатор владельца реестра |
8 | 6 бит | Версия uuid + служебные биты |
9 | 74 бита | Идентификатор актива |
Таблица 17. Соответствие типов актива
Версия s_cc (десятичное) | Версия s_cc (битовое) | Тип актива | Значение типа актива (десятичное) | Значение типа актива (битовое) |
1 | 001 | УЦ | 1 | 001 |
1 | 001 | КСКПЭП | 2 | 010 |
1 | 001 | НСКПЭП | 3 | 011 |
1 | 001 | ЭП | 4 | 100 |
Совокупность типа актива, идентификатора реестра и идентификатора владельца реестра однозначно определяют конкретный реестр и тип актива. Исключением является канал аккредитованных УЦ, в котором содержатся активы двух типов (УЦ и КСКПЭП).
В рамках текущей модели идентификатора объекта возможно 32 ротации канала. Увеличение количества ротаций возможно за счёт перераспределения битов идентификатора владельца реестра с переходом на новую версию сервисного чейнкода, что приводит к большему количеству записей в сервисной базе данных, разрешающих возникающие коллизии между идентификаторами владельцев реестра. Количество ротаций в зависимости от распределения битов указано в таблице 18.
Таблица 18. Количество ротаций канала в случае перераспределения битов
Идентификатор реестра: количество бит | Идентификатор реестра: количество ротаций канала | Идентификатор владельца реестра: количество бит | Вероятность отсутствия хотя бы одной коллизии* |
5 | 32 | 32 | 2,598·10⁻⁵⁰⁶ |
7 | 128 | 30 | 4,56·10⁻²⁰²³ |
9 | 512 | 28 | 4,31·10⁻⁸⁰⁹⁰ |
11 | 2048 | 26 | 3,46·10⁻³²³⁵⁸ |
13 | 8192 | 24 | 1,44·10⁻¹²⁹⁴³⁰ |
* вероятность отсутствия коллизии определяется согласно схеме «парадокса дней рождений».
Переход на 256-битовый идентификатор объекта настоящим требованием не предусматривается.
4.2.7.4 Требования к методам сервисного чейнкода
Для обеспечения работы с активами в каналах реализуются методы сервисного чейнкода согласно таблице 19 (входные данные — аргументы методов, выходные данные — результаты методов).
Таблица 19. Методы сервисного чейнкода
№ | Метод | Аргументы | Результат | Описание |
1 | SetRegistry | Все поля сервисной базы данных (кроме registryID) | registryID | Регистрирует нового издателя в служебной базе данных (возвращая 0) либо ротирует канал, возвращая registryID + 1 (не более 31) |
2 | GetAssetType | Данные актива (JSON) | assetType | В соответствии с версией сервисного чейнкода возвращает числовое значение типа актива |
3 | GetKeyDateTime | Данные актива (JSON) | dateTime | Определяет ключевую дату для актива |
4 | GetServiceCCVersion | dateTime = Now() | serviceCCVersion | Возвращает текущую версию сервисного чейнкода либо актуальную на заданный момент времени |
5 | ResolveUUID (GetRegisterByUUID) | UUID | { channelName, chaincodeName } | Определяет тип и ключевую дату для искомого актива, версию s_cc, вычисляет издателя, находит его реестр для актива и возвращает пару значений «канал + чейнкод» |
6 | GetRegisterByAsset | Данные актива (JSON) | { channelName, chaincodeName } | Выполняет формирование идентификатора объекта и его маршрутизацию |
7 | GetRegistersByIssue | Данные актива (JSON) | [ { channelName, chaincodeName, RecordID } ] | Подыскивает по сервисной базе данных все возможные (по версиям s_cc) реестры для данного актива и его издателя |
8 | ResolveCollision | Данные актива (JSON) | IssuerIDAddon | Определяет требуемую добавку к issuerID в виде issuerIDAddon |
Разрешение возможных коллизий между владельцами реестров обеспечивается полями issuerID, issuerIDAddon, roundsNum: при обнаружении коллизии создаётся дополнительная запись в сервисную базу данных; при обеспечении маршрутизации производится проверка наличия записи о коллизии в сервисном чейнкоде, после чего данные о записи уточняются по точному значению идентификатора.
Разрешение возможных коллизий между объектами реестра обеспечивается полями collisionID, uniqueIDForCollision: при обнаружении коллизии создаётся дополнительная запись в сервисную базу данных; при обеспечении маршрутизации производится проверка наличия записи о коллизии в сервисном чейнкоде, после чего данные о записи уточняются по точному значению идентификатора.
Сервисный чейнкод содержится в канале ГУЦ.
4.2.7.5 Требования к методам формирования идентификатора объекта по данным актива
Для работы с активами реализуются методы получения идентификатора объекта по данным актива согласно таблице 20.
Таблица 20. Методы формирования идентификатора объекта по данным актива
№ | Метод | Аргументы | Результат | Описание |
1 | getUUIDFromCenterOfAuthority | Структура сведений об аккредитации | UUID | По значению ОГРН УЦ формирует значение UUID |
2 | getUUIDFromCertificate | Структура сведений о сертификате | UUID | По значению хэша серийного номера, Issuer.OGRN (или хэша от поля Issuer) формирует значение UUID |
3 | getUUIDFromDigitalSignature | Структура сведений об электронной подписи | UUID | По значению электронной подписи, ОГРН издателя сертификата подписи (или хэша от поля Issuer издателя) формирует значение UUID |
(!ai Дис: В-4) В снимке 261002 подтверждён только метод getUUIDFromCertificate; методы для сведений об аккредитации и об электронной подписи в обновлённых источниках не описаны — состав методов подлежит уточнению.
4.2.8. Реализовать функцию формирования представления данных о сертификатах УКЭП и о событиях жизненного цикла сертификатов УКЭП на основании записей в распределённых реестрах для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 8 Требований к функциям Заявки. На основании записей в распределённых реестрах формируются представления данных о статусе сертификата УКЭП: история статуса сертификата, статус сертификата на заданный момент времени, периоды действия сертификата — с учётом статуса аккредитации издателя сертификата. Представления предоставляются через программный интерфейс публичного канала сертификатов УЦ. Возможность проверки статуса сертификата и статуса аккредитации выдавшего его удостоверяющего центра на любой момент времени в прошлом — условие признания действительности усиленной квалифицированной электронной подписи (статья 11 Федерального закона № 63-ФЗ).
Требования к функциям. В рамках данного требования необходимо:
Реализовать функцию получения истории статуса сертификата.
Реализовать функцию получения статуса сертификата на заданный момент времени.
Реализовать функцию получения периодов действия сертификата.
4.2.8.1 Требования к получению истории статуса сертификата
Получение истории статуса сертификата: GET certificate-validity/qual/all?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS (!ai Дис: В-1); возвращается история изменения статуса сертификата. Коды ошибок: ERR-0010 (пустой запрос), ERR-0729 (отсутствует сертификат) (!ai Дис: В-11).
4.2.8.2 Требования к получению статуса сертификата на заданный момент времени
Получение статуса сертификата на заданный момент времени: GET certificate-validity/qual/by-date?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS&time='YYYY-MM-DDTHH:MM:SSZ' (!ai Дис: В-1). Возвращается результат по каждому сертификату цепочки доверия (target_cert, sub_ca, root_cert): идентификатор сертификата (certId), статус сертификата в цепочке (localStatus со значениями status True/False, details: notYetValid — срок действия ещё не наступил; issued — действует с момента выпуска; expired — срок действия истёк; annulled — аннулирован; revoked — действие досрочно прекращено/приостановлено; resumption — действие возобновлено; date — дата события, определяющего статус; reason — причина отзыва), статус аккредитации УЦ издателя (accreditationStatus), а также статус секретного ключа (privateKeyStatus, для проверяемого сертификата), признак завершения фоновых проверок isChecked (!ai Дис: Д-3) и итоговый статус (resultStatus) (!ai Дис: В-3).
Статус сертификата на заданную дату определяется по истории изменения статуса сертификата: для даты проверки выбирается запись с максимальным значением updatedAt, не превышающим дату проверки; учитываются события «выпуск», «прекращение», «возобновление», «аннулирование», а также выход даты проверки за пределы периода действия сертификата. Статус аккредитации издателя определяется на дату начала действия сертификата (validityNotBefore) запросом к реестру аккредитации и сертификатов УЦ. Итоговый статус: если у всех сертификатов цепочки localStatus.status = true и accreditationStatus = true, то resultStatus = true; если хотя бы у одного сертификата localStatus.status = false или accreditationStatus = false, то resultStatus = false. Статус секретного ключа: True, если дата проверки попадает в период действия секретного ключа (включая границы); False — вне периода; если период не указан, статус ключа не указывается. Коды ошибок: ERR-0010, ERR-0729 (!ai Дис: В-11).
4.2.8.3 Требования к получению периодов действия сертификата
Получение периодов действия сертификата: GET certificate-validity/qual/periods?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS (!ai Дис: В-1). Периоды действия вычисляются по истории изменения статуса: событие «1» (начало действия) (!ai Дис: В-2) задаёт период от validityNotBefore до validityNotAfter; событие «2» (прекращение) обрывает период; событие «0» (аннулирование) исключает все периоды действия с даты начала действия сертификата; событие «3» (возобновление) начинает новый период. Периоды действия целевого сертификата — пересечение периодов действия всех сертификатов цепочки доверия (начало — максимум начал периодов, окончание — минимум окончаний периодов), пересекающиеся и соприкасающиеся периоды объединяются. Если аккредитация издателя не действует на дату начала действия сертификата, периоды действия отсутствуют. Коды ошибок: ERR-0010, ERR-0729 (!ai Дис: В-11).
4.2.9. Реализовать функцию формирования представления данных о сертификатах УНЭП и о событиях жизненного цикла сертификатов УНЭП на основании записей в распределённых реестрах для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 9 Требований к функциям Заявки. На основании записей в распределённых реестрах формируются представления данных о статусе сертификата УНЭП: история статуса сертификата, статус сертификата на заданный момент времени, периоды действия сертификата — без учёта статуса аккредитации издателя. Представления предоставляются через программный интерфейс публичного канала сертификатов УЦ; статус сертификата на заданную дату определяется только по истории изменения статуса сертификата и по сертификатам цепочки доверия.
Требования к функциям. В рамках данного требования необходимо:
Реализовать функцию получения истории статуса сертификата.
Реализовать функцию получения статуса сертификата на заданный момент времени.
Реализовать функцию получения периодов действия сертификата.
4.2.9.1 Требования к получению истории статуса сертификата
Получение истории статуса сертификата: GET certificate-validity/unqual/all?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS; возвращается история изменения статуса сертификата; коды ошибок — ERR-0010, ERR-0729 (!ai Дис: В-11).
4.2.9.2 Требования к получению статуса сертификата на заданный момент времени
Получение статуса сертификата на заданный момент времени: GET certificate-validity/unqual/by-date?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS&time='YYYY-MM-DDTHH:MM:SSZ'; возвращается результат по каждому сертификату цепочки доверия (target_cert, sub_ca, root_cert): certId, localStatus (status, details, date, reason), статус секретного ключа (privateKeyStatus) и итоговый статус (resultStatus) (!ai Дис: В-3). Статус сертификата на заданную дату определяется по истории изменения статуса сертификата (запись с максимальным updatedAt, не превышающим дату проверки). Итоговый статус: если у всех сертификатов цепочки localStatus.status = true, то resultStatus = true; если хотя бы у одного localStatus.status = false, то resultStatus = false. В отличие от сертификатов УКЭП, обращение к реестру аккредитации не выполняется и поле accreditationStatus не определяется; коды ошибок — ERR-0010, ERR-0729 (!ai Дис: В-11).
4.2.9.3 Требования к получению периодов действия сертификата
Получение периодов действия сертификата: GET certificate-validity/unqual/periods?cert=YYYY-MM-DDTHH:MM:SSZ;hashTBS; периоды действия вычисляются по истории изменения статуса и пересечению периодов действия сертификатов цепочки доверия (правила вычисления — как в п. 4.2.8.3), без проверки статуса аккредитации издателя; коды ошибок — ERR-0010, ERR-0729 (!ai Дис: В-11).
4.2.10. Реализовать функцию формирования представления данных об аккредитации удостоверяющих центров на основании записей в распределённых реестрах для использования в высоконагруженном сервисе.
Назначение работ. Работы выполняются в соответствии с пунктом 10 Требований к функциям Заявки. Сведения об аккредитации удостоверяющих центров предоставляются внешним потребителям по запросу, в том числе о статусе аккредитации на любой момент времени в прошлом. Возможность получить историю аккредитации, периоды её действия и статус на заданную дату необходима для признания действительности квалифицированной электронной подписи (статья 11 Закона № 63-ФЗ), а массовая выборка сведений по заданным фильтрам — для внешних информационных систем и автоматизированного контроля (надзора) в сфере электронной подписи. Представления формируются на основании записей в распределённых реестрах и предоставляются через программный интерфейс (REST API); изменение сведений реестра по результатам запросов не выполняется — функции предоставляются только для чтения.
Требования к функциям. В рамках данного требования необходимо:
Реализовать функцию получения истории аккредитации удостоверяющего центра.
Реализовать функцию получения периодов действия аккредитации удостоверяющего центра.
Реализовать функцию получения статуса аккредитации на заданную дату.
Реализовать функцию получения сведений по фильтру.
4.2.10.1 Требования к получению истории аккредитации удостоверяющего центра
Функция получения истории аккредитации удостоверяющего центра должна обеспечивать:
приём запроса с идентификатором удостоверяющего центра (ОГРН);
возврат всех событий аккредитации удостоверяющего центра, упорядоченных по версии, дате и времени начала действия изменения и времени внесения сведений в реестр;
отказ с возвратом кода ошибки при отсутствии удостоверяющего центра в реестре либо записей об аккредитации.
Обоснование: полная история событий аккредитации — требуется для подробного анализа и проверки всех событий статуса аккредитации УЦ в прошлом.
4.2.10.2 Требования к получению периодов действия аккредитации удостоверяющего центра
Функция получения периодов действия аккредитации удостоверяющего центра должна обеспечивать:
приём запроса с идентификатором удостоверяющего центра (ОГРН);
вычисление периодов, в течение которых аккредитация действовала, с учётом отменённых событий;
возврат перечня периодов с указанием даты и времени начала и окончания каждого периода.
Обоснование: периоды действия аккредитации позволяют потребителям установить, действовала ли аккредитация на интересующий момент, без обработки полной истории событий.
4.2.10.3 Требования к получению статуса аккредитации на заданную дату
Функция получения статуса аккредитации на заданную дату должна обеспечивать:
приём запроса с идентификатором удостоверяющего центра (ОГРН) и моментом проверки;
определение статуса аккредитации на указанный момент с учётом отменённых событий;
возврат признака действия аккредитации на указанный момент (действует / не действует);
отказ с возвратом кода ошибки, если момент проверки раньше даты начала аккредитации.
Обоснование: проверка статуса аккредитации на момент подписания — условие признания действительности квалифицированной электронной подписи (статья 11 Закона № 63-ФЗ).
4.2.10.4 Требования к получению сведений по фильтру
Функция получения сведений по фильтру должна обеспечивать:
приём параметров фильтрации: статус аккредитации; период по дате и времени окончания действия аккредитации; период по дате и времени начала аккредитации; период по дате и времени обновления сведений об аккредитации; период по дате и времени обновления сведений об удостоверяющем центре; комбинации статуса аккредитации с каждым из указанных периодов;
при указании только нижней границы периода — возврат удостоверяющих центров со значениями после указанной границы; при указании только верхней границы — до указанной границы;
возврат перечня удостоверяющих центров, удовлетворяющих заданным параметрам, с актуальными сведениями об удостоверяющем центре и его аккредитации.
Обоснование: массовая выборка сведений по фильтрам обеспечивает использование данных реестра внешними информационными системами и автоматизированным контролем (надзором) без обработки полной истории.