ЧТЗ_ротация_каналов_4.2.4_v01_draft

4.2.4 Создание функций маршрутизации запросов в распределённых реестрах

Работы выполняются в соответствии с пунктом ___/4.2.4/АКК Заявки № ___ «Создание функций маршрутизации запросов в распределённых реестрах».

Назначение работ. В высокодинамичных средах, характеризующихся частым созданием записей об активах, со временем происходит деградация производительности реестров; подсистема ИС ГУЦ «Распределённые реестры объектов инфраструктуры открытых ключей» (далее — Реестры PKI) относится к таковым. В связи с этим возникает объективная необходимость внедрения механизма ротации каналов, под которым понимается периодическое создание нового канала, миграция на него актуальной бизнес-логики и участников с сохранением возможности доступа к данным старых каналов. Межканальная маршрутизация запросов к объектам и разрешение возможных коллизий между объектами обеспечиваются сервисным чейнкодом, размещаемым в канале ГУЦ. Выполнение работ предусмотрено п. 4.2.4 ТЗ.

Целевая модель. В рамках данной заявки необходимо обеспечить возможность ротации каналов распределённого реестра (по мере наполнения канала и периодически), ведение данных о действующих и ротированных каналах в сервисной базе данных сервисного чейнкода, маршрутизацию запросов к объектам каналов по идентификатору объекта, а также разрешение коллизий между владельцами реестров и между объектами реестров.

Границы требования. В рамках реализации требования не предусмотрено:

  • перенос данных активов из ранее созданного канала в новый канал — доступ к данным ранее созданных каналов сохраняется без переноса;

  • переход на 256-битовую структуру идентификатора объекта (увеличение количества ротаций канала до 228) — подход не является стандартизированным и требует более глубокой проработки;

  • ведение сведений об активах реестров (реестровая бизнес-логика) — сервисный чейнкод обеспечивает маршрутизацию запросов и хранение данных о каналах;

  • автоматическая ротация каналов — событие ротации каналов и исполнение этой функции выполняется вручную;

  • определение фактического времени эксплуатации канала до ротации — устанавливается в рамках нагрузочного тестирования.

Требования к функциям. В рамках данного требования необходимо:

  1. Реализовать функцию регистрации реестра в сервисном чейнкоде, обеспечивающую: приём всех полей сервисной базы данных, кроме идентификатора реестра; присвоение идентификатора реестра (0 — при регистрации нового издателя актива; значение, увеличенное на 1, — при ротации канала, но не более 31); фиксацию момента ввода канала в эксплуатацию.

  2. Реализовать функцию ротации канала, обеспечивающую: создание нового канала с миграцией на него актуальной бизнес-логики и участников с сохранением возможности доступа к данным ранее созданных каналов; задействование ротации по мере наполнения канала и периодической ротации; вывод канала из эксплуатации по истечении времени жизни всех активов с фиксацией момента вывода канала из эксплуатации; перевод выведенного из эксплуатации канала в «холодный» режим.

  3. Обеспечить расчётные сроки эксплуатации каналов до ротации (таблица 1).

Таблица 1. Расчётное время эксплуатации каналов до ротации

Канал

Время эксплуатации до следующей ротации

Основание определения

Канал ГУЦ

15 лет

по времени действия сертификатов, выпускаемых для данного канала, и по наполняемости канала — в течение 15 лет объём данных составит ~15 МБ

Приватный / публичный канал квалифицированных / неквалифицированных сертификатов

1 год

по времени действия сертификатов, выпускаемых для данного канала

Канал электронных подписей

1 год

по времени действия сертификатов подписантов

  1. Обеспечить ведение сервисной базы данных сервисного чейнкода, содержащей сведения о реестрах (действующих и ротированных), с составом полей согласно таблице 2.

  2. Обеспечить формирование идентификатора объекта по данным актива: по значению ОГРН УЦ — для сведений об аккредитации удостоверяющего центра; по значению хэша серийного номера и Issuer.OGRN (или хэша от поля Issuer) — для сведений о сертификате; по значению электронной подписи и ОГРН издателя сертификата подписи (или хэша от поля Issuer издателя) — для сведений об электронной подписи.

  3. Обеспечить структуру идентификатора объекта — 128-битовый вектор (RFC 9562) с составом полей согласно таблице 3 и соответствием типов актива согласно таблице 4.

  4. Реализовать функцию маршрутизации запроса к объекту канала по идентификатору объекта: определение типа и ключевой даты искомого актива, версии сервисного чейнкода; вычисление издателя актива; поиск реестра актива для данного издателя; возврат пары значений «наименование канала + наименование чейнкода».

  5. Реализовать функцию определения реестра по данным актива (формирование идентификатора объекта и его маршрутизация) и функцию подбора всех возможных (по версиям сервисного чейнкода) реестров для данного актива и его издателя.

  6. Реализовать функцию определения типа актива по данным актива — возврат числового значения в соответствии с версией сервисного чейнкода.

  7. Реализовать функцию определения ключевой даты актива по данным актива.

  8. Реализовать функцию определения версии сервисного чейнкода — текущей либо актуальной на заданный момент времени.

  9. Обеспечить разрешение коллизий между владельцами реестров (issuerID, issuerIDAddon, roundsNum): при обнаружении коллизии создаётся дополнительная запись в сервисной базе данных; при маршрутизации проверяется наличие записи о коллизии, данные о записи уточняются по точному значению идентификатора.

  10. Обеспечить разрешение коллизий между объектами реестра (collisionID, uniqueIDForCollision): при обнаружении коллизии создаётся дополнительная запись в сервисной базе данных; при маршрутизации проверяется наличие записи о коллизии, данные о записи уточняются по точному значению идентификатора.

4.2.4.1 Требования к функции ротации каналов

Ротация канала выполняется вручную следующей последовательностью действий (таблица 6).

Таблица 6. Последовательность действий при ротации канала

Шаг

Роль

Описание действия

1

Оператор сети

Запросить MSP-конфигурации у организаций — участников каналов

2

Оператор сети

Создать конфигурацию канала configtx.yaml

3

Оператор сети

Сгенерировать genesis-блок

4

Оператор сети

Создать канал

5

Администратор узла

Получить генезис-блок канала

6

Администратор узла

Присоединить конкретный peer к каналу

7

Все

Проверка присоединения пиров к каналу, видимость пиров участников в канале

8

Оператор сети

Регистрация канала в сервисном чейнкоде

9

Оператор сети

По наступлении времени вывода канала из эксплуатации — создание нового канала (начиная с шага 1) и поддержка старого канала для внесения информации о жизненном цикле действующих активов

10

Оператор сети

Перевод старого канала в «холодный» режим по истечении времени жизни всех активов

Ротация канала для активов отражается изменением значения идентификатора реестра: для нового создаваемого канала идентификатор увеличивается на 1. Момент ввода канала в эксплуатацию фиксируется в сервисной базе данных и выступает временем начала периода вносимых в канал активов; момент вывода канала из эксплуатации фиксирует начало работы канала в «холодном» режиме.

Каждому поколению каналов соответствует индекс ротации (0 … N+1): канал ГУЦ (mcc), приватные каналы сертификатов ГУЦ, публичные и приватные каналы квалифицированных и неквалифицированных сертификатов УЦ, канал электронных подписей; системные имена каналов и чейнкодов включают индекс поколения. Сервисный чейнкод (service_cc) развёрнут у каждого участника (ГУЦ, УЦ) и при переходе к очередному поколению каналов переводится на новое поколение.

4.2.4.2 Требования к ведению сервисной базы данных сервисного чейнкода

Таблица 2. Состав сервисной базы данных сервисного чейнкода

Поле

Значение

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.4.3 Требования к структуре идентификатора объекта и типам актива

Таблица 3. Структура идентификатора объекта

№

Разрядность

Назначение

1

3 бита

Версия чейнкода

2

3 бита

Контрольная сумма (вычисляется как побитовая сумма последующих триад для последующих 42 бит)

3

1 бит

Глобальность адреса

4

1 бит

Область действия

5

3 бита

Тип актива

6

5 бит

Идентификатор реестра (начинается с 00000)

7

32 бита

Идентификатор владельца реестра

8

6 бит

Версия uuid + служебные биты

9

74 бита

Идентификатор актива

Таблица 4. Соответствие типов актива

Версия s_cc (десятичное)

Версия s_cc (битовое)

Тип актива

Значение типа актива (десятичное)

Значение типа актива (битовое)

1

001

УЦ

1

001

1

001

КСКПЭП

2

010

1

001

НСКПЭП

3

011

1

001

ЭП

4

100

Совокупность типа актива, идентификатора реестра и идентификатора владельца реестра однозначно определяют конкретный реестр и тип актива. Исключением является канал аккредитованных УЦ, в котором содержатся активы двух типов (УЦ и КСКПЭП).

В рамках текущей модели идентификатора объекта возможно 32 ротации канала. Увеличение количества ротаций возможно за счёт перераспределения битов идентификатора владельца реестра с переходом на новую версию сервисного чейнкода, что приводит к большему количеству записей в сервисной базе данных, разрешающих возникающие коллизии между идентификаторами владельцев реестра. Количество ротаций в зависимости от распределения битов указано в таблице 5.

Таблица 5. Количество ротаций канала в случае перераспределения битов

Идентификатор реестра: количество бит

Идентификатор реестра: количество ротаций канала

Идентификатор владельца реестра: количество бит

Вероятность отсутствия хотя бы одной коллизии*

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-битовый идентификатор объекта не предусматривается; примерный состав идентификатора объекта увеличенной разрядности приведён в таблице 6 (справочно, вне объёма работ).

Таблица 6. Примерный формат идентификатора объекта увеличенной разрядности (справочно)

№

Разрядность

Назначение

1

8 бит

Версия чейнкода

2

8 бит

Контрольная сумма

3

1 бит

Глобальность адреса

4

1 бит

Область действия

5

8 бит

Тип актива

6

28 бит

Идентификатор реестра

7

60 бит

Идентификатор владельца реестра

8

14 бит

Версия uuid + служебные биты

9

128 бит

Идентификатор актива

4.2.4.4 Требования к методам сервисного чейнкода

Для обеспечения работы с активами в каналах реализуются методы сервисного чейнкода согласно таблице 7 (входные данные — аргументы методов, выходные данные — результаты методов).

Таблица 7. Методы сервисного чейнкода

№

Метод

Аргументы

Результат

Описание

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.4.5 Требования к методам формирования идентификатора объекта по данным актива

Для работы с активами реализуются методы получения идентификатора объекта по данным актива согласно таблице 8.

Таблица 8. Методы формирования идентификатора объекта по данным актива

№

Метод

Аргументы

Результат

Описание

1

getUUIDFromCenterOfAuthority

Структура сведений об аккредитации

UUID

По значению ОГРН УЦ формирует значение UUID

2

getUUIDFromCertificate

Структура сведений о сертификате

UUID

По значению хэша серийного номера, Issuer.OGRN (или хэша от поля Issuer) формирует значение UUID

3

getUUIDFromDigitalSignature

Структура сведений об электронной подписи

UUID

По значению электронной подписи, ОГРН издателя сертификата подписи (или хэша от поля Issuer издателя) формирует значение UUID