SD-JWT VC или mdoc (ISO/IEC 18013-5): сравнение форматов кошелька EUDI
SD-JWT VC или mdoc (ISO/IEC 18013-5) для разработчиков: выборочное раскрытие, привязка к ключу, OpenID4VP и ISO/IEC 18013-7, требования Имплементационного регламента (ЕС) 2026/1731 к PID и какой формат нужен верификатору.

Коротко
Каждый кошелёк цифровой идентификации ЕС (EUDI Wallet) обязан поддерживать два формата учётных данных: SD-JWT VC и mdoc (ISO/IEC 18013-5). SD-JWT VC основан на JSON и создан для удалённого использования. mdoc использует двоичный CBOR и единственный из двух работает также при очном предъявлении (proximity).[1]
- Оба формата скрывают и раскрывают атрибуты по одному принципу: хеши с солью, подписанные эмитентом.[1]
- Начиная с Имплементационного регламента (ЕС) 2026/1731 данные идентификации личности выдаются в обоих форматах.[2]
- Удалённый проверяющий может прочитать любой из них через OpenID4VP. Считывателю для очного предъявления нужен mdoc.[1]
SD-JWT VC представляет собой проверяемые учётные данные в виде подписанного JSON Web Token, утверждения которого можно раскрывать по одному. mdoc представляет собой мобильный документ в формате ISO/IEC 18013-5. Этот стандарт изначально написан для мобильных водительских удостоверений. Архитектура и эталонная структура (ARF) EUDI Wallet называет оба формата обязательными для кошельков. Третий формат, W3C Verifiable Credentials Data Model 2.0, указан как необязательный и «предназначен только для неквалифицированных EAA».[1]
В этом руководстве оба формата сравниваются для разработчиков, которые создают проверяющую сторону. Источники: ARF v3.0.0, текст OpenID for Verifiable Presentations (OpenID4VP) 1.0 и Официальный журнал. PID означает данные идентификации личности (person identification data).
Что такое SD-JWT VC
ARF описывает «SD-JWT-based Verifiable Credentials» как формат данных и правила обработки для представления проверяемых учётных данных. Здесь SD-JWT «означает "Selectively Disclosable JSON Web Token"».[1] Формат охватывает кодирование в JSON, механизм доказательства с выборочным раскрытием и необязательную привязку к устройству.[1]
В OpenID4VP используется идентификатор формата dc+sd-jwt, а запрос указывает тип учётных данных через vct_values.[4] Пример выданной полезной нагрузки из спецификации, сокращённый до двух из восьми дайджестов:[4]
{ "_sd": [ "jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4", "TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo" ], "vct": "https://credentials.example.com/identity_credential", "_sd_alg": "sha-256", "cnf": { "jwk": { "kty": "EC", "crv": "P-256" } } }
Примечание
SD-JWT VC оставляет открытыми многие варианты. ARF указывает, что профиль High Assurance Interoperability Profile (HAIP) «необходим для обеспечения совместимости между экземплярами кошелька (Wallet Units) и доверяющими сторонами».[1] Разрабатывайте в соответствии с HAIP.
Что такое mdoc (ISO/IEC 18013-5)
ISO/IEC 18013-5 определяет атрибуты удостоверения, их кодирование в Concise Binary Object Representation (CBOR) и пространства имён, которые не дают идентификаторам пересекаться. Он также определяет механизм доказательства с выборочным раскрытием, обязательную привязку к устройству и обмен данными при очном предъявлении.[1]
Специфична для вождения только модель данных удостоверения. ARF отмечает, что все остальные аспекты «являются общими и могут использоваться для любого другого типа аттестаций, включая PID».[1]
OpenID4VP описывает такие учётные данные как «закодированные в CBOR и защищённые с помощью COSE_Sign1» и присваивает им идентификатор формата mso_mdoc. Запрос указывает тип документа через doctype_value.[4]
Примечание
Готовится общий стандарт предъявления мобильных документов ISO/IEC 23220-4. ARF указывает, что он «ещё не завершён», и по-прежнему ссылается на ISO/IEC 18013-5.[1]
Как работает выборочное раскрытие в каждом формате
Выборочное раскрытие позволяет пользователю передать одни атрибуты и скрыть остальные. При этом проверяющий всё равно проверяет подпись эмитента. eIDAS 2 требует, чтобы кошельки обеспечивали такую возможность.[6] ARF называет механизм SD-JWT «хешами с солью» и указывает, что он «концептуально идентичен механизму, используемому для той же цели в [ISO/IEC 18013-5]».[1]
JSON
SD-JWT VC
- Эмитент подписывает JWT, который содержит дайджесты, а не значения
- Каждое скрытое утверждение передаётся как отдельное раскрытие (disclosure)
- Кошелёк отправляет только одобренные раскрытия
OpenID4VP 1.0, Приложение B.3
CBOR
mdoc (ISO/IEC 18013-5)
- Эмитент подписывает хеши элементов данных с солью
- Элементы данных размещаются в пространствах имён
- Кошелёк возвращает только одобренные элементы
ARF v3.0.0, разделы 5.4.2 и 5.4.3
Один механизм, две кодировки.[1][4]
В примере выше массив _sd содержит дайджесты SHA-256. Каждое раскрытие представляет собой массив из случайного значения, имени утверждения и значения утверждения. Для имени это ["2GLC42sKQveCfGfryNRN9w", "given_name", "John"], и его хеш стоит первым в списке дайджестов. Проверяющая сторона хеширует каждое полученное раскрытие и ищет этот дайджест в подписанных данных.[4]
Утверждения адресуются по-разному. Для учётных данных в JSON путь к утверждению представляет собой список ключей, например ["address", "street_address"]. Для mdoc путь «содержит два элемента строкового типа»: пространство имён и идентификатор элемента данных, например ["org.iso.18013.5.1", "first_name"].[4]
Внимание
В таблице атрибутов PID нет атрибута «старше 18». Обязательные атрибуты: фамилия, имя, дата рождения, место рождения и гражданство.[3] Выборочное раскрытие скрывает атрибуты. Оно не превращает дату рождения в ответ «да» или «нет».
Привязка ключа и device engagement
Привязка к устройству связывает учётные данные с ключами в кошельке пользователя, поэтому их нельзя клонировать. Проверяющая сторона проверяет привязку: она просит кошелёк подписать свежие случайные данные закрытым ключом, который соответствует открытому ключу в учётных данных.[1] Названия различаются: «В [ISO/IEC 18013-5] это называется „mdoc authentication“. В [SD-JWT VC] это называется „key binding“».[1]
| Вопрос | SD-JWT VC | mdoc (ISO/IEC 18013-5) |
|---|---|---|
| Название доказательства | Привязка ключа (key binding) | Аутентификация mdoc (mdoc authentication) |
| Обязательно ли по формату | Необязательно по спецификации | Обязательно по стандарту |
| Где находится ключ владельца | Утверждение cnf | Внутри mdoc, подписанного эмитентом |
| Что кошелёк возвращает по OpenID4VP | SD-JWT с Key Binding JWT | DeviceResponse с подписью или MAC по транскрипту сессии |
| Что связывает доказательство с вашим запросом | nonce и aud в Key Binding JWT | Передача OpenID4VP внутри транскрипта сессии |
Привязка к устройству обязательна для PID в обоих форматах.[1][4]
Для SD-JWT VC правило в OpenID4VP строгое. Если require_cryptographic_holder_binding имеет значение true (это значение по умолчанию), кошелёк «ДОЛЖЕН вернуть SD-JWT» вместе с Key Binding JWT. Утверждение nonce должно совпадать с nonce вашего запроса, а aud должно совпадать с вашим Client Identifier. Исключение составляет Digital Credentials API: там оно должно совпадать с вашим origin с префиксом origin:.[4]
Device engagement есть только в mdoc. В сценарии очного предъявления пользователь показывает QR-код или предъявляет NFC-метку. Она содержит то, что нужно считывателю, чтобы открыть соединение NFC, Bluetooth Low Energy или Wi-Fi Aware и построить поверх него аутентифицированный зашифрованный канал. Интернет-соединение между устройствами при этом не нужно.[1]
Кошелёк аутентифицирует считыватель
Очное предъявление с mdoc (ISO/IEC 18013-5), упрощённая схема.[1]
Что видит пользователь:
Предъявите удостоверение личности
Показать QR-код
1Пользователь открывает кошелёк и начинает предъявление.
Дайте считывателю отсканировать код
Или приложите телефон к считывателю.
2QR-код или касание NFC устанавливают канал.
Выберите, чем поделиться
- ФамилияПередаётся
- Дата рожденияПередаётся
- Место рожденияНе передаётся
Передать
3Кошелёк называет считыватель, и пользователь подтверждает.
Передано
4С телефона передаются только одобренные атрибуты.[1]
Протоколы предъявления: OpenID4VP, ISO/IEC 18013-7 и очное предъявление
В ARF перечислено, с чем работает кошелёк: ISO/IEC 18013-5 при очном предъявлении, а также OpenID4VP или ISO/IEC 18013-7 при удалённом предъявлении.[1]
| Протокол | Где | SD-JWT VC | mdoc (ISO/IEC 18013-5) |
|---|---|---|---|
| ISO/IEC 18013-5 | Очно: QR-код или NFC, затем NFC, Bluetooth Low Energy или Wi-Fi Aware | Нет | Да |
| OpenID4VP с HAIP | Удалённо: перенаправления и собственные URI-схемы или Digital Credentials API | Да | Да |
| ISO/IEC 18013-7 | Удалённо: Приложение C через Digital Credentials API; собственная URI-схема по Приложению A для кошельков необязательна | Нет | Да |
Какой протокол передаёт какой формат, согласно ARF.[1]
Аттестации SD-JWT VC «не могут использоваться при предъявлении вблизи». ISO/IEC 18013-7 «может использоваться только для запроса и предъявления аттестаций в формате, соответствующем [ISO/IEC 18013-5]». OpenID4VP «подходит только для потоков транзакций удалённого предъявления» и передаёт оба формата.[1] OpenID4VP 1.0 получила статус Final Specification 10 июля 2025 года.[5]
Видео ожидается: flow-eudi-openid4vp
Удалённое предъявление из кошелька через OpenID4VP от начала до конца.
ARF не рекомендует использовать собственные URI-схемы между устройствами, поскольку такие потоки «уязвимы для фишинга и атак ретрансляции», и называет альтернативой Digital Credentials API.[1] Этот API пока остаётся черновиком W3C, а Chrome 141 включает его по умолчанию.[9][10] ISO указывает техническую спецификацию 18013-7 2024 года как отозванную и заменённую, а третья редакция находится в разработке. Поэтому проверьте, на какую редакцию ориентирован ваш код.[7][8] Детали запроса приведены в руководстве для верификатора OpenID4VP.
Что Имплементационный регламент (ЕС) 2026/1731 требует в отношении PID
Первое правило о форматах PID, Имплементационный регламент (ЕС) 2024/2977, устанавливало, что PID «выдаются в двух форматах»: ISO/IEC 18013-5:2021 и Verifiable Credentials Data Model 1.1.[2][3] Изменяющий акт июля 2026 года заменил это предложение. Теперь PID «выдаются в соответствии со стандартами, установленными в Приложении II к Имплементационному регламенту (ЕС) 2024/2979, пункты 5 (формат SD-JWT VC) и 6 (формат ISO/IEC-mdoc)».[2]
- 4 декабря 2024Первое правило2024/2977: 18013-5 и VCDM 1.1.
- 22 июля 2026Внесены изменения2026/1731: SD-JWT VC и mdoc.
- 23 июля 2026ARF v3.0.0Приведена в соответствие с изменяющими актами.
- 24 декабря 2026Срок для кошельковОдин кошелёк на каждое государство-член.
- 11 августа 2028ПортретТребование о портрете применяется, если пользователь явно не отказался от него, где это применимо.
Как менялось законодательство о форматах PID.[1][2][3][6]
Тот же акт устанавливает два профиля предъявления в приложении к Имплементационному регламенту (ЕС) 2024/2982: «профиль ISO/IEC-mdoc» и «профиль OpenID4VC-HAIP».[2]
- Передавайте свой сертификат регистрации: один из элементов
verifier_info«должен включать сертификат регистрации».[2] - Используйте свой сертификат доступа как конечный (leaf) сертификат с префиксом идентификатора клиента
x509_hash.[2] - Для mdoc через Digital Credentials API следуйте «Приложению C к ISO/IEC 18013-7:2025».[2]
Регистрация описана в руководстве по EUDI Wallet для доверяющих сторон, а календарь в статье Сроки EUDI Wallet на 2026 и 2027 годы.
SD-JWT VC и mdoc (ISO/IEC 18013-5): сравнительная таблица
| Параметр | SD-JWT VC | mdoc (ISO/IEC 18013-5) |
|---|---|---|
| Кодирование | JSON Web Token | CBOR, двоичный |
| Выборочное раскрытие | Хеши с солью | Хеши с солью |
| Основной сценарий в ARF | Удалённое использование, например удалённая идентификация | Очное использование, например мобильное водительское удостоверение |
| Обязанность кошелька | Обязательно | Обязательно |
| PID выпускается в этом формате | Да | Да |
| Предъявление вблизи | Нет | Да, ISO/IEC 18013-5 |
| Удалённое предъявление | OpenID4VP с HAIP | OpenID4VP с HAIP или ISO/IEC 18013-7 |
| Привязка к устройству | Необязательна в формате, обязательна для PID | Обязательна по стандарту |
| Идентификатор формата в OpenID4VP | dc+sd-jwt | mso_mdoc |
| Путь к атрибутам | Ключи JSON | Пространство имён, затем идентификатор элемента данных |
По данным ARF, кроме строки PID (Имплементационный регламент 2026/1731) и двух последних строк (OpenID4VP 1.0).[1][2][4]
Мобильные водительские удостоверения в США основаны на ISO/IEC 18013-5 для очного предъявления.[7][8] Решение ЕС для проверки возраста называет доказательство с нулевым разглашением обязательным механизмом предъявления, «с простым предъявлением mDoc в качестве резервного варианта».[13] В документации молдавского EVO Wallet описан OpenID4VP 1.0 с mdoc по ISO/IEC 18013-5 в профиле HAIP 1.0.[11]
Какой формат должна поддерживать доверяющая сторона
Экземпляры кошелька работают с обоими форматами, и PID выдаётся в обоих.[1][2] В текстах, изученных для этого руководства, нет положения, обязывающего доверяющую сторону запрашивать оба. На практике это означает следующее: удалённый верификатор может запросить любой из них, а считывателю без подключения к интернету нужен mdoc, единственный формат, работающий при очном предъявлении (proximity).[1]
1Перечислите, где вы взаимодействуете с пользователем
Сайт, приложение, стойка обслуживания или пропускной пункт.
Есть ли среди них очный сценарий (proximity)
Внедрите mdoc (ISO/IEC 18013-5)
Он работает и удалённо.
Начните с SD-JWT VC
JSON через OpenID4VP с HAIP.
2Сделайте уровень запросов независимым от формата
Один запрос DCQL может указывать оба формата.
3Проверьте издателя, отзыв и привязку
Для обоих форматов действуют одни и те же проверки.
Язык запросов цифровых удостоверений (DCQL) в OpenID4VP позволяет передать в одном запросе запрос dc+sd-jwt и запрос mso_mdoc одновременно. Пример такого запроса приведён в спецификации.[4] Согласно ARF, доверяющая сторона проверяет подпись издателя по якорю доверия из доверенного списка (Trusted List) или списка доверенных субъектов (List of Trusted Entities), проверяет отзыв по списку статусов или списку отзыва и проверяет привязку к устройству.[1]
Согласно eIDAS 2, Регламенту (ЕС) 2024/1183, каждое государство-член должно предоставить как минимум один кошелёк до 24 декабря 2026 года, а частные доверяющие стороны, обязанные применять строгую аутентификацию пользователя, должны принимать его по запросу пользователя до 24 декабря 2027 года. Микро- и малые предприятия освобождены от этого требования.[6] Статус по странам приведён в трекере запуска EUDI Wallet.
Библиотеки и инструменты тестирования
В источниках этого руководства не названы библиотеки с открытым исходным кодом, поэтому в этом разделе их тоже нет. Но в источниках указано, где проводить тестирование и что проверять в любой выбранной библиотеке.
- Запустите тесты на соответствие на conformance.eudi.dev. Они указаны в примечаниях к выпуску ARF v3.0.0.[1]
- Изучите документацию эталонной реализации на docs.eudi.dev.[1]
- Изучите опубликованный верификатор: Национальный банк Молдовы выпустил для финансовых организаций демонстрационный верификатор с исходным кодом.[12]
- Убедитесь, что библиотека следует HAIP, а не только базовым спецификациям.[1]
- Уточните, какую редакцию ISO/IEC 18013-7 она реализует.[2][8]
Как Didit помогает с проверкой через EUDI Wallet
Прием EUDI Wallet скоро появится в Didit. Он есть в нашей дорожной карте, согласован с графиком внедрения EUDI Wallet и будет работать в том же процессе, который вы используете сегодня. Удаленно проверять людей можно уже сейчас.
- Сегодня в Didit через цифровые ID-кошельки работают пять национальных eID: MitID, BankID Sweden, Finnish Trust Network, Smart-ID и Mobile-ID. Подробнее: верификация eID.
- Все остальные проходят проверку документов со считыванием NFC-чипа, проверкой liveness и сопоставлением лица. Полная проверка KYC стоит $0.33.
- AML-скрининг выполняется в том же процессе за $0.20.
Документация по кошелькам показывает, как eID включаются для каждой страны.
Didit обеспечивает
- Вход через национальные eID и маршрут с документами в одном процессе
- Доказательства по каждой проверке
Остается за вами
- Ваша регистрация в качестве доверяющей стороны кошелька
- Выбор запрашиваемых форматов и атрибутов
- Решение об онбординге и ваши политики
Спланируйте форматы кошельков вместе с нами
Расскажите, в каких странах вы работаете и где взаимодействуете с пользователями, и начните с национальных eID и документов уже сегодня.
Ключевые выводы
- Кошельки поддерживают как SD-JWT VC, так и mdoc (ISO/IEC 18013-5), а PID выпускается в обоих форматах.
- Оба формата используют хеши с солью для выборочного раскрытия. Различаются они кодированием: JSON против CBOR.
- SD-JWT VC работает только удаленно. mdoc работает и при очном предъявлении, и удаленно.
- OpenID4VP с HAIP передает оба формата, поэтому один верификатор может запрашивать любой из них.
Часто задаваемые вопросы
Что такое SD-JWT VC?
Верифицируемое удостоверение, упакованное как Selectively Disclosable JSON Web Token. Эмитент подписывает дайджесты утверждений, а кошелёк раскрывает только те утверждения, которые одобрил пользователь.[1]
Что такое mdoc по ISO/IEC 18013-5?
Мобильный документ в формате CBOR, впервые определённом для мобильных водительских удостоверений. Остальная часть стандарта универсальна и может переносить другие аттестаты, включая PID.[1]
Чем SD-JWT VC отличается от mdoc?
Кодированием и сферой применения. SD-JWT VC основан на JSON и работает только удалённо; mdoc основан на CBOR и подходит также для очного предъявления. Оба используют хеши с солью для выборочного раскрытия.[1]
Какие форматы использует PID в кошельке EUDI?
Оба. Имплементационный регламент (ЕС) 2026/1731 устанавливает, что PID выдаётся в формате SD-JWT VC и в формате ISO/IEC-mdoc.[2]
Обязана ли доверяющая сторона поддерживать оба формата?
Тексты, изученные для этого руководства, обязывают кошельки поддерживать оба формата и не говорят, что доверяющая сторона должна запрашивать оба. Удалённый верификатор может запросить любой из них. Считывателю для очного предъявления нужен mdoc.[1][2]
Как работает выборочное раскрытие в SD-JWT VC?
Подписанный токен содержит дайджесты вместо значений утверждений. Каждое утверждение передаётся как раскрытие со случайным значением, именем и значением. Верификатор хеширует его и ищет соответствующий дайджест.[4]
Что такое привязка ключа и то же ли это, что аутентификация mdoc?
Оба термина обозначают привязку к устройству, то есть доказательство того, что удостоверение принадлежит ключам в кошельке пользователя. Для PID она обязательна.[1]
Работает ли OpenID4VP с mdoc?
Да. OpenID4VP переносит оба формата: с идентификатором mso_mdoc для mdoc и dc+sd-jwt для SD-JWT VC. Другой удалённый вариант это ISO/IEC 18013-7, и он переносит только mdoc.[1][4]
Где можно протестировать верификатор для обоих форматов?
Используйте тесты соответствия на conformance.eudi.dev и документацию на docs.eudi.dev. Национальный банк Молдовы также опубликовал демо-верификатор с исходным кодом.[1][12]
Источники
- Architecture and Reference Framework v3.0.0, eu-digital-identity-wallet на GitHub, релиз от 23 июля 2026 г.
- Имплементационный регламент Комиссии (ЕС) 2026/1731, EUR-Lex, Официальный журнал от 22 июля 2026 г.
- Имплементационный регламент Комиссии (ЕС) 2024/2977 о данных для идентификации личности, EUR-Lex, Официальный журнал от 4 декабря 2024 г.
- OpenID for Verifiable Presentations 1.0, OpenID Foundation, финальная спецификация.
- OpenID for Verifiable Presentations 1.0 Final Specification Approved, OpenID Foundation, 10 июля 2025 г.
- Регламент (ЕС) 2024/1183 (eIDAS 2), EUR-Lex, Официальный журнал от 30 апреля 2024 г.
- Серия ISO/IEC 18013, мобильное водительское удостоверение, страница стандарта ISO.
- ISO/IEC 18013-7, страница стандарта ISO.
- Digital Credentials, черновик W3C.
- Digital Credentials API shipped, Chrome for Developers.
- Руководство разработчика EVO Wallet, Правительство Молдовы, egov4dev.
- Демо-верификатор BNM, Правительство Молдовы, egov4dev.
- Решение ЕС для проверки возраста, технический портал, ageverification.dev.
SD-JWT VC и mdoc (ISO/IEC 18013-5) представляют собой две кодировки одного и того же обещания: подписанные атрибуты, которые контролирует пользователь. О том, как Didit подходит к приему кошельков, читайте на странице решения для кошелька EUDI, а все национальные схемы описаны в обзоре «Схемы eID по странам».
Проверяйте людей удаленно, пока кошельки внедряются
Используйте национальные eID и проверку по документам уже сейчас, а кошелек EUDI обсудите с нами.
Похожие статьи
- e-Devlet для бизнеса: проверка личности в Турции
- Интеграция Singpass Myinfo: руководство для бизнеса в Сингапуре
- Интеграция с Cl@ve в Испании: кто может подключиться и чем её заменить
- Проверка PhilSys: как компании проверяют национальный ID
- Руководство для верификатора OpenID4VP: приём EUDI Wallet
- Регламент eIDAS: что меняет eIDAS 2 (2024/1183)