Tomasz Siroń Liceum Ogólnokształcące im. Bohaterów Porytowego Wzgórza ul. Jana Pawła II 1 23-300 Janów Lubelski tel. 15872 03 56 Opiekun prowadzący: mgr Wiesława Siczek 1. Źródło: http://www.edmond.nl/typo3temp/pics/9d47d865fe.gif Walidacja numerów identyfikacyjnych suma kontrolna w modelu matematycznym. 2. Źródło: http://web.securityinnovation.com/ 1
WSTĘP W dzisiejszych czasach mamy do czynienia z dużym przepływem informacji. Często nie zdajemy sobie nawet sprawy z ich ilości podczas przeprowadzania codziennych zajęć. Przy występowaniu takiego ogromu danych nie trudno o błąd, czy to poprzez czynnik ludzki, czy poprzez błąd systemu. Można sobie wyobrazić co by się stało, gdyby podczas wykonywania płatności kartą w sklepie, doszło do błędu jednej z cyfry w tak niefortunny sposób, iż należność zostałaby pobrana z konta innej osoby. Innym bardziej niebezpiecznym przykładem jest zakłócenie przez np. pracujący telefon komórkowy informacji przepływających przez magistralę CAN 1 w samochodzie osobowym. Mogłoby ono doprowadzić do odcięcia paliwa podczas jazdy lub detonacji poduszek powietrznych. W prawdzie ostatni przykład jest dosyć egzotyczny i mało prawdopodobny, jednak jest Rysunek 3. Przykład karty debetowej. Ostatnia liczba jest sumą kontrolną. Przedstawiony numer karty jednak nie jest poprawny (nie waliduje się algorytmem Luhna). Źródło: http://www.aliorbank.pl Rysunek 4. Sieć CAN, z podziałem na podsieci. Źródło: http://www.auobd2.com możliwy. Aby zmniejszyć jego prawdopodobieństwo należy zastosować specjalny algorytm matematyczny, który sprawdziłby czy zawarte dane są spójne z danymi wejściowymi. Jeśli wynik tego testu byłby negatywny, algorytm ten miałby (w miarę możliwości) naprawić dane wyjściowe lub jeśli uszkodzenia pakietu danych byłyby zbyt duże odrzucić je. Najprostszym sposobem jest zsumowanie (lub wymnożenie) wszystkich liczb i podzielenie ich przez ich liczbę. Dzięki temu zostanie uzyskana tak zwana suma kontrolna (ang. checksum). Służy ona do sprawdzania poprawności danych. Wszelako taki algorytm jest bardzo zawodny i ławo go oszukać. Może ono nastąpić poprzez podstawienie liczby spełniające to równanie lub poprzez 1 CAN (Controller Area Network) wewnętrzna, szeregowa magistrala komunikacyjna mająca zastosowanie w przemyśle motoryzacyjnym. Jej zadaniem jest połączenie ze sobą głównych systemów samochodu (sterowanie pracą silnika, system ABS, itp). 2
tzw. czeski błąd, czyli przestawienie kolejności znaków. Każde dodatkowe działanie matematyczne zwiększa skomplikowanie, niemniej jednak zmniejsza prawdopodobieństwo przekłamania sumy kontrolnej. Aby sprawdzić poprawność danych wystarczy, aby komputer (lub inne urządzenie teleinformatyczne) obliczył sumę kontrolną odebranego pakietu i porównał ją z sumą zawartą w tym pakiecie. Rysunek 5. Karta debetowa podczas skanowania w terminalu płatniczym. Źródło: http://www.chfi.com/ 3
Suma kontrolna jako cyfra kontrolna w weryfikacji numerów PESEL, REGON, numer dowodu osobistego, NIP, ISBN etc. PESEL Jednym z zastosowań sumy kontrolnej jest tzw. cyfra kontrolna. Znajduje ona zastosowanie w wszelkiego rodzaju numerach, które należą do systemów ewidencyjnych. Przykładem może być numer PESEL. Zawiera on w sobie datę urodzenia, numer serii z oznaczeniem płci i cyfrę kontrolną. Rysunek 6. Przykładowy numer PESEL. Numer przedstawiony na przykładzie nie jest jednak poprawny (ostatnia cyfra jest cyfrą kontrolną). Źródło: http://www.nportal.no 99010113954 990101 data urodzenia obywatela (dla osób urodzonych w XX wieku odpowiada dacie urodzenia w postaci zapisu RRMMDD), 1395 numer serii z oznaczeniem płci (ostatnia cyfra nieparzysta 5 oznacza płeć, w tym wypadku mężczyzna), cyfry 1, 3, 5, 7, 9 oznaczają płeć męską, cyfry 0, 2, 4, 6, 8 oznaczają płeć żeńską, 4 cyfra kontrolna. 4
GENEROWANIE POPRAWNEGO NUMERU PESEL Znamy już jak wygląda specyfikacja numeru PESEL, nie wiemy jednak jakim algorytmem się waliduje. Algorytm ten nie należy do skomplikowanych. Należy założyć, iż kolejne cyfry numeru są kolejno literami alfabetu. Następnie należy wykonać działanie: 1*a + 3*b + 7*c + 9*d + 1*e + 3*f + 7*g + 9*h + 1*i + 3*j Otrzymany wynik podzielić przez 10. Jeżeli reszta z dzielenia wynosi 0 to cyfra kontrolna jest równa 0. Jeśli jednak reszta jest różna od zera, należy z poprzedniego wyniku (tego, którego dzieliliśmy przez 10) wybrać ostatnią cyfrę, a następnie odjąć od 10. Wynik tego działania daje nam cyfrę kontrolną. Przykład: Wygenerujmy przykładowy numer PESEL dla osoby urodzonej 23 sierpnia 1985 roku. Osoba ta jest mężczyzną. 1. Zapisujemy datę w formacie RRMMDD czyli: 850823. 2. Do podanej liczby dopisujemy liczbę czterocyfrową serii z założeniem, że ostatnia cyfra dla płci męskiej musi być nieparzysta, przyjmijmy, że będzie to cyfra 0123 (cyfra 3 nieparzysta mężczyzna). Otrzymujemy taki numer: 8508230123. 3. Obliczmy cyfrę kontrolną według wcześniej podanych założeń: 1*8 + 3*5 + 7*0 + 9*8 + 1*2 + 3*3 + 7*0 + 9*1 + 1*2 + 3*3 = = 8 + 15 + 0 + 72 + 2 + 9 + 0 + 9 + 2 + 9 = = 126 126 / 10 = 12 i reszty 6 6 jest różne od 0 więc suma kontrolna wynosi 10 6 = 4 Otrzymujemy więc numer PESEL: 85082301234 i możemy sprawdzić, czy jest on poprawny za pomocą odpowiednich kalkulatorów on-line. 5
Rysunek 7. Sprawdzanie numeru PESEL. Zrzut ekranowy strony internetowej: http://www.kalkulatory.gofin.pl/sprawdzanie-pesel-weryfikacja-pesel,12.html Jak widać numer ten jest poprawny i pokazuje przyjęte przez nas założenia. Rysunek 8. Numer PESEL można znaleźć wszędzie. Źródło: http://www.kont.umcs.lublin.pl/zdj/lukowicz/lukowicz_pesel.jpg 6
Numer dowodu osobistego obowiązującego na terenie RP Numer dowodu osobistego różni się znacznie od numeru PESEL zawiera on w sobie nie tylko cyfry lecz także litery. Rysunek 9. Dowody osobiste obowiązujące na terenie RP. Źródło: http://www.express.olsztyn.pl/ Rysunek 10. Przykładowy awers dowodu osobistego z wyróżnionym jego numerem. Numer ten jest poprawny pod względem walidacji. Źródło: http://www.pocztowy.pl AWU105446 AWU jest to seria dowodu osobistego 105446 numer dowodu osobistego przy czym pierwsza liczba jest cyfrą kontrolną 7
GENEROWANIE POPRAWNEGO NUMERU DOWODU OSOBISTTEGO Podczas obliczania cyfry kontrolnej wartości literowe serii dowodu zamienia się na cyfry według wzoru: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Następnie cały układ liczb mnożymy przez odpowiednie wagi dla poszczególnych liczb. Waga to kolejne liczby 7 3 1 7 3 1 7 3. Przy mnożeniu pomijamy cyfrę kontrolną. Następnie otrzymane wyniki mnożenia sumujemy ze sobą. Sumę, która powstanie dzielimy z resztą przez 10. Otrzymana reszta z dzielenia jest sumą kontrolną. Przykład: Spróbujmy wygenerować przykładowy numer dowodu osobistego. Nie mamy tutaj jakichś specjalnych założeń, przyjmijmy losowy układ liter i cyfr. Załóżmy, że naszym numerem będzie: AUG _12345 2. 1. Zamieniamy serię literową na odpowiednie cyfry, czyli: A 10, U 30, G 16. 2. Zapisujemy całość w postaci ciągu liczb: 10 30 16 1 2 3 4 5. 3. Mnożymy liczby przez odpowiednią wagę 10 30 16 1 2 3 4 5 * 7 3 1 7 3 1 7 3 = 70 90 16 7 6 3 28 15 4. Sumowanie wyników mnożenia: 70 + 90 + 16 + 7 + 6 + 3 + 28 + 15 = 235 5. Dzielimy otrzymaną sumę przez 10 z resztą (reszta jest cyfrą kontrolną) 235 / 10 = 23 i reszty 5 Poprawność otrzymanego numeru dowodu AUG 512345 można sprawdzić w kalkulatorze on-line. 2 W miejscu _ będzie znajdować się cyfra kontrolna. 8
Rysunek 9. Sprawdzanie poprawności numeru dowodu. Zrzut ekranowy strony internetowej: http://wipos.p.lodz.pl/zylla/ut/js-pesel.html 9
Walidacja numeru plastikowych kart płatniczych, algorytm Luhna Współcześnie trudno jest wyobrazić sobie świat, bez obecności krat płatniczych. Ich posiadanie sprawia, że nie musimy się martwić o posiadanie przy sobie gotówki, wystarczy niewielki, 8,5 cm kawałek plastiku. Karty płatnicze wprowadziły rewolucję w dokonywaniu płatności, a także przyczyniły Rysunek 10 Widok na chip karty płatniczej oraz na pierwsze 8 cyfr jej numeru. Źródło: się do zmiany stylu życia współczesnego człowieka. Pierwsze egzemplarze kart płatniczych zaczęły pojawiać się już w pierwszej http://skiingbusiness.com połowie XX w. Początkowo karty kredytowe znacznie różniły się od obecnych, nie posiadały one żadnych normalizacji. Był to zwykle kawałek metalowej blaszki z wygrawerowanymi danymi klienta. W dzisiejszych czasach budowę karty określają odpowiednie normy (z reguły standard ISO IEC_7812). Standard mówi także o tym jak ma wyglądać numer takiej karty. Zgodnie z normą ISO długość numeru plastikowej karty to 16 cyfr. Waliduje go algorytm Luhna (nazwa algorytmu pochodzi od nazwiska niemieckiego naukowca Hansa Petera Luhna pracującego dla firmy IBM). Podobnie jak w algorytmie walidującym numer PESEL, na końcu ciągu cyfr doklejana jest cyfra kontrolna. Algorytm ten ma także inne zastosowania, np. numer IMEI 3. Rysunek 11. Awers znormalizowanej karty płatniczej. Źródło: http://www.kartyplatnicze.info 3 IMEI numer identyfikacyjny telefonów komórkowych oraz innych urządzeń pracujących w sieci GSM/UMTS (np. modemów). Jest on indywidualny dla każdego urządzenia. 10
Specyfikacja numeru karty, generowanie, przykładowego, poprawnego numery karty płatniczej. Przykładowy numer karty płatniczej Visa, który poprawnie waliduje się: 4485 2339 0394 5601 4 Identyfikator Dziedziny Gospodarki, informuje on o tym jakiej dziedziny dotyczy numer karty. 1, 2 linie lotnicze; 3 podróż i rozrywka; 4, 5 bankowość, finanse; 6 handel, bankowość; 7 przemysł naftowy; 8 telekomunikacja; 9 do ustaleń według krajowych jednostek normalizacyjnych. 4485 23 Numer Identyfikacyjny Wydawcy karty, przykładowe numery najpopularniejszych wydawców to: Amex: 34****, 37****; Discovery: 6011**, 644***, 65****; Master- Card: 51**** - 55****; Visa: 4*****. 39 0394 560 identyfikator rachunku osobistego, indywidualny dziewięciocyfrowy numer przypisywany do danego rachunku. 1 cyfra kontrolna. Do walidacji numeru karty stosuje się algorytm Luhana. W uproszczeniu polega on na podwojeniu cyfr będących na parzystych pozycjach w numerze karty. Następnie sprawdzeniu otrzymanych iloczynów czy są większe od dziewięciu, jeśli tak to od otrzymanych iloczynów odjąć cyfrę 9. Kolejno sumujemy podwojone, zmienione iloczyny wraz z cyframi będącymi na pozycjach nieparzystych. Do otrzymanej liczby dodajemy taką liczbę, aby wynik był wielokrotnością liczby 10. Dodawana liczba jest cyfrą kontrolną. Przykład: Będziemy generować przykładowy (16cyfrowy) numer karty płatniczej MasterCard poprawnie walidujący się. 1. Wybieramy Numer Identyfikacyjny Wydawcy wraz z Numerem Dziedziny Gospodarki. Dla MasterCard będzie to przykładowo 55****. Wybieramy numer 551234 (cyfry 1234 są tu przykładowe). 2. Określamy identyfikator rachunku (9cyfrowa liczba) i dopisujemy go do wcześniejszego numeru, przykładowo 551234123456789. 3. Do otrzymanego numeru musimy określić cyfrę kontrolną (x) 551234123456789x. Wykonujemy potrzebne obliczenia. 11
Podwojenie 5 5 1 2 3 4 1 2 3 4 5 6 7 8 9 x co 2 cyfry 10-2 - 6-2 - 6-10 - 14-18 -9 jeśli > 9 1-2 - 6-2 - 6-1 - 5-9 Dodanie Z pozycji parzystych, po działaniach 32 cyfr Z pozycji nieparzystych 31 Suma 63 Wynika, że najbliższa wielokrotność 10 po dodaniu x to 70. 63+7=70 7 Otrzymany numer karty to : 5512 3412 3456 7897, kalkulator on-line potwierdza, że jest on poprawny. Rysunek 12. Sprawdzanie poprawności numeru karty. Zrzut ekranowy strony internetowej: http://wipos.p.lodz.pl/zylla/ut/js-pesel.html 12
Inne rodzaje sum kontrolnych 1. Bit parzystości (ang. Parity Bit) walidacja informacji przesyłanych za pomocą magistrali cyfrowych (np. protokół RS232). Jego obecność sprawia, iż przesyłana wiadomość posiada zawsze parzystą liczbę jedynek. Jest to jeden z najłatwiejszych sposobów walidacji przesyłanych danych. Przed wysłaniem gotowego pakietu danych wykonuję się na ciągu liczb binarnych alternatywę wykluczającą ( albo albo ), jeśli liczba 1 jest nieparzysta bit parzystości przyjmuje wartość 1 w przeciwnym wypadku wartość 0 J a k w N Rysunek 13. Przykładowa ramka danych przesyłanych za pomocą protokółu RS232. Litera H oznacza stan wysoki (logiczne "1"), litera L stan niski (logiczne "0"). Źródło: http://maxembedded.files.wordpress.com Jak widać na powyższym rysunku liczba 1 przesyłanych w zakresie danych (8 bitowa liczba) jest parzysta, a więc bit parzystości przyjmuje wartość L. 2. Cykliczny kod nadmiarowy, CRC (ang. Cyclic Redundancy Check) system kontrolny stosowany przy przesyłaniu lub magazynowaniu danych binarnych. Jego zastosowanie spotyka się przy wielu magistralach, od sieci komputerowych Ethernet przez magistralę 1-wire 4, kończąc na sprawdzaniu poprawności danych zapisanych w sektorze dysku twardego. Kod CRC jest to w skrócie reszta z dzielenia ciągu danych przez 4 1-Wire protokół komunikacyjny wykorzystywany do przesyłu danych pomiędzy urządzeniami elektronicznymi. Nazwa pochodzi od wykorzystywania do przesyłu tylko jednej linii danych (ang. Wire przewód). W praktyce stosując zasilanie pasożytnicze urządzeń do przesyłu danych oraz zasilania urządzenia wystarczą zaledwie dwa przewody. 13
(n + 1) bitowy dzielnik. Istnieje wiele wersje CRC, różnią się one między sobą wielomianem za pomocą którego dzielimy ciąg danych. Przykładowo dla 3 bitowego kodu CRC, weźmy dzielnik (3 + 1) czyli 1011. Do serii danych dopisujemy 3 wyzerowane bity czyli 000. Następnie ustawiamy dzielnik pod serią danych, jeśli nad najstarszą pozycją dzielnika mamy 0 przesuwamy dzielnik o tyle miejsc w prawo, aż napotkamy 1. Kolejnym krokiem jest wykonanie alternatywy wykluczającej pomiędzy dzielnikiem, a serią danych (z uwzględnieniem wcześniej dopisanych 3 bitów). Następnie otrzymaną serię zapisujemy w nowej linii i ustawiając pod nią dzielnik analogicznie jak poprzednio i powtarzamy wcześniej opisane czynności, aż do otrzymania liczby danych równych bądź mniejszych od 3. Przykładowo: Seria danych: 00110101000111, dzielnik 1011. Seria danych wraz z dopisanymi wyzerowanymi bitami. 00110101000111000 1011 00011001000111000 CRC - Przesunięcie dzielnika oraz wykonanie alternatywy wykluczającej - j/w 1011 00001111000111000 - j/w 1011 00000100000111000 - j/w 1011 00000001100111000 - j/w 1011 00000000111111000 - j/w 1011 00000000010011000 - j/w 1011 00000000000101000 - j/w 1011 00000000000000100 100 Otrzymano kod CRC Powszechnie stosowane kody są znacznie dłuższe (np. kod stosowany w sieci Ethernet jest 32 bitowy). 14
Podsumowanie Jak widać z powyższych przykładów stosowanie sumy kontrolnej nie zawsze musi być trudne, a potrafi ułatwić pracę rożnych systemów. Przedstawione wyżej rodzaje sum kontrolnych oraz systemów walidacji danych są tylko niewielkim procentem (bądź jego ułamkiem) sum stosowanych powszechnie. Występuje wiele innych algorytmów np. MD5 bądź SHA, które są dużo bardzie skomplikowane. Są to algorytmy kryptograficzne, ich zastosowanie więc nie ma na celu walidacji danych, ale ich szyfrowanie. Istnieją także inne rozwiązania sum kontrolnych, są to np. rozwiązania autorskie stosowane w specyficznych systemach magazynowania danych lub przy magistralach mających charakter jednostkowy. 15
Bibliografia 1. http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 2. http://joemonster.org/art/20248 3. http://maxembedded.files.wordpress.com 4. http://niebezpiecznik.pl/post/bezprzewodowe-hackowanie-samochodow-dzieki-chtkoszt-20-dolarow/ 5. http://niebezpiecznik.pl/post/ikea-hacked-zapraszamy-na-darmowa-kawe/ 6. http://pl.wikipedia.org/wiki/1-wire 7. http://pl.wikipedia.org/wiki/algorytm_luhna 8. http://pl.wikipedia.org/wiki/controller_area_network 9. http://pl.wikipedia.org/wiki/cykliczny_kod_nadmiarowy 10. http://pl.wikipedia.org/wiki/dow%c3%b3d_osobisty 11. http://pl.wikipedia.org/wiki/ethernet 12. http://pl.wikipedia.org/wiki/kontrola_parzysto%c5%9bci 13. http://pl.wikipedia.org/wiki/md5 14. http://pl.wikipedia.org/wiki/pesel 15. http://pl.wikipedia.org/wiki/sha-1 16. http://pl.wikipedia.org/wiki/suma_kontrolna 17. http://skiingbusiness.com 18. http://web.securityinnovation.com/ 19. http://wipos.p.lodz.pl/zylla/ut/js-pesel.html 20. http://www.aliorbank.pl 21. http://www.auobd2.com 22. http://www.chfi.com/ 23. http://www.edmond.nl/typo3temp/pics/9d47d865fe.gif 24. http://www.express.olsztyn.pl/ 25. http://www.kalkulatory.gofin.pl/sprawdzanie-pesel-weryfikacja-pesel,12.html 26. http://www.kartyplatnicze.info 27. http://www.kont.umcs.lublin.pl/zdj/lukowicz/lukowicz_pesel.jpg 28. http://www.liceum.fc.pl/templates/ecoplanet-fts/images/logo.png 29. http://www.nportal.no 30. http://www.pocztowy.pl 16