Obsługa kart chipowych Smart Card

System plików i biblioteka API

Podstawowy system plików kart identyfikacyjnych Smart Card składa się z tylko trzech typów plików:

  • plik nadrzędny MF (z ang. Master file, root),
  • pliki dedykowane DF (z ang. Dedicated file, katalogi),
  • pliki elementarne EF (z ang. Elementary file).

Hierarchię plików przedstawiono na rys. 8. W systemie istnieje tylko jeden katalog nadrzędny MF. Pliki dedykowane DF są analogią katalogów, a zatem mogą być puste, zawierać pliki elementarne EF lub inne katalogi. Każdy z plików, łącznie z plikiem nadrzędnym MF, posiada swój unikalny identyfikator dwubajtowy. Identyfikator pliku MF jest z góry ustalony, a jego wartość wynosi szesnastkowo 0x3F00. Dzięki nadanym identyfikatorom każdy plik elementarny EF w systemie ma swoją unikalną ścieżkę dostępu.

 

Rys. 8. Szkielet możliwego systemu plików karty identyfikacyjnej

Rys. 8. Szkielet możliwego systemu plików karty identyfikacyjnej

 

 

Właściwe dane są przechowywane w plikach elementarnych, które mogą należeć do jednego z poniższych czterech rodzajów:

  • plik EF przeźroczysty (z ang. Transparent file);
  • plik EF liniowy z ustaloną długością o organizacji w rekordy;
  • plik EF liniowy ze zmienną długością o organizacji w rekordy;
  • plik EF o organizacji kołowej w rekordy.

Należy się kilka słów wyjaśnienia, jak powyższe rodzaje plików są zbudowane i do czego służą. Najbardziej surową postacią danych jest format transparentny (przeźroczysty), który jest po prostu ciągiem bajtów, a więc jest to odpowiednik pliku binarnego. Dostęp do zawartości takiego pliku wymaga podania przesunięcia (offsetu) od początku pliku oraz liczby bajtów, które mają być zapisane lub odczytane. Nieco bardziej skomplikowane są pozostałe formaty. Dane w typach rekordowych są zorganizowane w logiczne grupy o ustalonej lub zmiennej długości. Takie skomplikowanie będzie w docelowej aplikacji rzutowało na jej złożoność. Przedstawiona dalej aplikacja wykorzystuje podstawowy, przeźroczysty typ plików.

Operacje na plikach mogą się odbywać albo w sposób niezabezpieczony, przy użyciu standardowych funkcji zapisu, odczytu itd., oraz z wykorzystaniem mechanizmów zabezpieczeń. System zabezpieczeń również może być dwojaki. Prostszy polega na włączeniu wymogu podawania numeru PIN (z ang. Personal Identification Number) w celu dokonania akcji na systemie plików karty. Zdecydowanie bardziej zaawansowany system zabezpieczeń może opierać się o wymianę kluczy autoryzacyjnych. W tym ostatnim przypadku autoryzacja może być przeprowadzana po stronie karty identyfikacyjnej lub po stronie układu czytnika.

Autoryzacja wewnętrzna (z ang. Internal Authenticate) działa następująco. Aplikacja zaszyta w mikrokontrolerze czytnika generuje losowy klucz, który jest następnie kodowany według algorytmu szyfrującego i wysyłany do karty Smart Card. Ta dekoduje otrzymany ciąg bajtów korzystając z tajnego klucza, a następnie odsyła do czytnika wynik operacji. Aplikacja po stronie czytnika dokonuje porównania otrzymanych danych z pierwotnie wygenerowanymi losowymi wartościami. Jeśli operacja porównania zwróci wartość prawdziwą, to oznacza, że karta została zweryfikowana poprawnie.

Autoryzacja zewnętrzna (z ang. External Authenticate) jest nijako odwrotna. Mikrokontroler czytnika otrzymuje losowe dane, szyfruje je i odsyła do karty identyfikacyjnej, by ta mogła je zdeszyfrować i porównać z losowymi danymi pierwotnymi. Ponieważ karta Smart Card musi zostać poproszona o podjęcie jakiejkolwiek akcji, to w pierwszej kolejności należy do niej wysłać prośbę o wygenerowania losowych danych.

 

Tab. 1. Funkcje biblioteki firmy ST dla interfejsu Smart Card

Tab. 1. Funkcje biblioteki firmy ST dla interfejsu Smart Card

 

 

Firma STMicroelectronics do mikrokontrolerów STM32 dostarcza bibliotekę funkcji API dla interfejsu Smart Card. Jest ona zawarta w archiwum biblioteki Standard Peripherals Library, dostępnej na stronie producenta. Na bibliotekę Smart Card składa się pięć funkcji skrótowo skomentowanych w tab. 1.

Narzędziem wykorzystywanym bezpośrednio podczas komunikacji z kartą identyfikacyjną jest funkcja SC_Handler(). Wszelka wymiana danych odbywa się za pomocą wywołań tej funkcji. W argumentach funkcja SC_Handler() wymaga między innymi podania wskaźnika na stan karty. Wyróżnia się sześć dozwolonych stanów karty:

  • SC_POWER_OFF – Zasilanie nie jest doprowadzone do karty, ponadto wyłączony jest również cały interfejs Smart Card.
  • SC_POWER_ON – Zasilanie nie jest doprowadzone do karty, interfejs Smart Card jest jednak włączony, lecz sygnał zegarowy nadal nie jest doprowadzony.
  • SC_RESET_LOW – W tym stanie powinno nastąpić otrzymanie odpowiedzi na sygnał zerowania ATR (Answer to Reset). Wyprowadzenie RST znajduje się w stanie niskim, sygnał zegarowy dla karty identyfikacyjnej jest włączony.
  • SC_RESET_HIGH – Sekwencja ATR nadal nie została odebrana. Czytnik wymusza na wyprowadzeniu RST stan wysoki i utrzymuje go, aż nie otrzyma poprawnego ATR.
  • SC_ACTIVE – Odebrano poprawą ramkę ART i następuje jej dekodowanie, dzięki czemu będzie można określić, jaki protokół komunikacyjny jest zastosowany.
  • SC_ACTIVE_ON_T0 – Jeśli ustawiony jest ten stan, to znaczy, że użyto protokół komunikacyjny T0 i próba wymiany danych z kartą identyfikacyjną może zostać podjęta.

Aplikacja Smart Card

Sposób użycia SC_Handler() i pozostałych funkcji z biblioteki API przedstawia niżej omówiona aplikacja.

Zaproponowana aplikacja to zedytowana wersja przykładu dla interfejsu Smart Card zawartego w bibliotece API firmy ST. Wykorzystano kartę Smart Card dostarczaną wraz z zestawem STM3210B-EVAL, na której znajduje się system plików zgodny ze standardem GSM11.11. Filozofia używania kart identyfikacyjnych jest jednak na tyle elastyczna, że nie powinno być problemów podczas migracji aplikacji do współpracy z kartą z inną zawartością.

Standard GSM11.11 został opracowany przez ETSI (z ang. European Telecommunications Standards Institute) w połowie lat 90-tych na potrzeby telefonii komórkowej, a konkretnie dla kart SIM dla urządzeń mobilnych (z ang. Subscriber Identity Module – Mobile Equipment). Dla naszej aplikacji istotny jest jedynie mały wycinek z całego systemu plików GSM11.11. Ten niewielki fragment przedstawiono na rys. 9. Na rysunku przedstawiono dwa pliki: ICCID oraz IMSI. Plik elementarny ICCID (z ang. IC Card Idenfification) zawiera unikalny numer identyfikacyjny karty, jego dwubajtowy identyfikator w systemie plików to 0x2FE2. Identyfikator drugiego pliku elementarnego – IMSI (z ang. International Mobile Subscriber Identity) – to 0x6F07. Poniżej przedstawiono sposób odczytu pliku ICCID.

O autorze