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.
De ce „neîntrerupt” este esența
Imaginați-vă 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. În procedura obișnuită, platforma transcrie aceste paragrafe pentru dumneavoastră, iar ceea ce ajunge la dumneavoastră poartă doar cuvântul ei.
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. Înseamnă: exact asta a scris emitentul, iar de atunci nimeni nu a modificat niciun caracter. 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 slab atestate, ci nu sunt deloc atestate.
Ambele proceduri pot fi vizualizate
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ă dezvăluirea 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 pe câmpuri. 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 rămân neacoperite în abordarea obișnuită. 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. Ar fi ușor să respectăm litera normei, să livrăm filtrul de server și să declarăm etapa ca fiind finalizată. Preferăm ca angajamentul nostru să se aplice oriunde apare sigiliul. Pentru că întregul sens al unui pașaport semnat este că nimeni nu trebuie să aibă încredere în platformă. Excluderea nivelului mediu ca excepție restabilește exact acea încredere pe care semnătura ar fi trebuit să o elimine.
Același principiu face ca un câmp să fie uitat
A te pronunța 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, care poate fi deschis doar de instrumentele noastre. 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ă calculează 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 nesemnificative.
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 reî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ă externă 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 verificării.
Vocabulare. Fiecare vocabular la care face referire un pașaport este disponibil 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 rulare.
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 generată independent pentru a fi vizualizată de un cititor. Două semnături, două autorități independente una de cealaltă, chiar și pentru un singur câmp dezvăluit.
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 parte, î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
Dacă simplificăm, alegerea este simplă. Puteți dezvălui câmpurile protejate și puteți ruga cititorul să aibă încredere în filtrul dumneavoastră - aceasta îndeplinește standardul. Sau le puteți dezvălui și puteți furniza dovada în același timp - aceasta îndeplinește un standard mai ridicat, pe care, în opinia noastră, aceste câmpuri îl merită.
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 menționate mai sus se verifică direct în browser, offline, folosind doar o cheie publică.
