Машина времени для DPP

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

Это Transpareo Time Machine - наше приложение с открытым исходным кодом для потребителей, предназначенное для любого цифрового паспорта продукта. Код доступен под лицензией GPL v3 на GitHub.

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

Убедитесь сами

В демо-версии представлены полные паспорта продукции с примерными данными: просмотрите историю версий и откройте контрольную наклейку - прямо в браузере, без регистрации.

Что делает приложение

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

1

Сканирование

Отсканируйте QR-код с помощью камеры смартфона. Приложение откроется в браузере.

2

Посмотреть новости

Продукт предстает в настоящем - компоненты, материалы, происхождение, уход, переработка.

3

Пролистать историю

Одно движение пальцем позволяет пролистать назад во времени. Каждая предыдущая версия с датой и причиной изменения.

4

Поделиться

Каждая версия имеет свою собственную ссылку. Пользователь делится конкретной версией с друзьями или государственными органами.

Зачем вообще

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

С точки зрения цифр ситуация очевидна. К концу десятилетия среднестатистический европейский частный человек сможет сканировать от десятков до сотен паспортов продуктов в год. Если рассчитать на 200 миллионов домохозяйств, это составит миллиарды взаимодействий с потребителями ежегодно. По сравнению с этим объем взаимодействий со стороны органов власти и предприятий по переработке отходов является ничтожно малым.

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

Мы приняли решение создать этот потребительский портал на основе открытого исходного кода, чтобы он не зависел от какого-либо одного поставщика.

Ход событий - это закон, а манифест - наше дело

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

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

Смена поставщика без перерыва

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

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

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

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

Сам переход не является отдельным проектом. Transpareo Time Machine представляет собой статический пакет: достаточно один раз его скомпилировать, скопировать на любой веб-сервер - и всё готово. Дизайн, который вы настроили в Transpareo для своих паспортов, передается в виде опубликованного таблицы стилей вместе с каждым паспортом. Таким образом, вид паспорта, к которому привыкли ваши клиенты, будет выглядеть точно так же на вашем собственном сервере, включая цвета, шрифт и логотип.

Проверено в браузере, а не на нашем сервере

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

Каждую версию DPP подписывают две независимые друг от друга стороны: эмитент и Transpareo. Обе подписи должны поддаваться проверке, чтобы значок стал зелёным. Используя подход «Принесите свой собственный ключ» (BYOK), эмитент управляет собственным конечным пунктом подписи - Transpareo никогда не хранит закрытый ключ и лишь добавляет независимую встречную подпись. Таким образом формируется подпись эмитента, которую сама компания Transpareo не может создать.

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

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

Такая же проверка доступна и на отдельной странице: на сайте Проверка DPP введите URL-адрес манифеста любого описания продукта и увидите полный результат проверки - без необходимости открывать само описание.

Мы публикуем код

Transpareo Time Machine распространяется по лицензии GPL v3 на GitHub. Опубликованные модификации, в свою очередь, должны распространяться по лицензии GPL v3, чтобы любое дальнейшее развитие приносило пользу обществу.

Клонирование, форки, самостоятельное размещение на хостинге - всё разрешено.

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

Кто грамотно использует приложение

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

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

Что произойдет, если компании «Транспарео» больше не будет?

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

  • Каждая подписанная версия DPP хранится в общедоступном хранилище. Байтов данных и опубликованных открытых ключей достаточно для последующей проверки.
  • Как только паспорта продукта зарегистрированы в реестре ЕС, второе хранилище, защищенное от записи, дублирует каждую версию DPP и журнал событий в течение дополнительных десяти лет. Никто - в том числе и мы - не может впоследствии изменить эти дубликаты.
  • После расторжения договора короткие URL-адреса паспортов продукта остаются доступными через перенаправление на платформе Transpareo.
  • Transpareo Time Machine работает без изменений даже с архивированными данными. Пакет не обращается к нам во время выполнения; ему нужны только байты и ключи.

Даже если завтра платформа Transpareo исчезнет, версии DPP и рендерер с открытым исходным кодом останутся.

Для тех, кто интересуется технологиями

Вот что происходит «под капотом». Если вам не нужно знать об этом подробно, можете пропустить этот раздел - приложение будет работать и без этого.

  • GS1 Digital Link (ISO/IEC 18975): URL «паспорта продукта» содержит идентификатор продукта в стандартизированном формате - независимом от резолвера и взаимозаменяемом между поставщиками.
  • Схема канонизации JSON (RFC 8785): детерминированная сериализация. Таким образом, хеш остается воспроизводимым независимо от порядка полей или пробелов - каждый может самостоятельно его пересчитать.
  • W3C Data Integrity Proofs (eddsa-jcs-2022): подпись Ed25519 над канонизированной формой (JCS).
  • /.well-known/dpp-keys/ (RFC 8615): открытые ключи эмитентов находятся по стандартизированному пути - не требуется обращаться в Transpareo, каждый верификатор может найти их самостоятельно.

Всё задокументировано в README на GitHub - включая архитектуру фронтенда (собственное ядро React, без внешних фреймворков) и инструкции по сборке для самостоятельного хостинга.

Посмотреть код на GitHub

Полный исходный код, все релизы и обсуждение проблем можно найти в общедоступном репозитории.