Et digitalt produktpas viser ikke det samme for alle. En køber kan se de offentlige data. Et værksted eller en genbrugsvirksomhed kan se mere. En markedstilsynsmyndighed kan se det hele. Det er afklaret, og de europæiske standarder fastslår det nu udtrykkeligt.
Det interessante spørgsmål er mere diskret: Hvis nogen får adgang til beskyttede felter ud over de offentlige data, kan vedkommende så bevise, at netop disse felter er ægte? Eller skal vedkommende stole på, at platformen har udvalgt dem korrekt og videregivet dem uændret?
For de fleste platforme er det ærlige svar: tillid. Vi har bygget vores platform sådan, at svaret er »bevis« - ikke kun for de offentlige felter, men for hvert eneste felt, der først tilføjes ved offentliggørelsen. Hvorfor denne forskel er vigtig, og hvorfor vi har valgt den mere omstændelige vej.
Alle overholder adgangsreglen på samme måde
EN 18239, den europæiske standard for adgangsrettigheder, sikkerhed og fortrolighed i DPP, kræver adgangskontrol for hvert enkelt dataelement: For hvert felt er der en regel for, hvem der må se det. Det er det rigtige krav, og det er ikke svært at opfylde. Hvilken status disse standarder overhovedet har, har vi redegjort for under harmoniserede standarder.
Den sædvanlige måde at opnå dette på er filtrering på serversiden. Serveren ved, hvem der forespørger, slår op, hvad denne person må se, og returnerer netop dette udsnit. Adgangskontrol: klaret. Mere kræver standarden ikke.
Der er dog en hage, som standarden ikke tager højde for: Udsnittet ankommer usigneret. Læseren modtager en visning, der er sammensat specielt til ham, og må stole på, at serveren har valgt indholdet ærligt og ikke har ændret noget undervejs. For et offentligt informationsblad er det i orden. For en værdi, som en forarbejder straks baserer prisen på et brugt batteri på, kræver det stor tillid.
Hvor en enkelt signatur når sine grænser
Den oplagte løsning er at signere dataene. For de to ender af skalaen fungerer en almindelig signatur godt: at signere den offentlige visning, at signere det fulde datasæt, og at begge verificeres mod en offentlig nøgle uden at en server står imellem. Hvordan det foregår i detaljer, kan læses i Signaturer og certifikater i DPP.
I midten går det galt. En signatur på hele dokumentet dækker præcis et sæt felter, nemlig dem, der var til stede ved signeringen. Hvis man yderligere giver en autoriseret læser adgang til et beskyttet felt, ligger dette felt uden for den signerede mængde og når frem til læseren uden at være dækket af signaturen. Signerer man i stedet det fulde datasæt fra starten, dækker signaturen ganske vist alt, men så ville man også være nødt til at vise alt til alle.
De mellemliggende niveauer falder dermed uden for rammen: værkstedet, forsikringsselskabet, genvindingsvirksomheden. Hvis man på forhånd ville underskrive hver eneste mulige kombination af »hvem ser hvad«, ville man have brug for et separat underskrevet dokument for hver kombination, og antallet af kombinationer eksploderer med hver yderligere adgangsgruppe. Det gør ingen. Man falder tilbage på det usignerede serverfilter, og det mellemste led bygger igen på tillid.
At underskrive hvert felt enkeltvis
Der findes en bedre konstruktion, og det er den, vi bygger platformen på. I stedet for at underskrive det færdige dokument som en samlet enhed fastlægger udstederen i en enkelt underskriftsrunde hvert felt enkeltvis (for dem, der kender standarderne: W3C-specifikationen ecdsa-sd-2023 for selektiv offentliggørelse).
Hver visning starter med den offentlige kerne
Hver visning starter derfor med de samme offentlige felter. Det, som en læser ser ud over dette, tilføjes felt for felt, og hvert af disse felter kan stadig spores tilbage til udstederens offentlige nøgle - offline, uden ny signering og uden tillid til den instans, der har sammensat visningen. Felterne uden krav mangler ganske enkelt. De er ikke sløret, men findes slet ikke, og der siver intet igennem om dem.
Hvorfor »ubrudt« er hele pointen
Forestil dig en notar, der ikke bekræfter brevet som helhed, men hvert afsnit for sig. Det offentlige brev får alle. Den, der har krav på mere, får de ekstra afsnit med, og hvert af dem bærer fortsat den samme notars segl. Ved den sædvanlige fremgangsmåde indtaster platformen disse afsnit for dig, og det, du modtager, bærer kun platformens ord.
Hvorfor det er afgørende, at det er »uafbrudt«, fortjener en sætning mere. Et intakt segl siger ikke, at indholdet er sandt. Det siger: Det er præcis det, udstederen har skrevet, og siden da har ingen ændret et eneste tegn i det. Dermed falder alle, der blot har videregivet dokumentet - mellemhåndtereren, nettet, arkivet, os - uden for tillidsspørgsmålet. Hvem der har givet dig passet, spiller ingen rolle længere.
Og et segl er binært. Enten holder det, eller også holder det ikke; der findes ikke noget halvt brudt segl. Hvis det brydes, får du ikke at vide, hvilken sætning der er blevet ændret, men kun at du ikke længere kan stole på hele dokumentet. Derfor er det ikke en gradvis forskel, om de ekstra felter ankommer til dig med eller uden deres segl: Uden segl er de ikke blot lidt mindre pålidelige - de er slet ikke pålidelige.
Begge fremgangsmåder kan ses her
Det kan enhver selv kontrollere. Transpareo Time Machine er vores open source-visningsapp til produktpas: Den bladrer gennem et pas’ versionshistorik og beregner samtidig hver signatur i brugerens browser uden at forespørge en af vores servere. To eksempelpas er offentligt tilgængelige heri. Passet for en T-shirt bærer en signatur over hele dokumentet, mens passet for et batteri indeholder feltvis offentliggørelse.
Begge er åbne W3C-specifikationer: eddsa-jcs-2022 for signaturen over hele dokumentet, ecdsa-sd-2023 for feltvis offentliggørelse. Alle, der ønsker det, kan implementere dem. Arbejdsbyrden er grunden til, at mange ikke vil gøre det: Signaturen, der dækker hele dokumentet, er betydeligt billigere at oprette og drifte, og den, der kun leverer offentlige data, klarer sig fint med den.
At Time Machine mestrer begge metoder, er bevidst og forbliver sådan. Den tilhører ingen platform. En kontrollør, der kun accepterer den dyrere metode, ville være et redskab for os og for ingen andre.
Hvem får adgang til de beskyttede felter
Det er værd at spørge, hvem der overhovedet får adgang til noget ud over de offentlige data. Ikke den tilfældige køber - hun får det offentlige certifikat. Det er forarbejdningsvirksomheden, der vurderer, hvad et brugt batteripakke er værd; forsikringsselskabet, der fastsætter prisen på en risiko; genvindingsvirksomheden, der sorterer kemikalier; og myndigheden, der opbygger en sag. Det er disse læsere, hvis beslutninger afhænger af penge eller sikkerhed.
Og det er netop de felter, der i den gængse fremgangsmåde forbliver uafdækkede. Den, der har størst grund til at ønske et kryptografisk bevis, får det netop ikke for de felter, der ligger til grund for vedkommendes beslutning.
Vi mener, at et kontrolmærke bør betyde det samme for alle. »Kontrolleret af Transpareo« betyder det samme på en reparationsvirksomheds udvidede oversigt som på en købers offentlige certifikat: Hvert vist område stammer fra udstederen og er ikke blevet ændret siden. Et mærke, der kun gælder for de offentlige felter, er et halvt mærke.
Mere end standarden kræver
Vi siger det helt åbent: Intet af dette er lovpligtigt. EN 18239 kræver, at adgangen kontrolleres, og et filter på serversiden styrer adgangen fejlfrit. At gøre de offentliggjorte felter kryptografisk verificerbare er også noget, vi gør oven i købet - ikke et afkrydsningsfelt, som reguleringen kræver af os.
Netop derfor er det værd at skrive ned. Det ville være let at opfylde standardens bogstav, levere serverfilteret og erklære trinnet for afsluttet. Vi foretrækker, at løftet gælder overalt, hvor seglet vises. For hele meningen med et signeret pas er, at ingen behøver at stole på platformen. At udtage det mellemste trin som en undtagelse genopretter netop den tillid, som signaturen skulle fjerne.
Det samme princip får et felt til at blive glemt
At forholde sig til hvert felt enkeltvis medfører en anden egenskab, og denne kræves faktisk af europæisk lovgivning. Den generelle forordning om databeskyttelse giver personer ret til at få personoplysninger slettet. Et datasæt, der er signeret som en samlet enhed, kan ikke opfylde dette krav uden at ødelægge sin egen signatur.
Da hvert felt her står for sig selv, kan et enkelt felt fjernes, mens alt andet fortsat kan verificeres. Hvis personoplysninger ved en fejl havner i et pas, kan de fjernes fuldstændigt, og passet forbliver gyldigt: ingen genudstedelse, ingen brudt historik. De lovpligtige felter, som loven kræver opbevares, forbliver intakte; det, der kan slettes, kan slettes på anmodning, selv år senere.
Alligevel et helt almindeligt pas
Intet af dette gør passet til et særligt objekt, som kun vores værktøjer kan åbne. Det forbliver en Verifiable Credential i JSON-LD, det format, som verden af webstandarder bevæger sig hen imod, og det samme format, som FN’s Transparency Protocol og resten af W3C-miljøet anvender.
Det pas, som en køber scanner i browseren, er dermed det samme objekt, som en datarums-partner kan indlæse, og enhver standardkompatibel verificator kan kontrollere det, ikke kun vores. Den ekstra sikkerhed koster ikke læseren noget og binder ingen til os.
Hvorfor det er teknisk udfordrende
Først og fremmest, for at undgå misforståelser: Vi har ikke opfundet metoden. ecdsa-sd-2023 er en offentlig W3C-specifikation; kryptografien bag stammer ikke fra os, og den, der ønsker at implementere den, kan læse om den. Det er ikke svært at få ideen. Det svære er at bygge den sådan, at et pas stadig kan verificeres om ti år. Det er der, arbejdet ligger, og der er noget nyttigt at sige om det.
Forskellen lyder lille, men ændrer grundlaget: En almindelig signatur beregner ud fra dokumentets bytes. Selektiv offentliggørelse beregnes ud fra dens udsagn. Passet bringes inden signeringen i en standardiseret form, hvor hver oplysning foreligger som en selvstændig sætning. Først derved kan en sætning udelades uden at skade de øvrige.
Dermed arver man et problem, som en byte-signatur ikke har: Den samme standardiserede form skal om ti år fremkomme nøjagtigt igen. Ikke omtrentligt, men tegn for tegn, ellers passer beviset ikke længere. Tre ting står i vejen for dette, og alle tre er ubetydelige.
Tal mister deres type. Skriver man et tal som ren JSON, går det tabt undervejs, hvilket tal det var. En værdi som 2,0 kommer tilbage som 2 efter en runde gennem JSON. For et menneske er det det samme, men for den standardiserede form er det en anden sætning, og kontrollen mislykkes.
Betegnelser er endnu ikke betydning. For at den standardiserede form kan opstå, skal hvert feltnavn kunne henføres til en entydig betydning. Mangler der en, forsvinder feltet uden videre ved konverteringen. Det står så i passet, men beviset dækker det ikke, og ingen bemærker det.
Betydninger findes normalt på nettet. Denne tilknytning findes i et ordforråd, som de fleste værktøjer henter fra nettet under kontrollen. Den, der gør det, gør kontrollen af sit pas afhængig af, at en fremmed adresse stadig svarer om ti år, og at den er uændret.
Sådan løste vi det
Vi har løst de tre punkter ved roden i stedet for at afhjælpe dem senere.
Typer. Hver værdi skrives med sin type, og offentliggørelsen afbrydes, så snart der i den standardiserede form dukker blot ét tal uden type op. Fejlen opdages dermed der, hvor den koster en linje, i stedet for år senere som en uforklarlig valideringsfejl.
Vokabularer. Hvert vokabular, som et pass henviser til, findes lokalt hos os og hentes aldrig via nettet. En ukendt adresse medfører en hård afbrydelse under signeringen, ikke et stille tilbageslag til et tomt resultat.
Identifikatorer. Hvert knudepunkt i dokumentet bærer en stabil identifikator, så den standardiserede form forbliver reproducerbar, i stedet for at tildele nye hjælpenavne ved hver gennemløb.
Den mest følsomme del ligger i »Bring Your Own Key«. Til hver udstedelse kræves der en ekstra, kortvarig nøgle, som de felter, der kan offentliggøres, underskrives med hver for sig. Denne nøgle genereres og kasseres af udstederen selv. Hvis den lå hos os, kunne vi efterfølgende opfinde enkelte felter, og uafhængigheden af udstederens signatur ville kun være en påstand. Vi kontrollerer det returnerede bevis mod den deponerede offentlige nøgle, før vi stoler på det.
Hvert pas indeholder to sådanne beviser, et fra udstederen og et fra Transpareo, og begge udledes uafhængigt af hinanden, når de vises for en læser. To signaturer, to indbyrdes uafhængige autoriteter, selv for et enkelt offentliggjort felt.
For os ligger denne indsats på det rette sted. Vi har ikke tilføjet verifikationsmuligheden efterfølgende; platformen er fra den første version blevet udviklet med dette for øje. Hvert pas signeres ved offentliggørelsen og kædes sammen med den forrige version. Det uforanderlige tiårige arkiv er oprettet og træder i kraft, så snart pasene er registreret i EU-DPP-registeret. At underskrive hvert enkelt felt i stedet for hele blokken er en udvidelse af denne kerne, ikke et påsæt på noget, der aldrig var tiltænkt det.
Hvor står vinu?
Kogt ned til det væsentlige er valget enkelt. De kan offentliggøre beskyttede felter og bede læseren om at stole på Deres filter - det opfylder standarden. Eller De kan offentliggøre dem og med det samme levere beviset - det opfylder et højere krav, som disse felter efter vores mening fortjener.
Vi har valgt beviset, for hver eneste læser, fordi et segl bør betyde én ting, uanset hvem der ser på det. Hvis du vil se, hvordan det fungerer: De to demoer, der er linket til ovenfor, verificeres direkte i browseren, offline, mod intet andet end en offentlig nøgle.
