Un pașaport digital al produsului nu afișează aceleași informații pentru toată lumea. O cumpărătoare vede datele publice. Un atelier de reparații sau o firmă de recondiționare vede mai multe informații. O autoritate de supraveghere a pieței vede totul. Acest aspect este clarificat, iar standardele europene îl prevăd acum în mod expres.
Întrebarea interesantă este mai subtilă: dacă cuiva i se dezvăluie câmpuri protejate, dincolo de datele publice, poate acesta să dovedească că tocmai aceste câmpuri sunt autentice? Sau trebuie să aibă încredere că platforma le-a selectat corect și le-a transmis fără modificări?
În cazul majorității platformelor, răspunsul sincer este: încredere. Noi am construit-o pe a noastră astfel încât răspunsul să fie „dovadă” - nu doar pentru câmpurile publice, ci pentru fiecare câmp care se adaugă abia în momentul dezvăluirii. De ce contează această diferență și de ce am ales calea mai complexă în acest sens.
Toate respectă în mod egal regula de acces
EN 18239, standardul european privind drepturile de acces, securitatea și confidențialitatea în DPP, impune controlul accesului pentru fiecare element de date: pentru fiecare câmp există o regulă care stabilește cine are dreptul să îl vadă. Aceasta este cerința corectă și nu este greu de îndeplinit. Am detaliat statutul acestor standarde în articolul Standarde armonizate.
Metoda obișnuită de a realiza acest lucru este filtrarea la nivel de server. Serverul știe cine solicită informațiile, verifică ce are voie să vadă acea persoană și returnează exact acel fragment. Controlul accesului: rezolvat. Norma nu cere mai mult de atât.
Există însă o problemă de care norma nu ține cont: Fragmentul ajunge nesemnat. Cititorul primește o vizualizare personalizată pentru el și trebuie să creadă că serverul a selectat conținutul cu bună-credință și că nu a modificat nimic pe parcurs. Pentru o broșură publică, acest lucru este în regulă. Pentru o valoare pe care un procesator o folosește ca bază pentru stabilirea prețului unei baterii uzate, este nevoie de multă încredere.
Unde o singură semnătură își atinge limitele
Soluția evidentă este semnarea datelor. Pentru cele două extremități ale scalei, o semnătură obișnuită funcționează bine: semnarea vizualizării publice, semnarea setului complet de date și verificarea ambelor cu ajutorul unei chei publice, fără ca un server să intervină. Modul în care se desfășoară acest proces în detaliu este descris în Semnături și certificate în DPP.
Problema apare la mijloc. O semnătură aplicată întregului document acoperă exact un set de câmpuri, și anume cele care existau la momentul semnării. Dacă se dezvăluie suplimentar unui cititor autorizat un câmp protejat, acest câmp se află în afara setului semnat și ajunge la el fără a fi acoperit de semnătură. Dacă, în schimb, se semnează de la început setul complet de date, semnătura acoperă într-adevăr totul, dar atunci ar trebui să se arate totul tuturor.
Nivelurile intermediare cad astfel prin crăpături: atelierul de reparații, asiguratorul, firma de reciclare. Dacă s-ar dori semnarea în avans a fiecărei combinații posibile de „cine vede ce”, ar fi nevoie de un document semnat separat pentru fiecare combinație, iar numărul combinațiilor crește exponențial odată cu fiecare grup de acces suplimentar. Nimeni nu face asta. Se recurge la filtrul de server nesemnat, iar nivelul intermediar se bazează din nou pe încredere.
Semnarea fiecărui câmp în parte
Există o soluție mai bună, pe care ne bazăm pentru a construi platforma. În loc să semneze documentul final ca un bloc unic, emitentul specifică fiecare câmp în parte într-un singur proces de semnare (pentru cei familiarizați cu standardele: certificatul W3C ecdsa-sd-2023 pentru divulgare selectivă).
Fiecare vizualizare începe de la nucleul public
Fiecare vizualizare începe astfel cu aceleași câmpuri publice. Ceea ce vede cititorul în plus se adaugă câmp cu câmp, iar fiecare dintre aceste câmpuri duce în continuare la cheia publică a emitentului - offline, fără o nouă semnare și fără a se baza pe încrederea în entitatea care a alcătuit vizualizarea. Câmpurile fără drept de acces pur și simplu lipsesc. Nu sunt cenzurate, ci nu există deloc, și nu se scurge nicio informație despre ele.
Un exemplu concret: atelierul de reparații
Un exemplu concret ilustrează cum funcționează acest lucru. Un atelier de reparații și-a declarat un interes legitim pentru o baterie, unul dintre nivelurile de acces prevăzute în mod expres de Regulamentul privind bateriile. Sistemul său de atelier se autentifică la interfața noastră cu cheia sa API și preia pașaportul.
Răspunsul este același pașaport public pe care îl vede și cumpărătoarea, dar cu exact un câmp în plus: instrucțiunile de demontare, care sunt dezvăluite doar cititorilor autorizați. Niciun al doilea document, nicio versiune specială, același pașaport cu un câmp în plus.
Înainte ca atelierul să se bazeze pe acest câmp, software-ul său verifică certificatul furnizat în raport cu cheia publică a emitentului. Dacă verificarea are succes, inclusiv în ceea ce privește câmpul suplimentar, el știe: aceste instrucțiuni provin exact de la producător, și nici noi, nici altcineva din lanțul de distribuție nu le-a modificat în vreun fel. Dacă verificarea nu reușește, știe acest lucru la fel de sigur și pune deoparte întregul document.
Contribuția noastră în acest sens este în mod conștient redusă. Faptul că primește exact câmpurile care îi revin rămâne sarcina sistemului nostru de control al accesului; orice filtru de server face exact același lucru. Noutatea constă în pasul următor: el verifică singur, fără a ne întreba, dacă ceea ce primește este autentic.
De ce „neîncălcat” este esențial
Să ne imaginăm un notar care nu autentifică scrisoarea în ansamblu, ci fiecare paragraf în parte. Scrisoarea publică o primește toată lumea. Cine are dreptul la mai mult, primește paragrafele suplimentare, iar fiecare dintre acestea poartă în continuare sigiliul aceluiași notar.
De ce este important ca sigiliul să fie „intact” merită o explicație suplimentară. Un sigiliu intact nu înseamnă că conținutul este adevărat. Acesta spune: exact asta a scris emitentul, iar de atunci nimeni nu a modificat niciun semn din el. Astfel, oricine a transmis doar documentul - intermediarul, rețeaua, arhiva, noi - iese din sfera încrederii. Nu mai contează cine v-a dat pașaportul.
Iar un sigiliu este binar. Fie rezistă, fie nu; nu există un sigiliu pe jumătate rupt. Dacă se rupe, nu veți afla care frază a fost modificată, ci doar că nu mai puteți avea încredere în întreaga pagină. De aceea, nu este o diferență graduală dacă câmpurile suplimentare ajung la dumneavoastră cu sigiliul lor sau fără: Fără sigiliu, ele nu sunt doar puțin mai puțin atestate, ci nu sunt deloc atestate.
Ambele proceduri de vizualizare
Oricine poate verifica acest lucru singur. Transpareo Time Machine este aplicația noastră open-source de vizualizare a pașapoartelor de produs: Aceasta parcurge istoricul versiunilor unui pașaport și recalculează fiecare semnătură în browserul utilizatorului, fără a interoga un server al nostru. Două pașapoarte de exemplu sunt disponibile public în această aplicație. Pașaportul unui tricou poartă o semnătură care acoperă întregul document, iar pașaportul unei baterii prezintă divulgarea câmp cu câmp.
Ambele sunt specificații deschise ale W3C: eddsa-jcs-2022 pentru semnătura care acoperă întregul document, ecdsa-sd-2023 pentru divulgarea câmp cu câmp. Oricine dorește poate să le implementeze. Efortul necesar este motivul pentru care mulți nu o vor face: semnătura care acoperă întregul document este semnificativ mai ieftină de implementat și de întreținut, iar cei care furnizează doar date publice se descurcă cu aceasta.
Faptul că Time Machine stăpânește ambele proceduri este intenționat și va rămâne așa. Ea nu aparține niciunei platforme. Un verificator care acceptă doar metoda mai costisitoare ar fi un instrument doar pentru noi și pentru nimeni altcineva.
Cui îi sunt dezvăluite câmpurile protejate
Merită să ne întrebăm cui îi este dezvăluit ceva în afara datelor publice. Nu cumpărătoarei ocazionale, care primește pașaportul public. Sunt procesatorul, care evaluează valoarea unui pachet de baterii uzat, asiguratorul, care evaluează un risc, reciclatorul, care sortează substanțele chimice, autoritatea, care construiește un dosar. Aceștia sunt cititorii ale căror decizii depind de bani sau de siguranță.
Și tocmai aceste câmpuri sunt cele care, în abordarea obișnuită, rămân neacoperite. Cel care ar avea cel mai mult motiv să dorească o dovadă criptografică nu o primește tocmai pentru câmpurile care stau la baza deciziei sale.
Considerăm că un sigiliu de certificare ar trebui să însemne același lucru pentru toți. „Verificat de Transpareo” înseamnă același lucru atât în vizualizarea extinsă a unui atelier de reparații, cât și pe certificatul public al unei cumpărătoare: fiecare domeniu afișat provine de la emitent și nu a fost modificat de atunci. Un sigiliu care se aplică doar câmpurilor publice este un sigiliu incomplet.
Mai mult decât prevede standardul
O spunem deschis: nimic din toate acestea nu este obligatoriu. ## StandardulEN 18239 impune ca accesul să fie controlat, iar un filtru la nivel de server controlează accesul fără cusur. Faptul că facem ca și câmpurile expuse să poată fi verificate criptografic este ceva ce facem în plus, nu o cerință pe care reglementarea ne-o impune.
Tocmai de aceea merită menționat. Întregul sens al unui permis semnat este că nimeni nu trebuie să aibă încredere în platformă. Eliminarea nivelului intermediar ca excepție readuce exact acea încredere pe care semnătura ar fi trebuit să o elimine.
Același principiu permite ca un câmp să fie omis
A te concentra asupra fiecărui câmp în parte implică o a doua caracteristică, iar aceasta este de fapt cerută de legislația europeană. Regulamentul general privind protecția datelor conferă persoanelor dreptul de a solicita ștergerea datelor cu caracter personal. Un set de date semnat ca un bloc nu poate respecta această cerință fără a-și distruge propria semnătură.
Deoarece aici fiecare câmp este independent, un singur câmp poate fi eliminat, în timp ce restul datelor rămân verificabile. Dacă datele cu caracter personal ajung din greșeală într-un pașaport, ele pot fi eliminate complet, iar pașaportul rămâne valabil: nu este necesară reemiterea acestuia și nu se pierde istoricul. Câmpurile reglementate, pe care legea impune păstrarea lor, rămân intacte; ceea ce poate fi șters poate fi eliminat la cerere, chiar și după ani de zile.
Cu toate acestea, rămâne un pașaport obișnuit
Nimic din toate acestea nu transformă pașaportul într-un obiect special, pe care doar instrumentele noastre îl pot deschide. Acesta rămâne o „Verifiable Credential” în JSON-LD, formatul către care se îndreaptă lumea standardelor web și același format utilizat de Protocolul de transparență al ONU și de restul comunității W3C.
Pașaportul pe care o cumpărătoare îl scanează în browser este, așadar, același obiect pe care îl poate citi un partener din camera de date, iar orice verificator conform standardelor îl poate verifica, nu doar al nostru. Securitatea suplimentară nu costă nimic cititorului și nu leagă pe nimeni de noi.
De ce este dificil din punct de vedere tehnic
Înainte de toate, pentru a nu crea o impresie greșită: nu noi am inventat această procedură. ecdsa-sd-2023 este o specificație publică a W3C, criptografia din spatele acesteia nu provine de la noi, iar cine dorește să o implementeze poate consulta documentația. Nu este dificil să ai ideea. Dificil este să o construiești astfel încât un pass să poată fi verificat și peste zece ani. Aici se află munca, și despre asta se pot spune lucruri utile.
Diferența pare mică, dar schimbă fundamentul: o semnătură obișnuită efectuează calculele pe baza octeților unui document. Divulgarea selectivă se bazează pe afirmațiile sale. Înainte de semnare, pașaportul este transformat într-un format standardizat, în care fiecare informație apare ca o propoziție separată, de sine stătătoare. Abia astfel se poate omite o propoziție fără a afecta restul.
Astfel, apare o problemă pe care o semnătură bazată pe octeți nu o are: aceeași formă standardizată trebuie să reia exact în zece ani. Nu aproximativ, ci caracter cu caracter, altfel dovada nu va mai fi valabilă. Trei lucruri stau în calea acestui lucru, și toate trei sunt neînsemnate.
Numerele își pierd tipul. Dacă se scrie un număr ca simplu JSON, se pierde pe parcurs ce fel de număr era. O valoare precum 2,0 revine ca 2 după o trecere prin JSON. Pentru un om este același lucru, pentru forma standardizată este o altă propoziție, iar verificarea eșuează.
Denumirile nu reprezintă încă o semnificație. Pentru ca forma standardizată să ia naștere, fiecare nume de câmp trebuie să se rezolve într-o semnificație unică. Dacă lipsește una, câmpul dispare în tăcere în timpul conversiei. Acesta apare atunci în pașaport, dar dovada nu îl acoperă, și nimeni nu observă acest lucru.
Semnificațiile se găsesc de obicei pe internet. Această corespondență se regăsește într-un vocabular pe care majoritatea instrumentelor îl încarcă de pe internet în timpul verificării. Cine procedează astfel face ca verificabilitatea pașaportului său să depindă de faptul că o adresă străină va mai răspunde peste zece ani, și anume fără modificări.
Cum am rezolvat problema
Am eliminat cele trei puncte de la rădăcină, în loc să le interceptăm ulterior.
Tipuri. Fiecare valoare este scrisă împreună cu tipul său, iar publicarea se întrerupe de îndată ce apare chiar și un singur număr fără tip în forma standardizată. Astfel, eroarea este identificată imediat, acolo unde costă doar o linie de cod, în loc să apară ani mai târziu ca o încălcare inexplicabilă a validării.
Vocabulare. Fiecare vocabular la care face referire un pașaport este stocat local la noi și nu este niciodată preluat de pe internet. O adresă necunoscută duce la o întrerupere bruscă a procesului de semnare, nu la o revenire silențioasă la un rezultat gol.
Identificatori. Fiecare nod din document poartă un identificator stabil, astfel încât forma standardizată să rămână reproductibilă, în loc să se atribuie nume auxiliare noi la fiecare trecere.
Partea cea mai delicată se află în „Bring Your Own Key”. Pentru fiecare emitere este necesară o cheie suplimentară, de scurtă durată, cu ajutorul căreia câmpurile care pot fi divulgate sunt semnate individual. Această cheie este generată și eliminată chiar de către emitent. Dacă ar fi în posesia noastră, am putea inventa ulterior câmpuri individuale, iar independența semnăturii emitentului ar fi doar o simplă afirmație. Verificăm dovada primită în raport cu cheia publică stocată, înainte de a-i acorda încredere.
Fiecare pașaport conține două astfel de dovezi, una a emitentului și una a Transpareo, iar fiecare dintre ele este derivată independent pentru a fi vizualizată de un cititor. Două semnături, două autorități independente una de cealaltă, chiar și pentru un câmp dezvăluit individual.
Pentru noi, acest efort este justificat. Nu am adăugat verificabilitatea ulterior; platforma a fost concepută în jurul acestui principiu încă de la prima versiune. Fiecare pașaport este semnat la publicare și legat de versiunea anterioară. Arhiva inalterabilă pe zece ani este creată și devine operațională imediat ce pașapoartele sunt înregistrate în Registrul DPP al UE. Semnarea fiecărui câmp în loc de întregul bloc reprezintă o extindere a acestui nucleu, nu o adăugire la ceva care nu a fost conceput niciodată în acest scop.
Unde ne aflăm
Am optat pentru dovadă, pentru fiecare cititor, deoarece un sigiliu ar trebui să însemne același lucru, indiferent de cine îl privește. Pentru cei care doresc să vadă cum funcționează: cele două demo-uri la care se face referire mai sus se verifică direct în browser, fără a interoga un server.
Întrebări referitoare la această postare
Există vreo normă care să impună semnătura pe fiecare câmp în parte?
Nu. Standardul EN 18239 impune ca accesul să fie controlat pentru fiecare element de date în parte, iar un filtru la nivel de server îndeplinește pe deplin această cerință. Faptul că facem ca câmpurile expuse să poată fi verificate reprezintă o decizie a noastră și nu o cerință impusă de vreo reglementare. Considerăm că acest efort este justificat, deoarece întregul sens al unui pașaport semnat constă în faptul că nimeni nu trebuie să aibă încredere în platformă - eliminarea nivelului intermediar restabilește tocmai această încredere. Statutul acestor standarde este prezentat în articolul nostru privind standardele armonizate.
Ce anume este diferit, mai exact, față de un filtru de server?
Nu contează cine vede ceva, ci ce ajunge la destinatar. Ambele metode îi arată cititorului exact câmpurile la care are dreptul. În cazul filtrului de server, fragmentul ajunge nesemnat, astfel încât cititorul trebuie să aibă încredere că serverul a fost ales în mod corect și că nu s-a modificat nimic pe parcurs. În cazul certificărilor câmp cu câmp, același fragment ajunge însoțit de o certificare care, offline, poate fi urmărită până la cheia publică a emitentului, fără ca cineva să fie nevoit să ne întrebe. Pentru o broșură informativă publică, diferența este de natură academică; însă pentru valoarea pe care un procesator o ia în calcul la stabilirea prețului unei baterii uzate, aceasta reprezintă esența problemei.
Cititorii au nevoie de un program special pentru asta?
Nu. Pașaportul rămâne o „Verifiable Credential” în format JSON-LD, iar dovada este suita criptografică publică W3C ecdsa-sd-2023, astfel încât orice verificator conform standardului îl poate verifica. Aplicația noastră open-source de vizualizare, Transpareo Time Machine, recalculează fiecare semnătură în browserul cititorului, fără a interoga un server al nostru, și suportă în mod intenționat și semnarea simplă a întregului document. Un verificator care ar accepta doar procedura noastră ar fi un instrument util doar pentru noi și pentru nimeni altcineva.
Cui sunt dezvăluite, de fapt, câmpurile protejate?
Nu cumpărătoarei ocazionale; acesteia i se eliberează permisul public. Sunt atelierul de reparații cu un interes legitim declarat, operatorul care evaluează valoarea unui pachet de baterii uzate, operatorul de reciclare care sortează substanțele chimice, asiguratorul care evaluează un risc și autoritatea care construiește un dosar - cititori ale căror decizii depind de bani sau de siguranță. Regulamentul UE privind bateriile prevede exact aceste etape. Totodată, aceștia sunt cititorii care, în abordarea obișnuită, nu primesc dovezi tocmai pentru domeniile pe care se bazează decizia lor.
Publicăm doar date publice. Este nevoie de asta?
Probabil că nu, și asta o spunem deschis. O semnătură care acoperă întregul document, suita criptografică eddsa-jcs-2022, acoperă un pașaport ale cărui câmpuri sunt toate publice, iar costurile de implementare și operare sunt semnificativ mai mici. Divulgarea câmp cu câmp merită efortul de îndată ce apare un al doilea grup țintă, cum ar fi o rețea de reparații, o firmă de reciclare sau o autoritate căreia, în mod normal, i-ați înmâna extrase nesemnate. Ambele proceduri sunt specificații deschise ale W3C și ambele funcționează astăzi în Time Machine, pe „pașaportul” unui tricou și pe „pașaportul” unei baterii.
Se pot șterge ulterior datele cu caracter personal fără a se invalida pașaportul?
Da, iar acest aspect este efectiv impus de legislația europeană. Regulamentul general privind protecția datelor (RGPD) conferă persoanelor dreptul de a solicita ștergerea datelor cu caracter personal, iar un set de date semnat ca bloc nu poate respecta această cerință fără a-și distruge propria semnătură. Deoarece aici fiecare câmp este definit separat, un singur câmp poate fi eliminat, în timp ce restul rămân verificabile - fără reemitere, fără istoric de versiuni întrerupt. Câmpurile reglementate, pe care legea impune păstrarea lor, rămân intacte.
Cine deține cheia de semnătură?
Fiecare permis conține două dovezi, iar una dintre ele poate fi a dumneavoastră. Fiecare emitent are nevoie, în plus, de o cheie cu durată limitată, care semnează individual câmpurile care pot fi divulgate; aceasta este generată și eliminată chiar de emitent, deoarece, dacă ar fi în posesia noastră, am putea inventa ulterior câmpuri individuale, iar independența semnăturii emitentului ar rămâne doar o afirmație. Verificăm dovada primită înapoi folosind cheia publică stocată, înainte de a-i acorda încredere. Fiecare pașaport conține astfel două dovezi emise de două autorități independente, atât pentru un câmp dezvăluit individual, cât și pentru întregul set de date.
Pașaportul va mai fi valabil peste zece ani?
Tocmai aici rezidă efortul. Dezvăluirea selectivă se bazează pe conținutul unui document, nu pe octeții acestuia; prin urmare, aceeași formă standardizată trebuie să poată fi reprodusă, caracter cu caracter, chiar și după un deceniu. Trei lucruri pot perturba acest proces, iar noi le-am eliminat pe toate trei de la rădăcină - fiecare valoare este scrisă împreună cu tipul său, iar publicarea se întrerupe în cazul unui număr fără tip, fiecare vocabular este stocat local și nu este niciodată preluat de pe rețea, iar fiecare nod poartă un identificator stabil, astfel încât forma standardizată să rămână reproductibilă. Arhiva imuabilă pe zece ani este creată și va intra în vigoare imediat ce pașapoartele vor fi înregistrate în Registrul UE, care funcționează din 20 iulie 2026 în temeiul Regulamentului de punere în aplicare (UE) 2026/1778. Mai multe detalii în analiza noastră privind regulamentul privind registrul.



