Ujawnianie bez utraty sygnatury

Ujawnianie bez utraty sygnatury

Każdy czytelnik paszportu produktu otrzymuje te same dane publiczne, a niektórzy dodatkowo mają dostęp do pól chronionych. Pytanie brzmi jednak, czy te dodatkowe pola są poparte odpowiednimi dowodami. Podpisujemy każde pole z osobna, tak aby nawet ujawnione pole można było zweryfikować za pomocą klucza publicznego - w trybie offline, bez konieczności zwracania się do nas z zapytaniem.

Cyfrowy paszport produktu nie pokazuje wszystkim tego samego. Kupująca widzi dane publiczne. Warsztat naprawczy lub firma zajmująca się regeneracją widzi więcej. Organ nadzoru rynku widzi wszystko. Jest to jasno określone, a normy europejskie wyraźnie to obecnie zapisują.

Ciekawe pytanie brzmi jednak inaczej: jeśli komuś udostępniane są pola chronione, wykraczające poza dane publiczne, czy może on udowodnić, że właśnie te pola są autentyczne? A może musi polegać na tym, że platforma prawidłowo je wybrała i przekazała bez zmian?

W przypadku większości platform szczera odpowiedź brzmi: zaufanie. Naszą platformę zbudowaliśmy tak, aby odpowiedzią było „dowód” - nie tylko w odniesieniu do pól publicznych, ale do każdego pola, które pojawia się dopiero w momencie ujawnienia. Dlaczego ta różnica ma znaczenie i dlaczego wybraliśmy w tym zakresie bardziej pracochłonną drogę.

Wszyscy w równym stopniu spełniają zasadę dostępu

NormaEN 18239, europejska norma dotycząca praw dostępu, bezpieczeństwa i poufności w DPP, wymaga kontroli dostępu dla każdego elementu danych: dla każdego pola istnieje zasada określająca, kto może je przeglądać. Jest to właściwy wymóg i nie jest trudno go spełnić. Jaki status mają w ogóle te normy, wyjaśniliśmy w artykule Normy zharmonizowane.

Typowym sposobem realizacji tego wymogu jest filtrowanie po stronie serwera. Serwer wie, kto wysyła zapytanie, sprawdza, co ta osoba może zobaczyć, i zwraca dokładnie ten fragment. Kontrola dostępu: załatwiona. Norma nie wymaga niczego więcej.

Jest jednak pewien haczyk, którym norma się nie zajmuje: Fragment ten dociera do nas bez podpisu. Czytelnik otrzymuje widok przygotowany specjalnie dla niego i musi wierzyć, że serwer dokonał uczciwego wyboru i nie zmienił niczego podczas przesyłania. W przypadku publicznej broszury jest to w porządku. Jednak w przypadku wartości, na której podmiot przetwarzający opiera cenę używanej baterii, wymaga to zbyt dużej wiary.

Gdzie pojedynczy podpis osiąga swoje granice

Oczywistym rozwiązaniem jest podpisanie danych. W obu skrajnych przypadkach dobrze sprawdza się zwykły podpis: podpisanie widoku publicznego, podpisanie pełnego zestawu danych, a następnie sprawdzenie obu za pomocą klucza publicznego, bez pośrednictwa serwera. Szczegóły tego procesu opisano w artykule Podpisy i certyfikaty w DPP.

Problem pojawia się w środku. Podpis na całym dokumencie obejmuje dokładnie jeden zestaw pól, a mianowicie te, które były obecne w momencie podpisywania. Jeśli dodatkowo udostępni się uprawnionemu czytelnikowi chronione pole, pole to znajduje się poza podpisanym zbiorem i dociera do niego bez pokrycia. Jeśli natomiast od samego początku podpisze się pełny zestaw danych, podpis obejmuje wprawdzie wszystko, ale wtedy trzeba by pokazać wszystko każdemu.

Poziomy pośrednie wypadają zatem z systemu: warsztat naprawczy, ubezpieczyciel, firma zajmująca się recyklingiem. Gdyby chcieć z góry podpisać każdą możliwą kombinację „kto widzi co”, potrzebny byłby osobny podpisany dokument dla każdej kombinacji, a liczba kombinacji gwałtownie rośnie wraz z każdą kolejną grupą użytkowników. Nikt tego nie robi. Wraca się do niepodpisanego filtra serwerowego, a pośredni poziom znów opiera się na zaufaniu.

Podpisywanie każdego pola z osobna

Istnieje lepsza konstrukcja i to na niej budujemy naszą platformę. Zamiast podpisywać gotowy dokument jako jeden blok, wystawca w ramach jednego cyklu podpisywania określa każde pole z osobna (dla znawców standardów: certyfikat W3C ecdsa-sd-2023 dotyczący selektywnego ujawniania).

