Att offentliggöra utan att förlora signaturen

Att offentliggöra utan att förlora signaturen

Alla som läser ett produktpass får tillgång till samma offentliga uppgifter, medan vissa dessutom får tillgång till skyddade fält. Den mer subtila frågan är om dessa ytterligare fält kan styrkas. Vi signerar varje fält separat, så att även ett offentliggjort fält kan verifieras mot en offentlig nyckel - offline, utan att behöva kontakta oss.

Ett digitalt produktpass visar inte samma information för alla. En köpare ser de offentliga uppgifterna. En reparatör eller återvinningsföretag ser mer. En marknadsövervakningsmyndighet ser allt. Detta är klarlagt, och de europeiska standarderna föreskriver det numera uttryckligen.

Den intressanta frågan är mer subtil: Om någon får tillgång till skyddade fält utöver de offentliga uppgifterna, kan hen då bevisa att just dessa fält är äkta? Eller måste hen lita på att plattformen har valt ut dem korrekt och vidarebefordrat dem oförändrade?

För de flesta plattformar är det ärliga svaret: förtroende. Vi har byggt vår plattform så att svaret är bevis - inte bara för de offentliga fälten, utan för varje fält som läggs till först vid offentliggörandet. Varför denna skillnad är viktig, och varför vi har valt den mer arbetskrävande vägen.

Alla uppfyller åtkomstregeln på samma sätt

EN 18239, den europeiska standarden för åtkomsträttigheter, säkerhet och sekretess i DPP, kräver åtkomstkontroll per dataelement: För varje fält finns det en regel om vem som får se det. Det är rätt krav, och det är inte svårt att uppfylla. Vilken status dessa standarder egentligen har har vi redogjort för under harmoniserade standarder.

Det vanligaste sättet att uppnå detta är filtrering på serversidan. Servern vet vem som gör förfrågan, kontrollerar vad denna person får se och levererar exakt detta utdrag. Åtkomstkontroll: klart. Standarden kräver inte mer än så.

Det finns dock en hake som standarden inte tar hänsyn till: Utsnittet anländer osignerat. Läsaren får en vy som sammanställts åt just honom eller henne och måste lita på att servern har gjort ett ärligt urval och inte ändrat något under vägen. För ett offentligt informationsblad är det okej. För ett värde som en återvinnare baserar priset på ett begagnat batteri på, krävs det mycket tillit.

Där en enskild signatur når sina gränser

Den uppenbara lösningen är att signera data. För de båda ändarna av skalan fungerar en vanlig signatur bra: signera den offentliga vyn, signera den fullständiga datamängden, och båda verifieras mot en offentlig nyckel utan att en server står emellan. Hur detta fungerar i detalj beskrivs i Signaturer och certifikat i DPP.

I mitten bryter det samman. En signatur över hela dokumentet täcker exakt en uppsättning fält, nämligen de som fanns vid signeringen. Om man dessutom gör ett skyddat fält tillgängligt för en behörig läsare ligger detta fält utanför den signerade mängden och når mottagaren utan att vara täckt av signaturen. Om man istället från början signerar hela datamängden täcker signaturen visserligen allt, men då skulle man också behöva visa allt för alla.

Nivåerna däremellan faller därmed mellan stolarna: reparationsverkstaden, försäkringsbolaget, återvinningsföretaget. Om man ville signera varje möjlig kombination av ”vem ser vad” i förväg skulle man behöva ett eget signerat dokument per kombination, och antalet kombinationer exploderar med varje ytterligare åtkomstgrupp. Det gör ingen. Man faller tillbaka på det osignerade serverfiltret, och det mellanliggande steget bygger återigen på förtroende.

Signera varje fält separat

Det finns en bättre konstruktion, och det är den vi bygger plattformen på. I stället för att signera det färdiga dokumentet som en helhet fastställer utfärdaren varje fält enskilt i en enda signeringsomgång (för dem som är insatta i standarder: W3C-specifikationen ecdsa-sd-2023 för selektiv offentliggörande).

Varje vy börjar med den offentliga kärnan

Varje vy börjar alltså med samma offentliga fält. Det som läsaren får se utöver detta läggs till fält för fält, och vart och ett av dessa fält kan fortfarande spåras tillbaka till utfärdarens offentliga nyckel - offline, utan ny signering och utan förtroende för den instans som har sammanställt vyn. Fälten utan anspråk saknas helt enkelt. De är inte svärtade, utan finns inte alls, och ingenting läcker ut om dem.

Varför ”obruten” är hela poängen

Föreställ dig en notarie som inte bestyrker brevet i sin helhet, utan varje stycke för sig. Det offentliga brevet får alla. Den som har rätt till mer får de ytterligare styckena, och vart och ett av dem bär fortfarande samma notaries sigill. Vid det vanliga förfarandet skriver plattformen av dessa stycken åt dig, och det som når dig bär bara plattformens ord.

