Dwa słowa o kartach Mifare


Karty  RFID

Dziś zamierzam powiedzieć dwa słowa o kartach zbliżeniowych, a szczególnie o kartach Mifare. Wszystkich czytelników zainteresowanych tematyką kart zbliżeniowych odsyłam do normy ISO/IEC 14443, dokument ten składa się z czterech części:

  • ISO/IEC 14443-1:2008 – Parametry fizyczne karty, takie jak wymiary, właściwości elektryczne, poziomy pamięć.
  • ISO/IEC 14443-2:2010 – Częstotliwości komunikacji radiowej.
  • ISO/IEC 14443-3:2011 – Algorytm wyboru karty, algorytm unikania kolizji.
  • ISO/IEC 14443-4:2008 – Protokół komunikacyjny.

Termin Mifare odnosi się do kilku różnych typów kart zbliżeniowych produkowanych przez firmę NXP. Ten wpis poświęcę dwóm z nich.

MIFARE Classic oraz MIFARE Ultralight

Karty te nie są całkowicie zgodne ze specyfikacją ISO/IEC 14443. Podlegają części 1, 2, 3, ale nie części 4. Komunikacja z kartą odbywa się przy pomocy dedykowanego protokołu firmy NXP, natomiast dla wygody użytkowników wiele czytników emuluje komunikaty zgodne z ISO/IEC 14443-4.

  • MIFARE Classic – karta pamięciowa z pewnymi funkcjami kontroli dostępu. Na chwile obecną nadal szeroko stosowana, pomimo faktu że algorytmy kontroli dostępu do karty został złamane. Pierwszy blok danych służy tylko do odczytu. Jest tam przechowywany numer seryjny karty, tę funkcjonalność często wykorzystuje się do identyfikacji użytkownika. Ponieważ karta nie zapewnia w chwili obecnej poprawnej weryfikacji praw dostępu, funkcje weryfikacji integralności danych muszą być zapewnione przez warstwę aplikacji, np. poprzez kryptograficzne sumy kontrolne (tam gdzie to możliwe). Nota katalogowa karty zawiera szczegółowe informacje o prawach dostępu, strukturze pamięci oraz API karty.
    Oto mapa pamięci karty 1K:
    map_1k
    Na diagramie widzimy:

    • 16 sektorów, każdy po 4 bloki o rozmiarze 16 bajtów,
    • pierwszy blok tylko do odczytu,
    • ostatni blok każdego sektora zawiera dwa klucze oraz prawa dostępu do danego sektora.
  • MIFARE Ultralight – znacznie prostsza karta nieposiadająca żadnego systemu weryfikacji dostępu. Karta posiada 512 bitów pamięci, fabrycznie ustawiony numer seryjny oraz bity bezpiecznikowe, umożliwiające trwałe i nieodwracalne zablokowanie możliwości zapisywania na kartę. Dokumentacja karty przedstawia mapę pamięci:
    ultralightNa diagramie widzimy:

    • Numer seryjny karty zapisany 7 bajtów plus 2 na sumę kontrolną.
    • 2 bajty bitów bezpiecznikowych pozwalających blokować możliwość zapisu do pewnych części karty. Zapisywane wartości do tych obszarów pamięci będą poddane operacji OR z wartościami już obecnymi w pamięci. Jeśli jakikolwiek bit ustawimy ‚1’, to ta wartość będzie niemodyfikowalna.
    • 4 bajty danych typu OTP. Są to podobnie jak bity bezpiecznikowe dane, gdzie możemy zapisywać tylko jedynki. Jeśli ustawimy jakikolwiek bit, to nie będziemy mieli żadnej możliwości, aby go wyzerować.
    • 12 bloków po 4 bajty na dane użytkownika.

Chipy MIFARE mogą występować pod postacią kart plastikowych bez interfejsu stykowego, mogą być dodane jako dodatkowy układ do innych kart, jako breloczki, naklejki, itp. Poniżej kilka przykładów kart MIFARE.

kartyMifare clasic python
 Mifare clasic pythonddddd

Czytnik kart zbliżeniowych

Jeśli chcemy komunikować się z kartami zbliżeniowymi, potrzebujemy czytnika. Ja korzystam z ACR122, jest to tani czytnik na USB działający bardzo dobrze w środowisku Windows. Czytnik zakłada, że komunikujemy się z kartami zgodnymi z ISO/IEC 14443-4, a w przypadku kart Mifare sam emuluje poszczególne rozkazy karty. Szczegółowe informacje o tym czytniku można znaleźć w tym dokumencie. Mifare clasic python

Komunikacja z kartą

System Windows obsługuje karty inteligentne bardzo dobrze (tylko te zgodne z ISO).  Smart Card API Windows pozwala nam wymieniać APDU z kartą dzięki dowolnemu kompatybilnemu czytnikowi np. ACR122. Wszystkie  czytniki USB, jakie znam, nie posiadają dedykowanych sterowników, a one są obsługiwane przez standardowe sterowniki Windows.

W poniższym przykładzie zainstalowałem bibliotekę pomocnicza do obsługi kart inteligentnych w środowisku Python pyscard. Biblioteka pyscard jest tylko wygodną nakładką na standardowe API Windows plus kilka opcji dodatkowych. Wszystko, co robimy dzięki tej bibliotece, możemy zrobić również przy pomocy Smart Card API Windows. Jeśli nie chcemy ręcznie kompilować biblioteki pyscard, możemy pobrać gotowy instalator msi.

Poniżej moja klasa wywołująca wybrane komendy czytnika ACR122.

Warto odnotować, że nie rozmawiamy bezpośrednio z kartą. Wszystkie pakiety APDU mają klasę 0xFF, co zgodnie z dokumentacją czytnika oznacza, że będą zinterpretowane i przetworzone przez czytnik.

Zaraz po wybraniu karty otrzymujemy pakiet ATR (Answer to reset). Ten ciąg bajtów pozwala określić podstawowe właściwości karty (zarówno stykowej, jak i bezstykowej), zawiera informacje o wspieraniu niskopoziomowych protokołów (T0/T1), maksymalne rozmiary ramek  oraz ciąg bajtów umożliwiający identyfikację karty.  Poniżej kilka linków odnośnie do analizy ATR kart inteligentnych:

UWAGA: Aby wysłać jakikolwiek pakiet APDU do czytnika, nawet taki, który sprawdza wersje firmware, urządzenie musi być połączone z kartę. Po szczegóły odsyłam do dokumentacji czytnika.

Przykładowa sesja

Poniżej program demonstracyjny zrzucający zawartość dwóch pierwszych sektorów karty. Zakładamy, że jest to karta, do której pasuje domyślny klucz. W przypadku kart MIFARE Ultralight, które nie posiadają mechanizmów kontroli dostępu, powinniśmy usunąć poniższe linie.

Powinniśmy także zmienić rozmiar bloku zgodnie z dokumentacją. Karta Ultralight posiada 512 bitów pamięci podzielonej na 16 stron/bloków po 4B każdy.

Odczyt dwóch pierwszych sektorów karty MIFARE Classic

Wynik dla przykładowej czystej karty

Co dalej z kartami inteligentnymi?

Poniżej tematy, jakie planuję kiedyś opisać. Jeśli któryś z nich interesuje was bardziej niż pozostałe, to napiszcie o tym w komentarzu. Jeśli będzie zainteresowanie, to będę kontynuował temat kart inteligentnych.

  • Przykład bardziej zaawansowanych kryptograficznie kart zbliżeniowych, np. MIFARE DESFire.
  • Analiza protokołu komunikacyjnego, komunikacja bezpośrednio z kartą, bez żadnej logiki zaszytej w firmware czytnika.
  • Łamanie zabezpieczeń karty MIFARE Classic, jak złamać klucz dostępu. 
  • Dwa słowa o kartach płatniczych i standardzie EMV.
  • Piszemy własną aplikację na kartę inteligentną.

One thought on “Dwa słowa o kartach Mifare

  1. Fajny artykuł, trochę więcej niż dwa słowa 😉

    Czekam i kibicuję tematowi: „Piszemy własną aplikację na kartę inteligentną (desFire?)” 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany.