piątek, 9 lutego 2018

Karty Mifare Ultralight oraz Ultralight C

W tym poście chciałbym opisać technologię kart zbliżeniowych RFID, Mifare Ultralight oraz Mifare Ultralight C. Karty operują na częstotoliwości 13,56MHz

[Źródło: https://www.nxp.com/docs/en/data-sheet/MF0ICU2.pdf]


Mifare Ultralight [1] 



Jest jedną z prostszych dostępnych technologii Mifare. Dzięki temu jest też bardzo tania.

Została ona wyposażona w pamięć EEPROM o pojemności 512 bit (64 bajty). Dla użytkownika zostało przewidziany dostęp do 48 bajtów (384 bity). Liczba cykli zapisu oraz odczytu wynosi 10000.

Każda z kart została wyposażona w unikalny numer seryjny zapisany na 7 bajtach. Ten standard został opisany w normie ISO 14443A. Transmisja przeprowadzana jest z prędkością 106 kbit/s. Zasięg działania wynosi do 10 cm.

Karta została wyposażona w obszar OPT, który stanowi 32 bity danych przeznaczone do jednokrotnego zapisu.

Można wyróżnić 5 stanów działania:

Idle State - ten stan jest uruchamiany zaraz po resecie. Jest on utrzymywany gdy urządzenie odczytujące prześle komendę REQA (Request Answear) lub WUPA (Wake - Up Command). Pozostałe dane są odczytywane jako błędy. Z tej komendy można przejść do Ready 1 State.

Ready 1 State - w tym stanie odczytywana jest część UID wykorzystująca komendy Anticollosion bądź Select. Z tego stanu do kolejnego można przejść za pomocą komend:
SELECT - ta komenda pozwala na przejście do stanu Ready 2 State. W tej części następuje odczytanie drugiej części UID, 
READ - wszystkie mechanizmy antykolizji zostały pominięte. Następuje przejście do stanu Active.

Ready 2 State - ten stan pozwala na odczytanie pozostałych części UID z karty, czyli 4 bajtów. Z tego stanu można przejść przez rozkaz SELECT bądź READ.

Active State - w tym stanie po zidentyfikowaniu karty możliwe jest wprowadzenie 4 bajtów, lub odczyt 16 bajtów danych. Z tego stanu najczęściej można przejść do stanu Halt.

Halt State - do niego następuje przejście tylko przez komendę Halt ze stanu Active. Aby wprowadzić układ w ten tryb należy podać komendę HLTA. Ten stan pozwala urządzeniu odczytującemu na rozróżnianie pomiędzy kartami już przetworzonymi a tymi, które mają zostać odczytane. 

Numer seryjny jest zapisany na 7 bajtach danych. Razem z nim w sektorze 0 zostały także wpisane dwa bajty sprawszające.


Mifare Ultralight C [2]



Ta karta w porównaniu do technologii wcześniejszej wyróżnia się mechanizmami kryptograficznymi opartymi na algorytmach 3DES. Pozwala on zabezpieczyć układ przed kopiowaniem, zapisywaniem czy odczytem danych. Dodatkowo zwiększono ilość dostępnej pamięci do 1536 bitów (192 bajty). Dla użytkownika udostępnione zostały 1152 bity (144 bajty) danych. Pamięć znajdująca się na karcie pozwala na 10000 cykli zapisów. Unikalny numer seryjny dla karty został zapisany na 7 bajtach.

Siedmio-bajtowy numer seryjny został zapisany w pierwszych 9 bajtach pamięci wraz z bajtami BCC. Pierwszy z bajtów numeru seryjnego jest kodem producenta karty.

 

Dostęp do stron od 0x03 do 0x0F może zostać zablokowany po programowaniu. W tym celu należy ustawić odpowiednie bity Lock.

W porównaniu z kartą Mifare Ultralight, wersja C została wyposażona w procedurę Authentication.  Po niej możliwy jest zapis bądź odczyt danych z konkretnych sektorów. Proces uwierzytelnienia przeprowadzany jest za pomocą 3DES. Wygląda on następująco:

Najpierw przesyłany jest kod procedury Authentication do karty. Następnie karta generuje 8 bajtowy numer który jest przesyłany do czytnika. Czytnik odbiera numer generuje swój kod za pomocą posiadanego klucza, następnie wykonuje operacje przesunięcia na wygenerowanym numerze i przesyła nowy kod do karty. Karta sprawdza czy układ dekodujący posiada ten sam klucz. Jeśli operacja się powiedzie to przesyłany jest nowy wygenerowany kod z karty do czytnika. Jeśli czytnik po odebraniu ostatniej ramki jest wstanie ją zdekodować to procedura się powiodła, w innym przypadku następuje przerwanie operacji.

Sam klucz może zostać zaprogramowany na karcie w sektorze 0x2C do 0x2F. 0x2C oraz 0x2D zawierają pierwszy klucz, drugi klucz znajduje się od 0x2E do 0x2F. Dane wprowadza się odpowiednio od LSB (klucz 1: 0x2C Byte 0 oraz klucz 2: 0x2E Byte 0) do MSB (klucz 1: 0x2D Byte 3 oraz klucz 2: 0x2F Byte 3).


Aby zaprogramować klucz należy przesłać kod operacji (0x0A), miejsce do którego mają zostać zapisane dane (0x2C do 0x2F), cztery bajty danych oraz CRC.


Bibliografia



[1] Mifare Ultralight - Datasheet
[2] Mifare Ultralight C - Datasheet