DPP的时光机

试想一下,您手持一件产品,扫描上面的二维码。打开的不是PDF文件,而是一款小应用。您能实时了解该产品的详细信息:它由什么材料制成、产自何处,以及使用时需要注意什么。 轻轻一滑,便能穿越时光 - - 查看该产品迄今为止发布的每一个版本。

这就是 Transpareo Time Machine - - 我们为所有数字产品护照开发的开源消费者应用。该代码遵循 GPL v3 协议,发布在 GitHub 上。

我们开发这款应用,是因为欧盟《数字产品护照条例》是为消费者而制定的 - - 即手持该产品的人。大多数供应商将其变成了一份合规表格,没人会反复查看。而我们将其打造成了一款消费者真正会打开使用的应用。

请您亲自看看

该演示展示了包含示例数据的完整产品护照:您可以浏览版本历史,并打开检验标签 - - 直接在浏览器中操作,无需注册账号。

该应用的功能

从手持产品者的角度来看,共有四个接触点。无需登录,无需安装应用程序。

1

扫描

用智能手机摄像头扫描二维码。该应用将在浏览器中打开。

2

查看最新消息

该产品呈现当下 - - 组件、材料、来源、保养、回收。

3

翻阅历史

向后滑动即可回溯时间。每个早期版本都标注了修改日期和原因。

4

分享

每个版本都有独立的链接。用户可以将特定版本分享给朋友或相关机构。

为什么要这样呢

欧盟关于“数字产品护照”的法规是数十年来在产品透明度方面迈出的最大一步。如果仔细阅读其基础文本,就会发现该法规明确是为消费者而制定的。 政府部门、回收企业及维修店虽会配合执行,但该法规的主要受益对象是手持该产品的消费者本人。

从数据上看,情况非常明确。到本十年末,欧洲普通个人每年将能够扫描数十至数百份产品护照。 以2亿户家庭计算,这意味着每年将产生数十亿次消费者互动。相比之下,政府部门和回收企业方面的互动数量微乎其微。

如果要让该条例真正惠及消费者,那么面向消费者的平台必须设计得当 - - 快速、美观、逻辑严密。否则,它将无法达到预期目的。

我们决定以开源方式构建这个面向消费者的平台,使其不依赖于任何单一供应商。

历史进程是既定的,宣言则由我们制定

产品护照的内容会发生变化:一次维修、新的再生材料比例、一次召回。 因此,规范 要求必须能够检索到历史版本:存储规范将每个版本固定下来,接口规范则规定每个版本均可被有针对性地读取。规范中未明确规定的是中间环节:一份将产品护照所有版本串联成完整历史轨迹的清单。 Transpareo 会为每份产品护照发布一份经过数字签名的清单,并将每个版本通过“指纹”与前一个版本链式关联。这样,时间机器便能翻阅产品的历史,读者不仅可以验证某个版本的真实性,还能确认它是完整序列中的最新版本。

但该应用并不拘泥于此。如果向其展示的不是清单,而是一个单独的“通行证”(即各供应商根据开放标准发布的通行证),它将仅显示该单一版本,检查其签名(如有),并直接省略时间线。 没有签名的凭证不会被视为错误,而是直接以无验证印章的形式显示。因此,同一款应用也会渲染那些从未在Transpareo注册过的凭证。

无缝切换服务商

欧盟《数字产品护照条例》要求产品护照必须具备互操作性并基于开放标准 - - 即能在不同服务和系统间转移,而非绑定于单一供应商。因此,与服务提供商的独立性并非附加要求,而是规定的一部分。

Transpareo Time Machine 正是将这一要求付诸实践的关键工具。由于每个产品护照均采用开放标准交付 - - 包括解析器中立的标识、规范化的序列化以及公开发布的密钥 - - 且渲染器遵循 GPL v3 协议开源发布,因此产品护照的显示形式永远不会受限于我们的平台。

产品护照由经济主体负责 - - 即制造商、进口商或授权代表。 即使该主体决定离开 Transpareo 并转用其他服务商,展示形式仍保持稳定:同一开源渲染器将继续原样显示已发布的版本及其历史记录,而任何采用相同开放标准的新服务商,其产品通行证都将由完全相同的应用程序进行展示。

数据将随之一并迁移,消费者不会察觉任何中断,且无需等待迁移完成。

迁移本身并非一个项目。Transpareo Time Machine 是一个静态打包文件:构建一次,复制到任意 Web 服务器上,即告完成。 您在 Transpareo 中为护照设置的样式,将作为已发布的样式表随每个护照一同迁移。因此,您的客户已经习惯的护照界面,在您自己的服务器上看起来完全一样,包括颜色、字体和徽标。

