Zverejniť bez straty podpisu

Zverejniť bez straty podpisu

Každý čitateľ produktového pasu dostane rovnaké verejné údaje, niektorí k nim dostanú aj chránené polia. Otázkou však je, či tieto dodatočné polia obsahujú aj príslušné overenie. Každé pole podpisujeme samostatne, aby bolo možné overiť aj zverejnené pole pomocou verejného kľúča - offline, bez nutnosti kontaktovať nás.

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 platí 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ý výrez a musí veriť, že server ho vybral č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 s každou ďalšou skupinou s prístupom exponenciálne rástol. 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 podpisu 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 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 nároku jednoducho chýbajú. Nie sú začiernené, ale vôbec tam nie sú a nič o nich neprezradí.

Prečo je „neporušenosť“ tým podstatným

Predstavte si notára, ktorý neoveruje list ako celok, ale každý odsek jednotlivo. 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. Pri bežnom postupe platforma tieto odseky pre vás prepisuje a to, čo k vám dorazí, nesie už len jej slovo.

Prečo je pri tom dôležité, aby pečať zostala „neporušená“, si zaslúži ešte jednu vetu. Nezmenená pečať neznamená, že obsah je pravdivý. Znamená to: Presne toto napísal vystaviteľ a odvtedy na tom nikto nič nezmenil. Tým pádom 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 pas odovzdal, už nehrá žiadnu úlohu.

A pečať je binárna. Buď drží, alebo nedrží, polozlomená neexistuje. Ak sa pečať poruší, 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 potvrdené, ale nie sú potvrdené 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 certifikátov produktov: prechádza históriou verzií certifikátu a pritom prepočítava každý podpis v prehliadači používateľa bez toho, aby sa pýtala na náš server. V aplikácii sú verejne dostupné dva ukážkové pasy. Pas trička obsahuje podpis celého dokumentu, pas batérie obsahuje zverejnenie 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 údajov 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 len 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 okrem verejných údajov vôbec niečo sprístupňuje. 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 nijako upravená. 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 zapísať. Bolo by jednoduché splniť literu normy, dodať serverový filter a vyhlásiť túto úroveň za splnenú. Radšej však chceme, aby tento záväzok platil všade tam, kde sa objaví pečať. Lebo celý zmysel podpísaného pasu spočíva v tom, že nikto nemusí platforme dôverovať. Vylúčenie strednej úrovne ako výnimky opäť vytvára práve tú dôveru, ktorú mal podpis odstrániť.

Ten istý princíp vedie k zabudnutiu na jedno pole

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ť jedno 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 zostane platný: bez nutnosti vydania nového pasu, bez prerušenia 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áš. 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 poškodenia ostatných.

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 nepreberá cez sieť. 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ľúč, pomocou ktorého 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 len deklarovaná. Vracajúci sa dôkaz overujeme voči uloženému verejnému kľúču, 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 vyvinutá 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ý nadobúda platnosť 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á nadstavba na niečo, čo na to nikdy nebolo určené.

Kde sa nachádzame

Ak to zjednodušíme, voľba je jednoduchá. Môžete zverejniť chránené polia a požiadať čitateľa, aby dôveroval vášmu filtru - to spĺňa normu. Alebo ich môžete zverejniť a zároveň poskytnúť dôkaz - to spĺňa vyššiu požiadavku, ktorú si podľa nášho názoru tieto polia zaslúžia.

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 to chce vidieť v akcii: Obe ukážky, na ktoré odkazujeme vyššie, sa overujú priamo v prehliadači, offline, len pomocou verejného kľúča.

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.