Skaitmeninis produkto pasas ne visiems rodo tą patį. Pirkėja mato viešus duomenis. Remonto įmonė ar perdirbėjas mato daugiau. Rinkos priežiūros institucija mato viską. Tai aišku, ir Europos standartai dabar tai aiškiai nustato.
Įdomus klausimas yra šiek tiek subtilesnis: jei kam nors atskleidžiami ne tik vieši duomenys, bet ir apsaugoti laukeliai, ar jis gali įrodyti, kad būtent šie laukeliai yra autentiški? Arba ar jis turi pasitikėti, kad platforma juos teisingai atrinko ir perdavė nepakeistus?
Daugumos platformų atveju sąžiningas atsakymas yra: pasitikėjimas. Mes savo platformą sukūrėme taip, kad atsakymas būtų „įrodymas“ - ne tik viešųjų laukelių atveju, bet ir kiekvieno laukelio, kuris pridedamas tik atskleidimo metu. Kodėl šis skirtumas yra svarbus ir kodėl mes pasirinkome sudėtingesnį kelią.
Prieigos taisyklę visi laikosi vienodai
EN 18239, Europos standartas, reglamentuojantis prieigos teises, saugumą ir konfidencialumą DPP, reikalauja prieigos kontrolės pagal kiekvieną duomenų elementą: kiekvienam laukeliui yra nustatyta taisyklė, kas jį gali matyti. Tai teisingas reikalavimas, ir jį įvykdyti nėra sunku. Kokį statusą iš tikrųjų turi šios normos, išsamiai išdėstėme straipsnyje „Suderintos normos“.
Įprastas būdas tai pasiekti - filtravimas serverio pusėje. Serveris žino, kas teikia užklausą, patikrina, ką šis asmuo gali matyti, ir pateikia būtent tą informacijos fragmentą. Prieigos kontrolė: atlikta. Daugiau standarto nereikalaujama.
Tačiau yra vienas „kabliukas“, kurio standartas neatsižvelgia: Ištrauka gaunama nepasirašyta. Skaitytojas gauna jam paruoštą vaizdą ir turi tikėti, kad serveris jį atrinko sąžiningai ir kelionės metu nieko nepakeitė. Viešam informaciniam lapui tai tinka. Tačiau kai kalbama apie vertę, kuria perdirbėjas grindžia naudotos baterijos kainą, tai reikalauja daug pasitikėjimo.
Kur pavienis parašas pasiekia savo ribas
Akivaizdus sprendimas - pasirašyti duomenis. Abiem skalės kraštams puikiai tinka įprastas parašas: pasirašyti viešą vaizdą, pasirašyti visą duomenų rinkinį, ir abu patikrinti pagal viešąjį raktą, be tarpinio serverio. Kaip tai vyksta išsamiai, aprašyta straipsnyje „Parašai ir sertifikatai DPP sistemoje“.
Problema kyla viduryje. Visą dokumentą apimantis parašas apima tik vieną laukų rinkinį, būtent tuos, kurie buvo parašo metu. Jei įgaliotam skaitytojui papildomai atskleidžiama apsaugota laukelė, ši laukelė lieka už pasirašyto duomenų rinkinio ribų ir jam pasiekia neapsaugota. Jei vietoj to iš pat pradžių pasirašomas visas duomenų rinkinys, parašas apima viską, tačiau tuomet reikėtų viską parodyti visiems.
Taigi tarpiniai lygmenys lieka neapsaugoti: remonto dirbtuvės, draudikas, perdirbėjas. Jei norėtume iš anksto pasirašyti kiekvieną galimą „kas ką mato“ derinį, kiekvienam deriniui reikėtų atskiro pasirašyto dokumento, o derinių skaičius eksponentiškai augtų su kiekviena nauja prieigos grupe. To niekas nedaro. Grįžtama prie nepasirašyto serverio filtro, o tarpinis lygmuo vėl grindžiamas pasitikėjimu.
Kiekvieno lauko pasirašymas atskirai
Yra geresnė konstrukcija, ir būtent ant jos mes kuriame platformą. Užuot pasirašęs gatavą dokumentą kaip vieną bloką, išdavėjas per vieną pasirašymo ciklą atskirai nustato kiekvieną laukelį (standartų žinovams: W3C sertifikatas „ecdsa-sd-2023“ selektyviam atskleidimui).
Kiekvienas vaizdas prasideda nuo viešojo branduolio
Kiekvienas vaizdas prasideda nuo tų pačių viešųjų laukelių. Tai, ką skaitytojas mato toliau, pridedama laukelis po laukelio, ir kiekvienas iš šių laukelių vis tiek veda atgal prie išdavėjo viešojo rakto - neprisijungus prie interneto, be pakartotinio pasirašymo ir be pasitikėjimo institucija, kuri sudarė šį vaizdą. Laukeliai, kuriems netaikoma teisė, tiesiog nėra. Neužtušuoti, o iš viso jų nėra, ir apie juos nieko neprasiskverbia.
Pavyzdys: remonto dirbtuvės
Kaip tai konkrečiai atrodo, parodo šis pavyzdys. Remonto įmonė pareiškė teisėtą interesą dėl akumuliatoriaus - tai vienas iš prieigos lygių, kuriuos aiškiai numato Akumuliatorių reglamentas. Jos dirbtuvių sistema prisijungia prie mūsų sąsajos naudodama savo API raktą ir atsisiunčia pasą.
Atsakymas yra tas pats viešasis pasas, kurį mato ir pirkėja, tik su vienu laukeliu daugiau: išmontavimo instrukcija, kuri atskleidžiama tik įgaliotiems skaitytojams. Nėra antro dokumento, nėra specialios versijos - tas pats pasas su vienu laukeliu daugiau.
Prieš įmonei pasikliaujant šiuo laukeliu, jos programinė įranga patikrina pateiktą įrodymą, lygindama jį su išdavėjo viešuoju raktu. Jei patikrinimas pavyksta, įskaitant ir papildomą laukelį, ji žino: šios instrukcijos yra tiksliai tokios pačios, kokias pateikė gamintojas, ir nei mes, nei kas nors kitas jų nekeičia. Jei patikrinimas nepavyksta, jis tai žino lygiai taip pat tikrai ir visą peržiūrą atideda į šalį.
Mūsų indėlis čia sąmoningai yra nedidelis. Užtikrinti, kad jis gautų būtent tuos laukelius, kurie jam priklauso, lieka mūsų prieigos kontrolės užduotis; tą patį atlieka ir bet kuris serverio filtras. Naujas yra kitas žingsnis: ar tai, kas pasiekia jį, yra autentiška, jis patikrina pats, neklausdamas mūsų.
Kodėl „nesulaužytas“ yra esminis dalykas
Įsivaizduokite notarą, kuris nepatvirtina laiško kaip visumos, o kiekvieną pastraipą atskirai. Viešąjį laišką gauna kiekvienas. Kas turi teisę į daugiau, gauna papildomus paragrafus, ir kiekvienas iš jų toliau turi to paties notaro antspaudą.
Kodėl čia svarbu, kad antspaudas būtų „nesulaužytas“, verta paaiškinti dar vienu sakiniu. Nesulaužytas antspaudas nereiškia, kad turinys yra teisingas. Jis reiškia: būtent tai parašė išdavėjas, ir nuo to laiko niekas nepadarė jame nė menkiausio pakeitimo. Taigi iš pasitikėjimo klausimo iškrenta kiekvienas, kuris tik perdavė dokumentą toliau - tarpinė saugykla, tinklas, archyvas, mes. Kas jums davė pasą, jau nebeturi reikšmės.
Be to, antspaudas yra binarinis. Jis arba laikosi, arba ne - pusiau sulaužyto antspaudo nėra. Jei jis sulaužomas, jūs nesužinosite, kuris sakinys buvo pakeistas, o tik tai, kad nebegalite pasitikėti visu dokumentu. Todėl tai nėra laipsniškas skirtumas, ar papildomi laukeliai su antspaudu pasiekia jus, ar be jo: Be antspaudo jie nėra šiek tiek silpniau patvirtinti - jie visai nėra patvirtinti.
Abu peržiūros būdai
Kiekvienas gali tai patikrinti pats. „Transpareo Time Machine“ yra mūsų atviro kodo produktų pasų peržiūros programa: Ji peržiūri paso versijų istoriją ir tuo pačiu perskaičiuoja kiekvieną parašą žiūrovo naršyklėje, nesikreipdama į mūsų serverį. Joje viešai veikia du pavyzdiniai pasai. Marškinėlių pasas turi parašą, apimantį visą dokumentą, o baterijos pasas - atskirų laukelių atskleidimą.
Abi yra atviros W3C specifikacijos: eddsa-jcs-2022 - visam dokumentui taikomam parašui, ecdsa-sd-2023 - atskirų laukelių atskleidimui. Tai gali įgyvendinti kiekvienas, kas nori. Sunkumai yra priežastis, kodėl daugelis to nedarys: parašą, apimantį visą dokumentą, kurti ir prižiūrėti yra žymiai pigiau, o tiems, kurie teikia tik viešus duomenis, to pakanka.
Tai, kad „Time Machine“ moka naudoti abu metodus, yra tyčinis sprendimas ir taip liks. Ji nepriklauso jokiai platformai. Tikrintojas, kuris priimtų tik brangesnį metodą, būtų naudingas tik mums ir niekam kitam.
Kam atskleidžiami apsaugoti laukai
Verta paklausti, kam, be viešųjų duomenų, apskritai kas nors yra atskleidžiama. Ne atsitiktinei pirkėjai - ji gauna viešąjį sertifikatą. Tai yra perdirbėjas, kuris vertina, kiek vertas naudotas akumuliatorių rinkinys, draudikas, kuris įvertina riziką, perdirbėjas, kuris rūšiuoja chemines medžiagas, ir valdžios institucija, kuri nagrinėja bylą. Tai yra skaitytojai, kurių sprendimai priklauso nuo pinigų ar saugumo.
Ir būtent šie laukai įprastu metodu lieka neapimti. Tas, kuris turėtų daugiausia priežasčių norėti kriptografinio patvirtinimo, jo negauna būtent tiems laukams, nuo kurių priklauso jo sprendimas.
Manome, kad sertifikavimo ženklas turėtų reikšti tą patį visiems. Užrašas „Patikrinta „Transpareo““ išplėstiniame remonto dirbtuvių vaizde reiškia tą patį, kaip ir pirkėjos viešajame pase: kiekviena parodyta sritis yra išdavėjo pateikta ir nuo to laiko nebuvo keista. Sertifikatas, kuris galioja tik viešiesiems laukeliams, yra tik pusė sertifikato.
Daugiau, nei reikalauja standartas
Sakome atvirai: nė viena iš šių nuostatų nėra privaloma. Standartas EN 18239 reikalauja, kad prieiga būtų kontroliuojama, o serverio pusėje esantis filtras prieigą kontroliuoja nepriekaištingai. Net ir atskleistų laukelių kriptografinis patikrinimas yra tai, ką mes darome papildomai, o ne privalomas reikalavimas, kurio iš mūsų reikalauja reglamentai.
Būtent todėl tai verta užrašyti. Visas pasirašyto paso prasmė yra ta, kad niekas neturi pasitikėti platforma. Išimtis, taikoma vidutiniam lygiui, sugrąžina būtent tą pasitikėjimą, kurį parašas turėjo panaikinti.
Tas pats principas leidžia pamiršti laukelį
Atskirai apibrėžiant kiekvieną laukelį atsiranda antra savybė, kurios iš tiesų reikalauja Europos teisė. Bendrasis duomenų apsaugos reglamentas suteikia žmonėms teisę reikalauti, kad asmens duomenys būtų ištrinti. Duomenų rinkinys, pasirašytas kaip vienas blokas, negali to padaryti nesunaikindamas savo paties parašo.
Kadangi čia kiekvienas laukas yra atskiras, galima pašalinti vieną lauką, o visa kita ir toliau lieka patikrinama. Jei asmens duomenys netyčia patenka į pasą, jie gali būti švariai pašalinti, o pasas lieka galiojantis: nereikia išduoti naujo paso, istorija lieka nesugadinta. Reglamentuojami laukeliai, kuriuos pagal įstatymą privaloma saugoti, lieka nepakitę; tai, kas gali būti ištrinta, gali būti ištrinta pagal prašymą net praėjus metams.
Vis dėlto tai visiškai įprastas pasas
Nė vienas iš šių aspektų nepadaro paso ypatingu objektu, kurį gali atidaryti tik mūsų įrankiai. Jis lieka „Verifiable Credential“ JSON-LD formatu - formatu, kuriuo orientuojasi interneto standartų pasaulis, ir kurį naudoja Jungtinių Tautų skaidrumo protokolas bei visa W3C aplinka.
Taigi pasas, kurį pirkėja nuskenuoja naršyklėje, yra tas pats objektas, kurį gali nuskaityti duomenų saugyklos partneris, ir jį gali patikrinti bet kuris standartus atitinkantis tikrintojas, ne tik mūsų. Papildomas saugumas skaitytojui nieko nekainuoja ir niekam nesieja su mumis.
Kodėl tai techniškai sudėtinga
Pirmiausia, kad nesusidarytų klaidingas įspūdis: mes šio metodo neišradome. ecdsa-sd-2023 yra vieša W3C specifikacija, joje naudojama kriptografija nėra mūsų sukurta, ir kas nori ją įgyvendinti, gali apie tai paskaityti. Sunku ne sugalvoti idėją. Sunku ją įgyvendinti taip, kad pasas veiktų dar ir po dešimties metų. Būtent čia slypi darbas, ir apie tai galima pasakyti kažką naudingo.
Skirtumas atrodo nedidelis, tačiau jis keičia pagrindą: įprastas parašas atlieka skaičiavimus remdamasis dokumento baitais. Selektyvus atskleidimas skaičiuojamas pagal jo teiginius. Prieš pasirašant pasas paverčiamas standartizuota forma, kurioje kiekvienas duomenų elementas pateikiamas kaip atskiras, savarankiškas teiginys. Tik taip galima praleisti vieną teiginį, nepažeidžiant likusiųjų.
Taip atsiranda problema, kurios neturi baitų parašo: ta pati standartizuota forma po dešimties metų turi būti atkurta tiksliai. Ne apytikriai, o simbolis po simbolio, kitaip įrodymas nebetiks. Tam trukdo trys dalykai, ir visi trys yra nepastebimi.
Skaičiai praranda savo tipą. Jei skaičių užrašome kaip paprastą JSON, pakeliui prarandama informacija, kokio tipo skaičius tai buvo. Tokia reikšmė kaip 2,0 po apdorojimo JSON grįžta kaip 2. Žmogui tai tas pats, bet standartizuotai formai - kitas sakinys, ir patikrinimas žlunga.
Pavadinimai dar nereiškia prasmės. Kad susidarytų standartizuota forma, kiekvienas lauko pavadinimas turi būti susietas su vienareikšme prasme. Jei trūksta vienos, laukas konvertavimo metu tyliai išnyksta. Tada jis lieka pase, bet patvirtinimas jo neapima, ir niekas to nepastebi.
Reikšmės paprastai yra internete. Šis atitikimas yra žodyne, kurį dauguma įrankių tikrinimo metu atsisiunčia iš interneto. Kas taip daro, savo paso patikrinamumą susieja su tuo, ar svetimas adresas po dešimties metų vis dar atsakys, ir būtent nepakitęs.
Kaip mes tai išsprendėme
Mes uždarėme šiuos tris taškus pačioje šaknyje, o ne bandėme juos sugauti vėliau.
Tipai. Kiekviena reikšmė rašoma su savo tipu, o skelbimas nutraukiamas, vos tik standartizuotoje formoje pasirodo bent vienas skaičius be tipo. Taigi klaida aptinkama ten, kur ji kainuoja vieną eilutę, o ne po kelerių metų kaip nepaaiškinamas patikrinimo pažeidimas.
Žodynai. Kiekvienas žodynas, į kurį nuorodoje nurodo pasas, yra saugomas lokaliai ir niekada neatsisiunčiamas iš interneto. Nežinomas adresas reiškia staigų pasirašymo nutraukimą, o ne tylų grįžimą prie tuščio rezultato.
Identifikatoriai. Kiekvienas dokumento mazgas turi stabilų identifikatorių, kad standartizuota forma išliktų atkuriamoji, o ne kiekvieno apdorojimo metu būtų priskiriami nauji pagalbiniai pavadinimai.
Sudėtingiausia dalis yra „Bring Your Own Key“ (atsinešk savo raktą). Kiekvienam išdavimui reikalingas papildomas, trumpalaikis raktas, kuriuo atskirai pasirašomi atskleidžiami laukai. Šį raktą pats išdavėjas sukuria ir išmeta. Jei raktas būtų pas mus, galėtume vėliau sugalvoti atskirus laukelius, o eksponento parašo nepriklausomybė būtų tik deklaratyvi. Grįžtantį patvirtinimą patikriname pagal saugomą viešąjį raktą, prieš juo pasitikėdami.
Kiekviename pase yra du tokie įrodymai: vienas išdavėjo, kitas - „Transpareo“, ir abu jie skaitytojui pateikiami nepriklausomai vienas nuo kito. Dvi parašai, dvi viena nuo kitos nepriklausomos institucijos - net ir vienam atskirai atskleistam laukeliui.
Mūsų nuomone, šios pastangos yra pagrįstos. Patikrinamumo funkcijos nebuvo įdiegtos vėliau; platforma nuo pat pirmosios versijos buvo sukurta būtent šiam tikslui. Kiekvienas pasas pasirašomas jį paskelbiant ir susiejamas su ankstesne versija. Sukurtas nepakeičiamas dešimties metų archyvas, kuris įsigalioja, kai pasai užregistruojami ES DPP registre. Kiekvieno lauko, o ne viso bloko, pasirašymas yra šio pagrindinio principo išplėtimas, o ne priedas prie to, kas niekada nebuvo tam skirta.
Kur esame
Mes nusprendėme pateikti įrodymą kiekvienam skaitytojui, nes antspaudas turėtų reikšti tą patį, nesvarbu, kas į jį žiūri. Kas nori pamatyti, kaip tai veikia: abi aukščiau pateiktos nuorodos į demonstracijas patikrinamos tiesiogiai naršyklėje, nekreipiantis į serverį.
Klausimai apie šį įrašą
Ar kokia nors norma nustato, kad parašas turi būti pateiktas kiekviename laukelyje?
Ne. Standartas EN 18239 reikalauja, kad prieiga būtų kontroliuojama pagal kiekvieną duomenų elementą, o serverio pusėje esantis filtras tai visiškai užtikrina. Tai, kad atskleidžiami laukai yra patikrinami, yra mūsų sprendimas, o ne reikalavimas, kurį nustato kokia nors reguliavimo institucija. Manome, kad šios pastangos yra pateisinamos, nes pasirašyto paso esmė yra ta, kad niekas neturi pasitikėti platforma - pašalinus tarpinį lygmenį, būtent tas pasitikėjimas ir atgaunamas. Kokį statusą iš tikrųjų turi šie standartai, nurodyta mūsų straipsnyje apie suderintus standartus.
Kuo konkrečiai jis skiriasi nuo serverio filtro?
Svarbu ne tai, kas matoma, o tai, kas pasiekiama. Abiem atvejais skaitytojui tiksliai parodomi laukai, į kuriuos jis turi teisę. Naudojant serverio filtrą, ištrauka gaunama be parašo, todėl skaitytojas turi tikėti, kad serveris buvo pasirinktas sąžiningai ir kad perdavimo metu niekas nieko nepakeitė. Naudojant laukų patvirtinimus, tas pats fragmentas gaunamas su patvirtinimu, kuris neprisijungus prie interneto leidžia atsekti išdavėjo viešąjį raktą, ir niekam nereikia mūsų klausti. Viešam informaciniam lapui šis skirtumas yra grynai akademinis, tačiau vertinant, kokia kaina perdirbėjas nustato naudotos baterijos kainą, tai yra esminis klausimas.
Ar skaitytojams tam reikalinga speciali programinė įranga?
Ne. Pasas išlieka „Verifiable Credential“ formatu JSON-LD, o jo patikimumą užtikrina viešasis W3C kriptografinis rinkinys „ecdsa-sd-2023“, todėl bet kuris standartą atitinkantis tikrintojas gali jį patikrinti. Mūsų atviro kodo peržiūros programa „Transpareo Time Machine“ kiekvieną parašą perskaičiuoja skaitytojo naršyklėje, nesikreipdama į mūsų serverį, ir sąmoningai palaiko paprastą viso dokumento parašą. Tikrintojas, kuris priimtų tik mūsų metodą, būtų naudingas tik mums, o niekam kitam.
Kam iš viso atskleidžiami apsaugoti laukai?
Ne atsitiktinei pirkėjai - jai išduodamas viešasis leidimas. Tai yra remonto įmonė, turinti registruotą teisėtą interesą, perdirbėjas, vertinantis naudoto baterijų komplekto vertę, perdirbėjas, rūšiuojantis chemines medžiagas, draudikas, nustatantis rizikos kainą, ir valdžios institucija, nagrinėjanti atvejį - skaitytojai, kurių sprendimai priklauso nuo pinigų ar saugumo. ES baterijų reglamente numatyti būtent šie etapai. Tai taip pat yra tie skaitytojai, kurie, taikant įprastą požiūrį, būtent tose srityse, kuriomis grindžiami jų sprendimai, negauna jokių įrodymų.
Mes skelbiame tik viešus duomenis. Ar mums to reikia?
Tikriausiai ne, ir mes tai taip ir sakome. Visą dokumentą apimantis parašas, sukurtas naudojant kriptografinę programinę įrangą „eddsa-jcs-2022“, apima pasą, kurio visi laukeliai yra vieši, ir jį kurti bei prižiūrėti yra žymiai pigiau. Atskleidimas pagal laukelius tampa naudingas, kai atsiranda antra tikslinė grupė, pavyzdžiui, remonto tinklas, perdirbimo įmonė ar valdžios institucija, kuriai kitaip pateiktumėte nepasirašytus išrašus. Abu metodai yra atviros W3C specifikacijos, ir abu šiuo metu veikia „Time Machine“, marškinėlių pase ir baterijos pase.
Ar vėliau galima ištrinti asmens duomenis, neanuliuojant paso?
Taip, ir tai iš tiesų yra numatyta Europos Sąjungos teisėje. Bendrasis duomenų apsaugos reglamentas suteikia asmenims teisę reikalauti, kad jų asmens duomenys būtų ištrinti, o kaip blokas pasirašytas duomenų rinkinys negali to padaryti nesunaikindamas savo paties parašo. Kadangi čia kiekvienas laukelis yra nustatytas atskirai, galima pašalinti vieną laukelį, o visa kita ir toliau lieka patikrinama - nereikia išduoti naujo dokumento, neatsiranda sujaukta versijų istorija. Reglamentuojami laukeliai, kuriuos pagal įstatymą privaloma išsaugoti, lieka nepakitę.
Kas saugo parašo raktą?
Kiekvieną pasą lydi du patvirtinimai, ir vienas iš jų gali būti jūsų. Kiekvienam išdavimui papildomai reikalingas trumpalaikis raktas, kuris atskirai pasirašo atskleidžiamus laukelius; jį pats sukuria ir sunaikina išdavėjas, nes jei jis būtų pas mus, galėtume vėliau sugalvoti atskirus laukelius, o išdavėjo parašo nepriklausomumas būtų tik deklaratyvus. Prieš patikėdami grąžinamuoju patvirtinimu, mes jį patikriname pagal saugomą viešąjį raktą. Taigi kiekviename pase yra du patvirtinimai iš dviejų nepriklausomų institucijų - tiek atskirai atskleidžiamam laukeliui, tiek visam duomenų rinkiniui.
Ar pasas bus galiojantis po dešimties metų?
Būtent čia ir slypi sunkumas. Selektyvus atskleidimas remiasi dokumento turiniu, o ne jo baitų skaičiumi, taigi ta pati standartizuota forma po dešimtmečio turi būti atkurta simbolis po simbolio. Tris dalykus, kurie tai sutrikdo, mes pašalinome iš šaknų - kiekviena reikšmė rašoma nurodant jos tipą, o skelbimas nutraukiamas, jei pasitaiko skaičius be tipo, kiekvienas žodynas saugomas lokaliai ir niekada neatsisiunčiamas iš tinklo, o kiekvienas mazgas turi stabilų identifikatorių, kad standartizuota forma išliktų atkuriamoji. Sukurta nekintama dešimties metų archyvo sistema, kuri pradės veikti, kai tik pasai bus įregistruoti ES registre, kuris nuo 2026 m. liepos 20 d. veikia pagal Įgyvendinimo reglamentą (ES) 2026/1778. Daugiau informacijos apie tai rasite mūsų registro reglamento analizėje.



