En tidsmaskin för DPP:er

Tänk dig att du håller en produkt i handen och skannar QR-koden på den. Istället för en PDF-fil öppnas en liten app. Du ser produkten just nu: vad den består av, var den kommer ifrån, vad du bör tänka på. Med en svepande rörelse bläddrar du tillbaka i tiden - du kan se varje version som någonsin har publicerats.

Det här är Transpareo Time Machine, vår öppen källkodsbaserade konsumentapp för alla digitala produktpass. Koden finns under GPL v3 på GitHub.

Vi utvecklar den eftersom EU-förordningen om det digitala produktpasset är skriven för konsumenterna - för den person som håller produkten i handen. De flesta leverantörer gör det till ett formulär för regelefterlevnad som ingen tittar på en andra gång. Vi gör det till en app som konsumenten faktiskt öppnar.

Se själv

I demon visas fullständiga produktpass med exempeldata: Bläddra igenom versionshistoriken och öppna kontrollmärket - direkt i webbläsaren, utan att behöva skapa ett konto.

Vad appen gör

Fyra kontaktpunkter ur den persons perspektiv som håller produkten i handen. Ingen inloggning, ingen appinstallation.

1

Skanna

Skanna QR-koden med smarttelefonens kamera. Appen öppnas i webbläsaren.

2

Visa nyheter

Produkten presenteras här och nu - komponenter, material, ursprung, skötsel, återvinning.

3

Bläddra i historiken

En svepande rörelse bläddrar tillbaka i tiden. Varje tidigare version med datum och anledning till ändringen.

4

Dela

Varje versionsstatus har sin egen länk. En person delar en viss version med vänner eller myndigheter.

Varför överhuvudtaget?

EU-förordningen om det digitala produktpasset är den största förändringen mot produkttransparens på flera decennier. Om man läser de underliggande texterna noggrant framgår det att den uttryckligen är skriven för konsumenterna. Myndigheterna, återvinningsföretagen och verkstäderna hänger med, men den främsta mottagaren är den person som håller produkten i handen.

Siffrorna talar sitt tydliga språk. En genomsnittlig europeisk privatperson kommer i slutet av decenniet att kunna skanna dussintals till hundratals produktpass per år. Räknat på 200 miljoner hushåll innebär det miljarder konsumentinteraktioner årligen. Jämfört med detta är myndigheternas och återvinningsföretagens värld numeriskt sett försvinnande liten.

Om förordningen ska nå fram till konsumenten måste konsumentsidan vara väl utformad - snabb, snygg och logisk. Annars missar den sitt syfte.

Vi har beslutat att bygga denna konsumentsida som öppen källkod, så att den inte är beroende av en enskild leverantör.

Förloppet är fastställt, manifestet är vårt

Ett produktpass förändras: en reparation, en ny återvinningsandel, en återkallelse. Kraven innebär därför att tidigare versioner måste förbli tillgängliga: lagringsstandarden fryser varje version, medan gränssnittsstandarden föreskriver att varje version ska kunna läsas specifikt. Det som kraven lämnar öppet är det som ligger däremellan: en lista som kopplar samman alla versioner av ett pass till en historik. Transpareo publicerar den för varje pass i form av ett manifest, signerat, där varje version är länkad till sin föregångare via ett digitalt avtryck. På så sätt bläddrar tidsmaskinen genom produktens historia, och en läsare kan inte bara kontrollera att en version är äkta, utan också att den är den aktuella i en sammanhängande sekvens.

Appen är dock inte bunden till detta. Om man istället för manifestet visar den ett enskilt pass, såsom varje leverantör publicerar enligt de öppna standarderna, visar den denna enda version, kontrollerar dess signatur om den har en sådan, och utelämnar helt enkelt tidslinjen. Ett pass utan signatur betraktas inte som ett fel, utan visas helt enkelt utan verifieringsmärke. På samma sätt visar samma app även pass som aldrig har funnits hos Transpareo.

Byte av leverantör utan avbrott

EU-förordningen om det digitala produktpasset kräver att produktpass ska vara interoperabla och bygga på öppna standarder - det vill säga överförbara mellan tjänster och system, istället för att vara bundna till en enskild leverantör. Oberoende från tjänsteleverantören är alltså inte något tillägg, utan en del av kravspecifikationen.

Transpareo Time Machine är verktyget som konkretiserar detta krav. Eftersom varje produktpass levereras enligt öppna standarder - resolverneutral identifiering, kanonisk serialisering, offentligt publicerade nycklar - och renderaren är öppen källkod under GPL v3, är visningen av ett pass aldrig beroende av vår plattform.

Ansvarig för ett produktpass är en ekonomisk aktör - tillverkaren, en importör eller en ombud. Om denne beslutar sig för att lämna Transpareo och byta till en annan leverantör förblir visningen stabil: samma öppen källkodsbaserade renderare fortsätter att visa de redan publicerade versionerna inklusive historiken oförändrat, och en ny leverantör som använder samma öppna standarder visas av exakt samma app.

Uppgifterna följer med, konsumenterna märker inget avbrott och ingen behöver vänta på en migrering.

