Openbaar maken zonder de signatuur te verliezen

Openbaar maken zonder de signatuur te verliezen

Wie toegang krijgt tot beveiligde velden, moet meestal op het platform vertrouwen. Wij ondertekenen elk veld afzonderlijk, zodat ook deze afzonderlijk kunnen worden gecontroleerd.

Een digitaal productpaspoort toont niet voor iedereen hetzelfde. Een kopster ziet de openbare gegevens. Een reparatiebedrijf of een revisiebedrijf ziet meer. Een markttoezichtautoriteit ziet alles. Dat is duidelijk, en de Europese normen schrijven dit inmiddels uitdrukkelijk voor.

De interessante vraag ligt meer op de achtergrond: als iemand naast de openbare gegevens ook toegang krijgt tot beveiligde velden, kan hij dan aantonen dat juist deze velden authentiek zijn? Of moet hij erop vertrouwen dat het platform ze correct heeft geselecteerd en ongewijzigd heeft doorgegeven?

Bij de meeste platforms luidt het eerlijke antwoord: vertrouwen. Wij hebben het onze zo gebouwd dat het antwoord ‘bewijs’ is - niet alleen voor de openbare velden, maar voor elk veld dat pas bij de openbaarmaking wordt toegevoegd. Waarom dit verschil ertoe doet, en waarom we hiervoor de meer omslachtige weg hebben gekozen.

De toegangsregel wordt door iedereen op dezelfde manier nageleefd

EN 18239, de Europese norm voor toegangsrechten, beveiliging en vertrouwelijkheid in het DPP, vereist toegangsbeheer per gegevenselement: voor elk veld geldt een regel die bepaalt wie het mag inzien. Dat is de juiste eis, en die is niet moeilijk na te leven. Welke status deze normen überhaupt hebben, hebben we onder geharmoniseerde normen uiteengezet.

De gebruikelijke manier om dit te bereiken is filtering aan de serverzijde. De server weet wie er een verzoek indient, controleert wat deze persoon mag zien en levert precies dat fragment terug. Toegangsbeheer: geregeld. Meer vraagt de norm niet.

Er zit echter een addertje onder het gras waar de norm geen rekening mee houdt: Het fragment komt onondertekend binnen. De lezer krijgt een speciaal voor hem samengesteld overzicht te zien en moet erop vertrouwen dat de server eerlijk heeft geselecteerd en onderweg niets heeft gewijzigd. Voor een openbaar informatieblad is dat prima. Voor een waarde waarop een verwerker direct de prijs van een gebruikte batterij baseert, is dat wel een groot vertrouwen.

Waar een enkele handtekening tegen zijn grenzen aanloopt

De voor de hand liggende oplossing is om de gegevens te ondertekenen. Voor de twee uitersten van het spectrum werkt een gewone handtekening goed: de openbare weergave ondertekenen, de volledige dataset ondertekenen, en beide controleren aan de hand van een openbare sleutel, zonder dat er een server tussen zit. Hoe dit in detail in zijn werk gaat, staat beschreven in Handtekeningen en certificaten in het DPP.

In het midden gaat het mis. Een handtekening over het gehele document dekt precies één set velden, namelijk die welke bij het ondertekenen aanwezig waren. Als je een bevoegde lezer een beschermd veld extra openstelt, valt dit veld buiten de ondertekende set en komt het ongedekt bij hem terecht. Als je in plaats daarvan vanaf het begin de volledige gegevensset ondertekent, dekt de handtekening weliswaar alles, maar dan zou je ook aan iedereen alles moeten laten zien.

De tussenliggende niveaus vallen daarmee buiten de boot: de reparateur, de verzekeraar, de recycler. Als men elke mogelijke combinatie van ‘wie-ziet-wat’ van tevoren zou willen ondertekenen, zou men per combinatie een apart ondertekend document nodig hebben, en het aantal combinaties explodeert met elke extra toegangsgroep. Dat doet niemand. Men valt dan terug op het ongesigneerde serverfilter, en de tussenliggende schakel berust weer op vertrouwen.

