|
|
|
|
|
|
|
|
|
|
|||
![]() |
|||||||||||
Piotr Konieczny
konsultant ds. bezpieczeństwa, podróżnik, |
|||||||||||
|
« wszystkie wpisy | reklama: Porównywarka cen Piątek, 30 czerwca 2006 :: 00:15:10
Credit Card hacking (karty kredytowe od A do Z)
Karty kredytowe na dobre wkroczyły w nasze życie. Chociaż w Polsce ciągle są z nimi problemy, na Zachodzie plastykowy pieniądz to podstawowa rzecz, jaką oprócz kluczy zabiera się ze sobą wychodząc z domu.
Ciężko jest znaleźć specjalistyczne informacje dotyczące kart kredytowych. Banki nie udzielają żadnych informacji, praktyczną wiedzą niechętnie dzielą się także pracownicy centrów autoryzacyjnych. Wiadomo, zagadnienie powiązane jest z wcale nie małym obrotem gotówki — w niczyim interesie leży więc ujawnianie zaplecza systemu bezpieczeństwa obsługującego tak wielkie transakcje pieniężne.
Karty Kredytowe i paski magnetyczne 15 lat temu
Wszystko zaczęło się w 1989 roku, kiedy to we wspomnianej normie ISO 7812 zawarto specyfikację dla popularnych dziś pasków magnetycznych. Paski magnetyczne to mechanizm identyfikacji karty. Właśnie w takim pasku zapisany jest 19 cyfrowy numer (tyle właśnie dopuszcza norma).
Łamiemy numery kart kredytowych...na poszczególne bloki.
MMI (1 cyfra)Pierwsza od lewej cyfra, to tzw. Główny Indentyfikator Przemysłowy (ang. Major Industry Identifier). Jej wartość wskazuje na przeznaczenie karty. Wbrew pozorom, nie wszystkie z 19 cyfrowych numerów opisanych przez normę ISO 7812 są wykorzystywane jako numery kart kredytowych. Część numerów wędruje na karty lojalnościowe, lotnicze, etc.
Jak widać, tylko trzy wartości wykorzystywane są w bankowości. Numery naszych kart płatniczych najprawdopodobniej zaczynają się od 4, 5, lub 6. Numer zaczynające się od innych cyfr też zostaną naniesione na karty, ale już niekoniecznie płatnicze.
IIN (6 cyfr)Sześć pierwszych cyfr, włącznie z MMI, to tzw. Identyfikator Wydawcy (ang. issuer identifier number). Określa on organizację, która przyznała numer, np. danej karcie kredytowej. W odniesieniu do kart kredytowych IIN nazywany jest BIN-em, (ang. Bank Identification Number). Poszczególne BIN-y listuje Wikipedia. Łatwo obliczyć, że jest dokładnie milion możliwych wydawców (10^6).
AN (max. 12 cyfr)AN, to po prostu Account Number, czyli numer konta. Jest to zbiór cyfr począwszy od siódmej, aż do przedostatniej. Łatwo więc obliczyć, że przy maksymalnej długości 19 cyfr w numerze, maksymalna długość numeru konta to 12. Kombinacji numerów konta jest więc milion razy tyle, co numerów IIN/BIN. (10^12). Każdy z wydawców ma więc do dyspozycji bilion numerów! Suma kontrolna (ostatnia cyfra)Suma kontrolna, obliczana za pomocą algorytmu Luhna pozwala bankom na zmniejszenie ilości poprawnych numerów kart kredytowych (cracker ma trudniej, bo tylko jedna na dziesięć możliwych kombinacji jest poprawna).
//---------------------------------------------------------
// Checks for valid credit card number using Luhn algorithm
//---------------------------------------------------------
public abstract class LuhnCheck {
//--------------------------------
// Filter out non-digit characters
//--------------------------------
private static String getDigitsOnly (String s) {
StringBuffer digitsOnly = new StringBuffer ();
char c;
for (int i = 0; i < s.length (); i++) {
c = s.charAt (i);
if (Character.isDigit (c)) {
digitsOnly.append (c);
}
}
return digitsOnly.toString ();
}
//-------------------
// Perform Luhn check
//-------------------
public static boolean isValid (String cardNumber) {
String digitsOnly = getDigitsOnly (cardNumber);
int sum = 0;
int digit = 0;
int addend = 0;
boolean timesTwo = false;
for (int i = digitsOnly.length () - 1; i >= 0; i--) {
digit = Integer.parseInt (digitsOnly.substring (i, i + 1));
if (timesTwo) {
addend = digit * 2;
if (addend > 9) {
addend -= 9;
}
}
else {
addend = digit;
}
sum += addend;
timesTwo = !timesTwo;
}
int modulus = sum % 10;
return modulus == 0;
}
//-----
// Test
//-----
public static void main (String[] args) {
String cardNumber = "4408 0412 3456 7890";
boolean valid = LuhnCheck.isValid (cardNumber);
System.out.println (cardNumber + ": " + valid);
cardNumber = "4408 0412 3456 7893";
valid = LuhnCheck.isValid (cardNumber);
System.out.println (cardNumber + ": " + valid);
cardNumber = "4417 1234 5678 9112";
valid = LuhnCheck.isValid (cardNumber);
System.out.println (cardNumber + ": " + valid);
cardNumber = "4417 1234 5678 9113";
valid = LuhnCheck.isValid (cardNumber);
System.out.println (cardNumber + ": " + valid);
}
}
Generator Numerów Kart Kredytowych
Każdy uważny czytelnik tego artykułu powinien już wiedzieć, jakie czynności musi wykonać atakujący, aby udało mu się wygenerować poprawny numer karty kredytowej.
Inne ciekawostki
VISA jest organizacją non-profit (sic!) To po prostu ugrupowanie reprezentujące interesy członków (banków). Visa nie wydaje kart płatniczych, robią to jej partnerzy.
Przedstawione powyżej informacje ukazują genezę powstania kart kredytowych i objaśniają procedury z nimi związane. Zastanawiam się, czy/jak w następnym odcinku opisać tzw. carding, czyli m.in. ataki na karty kredytowe i z wykorzystaniem kart kredytowych — że takowe istnieją, wiadomo, problem w tym, żeby ci co nie wiedzą jak, dalej nie wiedzieli jak... :-)
UPDATE:
• Następny post:
Oops they did it again... (Google's UTF problem)
Chcesz być informowany o kolejnych wpisach na ten temat? Komentarze:
|
|||||||||||
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|