Karty inteligentne: elementarz

Karty inteligentne cieszą się ostatnio dużym zainteresowaniem w Internecie, na konferencji JavaOne w kwietniu zeszłego roku (cztery sesje poświęcone tej technologii), w dużych sieciach informacyjnych oraz w CNN. W tym artykule ożywimy kartę inteligentną na przykładzie prawdziwej karty inteligentnej. Przedstawione tutaj techniki pozwolą Ci rozpocząć tworzenie aplikacji Java obsługujących karty inteligentne.

Skoncentrujemy się na dwóch typach kart inteligentnych: kartach pamięci , które można postrzegać jako maleńkie wymienne dyski do odczytu / zapisu z opcjonalnymi zabezpieczeniami; i karty procesorowe , które można postrzegać jako miniaturowe komputery z portem wejściowym i wyjściowym. Przyszłe artykuły będą bardziej szczegółowo omawiać karty procesorowe.

W ramach artykułu opracujemy prosty prototyp do odczytu i zapisu danych na karcie inteligentnej. Omówimy kartę recepty na lek , która zawiera listę wszystkich Twoich recept i śledzi Twoje ubezpieczenie, plany recept i inne przydatne informacje. Późniejsze artykuły będą omawiać ideę karty recept.

Zauważysz, że powtarzającym się motywem, który działa w tej serii na kartach inteligentnych, jest potrzeba struktury bezpieczeństwa, aby zapobiec nieuczciwym wtyczkom, składnikom ActiveX itp. Przed dostaniem się do osobistych i / lub korporacyjnych gadżetów informacyjnych. W tym celu pokaz sposobu odczytywania i zapisywania danych na karcie inteligentnej zawarty w tym artykule zapewni trwałe, bezpieczne (i przenośne) przechowywanie.

Co to jest karta inteligentna?

Możesz myśleć o karcie inteligentnej jako o „karcie kredytowej” z „mózgiem”, który jest małym wbudowanym chipem komputerowym. Ten komputer-kartę można zaprogramować do wykonywania zadań i przechowywania informacji, ale pamiętaj, że mózg jest niewielki - co oznacza, że ​​moc karty inteligentnej jest znacznie mniejsza niż komputer stacjonarny.

Karty inteligentne są obecnie używane w transakcjach telefonicznych, transportowych, bankowych i zdrowotnych, a wkrótce - dzięki takim programistom jak Ty - zaczniemy je widzieć w aplikacjach internetowych. Karty inteligentne są już szeroko stosowane w Japonii i Europie i zyskują popularność w USA. W rzeczywistości w branży kart inteligentnych w tym kraju ostatnio miały miejsce trzy znaczące wydarzenia:

PC / SC

Microsoft i kilka innych firm wprowadziło PC / SC , interfejs aplikacji kart inteligentnych do komunikacji z kartami inteligentnymi z platform opartych na Win32 dla komputerów osobistych. PC / SC obecnie nie obsługuje systemów innych niż Win32 i może nigdy tego nie robić. Później omówimy to bardziej szczegółowo.

OpenCard Framework

OpenCard to otwarty standard, który zapewnia współdziałanie aplikacji kart inteligentnych w ośrodkach NC, POS, komputerach stacjonarnych, laptopach, dekoderach i tak dalej. OpenCard obiecuje dostarczyć w 100% czyste aplikacje do kart inteligentnych w języku Java. Aplikacje kart inteligentnych często nie są czyste, ponieważ komunikują się z urządzeniem zewnętrznym i / lub korzystają z bibliotek klienta. (Na marginesie, aplikacje w 100% czyste mogłyby istnieć bez OpenCard, ale bez niego programiści korzystaliby z interfejsów stworzonych w domu do kart inteligentnych). OpenCard zapewnia także programistom interfejs do PC / SC w celu wykorzystania istniejących urządzeń w Win32 platformy.

JavaCard

