U mobilních telefonů systému GSM jsou všechny informace o uživateli, jeho přístupu, telefonních číslech, krátkých textových správách (SMS) a přístupových kódech uloženy v malé plastové kartě velikosti kreditní karty označované jako SMART CARD --dále jen karty--. Používají se nejenom u mobilních sítí, ale také jako platební karty, karty do telefonních automatů, přístupové karty, karty pro dekódování satelitních programů a další možná zapojení, která vyžadují velmi vysoký stupeň zabezpečení. Karty popsané v tomto článku jsou pouze jednoúčelové, ale dnes se již objevují nové SMART karty, které dovolují plovoucí využití. Je na ně možno uložit mnoho rozdílných služeb najednou, tzn. že z jediné a té samé karty můžeme zaplatit nákup v obchodě a s tou samou zavolat svým známým z mobilního telefonu. Tyto karty se užívají na celém světě, v podstatě jsou stejné, liší se pouze v maličkostech. --Do ruky jse mi dostaly pouze karty od Českých provozovatelů mobilních sítí--. V tomto článku se vám budu snažit nastínit funkci karet: komunikaci, připojení, zabezpečení informací a další.
Stavba karty
Čip karty je zalit v umělé hmotě stejných rozměrů, jaké jsou u kreditních karet.
Liší se pouze typ PLUG IN, který má kolem čipu perforování, aby bylo možno
tento čip z karty vyloupnout a vložit do přístroje, který je na tento typ konstruován. Pro
jakékoliv pokusy s kartou doporučuji na kartu nepájet, ale zakoupit si speciální
přípravek pro čtení čipových karet. Pokud teno přípravek neseženete, pájejte
pouze tenké dráty na vnější konec kontaktních plošek - jedině
mikropájkou !!!!.
Rozmístění vývodů na čipu je zřejmé z obrázku.
Vstup Vcc je napájecím vstupem karty, výrobce doporučuje +4.8 - +5.5V. Odběr ze zdroje
by neměl přesáhnout 10 mA. Signál reset slouží pro inicializaci karty, signál je
aktivní v log.0. Karta pro svou funkci vyžaduje hodinový signál 1 – 5 MHz. Vpp je
programovací napětí, tento vstup můžete spojit s Vcc ale pozor nikdy s GND. Na vývodu 4 je
signálová a napájecí zem. Vývod 6 je obousměrný port pro sériovou
komunikaci. Veškeré další kontaktní plošky na kartě jsou nezapojené
a nevyužívají se.
Komunikace s kartou
Komunikace probíhá sériově po jednom vodiči tam i zpět. Přenosová rychlost je odvozena
od hodinového signálu karty, podle vzorce (hodinový signál v Hz)/372 a to je v baudech.
Je přenášeno 8 bitů se dvěma STOP bity a lichou paritou. Jako první je posílán
bit nejvýznamnější a jako poslední bit nejmenší váhy (pochopitelně
nevynechává start a stop bity) a pozor jsou zde invertované log. úrovně oproti
sériovému UARTU počítače standartu IBM PC (tzn. že znak FFh poslaný kartou ve
skutečnosti znamená 00h).
Po resetu, karta vysílá po lince svůj status (několik byte), dále je nečinná a
čeká na příkazy. Příkazy se skládají z několika bytů. Jako první je byte
řídící (je stejný pro všechny příkazy, má hodnotu A0h pro GSM),
potom je byte identifikační, který určuje o jaký příkaz jde, další je jen
blíže specifikují. Viz.tabulka níže.
* 00 pro CHV 1, 02 pro CHV 2 (CHV – je PIN číslo karty)
Jak je tedy vidět celý příkaz se skládá celkem s pěti bytů. Data tam a zpět jsou přenášena hned několika způsoby:
1.Žádný vstup ani výstup
A0h INS P1 P2 P3 SW1 SW2 vstupní
byty výstupní byty
P3=00
2.Pouze výstup
A0h INS P1 P2 P3 data velikosti P3 SW1 SW2
vstupní byty
výstupní byty
3.Pouze vstup
A0h INS P1 P2 P3 data velikosti P3 SW1 SW2
vstupní byty
výstupní byty
*SW1 a 2 jsou znaky platnosti dat (chybová hlášení
viz. text níže)
SW1-90, SW2-00 normální stav, data v pořádku
Přístupy k souborům
Celá věda karty je v tom, že všechny informace ukládá do speciálních
souborů, které jsou rozděleny do adresářů. Většina těchto souborů je chráněna určitou
úrovní zabezpečení (viz. tabulka níže), tyto úrovně jsou v kartě předem
naprogramovány a tudíž se nedají měnit, lze do nich pouze vstupovat. Běžný uživatel
má přístup pouze k prvním třem úrovním.
Úroveň | Přístup | |
0 | vždy přístupná | |
1 | CHV1 | |
2 | CHV2 | |
3 | rezervováno pro budoucí požití | |
4 | tuto úroveň má pouze provozovatel sítě | |
….. | ………. | |
14 | tuto úroveň má pouze provozovatel sítě | |
15 | nikdy |
Soubory označené nultou úrovní jsou přístupny vždy, soubory 1. resp. 2. úrovně jsou přístupny po zadání CHV1 resp CHV2. Soubory úrovně 4-14 jsou přístupny pouze provozovateli sítě (nebo výrobci karet), úroveň 15 je dosažitelná pouze při výrobě. U souborů se úrovně přístupu mohou kombinovat, např. může mít úroveň 0 pro čtení a úroveň 15 pro zápis apod.
Struktura souborů
Jsou celkem tři typy souborů a to:
MF – main file - základní soubor (chová se jako hlavní adresář)
DF – dedicated file – podsoubor jakoby podadresář
EF – elemetary file – soubor pro uložení data (SMS, volaná čísla apod.)
Chceme-li např. nastavit soubor se SMS, musíme nejprve přejít do MF (pokud tam už nejsme), poté nastavíme jako aktivní soubor DFTELECOM, pak již přejdeme do EFSMS (viz. diagram na konci článku). Z toho vyplývá, že chceme-li přistupovat ke vzdáleným souborům, musíme nejprve přes soubory (adresáře) sousední.
Základní soubor (adresář) (MF)
Základní soubor je pouze jeden a je nastaven ihned po nastartování karty.
Má adresu „3F00“, může obsahovat soubory typu DF a EF.
Podsoubory (adresáře) (DF)
Soubory typu DF jenom rozdělují elementární soubory do skupin, z důvodů rozdělení
přístupů k souborům.
Elementární soubory (EF) – mohou být trojího způsobu :
- Transparentní – data uložená v tomto druhu souboru jsou uložena bezprostředně za sebou, bez jakéhokoliv dalšího rozčlenění. Přistupuje se k němu, jako k XX bytům paměti.
- Lineárně fixovaný – data jsou zde uložena do záznamů, velikost každého záznamu je předem definována a je stejná pro každý záznam v souboru. K souboru přistupujeme jednotlivě po záznamech. Najednou je možné číst pouze jeden záznam.
- Cyklický – je stejný jako soubor lineárně fixovaný pouze s tím rozdílem, že záznamy jsou zacykleny, tzn. že po přečtení posledního záznamu je možno ihned číst záznam první apod. Tohoto se hlavně využívá u tzv. posledně volaných číslech, kdy si karta pamatuje např. pouze posledních 10 volaných čísel.
Popis příkazů
Příkazy by se daly rozdělit do několika druhů, podle toho na co jsou využívány.
1) Příkazy pro práci se soubory
Příkazy: SELECT – nastavuje aktivní adresář
vstup: 2 byty – identifikační číslo adresáře
výstup:a) jde-li o soubor typu MF nebo DF
byte | Popis | velikost |
1-2 | budoucí použití | |
3-4 | celkem obsazený prostor | |
5-6 | ID souboru | |
7 | typ souboru | |
8-12 | budoucí použití | |
13 | velikost dat. segmentu | |
14 | charakteristika souboru | |
15 | počet DF podsouborů | |
16 | počet EF podsouborů | |
17 | číslo CHV (PIN a PUK) | |
18 | budoucí použití | |
19 | status PIN 1 -*1 | |
20 | status PUK 1 - *1 | |
21 | status PIN 2 - *1 | |
22 | status PUK 2 - *1 | |
23 | budoucí použití | |
24-34 | slouží pro provozovatele |
b) jde-li o soubor typu EF
byte | Popis | velikost |
1-2 | budoucí použití | |
3-4 | velikost souboru (počet záznamů) | |
5-6 | ID souboru | |
7 | typ souboru | |
8 | informace o inkrementaci | |
9-11 | přístup do souboru | |
12 | status souboru | |
13 | velikost dat | |
14 | struktura EF souboru | |
15 | velikost záznamu |
STATUS – zjistí status,
vstupy: žádné
výstupy: vrací stejné data jako příkaz SELECT.
2) Příkazy pro práci s obsahem dat.
READ BINARY – načte soubor, jako sekvenci dat
P1 – offset high
P2 – offset low
P3 – velikost načítaných dat
výstup: sled bytů o velikosti P3
UPDATE BINARY – uloží soubor, jako sekvenci dat
P1 – offset high
P2 – offset low
P3 – velikost ukládaných dat
vstup: sled bytů o velikosti P3
READ RECORD – načte ze souboru jeden záznam
P1 – číslo záznamu
P2 – mód :02 další záznamP3 – velikost načítaných dat
03 předchozí záznam
04 absolutní pozice
výstup: sled bytů o velikosti P3
UPDATE RECORD – uloží do souboru jeden záznam
P1 – číslo záznamu
P2 – mód :02 další záznamP3 – velikost ukládaných dat
03 předchozí záznam
04 absolutní pozice
vstup: sled bytů o velikosti P3
SEEK – vyhledává určitý řetězec v souboru, pouze u souborů
lineárně fixovaných
P2 – typ/mod x0 – od začátku
x1 – od konce
x2 – od další pozice
x3 – od předešlé pozice
P3 – velikost řetězce
vstup: sled bytů o velikosti P3
výstup:a) je-li x=0, příkaz nemá žádný výstup
b) je-li x=1, výstup je číslo záznamu (jeden byte)
3) Příkazy pro práci s přístupem
U příkazů, které pracují s přístupem souborů platí:
- Po zadání nesprávného CHV (PIN čísla) je dekrementován indikátor nepovolených přístupů (standartní hodnota u PINu je 3 u PUKu je 10) a příkaz se neprovede.
- Jakmile indikátor dosáhne nuly, CHV (PIN nebo PUK) se zablokuje a funkce pracující s ním se stanou nefunkční.
- Po zadání správného CHV (PIN čísla nebo PUK čísla) opět nastaví indikátor na standartní hodnotu.
- !!!! Pozor po zadání 10 nesprávných PUK číslech se karta stane úplně nepoužitelnou, protože PUK číslo se zablokuje a již není možné ji ničím odblokovat.
VERIFY CHV – Po zadání správného CHV1 resp. 2 (PIN
čísla) povolí přístup k souborům chráněných úrovní 1 resp. 2.
P1 – číslo CHV
01-CHV1
02-CHV2
vstup: 8 byte, které obsahují CHV (1/2)
CHANGE CHV – Mění CHV číslo
P1 – číslo CHV
01-CHV1
02-CHV2
vstup: 8 byte, které obsahují staré CHV (1/2) číslo 8 byte, které obsahují nové CHV (1/2) číslo
DISABLE CHV – Natrvalo (i po vypnutí napájecího napětí či
resetu) povolí přístup do úrovně 1 nebo 2.. Zrušení přístupu je
možné pomocí příkazu ENABLE CHV.
P1 – číslo CHV
01-CHV1
02-CHV2
vstup: 8 byte, které obsahují CHV (1/2) číslo
ENABLE CHV – Zruší nepřetržitý přístup do úrovně 1
nebo 2. Znovu povolení je možné pomocí příkazu DISABLE CHV.
P1 – číslo CHV
01-CHV1
02-CHV2
vstup: 8 byte, které obsahují CHV (1/2) číslo
UNBLOCK CHV – Po zadání PUK čísla odblokuje CHV ( pouze PIN)
P1 – číslo CHV
01-CHV1
02-CHV2
vstup: 8 byte, které obsahují odblokovávací CHV (PUK) číslo 8 byte, které obsahují nové CHV (1/2) číslo
4) Příkazy speciální
RUN GSM ALGORITHM - Spustí GSM autorizační algoritmus.
vstupy: 16 byte RAND číslo
výstupy: 4 byte SRES
8 byte Kc (Cryptographic key)
SLEEP - Uspí SIM kartu. Po funkci SLEEP je nutno držet
hodiny a napájení ještě po dobu 744 hodinových cyklů. Ze spánku kartu může
probudit pouze RESET karty. Funkci SLEEP je nutno spustit vždy před vypnutím napájení
!!!!!! Nesprávné vypnutí karty by mohlo poškodit data uložené v SIM kartě.
vstupy: žádné
výstupy: žádné
5) Příkazy pro práci se SIM Toolkit
TERMINAL PROFILE - Spustí příkaz SIM Toolkitu
P3 – velikost řetězce
vstup: sled bytů o velikosti P3
EVENLOPE - Zapíše úpravy (provede vývoj) SIM Toolkitu
P3 – velikost řetězce
vstup: sled bytů o velikosti P3
TERMINAL RESPONSE - Provádí nastaveni SIM Toolkitu
P3 – velikost řetězce
vstup: sled bytů o velikosti P3
Komunikace GSM telefonu s kartou
Po zapnutí mobilní telefon nejprve zjišťuje zda-li je vložena SIM karta. A to tak, že nejprve připojí napájecí napětí na kartu, spustí přesný zdroj kmitočtu pro kartu na vývod 3, uvolní reset na vývodu 2 a sleduje data na vývodu 6. Karta vyšle svůj status a telefon jej zpracuje. Pokud je status i parita přenesených dat v pořádku telefon pokračuje dál v komunikaci. Pokud ale karta status vůbec nevyšle nebo přijatý status není v pořádku telefon kartu odmítne a na display většinou zobrazí "Chyba SIM" nebo "Zkontrolujte SIM" apod. Některé telefony se znaží po odmítnutí o komunikaci ještě několikrát. V této fázi je možno uskutečnit pouze tísňové volání.
Jakmile je karta přijmuta, telefon z karty zjištuje s pomocí funkce STATUS informace o CHV (tedy o PIN a PUK). Je-li PIN inicializován je potřeba po každém zapnutí (i po uvedení do stavu SLEEP) povolit přístup do karty pomocí funkce VERIFY CHV. Telefon od uživatele očekává zadání PIN kódu. Poté se telefon pokusí o povolení přístupu, je-li PIN špatný, karta jej odmítne a telefon žádá po uživately PIN kód znovu. Po vyčerpání všech možných pokusů, se PIN zablokuje, telefon žádá zadání PUK odblokovacího kodu a nového PIN kódu. Po vyčerpání všech možných pokusů, kdy je zadán špatný PUK, se karta atomaticky zablokuje a již ji není možné ničím odblokovat!!!
Po zadání správného PIN kódu je přístup do karty povolen. Telefon zadaní PIN kodu nevyžaduje jen v případě, že inicializace PIN kódu je vypnuta (pomocí funkce DISABLE CHV) a přístup k souborům je tedy povolen trvale. Telefon nejprve čte informace o síti a o identifikačním čísle karty. Na základě těchto informací se pokusí o příhlášení do sítě. Mezitím telefon čte další informace, nastavený jazyk, pak přečte všechna telefoní čísla a krátké textové zprávy. Toto načítání trvá kolem deseti až dvaceti sekund (záleží na počtu SMS zpráv a počtu telefonních číslech kterých je možno do karty uložit). Během této doby není možno s kartou jinak komunikovat a při pokusu přečíst si nějakou tu SMS správu či telefoní číslo telefon zobrazí "Probíhá čtení .." apod. Telefon čte všechna čísla i zprávy bez rozdílu zda jsou obsazeny nebo ne, protože telefon zjistí zda-li se jedná o obsazenou nebo práznou položku až po jejím přečtení. Veškeré data telefon uloží do své paměti pro další zpracování, jako setřídění seznamu a také proto aby k nim byl rychlejší přístup. Data čte také proto aby např. během přijmutí nové SMS ze sítě věděl na kterou (volnou) pozici ji má uložit nebo aby věděl kam uložit nově zadané tel.číslo, nebo kam uložit posledně volané či přijaté číslo apod.
Telefon nyní komunikaci s kartou končí. Po určité době nečinnosti, kdy nebylo nutné s kartou komunikovat telefon kartu uspí (pomocí funkce SLEEP), vypne kmitočet a popřípadě vypne napájecí napětí (záleží na typu telefonu). Uvedení do stavu SLEEP provádí ztoho důvodu, aby se karta nepoškodila náhlým výpadkem napětí (jak otřesy při používání telefonu, nebo poklesem napětí baterie ….). Jakmile telefon potřebuje s kartou komunikovat probudí ji pomocí RESETu nebo znovu připojí napětí, zapne hodiny … atd.
Využití karty pro identifikační
systémy
Díky tomu, že karta obsahuje jedinečný autorizační algoritmus, je
přímo určena pro identifikační systémy, kde je potřeba zajistit velmi vysoký stupeň
zabezpečení. Svědčí o tom i to, že je tento algoritmus na světě zatím
nepřekonaný.
Jak je to možné? Pro spuštění algoritmu je potřeba znát 16 bytové RAND (náhodné) číslo, které telefon obdrží od sítě. Karta z něj vypočítá 12 bytové číslo, které předá telefon síti. Pokud síť zjistí, že vypočítané číslo je v pořádku, povolí přístup do sítě. Pokud není v pořádku, sít přístup zakáže. Tímto jednoduchým a velmi bezpečným způsobem je zajištěna bezpečnost přístupu.
Pokud by se někdo snažil o neautorizovaný přístup pomocí
telefonu a zařízení, které simuluje SIM kartu, musel by nejprve z pravé SIM přečíst a uložit do paměti všechny možné kombinace
autorizačního algoritmu. To by znamenalo paměť o velikosti 2128 x 96 bitů, taková paměť je nepředstavitelná. Dokonce ani za svůj celý život by člověk
nedokázal přečíst zlomek všech možných kombinací. Anebo je možné zjistit
podle jakého algoritmu je číslo vypočítáváno, což je taky skoro
nemožné.
Jak zapojit tyto karty ve svých zapojení
Nejlépe je použít zapojení s libovolným jednočipovým
mikrokontrolérem, pamětí typu FLASH EPROM a konektorem pro čipové karty s kontaktem pro detekci
přítomnosti karty. Kontakt je potřebný pro ochranu zařízení i karty, při
vytahování či zasouvání karty, protože v tomto okamžiku může dojít ke
spojení napájení se zemí, nebo spojení napájeni s jiným
vývodem. Kontakt může přímo spínat napájení nebo nepřímo přes
mikrokontrolér a tranzistor. Pokud konektor neobsahuje tento kontakt je
možno kartu napájet trvale přes rezistor cca. 200 Ohm z napájení +5V. Zdroj kmitočtu může
být stejný jak pro mikrokontroler tak i pro kartu. Pro spojení s obousměrným portem
karty je vhodnější použít výstup s otevřeným kolektorem a pull-up rezistorem
(připojený na Ucc) než třístavový výstup, protože výstup karty obsahuje taky
otevřený kolektor s pull-up rezistorem a nesnese větší zatížení, ke
kterému by mohlo dojít při log.L na kartě a log. H na 3stavovém výstupu čtecího
zařízení. Vstup RESET je možno připojit přímo. Vstup Vpp
může být nezapojen, nebo spojen s Ucc.
Pro identifikaci je vhodné z karty číst pouze data z nulté
úrovně zabezpečení (není pro ně potřebné zadávat CHV), tím se vyhneme
problémům se zablokovanými kartami. To ale není zase tak velké omezení, protože
karta obsahuje soubor EFICCID, který je v nulté úrovní pro čtení a obsahuje unikátní 10-ti bytové identifikační
číslo karty (žádné dvě karty nemají stejné číslo), a které je
nezměnitelné. Pro lepší zabezpečení je možné využít i GSM algoritmu. Např.
si předem přečíst několik čísel vypočítaných za pomocí GSM algoritmu z několika
náhodných čísel a všechny je uložit do paměti zařízení. Potom při
identifikaci karty nejenom přečíst identifikační číslo karty, ale také použít GSM
algoritmus s libovolným číslem uloženým v paměti a
poté zkontrolovat výsledek s daty uloženými předem do paměti.Tímto způsobem velmi
ztížíme až spíše znemožníme práci narušitelům, kteří se
snaží oklamat identifikaci simulováním karty.
Následuje DIAGRAM adresářové struktury SIM karty. Můžete si
jej stáhnout v PDF - ZDE nebo po kliknutí na náhledový obrázek
otevřít velký obrázek.