Razkritje brez izgube podpisa

Razkritje brez izgube podpisa

Vsak bralec potrdila o izdelku prejme enake javne podatke, nekateri pa poleg tega še zaščitena polja. Manj očitno vprašanje je, ali ta dodatna polja prinašajo tudi svoj dokaz. Vsako polje posebej podpisujemo, tako da se tudi javno razkrito polje lahko preveri z javnim ključem - offline, brez potrebe po poizvedbi pri nas.

Digitalni potni list izdelka ne prikazuje vsem enako. Kupec vidi javne podatke. Servisna delavnica ali podjetje za obnovo vidi več. Organ za nadzor trga vidi vse. To je jasno, evropski standardi pa to zdaj tudi izrecno določajo.

Zanimivo vprašanje pa je nekoliko bolj subtilno: če se nekomu razkrijejo zaščitena polja, ki presegajo javne podatke, ali lahko ta oseba dokaže, da so prav ta polja resnična? Ali pa mora zaupati, da jih je platforma pravilno izbrala in posredovala nespremenjena?

Pri večini platform je iskren odgovor: zaupanje. Našo platformo smo zasnovali tako, da je odgovor »dokaz« - ne le za javna polja, temveč za vsako polje, ki se doda šele ob razkritju. Zakaj je ta razlika pomembna in zakaj smo se za to odločili za zahtevnejšo pot.

Pravilo dostopa izpolnjujejo vsi enako

EN 18239, evropski standard za pravice dostopa, varnost in zaupnost v DPP, zahteva nadzor dostopa za vsak podatkovni element: za vsako polje obstaja pravilo, kdo ga sme videti. To je prava zahteva in ni težko jo izpolniti. Kakšen status imajo te norme sploh, smo podrobno razložili v članku usklajene norme.

Običajen način za to je filtriranje na strani strežnika. Strežnik ve, kdo poizveduje, preveri, kaj ta oseba sme videti, in vrne natanko ta izsek. Nadzor dostopa: opravljeno. Standard ne zahteva ničesar več.

Vendar je tu en zadržek, s katerim se standard ne ukvarja: Odlomek prispe nepodpisan. Bralec prejme pogled, sestavljen posebej zanj, in mora verjeti, da je strežnik izbor opravil pošteno ter da med prenosom ni ničesar spremenil. Za javni informativni list je to v redu. Za vrednost, na kateri obdelovalec takoj utemelji ceno rabljene baterije, pa je to precejšnja mera zaupanja.

Kje posamezni podpis doseže svoje meje

Najbolj očitna rešitev je podpisovanje podatkov. Za oba skrajna primera na lestvici dobro deluje običajni podpis: podpisati javni prikaz, podpisati celoten niz podatkov, oba pa se preverita z javnim ključem, brez da bi med njima stal strežnik. Kako to poteka v podrobnostih, je opisano v Podpisi in certifikati v DPP.

V sredini pa se sistem zlomi. Podpis celotnega dokumenta zajema natanko en niz polj, in sicer tista, ki so bila prisotna ob podpisovanju. Če pooblaščenemu bralcu dodatno razkrijemo zaščiteno polje, je to polje zunaj podpisanega niza in pride do njega nepokrito. Če namesto tega že na začetku podpišemo celoten niz podatkov, podpis sicer pokriva vse, vendar bi potem morali vsem pokazati vse.

Stopnje vmes tako padejo skozi mrežo: servis, zavarovalnica, podjetje za recikliranje. Če bi želeli vnaprej podpisati vsako možno kombinacijo »kdo vidi kaj«, bi za vsako kombinacijo potrebovali lasten podpisan dokument, število kombinacij pa bi eksplodiralo z vsako dodatno skupino uporabnikov. Tega nihče ne stori. Zato se zateče k nepodpisanemu strežniškemu filtru, srednja stopnja pa spet temelji na zaupanju.

Podpisovanje vsakega polja posebej

Obstaja boljša rešitev, na kateri gradimo našo platformo. Namesto da bi podpisali končni dokument kot en blok, izdajatelj v enem samem postopku podpisovanja določi vsako polje posebej (za tiste, ki poznajo standarde: W3C-potrdilo ecdsa-sd-2023 za selektivno razkritje).

