Zveřejnit, aniž by došlo ke ztrátě podpisu

Zveřejnit, aniž by došlo ke ztrátě podpisu

Kdo má přístup k chráněným polím, musí většinou platformě důvěřovat. Každé pole podepisujeme samostatně, aby je bylo možné ověřit i samostatně.

Digitální produktový pas neukazuje všem stejné informace. Kupující vidí veřejně dostupné údaje. Opravna nebo recyklační podnik vidí více. Orgán dohledu nad trhem vidí vše. To je jasné a evropské normy to nyní výslovně stanovují.

Zajímavá otázka zní poněkud tišeji: Pokud jsou někomu kromě veřejných údajů zpřístupněna i chráněná pole, může pak prokázat, že právě tato pole jsou autentická? Nebo musí věřit, že je platforma správně vybrala a předala beze změn?

U většiny platforem zní upřímná odpověď: důvěra. My jsme naši platformu vybudovali tak, aby odpovědí bylo „důkaz“ - a to nejen pro veřejná pole, ale pro každé pole, které se přidá až při zpřístupnění. Proč na tomto rozdílu záleží a proč jsme se vydali tou náročnější cestou.

Pravidlo přístupu splňují všichni stejně

NormaEN 18239, evropská norma pro přístupová práva, bezpečnost a důvěrnost v rámci DPP, vyžaduje řízení přístupu pro každý datový prvek: pro každé pole existuje pravidlo, kdo ho smí vidět. To je správný požadavek a není těžké jej splnit. Jaký status tyto normy vlastně mají, jsme podrobně rozebrali v článku harmonizované normy.

Obvyklým způsobem, jak toho dosáhnout, je filtrování na straně serveru. Server ví, kdo žádá o data, ověří, co tato osoba smí vidět, a vrátí přesně tento výřez. Řízení přístupu: hotovo. Norma nic víc nevyžaduje.

Je tu však jeden háček, kterým se norma nezabývá: Výňatek dorazí nepodepsaný. Čtenář obdrží pro něj sestavený výňatek a musí věřit, že server provedl výběr poctivě a během přenosu nic nezměnil. U veřejného informačního letáku je to v pořádku. U hodnoty, na které zpracovatel okamžitě zakládá cenu použité baterie, je to však velká důvěra.

Kde jednotlivý podpis naráží na své limity

Zřejmým řešením je data podepsat. Pro oba konce škály funguje běžný podpis dobře: podepsat veřejný výpis, podepsat kompletní datový záznam a oba ověřit pomocí veřejného klíče, aniž by mezi tím stál nějaký server. Jak to funguje v detailu, je popsáno v článku Podpisy a certifikáty v DPP.

Problém nastává uprostřed. Podpis celého dokumentu pokrývá přesně jednu sadu polí, a to ta, která byla při podepisování k dispozici. Pokud oprávněnému čtenáři dodatečně zpřístupníte chráněné pole, leží toto pole mimo podepsanou množinu a dostane se k němu bez podpisu. Pokud místo toho od začátku podepíšete celý datový záznam, podpis sice pokryje vše, ale pak byste museli každému ukázat úplně všechno.

Úrovně mezi tím tak propadají sítem: opravna, pojišťovna, recyklační firma. Chtěli-li bychom předem podepsat každou možnou kombinaci „kdo co vidí“, potřebovali bychom pro každou kombinaci vlastní podepsaný dokument a počet kombinací by s každou další skupinou s přístupem exponenciálně rostl. To nikdo nedělá. Vrátíme se k nepodepsanému serverovému filtru a střední úroveň opět funguje na základě důvěry.

Podepisování každého pole zvlášť

Existuje lepší řešení a na něm stavíme naši platformu. Místo podpisu hotového dokumentu jako jednoho bloku se vydavatel v jediném podpisu individuálně vymezí ke každému poli (pro znalce standardů: certifikát W3C ecdsa-sd-2023 pro selektivní zveřejnění).

Každý náhled začíná u veřejného jádra

Každý náhled tedy začíná u stejných veřejných polí. To, co čtenář uvidí navíc, se přidává pole po poli, a každé z těchto polí i nadále vede zpět k veřejnému klíči vystavitele - offline, bez opakovaného podepisování a bez důvěry v subjekt, který náhled sestavil. Pole bez oprávnění prostě chybí. Nejsou začerněná, ale vůbec tam nejsou, a nic o nich neprosakuje.

Příklad: opravna

Jak to konkrétně funguje, ukazuje následující příklad. Opravna přihlásila oprávněný zájem o baterii, což je jedna z úrovní přístupu, které nařízení o bateriích výslovně stanoví. Její servisní systém se přihlásí pomocí svého klíče API k našemu rozhraní a vyžádá si pas.

Odpovědí je stejný veřejný pas, jaký vidí i kupující, jen o jedno pole bohatší: návod na demontáž, který je zpřístupněn pouze oprávněným čtenářům. Žádný druhý dokument, žádná speciální verze, stejný pas s jedním polem navíc.

Než se provoz na toto pole spolehne, jeho software porovná dodaný doklad s veřejným klíčem vystavitele. Pokud kontrola vyjde, a to i co se týče dodatečného pole, ví: Tento návod pochází doslova od výrobce a ani my, ani nikdo jiný na cestě jsme na něm nic nezměnili. Pokud kontrola nevyjde, ví to stejně jistě a celý dokument odloží stranou.

Náš podíl na tom je záměrně malý. To, že obdrží přesně ta pole, na která má nárok, zůstává úkolem naší správy přístupů; to zvládne stejně dobře každý serverový filtr. Novinkou je následující krok: Zda je to, co dorazí, autentické, ověřuje sám, aniž by se nás ptal.

Proč je „neporušenost“ tím podstatným

Představte si notáře, který neověřuje dopis jako celek, ale každý odstavec zvlášť. Veřejný dopis dostane každý. Kdo má nárok na více, dostane k němu další odstavce, a každý z nich nese i nadále pečeť téhož notáře.

Proč je při tom důležité, aby pečeť byla „neporušená“, si zaslouží ještě jednu větu. Nezničená pečeť neříká, že obsah je pravdivý. Říká: Přesně toto napsal vystavitel a od té doby nikdo nezměnil ani jediné písmeno. Tím pádem z otázky důvěry vypadává každý, kdo dokument pouze předal dál - mezipaměť, síť, archiv, my. Kdo vám pas dal, už nehraje žádnou roli.

A pečeť je binární. Buď drží, nebo nedrží, nic jako napůl zlomená pečeť neexistuje. Pokud se zlomí, nedozvíte se, která věta byla změněna, ale pouze to, že již nemůžete důvěřovat celému listu. Proto není žádný postupný rozdíl v tom, zda k vám dodatečná pole dorazí s pečetí, nebo bez ní: Bez pečetě nejsou jen o něco méně podložené, nejsou podložené vůbec.

Oba způsoby prohlížení

Každý si to může ověřit sám. Transpareo Time Machine je naše open-source aplikace pro prohlížení produktových pasů: Prochází historií verzí pasu a přitom přepočítává každý podpis v prohlížeči uživatele, aniž by se dotazovala na náš server. Veřejně jsou v ní k dispozici dva ukázkové pasy. Pas trička nese podpis pokrývající celý dokument, pas baterie pak zveřejnění po jednotlivých polích.

V obou případech se jedná o otevřené specifikace W3C: eddsa-jcs-2022 pro podpis celého dokumentu, ecdsa-sd-2023 pro zveřejnění po jednotlivých polích. Implementovat je může kdokoli, kdo chce. Náročnost je důvodem, proč to mnozí neudělají: Podpis celého dokumentu je výrazně levnější na vytvoření i provoz a komu stačí poskytovat pouze veřejná data, tomu to stačí.

To, že Time Machine ovládá oba postupy, je záměrné a tak to i zůstane. Nepatří k žádné platformě. Ověřovatel, který by akceptoval pouze dražší postup, by byl nástrojem pouze pro nás a pro nikoho jiného.

Komu jsou zpřístupňována chráněná pole

Stojí za to se zeptat, komu je kromě veřejných dat vůbec něco zpřístupňováno. Ne náhodné kupující, ta dostane veřejný certifikát. Jsou to zpracovatelé, kteří posuzují, jakou má použitý akumulátorový modul hodnotu, pojistitelé, kteří oceňují riziko, recyklátoři, kteří třídí chemické látky, a úřady, které sestavují spis. To jsou čtenáři, jejichž rozhodnutí závisí na penězích nebo bezpečnosti.

A jsou to právě ty údaje, které v běžném přístupu zůstávají nezveřejněné. Ten, kdo by měl největší důvod požadovat kryptografický certifikát, jej nedostane právě pro ty údaje, na nichž závisí jeho rozhodnutí.