Själva flytten är inget projekt. Transpareo Time Machine är ett statiskt paket: en gång byggt, kopierat till valfri webbserver - klart. Den design som ni har ställt in i Transpareo för era pass följer med varje pass som ett publicerat stilark. Passvyn, som era kunder har vant sig vid, ser alltså ut precis likadant på er egen server, inklusive färger, typsnitt och logotyp.

Testat i webbläsaren, inte på vår server

Högst upp i varje produktpass visas en etikett: Verifierad av Transpareo. Den visar resultatet av en kontroll som inte sker på vår server, utan i besökarens webbläsare - utifrån de inlästa byte och utfärdarens offentliga nycklar.

Två oberoende instanser signerar varje DPP-version: utfärdaren och Transpareo. Båda signaturerna måste kunna verifieras för att märket ska bli grönt. Med Bring Your Own Key (BYOK) driver utfärdaren en egen signaturändpunkt - Transpareo förvarar aldrig den privata nyckeln och lägger endast till den oberoende motsignaturen. På så sätt skapas en utfärdarsignatur som Transpareo själv inte kan generera.

En komprometterad server kan inte förfalska bockmarkeringen, eftersom verifieringen sker hos besökaren själv.

Den som vill veta mer klickar på märket. Där ser man signaturkedjan, hashvärdena och den länkade versionshistoriken. Den som bara vill ha informationen kan helt enkelt ignorera detta och läsa vidare i produktpasset.

Samma kontroll finns även som en fristående sida: På DPP-verifiering anger du manifest-URL:en för valfritt produktpass och ser det fullständiga kontrollresultatet - utan att behöva öppna passet själv.

Vi släpper koden

Transpareo Time Machine släpps under GPL v3 på GitHub. Publicerade modifieringar måste i sin tur släppas under GPL v3, så att varje vidareutveckling kommer allmänheten till godo.

Klona, forka, självhosting - allt är tillåtet.

Hur du integrerar appen, vare sig det är med en rad i sidan, som ett paket i din egen applikation eller helt självhostad, beskrivs i README-filen där. Där hittar du också systerkomponenten för ren signaturkontroll, som körs live på DPP-verifiering.

Den som använder appen på ett meningsfullt sätt

Appen är i första hand utvecklad för konsumenter. Den fungerar dock för alla som vill granska eller verifiera produktdata på egen hand.

  • Slutkonsumenter skannar, tittar, bläddrar och delar. Ingen inloggning, inga spårningsverktyg.
  • Marknadsövervakningsorgan och myndigheter kan se produktpasset i en programvara vars källkod är öppet granskbar.
  • Verkstäder och återvinningsföretag ser material sammansättning och demonteringsanvisningar direkt på produkten.
  • Varumärken och fork-operatörer anpassar paketet till sitt eget varumärke - CSS-tokens, egna komponenter, egen hosting.

Vad händer om Transpareo inte finns längre?

EU kräver att ett registrerat produktpass ska vara tillgängligt i minst tio år - även efter att utfärdaren har gått i konkurs eller likviderats. En SaaS-leverantör håller sällan så länge. Därför bygger vi plattformen från början så att produktpasset förblir användbart oberoende av oss:

  • Varje signerad DPP-version lagras i ett offentligt läsbart minne. Bytena tillsammans med de publicerade offentliga nycklarna räcker för en senare verifiering.
  • Så snart produktpasset har registrerats i EU-registret speglas varje DPP-version och händelseprotokollet i ett andra, skrivskyddat lagringsutrymme under ytterligare tio år. Ingen - inte ens vi - kan ändra dessa spegelkopior i efterhand.
  • Efter en uppsägning förblir de korta produktpass-URL:erna tillgängliga via en omdirigering på Transpareo-plattformen.
  • Transpareo Time Machine fungerar oförändrat även med arkiverade data. Paketet anropar oss inte under körning; det behöver bara byten och nycklarna.

Om Transpareo-plattformen skulle försvinna i morgon, skulle DPP-versionerna och den öppen källkodsbaserade renderaren finnas kvar.

För de som är nyfikna på teknik

Här beskrivs vad som händer bakom kulisserna. Om du inte behöver veta detta i detalj kan du hoppa över detta avsnitt - appen fungerar ändå.

  • GS1 Digital Link (ISO/IEC 18975): Produktpassets URL innehåller produktidentifikationen i standardiserad form - resolverneutral och utbytbar mellan leverantörer.
  • JSON Canonicalization Scheme (RFC 8785): En deterministisk serialisering. På så sätt förblir hashvärdet reproducerbart oavsett fältordning eller blanksteg - vem som helst kan själv beräkna det.
  • W3C Data Integrity Proofs (eddsa-jcs-2022): Ed25519-signatur över den kanoniserade formen (JCS).
  • /.well-known/dpp-keys/ (RFC 8615): Utfärdarens offentliga nycklar finns under en standardiserad sökväg - inget behov av att kontakta Transpareo, varje verifierare hittar dem själv.

Allt är dokumenterat i README på GitHub - inklusive frontend-arkitekturen (egen reaktiv kärna, inga externa ramverk) och bygginstruktionerna för egen hosting.

Visa koden på GitHub

Den fullständiga källkoden, alla utgåvor och diskussionen kring problemet finns i det offentliga repositoriet.