Wyobraźcie sobie, że losowanie sędziów do spraw przebiega w sposób analogowy. Sędziowie danego wydziału ustawiają się w rzędzie, uszeregowani od lewej do prawej według rosnących wskaźników obciążenia. Prowadzący Losowanie informuje, że w losowaniu danej sprawy weźmie udział czterech sędziów z najniższymi wskaźnikami, reszta opuszcza pomieszczenie.
Prowadzący Losowanie uruchamia Maszynę Losującą - urządzenie zapewniające całkowitą przypadkowość wyznaczanych liczb. Już za chwilę na ekranie Maszyny pojawi się liczba z zakresu od 1 do 4. Odliczając od lewej, Prowadzący Losowanie wskaże sędziego przypisanego do danej sprawy.
Oto jednak, zanim Maszyna Losująca pokaże liczbę, czterech losowanych sędziów zostaje zasłoniętych przez czarną kotarę. Maszyna kończy pracę i pokazuje liczbę 3, kotara opada, SĘDZIOWIE STOJĄ W INNEJ KOLEJNOŚCI! Prowadzący Losowanie ma jednak jasną procedurę - ma zawsze odliczać od lewej, więc odlicza i protokołuje wybór trzeciego sędziego od lewej.
Nierozliczalność
Opowieść brzmi niedorzecznie? Mam złe wiadomości, dokładnie w taki sposób System Losowego Przydziału Spraw wylosował już sędziów do przeszło 30 milionów spraw! Choć cechy sprzętowego generatora liczb losowych - używanego podobno do wyznaczania wylosowanej pozycji - mogą być gwarantowane przez naukę i potwierdzone przez niezależne audyty, to nie zda się on na nic, gdy poza jakąkolwiek kontrolą odbywa się przestawianie losowanych pozycji.
Prześledzimy to na przykładzie pierwszego-lepszego raportu z losowania nr 23518581.
Oto, w jaki sposób historyjka z początku artykułu przekłada się na rzeczywistość:
- Sędziowie z danego wydziału zostają uszeregowani rosnąco według wskaźnika obciążenia, na obrazku oznaczyłem to zieloną strzałką.
- W losowaniu bierze udział pierwszych czterech sędziów, w raporcie z losowania są oznaczeni pogrubioną ramką tabeli.
- Generator liczb losowych wyznacza liczbę 3 jako pozycję, spod której ma pochodzić wylosowany kandydat (na obrazku informacja oznaczona na żółto)
- Widzimy, że w (oznaczonym na niebiesko) trzecim wierszu tabeli mamy sędziego Stachowicza - wskaźnik obciążenia równy zero, trzeci w kolejności rosnącej. Oto jednak w kolumnie „Pozycja” cztery pierwsze wartości zostają pomieszane, numerek 3 trafia do wiersza czwartego!
- Wynikiem losowania jest przydział sędzi Leśniańskiej (wiersz podkreślony na czerwono), bo choć pojawia się ona w czwartym wierszu tabeli, to otrzymała numer pozycji równy 3.
Nawet, gdyby losowanie w kroku trzecim było krystalicznie uczciwe i sprawiedliwe - a temu ma przecież służyć użycie sprzętowego generatora liczb losowych - to fakt ten nie wpływa na przejrzystość całego procesu przydziału sprawy.
Co mówi dokumentacja SLPS
Czy na pewno dobrze wszystko zrozumiałem i opisałem? Zajrzyjmy do instrukcji obsługi systemu SLPS dla roli Administratora Lokalnego, sekcja „Skrócony opis działania SLPS”:
Wszystko się potwierdza, zaś zwięzłe sformułowanie „kolejność […] jest losowa” potwierdza wcześniejszą tezę - o cechach „losowości” stosowanej na tym etapie nie wiemy niczego. Na 99% będzie to więc standardowa pseudolosowość obecna we frameworku .NET albo bazie danych SQL Server - zależnie od tego, czy wartości zostaną wygenerowane w kodzie SLPS, czy w bazie danych stanowiącej część tego systemu.
Pseudolosowość
Gdy system komputerowy dokonuje jakichkolwiek losowań, znajdą się ludzie, którzy zechcą wpłynąć na ich wyniki. Pisałem o tym już w roku 2020, w artykule System Pseudolosowego Przydziału Spraw.
Przypomnijmy problemy związane z komputerową losowością. Po lewej stronie obrazka widzimy losowy szum, w tym ciągu zer i jedynek zamienionych na czarne i białe piksele widać żadnych wzorów. Po prawej stronie dostrzegamy pewne regularności, co pozwala przewidzieć, że czasem na pewno wypadnie zero a czasem na pewno jedynka.
We wspomnianym artykule opisuję, jak dałoby się wpłynąć na wyniki losowań a jednocześnie sprawić, by taka możliwość wyglądała na niezamierzoną omyłkę programisty. Na szczęście przy kilkunastu-kilkudziesięciu tysiącach losowań dziennie, realizowanych w dość krótkim okresie czasu, metoda wpływania na wynik oparta o interakcję z operatorem byłaby niemożliwa do realizacji. Niestety, są inne wektory ataku.
Manipulacje w bazie danych
Przy dzisiejszej wiedzy o budowie SLPS możemy znaleźć inny sposób pozwalający wpływać na rezultat głosowań. Zwróćmy uwagę, że w procesie losowania ma miejsce następująca sekwencja działań:
- Sprawy do losowania są rejestrowane w godzinach pracy sądów
- Losowania rozpoczynają się o godzinie 20:00
- Raport z każdego losowania jest generowany dopiero, gdy znane są wyniki losowania
Spójrzmy, jak można zaburzyć krok drugi (postaram się, aby poniższy opis był zrozumiały dla osób spoza branży IT). Bazy danych, w tym SQL Server używany w SLPS, mają możliwość definiowania tzw. wyzwalaczy (ang. trigger). Są to osadzone w bazie danych polecenia, których wykonanie jest inicjowane określonym wydarzeniem. Przykład:
GDY WSTAWIANY NOWY REKORD do tabeli „użytkownicy”
ORAZ wartość pola „pesel” jest nieparzysta
WÓWCZAS ustaw pole „płeć” na wartość „mężczyzna”
Możecie widzieć już, na czym polega problem. Operator, mający dostęp do bazy danych z uprawnieniami administratora, mógłby po godzinach pracy umieścić w bazie wyzwalacz:
GDY AKTUALIZOWANY REKORD w tabeli „sprawy”
ORAZ pole „sygnatura” jest równe „XXXX/2024”
ORAZ pole „wylosowana_pozycja” jest znane
ORAZ powiązany rekord „sędzia” na pozycji „wylosowana_pozycja” jest różny od „NazwiskoX”
WÓWCZAS zamień wartość pola „pozycja” powiązanego rekordu „sędzia-NazwiskoX” z
rekordem „sędzia” mającym pole „pozycja” równe wartości „wylosowana_pozycja”
Taki wyzwalacz sprawi, że sprawa o sygnaturze „XXXX/2024” na pewno trafi do sędziego „NazwiskoX” (w podobny sposób można wcześniej zadbać, aby sędzia ten na pewno trafił do puli). Co więcej - taki wyzwalacz może sam siebie usunąć z bazy danych. Po ingerencji nie pozostanie żaden ślad.
Czy istnieje sposób na monitorowanie tego typu nadużyć? Teoretycznie tak, bo w bazie danych można włączyć audyt (zapis) wszelkich zmian. Tyle tylko, że administrator bazy może na chwilę wyłączyć tę funkcję. Czy po takiej operacji zostaną ślady? Być może. Czy da się je sfałszować tak, aby pozostawiały fałszywy trop? Czy ktokolwiek i kiedykolwiek zbada logi audytu pod tym kątem? Kto kontroluje kontrolujących?
Jak wyglądałby przejrzysty system losowania spraw?
W idealnym świecie każdy mógłby samodzielnie zweryfikować prawdziwość danych poddawanych losowaniu i samodzielnie odtworzyć wyniki losowań, by porównać je z zapisami urzędowymi. Wówczas administrator SLPS nie byłby w stanie dokonać nadużyć.
Oto przykładowa realizacja (opisana uprzednio w tym artykule):
- do godziny 14:00 sądy wprowadzają do SLPS sprawy podlegające losowaniu, tworzone są losowania, do losowań przydzielani są sędziowie
- do godziny 15:00 publikowany jest podpisany cyfrowo i znakowany czasem spis wszystkich losowań i ich uczestników
- o godzinie 17:00 zamykane są notowania GPW – wówczas obroty i kurs zamknięcia wybranych indeksów przepuszczamy przez funkcję skrótu, wynik tej operacji stanowi ziarno generatora liczb pseudolosowych
- o godzinie 20:00 SLPS przeprowadza losowania korzystając z wyliczonego ziarna, następnie publikuje wyniki a każdy chętny może powielić obliczenia i przekonać się, czy otrzymał takie same rezultaty
Kursy akcji z GPW to oczywiście przykładowe źródło losowości – chodzi o to, by bazować na wiedzy dostępnej publicznie, uprzednio nieprzewidywalnej a dającej się weryfikować wieloma kanałami.
Problemów jest więcej
Czy powyższa sekwencja zagwarantuje rozliczalność procesu losowania? Niestety - wciąż nie. Polecam lekturę artykułu „NIK o SLPS: Nie osiągnięto celów całego przedsięwzięcia” z roku 2021, w którym zamieściłem obszerne cytaty z kontroli NIK pt. „Realizacja projektów informatycznych mających na celu usprawnienie wymiaru sprawiedliwości”
Czytamy tam m.in.: „na chwilę obecną w systemie SLPS brak jest mechanizmów zabezpieczających przed ewentualnymi, intencjonalnymi działaniami ograniczającymi „losowość” przydziału spraw referentom. […] istnieje możliwość manipulacji losowym przydziałem spraw, poprzez zamianę przydzielonych przez SLPS spraw między okładkami. […] W wydziałach sądu zajmujących się tym samym zakresem spraw (np. w sytuacji, gdy w sądzie funkcjonuje kilka wydziałów karnych, cywilnych, itp.) sygnatura jest przyznawana sprawie dopiero po wylosowaniu referenta w SLPS. […] W konsekwencji możliwe jest dowolne dopasowanie raportów skróconych z losowania (zawierających wyłącznie informację o wylosowanym referacie) do innej dowolnej sprawy z tej samej kategorii.”
W podsumowaniu czytamy: „Negatywnie NIK oceniła również nieosiągnięcie (według stanu na dzień 20 sierpnia 2020 r.) zakładanych, kluczowych celów projektu SLPS oraz brak uruchomienia funkcjonalności gwarantujących m.in.: pełną transparentność procesu losowania i rozliczalność operacji dokonywanych w systemie.”
Dodam więc tylko, że wg stanu na dzień 16 sierpnia 2024 transparentność i rozliczalność operacji losowania pozostają na niezmienionym poziomie.
Podsumowanie
Dzięki temu, że Ministerstwo Sprawiedliwości przekazało miliony raportów z losowań, mogłem zrealizować serwis Monitor SLPS. Każdy może sprawdzić, jaki „przerób” spraw mają poszczególne sądy i wydziały albo które kategorie spraw trafiają do których sędziów. Od wielu osób usłyszałem, że takie działania są bardzo pożądane, bo podnoszą transparentność polskiego życia publicznego. Niestety, poprawa dotyczy wyłącznie danych agregowanych.
Na poziomie pojedynczego losowania SLPS pozostaje całkowicie nieprzejrzysty a ewentualne naruszenia integralności procesu losowania pozostaną niewykryte. Wykorzystanie sprzętowego generatora liczb losowych to jedynie teatrzyk, bo pozycje sędziów wewnątrz puli zostają pomieszane w sposób całkowicie arbitralny, pozostający poza kontrolą obserwatora zewnętrznego.
Bardzo dziękuję osobom, które sprawdziły niniejszy tekst przed publikacją i pomogły w jego redakcji!
W następnych artykułach: jak obliczany jest wskaźnik obciążenia i dlaczego SLPS gwarantuje sędziom niesprawiedliwe obłożenie pracą.
Masz pytania lub uwagi do niniejszego tekstu? Napisz!
Tomasz Zieliński