Раскрытие информации без потери подписи

Раскрытие информации без потери подписи

Тем, кому раскрываются защищенные поля, как правило, приходится доверять платформе. Мы подписываем каждое поле отдельно, чтобы их можно было проверить самостоятельно.

Цифровой паспорт продукта не всем показывает одно и то же. Покупательница видит общедоступные данные. Ремонтная мастерская или компания по восстановлению видит больше. Орган рыночного надзора видит всё. Это уже прояснено, и европейские стандарты теперь прямо это закрепляют.

Более интересный вопрос звучит не так громко: если кому-то раскрываются защищённые поля, выходящие за рамки общедоступных данных, может ли он подтвердить, что именно эти поля являются подлинными? Или ему приходится полагаться на то, что платформа правильно отобрала их и передала без изменений?

Для большинства платформ честный ответ звучит так: доверие. Мы построили нашу платформу так, чтобы ответом было «доказательство» - не только для общедоступных полей, но и для каждого поля, которое добавляется только при раскрытии. Почему это различие имеет значение и почему мы выбрали для этого более трудоемкий путь.

Правило доступа одинаково соблюдается всеми

EN 18239, европейский стандарт, регулирующий права доступа, безопасность и конфиденциальность в DPP, требует управления доступом для каждого элемента данных: для каждого поля существует правило, определяющее, кто имеет право его просматривать. Это правильное требование, и выполнить его несложно. Какой статус вообще имеют эти стандарты, мы подробно разобрали в статье «Гармонизированные стандарты».

Обычно это достигается с помощью фильтрации на стороне сервера. Сервер знает, кто запрашивает данные, проверяет, что этот человек имеет право видеть, и возвращает именно этот фрагмент. Управление доступом: выполнено. Больше стандарт ничего не требует.

Но есть один нюанс, о котором стандарт не заботится: фрагмент поступает без подписи. Читатель получает подготовленный специально для него фрагмент и должен верить, что сервер честно его отобрал и по пути ничего не изменил. Для общедоступной памятки это нормально. Но для значения, на котором переработчик основывает цену на подержанную батарею, это слишком большая вера.

Где одиночная подпись достигает своих пределов

Очевидным решением является подписание данных. Для обоих концов шкалы хорошо подходит обычная подпись: подписать общедоступный фрагмент, подписать полный набор данных, и оба проверяются по открытому ключу без участия сервера. Как это происходит в деталях, описано в статье «Подписи и сертификаты в DPP».

Проблема возникает в середине. Подпись на весь документ охватывает ровно один набор полей - именно те, которые были доступны на момент подписания. Если авторизованному читателю дополнительно раскрыть защищённое поле, это поле окажется за пределами подписанного набора и дойдёт до него без защиты. Если же с самого начала подписать полный набор данных, подпись, конечно, охватит всё, но тогда придётся показывать всё всем.

Таким образом, промежуточные звенья остаются за бортом: ремонтная мастерская, страховщик, компания по переработке отходов. Если бы нужно было заранее подписать каждую возможную комбинацию «кто что видит», потребовался бы отдельный подписанный документ для каждой комбинации, а количество комбинаций растёт в геометрической прогрессии с каждой новой группой доступа. Никто так не поступает. Приходится возвращаться к неподписанному серверному фильтру, и промежуточное звено вновь опирается на доверие.

Подписывать каждое поле по отдельности

Существует более удачная конструкция, и именно на ней мы строим нашу платформу. Вместо того чтобы подписывать готовый документ целиком, издатель в ходе одного цикла подписи отдельно определяет каждое поле (для знатоков стандартов: сертификат W3C ecdsa-sd-2023 для выборочного раскрытия).

Каждый вид начинается с общедоступного ядра

Каждый вид начинается с одних и тех же общедоступных полей. То, что читатель видит сверх этого, добавляется поле за полем, и каждое из этих полей по-прежнему ведёт к открытому ключу издателя - в автономном режиме, без повторной подписи и без доверия к организации, скомпоновавшей данный вид. Поля, на которые нет прав доступа, просто отсутствуют. Они не зачеркнуты, а вовсе отсутствуют, и никакой информации о них не просачивается.

