Jste zde

GSM telefonní SIM karty

Kompletní popis SIM karty GSM telefonu - jak to funguje, jak to komunikuje, jak jí využít ve vašem

zařízení.. Popisy registrů, ovládacích příkazů.

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.

Příkaz
ident.znak - INS
P1
P2
P3
směr dat
SELECT
A4
00
00
02
I/0
STATUS
F2
00
00
velikost
O
READ BINARY
B0
offset high
offset low
velikost
O
UPDATE BINARY
D6
offset high
offset low
velikost
I
READ RECORD
B2
číslo záznamu
mód
velikost
O
UPDATE RECORD
DC
číslo záznamu
mód
velikost
I
SEEK
A2
00
typ/mód
velikost
I/O
INCREASE
32
00
00
03
I/O
VERIFY CHV
20
00
CHV 1/2
08
I
CHANGE CHV
24
00
CHV 1/2
10
I
DISABLE CHV
26
00
01
08
I
ENABLE CHV
28
00
01
08
I
UNBLOCK CHV
2C
00
*
10
I
INVALIDATE
04
00
00
00
 
REHABILITATE
44
00
00
00
 
RUN GSM ALGORITHM
88
00
00
10
I/O
SLEEP
FA
00
00
00
 
GET RESPONSE
C0
00
00
velikost
O
TERMINAL PROFILE
10
00
00
velikost
I
EVENLOPE
C2
00
00
velikost
I/O
FETCH
12
00
00
velikost
O
TERMINAL RESPONSE
14
00
00
velikost
I

* 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
hex
0 vždy přístupná
0
1 CHV1
1
2 CHV2
2
3 rezervováno pro budoucí požití
3
4 tuto úroveň má pouze provozovatel sítě
4
….. ……….
….
14 tuto úroveň má pouze provozovatel sítě
E
15 nikdy
F

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í
2
3-4 celkem obsazený prostor
2
5-6 ID souboru
2
7 typ souboru
1
8-12 budoucí použití
5
13 velikost dat. segmentu
1
14 charakteristika souboru
1
15 počet DF podsouborů
1
16 počet EF podsouborů
1
17 číslo CHV (PIN a PUK)
1
18 budoucí použití
1
19 status PIN 1 -*1
1
20 status PUK 1 - *1
1
21 status PIN 2 - *1
1
22 status PUK 2 - *1
1
23 budoucí použití
1
24-34 slouží pro provozovatele
11



 
 
 

b) jde-li o soubor typu  EF
byte Popis velikost
1-2 budoucí použití
2
3-4 velikost souboru (počet záznamů)
2
5-6 ID souboru
2
7 typ souboru
1
8 informace o inkrementaci
1
9-11 přístup do souboru
3
12 status souboru
1
13 velikost dat
1
14 struktura EF souboru
1
15 velikost záznamu 
1
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áznam
03 předchozí záznam
04 absolutní pozice
P3 – velikost načítaných dat
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áznam
03 předchozí záznam
04 absolutní pozice
P3 – velikost ukládaných dat
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. 



 
 

Napsal : Robert Daněček
Korigoval : Jan Řehák
Hodnocení článku: