Zverejniť bez straty podpisu

Zverejniť bez straty podpisu

Kto má prístup k chráneným poliam, musí väčšinou dôverovať platforme. Každé pole podpisujeme samostatne, aby bolo možné ich overiť aj samostatne.

Digitálny pas výrobku neukazuje všetkým to isté. Kupujúca vidí verejne dostupné údaje. Opravovňa alebo recyklačná firma vidí viac. Orgán dohľadu nad trhom vidí všetko. To je jasné a európske normy to medzičasom výslovne stanovujú.

Zaujímavá otázka znie skôr takto: Ak sa niekomu okrem verejných údajov sprístupnia aj chránené polia, môže potom preukázať, že práve tieto polia sú autentické? Alebo sa musí spoliehať na to, že platforma ich správne vybrala a odovzdala bez zmien?

V prípade väčšiny platforiem je úprimná odpoveď: dôvera. My sme našu platformu vybudovali tak, aby odpoveďou bol dôkaz - nielen pre verejné polia, ale pre každé pole, ktoré sa pridá až pri zverejnení. Prečo je tento rozdiel dôležitý a prečo sme sa v tomto smere vydali náročnejšou cestou.

Pravidlo prístupu spĺňajú všetci rovnako

NormaEN 18239, európska norma pre prístupové práva, bezpečnosť a dôvernosť v DPP, vyžaduje riadenie prístupu pre každý dátový prvok: pre každé pole existuje pravidlo, kto ho smie vidieť. To je správna požiadavka a nie je ťažké ju splniť. Aký status tieto normy vlastne majú, sme podrobne rozobral v článku harmonizované normy.

Bežným spôsobom, ako to dosiahnuť, je filtrovanie na strane servera. Server vie, kto žiada o údaje, overí, čo táto osoba smie vidieť, a vráti presne tento výrez. Riadenie prístupu: hotovo. Norma viac nevyžaduje.

Je tu však jeden háčik, ktorým sa norma nezaoberá: Úsek prichádza nepodpísaný. Čitateľ dostane pre neho zostavený náhľad a musí veriť, že server vybral obsah čestne a počas prenosu nič nezmenil. Pre verejný informačný leták je to v poriadku. Pre hodnotu, na ktorej spracovateľ zakladá cenu použitej batérie, je to však veľká dôvera.

Kde jediný podpis naráža na svoje limity

Zrejmé riešenie je podpísať údaje. Pre oba konce škály funguje bežný podpis dobre: podpísať verejný výpis, podpísať kompletný dátový súbor a oba sa overujú voči verejnému kľúču bez toho, aby medzi nimi stál nejaký server. Ako to funguje v detaile, je uvedené v článku Podpisy a certifikáty v DPP.

Problém nastáva uprostred. Podpis celého dokumentu pokrýva presne jednu sadu polí, a to tie, ktoré boli prítomné v čase podpisu. Ak oprávnenému čitateľovi dodatočne sprístupníte chránené pole, toto pole sa nachádza mimo podpísaného súboru a k nemu sa dostane bez krytia. Ak namiesto toho od začiatku podpíšete celý súbor údajov, podpis síce pokryje všetko, ale potom by ste museli všetko ukázať každému.

Stupne medzi týmito dvoma extrémami tak vypadávajú z rámca: servis, poisťovňa, recyklačná spoločnosť. Ak by sme chceli vopred podpísať každú možnú kombináciu toho, kto čo vidí, potrebovali by sme na každú kombináciu samostatný podpísaný dokument, a počet kombinácií by sa s každou ďalšou skupinou s prístupom exponenciálne zvyšoval. To nikto nerobí. Vráti sa k nepodpísanému serverovému filtru a stredná úroveň opäť funguje na základe dôvery.

Podpisovanie každého poľa jednotlivo

Existuje lepšia konštrukcia a na nej budujeme našu platformu. Namiesto podpísania hotového dokumentu ako jedného celku sa vydavateľ v rámci jediného podpísania zaviaže ku každému poľu jednotlivo (pre znalcov noriem: certifikát W3C ecdsa-sd-2023 pre selektívne zverejňovanie).

Každý pohľad začína verejným jadrom

Každý pohľad začína teda tými istými verejnými poľami. To, čo čitateľ uvidí navyše, sa pridáva pole po poli, a každé z týchto polí naďalej vedie späť k verejnému kľúču vystaviteľa - offline, bez opätovného podpisovania a bez dôvery v subjekt, ktorý pohľad zostavil. Polia bez oprávnenia jednoducho chýbajú. Nie sú začiernené, ale vôbec tam nie sú a nič o nich neprezradí.

Príklad: opravovňa

Ako to konkrétne funguje, ukazuje nasledujúci príklad. Opravovňa prejavila oprávnený záujem o batériu, čo je jedna z úrovní prístupu, ktoré nariadenie o batériách výslovne stanovuje. Jej servisný systém sa pomocou svojho kľúča API prihlási na našom rozhraní a vyžiada si pas.

Odpoveďou je ten istý verejný certifikát, ktorý vidí aj kupujúca, avšak s presne jedným poľom navyše: návod na demontáž, ktorý je sprístupnený len oprávneným čitateľom. Žiaden druhý dokument, žiadna špeciálna verzia, ten istý certifikát s jedným poľom navyše.

Než sa prevádzka spolieha na toto pole, jej softvér porovná dodaný doklad s verejným kľúčom vystaviteľa. Ak kontrola prebehne úspešne, a to aj v súvislosti s dodatočným poľom, vie: tento návod pochádza presne od výrobcu a ani my, ani nikto iný v procese na ňom nič nezmenil. Ak sa overenie nepodarí, vie to rovnako iste a celý dokument odloží stranou.

Náš podiel na tom je zámerne malý. To, že dostane presne tie polia, na ktoré má nárok, zostáva úlohou nášho riadenia prístupu; to robí rovnako každý serverový filter. Novinkou je nasledujúci krok: či je to, čo dorazí, autentické, overuje si sám, bez toho, aby sa nás pýtal.

Prečo je „neporušenosť“ kľúčová

Predstavte si notára, ktorý neoveruje list ako celok, ale každý odsek zvlášť. Verejný list dostane každý. Kto má nárok na viac, dostane k nemu dodatočné odseky, a každý z nich naďalej nesie pečiatku toho istého notára.

Prečo je pri tom dôležité, aby bola pečiatka „neporušená“, si zaslúži ešte jednu vetu. Nezmenená pečiatka neznamená, že obsah je pravdivý. Hovorí: Presne toto napísal vystaviteľ a odvtedy na ňom nikto nezmenil ani znak. Tým sa z otázky dôvery vylučuje každý, kto dokument len posunul ďalej - dočasné úložisko, sieť, archív, my. Kto vám dal pas, už nehrá žiadnu úlohu.

A pečať je binárna. Buď drží, alebo nedrží, neexistuje nič také ako čiastočne poškodená pečať. Ak sa pečať poškodí, nedozviete sa, ktorá veta bola zmenená, ale len to, že už nemôžete dôverovať celému dokumentu. Preto nie je žiadny postupný rozdiel v tom, či sa k vám dodatočné polia dostanú s pečaťou alebo bez nej: Bez pečate nie sú len o niečo menej podložené, ale nie sú podložené vôbec.

Oba postupy na prehliadanie

Každý si to môže overiť sám. Transpareo Time Machine je naša aplikácia s otvoreným zdrojovým kódom na prehliadanie produktových pasov: Prechádza históriou verzií pasu a pritom prepočítava každý podpis v prehliadači používateľa bez toho, aby sa obracala na náš server. Verejne sú v nej dostupné dva ukážkové pasy. Pas trička obsahuje podpis na celý dokument, pas batérie zverejňuje údaje po jednotlivých poliach.

Obe sú otvorenými špecifikáciami W3C: eddsa-jcs-2022 pre podpis celého dokumentu, ecdsa-sd-2023 pre zverejňovanie po jednotlivých poliach. Implementovať ich môže každý, kto chce. Nákladnosť je dôvodom, prečo to mnohí neurobia: podpis celého dokumentu je výrazne lacnejší na vytvorenie aj prevádzku a tomu, kto poskytuje iba verejné údaje, to stačí.

To, že Time Machine ovláda oba postupy, je zámerom a tak to aj zostane. Nepatrí k žiadnej platforme. Overovateľ, ktorý by akceptoval len drahší postup, by bol nástrojom pre nás a pre nikoho iného.

Komu sa sprístupňujú chránené polia

Stojí za to sa opýtať, komu sa vôbec sprístupňuje niečo nad rámec verejných údajov. Nie náhodnej kupujúcej - tá dostane verejný certifikát. Sú to spracovatelia, ktorí posudzujú hodnotu použitého akumulátora, poisťovatelia, ktorí oceňujú riziko, recyklačné spoločnosti, ktoré triedia chemikálie, a úrady, ktoré vyšetrujú prípad. To sú čitatelia, ktorých rozhodnutia závisia od peňazí alebo bezpečnosti.

A práve tieto polia zostávajú v bežnom prístupe nezakryté. Ten, kto by mal najväčší dôvod požadovať kryptografické potvrdenie, ho práve pre tie polia, ktoré sú základom jeho rozhodnutia, nedostane.

Domnievame sa, že certifikačná pečať by mala mať pre všetkých rovnaký význam. Nápis „Overené spoločnosťou Transpareo“ má v rozšírenom zobrazení opravovne rovnaký význam ako na verejnom certifikáte kupujúcej: Každá zobrazená oblasť pochádza od vydavateľa a odvtedy nebola zmenená. Pečať, ktorá sa vzťahuje len na verejné polia, je polovičná pečať.

Viac, než vyžaduje norma

Povieme to otvorene: nič z toho nie je predpísané. ## NormaEN 18239 vyžaduje, aby bol prístup riadený, a filter na strane servera prístup riadi bezchybne. Aj to, že zverejnené polia sú kryptograficky overiteľné, je niečo, čo robíme navyše, nie je to povinnosť, ktorú od nás vyžaduje regulácia.

Presne preto stojí za to to spomenúť. Celý zmysel podpísaného pasu spočíva v tom, že nikto nemusí dôverovať platforme. Vylúčenie strednej úrovne ako výnimky prináša späť práve tú dôveru, ktorú mal podpis odstrániť.

Ten istý princíp umožňuje, aby sa na niektoré pole zabudlo

Zameranie sa na každé pole jednotlivo so sebou prináša druhú vlastnosť, ktorú európske právo skutočne vyžaduje. Všeobecné nariadenie o ochrane údajov dáva ľuďom právo na vymazanie osobných údajov. Záznam údajov podpísaný ako jeden celok nemôže túto požiadavku splniť bez toho, aby sa zničila jeho vlastná podpisová integrita.

Keďže tu každé pole existuje samostatne, je možné odstrániť jednotlivé pole, pričom všetko ostatné zostáva overiteľné. Ak sa omylom dostanú osobné údaje do pasu, dajú sa z neho bez problémov odstrániť a pas zostáva platný: nie je potrebné vydávať nový, nedochádza k prerušeniu histórie. Regulačné polia, ktorých uchovávanie vyžaduje zákon, zostávajú zachované; to, čo je možné vymazať, sa dá na požiadanie vymazať aj o roky neskôr.

Napriek tomu je to úplne bežný pas

Nič z toho nerobí z pasu špeciálny objekt, ktorý dokážu otvoriť len naše nástroje. Naďalej zostáva overiteľným osvedčením (Verifiable Credential) vo formáte JSON-LD, ku ktorému smeruje svet webových štandardov, a ide o ten istý formát, ktorý používa Protokol OSN o transparentnosti (UN Transparency Protocol) aj ostatné prostredie W3C.

Pas, ktorý kupujúca naskenuje v prehliadači, je teda ten istý objekt, ktorý môže načítať partner v dátovom priestore, a každý overovateľ spĺňajúci normy ho môže overiť, nielen ten náš. Táto dodatočná bezpečnosť čitateľa nič nestojí a nikoho k nám nezaväzuje.

Prečo je to technicky náročné

Hneď na úvod, aby nevznikol nesprávny dojem: tento postup sme nevymysleli my. ecdsa-sd-2023 je verejná špecifikácia W3C, kryptografia, na ktorej je založený, nie je našim dielom a kto ju chce implementovať, môže si o tom prečítať. Ťažké nie je prísť s nápadom. Ťažké je vytvoriť ho tak, aby pas fungoval aj o desať rokov. Práve v tom spočíva práca a o tom sa dá povedať niečo užitočné.

Rozdiel znie ako malý, ale posúva základ: Bežný podpis počíta s bajtmi dokumentu. Selektívne zverejňovanie sa počíta na základe jeho tvrdení. Pas sa pred podpísaním uvedie do štandardizovanej podoby, v ktorej je každý údaj samostatnou, o samostatnej vete. Až vďaka tomu je možné vynechať jednu vetu bez toho, aby to poškodilo ostatné.

Tým sa objaví problém, ktorý podpis na úrovni bajtov nemá: tá istá štandardizovaná forma sa musí o desať rokov opäť presne získať. Nie približne, ale znak po znaku, inak už nebude dôkaz platný. Stoja tomu v ceste tri veci a všetky tri sú nenápadné.

Čísla strácajú svoj typ. Ak sa číslo zapíše ako obyčajný JSON, počas spracovania sa stratí informácia o tom, aké číslo to vlastne bolo. Hodnota ako 2,0 sa po prechode cez JSON vráti ako 2. Pre človeka je to to isté, pre štandardizovanú formu je to však iná veta a kontrola zlyhá.

Názvy ešte neznamenajú význam. Aby vznikla štandardizovaná forma, každý názov poľa sa musí priradiť k jednoznačnému významu. Ak chýba jeden, pole pri konverzii ticho zmizne. Potom síce figuruje v pase, ale doklad to nezahŕňa a nikto si to nevšimne.

Významy sa zvyčajne nachádzajú na internete. Toto priradenie je uvedené vo slovníku, ktorý si väčšina nástrojov pri kontrole načíta z internetu. Kto tak koná, podmieňuje overiteľnosť svojho pasu tým, že cudzia adresa bude ešte o desať rokov odpovedať, a to bez zmien.

Ako sme to vyriešili

Tieto tri body sme vyriešili priamo pri zdroji, namiesto toho, aby sme ich neskôr zachytávali.

Typy. Každá hodnota sa zapisuje spolu so svojím typom a zverejnenie sa preruší hneď, ako sa v štandardizovanej forme objaví aj len jedno číslo bez typu. Chyba sa tak objaví hneď, kde stojí jeden riadok, namiesto toho, aby sa o roky neskôr prejavila ako nevysvetliteľné porušenie overiteľnosti.

Slovníky. Každý slovník, na ktorý odkazuje pas, máme k dispozícii lokálne a nikdy sa nestahuje cez internet. Neznáma adresa znamená tvrdé prerušenie pri podpisovaní, nie tiché vrátenie sa k prázdnemu výsledku.

Identifikátory. Každý uzol v dokumente má stabilný identifikátor, aby štandardizovaná forma zostala reprodukovateľná, namiesto toho, aby sa pri každom prechode prideľovali nové pomocné mená.

Najcitlivejšia časť spočíva v princípe „Bring Your Own Key“ (Prineste si vlastný kľúč). Pre každé vystavenie sa používa dodatočný dočasný kľúč, ktorým sa jednotlivé zverejniteľné polia podpisujú. Tento kľúč generuje a likviduje samotný vystavovateľ. Keby bol u nás, mohli by sme jednotlivé polia dodatočne vymyslieť a nezávislosť podpisu vystavovateľa by bola už len tvrdením. Vracajúci sa dôkaz overujeme voči uloženému verejnému kľúču, skôr než mu uveríme.

Každý pas obsahuje dva takéto dôkazy, jeden od vystavovateľa a jeden od spoločnosti Transpareo, a každý z nich je pre čitateľa odvodený nezávisle. Dva podpisy, dve navzájom nezávislé autority, a to aj pre jedno samostatne zverejnené pole.

Pre nás je táto námaha na správnom mieste. Overiteľnosť sme nepridali dodatočne; platforma bola od prvej verzie vybudovaná práve s ohľadom na ňu. Každý pas je pri zverejnení podpísaný a prepojený s predchádzajúcou verziou. Je vytvorený nezmeniteľný desaťročný archív, ktorý sa aktivuje hneď, ako sú pasy zaregistrované v registre EU-DPP. Podpisovanie každého poľa namiesto celého bloku je rozšírením tohto jadra, nie je to dodatočná vrstva na niečom, čo na to nikdy nebolo určené.

Kde sa nachádzame

Rozhodli sme sa pre dôkaz pre každého čitateľa, pretože pečať by mala znamenať to isté bez ohľadu na to, kto sa na ňu pozerá. Kto chce vidieť, ako to funguje: Obe ukážky, na ktoré odkazujeme vyššie, sa overujú priamo v prehliadači bez toho, aby sa obracali na server.

Otázky k tomuto príspevku

Predpisuje nejaká norma štruktúru po jednotlivých poliach?

Nie. Norma EN 18239 vyžaduje, aby bol prístup riadený pre každý dátový prvok, a filter na strane servera túto požiadavku úplne spĺňa. To, že zverejnené polia sú navyše overiteľné, je naše rozhodnutie a nie je to žiadna povinnosť, ktorú by niekto vyžadoval v rámci regulácie. Považujeme túto námahu za oprávnenú, pretože celý zmysel podpísaného pasu spočíva v tom, že nikto nemusí dôverovať platforme - vynechaním strednej úrovne sa práve táto dôvera obnovuje. Aký status majú tieto normy vôbec, je uvedené v našom príspevku o harmonizovaných normách.

V čom sa konkrétne líši od serverového filtra?

Nie je dôležité, kto čo vidí, ale čo sa dostane k adresátovi. Oba spôsoby čitateľovi presne ukazujú polia, na ktoré má nárok. Pri filtrovaní na strane servera sa výňatok doručí bez podpisu, čitateľ teda musí veriť, že server bol vybraný čestne a že sa počas prenosu nič nezmenilo. Pri overovaní jednotlivých polí prichádza ten istý úryvok s overením, ktoré offline odkazuje na verejný kľúč vydavateľa, bez toho, aby sa nás niekto musel pýtať. Pre verejný informačný leták je tento rozdiel čisto akademický, pre hodnotu, na ktorej spracovateľ zakladá cenu použitej batérie, je to však kľúčová otázka.

Potrebujú na to čitatelia nejaký špeciálny softvér?

Nie. Certifikát zostáva overiteľným osvedčením (Verifiable Credential) vo formáte JSON-LD a jeho overenie zabezpečuje verejná kryptografická sada W3C ecdsa-sd-2023, takže ho môže overiť každý overovateľ, ktorý spĺňa normy. Naša aplikácia s otvoreným zdrojovým kódom na zobrazovanie, Transpareo Time Machine, prepočítava každý podpis v prehliadači čitateľa bez toho, aby sa obracala na náš server, a zámerne podporuje aj jednoduchý podpis celého dokumentu. Overovateľ, ktorý by akceptoval iba náš postup, by bol nástrojom pre nás a pre nikoho iného.

Komu sa vlastne sprístupňujú chránené polia?

Nie náhodnej kupujúcej - tá dostane verejný preukaz. Sú to opravovne s prihláseným oprávneným záujmom, spracovatelia, ktorí posudzujú hodnotu použitého akumulátorového modulu, recyklačné podniky, ktoré triedia chemické zložky, poisťovatelia, ktorí oceňujú riziko, a orgány, ktoré zostavujú spis - čitatelia, ktorých rozhodnutia závisia od peňazí alebo bezpečnosti. Nariadenie EÚ o batériách presne stanovuje práve tieto etapy. Sú to zároveň čitatelia, ktorí v bežnom prístupe nedostávajú žiadne dôkazy práve v tých oblastiach, na ktorých spočíva ich rozhodnutie.

Zverejňujeme iba verejne dostupné údaje. Je to potrebné?

Pravdepodobne nie, a to aj otvorene priznávame. Podpis na celý dokument, vytvorený pomocou kryptografickej sady eddsa-jcs-2022, pokrýva pas, ktorého všetky polia sú verejné, a jeho vytvorenie aj prevádzka sú výrazne lacnejšie. Zverejňovanie po jednotlivých poliach sa oplatí hneď, ako pribudne druhá cieľová skupina, napríklad sieť servisov, recyklačná spoločnosť alebo úrad, ktorým by ste inak odovzdávali nepodpísané výpisy. Oba postupy sú otvorenými špecifikáciami W3C a oba dnes bežia v Time Machine, na pase trička aj na pase batérie.

Je možné neskôr vymazať osobné údaje bez zneplatnenia pasu?

Áno, a táto časť je skutočne vyžadovaná európskym právom. Všeobecné nariadenie o ochrane údajov dáva ľuďom právo na vymazanie osobných údajov, a dátový záznam podpísaný ako blok nemôže túto požiadavku splniť bez toho, aby sa zničila jeho vlastná podpisová informácia. Keďže je tu každé pole definované samostatne, je možné odstrániť jedno konkrétne pole, pričom všetko ostatné zostáva naďalej overiteľné - bez potreby opätovného vystavenia, bez narušenia histórie verzií. Regulačné polia, ktorých uchovávanie vyžaduje zákon, zostávajú zachované.

Kto má podpisový kľúč?

Každý preukaz obsahuje dva doklady a jeden z nich môže byť váš. Každé vydanie navyše vyžaduje dočasný kľúč, ktorý jednotlivo podpisuje zverejňovateľné polia; tento kľúč generuje a následne likviduje samotný vydavateľ, pretože keby bol u nás, mohli by sme jednotlivé polia dodatočne vymyslieť a nezávislosť podpisu vydavateľa by bola už len deklaratívna. Vracajúci sa doklad overujeme pomocou uloženého verejného kľúča, než mu uveríme. Každý pas tak obsahuje dva doklady od dvoch nezávislých autorít, a to tak pre jednotlivé zverejnené polia, ako aj pre celý súbor údajov.

Bude pas platný aj o desať rokov?

Práve v tom spočíva náročnosť. Selektívne zverejňovanie sa zakladá na obsahu dokumentu, nie na jeho bajtoch, takže tá istá štandardizovaná forma sa musí o desať rokov neskôr obnoviť znak po znaku. Tri veci narúšajú túto plynulosť a my sme všetky tri vyriešili priamo pri zdroji - každá hodnota sa zapisuje spolu so svojím typom a zverejňovanie sa zastaví pri čísle bez typu, každý slovník je k dispozícii lokálne a nikdy sa nestahuje cez sieť, a každý uzol má stabilný identifikátor, aby štandardizovaná forma zostala reprodukovateľná. Nezmeniteľný desaťročný archív je vytvorený a začne fungovať hneď, ako budú pasy zaregistrované v registri EÚ, ktorý je v prevádzke od 20. júla 2026 na základe vykonávacieho nariadenia (EÚ) 2026/1778. Viac informácií nájdete v našej analýze nariadenia o registri.

Aktualizácie týkajúce sa úrovní prístupu a dokladov

Selektívne zverejňovanie, podpisy a vývoj noriem DPP - každý mesiac v stručnej forme vo vašej e-mailovej schránke.