Hakowanie sum kontrolnych czyli jak parkować za darmo

dodał 15 listopada 2015 o 06:40 w kategorii Info  z tagami:
Hakowanie sum kontrolnych czyli jak parkować za darmo

W naszym codziennym życiu coraz częściej spotykamy różne zautomatyzowane systemy weryfikujące uprawnienia. Wszystkie były projektowane przez ludzi, zatem warto czasem zweryfikować, czy ludzie ci nie popełnili prostych błędów.

Ron Reiter, programista i przedsiębiorca, opisał ciekawą analizę bezpieczeństwa kodów kreskowych uprawniających do darmowego parkowania. Pokazał w niej jak krok po kroku złamał algorytm tworzenia sumy kontrolnej i uzyskał możliwość darmowego parkowania.

Parkometry i sumy kontrolne

W miejscu, w którym Ron parkuje swój pojazd trzeba pobrać z parkomatu bilet parkingowy wyposażony w kod kreskowy. Pracodawca Rona wykupił od firmy zarządzającej parkingiem specjalne naklejki z dodatkowym kodem kreskowym który nakleja się na bilet parkingowy by otrzymać możliwość wyjazdu bez opłacenia postoju. Każda z takich naklejek ma wartość ok. 10 dolarów, zatem Ron z ciekawości przyjrzał się zamieszczonym na nim kodom.

Przykładowe kody kreskowe

Przykładowe kody kreskowe

Po zeskanowaniu sporej partii kodów z naklejek można było zauważyć wyraźną prawidłowość. Ich seria wyglądała następująco:

03001909 0788
03001910 0956
03001919 0642
03001946 0642
03001920 0810
03001921 0664
03001922 0518
03001923 0372
03001932 0372
03001933 0226
03001934 0080
03001935 0934
03001947 0496

Jak pewnie widzicie, numery kodów są liczbami całkowitymi z wąskiego przedziału wartości a po nich występuje czterocyfrowa suma kontrolna. Wygląda zatem na to, że wystarczy odtworzyć mechanizm tworzenia sumy kontrolnej by móc generować własne prawidłowe wartości. Jeśli lubicie wyzwania to możecie spróbować sami sprostać temu zadaniu – jeśli jednak wolicie szybkie odpowiedzi, to czytajcie dalej.

W puli kodów znaleźć można dwie pary wartości posiadających tę samą sumę kontrolną – to wskazówka dająca duże nadzieje na sukces. Tę samą wartość 0372 dają liczby 03001923 oraz
03001932. Różnią się one tylko kolejnością cyfr, co oznacza, że algorytm sumy kontrolnej najwyraźniej jest niezależny od kolejności występowania cyfr w liczbie. Takie właściwości ma dodawanie oraz operacje bramki logicznej. Spójrzmy teraz na drugą parę wartości, które dają wspólny wynik 0642. Są to 03001919 oraz 03001946. Różnią się one tylko dwoma ostatnimi cyframi – 19 i 46. Ich wspólną cechą jest suma, co sugeruje, że to dodawanie cyfr jest pierwszym krokiem algorytmu obliczania sumy kontrolnej.

Przyjrzyjmy się teraz wartościom, jakie przyjmuje suma kontrolna. Wszystkie zaobserwowane stany znajdują się w przedziale 000-999. Biorąc pod uwagę najpopularniejsze mechanizmy zapewnienia takiego wyniku możemy roboczo założyć, że używana jest reszta z dzielenia przez 1000. Możemy zatem teraz poszukać brakujących wartości przyjmując założenie, że algorytm wygląda tak: weź sumę cyfr, pomnóż przez x, podziel przez 1000 i weź resztę z tego dzielenia. Trzeba zatem znaleźć x.

Weźmy na przykład 03001919 0642. Suma cyfr liczby z lewej strony to 23. Suma kontrolna to 642. 642 musi być zatem resztą z dzielenia wyniku 23*x przez 1000.

642/23 = 27.913043478

Niestety nie otrzymujemy liczby całkowitej, zatem trzeba szukać dalej. Reszta z dzielenia przez 1000 to ostatnie 3 cyfry, zatem spróbujmy odgadnąć, jakie poprzedzają je wartości:

1642/23 = 71.391304348
2642/23 = 114.869565217
...
18642/23 = 810.52173913
19642/23 = 854

Zdecydowanie 854 wygląda na najlepszego kandydata. Zweryfikujmy zatem hipotezę dla ciągu 03001947 0496:

(3+1+9+4+7)*854 = 24*854 = 20496

W ten oto prosty sposób Ron uzyskał możliwość generowania prawidłowych kodów kreskowych w systemie parkingowym. Z możliwości podobno nie skorzystał – oprócz względów etycznych na jego decyzję mógł mieć wpływ fakt, że rejestracje pojazdów korzystających z parkingu są automatycznie zapisywane i kojarzone z konkretnym biletem parkingowym…

Ćwiczenie

Rozejrzyjcie się wokół siebie i sprawdźcie, czy nie macie pod ręką podobnych kodów kreskowych uprawniających do uzyskania dowolnych korzyści – może to Wy będziecie bohaterami kolejnego artykułu na ten temat.