Пример: ремонтная мастерская

Как это выглядит на практике, показывает следующий пример. Ремонтная мастерская заявила о законном интересе в отношении аккумулятора - это один из уровней доступа, прямо предусмотренных Постановлением об аккумуляторах. Её система мастерской авторизуется с помощью своего API-ключа на нашем интерфейсе и запрашивает паспорт.

Ответом служит тот же открытый паспорт, который видит и покупательница, но с одним дополнительным полем: инструкция по демонтажу, доступ к которой предоставляется только уполномоченным читателям. Никакого второго документа, никакой специальной версии - тот же паспорт с одним дополнительным полем.

Прежде чем предприятие доверяет этому полю, его программное обеспечение сверяет прилагаемое подтверждение с открытым ключом выдающего лица. Если проверка проходит успешно, в том числе и по дополнительному полю, он знает: эта инструкция дословно исходит от производителя, и ни мы, ни кто-либо другой на этом пути ничего в ней не изменил. Если проверка не проходит, он знает это с такой же уверенностью и откладывает документ в целом в сторону.

Наша роль в этом сознательно минимальна. Обеспечение того, что он получает именно те поля, на которые имеет право, остаётся задачей нашей системы контроля доступа; это точно так же выполняет любой серверный фильтр. Новым является следующий шаг: он сам проверяет, подлинно ли то, что поступает, не обращаясь к нам.

Почему «ненарушенность» - это весь смысл

Представьте себе нотариуса, который заверит не письмо целиком, а каждый абзац по отдельности. Общедоступное письмо получает каждый. Тот, кто имеет право на большее, получает дополнительные абзацы, и каждый из них по-прежнему несет печать того же нотариуса.

Почему в данном случае важна именно «ненарушенность», стоит объяснить ещё одним предложением. Целая печать не означает, что содержание достоверно. Она говорит: именно это написал составитель, и с тех пор никто не изменил ни одной буквы. Таким образом, из круга доверия выпадает каждый, кто просто передал документ дальше - промежуточный хранилище, сеть, архив, мы. Кто выдал вам паспорт, уже не имеет значения.

А печать - это бинарный показатель. Она либо цела, либо нет, полуразорванной печати не бывает. Если она разорвана, вы не узнаете, какая именно фраза была изменена, а лишь то, что больше нельзя доверять всему документу целиком. Поэтому разница не является степенной: придут ли к вам дополнительные поля с печатью или без неё: без печати они не являются менее достоверными - они вообще не являются достоверными.

Оба способа просмотра

Каждый может проверить это самостоятельно. Transpareo Time Machine - это наше приложение с открытым исходным кодом для просмотра паспортов продукции: Оно пролистывает историю версий паспорта и при этом пересчитывает каждую подпись в браузере пользователя, не обращаясь к нашему серверу. В приложении публично доступны два примера паспортов. Паспорт футболки имеет подпись, охватывающую весь документ, а паспорт батареи - раскрытие информации по полям.

Обе спецификации являются открытыми стандартами W3C: eddsa-jcs-2022 для подписи всего документа, ecdsa-sd-2023 для раскрытия информации по полям. Реализовать их может любой желающий. Трудоемкость - вот причина, по которой многие не будут этого делать: подпись, охватывающая весь документ, значительно дешевле в создании и эксплуатации, и тем, кто предоставляет только открытые данные, этого вполне достаточно.

То, что Time Machine поддерживает оба метода, сделано намеренно и так и останется. Она не принадлежит ни одной платформе. Проверяющий орган, принимающий только более дорогостоящий метод, стал бы инструментом только для нас и ни для кого больше.

Кому раскрываются защищённые поля

Стоит задаться вопросом, кому вообще раскрывается какая-либо информация помимо общедоступных данных. Не случайной покупательнице - ей предоставляется общедоступный паспорт. Это переработчик, который оценивает стоимость подержанного аккумуляторного блока; страховщик, который рассчитывает стоимость риска; предприятие по переработке отходов, которое сортирует химические вещества; государственный орган, который ведёт дело. Именно эти лица принимают решения, от которых зависят деньги или безопасность.

И именно эти поля в обычном подходе остаются незащищёнными. Тот, у кого больше всего причин требовать криптографического подтверждения, не получает его как раз для тех полей, на которых основано его решение.

Мы считаем, что знак проверки должен означать одно и то же для всех. Надпись «Проверено Transpareo» на расширенном отчёте ремонтной мастерской означает то же самое, что и на публичном паспорте покупательницы: каждая отображённая область происходит от эмитента и с тех пор не подвергалась изменениям. Печать, которая ставится только на публичные поля, - это печать наполовину.

Больше, чем требует стандарт

Скажем прямо: ничего из этого не предписывается. ## СтандартEN 18239 требует, чтобы доступ контролировался, и серверный фильтр безупречно контролирует доступ. Кроме того, обеспечение возможности криптографической проверки открытых полей - это то, что мы делаем сверх требований, а не просто галочка, которую от нас требует нормативный акт.

Именно поэтому об этом стоит упомянуть. Весь смысл подписанного паспорта заключается в том, что никому не нужно доверять платформе. Исключение среднего уровня из правил возвращает именно то доверие, которое подпись должна была устранить.

Тот же принцип позволяет забыть о поле

Особое внимание к каждому полю влечёт за собой второе свойство, и именно его требует европейское законодательство. Общий регламент по защите данных предоставляет людям право на удаление персональных данных. Набор данных, подписанный как единый блок, не может выполнить это требование без уничтожения собственной подписи.

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

Тем не менее, это совершенно обычный паспорт

Ничто из этого не делает паспорт каким-то особым объектом, который могут открыть только наши инструменты. Он остаётся верифицируемым удостоверением (Verifiable Credential) в формате JSON-LD - формате, к которому стремится мир веб-стандартов, и том же формате, который используют Протокол прозрачности ООН (UN Transparency Protocol) и остальная среда W3C.

Таким образом, паспорт, который покупательница сканирует в браузере, - это тот же самый объект, который может считывать партнер по информационному хранилищу, и любой проверяющий, работающий в соответствии со стандартами, может его проверить, а не только наши специалисты. Дополнительная безопасность ничего не стоит читателю и никого не связывает с нами.

Почему это сложно с технической точки зрения

Прежде всего, чтобы не сложилось ложное впечатление: мы не изобрели этот метод. ecdsa-sd-2023 - это открытая спецификация W3C, лежащая в его основе криптография не является нашей разработкой, и любой, кто хочет её реализовать, может ознакомиться с ней. Сложно не придумать идею. Сложно реализовать её так, чтобы паспорт по-прежнему работал через десять лет. Именно в этом заключается основная работа, и об этом можно сказать кое-что полезное.

Разница кажется незначительной, но она меняет саму основу: обычная подпись производит вычисления над байтами документа. Селективное раскрытие вычисляется на основе содержащихся в документе утверждений. Перед подписанием паспорт приводится к стандартизированной форме, в которой каждое утверждение представлено в виде отдельного, самостоятельного предложения. Только благодаря этому можно опустить одно предложение, не повредив остальные.

В результате возникает проблема, которой нет у байтовой подписи: та же самая стандартизированная форма должна точно воспроизвестись через десять лет. Не приблизительно, а символ за символом, иначе подтверждение больше не будет соответствовать. На пути этому стоят три препятствия, и все три незаметны.

Числа теряют свой тип. Если записать число просто в формате JSON, то по пути теряется информация о том, каким именно было это число. Такое значение, как 2.0, после прохождения через JSON возвращается как 2. Для человека это одно и то же, но для стандартизированной формы - это другое предложение, и проверка завершается неудачей.

Названия сами по себе ещё не означают смысла. Чтобы сформировалась стандартизированная форма, каждое имя поля должно соотноситься с однозначным значением. Если одно из них отсутствует, поле при преобразовании незаметно исчезает. Оно тогда остаётся в паспорте, но подтверждение его не охватывает, и никто этого не замечает.

Значения обычно находятся в сети. Это сопоставление хранится в словаре, который большинство инструментов загружают из сети во время проверки. Тот, кто так поступает, ставит проверку своего паспорта в зависимость от того, что чужой адрес через десять лет всё ещё будет отвечать, причём без изменений.

Как мы это решили

Мы устранили эти три проблемы у истоков, вместо того чтобы исправлять их позже.

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

Словари. Каждый словарь, на который ссылается паспорт, хранится у нас локально и никогда не загружается из сети. Неизвестный адрес приводит к жесткому прерыванию процесса подписи, а не к незаметному возврату к пустому результату.

Идентификаторы. Каждый узел в документе имеет стабильный идентификатор, благодаря чему стандартизированная форма остается воспроизводимой, а не требует присвоения новых вспомогательных имен при каждом проходе.

Самая деликатная часть заключается в принципе «Bring Your Own Key» (Используй свой собственный ключ). Для каждой выдачи требуется дополнительный краткосрочный ключ, с помощью которого отдельно подписываются поля, подлежащие раскрытию. Этот ключ генерирует и удаляет сам выдающий. Если бы он находился у нас, мы могли бы задним числом придумывать отдельные поля, и независимость подписи экспонента осталась бы лишь на словах. Мы проверяем возвращаемое подтверждение по сохраненному открытому ключу, прежде чем доверять ему.

Каждый паспорт содержит два таких подтверждения: одно от эмитента и одно от Transpareo, и каждое из них выводится независимо для просмотра читателем. Две подписи, два независимых друг от друга авторитета - даже для одного отдельно раскрытого поля.

Для нас эти затраты оправданы. Мы не добавили возможность проверки задним числом; платформа с самого начала создавалась с учётом этого. Каждый паспорт при публикации подписывается и привязывается к предыдущей версии. Неизменяемый десятилетний архив создан и вступает в действие, как только паспорта регистрируются в реестре EU-DPP. Подписка каждого поля вместо всего блока - это расширение этого ядра, а не наложение на то, что изначально не было для этого предназначено.

Где мы находимся

Мы выбрали метод подтверждения для каждого читателя, потому что печать должна означать одно и то же, независимо от того, кто на неё смотрит. Для тех, кто хочет увидеть, как это работает: две демонстрации, ссылки на которые приведены выше, проверяются прямо в браузере, без обращения к серверу.

Вопросы по данной публикации

Предусматривает ли какой-либо стандарт сигнатуру по полям?

Нет. Стандарт EN 18239 требует, чтобы доступ контролировался по каждому элементу данных, и фильтр на стороне сервера полностью соответствует этому требованию. Решение о том, чтобы обеспечить возможность проверки раскрываемых полей, является нашим собственным, а не просто формальностью, требуемой каким-либо нормативным актом. Мы считаем эти усилия оправданными, поскольку весь смысл подписанного пропуска заключается в том, что никому не нужно доверять платформе - исключение промежуточного звена как раз и позволяет вернуть это доверие. О том, какой статус вообще имеют эти стандарты, говорится в нашей статье, посвящённой гармонизированным стандартам.

В чём, конкретно, заключается разница по сравнению с серверным фильтром?

Важно не то, что кто-то видит, а то, что поступает. Оба способа показывают читателю именно те поля, на которые он имеет право. При использовании серверного фильтра фрагмент поступает без подписи, поэтому читатель должен доверять тому, что сервер был выбран добросовестно и что по пути данные не были изменены. При пополевой проверке тот же фрагмент поступает с подтверждением, которое в автономном режиме позволяет проследить его до открытого ключа эмитента, и при этом никому не нужно обращаться к нам с запросом. Для общедоступного информационного бюллетеня эта разница носит чисто теоретический характер, однако для определения стоимости, на которой переработчик основывает цену на использованную батарею, она имеет решающее значение.

Нужно ли читателям для этого специальное программное обеспечение?

Нет. Паспорт остается верифицируемым удостоверением в формате JSON-LD, а в качестве доказательства используется открытый криптографический набор W3C ecdsa-sd-2023, поэтому любой проверяющий, соответствующий стандарту, может его проверить. Наше открытое приложение для просмотра, Transpareo Time Machine, пересчитывает каждую подпись в браузере пользователя без обращения к нашему серверу и специально поддерживает функцию простой подписи всего документа. Проверяющий, принимающий только наш метод, стал бы инструментом исключительно для нас и ни для кого больше.

Кому вообще раскрывается информация об охраняемых полях?

Не случайной покупательнице - ей выдается общедоступный пропуск. Речь идет о ремонтной мастерской, имеющей зарегистрированный законный интерес; о специалисте по восстановлению, оценивающем стоимость бывшего в употреблении аккумуляторного блока; о переработчике, сортирующем химические вещества; о страховщике, определяющем стоимость риска; а также о государственном органе, оформляющем дело - лица, чьи решения зависят от финансовых интересов или безопасности. Регламент ЕС об аккумуляторах предусматривает именно эти этапы. При этом именно эти лица, согласно традиционному подходу, не получают подтверждающих данных именно по тем областям, на которых основываются их решения.

Мы публикуем только общедоступные данные. Нужно ли это?

Вероятно, нет, и мы прямо об этом заявляем. Подпись, охватывающая весь документ, - криптографический набор eddsa-jcs-2022 - охватывает пасс, все поля которого являются общедоступными, и её создание и эксплуатация обходятся значительно дешевле. Раскрытие информации по отдельным полям оправдывает себя, как только появляется вторая целевая аудитория - например, сеть сервисных центров, предприятие по переработке отходов или государственный орган, которым вы в противном случае передали бы неподписанные выдержки. Оба метода являются открытыми спецификациями W3C, и оба сегодня реализованы в Time Machine - как в случае с паспортом футболки, так и с паспортом батареи.

Можно ли впоследствии удалить персональные данные, не аннулируя при этом паспорт?

Да, и это действительно предусмотрено европейским законодательством. Общий регламент по защите данных предоставляет людям право на удаление персональных данных, а набор данных, подписанный в виде блока, не может удовлетворить это требование без уничтожения собственной подписи. Поскольку здесь каждое поле зафиксировано отдельно, можно удалить отдельное поле, при этом все остальное по-прежнему проходит проверку - без повторной выдачи и без нарушения истории версий. Поля, хранение которых требуется в соответствии с законодательством, остаются на месте.

Кто хранит ключ подписи?

Каждый пропуск сопровождается двумя подтверждающими документами, и один из них может принадлежать именно вам. Каждое выдаваемое удостоверение дополнительно требует кратковременного ключа, который индивидуально подписывает поля, подлежащие раскрытию; этот ключ генерирует и уничтожает сам выдающий орган, поскольку, если бы он хранился у нас, мы могли бы впоследствии подделать отдельные поля, и независимость подписи выдающего органа осталась бы лишь на словах. Прежде чем довериться возвращаемому подтверждению, мы сверяем его с сохраненным открытым ключом. Таким образом, каждый паспорт содержит два подтверждения от двух независимых авторитетных источников - как для отдельного раскрываемого поля, так и для всего набора данных.

Будет ли паспорт действителен через десять лет?

Именно в этом и заключается сложность. Селективное раскрытие информации основано на содержании документа, а не на его байтах, поэтому через десятилетие тот же стандартизированный формат должен быть воспроизведён символ за символом. Три фактора нарушают эту плавность, и мы устранили все три в корне: каждое значение записывается с указанием его типа, и публикация прерывается при появлении числа без указания типа; каждый словарь хранится локально и никогда не загружается из сети, и каждый узел имеет стабильный идентификатор, благодаря чему стандартизированный формат остаётся воспроизводимым. Неизменяемый десятилетний архив создан и начнёт функционировать, как только паспорта будут зарегистрированы в реестре ЕС, который с 20 июля 2026 года работает в соответствии с Исполнительным регламентом (ЕС) 2026/1778. Более подробно об этом - в нашем анализе Регламента о реестре.

Обновления, касающиеся уровней доступа и подтверждающих документов

Выборочное раскрытие информации, сигнатуры и развитие стандартов DPP - ежемесячный краткий обзор в вашем почтовом ящике.