Elk veld afzonderlijk ondertekenen

Er is een betere opzet, en daarop bouwen we het platform. In plaats van het voltooide document als één blok te ondertekenen, legt de uitgever zich in één enkele ondertekeningsronde afzonderlijk vast op elk veld (voor degenen die bekend zijn met de normen: het W3C-certificaat ecdsa-sd-2023 voor selectieve openbaarmaking).

Elke weergave begint bij de openbare kern

Elke weergave begint dus met dezelfde openbare velden. Wat een lezer daarbuiten te zien krijgt, wordt veld voor veld toegevoegd, en elk van deze velden leidt nog steeds terug naar de openbare sleutel van de uitgever - offline, zonder opnieuw te ondertekenen en zonder vertrouwen in de instantie die de weergave heeft samengesteld. De velden waarvoor geen aanspraak bestaat, ontbreken simpelweg. Niet zwart gemaakt, maar helemaal niet aanwezig, en er sijpelt niets over door.

Een voorbeeld: het reparatiebedrijf

Hoe dit concreet in de praktijk werkt, blijkt uit een voorbeeld. Een reparatiebedrijf heeft voor een accu een gerechtvaardigd belang aangemeld, een van de toegangsniveaus waarin de accuverordening uitdrukkelijk voorziet. Het werkplaatssysteem meldt zich met zijn API-sleutel aan bij onze interface en haalt het pasje op.

Het antwoord is hetzelfde openbare pasje dat ook de koper te zien krijgt, maar dan met precies één veld erbij: de demontagehandleiding, die alleen aan bevoegde lezers wordt getoond. Geen tweede document, geen speciale versie, hetzelfde pasje met één veld extra.

Voordat het bedrijf op dit veld vertrouwt, controleert zijn software het meegeleverde bewijs aan de hand van de openbare sleutel van de uitgever. Als de controle slaagt, ook wat betreft het extra veld, weet hij: deze handleiding is tot op de letter afkomstig van de fabrikant, en noch wij, noch iemand anders in het proces heeft er iets aan gewijzigd. Als de controle niet slaagt, weet hij dat net zo zeker en legt hij het document in zijn geheel terzijde.

Onze rol hierin is bewust klein. Dat hij precies de velden ontvangt waarop hij recht heeft, blijft de taak van onze toegangsbeheersing; dat doet elk serverfilter op precies dezelfde manier. Nieuw is de stap daarna: of wat binnenkomt echt is, controleert hij zelf, zonder het ons te vragen.

Waarom ‘ongebroken’ de kern van de zaak is

Stel je een notaris voor die niet de brief in zijn geheel waarmerkt, maar elke alinea afzonderlijk. Iedereen krijgt de openbare brief. Wie recht heeft op meer, krijgt de extra alinea’s erbij, en elk daarvan draagt nog steeds het zegel van dezelfde notaris.

Waarom ‘ononderbroken’ daarbij zo belangrijk is, verdient nog een zin extra. Een intact zegel zegt niet dat de inhoud waar is. Het zegt: dit is precies wat de opsteller heeft geschreven, en sindsdien heeft niemand er ook maar iets aan veranderd. Daarmee valt iedereen buiten de vertrouwenskwestie die het document alleen maar heeft doorgegeven - de tussenopslag, het netwerk, het archief, wij. Wie u het paspoort heeft gegeven, doet er niet meer toe.

En een zegel is binair. Het is intact of niet, een half gebroken zegel bestaat niet. Als het breekt, weet u niet welke zin is gewijzigd, maar alleen dat u het hele document niet meer kunt vertrouwen. Daarom is het geen gradueel verschil of de extra velden met hun zegel bij u aankomen of zonder: Zonder zegel zijn ze niet iets minder gedocumenteerd, ze zijn helemaal niet gedocumenteerd.

Beide methoden om te bekijken

