Wszystkie cyfrowe usługi, których katalog poszerza się z miesiąca na miesiąc, dostępne są po skorzystaniu z którejś z opcji: logowania profilem zaufanym, usług bankowości elektronicznej, e-dowodu i w końcu udostępnienia danych przez aplikację mObywatel. To jedna z kluczowych aplikacji.
Jednak sam mObywatel to sporo więcej. To pełnoprawny dowód osobisty (lub legitymacja szkolna), dowód rejestracyjny, prawo jazdy, mandaty, punkty karne i recepty. Czyli praktycznie wszystko, co jest niezbędne do funkcjonowania we współczesnym świecie.
Możecie o tym poczytać w tekście Superaplikacja mObywatel: dowód tożsamości, mecze reprezentacji, czat z urzędnikiem i prowadzenie firmy. Mrzonka czy przyszłość?
mObywatel w Ustawie z dnia…
I tu pojawia się informacja, która potrafi zatrzymać każdego w miarę racjonalnego człowieka w pół kroku. Zgodnie z poprawką Michała Gramatyki z Polska 2050 do ustawy o aplikacji mObywatel z dnia 26 maja 2023 r. rząd został zobowiązany do upublicznienia kodu źródłowego mObywatela.
USTAWA z dnia 26 maja 2023 r. o aplikacji mObywatel
Art. 82: Minister właściwy do spraw informatyzacji po raz pierwszy udostępni kod źródłowy aplikacji mObywatel w Biuletynie Informacji Publicznej na swojej stronie podmiotowej w terminie 12 miesięcy od dnia wejścia w życie niniejszej ustawy.
oraz
Minister właściwy do spraw informatyzacji udostępnia aktualny kod źródłowy aplikacji mObywatel w Biuletynie Informacji Publicznej na swojej stronie podmiotowej w terminie 14 dni od dnia wdrożenia nowej wersji tej aplikacji.
Ustawa została podpisana przez Prezydenta i weszła w życie 14 lipca 2023 r., czyli przepis zacznie obowiązywać od połowy lipca 2024 r.
I teraz podstawowe pytanie: „czy udostępnienie kodu źródłowego kluczowej aplikacji nie powinno skłonić nas do szybkiego wycofania wszystkich zaskórniaków z banku, zakupu worka fasoli i zaszycia się gdzieś na odludziu?”. Czy nie rzucą się na ten kod obwiesie wszelkiej maści, a my będziemy mogli pożegnać się ze swoimi danymi i spokojnym życiem? Oraz czy rząd oszalał? (ale do tego jesteśmy jakby przyzwyczajeni, wróćmy więc do dwóch pierwszych pytań).
Na czym polega udostępnienie kodu źródłowego?
Może zacznijmy od podstaw.
Czym jest kod źródłowy?
Kod źródłowy to zestaw instrukcji i deklaracji napisanych w jednym z języków programowania zawierający serię poleceń, które określają, jak dany program ma działać, i wygląda mniej więcej tak:
Tu uwaga: jak każda aplikacja mobilna mObywatel składa się z aplikacji działającej na telefonie (lub w przeglądarce), która jest tylko niewielką, front-endową częścią oprogramowania służącą wyłącznie do wyświetlania danych. Druga część, back-endowa, pracuje spokojnie na rządowych serwerach. Zresztą nie musi to być, i z reguły nie jest, jedna aplikacja, ale raczej wiele mniejszych aplikacji mikroserwisowych realizujących określone funkcje. Te aplikacje komunikują się ze sobą i z częścią front-endową przez API (Interfejs Programowania Aplikacji).
(pssst… kod części front-endowej można obejrzeć w dowolnym momencie w przeglądarce naciskając F12).
Kod źródłowy mObywatela ma około 2,5 mln linijek kodu, 50 modułów, do tego 52 tysiące modyfikowanych plików i 40 mikroserwisów korzystających z API. Niezły i rozległy labirynt kodu, w którym mogą ukrywać się różne niespodzianki. I o te niespodzianki tutaj chodzi.
Co może kryć się w oprogramowaniu mObywatel?
Bardzo różne rzeczy. Przypomnijmy tu chociażby popularne aplikacje, które zaklinają się, że nas nie podsłuchują, ale dziwnym trafem podrzucają reklamy rzeczy, o których rozmawialiśmy przed chwilą. I stąd postulat o udostępnienie kodu źródłowego, który jest swoistym „sprawdzam” dla jednej z najważniejszych usług zaufania publicznego. Działania władzy mają być transparentne, a my mamy mieć pewność, że nikt i nic nas potajemnie nie szpieguje.
Wróćmy jednak do kodu źródłowego. Przed wykonaniem jakiegokolwiek programu należy go „przetłumaczyć” na kod wynikowy przy pomocy kompilatora lub interpretera (to już sprawdźcie sami). Co dostaniemy więc do wglądu 12 lipca? Mnóstwo linii kodu, ale bez bibliotek, API, kompilatorów i, co ważniejsze, dokumentacji, bez której kod pozostanie labiryntem.
Jednak ten labirynt jest łakomym kąskiem dla graczy niebieskiej i czerwonej drużyny (niebiescy, to tzw. dobrzy hakerzy, którzy wyszukują błędy w aplikacjach i systemach w celu ich załatania. Za to czerwoni. No cóż, nie są tak poczciwi. Też szukają luk i błędów, ale na prywatny użytek).
Dlatego proces udostępniania kodu, choć pozornie prosty, wymaga staranności i solidnego przygotowania. Tym bardziej że aplikacja mObywatel korzysta z wielu różnych API i integracji, co dodatkowo komplikuje sprawę. Miejmy jednak nadzieję i, przede wszystkim, zaufanie do kompetencji Centralnego Ośrodka Informatyki, bo Polska naprawdę nieźle stoi pod względem poziomu usług cyfrowych i cyberbezpieczeństwa.
Poza tym, jeśli aplikacja (część front-endowa i back-endowa) jest dobrze napisana, udostępnienie kodu źródłowego nie powinno wiązać się z żadnym zagrożeniem, ani wyciekiem danych. Dobry kod nie zawiera danych wrażliwych, haseł itd., które są przechowywane, z reguły w postaci zaszyfrowanej, w bazach danych lub aplikacjach zewnętrznych.
Jakie są korzyści udostępnienia kodu źródłowego?
Zarówno zwolennicy, jak i krytycy udostępnienia kodu źródłowego mają swoje racje. Ci, którzy popierają publiczny dostęp do kodu, mówią o transparentności władzy i wsparciu rozwoju programu:
- Przejrzystość i zaufanie: udostępnienie kodu źródłowego niewątpliwie zwiększa wspomnianą transparentność działań rządu i zwiększa zaufanie społeczeństwa do władzy, co w przypadku naszego kraju jest bezcenne. Krok ten pozwala także ograniczyć różne spekulacje i teorie spiskowe.
- Bezpieczeństwo: zwolennicy udostępniania kodu argumentują, że dostęp do kodu zwiększa szanse na wykrycie błędów i luk (co jest prawdą np. w przypadku systemu Linux). I twierdzą, że podejście „security through obscurity”, czyli „bezpieczeństwo przez niejawność”, może wręcz pogarszać bezpieczeństwo aplikacji.
- Innowacje: dostępny kod źródłowy może przyspieszyć innowacje, wprowadzanie nowych funkcji i usług programu.
Z drugiej strony krytycy udostępnienia kodu źródłowego mówią o:
- Zagrożeniu bezpieczeństwa: ponieważ publiczne udostępnienie kodu źródłowego może ułatwić potencjalnym hakerom zidentyfikowanie i wykorzystanie podatności i luk w samej aplikacji, bibliotekach lub API.
- Zamieszanie i nadmiar informacji: udostępnienie zaawansowanego kodu źródłowego może prowadzić do jego niewłaściwego zrozumienia i fałszywych interpretacji. A to już tylko krok w stronę świętego oburzenia i połajanek ze strony niezadowolonych obywateli.
- Ułatwienie tworzenia szkodliwego oprogramowania: dostęp do kodu źródłowego może ułatwić tworzenie złośliwego oprogramowania, a także przeprowadzanie ataków na użytkowników. Na przykład kod źródłowy pozwala podszyć się pod istniejącą aplikację (ten rodzaj ataku nazywa się phishingiem). Jednak, jak wspomnieliśmy wyżej, część front-endowa aplikacji dostępna jest w każdej przeglądarce. Poza tym mObywatel używa uwierzytelniania wieloetapowego, więc to ryzyko jest naprawdę minimalne.
Podsumowując, to, że Ustawa o aplikacji mObywatel zobowiązuje Ministra Cyfryzacji do upublicznienia kodu źródłowego, ma wady i zalety. Jeżeli nikt nie znajdzie w kodzie żadnych niepokojących fragmentów (np. zbierających dane, które obywatel wolałby zachować dla siebie, albo luk, które można wykorzystać np. do cyberataku), jego udostępnienie wyjdzie nam wszystkim zdecydowanie na dobre.
Jeżeli jednak coś będzie nie w porządku, to raczkujące zaufanie do rządowych aplikacji spadnie do zera i rozpocznie się dobrze znana „ożywiona dyskusja” dotycząca zawiłego problemu rezygnowania z kolejnego fragmentu anonimowości i wolności na rzecz bezpieczeństwa państwa. Oczywiście pod warunkiem, że udostępniony zostanie cały kod. I dokumentacja.
O rządowych planach dotyczących ucyfrowienia Polski i Polaków możecie poczytać też w tekście Cyfrowa administracja: kiedy usługi dla obywateli będą całkiem online?
Ilustracje: Christopher Robin/Unsplash