在浏览器中进行测试,而非在我们的服务器上

每个产品证书的顶部都会显示一个标识: “经Transpareo验证”。该标识显示的验证结果并非在我们的服务器上生成,而是在访问者的浏览器中 - - 基于已加载的数据字节和签发方的公钥。

每个 DPP 版本均由两个相互独立的机构进行签名:签发方和 Transpareo。两份签名都必须可验证,徽章才会变为绿色。 通过“自带密钥”(BYOK)机制,发行方运营着自己的签名端点 - - Transpareo 绝不会持有私钥,仅负责添加独立的交叉签名。由此产生的发行方签名,是 Transpareo 自身无法生成的。

即使服务器遭到入侵,也无法伪造该勾选标记,因为验证过程是在访问者端自行进行的。

如需详细了解,请点击该标识。点击后,您将看到签名链、哈希值以及链式版本历史记录。 如果您只想获取信息,只需忽略该内容,继续阅读产品证书即可。

该验证功能也提供独立页面:在DPP验证 上,您只需输入任意产品证书的清单 URL,即可查看完整的验证结果 - - 无需打开证书本身。

我们将开源该代码

Transpareo Time Machine 采用 GPL v3 许可证发布于 GitHub。发布的修改版本也必须遵循 GPL v3 许可证,以确保任何后续开发都能造福大众。

克隆、分叉、自行托管 - - 一切皆可。

关于如何集成该应用 - - 无论是通过页面中的一行代码、作为包集成到您自己的应用程序中,还是完全自行托管 - - 具体说明请参阅该处的 README 文件。您还可以在其中找到用于纯签名验证的姊妹组件,该组件已在DPP验证 上上线运行。

如何合理使用该应用程序

该应用最初是为消费者开发的。但对于所有希望独立查看或核实产品数据的人来说,它同样适用。

-终端消费者可以扫描、查看、浏览和分享。无需登录,无追踪器。 -市场监管机构和政府部门可通过一款源代码可公开审计的软件查看产品护照。 -维修店和回收商可直接在产品上查看材料成分和拆解说明。 -品牌商和分叉项目运营商可根据自身品牌需求定制该软件包 - - 支持 CSS 令牌、自定义组件及自主托管。

如果Transpareo不再存在,会发生什么

欧盟要求,已注册的产品护照必须至少保留十年 - - 即使在签发方破产或清算后也是如此。而SaaS服务商的存续期很少能达到这么久。 因此,我们从一开始就将平台设计为:产品护照即使脱离我们也能继续使用:

  • 每个已签名的 DPP 版本都存储在公开可读的存储中。这些数据字节加上已发布的公钥,足以满足日后的验证需求。
  • 一旦产品护照在欧盟注册处完成注册,第二个只读存储库将额外保留每个 DPP 版本及事件日志的副本长达十年。任何人 - - 包括我们自己 - - 都无法事后修改这些镜像副本。
  • 服务终止后,简短的产品护照 URL 仍可通过重定向在 Transpareo 平台上访问。
  • Transpareo Time Machine 即使针对已归档的数据集也能照常运行。该软件包在运行时不会调用我们;它只需要这些字节和密钥即可。

即使 Transpareo 平台明天消失,DPP 版本和开源渲染器仍将保留。

献给对科技充满好奇的人

以下是后台的运作原理。如果不需要了解具体细节,可以跳过这一部分 - - 应用程序照样可以正常运行。

-GS1 Digital Link(ISO/IEC 18975):产品护照 URL 以标准化形式承载产品标识 - - 与解析器无关,且不同供应商之间可互换。 -JSON 规范化方案(RFC 8785):一种确定性序列化方案。 因此,无论字段顺序或空格如何,哈希值均可重复生成 - - 任何人都可以自行验证。 -W3C 数据完整性证明(eddsa-jcs-2022):基于规范化形式 (JCS) 的 Ed25519 签名。 -/.well-known/dpp-keys/(RFC 8615):签发者的公钥位于标准化路径下 - - 无需向 Transpareo 发起请求,任何验证者均可自行查找。

所有内容均记录在 GitHub 上的 README 中 - - 包括前端架构(自研的 React 核心,不使用任何外部框架)以及用于自主托管的构建指南。

在 GitHub 上查看代码

完整的源代码、所有发布版本以及问题讨论,请参见公开仓库。