Dodatkowe wskazówki do ćwiczenia z czytnikiem kart

Transkrypt

Dodatkowe wskazówki do ćwiczenia z czytnikiem kart
Dodatkowe wskazówki do ćwiczenia z czytnikiem kart mikroprocesorowych
dla studentów studiów zaocznych
UWAGA
Poniższe wskazówki zakładają znajomość architektury PC/SC oraz struktury komend APDU
Obsługa czytnika w systemie Windows
Do korzystania z czytnika w systemie Windows można wykorzystać bibliotekę Winscard
dostarczaną przez system operacyjny realizującą komunikację z czytnikiem wg architektury PC/SC.
Za pomocą funkcji z tej biblioteki można odczytywać dane z karty.
Bibliotekę Winscard musimy jawnie dołączyć do projektu albo poprzez właściwości projektu
(Project->properties->Configuration properties->Linker->Input->Additional dependencies) albo za
pomocą instrukcji preprocesora (#pragma comment(lib,"winscard.h"). Oczywiści w kodzie
źródłowym należy dołączyć plik z definicjami (#include<winscard.h>)
Proces komunikacji może wyglądać następująco:
1. Nawiązanie komunikacji z lokalnym zarządcą zasobów (SCardEstablishContext)
2. Wylistowanie dostępnych czytników (SCardListReaders)
3. Połączenie się z wybranym czytnikiem (SCardConnect)
4. Wysyłanie komend i odczyt danych z karty (SCardTransmit)
5. Rozłączenie się z czytnikiem (SCardDisconnect)
6. Rozłączenie się z zarządcą zasobów(SCardReleaseContext)
Odczyt danych z karty SIM GSM'a (lista kontaktów)
1.Wybrać katalog DF Telecom (FID = 0x7F10)
2.Wybrać plik EF ADN (FID = 0x6F3A) - zapamiętać wartość SW2 odpowiedzi
3.Pobrać dalszą część odpowiedzi za pomocą komendy GET_RESPONSE (ins=0xC0), w której
należy ustawić długość odpowiedzi (P3) na podstawie SW2 z poprzedniego punktu
4.Za pomocą komendy READ_RECORD (ins=0xB2) odczytać rekord w ten sposób w parametrach
komendy należy ustawić nr rekordu (w P1 – liczony od 1) oraz długość odpowiedzi (w Le), która
jest podana na bajcie o indeksie 14 (licząc od zera) odpowiedzi poprzedniej
komendy(GET_RESPONSE)
5.Uzyskany pojedynczy rekord książki telefonicznej jako ciąg bajtów ma strukturę przedstawioną
niżej
------- struktura rekordu książki telefonicznej-----nazwa FF FF FF dl typ n1 n2 n3....FF FF
nazwa - kolejne kody ascii nazwy użytkownika
dl - ilość bajtów opisujących numer tel. (łącznie z typem)
typ - 81 lub 91
n1,n2,... - bajty nr telefonu.
Nr telefonu kodowany jest następująco (pojedynczy bajt):
pojedynczy bajt składa się z dwóch liczb w kodzie bcd - należy je zamienić miejscami np. 0x81
dla nr 18
UWAGA
Zamiana miejsc dla nr telefonu wynika z literatury,ale np. program smardcard tego nie robi.
Użyteczne linki
http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx
http://www.ttfn.net/techno/smartcards/iso7816_4.html#ss1
http://solutions-point.co.uk/tag/apdu-commands
http://www.springcard.com/solutions/pcsc.html