Soubory se sice označují symbolickými jmény, ale při komunikaci s kartou jsou to jen čísla. Stejně je to i s jmény jednotlivých adresářů. Číselné označení najdete v tabulce, zde je struktura souborů na SIM kartě .
Příkaz pro přechod z jednoho adresáře do jiného je SELECT (viz tabulka kódování příkazů), ve kterém se v datové části uvede jméno podadresáře, do kterého se potřebujeme dostat.
Soubory mohou mít různou strukturu. Základním typem souboru je transparentní EF. Jedná se o klasický lineární soubor s náhodným přístupem (Transparent). Dalším typem je soubor s konstantní délkou záznamu (Linear Fixed) a konečně posledním je cyklický seznam (Cyclic).
Transparentní soubor má klasickou strukturu. Tvoří jej posloupnost bytů, když chceme určit místo v takovém souboru, poslouží nám k tomu offset, který určuje relativní adresu od počátku souboru. Tento soubor se označuje též jako Binary. Typický soubor pro tento typ je např. soubor IMSI (identifikační číslo karty).
Soubor s konstantní délkou záznamu (Linear Fixed) má data uložená do záznamů, jejichž velikost je předem definována a je stejná pro každý záznam v souboru. Při manipulaci se přistupuje k jednotlivým záznamům, které se adresují pomocí parametrů P1 a P2. Tohoto typu souboru se používá v případě telefonních seznamů (FDN, ADN) nebo též pro záznam SMS zpráv.
Cyklický záznam má stejnou strukturu jako soubor s konstantní délkou záznamu, pouze jeho záznamy tvoří cyklickou strukturu, takže po přečtení posledního záznamu se automaticky přesuneme zpátky na první. Využití je např. u souboru LDN (Last Dialed Numbers) používaného pro zapamatování posledně volaných čísel.
Jak fungují instrukce prováděné kartou? Je možné je rozdělit na příkazy pro práci se soubory, příkazy pro zápis a čtení dat, příkazy pro práci s kódy PIN/PUK1, PIN/PUK2, (CHV1/CHV2) a nastavení atributu INVALIDATED a instrukce speciální, např. RUN_A38 pro autentizaci karty a SLEEP pro její uspání. V tabulce kódování instrukcí jsou uvedeny navíc ještě příkazy TERMINAL PROFILE, ENVELOPE a TERMINAL RESPONSE, ty slouží ke spouštění, nastavování a běhu SIMtoolkitových aplikací a nebudeme se jimi v tomto článku zabývat. Tyto tři poslední instrukce jsou implementovány výhradně na SIM kartách fáze 2+. Podívejme se blíže na základní instrukce karty fáze dvě:
Jaké soubory jsou na SIM kartě? A jak jsou v nich uložena data? Kořen struktury souborů na SIM kartě je označen 3F00 a jsou v něm nejméně dva podadresáře DF. První se označuje jako TELECOM 7F10, druhý jako GSM 7F20. Na novějších kartách bývají podadresáře pro GSM dva - GSM900 7F20 a GSM1800 7F21. Soubory, které tyto dva podadresáře obsahují, jsou stejné. Struktura je vidět na přiloženém obrázku. Již jsme se zmínili o atributech jednotlivých souborů; ty mají klíčový význam pro jejich zabezpečení i bezchybnou práci s nimi. Obsahují totiž i informace o velikosti obsazené paměti, které si po přečtení musí telefon zapamatovat, aby se nepokoušel adresovat paměť karty mimo rozsah platných adres, což by mohlo vést k chybné funkci. Tyto atributy lze přečíst pomocí instrukce GET RESPONSE po provedení instrukce SELECT. Atributy se pak přirozeně vztahují na aktuálně vybraný soubor, ať je typu MF, DF nebo EF. V atributech jsou uložena přístupová práva k danému souboru. Práva jsou označena čísly od 0, kdy je možno k souboru přistoupit vždy, do 15, kdy to nelze nikdy. Hodnota jedna a dvě značí umožnění přístupu po úspěšné verifikaci CHV1 a CHV2, čtyřka úspěšnou externí autentizaci; více informací naleznete přímo v normě GSM11.11. Vlastní soubory potom obsahují data nutná k provozu GSM. Nejdůležitějšími soubory jsou zřejmě IMSI, ve kterém je uloženo číslo, kterým se karta hlásí do sítě, LOCI, ve kterém je uchovávána aktuální poloha telefonu, a Kc s klíčem k šifrování hovoru. Všechny tyto soubory jsou lineární. Důležitá je rovněž informace o fázi karty v souboru "Phase Identification" (6FAE) a SST (SIM Service Table). V souboru SST je totiž uložena tabulka s příznaky o tom, které funkce karta podporuje a které nikoli. Pokus o zápis do neexistujícího souboru nebo čtení z něj by mohl vést k chybovému stavu telefonu. Další soubory jsou uvedeny v tabulce:
Identifikátor souboru |
Popis |
Příklad hodnoty |
2FE2 |
ICC_ID |
8942020320123456789 |
6F05 |
IMSI |
082903201111123456 |
6F20 |
Kc |
FFFFFFFFFFFFFFF7 |
6F30 |
PLMN selector |
FF......FF |
6F31 |
HPLMN search period |
FF |
6F37 |
ACM maximum value |
000000 |
6F38 |
SIM service table |
závislé na operátorovi a typu karty |
6F39 |
Accumulated call meter |
000000 **) |
6F3E |
Group identifier level 1 |
závislé na operátorovi |
6F3F |
Group identifier level 2 |
závislé na operátorovi |
6F41 |
PUCT |
FFFFFF0000 |
6F45 |
CBMI |
FF......FF |
6F46 |
Service provider name |
FF......FF |
6F74 |
BCCH |
FF......FF |
6F78 |
Acces control class |
závislé na operátorovi |
6F7B |
Forbidden PLMNs |
FF......FF |
6F7E |
LOCI |
FFFFFFFFxxFxxx0000FF01*) |
6FAD |
Adminitrative data |
závislé na operátorovi |
6FAE |
Phase identification |
02 |
6F3A |
Abbreviated dialling numbers |
FF......FF |
6F3B |
Fixed dialling numbers |
FF......FF |
6F3C |
Short messages |
00FF..FF |
6F3D |
Capability configuration parameters |
FF......FF |
6F40 |
MSISDN storage |
FF......FF |
6F42 |
SMS parameters |
FF......FF |
6F43 |
SMS status |
FF......FF |
6F44 |
Last number dialled |
FF......FF |
6F4A |
Extension 1 |
FF......FF |
6F4B |
Extension 2 |
FF......FF |
*) xxFxxx MCC a MNC **) Hodnota 000000 značí, že není nastaven limit v ACM. |