Domníváme se, že certifikační pečeť by měla mít pro všechny stejný význam. Nápis „Ověřeno společností Transpareo“ má v rozšířeném zobrazení opravny stejný význam jako na veřejném certifikátu kupující: Každá zobrazená oblast pochází od vydavatele a od té doby s ní nebylo manipulováno. Pečeť, která se vztahuje pouze na veřejná pole, je poloviční pečeť.

Více, než vyžaduje norma

Říkáme to otevřeně: nic z toho není předepsáno. ## NormaEN 18239 vyžaduje, aby byl přístup řízen, a filtr na straně serveru přístup řídí bezchybně. I to, že zveřejněná pole jsou kryptograficky ověřitelná, je něco, co děláme navíc, nikoli povinnost, kterou od nás předpisy vyžadují.

Právě proto stojí za to to zmínit. Celý smysl podepsaného pasu spočívá v tom, že nikdo nemusí platformě důvěřovat. Vyjmutí střední úrovně jako výjimky vrací přesně tu důvěru, kterou měl podpis odstranit.

Stejný princip umožňuje, aby bylo pole zapomenuto

Zaměření se na každé pole zvlášť s sebou nese druhou vlastnost, a tu evropské právo skutečně vyžaduje. Obecné nařízení o ochraně osobních údajů dává lidem právo na výmaz osobních údajů. Datový záznam podepsaný jako jeden blok nemůže tuto povinnost splnit, aniž by zničil vlastní podpis.

Jelikož zde každé pole stojí samostatně, lze odstranit jednotlivé pole, zatímco vše ostatní zůstává ověřitelné. Pokud se omylem dostanou osobní údaje do pasu, lze je z něj čistě odstranit a pas zůstává platný: žádné nové vystavení, žádná přerušená historie. Regulační pole, jejichž uchovávání zákon vyžaduje, zůstávají zachována; to, co lze vymazat, lze na požádání vymazat, a to i o několik let později.

Přesto jde o zcela běžný pas

Nic z toho nedělá z pasu žádný zvláštní objekt, který by dokázaly otevřít pouze naše nástroje. Zůstává ověřitelnou kvalifikací (Verifiable Credential) ve formátu JSON-LD, ke kterému směřuje svět webových standardů, a ve stejném formátu, jaký používá Protokol OSN pro transparentnost (UN Transparency Protocol) i ostatní prostředí W3C.

Průkaz, který zákaznice naskenuje v prohlížeči, je tedy stejný objekt, který může načíst partner v datovém prostoru, a každý ověřovatel dodržující standardy jej může zkontrolovat, nejen ten náš. Tato dodatečná bezpečnost čtenáře nic nestojí a nikoho k nám nevazuje.

Proč je to technicky náročné

Nejprve, aby nevznikl mylný dojem: tento postup jsme nevymysleli. ecdsa-sd-2023 je veřejná specifikace W3C, kryptografie, na které je založen, nepochází od nás, a kdokoli ji chce implementovat, může si o tom přečíst. Není těžké přijít s nápadem. Těžké je jej zrealizovat tak, aby pas fungoval i za deset let. Právě v tom spočívá práce a o tom lze říci něco užitečného.

Rozdíl zní jako maličkost, ale posouvá samotný základ: běžný podpis provádí výpočty na základě bajtů dokumentu. Selektivní zveřejnění provádí výpočet na základě jeho tvrzení. Pas je před podepsáním převeden do standardizované podoby, ve které je každý údaj samostatnou, na sobě stojící větou. Teprve díky tomu lze vynechat jednu větu, aniž by to poškodilo ostatní.

Tím se objevuje problém, který podpis založený na bajtech nemá: stejná standardizovaná forma se musí za deset let znovu přesně objevit. Ne přibližně, ale znak po znaku, jinak už nebude důkaz platný. Tomu brání tři věci a všechny tři jsou nenápadné.

Čísla ztrácejí svůj typ. Pokud se číslo zapíše jako pouhý JSON, ztratí se při přenosu informace o tom, o jaké číslo se jednalo. Hodnota jako 2,0 se po průchodu JSON vrátí jako 2. Pro člověka je to totéž, pro standardizovanou formu však jde o jinou větu, a kontrola selže.

Názvy ještě neznamenají význam. Aby vznikla standardizovaná forma, musí každý název pole odkazovat na jednoznačný význam. Chybí-li nějaký, pole při převodu tiše zmizí. Je pak sice uvedeno v pasu, ale doklad to nezahrnuje a nikdo si toho nevšimne.

Významy se obvykle nacházejí na internetu. Toto přiřazení je uvedeno ve slovníku, který si většina nástrojů při kontrole stahuje z internetu. Kdo tak činí, podmiňuje ověřitelnost svého pasu tím, že cizí adresa bude i za deset let stále odpovídat, a to beze změn.

Jak jsme to vyřešili

Tyto tři body jsme vyřešili u kořene, místo abychom je řešili až později.

Typy. Každá hodnota se zapisuje se svým typem a publikace se přeruší, jakmile se v normalizované formě objeví byť jen jedno číslo bez typu. Chyba se tak objeví hned, kde stojí jeden řádek, místo aby se o několik let později projevila jako nevysvětlitelné porušení ověřitelnosti.

Slovníky. Každý slovník, na který odkazuje pas, máme k dispozici lokálně a nikdy jej nestahujeme z internetu. Neznámá adresa znamená tvrdé přerušení při podepisování, nikoli tichý návrat k prázdnému výsledku.

Identifikátory. Každý uzel v dokumentu nese stabilní identifikátor, aby standardizovaná forma zůstala reprodukovatelná, místo aby se při každém průchodu přidělovaly nové pomocné názvy.

Nejchoulostivější část spočívá v principu „Bring Your Own Key“. Pro každé vystavení je zapotřebí dodatečný, krátkodobý klíč, pomocí kterého se jednotlivě podepisují pole určená ke zveřejnění. Tento klíč generuje a ruší sám vystavovatel. Kdyby byl u nás, mohli bychom jednotlivá pole dodatečně vymyslet a nezávislost podpisu vystavovatele by byla pouze proklamovaná. Vrácený doklad ověřujeme proti uloženému veřejnému klíči, než mu uvěříme.

Každý pas obsahuje dva takové doklady, jeden od vystavovatele a jeden od Transpareo, a každý z nich je pro čtenáře odvozen nezávisle. Dva podpisy, dvě navzájem nezávislé autority, a to i pro jednotlivě zveřejněné pole.

Pro nás je tato námaha na správném místě. Ověřitelnost jsme nepřidali dodatečně; platforma byla od první verze vyvinuta právě s ohledem na ni. Každý pas je při zveřejnění podepsán a navázán na předchozí verzi. Je vytvořen neměnný desetiletý archiv, který se aktivuje, jakmile jsou pasy zaregistrovány v registru EU-DPP. Podepisování jednotlivých polí namísto celého bloku je rozšířením tohoto jádra, nikoli nánosem na něco, co k tomu nikdy nebylo určeno.

Kde se nacházíme

Rozhodli jsme se pro důkaz pro každého čtenáře, protože pečeť by měla znamenat jednu věc, bez ohledu na to, kdo se na ni dívá. Kdo chce vidět, jak to funguje: Obě výše odkazované ukázky se ověřují přímo v prohlížeči, aniž by se dotazovaly na server.

Dotazy k tomuto příspěvku

Předepisuje nějaká norma podpis po jednotlivých polích?

Ne. Norma EN 18239 vyžaduje, aby byl přístup řízen pro každý datový prvek, a filtr na straně serveru tuto podmínku plně splňuje. To, že zveřejněná pole jsou navíc ověřitelná, je naše rozhodnutí a nejde o žádnou povinnost, kterou by předpis od kohokoli vyžadoval. Tuto námahu považujeme za oprávněnou, protože celý smysl podepsaného pasu spočívá v tom, že nikdo nemusí platformě důvěřovat - vyloučení prostřední úrovně právě tuto důvěru obnovuje. Jaký status tyto normy vůbec mají, je uvedeno v našem příspěvku o harmonizovaných normách.

V čem konkrétně se liší od serverového filtru?

Nejde o to, kdo co vidí, ale o to, co dorazí. Oba způsoby čtenáři přesně ukazují pole, na která má nárok. V případě serverového filtru dorazí výřez bez podpisu, takže čtenář musí věřit, že server byl vybrán poctivě a že se během přenosu nic nezměnilo. V případě ověření jednotlivých polí dorazí stejný výňatek s ověřením, které offline odkazuje na veřejný klíč vystavitele, aniž by se nás někdo musel ptát. Pro veřejný informační leták je tento rozdíl čistě akademický, ale pro hodnotu, na které zpracovatel zakládá cenu použité baterie, je to zásadní otázka.

Potřebují k tomu čtenáři nějaký speciální software?