Varför det är viktigt att det är ”intakt” förtjänar en mening till. Ett intakt sigill säger inte att innehållet är sant. Det säger: Det här är exakt vad utfärdaren har skrivit, och sedan dess har ingen ändrat ett tecken i det. Därmed faller alla som bara har vidarebefordrat dokumentet bort från förtroendefrågan - mellanlagringen, nätet, arkivet, vi. Vem som gav dig passet spelar ingen roll längre.

Och ett sigill är binärt. Antingen håller det eller så håller det inte; det finns inget halvbrutet sigill. Om det bryts får du inte reda på vilken rad som har ändrats, utan bara att du inte längre kan lita på hela dokumentet. Därför är det ingen gradvis skillnad om de extra fälten med sitt sigill når dig eller inte: Utan sigill är de inte något svagare belagda, de är inte belagda alls.

Båda metoderna att titta på

Det kan vem som helst kontrollera själv. Transpareo Time Machine är vår öppen källkodsbaserade visningsapp för produktpass: Den bläddrar igenom ett passets versionshistorik och beräknar samtidigt varje signatur i betraktarens webbläsare, utan att fråga någon av våra servrar. Två exempelpass är tillgängliga där för allmänheten. Passet för en T-shirt har en signatur som täcker hela dokumentet, medan passet för ett batteri har fältvis redovisning.

Båda är öppna W3C-specifikationer: eddsa-jcs-2022 för signaturen som täcker hela dokumentet, ecdsa-sd-2023 för fältspecifik redovisning. Vem som helst som vill kan implementera dem. Arbetsinsatsen är anledningen till att många inte kommer att göra det: Signaturen som täcker hela dokumentet är betydligt billigare att bygga upp och driva, och den som endast levererar offentliga data klarar sig med den.

Att Time Machine behärskar båda metoderna är avsiktligt och kommer att förbli så. Den tillhör ingen plattform. En granskare som endast accepterar den dyrare metoden skulle vara ett verktyg för oss och för ingen annan.

Vem får tillgång till de skyddade fälten

Det är värt att fråga sig vem som överhuvudtaget får tillgång till något utöver de offentliga uppgifterna. Inte den tillfälliga köparen - hon får det offentliga passet. Det är återvinningsföretaget som bedömer vad ett begagnat batteripaket är värt, försäkringsbolaget som prissätter en risk, återvinningsföretaget som sorterar kemikalier, myndigheten som bygger upp ett ärende. Det är dessa läsare vars beslut påverkas av pengar eller säkerhet.

Och det är just dessa fält som i det vanliga tillvägagångssättet lämnas utan täckning. Den som har störst anledning att vilja ha ett kryptografiskt intyg får det just inte för de fält som ligger till grund för beslutet.

Vi anser att ett kontrollmärke bör betyda samma sak för alla. ”Kontrollerat av Transpareo” betyder samma sak på den utökade vyn hos en reparatör som på ett köpares offentliga certifikat: Varje visat område kommer från utfärdaren och har inte rörts sedan dess. Ett certifikat som endast gäller de offentliga fälten är ett halvcertifikat.

Mer än vad standarden kräver

Vi säger det rakt ut: Inget av detta är föreskrivet. EN 18239 kräver att åtkomsten kontrolleras, och ett filter på serversidan styr åtkomsten på ett felfritt sätt. Att även göra de offentliga fälten kryptografiskt verifierbara är något vi gör utöver det vanliga, inte en punkt som regelverket kräver av oss.

Just därför är det värt att skriva ner. Det vore enkelt att uppfylla normens bokstav, leverera serverfiltret och förklara steget avklarat. Vi föredrar att löftet gäller överallt där sigillet dyker upp. För hela poängen med ett signerat pass är att ingen behöver lita på plattformen. Att undanta den mellersta nivån återinför just det förtroende som signaturen var avsedd att undanröja.

Samma princip gör att ett fält glöms bort

Att fastställa varje fält för sig medför en andra egenskap, och denna krävs faktiskt enligt europeisk lagstiftning. Den allmänna dataskyddsförordningen ger människor rätten att få personuppgifter raderade. En datamängd som signerats som en helhet kan inte uppfylla detta krav utan att förstöra sin egen signatur.

Eftersom varje fält här står för sig själv kan ett enskilt fält tas bort, medan resten fortfarande kan verifieras. Om personuppgifter av misstag hamnar i ett pass kan de tas bort helt, och passet förblir giltigt: ingen nyutfärdning, ingen avbruten historik. De fält som enligt lagstiftningen måste bevaras kvarstår; det som kan raderas kan raderas på begäran, även flera år senare.

Trots detta är det ett helt vanligt pass

Inget av detta gör passet till ett speciellt objekt som endast våra verktyg kan öppna. Det förblir en verifierbar referens i JSON-LD, det format som webbstandardvärlden strävar mot, och samma format som används av FN:s transparensprotokoll och övriga W3C-miljön.

Passet som en köpare skannar i webbläsaren är alltså samma objekt som en partner i datarummet kan läsa in, och varje granskar som följer standarden kan kontrollera det, inte bara våra. Den extra säkerheten kostar inte läsaren något och binder ingen till oss.

Varför det är tekniskt svårt

Först och främst, för att undvika missförstånd: vi har inte uppfunnit metoden. ecdsa-sd-2023 är en offentlig W3C-specifikation, kryptografin bakom den kommer inte från oss, och den som vill implementera den kan läsa om den. Det är inte svårt att komma på idén. Det svåra är att bygga den så att ett lösenord fortfarande fungerar om tio år. Det är där arbetet ligger, och om det finns något användbart att säga.

Skillnaden låter liten, men förskjuter grunden: En vanlig signatur beräknar utifrån dokumentets byte. Selektiv offentliggörande beräknas utifrån dess påståenden. Passet omformas till en standardiserad form före signeringen, där varje uppgift förekommer som en egen, fristående mening. Först då går det att utelämna en mening utan att skada de övriga.

Därmed får man ett problem som en bytesignatur inte har: samma standardiserade form måste återges exakt om tio år. Inte ungefärligt, utan tecken för tecken, annars stämmer inte verifieringen längre. Tre saker står i vägen för detta, och alla tre är obetydliga.

Siffror förlorar sin typ. Om man skriver en siffra som ren JSON går det förlorat under vägen vilken typ av siffra det var. Ett värde som 2,0 kommer tillbaka som 2 efter en omgång genom JSON. För en människa är det samma sak, men för den standardiserade formen är det en annan sats, och kontrollen misslyckas.

Beteckningar är ännu inte samma sak som betydelse. För att den standardiserade formen ska uppstå måste varje fältnamn kunna hänföras till en entydig betydelse. Saknas en sådan försvinner fältet tyst vid konverteringen. Det finns då kvar i passet, men verifieringen täcker inte det, och ingen märker det.

Betydelser finns vanligtvis på nätet. Denna koppling finns i ett vokabulär som de flesta verktyg hämtar från nätet vid kontrollen. Den som gör detta gör kontrollbarheten av sitt pass beroende av att en främmande adress fortfarande svarar om tio år, och dessutom oförändrad.

Hur vi löste det

Vi ## haråtgärdat de tre punkterna vid källan, istället för att fånga upp dem senare.

Typer. Varje värde skrivs med sin typ, och publiceringen avbryts så snart även bara ett enda typfritt tal dyker upp i den standardiserade formen. Felet upptäcks därmed där det kostar en rad, istället för år senare som en oförklarlig verifieringsfel.

Vokabulärer. Varje vokabulär som ett pass hänvisar till finns lokalt hos oss och hämtas aldrig via nätet. En okänd adress innebär ett tvärt avbrott vid signeringen, inte ett tyst återfall till ett tomt resultat.

Identifierare. Varje nod i dokumentet har en stabil identifierare, så att den standardiserade formen förblir reproducerbar, istället för att nya hjälpnamn tilldelas vid varje genomgång.

Den mest känsliga delen ligger i ”Bring Your Own Key”. För varje utfärdande behövs en extra, kortlivad nyckel, med vilken de fält som kan offentliggöras signeras individuellt. Denna nyckel genereras och kasseras av utfärdaren själv. Om den fanns hos oss skulle vi kunna hitta på enskilda fält i efterhand, och utställarens signaturs oberoende skulle då bara vara en påstående. Vi kontrollerar det återkommande beviset mot den lagrade offentliga nyckeln innan vi litar på det.

Varje pass innehåller två sådana bevis, ett från utfärdaren och ett från Transpareo, och båda härleds oberoende av varandra för en läsares granskning. Två signaturer, två oberoende auktoriteter, även för ett enskilt offentliggjort fält.

För oss ligger denna insats på rätt plats. Vi har inte lagt till verifierbarheten i efterhand; plattformen har byggts upp kring detta ändamål redan från den första versionen. Varje pass signeras vid publiceringen och länkas till den föregående versionen. Det oföränderliga tioåriga arkivet är upprättat och träder i kraft så snart passen registreras i EU-DPP-registret. Att signera varje fält istället för hela blocket är en utvidgning av denna kärna, inte ett tillägg till något som aldrig var avsett för detta.

Var vi står

Om man förenklar det är valet enkelt. Ni kan offentliggöra skyddade fält och be läsaren att lita på ert filter - det uppfyller standarden. Eller så kan ni offentliggöra dem och samtidigt tillhandahålla beviset - det uppfyller ett högre krav som dessa fält enligt vår mening förtjänar.

Vi har valt beviset, för varje läsares skull, eftersom en certifieringsmärkning bör betyda samma sak oavsett vem som tittar på den. För den som vill se hur det fungerar: De två demos som länkats till ovan verifieras direkt i webbläsaren, offline, mot ingenting annat än en offentlig nyckel.

Uppdateringar om åtkomstnivåer och intyg

Selektiv offentliggörande, signaturer och utvecklingen av DPP-standarderna - en månatlig sammanfattning direkt i din inkorg.