DPP的时光机

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

这就是 Transpareo Time Machine,我们为所有数字产品护照开发的开源消费者应用程序。该程序的源代码已根据GPL v3协议发布在GitHub上。 由欧盟资助的CIRPASS-2项目将其Transpareo Time Machine 收录到了其OpenDPP目录中的开源DPP软件列表中。

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

请您亲自看看

示例产品护照内容完整,其中填入了虚构的数据:您可以浏览版本历史记录并查看检验标签 - 直接在浏览器中操作,无需注册账号。

该应用的功能

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

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 采用 GitHub 上的 GPL v3 许可证。发布的修改版本也必须遵循 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 中有详细说明 - 包括前端架构(自研的响应式内核,不依赖任何外部框架)以及用于自主托管的构建指南。

在 GitHub 上查看代码

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