Ne. Certifikát zůstává ověřitelným osvědčením ve formátu JSON-LD a jako důkaz slouží veřejná kryptografická sada W3C ecdsa-sd-2023, takže jej může ověřit každý ověřovač, který splňuje dané standardy. Naše open-source aplikace pro zobrazení, Transpareo Time Machine, přepočítává každý podpis v prohlížeči čtenáře, aniž by se dotazovala na náš server, a záměrně podporuje i jednoduchý podpis celého dokumentu. Ověřovatel, který by akceptoval pouze náš postup, by byl nástrojem pouze pro nás a pro nikoho jiného.

Komu jsou vlastně chráněná pole zpřístupněna?

Ne náhodné kupující - ta dostane veřejný průkaz. Jsou to opravny s nahlášeným oprávněným zájmem, zpracovatelé, kteří posuzují hodnotu použitého bateriového modulu, recyklační firmy, které třídí chemické látky, pojišťovny, které oceňují riziko, a úřady, které sestavují spis - čtenáři, jejichž rozhodnutí závisí na penězích nebo bezpečnosti. Nařízení EU o bateriích přesně tyto fáze předpokládá. Jsou to zároveň čtenáři, kteří při obvyklém přístupu nedostávají doklady právě pro ty oblasti, na nichž jejich rozhodnutí spočívá.

Zveřejňujeme pouze veřejně dostupné údaje. Je to nutné?

Pravděpodobně ne, a to také otevřeně přiznáváme. Podpis pokrývající celý dokument, kryptografická sada eddsa-jcs-2022, zahrnuje pas, jehož všechna pole jsou veřejná, a jeho vytvoření i provoz jsou výrazně levnější. Zveřejnění jednotlivých polí se vyplatí, jakmile přibude druhá cílová skupina, například síť opraváren, recyklační firma nebo úřad, kterým byste jinak předávali nepodepsané výpisy. Oba postupy jsou otevřenými specifikacemi W3C a oba dnes fungují v Time Machine, na pasu trička i na pasu baterie.

Je možné osobní údaje později vymazat, aniž by došlo ke znehodnocení pasu?

Ano, a tuto část skutečně vyžaduje evropské právo. Obecné nařízení o ochraně osobních údajů dává lidem právo na výmaz osobních údajů, a datový záznam podepsaný jako blok nemůže tomuto požadavku vyhovět, aniž by zničil svůj vlastní podpis. Jelikož je zde každé pole definováno samostatně, lze odstranit jednotlivé pole, zatímco vše ostatní zůstává ověřitelné - bez nutnosti vystavení nového dokladu a bez narušení historie verzí. Regulační pole, jejichž uchovávání zákon vyžaduje, zůstávají zachována.

Kdo má podpisový klíč?

Každý pas obsahuje dva doklady a jeden z nich může být váš. Každé vystavení navíc vyžaduje krátkodobý klíč, který jednotlivě podepisuje zveřejňovaná pole; ten generuje a ruší sám vystavovatel, protože kdyby byl u nás, mohli bychom jednotlivá pole dodatečně vymyslet a nezávislost podpisu vystavovatele by byla pouze deklarativní. Vrácený doklad ověřujeme pomocí uloženého veřejného klíče, než mu uvěříme. Každý pas tak obsahuje dva doklady od dvou nezávislých autorit, a to jak pro jednotlivě zveřejněná pole, tak pro celý datový záznam.

Bude pas platný i za deset let?

Právě v tom spočívá náročnost. Selektivní zveřejňování počítá na základě obsahu dokumentu, nikoli na základě jeho bajtů, takže stejný standardizovaný formát musí být o deset let později znovu vygenerován znak po znaku. Tři věci tento proces narušují, a my jsme všechny tři vyřešili u kořene - každá hodnota je zapsána se svým typem a zveřejnění se zastaví u čísla bez typu, každý slovník je k dispozici lokálně a nikdy se nestahuje z sítě, a každý uzel nese stabilní identifikátor, aby standardizovaná forma zůstala reprodukovatelná. Nezměnitelné desetileté archivy jsou zřízeny a začnou fungovat, jakmile budou pasy zaregistrovány v registru EU, který je od 20. července 2026 v provozu na základě prováděcího nařízení (EU) 2026/1778. Více informací najdete v naší analýze nařízení o registru.

Aktualizace týkající se úrovní přístupu a dokladů

Selektivní zveřejňování, podpisy a vývoj norem DPP - každý měsíc v přehledném formátu ve vaší e-mailové schránce.