JavaCard została wprowadzona przez firmę Schlumberger i niedawno przesłana jako standard przez JavaSoft. Schlumberger ma obecnie jedyną kartę Java na rynku, a firma jest pierwszym licencjobiorcą JavaCard. Karta inteligentna z potencjałem ustanowienia ogólnego standardu karty inteligentnej, JavaCard składa się ze standardowych klas i interfejsów API, które umożliwiają uruchamianie apletów Java bezpośrednio na karcie zgodnej ze standardem ISO 7816. Karty JavaCard umożliwiają bezpieczne i niezależne od chipów wykonywanie różnych aplikacji.

Uwaga:

Chociaż ten artykuł koncentruje się na kartach inteligentnych, należy pamiętać, że nie jesteś ograniczony do tego rodzaju urządzeń. Osobiście wolę urządzenie „Ibuttons” produkowane przez Dallas Semiconductor. Jest mały i przenośny jak karta kredytowa, ale o wiele poręczniejszy. Czemu? Nie musisz wyciągać portfela w poszukiwaniu karty; Ibuttons jest właśnie tam, na twoim palcu. Tak, to pierścionek!

Chociaż istnieją bezdotykowe wersje karty inteligentnej (więcej informacji na ten temat poniżej), myślę, że Ibuttons, funkcjonalne urządzenie typu biżuterii, może być całkiem opłacalne. Więcej informacji na temat ibuttons można znaleźć w sekcji Zasoby. Nawiasem mówiąc, zespół Java Commerce zademonstrował „JavaRing” na Java Internet Business Expo (JIBE) w Nowym Jorku w sierpniu ubiegłego roku. Możesz przeczytać o tym w artykule w magazynie Fortune (ponownie zobacz sekcję Zasoby).

Dlaczego warto używać karty inteligentnej?

Jakie są zalety korzystania z karty inteligentnej? Cóż, karta inteligentna:

  • jest bardziej niezawodna niż karta z paskiem magnetycznym
  • obecnie może przechowywać sto razy więcej informacji niż karta z paskiem magnetycznym
  • jest trudniejszy do manipulacji niż paski magazynka
  • mogą być jednorazowe lub wielokrotnego użytku
  • może pełnić wiele funkcji w wielu branżach
  • jest kompatybilny z przenośnymi urządzeniami elektronicznymi, takimi jak telefony, komputery osobiste (PDA) i komputery
  • stale się rozwija (w końcu zawiera chip komputerowy)

Rodzaje kart inteligentnych

Jak wspomniano powyżej, w tym artykule skupimy się na dwóch typach kart inteligentnych - pamięci i procesach. W sumie istnieje pięć typów kart inteligentnych:

  1. karty pamięci
  2. karty procesorowe
  3. elektroniczne karty portmonetki
  4. karty bezpieczeństwa
  5. JavaCard

Karty inteligentne to osobisty sprzęt, który musi komunikować się z innym urządzeniem, aby uzyskać dostęp do urządzenia wyświetlającego lub sieci. Karty można podłączyć do czytnika, powszechnie określanego jako

terminal kart

lub mogą działać na częstotliwościach radiowych.

Karty inteligentne mogą komunikować się z czytnikiem lub odbiornikiem (zobacz sekcję dotyczącą czytników poniżej, aby uzyskać więcej informacji na temat tych dwóch terminów) w jednej z dwóch form:

Stykowe karty inteligentne - połączenie jest nawiązywane, gdy czytnik styka się z małym złotym chipem z przodu karty.

Bezstykowe karty inteligentne - mogą komunikować się za pośrednictwem anteny, eliminując potrzebę ręcznego wkładania i wyjmowania karty. Z kartą zbliżeniową wystarczy, że zbliżysz się do odbiorcy, a karta zacznie się z nim komunikować. Karty zbliżeniowe mogą być używane w zastosowaniach, w których wkładanie / wyjmowanie karty może być niepraktyczne lub w których ważna jest szybkość.

Niektórzy producenci produkują karty, które działają zarówno w trybie kontaktowym, jak i zbliżeniowym.

Utwórz środowisko programistyczne do tworzenia aplikacji na karty inteligentne

Aby tworzyć aplikacje do obsługi kart inteligentnych, potrzebujesz kilku rzeczy, a mianowicie: czytnika kart inteligentnych; oprogramowanie do komunikacji z czytnikiem, a także oprogramowanie do komunikacji z kartą, która została podłączona do czytnika; i oczywiście karty inteligentne i sprzęt do kart inteligentnych.

