Przejdź do treści

Pieśni o Bezpieczeństwie Sieci
blog Michała "ryśka" Woźniaka

Weryfikacja wieku a prywatność

Fundacja Panoptykon spytała mnie ostatnio, czy da się stworzyć system weryfikacji wieku osób odwiedzających daną stronę, który jednocześnie dbałby o prywatność tych osób.

Odpowiedziałem, że – przy pewnych założeniach – da się. I zaproponowałem uproszczony szkic takiego systemu:

  1. Wchodzisz na stronę wymagającą weryfikacji wieku. Strona wyświetla kod QR zawierający programistycznie zapisane pytanie (np. “czy osoba logująca się w tej chwili na tę stronę jest starsza niż N lat?”).
  2. Skanujesz kod QR odpowiednią zaufaną aplikacją na swoim urządzeniu.
  3. Ta zaufana aplikacja pyta cię, czy chcesz udzielić odpowiedzi na pytanie strony (zweryfikować wiek).
  4. Jeśli tak, zaufana aplikacja wysyła to programistycznie zapisane pytanie do serwera e-ID. Zapytanie nie zawiera informacji, jaka strona prosi o tę informację, ale jest podpisane twoim kluczem (a więc kluczem osoby, której wiek jest weryfikowany).
  5. Serwer e-ID odpowiada twojej zaufanej aplikacji “tak” lub “nie”. Odpowiedź (zawierającą również oryginane zapytanie) podpisuje swoim kluczem prywatnym.
  6. Zaufana aplikacja przekazuje uzyskaną od serwera e-ID odpowiedź, podpisaną jej kluczem, stronie z której przyszło zapytanie. W tym celu posługuje się zapisanym w kodzie QR adresem URL.
  7. Za pomocą publicznego klucza serwera e-ID strona weryfikuje, czy odpowiedź jest podpisana poprawnie.

Chodzi o to, by serwer e-ID nie miał informacji dotyczących strony, na której weryfikujemy nasz wiek, oraz by ta strona nie miała o nas żadnych informacji poza tym, czy faktycznie spełniamy warunek dotyczący wieku.

Opis tego “protokołu” jest oczywiście bardzo uproszczony. Nie jest to też jedyna możliwa metoda stworzenia przyjaznego prywatności rozwiązania weryfikacji wieku – inne mogłyby na przykład być oparte o dowody z wiedzą zerową i bezpośrednio wykorzystywać rozproszone, anonimizujące sieci typu Tor czy Veilid, co pomogłoby zwiększyć skuteczność ochrony prywatności.

Celem nie było tu jednak zaprojektowanie idealnego, gotowego do wdrożenia rozwiązania, a jedynie pokazanie zrozumiałej dla osoby nietechnicznej metody stworzenia systemu weryfikacji wieku, który dba o prywatność.

Taki protokół mógłby być wykorzystywany do przyjaznego dla prywatności potwierdzania również innych informacji o nas, o ile dostępne są w usłudze e-ID. Na przykład: “czy osoba odwiedzająca ma prawo jazdy?”, “czy osoba odwiedzająca mieszka w danym mieście?”.

Usługa wymagająca takiej weryfikacji otrzymywałaby wyłącznie odpowiedź “tak” lub “nie”, bez uzyskiwania żadnych dodatkowych informacji o nas.

Diabeł tkwi w szczegółach (technicznych)

Kod QR wyświetlony przez stronę można zastąpić innymi metodami komunikacji z aplikacją na urządzeniu osoby korzystającej. Na przykład, jeśli strona wymagająca weryfikacji wieku otwarta jest na tym samym urządzeniu, może to być link od razu odsyłający do aplikacji, bez konieczności skanowania kodu. Formatem danych mógłby być na choćby JWT; ważne, żeby był on jednoznacznie zdefiniowany i opisany.

Zapytanie wygenerowane przez tę stronę zapisane powinno być w prostym dziedzinowym języku programowania – wystarczająco złożonym do zadawania tego typu zapytań, ale nie bardziej. Język ten nie powinien być zupełny w sensie Turinga.

Zapytanie o wiek powinno być opatrzone na przykład losowym jednorazowym identyfikatorem zapytania (“nonce”), który towarzyszyłby mu również w drodze na serwer e-ID, i byłby zawarty w podpisanej przezeń odpowiedzi. Podpisana odpowiedź powinna też zawierać krótką datę ważności. W przeciwnym wypadku raz podpisana odpowiedź mogłaby być wykorzystana wielokrotnie.

Strona wymagająca weryfikacji wieku miałaby oczywiście informację o adresach IP osoby korzystającej – ale taką informację już ma i tak po prostu dlatego, że ta osoba odwiedziła tę stronę. Nic oczywiście nie stoi na przeszkodzie, by osoba korzystała z usług anonimizujących, takich jak Tor.

Założenia

Prywatność tego rozwiązania opiera się na poprawnej, niezłośliwej implementacji takiego protokołu przez aplikację na urządzeniu osoby korzystającej. Taką aplikacją może, ale nie musi, być mObywatel – pod warunkiem, że byłby otwartoźródłowy i przeszedł niezależny audyt.

Protokół nie powinien wymagać żadnej konkretnej aplikacji, podobnie jak logowanie wielostopniowe kodami OTP nie wymaga żadnej konkretnej aplikacji. Wystarczy aplikacja poprawnie implementująca ten protokół. A im więcej takich niezależnych aplikacji, tym lepiej.

Komunikacja aplikacji z serwerem e-ID wymagać będzie klucza powiązanego z osobą, której wiek jest weryfikowany. Taki klucz może być wygenerowany przez tę aplikację przy pierwszym użyciu i zweryfikowany oddzielnie np. przez logowanie do aplikacji za pomocą usługi e-ID. Nie powinien on nigdy opuszczać urządzenia.

Prywatność systemu opiera się też na założeniu, że strona wymagająca weryfikacji wieku nie udostępni oddzielnie danych identyfikujących konkretne zapytanie (np. nonce, adresu IP osoby odwiedzającej wraz z dokładnym czasem weryfikacji) usłudze e-ID. Korzystanie z sieci Tor mogłoby tu stanowić dodatkowe zabezpieczenie dla osoby, której wiek jest weryfikowany.

Prywatność poza protokołem

Niezależnie od tego, jak skutecznie nasz hipotetyczny protokół chroni naszą prywatność sam w sobie, sam fakt korzystania z niego może być problematyczny.

Jeżeli mają z niego korzystać wyłącznie strony pornograficzne, każde zapytanie z naszej aplikacji do serwera e-ID będzie w oczywisty sposób sygnalizowało, że właśnie wchodzimy na stronę pornograficzną.

A więc dla naszej prywatności byłoby lepiej, gdyby więcej różnych usług wdrożyło ten system, i gdyby używany używany był nie tylko do weryfikacji wieku, ale też odpowiadania na inne pytania o nas.

Jako dodatkowe zabezpieczenie, nasza aplikacja mogłaby za każdym razem jednocześnie zadawać serwerowi e-ID kilka losowo wybranych pytań – na przykład: “czy wiek jest powyżej N?”, “czy wiek jest poniżej M?”, “czy osoba ma prawo jazdy?”, “czy osoba mieszka w Poznaniu?”. Stronie, na której jakaś informacja o nas jest weryfikowana, przekazywana byłaby oczywiście tylko odpowiedź, na której jej zależy. A serwer e-ID nie mógłby być pewny, które pytanie było faktycznie istotne.

Prywatność to nie wszystko

Raz wdrożony, system oparty o protokół wymagający odpowiedzi usługi e-ID staje się zależny od tej usługi. Jeśli usługa przestaje działać (np. ze względu na problem techniczny), system weryfikacji też przestaje działać, a więc nasz dostęp do usług wymagających takiej weryfikacji jest uniemożliwiony lub przynajmniej bardzo utrudniony.

Pytanie też, kto zarządza usługą e-ID. Kontrola nad nią to realna władza.

Jeśli na przykład wszystkie sieci społecznościowe miałyby zaimplementować weryfikację wieku osób korzystających, instytucja kontrolująca system e-ID mogłaby złośliwie zablokować lub znacznie utrudnić dostęp do takich mediów konkretnym osobom – wystarczyłoby, by zaczęła odmawiać weryfikacji wieku.

W podobny sposób jest dziś w USA nadużywany system zarządzający numerami ubezpieczenia społecznego (SSN). Administracja Donalda Trumpa zmienia status osób migranckich na “zmarły”, w celu uniemożliwienia im dostępu do kart kredytowych czy innych podstawowych usług bankowych.

Wprawdzie usługa e-ID nie wiedziałaby, gdzie konkretnie się weryfikujemy, ale wiedziałaby kim jesteśmy i znała treść pytania. Jeśli pytanie pojawiałoby się na ogół w kontekście sieci społecznościowych (np. “czy ta osoba ma powyżej 13 lat?”), operator usługi mógłby zgadywać, że weryfikujemy wiek właśnie w takim kontekście. I odmawiać weryfikacji.

Istnieją sposoby, by zmniejszyć prawdopodobieństwo takich nadużyć. Na przykład: media społecznościowe nie muszą weryfikować naszego wieku przy każdej wizycie, wystarczy raz przy założeniu konta. Ale mają one swoje konsekwencje: niemożliwe stałoby się korzystanie z socmediów bez konta.

Kwadratura koła

Jeśli wdrożenie systemów weryfikacji wieku jest nieuniknione, można i trzeba to zrobić w sposób chroniący naszą prywatność. Przy czym nasza prywatność byłaby tym lepiej chroniona, im więcej różnych usług wdrożyłoby ten protokół w celu weryfikacji większej liczby różnych informacji o nas.

Ale prywatność nie jest jedynym problemem związanym z takimi systemami. Im szerzej taki protokół byłby wdrożony, tym poważniejsze stałyby się zagrożenia związane z centralizacją władzy nad naszym dostępem do różnych usług w Sieci.

Te zagrożenia trzeba koniecznie mieć na uwadze, gdy rozmawiamy o wdrażaniu – a zwłaszcza wymaganiu prawem – takich systemów.