szukaj

15.11.2015 | 06:40

avatar

Adam Haertle

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.

Powrót

Komentarze

  • avatar
    2015.11.15 12:02 Barney

    „Takie właściwości ma dodawania oraz operacje bramki logicznej.” Nie bardzo rozumiem to zdanie…

    Odpowiedz
    • avatar
      2015.11.18 00:45 ToJa

      Zarówno dodawanie, jak i operacje logiczne, dają identyczny wynik niezależnie od kolejności składników.

      Odpowiedz
  • avatar
    2015.11.15 15:28 Anuś

    Wszystko fajnie, artykuł bardzo ciekawy, tylko skąd się wzięły te informacje?

    „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.”

    Zawsze ciekawiły mnie metody generowania kodów, ale tutaj pojawia się informacja, która wygląda jak wzór na hakowanie, a przecież to nie jest tak proste jak wzór na pole koła.

    Odpowiedz
    • avatar
      2015.11.20 14:07 dzikus

      Podstawy kryptografii asymetrycznej, gdzie reszta z dzielenia jest świetnym podstawowym przykładem.

      Odpowiedz
  • avatar
    2015.11.16 11:20 e

    Kiedyś doładowania prepaid do sim plusa były tak generowane, że połowa cyfr była z numeru seryjnego zdrapki.

    Odpowiedz
  • avatar
    2015.11.16 12:25 Przemek

    Myślę, że artykuł ma trochę niewłaściwy tytuł :). Nie było to łamanie kodu jako takiego a jedynie wykrycie luki bezpieczeństwa niewłaściwie zaprojektowanego _systemu_ parkingowego.

    System zresztą wcale nie był górnolotny skoro brak było bazy autoryzowanych kart/biletów a jedynie jakiś mikrokontroler wyliczał, czy suma kontrolna się zgadza…

    Błąd polegał na zbytnim zaufaniu do jawnego i reprodukowalnego nośnika jakim jest kod kreskowy.

    Odpowiedz
  • avatar
    2015.11.16 13:58 ff

    Nadchodzą święta Bożego Narodzenia. Wiele sklepów internetowych ma promocje. Trzeba jednak podać kod. Proponuję poeksperymentować i w pole na kod wpisać ŚWIĘTA2015. Lub podobne hasła kojarzące się z tymi świętami.
    Przed minioną Wielkanocą kupiłem tak okulary 25% taniej.

    Odpowiedz
  • avatar
    2015.11.16 16:59 MatM

    Już ktoś zwrócił uwagę na zdanie „Takie właściwości ma dodawanie oraz operacje bramki logicznej.” ale pozwolę sobie raz jeszcze się przyczepić. Co to są „operacje bramki logicznej” w kontekście matematyki? Ja rozumiem, że ostatnio matematyka jest w odwrocie i program szkolny dramatycznie został przycięty a i nauczyciele nie mają pojęcia co i jak ale środowisko IT powinno jakiś poziom trzymać. Mówimy tu o podstawach matematyki a nie o zagadnieniach zaawansowanych, więc warto dopilnować terminologii.

    Odpowiedz
    • avatar
      2015.11.16 17:04 Adam

      Chętnie się czegoś przy okazji nauczę – zaproponuj proszę prawidłowe brzmienie tego zdania.

      Odpowiedz
      • avatar
        2015.11.16 18:48 MatM

        W cytowanym zdaniu lepiej pasuje „działanie logiczne” (lub funkcja logiczna). Finalnie może on brzmieć – takie właściwości ma dodawanie oraz niektóre działania logiczne. Pozostaje jeszcze kwestia dodawania, które warto zastąpić „sumą” ale to już kosmetyka.

        Odpowiedz
      • avatar
        2015.11.16 21:33 q

        zapewne co działo o matematykę dyskretną. zręcznie chyba napisać „takie własności mają opacje arytmetyczne i logiczne”

        Odpowiedz
    • avatar
      2015.12.13 22:48 Jarek B.

      O jej chodzi o bramki logiczne. Takie operacje jak AND, OR, XOR, NOT, NAND, NOR, EX-NOR. Skrót myślowy, ale dla informatyka zrozumiały. Table prawdy bramek logicznych na wiki: https://pl.wikipedia.org/wiki/Bramka_logiczna

      Pzdr.

      Odpowiedz
  • avatar
    2015.11.16 19:10 darek

    Ludzie ku… ogarnijcie się. Jeden czepia się semantyki, która w żaden sposób nie wypływa na wartość merytoryczną, inna osoba nie rozumie idei „hipotezy”, czy naprawdę dyskusja na portalu technicznym musi odbywać się na tak żałosnym poziomie?

    Odpowiedz
  • avatar
    2015.11.17 16:57 Krzysiu

    Ciekawostka nt. sumy kontrolnej w PESEL. PESEL ma formę RRMMDDxxxxK (gdzie K to suma kontrolna). Niestety algorytm ma pewną wadę. Przy częstej pomyłce – zapisie daty w formie DDMMRR – suma kontrolna będzie ta sama :)
    Chodzą pogłoski o numerach PESEL ze złą sumą kontrolną, ale nie udało mi się co do tego upewnić. Może to tylko legenda albo jakieś stare, nieaktualne sprawy. Jedynie jestem pewien, że zdarzają się zdublowane numery.

    Odpowiedz
  • avatar
    2015.12.06 16:22 SasQ

    Ja tak kiedyś złamałem kod Paszportu Polsatu :) Codziennie wieczorem panowie z telewizji „losowali” kolejną liczbę, którą trzeba było wpisać w odpowiednią kratkę w owym „paszporcie”, i uzbieranie wszystkich liczb uprawniało do udziału w losowaniu nagród. Jako że liczby nie przekraczały rozmiaru alfabetu, z ciekawości postanowiłem zdekodować je na litery i pojawił się początek tekstu „POLSAT UCZY INFORMUJE BAWI” :) Widok twarzy rodzinki, gdy zacząłem „przewidywać” kolejne liczby zanim panowie z telewizora je „wylosowali” – bezcenny :)

    Odpowiedz

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Hakowanie sum kontrolnych czyli jak parkować za darmo

Komentarze