Czytnik kart inteligentnych

Aby komunikować się z kartą inteligentną lub opracować aplikację obsługującą karty inteligentne, musisz mieć czytnik . Czytnik zapewnia ścieżkę do wysyłania i odbierania poleceń z karty przez aplikację. Na rynku dostępnych jest wiele typów czytników, z których najpopularniejsze to modele szeregowe , PCCard i klawiatury . (Modele klawiatur pojawiają się tu i tam; spodziewaj się, że będą bezpośrednio dostępne u dużych producentów komputerów osobistych do czerwca 1998 r.)

Ten artykuł używa czytników szeregowych do obsługi urządzeń. Czytnik szeregowy podłącza się do portu szeregowego komputera. Zwróć uwagę, że dostarczony kod obsługuje także czytnik kart PCCard; większość laptopów ma wbudowane gniazda PCCard.

Każdy producent zapewnia inny protokół rozmowy z czytelnikiem. Gdy można komunikować się z czytnikiem, istnieje jeden protokół do komunikacji z kartą inteligentną: Komunikacja z kartą inteligentną jest oparta na formacie APDU. (Format APDU omówiono poniżej). Aby uzyskać informacje na temat zakupu własnego czytnika, zobacz nagłówek „Czytniki kart inteligentnych Gemplus” w sekcji Zasoby.

Oprogramowanie do komunikacji z czytnikiem

W przykładzie karty inteligentnej zawartym w tym artykule potrzebnych jest kilka klas obiektowych. To są:

  • Klasy poleceń ISO do komunikacji z protokołem 7816
  • Ćwiczenia dotyczące komunikacji z czytelnikiem
  • Klasy do konwersji danych do formatu określonego przez producenta
  • Aplikacja do testowania i wykorzystywania kart do celów, dla których aplikacja została zaprojektowana

Karty inteligentne i sprzęt do kart inteligentnych

Jak wspomniano na początku artykułu, aby opracować tutaj aplikację karty inteligentnej, potrzebujesz sprzętu do obsługi kart inteligentnych i niektórych kart inteligentnych. Zestawy programistyczne do kart inteligentnych można kupić od wielu firm, w tym Gemplus i Schlumberger.

Dla tych z Was, którzy mają już czytelników, powinniście móc używać swojego czytnika, dostarczając implementację klasy interfejsu, którą omówimy później. Jak wspomniano powyżej, zanim będziemy mogli komunikować się z kartą, musimy być w stanie komunikować się z czytnikiem i tak jak jest wiele różnych kart, tak samo jest wielu różnych czytników.

Ważne standardy kart inteligentnych

Ważnym elementem układanki tworzenia aplikacji obsługujących karty inteligentne są standardowe protokoły. Zasadniczo aplikacja komunikuje się z czytnikiem, który z kolei komunikuje się z kartą inteligentną za pomocą standardowego protokołu - w naszym przypadku protokołu International Standards Organization (ISO) 7816.

Podobnie jak w przypadku każdej nowej technologii, istnieje tak wiele standardów dotyczących kart inteligentnych, że możesz poczuć się zniechęcony i przytłoczony. Osiągnięcie podstawowej znajomości poniższych standardów umożliwi tworzenie aplikacji z pewnością, że nie ignorujesz czegoś podstawowego w korzystaniu z kart inteligentnych. W przypadku niektórych systemów w grę wchodzą jednak specjalne standardy. Rozbiłem wszystkie standardy na standardy „poziome” i „pionowe”: standardy poziome mogą być używane we wszystkich aplikacjach, podczas gdy standardy pionowe są specyficzne dla systemu.

Normy horyzontalne

  • ISO 7816 - opisuje interfejs najniższego poziomu do karty inteligentnej. Na tym poziomie bajty danych są przesyłane między czytnikiem kart a kartą.

  • PC / SC - standard komunikacji z kartami inteligentnymi podłączonymi do komputerów z systemem Win3.1 / Win95 / NT.

  • OCF - interfejs całkowicie Java do komunikacji z kartami inteligentnymi w środowisku Java. (Wkrótce OCF pozwoli programistom pisać do OCF i wykonywać tłumaczenie, więc nie będzie potrzeby pisania na PC / SC.)

  • JavaCard - opisuje JavaCard i funkcje, które obsługuje.