Iedereen kan dit zelf controleren. De Transpareo Time Machine is onze open-source weergave-app voor productpaspoorten: Deze bladert door de versiegeschiedenis van een pas en berekent daarbij elke handtekening in de browser van de gebruiker, zonder een server van ons te raadplegen. Er draaien twee voorbeeldpassen openbaar in. De pas van een T-shirt draagt een handtekening over het gehele document, de pas van een batterij de veldgewijze openbaarmaking.

Beide zijn open W3C-specificaties: eddsa-jcs-2022 voor de handtekening over het gehele document, ecdsa-sd-2023 voor de veldgewijze openbaarmaking. Iedereen die dat wil, kan dit implementeren. De inspanning die het kost, is de reden waarom velen het niet zullen doen: de handtekening over het gehele document is aanzienlijk goedkoper om te bouwen en te onderhouden, en wie alleen openbare gegevens verstrekt, kan daarmee volstaan.

Dat de Time Machine beide methoden beheerst, is opzettelijk en blijft zo. Ze behoort niet tot één bepaald platform. Een controleur die alleen de duurdere methode accepteert, zou een instrument zijn voor ons en voor niemand anders.

Aan wie de beveiligde velden worden vrijgegeven

Het is de moeite waard om je af te vragen aan wie er überhaupt iets wordt vrijgegeven buiten de openbare gegevens om. Niet de toevallige koper, die krijgt het openbare paspoort. Het zijn de verwerker die beoordeelt wat een gebruikt accupakket waard is, de verzekeraar die een risico inprijst, de recycler die chemische stoffen sorteert, de overheidsinstantie die een zaak opbouwt. Dat zijn de lezers wier beslissingen afhangen van geld of veiligheid.

En het zijn precies die velden die in de gebruikelijke aanpak onbedekt blijven. Wie de meeste reden zou hebben om een cryptografisch bewijs te willen, krijgt dat juist niet voor de velden die bepalend zijn voor zijn beslissing.

Wij vinden dat een keurmerk voor iedereen hetzelfde moet betekenen. „Gecontroleerd door Transpareo“ betekent in het uitgebreide overzicht van een reparatiebedrijf hetzelfde als op het openbare certificaat van een koperster: elk weergegeven gebied is afkomstig van de uitgever en is sindsdien niet meer aangeraakt. Een keurmerk dat alleen voor de openbare velden geldt, is een half keurmerk.

Meer dan de norm vereist

We zeggen het openlijk: niets hiervan is voorgeschreven. EN 18239 vereist dat de toegang wordt gereguleerd, en een filter aan de serverzijde regelt de toegang feilloos. Ook het cryptografisch verifieerbaar maken van de openbaar gemaakte velden is iets wat wij er bovenop doen, geen vereiste die de regelgeving van ons verlangt.

Juist daarom is het de moeite waard om op te schrijven. Het hele nut van een ondertekend paspoort is dat niemand het platform hoeft te vertrouwen. Het weghalen van het middelste niveau als uitzondering haalt precies dat vertrouwen terug dat de handtekening juist moest wegnemen.

Hetzelfde principe zorgt ervoor dat een veld vergeten wordt

Het afzonderlijk vastleggen van elk veld brengt een tweede eigenschap met zich mee, en deze wordt daadwerkelijk door de Europese wetgeving vereist. De Algemene Verordening Gegevensbescherming geeft mensen het recht om persoonsgegevens te laten verwijderen. Een gegevensset die als één blok is ondertekend, kan hier niet aan voldoen zonder de eigen handtekening te vernietigen.

Omdat elk veld hier op zichzelf staat, kan een enkel veld worden verwijderd, terwijl de rest nog steeds geverifieerd kan worden. Als er per ongeluk persoonsgegevens in een paspoort terechtkomen, worden deze netjes weer verwijderd en blijft het paspoort geldig: geen heruitgifte, geen verscheurde geschiedenis. De wettelijk verplichte velden die volgens de wet bewaard moeten blijven, blijven staan; wat verwijderbaar is, kan op verzoek worden verwijderd, zelfs jaren later.

Toch blijft het een heel gewoon paspoort