Każdy widok zaczyna się od rdzenia publicznego

Każdy widok zaczyna się od tych samych pól publicznych. To, co czytelnik widzi ponadto, jest dodawane pole po polu, a każde z tych pól nadal prowadzi do klucza publicznego wystawcy - w trybie offline, bez ponownego podpisywania i bez zaufania do podmiotu, który skompilował ten widok. Pola, do których nie ma uprawnień, po prostu nie istnieją. Nie są zamazane, tylko w ogóle ich nie ma, a żadna informacja na ich temat nie wycieka.

Dlaczego „nieprzerwaność” jest sednem sprawy

Wyobraźmy sobie notariusza, który nie poświadcza listu jako całości, lecz każdy akapit z osobna. Publiczny list otrzymuje każdy. Kto ma prawo do większej ilości informacji, otrzymuje dodatkowe akapity, a każdy z nich nadal opatrzony jest pieczęcią tego samego notariusza. W standardowej procedurze platforma przepisuje te akapity za Ciebie, a to, co do Ciebie dociera, opatrzone jest już tylko jej słowem.

Dlaczego tak ważne jest, by pieczęć była „nienaruszona”, warto wyjaśnić w jednym zdaniu. Nienaruszona pieczęć nie oznacza, że treść jest prawdziwa. Oznacza ona: właśnie to napisał wystawca i od tego czasu nikt nie zmienił w niej ani jednego znaku. W ten sposób z kwestii zaufania wyklucza się każdy, kto jedynie przekazał dokument dalej - pośrednik, sieć, archiwum, my. Nie ma już znaczenia, kto przekazał Państwu paszport.

A pieczęć ma charakter binarny. Albo się utrzymuje, albo nie - nie ma czegoś takiego jak pieczęć „na wpół złamana”. Jeśli pieczęć zostanie złamana, nie dowiesz się, które zdanie zostało zmienione, a jedynie to, że nie możesz już ufać całemu dokumentowi. Dlatego nie jest to różnica stopniowa, czy dodatkowe pola dotrą do Ciebie z pieczęcią, czy bez niej: bez pieczęci nie są one tylko nieco słabiej potwierdzone, ale w ogóle nie są potwierdzone.

Oba sposoby przeglądania

Każdy może to sprawdzić samodzielnie. Transpareo Time Machine to nasza aplikacja o otwartym kodzie źródłowym do przeglądania paszportów produktów: przegląda historię wersji paszportu i przy tym oblicza każdy podpis w przeglądarce użytkownika, bez konieczności zwracania się do naszego serwera. W aplikacji tej publicznie dostępne są dwa przykładowe paszporty. Paszport koszulki zawiera podpis obejmujący cały dokument, natomiast paszport baterii - ujawnienie informacji w poszczególnych polach.

Oba są otwartymi specyfikacjami W3C: eddsa-jcs-2022 dla podpisu obejmującego cały dokument, ecdsa-sd-2023 dla ujawniania danych w poszczególnych polach. Każdy, kto chce, może je wdrożyć. Wysiłek związany z wdrożeniem jest powodem, dla którego wielu tego nie zrobi: podpis obejmujący cały dokument jest znacznie tańszy w tworzeniu i utrzymaniu, a komu wystarcza dostarczanie wyłącznie danych publicznych, ten sobie z tym poradzi.

To, że Time Machine obsługuje obie metody, jest zamierzone i tak pozostanie. Nie należy ona do żadnej platformy. Kontroler, który akceptuje wyłącznie droższą metodę, byłby narzędziem wyłącznie dla nas i dla nikogo innego.

Komu ujawniane są pola chronione

Warto zadać sobie pytanie, komu w ogóle ujawniane są informacje wykraczające poza dane publiczne. Nie przypadkowej kupującej - ona otrzymuje publiczny certyfikat. Są to: podmiot przetwarzający, który ocenia wartość używanego zestawu akumulatorów; ubezpieczyciel, który wycenia ryzyko; podmiot zajmujący się recyklingiem, który sortuje składniki chemiczne; oraz organ, który prowadzi sprawę. To właśnie oni są odbiorcami, od których decyzji zależy pieniądze lub bezpieczeństwo.

I to właśnie te pola pozostają w standardowym podejściu nieujawnione. Kto miałby największy powód, by domagać się kryptograficznego potwierdzenia, nie otrzymuje go właśnie w odniesieniu do tych pól, które mają kluczowe znaczenie dla jego decyzji.

Uważamy, że znak certyfikacyjny powinien oznaczać to samo dla wszystkich. Napis „Sprawdzone przez Transpareo” w rozszerzonym widoku warsztatu naprawczego oznacza to samo, co na publicznym certyfikacie nabywczyni: każdy wyświetlany obszar pochodzi od wystawcy i od tego czasu nie został zmieniony. Pieczęć, która obejmuje wyłącznie pola publiczne, jest pieczęcią tylko w połowie.

Więcej niż wymaga norma

Mówimy to otwarcie: nic z tego nie jest wymagane. ## NormaEN 18239 wymaga, aby dostęp był kontrolowany, a filtr po stronie serwera doskonale spełnia tę funkcję. Również zapewnienie możliwości kryptograficznej weryfikacji ujawnionych pól jest czymś, co robimy dodatkowo - nie jest to wymóg regulacyjny, który musimy spełnić.

Właśnie dlatego warto o tym wspomnieć. Łatwo byłoby spełnić literę normy, dostarczyć filtr serwerowy i uznać ten etap za zakończony. Wolimy jednak, aby nasze zobowiązanie obowiązywało wszędzie tam, gdzie pojawia się pieczęć. Cały sens podpisanego paszportu polega bowiem na tym, że nikt nie musi ufać platformie. Wyłączenie środkowego poziomu jako wyjątku przywraca właśnie to zaufanie, które podpis miał wyeliminować.

Ta sama zasada pozwala zapomnieć o jednym polu

Określenie każdego pola z osobna wiąże się z drugą cechą, a ta jest faktycznie wymagana przez prawo europejskie. Ogólne rozporządzenie o ochronie danych przyznaje osobom prawo do usunięcia danych osobowych. Zbiór danych podpisany jako jeden blok nie może spełnić tego wymogu bez zniszczenia własnego podpisu.

Ponieważ każde pole jest tutaj niezależne, można usunąć pojedyncze pole, podczas gdy pozostałe dane nadal podlegają weryfikacji. Jeśli dane osobowe przypadkowo znajdą się w paszporcie, można je z niego całkowicie usunąć, a paszport pozostaje ważny: nie ma potrzeby ponownego wydawania dokumentu ani przerywania historii. Pola regulacyjne, których przechowywanie wymaga prawo, pozostają na swoim miejscu; to, co można usunąć, można usunąć na żądanie, nawet po latach.

Mimo to jest to zupełnie zwyczajny paszport

Żadna z tych cech nie czyni paszportu obiektem specjalnym, który mogą otworzyć wyłącznie nasze narzędzia. Pozostaje on weryfikowalnym poświadczeniem w formacie JSON-LD - formacie, do którego zmierza świat standardów internetowych, i tym samym formacie, z którego korzysta Protokół Przejrzystości ONZ oraz pozostałe środowisko W3C.

Paszport, który klientka skanuje w przeglądarce, jest zatem tym samym obiektem, który może odczytać partner korzystający z platformy danych, a każdy audytor działający zgodnie z normami może go zweryfikować - nie tylko nasz. Dodatkowe zabezpieczenie nie kosztuje czytelnika nic i nie wiąże nikogo z nami.

Dlaczego jest to trudne pod względem technicznym

Na wstępie, aby nie powstało błędne wrażenie: nie wymyśliliśmy tej metody. ecdsa-sd-2023 to publiczna specyfikacja W3C, kryptografia leżąca u jej podstaw nie pochodzi od nas, a każdy, kto chce ją wdrożyć, może się z nią zapoznać. Trudno nie jest wpadnąć na ten pomysł. Trudno jest zbudować go tak, aby hasło nadal działało za dziesięć lat. Właśnie w tym tkwi cała praca i na ten temat można powiedzieć coś pożytecznego.

Różnica wydaje się niewielka, ale zmienia podstawę działania: zwykły podpis opiera się na obliczeniach nad bajtami dokumentu. Selektywne ujawnianie opiera się na treści dokumentu. Przed podpisaniem paszport jest przekształcany do znormalizowanej formy, w której każda informacja występuje jako osobne, samodzielne zdanie. Dopiero dzięki temu można pominąć jedno zdanie bez uszkadzania pozostałych.

W ten sposób pojawia się problem, którego nie ma w przypadku podpisu bajtowego: ta sama znormalizowana forma musi za dziesięć lat pojawić się dokładnie w tej samej postaci. Nie w przybliżeniu, ale znak po znaku, w przeciwnym razie dowód nie będzie już pasował. Trzy rzeczy stoją temu na przeszkodzie, a wszystkie trzy są niepozorne.

Liczby tracą swój typ. Jeśli zapisuje się liczbę jako zwykły JSON, po drodze gubi się informacja, jaką to była liczba. Wartość taka jak 2,0 po przejściu przez JSON wraca jako 2. Dla człowieka to to samo, dla formy znormalizowanej to inne zdanie, a weryfikacja kończy się niepowodzeniem.

Nazwy same w sobie nie mają jeszcze znaczenia. Aby powstała forma znormalizowana, każda nazwa pola musi odnosić się do jednoznacznego znaczenia. Jeśli brakuje jednego, pole znika po cichu podczas konwersji. Wtedy pojawia się w paszporcie, ale dowód tego nie obejmuje, i nikt tego nie zauważa.

Znaczenia zazwyczaj znajdują się w sieci. To przyporządkowanie znajduje się w słowniku, który większość narzędzi pobiera z sieci podczas sprawdzania. Kto tak postępuje, uzależnia możliwość sprawdzenia swojego paszportu od tego, czy obcy adres za dziesięć lat nadal będzie odpowiadał, i to w niezmienionej postaci.

Jak to rozwiązaliśmy

Zlikwidowaliśmy te trzy punkty u źródła, zamiast je później wyłapywać.

Typy. Każda wartość jest zapisywana wraz z jej typem, a publikacja zostaje przerwana, gdy tylko w znormalizowanej formie pojawi się choćby jedna liczba bez typu. Błąd pojawia się zatem tam, gdzie kosztuje jeden wiersz, a nie po latach jako niewyjaśnione naruszenie weryfikacji.

Słowniki. Każdy słownik, do którego odwołuje się paszport, jest u nas dostępny lokalnie i nigdy nie jest pobierany z sieci. Nieznany adres powoduje natychmiastowe przerwanie procesu podpisywania, a nie ciche powrót do pustego wyniku.

Identyfikatory. Każdy węzeł w dokumencie posiada stały identyfikator, dzięki czemu forma znormalizowana pozostaje odtwarzalna, zamiast przypisywania nowych nazw pomocniczych przy każdym przebiegu.

Najdelikatniejsza kwestia dotyczy funkcji „Bring Your Own Key”. Do każdego wystawienia potrzebny jest dodatkowy, krótkotrwały klucz, za pomocą którego poszczególne pola, które mogą zostać ujawnione, są podpisywane. Klucz ten generuje i usuwa sam wystawca. Gdyby klucz ten znajdował się u nas, moglibyśmy później wymyślać poszczególne pola, a niezależność podpisu wystawcy byłaby jedynie deklarowana. Otrzymany dowód weryfikujemy na podstawie zdeponowanego klucza publicznego, zanim mu zaufamy.

Każdy paszport zawiera dwa takie dowody: jeden od wystawcy i jeden od Transpareo, a każdy z nich jest generowany niezależnie z punktu widzenia czytelnika. Dwa podpisy, dwa niezależne od siebie podmioty certyfikujące - nawet w przypadku pojedynczego ujawnionego pola.

Dla nas ten wysiłek jest uzasadniony. Nie dodaliśmy możliwości weryfikacji jako elementu dodatkowego; platforma została zbudowana wokół tej koncepcji już od pierwszej wersji. Każdy paszport jest podpisywany w momencie publikacji i łączony z poprzednią wersją. Niezmienialne, dziesięcioletnie archiwum jest utworzone i zaczyna działać, gdy tylko paszporty zostaną zarejestrowane w rejestrze EU-DPP. Podpisywanie poszczególnych pól zamiast całego bloku stanowi rozszerzenie tego rdzenia, a nie dodatek do czegoś, co nigdy nie było do tego przeznaczone.

Gdzie obecnie się znajdujemy

W uproszczeniu wybór jest prosty. Można ujawnić chronione pola i poprosić czytelnika, by zaufał Państwa filtrowi - to spełnia normę. Można też je ujawnić i od razu dołączyć dowód - to spełnia wyższe wymagania, na które naszym zdaniem zasługują te pola.

Zdecydowaliśmy się na dostarczenie dowodu dla każdego czytelnika, ponieważ pieczęć powinna oznaczać to samo niezależnie od tego, kto na nią patrzy. Dla tych, którzy chcą zobaczyć, jak to działa: obie wersje demonstracyjne, do których linki zamieściliśmy powyżej, weryfikują się bezpośrednio w przeglądarce, w trybie offline, wyłącznie na podstawie klucza publicznego.

Aktualizacje dotyczące poziomów dostępu i dokumentów potwierdzających

Selektywne ujawnianie informacji, sygnatury oraz rozwój norm DPP - comiesięczne podsumowanie w Twojej skrzynce odbiorczej.