Vsak pogled se začne z javnim jedrom

Vsak pogled se torej ### začnez istimi javnimi polji. Kar bralec vidi poleg tega, se dodaja polje za poljem, in vsako od teh polj še naprej vodi nazaj do javnega ključa izdajatelja - offline, brez ponovnega podpisovanja in brez zaupanja v organ, ki je pogled sestavil. Polja brez pravice preprosto manjkajo. Niso zamolčena, ampak jih sploh ni, in o njih ne pricurlja ničesar.

Zakaj je »neprekinjenost« bistvo celotne zadeve

Predstavljajte si notarja, ki ne overja pisma v celoti, ampak vsak odstavek posebej. Javno pismo prejme vsakdo. Kdor ima pravico do več, dobi dodatne odstavke, vsak od njih pa še naprej nosi pečat istega notarja. Pri običajnem postopku platforma te odstavke prepisuje za vas, tisto, kar pride do vas, pa nosi le še njeno besedo.

Zakaj je pri tem pomembno, da je »neprekinjeno«, si zasluži še en stavek. Nepoškodovan pečat ne pomeni, da je vsebina resnična. Pomeni: točno to je napisal izdajatelj in od takrat nihče ni spremenil niti črke. S tem iz vprašanja zaupanja izpade vsak, ki je dokument le posredoval - vmesni pomnilnik, omrežje, arhiv, mi. Kdo vam je izročil potni list, ni več pomembno.

In pečat je binaren. Drži ali ne drži, polomljenega pečata ni. Če se zlomi, ne boste izvedeli, kateri stavek je bil spremenjen, ampak le to, da celotnemu listu ne morete več zaupati. Zato ni postopne razlike, ali dodatna polja prispejo k vam s pečatom ali brez njega: brez pečata niso le nekoliko manj verodostojna, ampak sploh niso verodostojna.

Oba postopka si lahko ogledate

To lahko vsakdo preveri sam. Transpareo Time Machine je naša odprtokodna aplikacija za prikaz potrdil o izdelkih: listi po zgodovini različic potrdila in pri tem v brskalniku uporabnika ponovno izračuna vsak podpis, ne da bi se pri tem posvetovala z našim strežnikom. V njej sta javno na voljo dva vzorčna potrdila. Potrdilo za majico vsebuje podpis za celoten dokument, potrdilo za baterijo pa razkritje po posameznih poljih.

Obe sta odprti specifikaciji W3C: eddsa-jcs-2022 za podpis celotnega dokumenta, ecdsa-sd-2023 za razkritje po posameznih poljih. Izvesti ju lahko vsak, ki želi. Zaradi zahtevnosti tega postopka se mnogi za to ne bodo odločili: podpis celotnega dokumenta je bistveno cenejši za vzpostavitev in vzdrževanje, tistim, ki posredujejo le javne podatke, pa to zadostuje.

Dejstvo, da Time Machine obvlada oba postopka, je namerno in bo tako ostalo. Ne pripada nobeni platformi. Preveritelj, ki bi sprejemal le dražji postopek, bi bil orodje za nas in za nikogar drugega.

Komu se razkrijejo zaščitena polja

Vredno se je vprašati, komu se sploh razkrije kaj več kot le javni podatki. Ne naključni kupci, ti dobijo javni certifikat. To so predelovalci, ki ocenjujejo vrednost rabljenega akumulatorja, zavarovalnice, ki ocenjujejo tveganje, reciklatorji, ki razvrščajo kemikalije, in organi, ki sestavljajo primer. To so bralci, katerih odločitve so odvisne od denarja ali varnosti.

In prav ta polja so tista, ki v običajnem pristopu ostanejo nepokrita. Tisti, ki bi imeli največ razlogov, da bi želeli kriptografsko potrdilo, ga ravno za tista polja, ki so ključna za njihovo odločitev, ne dobijo.

Menimo, da bi moral certifikat za vse pomeniti enako. »Preverjeno s strani Transpareo« na razširjenem pregledu servisa pomeni isto kot na javnem potrdilu kupca: vsako prikazano področje izvira od izdajatelja in od takrat ni bilo spremenjeno. Znak, ki velja le za javna polja, je le polovičen znak.

Več, kot zahteva standard

Povedali bomo odkrito: nič od tega ni predpisano. ## StandardEN 18239 zahteva, da se dostop nadzira, in filter na strežniku dostop brezhibno nadzira. Tudi to, da so razkrita polja kriptografsko preverljiva, je nekaj, kar počnemo dodatno, ni pa to zahteva, ki jo od nas predpisuje uredba.

Prav zato je vredno, da to zapišemo. Bilo bi enostavno izpolniti črko standarda, dostaviti strežniški filter in stopnjo razglasiti za zaključeno. Mi pa raje želimo, da obljuba velja povsod, kjer se pojavi pečat. Saj je smisel podpisanega potnega lista prav v tem, da nihče ne mora zaupati platformi. Če srednjo stopnjo izvzamemo kot izjemo, s tem ponovno vzpostavimo prav tisto zaupanje, ki naj bi ga podpis odpravil.

Enako načelo povzroči, da se na določeno polje pozabi

Če se opredelimo za vsako polje posebej, to prinaša še eno lastnost, ki jo evropska zakonodaja dejansko zahteva. Splošna uredba o varstvu podatkov daje posameznikom pravico do izbrisa osebnih podatkov. Podatkovni niz, podpisan kot en blok, tega ne more izpolniti, ne da bi uničil lastni podpis.

Ker je tukaj vsako polje samostojno, je mogoče posamezno polje odstraniti, medtem ko ostalo ostane preverljivo. Če osebni podatki po pomoti pristanejo v potnem listu, se jih lahko brez težav ponovno odstrani, potni list pa ostane veljaven: ni potrebe po ponovni izdaji, zgodovina ostane neprekinjena. Regulativna polja, ki jih zakon zahteva, ostanejo nespremenjena; tisto, kar je mogoče izbrisati, se na zahtevo izbriše, tudi še leta kasneje.

Kljub temu povsem običajen potni list

Nič od tega ne naredi potnega lista za poseben objekt, ki ga lahko odprejo le naša orodja. Ostaja »Verifiable Credential« v formatu JSON-LD, formatu, h kateremu se usmerja svet spletnih standardov, in isti obliki, ki jo uporabljata Protokol ZN za preglednost (UN Transparency Protocol) ter ostalo okolje W3C.

Potni list, ki ga kupec skenira v brskalniku, je torej isti objekt, ki ga lahko prebere partner v podatkovnem prostoru, in vsak pregledovalec, ki deluje v skladu s standardi, ga lahko preveri, ne le naš. Dodatna varnost bralca nič ne stane in nikogar ne veže na nas.

Zakaj je to tehnično zahtevno

Najprej, da ne bi nastal napačen vtis: postopka nismo izumili mi. ecdsa-sd-2023 je javna specifikacija W3C, kriptografija, na kateri temelji, ni naša, in kdor jo želi implementirati, si jo lahko prebere. Težko ni imeti idejo. Težko je jo izgraditi tako, da bo potrdilo še čez deset let veljavno. Prav v tem je delo, in o tem se da povedati nekaj koristnega.

Razlika se zdi majhna, vendar spreminja temelj: običajni podpis izvaja izračune na podlagi bajtov dokumenta. Selektivno razkritje pa se izračuna na podlagi njegovih trditev. Potni list se pred podpisovanjem pripravi v standardizirano obliko, v kateri je vsak podatek predstavljen kot samostojen stavek. Šele tako je mogoče izpustiti en stavek, ne da bi to vplivalo na preostale.

S tem se pojavi problem, ki ga bajtni podpis nima: ista standardizirana oblika mora čez deset let ponovno natančno ustrezati. Ne približno, ampak znak za znakom, sicer dokazilo ne bo več veljavno. Temu stojijo na poti tri stvari, ki so vse tri neopazne.

Številke izgubijo svoj tip. Če številko zapišemo kot navaden JSON, se med potjo izgubi, kakšna številka je bila. Vrednost, kot je 2,0, se po prehodu skozi JSON vrne kot 2. Za človeka je to isto, za standardizirano obliko pa je to drugačen stavek, zato preverjanje ne uspe.

Oznake še ne pomenijo pomena. Da bi nastala standardizirana oblika, mora vsako ime polja voditi do enoznačnega pomena. Če eden manjka, polje med pretvorbo tiho izgine. Takrat je sicer navedeno v potrdilu, vendar ga dokazilo ne zajema, in nihče tega ne opazi.

Pomeni se običajno nahajajo na spletu. Ta preslikava je zapisana v slovarju, ki ga večina orodij med preverjanjem prenese s spleta. Kdor to stori, prepušča preverljivost svojega potnega lista odvisnosti od tega, da bo tuja naslov v desetih letih še vedno odgovarjala, in sicer nespremenjena.

Kako smo to rešili

Te tri točke smo odpravili že pri izvoru, namesto da bi jih odpravljali kasneje.

Tipi. Vsaka vrednost se zapiše s svojim tipom, objava pa se prekine, takoj ko se v standardizirani obliki pojavi tudi le eno število brez tipa. Napaka se tako pojavi takoj, ko stane eno vrstico, namesto da bi se pojavila šele leta kasneje kot nepojasnjena kršitev preverjanja.

Slovarji. Vsak slovar, na katerega se sklicuje potni list, je pri nas na voljo lokalno in se nikoli ne pridobiva prek omrežja. Neznani naslov pomeni trdno prekinitev pri podpisovanju, ne pa tihega povratka k praznemu rezultatu.

Identifikatorji. Vsak vozlišče v dokumentu nosi stabilen identifikator, da standardizirana oblika ostane reproduktibilna, namesto da bi se pri vsakem prehodu dodeljevala nova pomožna imena.

Najbolj občutljiv del je v sistemu »Bring Your Own Key«. Za vsako izdajo je potreben dodatni, kratkotrajni ključ, s katerim se posamezna polja, ki se lahko razkrijejo, podpisujejo. Ta ključ ustvari in zavrže izdajatelj sam. Če bi bil pri nas, bi lahko posamezna polja naknadno izmislili, neodvisnost podpisa izdajatelja pa bi bila le navidezna. Preden zaupamo vrnjenemu dokazilu, ga preverimo glede na shranjeni javni ključ.

Vsak potni list vsebuje dva takšna dokazila, enega izdajatelja in enega podjetja Transpareo, pri čemer se vsak od njiju za bralca izpelje neodvisno. Dva podpisa, dve med seboj neodvisni avtoriteti, tudi za posamezno razkrito polje.

Za nas je ta vložek na pravem mestu. Preverljivosti nismo dodali naknadno; platforma je bila zasnovana okoli tega že od prve različice naprej. Vsak potni list se ob objavi podpiše in poveže s prejšnjo različico. Nepremenljiv desetletni arhiv je vzpostavljen in začne delovati takoj, ko so potni listi registrirani v registru EU-DPP. Podpisovanje vsakega polja namesto celotnega bloka je razširitev tega jedra, ne pa dodatek k nečemu, kar za to ni bilo nikoli namenjeno.

Kje smo

Če stvar poenostavimo, je izbira preprosta. Lahko razkrijete zaščitena polja in bralca prosite, naj zaupa vašemu filtru - to izpolnjuje standard. Ali pa jih lahko razkrijete in hkrati priložite dokaz - to izpolnjuje višje zahteve, ki si jih po našem mnenju ta polja zaslužijo.

Odločili smo se za dokaz, za vsakega bralca, ker bi moral pečat pomeniti eno in isto, ne glede na to, kdo ga pogleda. Kdor želi videti, kako deluje: obe zgoraj povezani demonstraciji se preverjata neposredno v brskalniku, brez povezave z internetom, zgolj z javnim ključem.

Novosti glede ravni dostopa in dokazil

Selektivno razkritje, podpisi in razvoj standardov DPP - vsak mesec v strnjenem pregledu v vašem nabiralniku.