Normy pionowe

  • Mondex - cyfrowa gotówka wykorzystująca wyłącznie karty inteligentne. Podejście Mondex nie pozwala na istnienie gotówki poza kartą.

  • VisaCash - karta debetowa, która śledzi karty na serwerze.

  • Proton - inna forma e-gotówki.

  • MPCOS-EMV - karta ogólnego przeznaczenia, która pozwala na wdrożenie własnego rodzaju waluty lub tokena.

Zawsze jestem zdumiony, że tak mały kawałek plastiku może wymagać tak wielu czytania dokumentacji i tak dużej wiedzy od programisty!

Ponieważ w przypadku kart inteligentnych niezbędny jest tak wysoki poziom wiedzy specjalistycznej, deweloperzy mogą dostarczać produkty obsługujące technologię Beans, które wdrażają standard pionowy z wykorzystaniem standardu poziomego dla rynku, na którym chcesz sprzedawać. Oznacza to, że można opracować komponenty bean, które używają różnych kombinacji standardów poziomych, takich jak OpenCard, w celu implementacji określonej aplikacji przy użyciu innego standardu branżowego dla handlu lub dowolnej innej aplikacji.

Komunikuj się z kartami inteligentnymi z apletu lub aplikacji Java

Wiesz, czego potrzebujesz, aby podłączyć cały sprzęt. Teraz musimy zrozumieć, jak korzystać z niektórych API, które pozwolą nam wysyłać polecenia z aplikacji do czytnika. (Czytnik z kolei komunikuje się z kartą, działając w ten sposób jako pośrednik przed wysłaniem danych do karty). Czytnik kart inteligentnych porusza złotymi stykami i przesyła dane. Karta coś zrobi z danymi i zwróci je do czytnika, który następnie zwróci dane do aplikacji. Więc gdzie są te wszystkie bajty, gdy są przenoszone z aplikacji na kartę?

Jak wspomniano powyżej, aplikacja komunikuje się z czytnikiem, który z kolei komunikuje się z kartą inteligentną przy użyciu omówionych powyżej standardów. Zasadniczo, w miarę rozwoju technologii kart inteligentnych, ISO zaproponował standard karty inteligentnej. Standardowo zdefiniowane parametry mechaniczne i elektryczne, a także protokół komunikacji z kartą. Wskaźniki do odpowiednich dokumentów ISO są wymienione w sekcji Zasoby. Niestety, grupa ISO nie była w stanie zapewnić standardu komunikacji z czytelnikiem. Tak więc, aby wysłać polecenie do karty, najpierw musisz znaleźć polecenie, które obsługuje karta, zawinąć to polecenie w pakiet poleceń ISO, a następnie zawinąć to nowe polecenie w opakowanie wymagane dla danego czytnika. Przedstawiona tutaj przykładowa aplikacja wykona wszystkie te warstwy za Ciebie.

Jednostki danych protokołu aplikacji (APDU)

Podstawową jednostką wymiany z kartą inteligentną jest pakiet APDU. Komunikat polecenia wysyłany z warstwy aplikacji oraz komunikat odpowiedzi zwracany przez kartę do warstwy aplikacji nazywane są jednostkami danych protokołu aplikacji (APDU). Komunikacja z kartą i czytnikiem odbywa się za pomocą jednostek APDU. APDU można uznać za pakiet danych, który zawiera pełną instrukcję lub pełną odpowiedź z karty. Aby zapewnić tę funkcjonalność, jednostki APDU mają dobrze zdefiniowaną strukturę zdefiniowaną w wielu dokumentach ISO należących do rodziny specyfikacji 7816.

APDU składają się z następujących pól:

Format polecenia APDU

CLA INS P1 P2 Lc Dane Le

Format odpowiedzi APDU

Dane SW1 SW2

Oto niektóre z klas przewidzianych do transportu jednostek APDU i funkcji klas: