Сущности, взаимодействие и границы готовности DID/VC
Документ — карта того, что хранится и проверяется в did-svc и vc-svc, как сервисы связаны между собой и с соседями, и что из этого работает, а что пока только хранится или отсутствует. Как показывать — demo.md, сценарии пользователей — user-stories.md, формат идентификатора — did-method-ru.md.
Обозначения в таблицах полей:
Метка | Значит |
✅ работает | сервис проверяет значение и опирается на него в логике |
📦 хранится | сохраняется и отдаётся как есть, сервис его не проверяет и не использует |
🧩 заглушка | поле есть, но смысл не реализован (фиксированное значение, демо-данные, «на потом») |
⬜ нет | в модели отсутствует |
1. Контекст (C4, уровень 1)
Пунктир — интеграции, которых пока нет: для якорения есть чейнкод и тест совместимости, нет адаптера к blockchain-svc; для ГОСТ есть точка расширения верификаторов, к ней подключается проверка через cspemul-svc (стенд) или CSP (прод); ЦПА живёт в assets-app, VC паспорта — его подписанная проверяемая версия. Как это соотносится с существующими сервисами платформы — раздел 6.
2. Контейнеры (C4, уровень 2)
3. Модель сущностей
3.1. DID Document (pkg/did/document.go)
Идентификатор did:ru:<agent|device|org>:z<base58btc(SHA-256 JWK-отпечатка первого ключа capabilityInvocation)>. Старые did:i:… (персоны, identity-система) поддерживаются.
Поле | Статус | Что делает |
| ✅ | для |
| ✅ | кто может подписывать изменения документа |
| ✅ | организация, от имени которой агент/прибор; обязателен у |
| ✅ | строгая проверка: длины, кривая, модуль RSA; ключи-заглушки отклоняются |
| 🟡 | проверяется только, что ключ листового сертификата совпадает с JWK; цепочка до УЦ, срок, отзыв (CRL/OCSP) — не проверяются |
| ✅ | ключи для входа ( |
| ✅ | ключи, которыми издатель подписывает VC |
| ✅ | ключи для подписанных операций DID; первый — источник |
| 🟡 | X25519 проверяется как ключ, но шифрованного канала, который бы его использовал, нет |
| 📦 | хранится, делегирования нет |
| 📦 | хранится и отдаётся при резолве; сервис эти адреса не вызывает и не проверяет |
| ✅ | версии, |
| ✅ | заполняются при резолве исторической версии |
3.2. Ревизия и подпись операции
Поле | Статус | Что делает |
| ✅ | |
| ✅ | JWS по DID, предыдущей версии и хэшу тела; повтор — 409; режим |
| ✅ | подписант — контроллер или владелец; ключ из его |
| ✅ | хэш-цепочка; |
статус якорения | 🧩 | при |
3.3. VC (internal/vc/model/credential.go)
Общие поля: @context, id, type, issuer, validFrom, validUntil, credentialSubject, credentialStatus.
Поле / механизм | Статус | Что делает |
подпись издателя ( | ✅ | ключ из |
| ✅ | учитываются при verify, мандатах и сертификате паспорта |
| 🟡 | свой простой статус ( |
отзыв | ✅ | только с |
| 📦 / ✅ | хранится как произвольный JSON; проверяются только поля из таблицы типов ниже |
Тип VC | Издатель (проверяется) | Поля субъекта с логикой | Остальное |
| любой подписант | — | 📦 номер, серия, сроки — как прислали |
| ✅ владелец или контроллер DID прибора | ✅ | 📦 характеристики прибора; связи с документом ЦПА в assets-app пока нет |
| ✅ текущий владелец DID агента | ✅ | — |
| ✅ сам агент | ✅ | — |
| ✅ агент | ✅ | 📦 вывод анализа |
| identity-система / любой | — | 📦 |
3.4. Манифест агента (pkg/agentmanifest/manifest.go)
Собирается утилитой agentmanifest из каталога агента; manifestDigest — SHA-256 канонического JSON.
Поле | Статус | Что делает |
| ✅ | хэши AGENTS.md/CLAUDE.md считаются по файлам |
| ✅ | хэш каталога скилла |
| 🟡 | хэши конфигурации; что MCP-сервер реально тот же — не проверяется (нет его подписи) |
| 🟡 | список DID собеседников хранится; при обмене между агентами не проверяется (транспорта нет) |
| ✅ |
|
| ✅ | входят в хэш |
| ✅ | для D3 обязательны, temperature = 0 |
| 📦 | входят в хэш, отдельно не проверяются |
| ✅ | проверка полноты полей по классу |
Главная оговорка: runtime агент сообщает о себе сам. Сервис сравнивает сообщённое с мандатом, но не может доказать, что агент действительно запущен с этой конфигурацией, — аттестации среды исполнения (TEE / подписи рантайма) нет.
3.5. Персона (identity-сервис)
Поле | Статус |
| ✅ DID персоны выпускает и подписывает identity-система ( |
| 📦 |
| 🧩 сохраняются после обрезки пробелов; ни формат, ни контрольные суммы, ни принадлежность человеку не проверяются |
4. Взаимодействие — ключевые последовательности
4.1. Регистрация прибора и паспорт
У прибора один действующий паспорт. Новый указывает в replaces тот, что заменяет; vc-svc отзывает его в той же транзакции. Без replaces при действующем паспорте — 422 passport_exists. Право выпускать и заменять паспорт — у владельца или контроллера DID прибора, поэтому при передаче паспорт не перевыпускается: он привязан к прибору, а не к владельцу, и после приёмки заменять его может уже новый владелец.
4.2. Вход агента и доступ к маршруту
Сейчас вход проверяет did-svc напрямую (демо). Целевая схема — способ входа did в auth-svc: auth-svc выдаёт одноразовую строку, проверяет подпись через did-svc и выпускает обычные токены платформы; КТМ вызывает /agents/authorize уже с токеном.
4.3. Изменение DID и проверка истории
5. Криптография
Что используется
Где | Алгоритмы | Статус |
Ключи в DID ( | Ed25519 (OKP), ECDSA P-256/P-384/P-521 (EC), RSA, X25519 (только | ✅ строгий разбор |
Подпись операций DID, VC, отзыва, входа | JWS compact: EdDSA (Ed25519), ES256/ES384/ES512, RS256, PS256 | ✅ |
Формат VC | VC-JWT ( | ✅ |
Идентификатор | SHA-256 JWK-отпечатка (RFC 7638), base58btc | ✅ |
Хэш-цепочка ревизий, манифест | SHA-256 | ✅ |
Консоль | WebCrypto: Ed25519 / P-256 в браузере | ✅ (нужен localhost или HTTPS) |
| совпадение ключа листа | 🟡 |
Чего не хватает
Чего нет | Зачем | Где точка входа |
ГОСТ Р 34.10-2012 / 34.11-2012 (подпись, хэш) | юридически значимые операции, УКЭП (US-3) |
|
Проверка цепочки сертификата | ключ в DID доказуемо принадлежит юрлицу |
|
Хранение ключей (HSM / KMS / облачная КЭП) | сейчас ключи у клиента (браузер, | вне сервиса |
W3C Bitstring Status List | отзыв, понятный внешним верификаторам |
|
Data Integrity / JSON-LD proofs, SD-JWT | совместимость с экосистемой, выборочное раскрытие | формат VC |
Шифрование по | защищённый канал агент ↔ агент (US-15) | транспорта нет |
Аттестация рантайма агента | доказать, что агент запущен с конфигурацией мандата | runtime — самоотчёт |
Подпись MCP-серверов и инструментов | что агент пользуется теми самыми инструментами | в манифесте только хэши конфигов |
Якорение в HLF | голова истории DID в реестре консорциума (US-17) | чейнкод |
6. Соотношение с сервисами платформы
DID/VC не дублирует PKI и ЦПА: у них разные задачи, и местами в платформе нужного пока нет. Состояние — по коду монорепы на 2026-10-16.
Что | Где в платформе | Что там есть на деле | Как соотносится с DID/VC |
Сертификат ключа электронной подписи (X.509, УКЭП) |
| разбор сертификата и класс владельца (ФЛ/ЮЛ/ИП) по атрибутам, выпуск тестовых сертификатов; подписи не проверяет | ключ DID может нести |
Вход по УКЭП |
| сертификат проверяется только по сроку; проверка УЦ и CRL — | вход агента по DID — отдельный механизм с реальной проверкой подписи; общий ГОСТ-верификатор нужен обоим |
Подписи документов (CAdES, PKCS#7, XMLDSig, ПЭП) |
| все четыре валидатора возвращают «действительна» без проверки | VC-JWT проверяется по-настоящему (EdDSA/ES*/RS*/PS*); подключение ГОСТ-верификатора закрыло бы обе стороны |
ГОСТ-подпись транзакций HLF |
| подписывает | не проверяет сторонние подписи; для якорения DID через blockchain-svc — тот же путь |
ГОСТ на стенде |
| эмулятор OpenSSL GOST: ключи, | кандидат для ГОСТ-верификатора DID/VC на стенде |
Цифровой паспорт актива (ЦПА) |
| продуктовый паспорт с полями изделия; пишется в HLF синхронизатором documents-svc | VC паспорта — подписанная проверяемая проекция ЦПА для внешних сторон; связать: assets-app при создании и изменении ЦПА выпускает VC со ссылкой на документ (US-20) |
Сертификат соответствия продукции | — (в платформе нет) | — |
|
Вывод: механика DID/VC (идентификатор из ключа, подписанные операции, владение, отзыв, связи, мандат агента) — рабочий слой без аналога в платформе. Типы документов стенда (сертификат соответствия, паспорт прибора) — модель сценария, в продукте паспорт привязывается к ЦПА. ГОСТ, УКЭП и проверка сертификатов ключей подключаются к PKI и CSP, а не пишутся заново; при этом сама проверка подписей в платформе пока не работает (sigutils, verifications-svc) — это отдельная задача шире DID/VC.
7. Сводка: есть / частично / нет
Область | Есть | Частично | Нет |
Идентификаторы |
| — | регистрация метода в W3C |
Изменение DID | подписанные операции, согласие владельца, история и её проверка | якорение (лог) | HLF-адаптер |
VC | VC-JWT, отзыв издателем, связи паспорт→сертификат, анализ→входы | статус-лист (свой формат) | Bitstring Status List, SD-JWT |
Агенты | мандат, манифест D0–D3, вход по ключу, authorize | peers, MCP — только хэши | аттестация, межагентный канал |
Крипто | EdDSA, ES*, RS256, PS256 | x5c | ГОСТ, цепочка УЦ, HSM |
Интеграции | консоль, CLI, ленты событий | — | notifications-svc, assets-app (ЦПА), ГОСТ-верификатор (cspemul / CSP), pki-svc |
Журнал изменений
Дата | Перечень изменений | Автор |
2026-11-05 | Перенесён из архива DID-VC-итоги-2026-11-03 без изменения содержания. | Дис |