DPP的时光机

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

现在您就可以亲身体验这一功能:演示⁠展示了一份包含示例数据的完整产品护照。

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

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

该应用的功能

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

1

扫描

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

2

查看最新消息

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

3

翻阅历史

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

4

分享

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

为什么要这样呢

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

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

如果要让该条例真正惠及消费者,那么面向消费者的平台必须设计得当 - - 快速、美观、逻辑严密。否则,它将无法达到预期目的。我们决定以开源方式构建该消费者平台,使其不依赖于任何单一供应商。

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

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

每个 DPP 版本均由两个相互独立的机构进行签名:制造商和 Transpareo。两份签名都必须可验证,徽章才会变为绿色。 通过“自带密钥”(BYOK)机制,制造商运营着自己的签名端点 - - Transpareo 绝不会持有私钥,仅负责添加独立的交叉签名。由此生成的发行者签名,是 Transpareo 自身无法生成的。 即使服务器遭到入侵,也无法伪造勾选标记,因为验证过程是在访问者端自行进行的。

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

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

我们将开源该代码

Transpareo Time Machine 采用 GPL v3 许可证发布于 GitHub⁠。克隆、分叉、自行托管 - - 均被允许。 已发布的修改版本也必须遵循 GPL v3 许可,以确保后续开发能惠及公众。

集成该软件包的三种方式:

-通过脚本标签:在页面中添加 <script><transpareo-time-machine src="…"> 即可,无需构建步骤。 -通过 npm:在自己的应用中执行 npm install transpareo-time-machine。 -自行托管:构建软件包,使用自有基础设施,运行时零第三方依赖。

如果只需进行签名验证而无需完整的产品视图,可导入其姊妹组件 <dpp-verifier> - - 非常适合审计工具。可在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 上查看代码

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