Niets van dit alles maakt van het paspoort een speciaal object dat alleen met onze tools kan worden geopend. Het blijft een Verifiable Credential in JSON-LD, het formaat waar de wereld van de webstandaarden naartoe evolueert, en dezelfde vorm die het UN Transparency Protocol en de rest van de W3C-omgeving gebruiken.

Het paspoort dat een koper in de browser scant, is dus hetzelfde object dat een dataroompartner kan inlezen, en elke normconforme controleur kan het controleren, niet alleen die van ons. De extra beveiliging kost de lezer niets en bindt niemand aan ons.

Waarom dit technisch moeilijk is

Om te beginnen, zodat er geen verkeerde indruk ontstaat: wij hebben de methode niet uitgevonden. ecdsa-sd-2023 is een openbare W3C-specificatie; de cryptografie erachter is niet van ons, en wie deze wil implementeren, kan daarover meer lezen. Het is niet moeilijk om het idee te bedenken. Het is moeilijk om het zo te bouwen dat een pas over tien jaar nog steeds kan worden gecontroleerd. Daar zit het werk, en daar valt iets nuttigs over te zeggen.

Het verschil klinkt klein, maar verschuift de basis: een gewone handtekening berekent op basis van de bytes van een document. Selectieve openbaarmaking berekent op basis van de uitspraken. Het paspoort wordt vóór het ondertekenen in een gestandaardiseerde vorm gebracht, waarin elke gegevensvermelding als een afzonderlijke, op zichzelf staande zin voorkomt. Pas daardoor kan een zin worden weggelaten zonder de overige te beschadigen.

Daarmee krijg je een probleem dat een byte-handtekening niet heeft: dezelfde gestandaardiseerde vorm moet over tien jaar weer exact hetzelfde zijn. Niet ongeveer, maar teken voor teken, anders klopt het bewijs niet meer. Drie dingen staan dit in de weg, en alle drie zijn onopvallend.

Getallen verliezen hun type. Als je een getal als louter JSON schrijft, gaat onderweg verloren wat voor getal het was. Een waarde als 2,0 komt na een ronde door JSON terug als 2. Voor een mens is dat hetzelfde, voor de gestandaardiseerde vorm is het een andere zin, en de controle mislukt.

Benamingen zijn nog geen betekenis. Om de gestandaardiseerde vorm te verkrijgen, moet elke veldnaam naar een eenduidige betekenis verwijzen. Ontbreekt er een, dan verdwijnt het veld bij de conversie stilletjes. Het staat dan wel in het paspoort, maar het bewijs dekt het niet, en niemand merkt het.

Betekenissen zijn doorgaans op het internet te vinden. Deze koppeling staat in een vocabulaire dat de meeste tools tijdens het controleren via het internet ophalen. Wie dat doet, maakt de controleerbaarheid van zijn paspoort afhankelijk van het feit dat een extern adres over tien jaar nog steeds reageert, en wel ongewijzigd.

Hoe wij het hebben opgelost

We hebben de drie knelpunten bij de bron aangepakt, in plaats van ze later op te vangen.

Typen. Elke waarde wordt met zijn type geschreven, en de publicatie wordt afgebroken zodra er in de gestandaardiseerde vorm ook maar één getal zonder type opduikt. De fout komt zo terecht waar hij één regel kost, in plaats van jaren later als een onverklaarbare validatieschending.

Woordenlijsten. Elke woordenlijst waarnaar een pas verwijst, is bij ons lokaal beschikbaar en wordt nooit via het internet opgehaald. Een onbekend adres leidt tot een harde afbreking tijdens het ondertekenen, geen stille terugval naar een leeg resultaat.

Identificatiegegevens. Elk knooppunt in het document draagt een stabiele identificatie, zodat de gestandaardiseerde vorm reproduceerbaar blijft, in plaats van bij elke doorloop nieuwe hulpnamen toe te wijzen.

Het meest delicate onderdeel zit in ‘Bring Your Own Key’. Voor elke uitgifte is een extra, kortstondige sleutel nodig, waarmee de openbaar te maken velden afzonderlijk worden ondertekend. Deze sleutel wordt door de uitgever zelf gegenereerd en vervolgens vernietigd. Als deze sleutel bij ons zou liggen, zouden we achteraf afzonderlijke velden kunnen verzinnen, en zou de onafhankelijkheid van de handtekening van de uitgever slechts een bewering zijn. We controleren het teruggezonden bewijs aan de hand van de opgeslagen openbare sleutel, voordat we het vertrouwen.

Elk paspoort bevat twee van dergelijke bewijzen: één van de uitgever en één van Transpareo, en elk daarvan wordt onafhankelijk afgeleid voor de weergave aan een lezer. Twee handtekeningen, twee van elkaar onafhankelijke autoriteiten, zelfs voor één afzonderlijk openbaar gemaakt veld.

Voor ons is deze inspanning op de juiste plaats. We hebben de controleerbaarheid niet achteraf toegevoegd; het platform is vanaf de eerste versie hieromheen opgebouwd. Elk paspoort wordt bij publicatie ondertekend en aan de vorige versie gekoppeld. Het onveranderlijke tienjarige archief is aangelegd en treedt in werking zodra de paspoorten bij het EU-DPP-register zijn geregistreerd. Het ondertekenen van elk veld in plaats van het hele blok is een uitbreiding van deze kern, geen toevoeging aan iets dat daar nooit voor bedoeld was.

Waar we nu staan

We hebben gekozen voor het bewijs, voor elke lezer, omdat een zegel één ding moet betekenen, ongeacht wie ernaar kijkt. Wie het in werking wil zien: de twee hierboven gelinkte demo’s controleren zichzelf direct in de browser, zonder een server te raadplegen.

Vragen over dit artikel

Schrijft een norm de veldgewijze signatuur voor?

Nee. EN 18239 schrijft voor dat de toegang per gegevenselement moet worden geregeld, en een filter aan de serverzijde voldoet hier volledig aan. Het is onze eigen keuze om de openbaar gemaakte velden bovendien controleerbaar te maken; dit is geen vereiste die door de regelgeving van wie dan ook wordt opgelegd. Wij achten de inspanning gerechtvaardigd, omdat de hele zin van een gesigneerd paspoort juist ligt in het feit dat niemand het platform hoeft te vertrouwen - het uitsluiten van de tussenliggende schakel herstelt precies dat vertrouwen. Welke status deze normen überhaupt hebben, staat vermeld in ons artikel over de geharmoniseerde normen.

Wat is er concreet anders dan bij een serverfilter?

Het gaat niet om wie wat ziet, maar om wat er aankomt. Beide methoden tonen een lezer precies de velden waarop hij recht heeft. Bij de serverfilter komt het fragment onondertekend aan; de lezer moet dus aannemen dat de server eerlijk is geselecteerd en dat er onderweg niets is gewijzigd. Bij veldgewijze verificatie komt hetzelfde fragment aan met een verificatie die offline terug te voeren is op de openbare sleutel van de uitgever, zonder dat iemand ons daarover hoeft te vragen. Voor een openbaar informatieblad is het verschil puur theoretisch, maar voor de waarde waarop een verwerker de prijs van een gebruikte batterij baseert, is dit de kern van de zaak.

Hebben lezers hiervoor speciale software nodig?

Nee. Het paspoort blijft een verifieerbare referentie in JSON-LD, en de verificatie vindt plaats via de openbare W3C-cryptosuite ecdsa-sd-2023; elke aan de normen conforme verificateur kan het dus controleren. Onze open-source weergave-app, de Transpareo Time Machine, berekent elke handtekening in de browser van de lezer zonder een server van ons te raadplegen, en ondersteunt bewust ook de eenvoudige handtekening over het gehele document. Een verificateur die uitsluitend onze methode accepteert, zou een hulpmiddel zijn voor ons en voor niemand anders.

Aan wie worden de beveiligde velden eigenlijk getoond?

Niet de toevallige koper; die ontvangt het openbare pasje. Het gaat om het reparatiebedrijf met een geregistreerd gerechtvaardigd belang, de verwerker die de waarde van een gebruikt batterijpakket beoordeelt, de recycler die chemische stoffen sorteert, de verzekeraar die een risico inkoopt, en de overheidsinstantie die een dossier opbouwt - lezers wier beslissingen afhangen van geld of veiligheid. De EU-batterijverordening voorziet precies in deze stappen. Het zijn tegelijkertijd de lezers die in de gebruikelijke aanpak juist voor de gebieden waarop hun beslissing berust, geen bewijs krijgen.

Wij publiceren uitsluitend openbare gegevens. Is dat nodig?

Waarschijnlijk niet, en dat zeggen wij ook zo. Een handtekening over het gehele document, de cryptosuite eddsa-jcs-2022, dekt een paspoort waarvan alle velden openbaar zijn, en deze is aanzienlijk goedkoper om te ontwikkelen en te onderhouden. Het openbaar maken per veld loont de moeite zodra er een tweede doelgroep bijkomt, zoals een reparatienetwerk, een recyclingbedrijf of een overheidsinstantie, waaraan u anders onondertekende uittreksels zou overhandigen. Beide methoden zijn open W3C-specificaties, en beide worden momenteel toegepast in de Time Machine, op het pasje van een T-shirt en op het pasje van een batterij.

Kunnen persoonsgegevens later worden verwijderd zonder dat het paspoort ongeldig wordt gemaakt?

Ja, en dit aspect wordt inderdaad door de Europese wetgeving vereist. De Algemene Verordening Gegevensbescherming geeft mensen het recht om persoonsgegevens te laten verwijderen, en een als blok ondertekende gegevensset kan hieraan niet voldoen zonder de eigen handtekening te vernietigen. Omdat hier elk veld afzonderlijk is vastgelegd, kan een enkel veld worden verwijderd, terwijl de rest geverifieerd blijft - geen heruitgifte, geen verscheurde versiegeschiedenis. De wettelijk verplichte velden die volgens de wet bewaard moeten blijven, blijven intact.

Wie is in het bezit van de ondertekeningssleutel?

Elk paspoort bevat twee bewijzen, en één daarvan kan van u zijn. Elke uitgifte vereist bovendien een tijdelijke sleutel die de openbaar te maken velden afzonderlijk ondertekent; deze wordt door de uitgever zelf gegenereerd en vervolgens vernietigd, want als deze bij ons zou liggen, zouden wij afzonderlijke velden achteraf kunnen verzinnen, en zou de onafhankelijkheid van de handtekening van de uitgever slechts een bewering zijn. Wij controleren het teruggezonden bewijs aan de hand van de opgeslagen openbare sleutel, voordat wij het vertrouwen. Elk paspoort bevat dus twee bewijzen van twee onafhankelijke autoriteiten, zowel voor een afzonderlijk openbaar gemaakt veld als voor het gehele gegevensbestand.

Is een paspoort over tien jaar nog geldig?

Precies daar schuilt de uitdaging. Bij selectieve openbaarmaking wordt gerekend op basis van de inhoud van een document in plaats van op basis van de bytes; dezelfde gestandaardiseerde vorm moet dus een decennium later teken voor teken opnieuw worden weergegeven. Drie zaken verstoren dit proces, en wij hebben ze alle drie bij de wortel aangepakt: elke waarde wordt met zijn type opgeslagen en de publicatie wordt afgebroken bij een getal zonder type; elke woordenschat is lokaal beschikbaar en wordt nooit via het netwerk opgehaald, en elk knooppunt draagt een stabiele identificatiecode, zodat de gestandaardiseerde vorm reproduceerbaar blijft. Het onveranderlijke tienjarige archief is aangelegd en treedt in werking zodra de paspoorten zijn geregistreerd bij het EU-register, dat sinds 20 juli 2026 operationeel is krachtens Uitvoeringsverordening (EU) 2026/1778. Meer hierover vindt u in onze analyse van de registerverordening.

Updates over toegangsniveaus en bewijsstukken

Selectieve openbaarmaking, handtekeningen en de ontwikkeling van de DPP-normen - maandelijks in beknopte vorm in uw inbox.