4. Norma ISO 7816

Struktura karty

Principiální schéma čipové karty
Na obrázku můžeme vidět, že tato norma popisující protokol nám v podstatě tvoří stykové rozhraní mezi terminálem a danou kartou. Terminálem rozumíme jakékoliv zařízení pracující s čipovými kartami (např. GSM telefon se SIM kartou, bankomaty atd.). Dále zde najdeme na ní jak paměť RAM, tak i paměti ROM a EEPROM. Hlavně ale procesor, který řídí veškeré operace s kartou. Nejoblíbenějšími procesory pro tyto aplikace jsou dnes výrobky řady HC05 a HC11 od firmy Motorola. tyto procesory jsou řízeny vlastním operačním systémem, který je většinou velmi sofistikovaný. Mezi jeho základní funkce patří kromě autentizace karty terminálu (a obráceně) též správa jednoduchého souborového systému uloženého v paměti EEPROM. Uživatel si tedy neukládá na kartu svá data stylem jak chce, ale pěkně si je řadí do souborů, tak jak je zvyklý třeba ze svého počítače. Tento model má jistá omezení, mezi něž patří zejména to, že jednotlivé soubory nejsou rozlišovány jménem, ale jednobajtovým až dvoubajtovým číslem, a také to, že maximální úroveň vnoření adresářů bývá obvykle dva. Na rozdíl od běžných souborů jsou ovšem vybaveny obstojným bezpečnostním mechanismem, který většinou umožňuje definovat několik klíčů, které je třeba pro konkrétní operace se soubory znát.
Řada karet je v poslední době vybavena i šifrováním, které je možné použít buď zcela samostatně (karta pracuje jako šifrovací procesor), nebo operační systém při výpočtu do šifrovacího algoritmu „přidá" nějaké tajné číslo uložené na kartě. Tak potom lze vytvářet nejrůznější autentizační schémata. Nejlepší karty tohoto typu dovolují uživateli, aby si napsal vlastní příkazy, které budou připojeny k operačnímu systému jako jeho rozšíření. Vše samozřejmě probíhá za přísných bezpečnostních pravidel, která zamezují tomu, aby na danou kartu pronikl nějaký virus.

Popis ISO 7816

Nyní se dostáváme k vlastnímu popisu normy. Ta se skládá ze tří částí a to norem 7816-1, 7816-2, 7816-3.
7816-1 definuje fyzikální vlastnosti karty, k nimž patří zejména její odolnost proti mechanickým elektromagnetickým vlivům.
7816-2  popisuje rozměry a umístění konektoru, takže jeho dodržení je základní podmínkou pro univerzálnost terminálů a karet od   různých výrobců.
7816-3  popisuje konkrétní význam a použití jednotlivých vývodů. Touto částí se budeme zabývat
Popis kontaktů
Vcc, Vpp  napájení karty, přičemž Vpp obecně nemusí být konstatní jako u telefonních karet a terminál by měl být na to připraven. Některé karty si Vpp vyrábějí samy a tak tento hrot konektoru nepotřebují
GND uzemnění
I/O vstupně/výstupní hrot určený pro přenos dat mezi terminálem a kartou. Tento přenos bývá nejčastěji asynchronní sériový, pracující v poloduplexním režimu.
CLK vstup a slouží k přívodu hodinového signálu z terminálu. Od tohoto signálu se potom odvozuje rychlost komunikace na špičce I/O. Některé karty mohou pro tyto účely využívat interní hodinový zdroj, a potom je tento pin nevyužit.
RES slouží podobně jako u  telefonních karet ke generování události RESET, i když zde v poněkud odlišné podobě.
Událost RESET
Vzhledem k tomu, že v případě normy ISO 7816 je definováno poměrně široké spektrum možností, jak se může daná karta chovat, je třeba, aby měl univerzální terminál nějakou šanci zjistit, jaký typ a od jakého výrobce do něj byl právě zasunut. K tomuto účelu je definována poměrně propracovaná událost RESET, jejíž součástí je generování bloku dat označovaného jako Answer-to-Reset, který dopodrobna popisuje charakteristiky příslušné karty a to především komunikačního kanálu. Vzhledem k tomu, že oblast operačního systému (dále OS) není obecně normována, nejsou zde obsaženy informace o OS. => u neznámé karty tedy není možné určit používané příkazy a jejich sémantiku.
Jediné, co musí terminál o zasunuté kartě vědět, je, zda půjde o synchronní či asynchronní druh přenosu. Synchronní přenos je jednoduchý a není to hlavní směr používání karet, popíšu jen asynchronní přenos. Způsob resetování takové karty je následující: poté, co je karta zasunuta do terminálu, je připojeno napájecí napětí a na vstup CLK je přiveden stabilní hodinový signál v rozsahu jednoho až pěti megahertzů. Signál RES je udržován v  úrovni logické nuly. Asynchronní karta, reagující na nulovou úroveň na špičce RES, by jako reakci na tento stav měla začít nejpozději do 40 000 hodinových cyklů s vysíláním dat Answer-to-Reset. Pokud se tak nestane, pak terminál začne předpokládat, že karta resetuje na úroveň H, takže nastaví RES= H a znovu "dá" kartě 40 000 hodinových cyklů na to, aby něco předvedla. Pokud se ani potom nic nestane, předpokládá se, že karta neodpovídá asynchronnímu ISO 7816 a terminál ji vrátí jako neplatnou. Pro případ úspěšného resetu platí, že pin RES by měl v průběhu další komunikace zůstat v takovém stavu, v jakém došlo k události RESET.
Asynchronní přenos
Asynchronní přenos jednoho slova
Stejně jako v  případě ostatních sériových přenosů definuje norma dva základní stavy na vedení, a to značku (Z) a mezeru (A). Pokud je vedení v klidovém stavu, potom je na něm signál značka. V případě, že na vedení právě někdo vysílá, potom na něm může být buď mezera, nebo značka podle toho, jaký bit zprávy je právě vysílán. Komunikace je obousměrná, avšak vždy platí pravidlo, že karta vysílá data teprve v  okamžiku, kdy ji k tomu terminál nějakým způsobem vyzve (reset, příkaz pro OS, apod.). Platí pravidlo, že jak terminál, tak i karta jednoznačně vědí, kdo bude vysílat následující datové slovo.
Základní charakteristikou všech sériových přenosů je rychlost vlastní komunikace. Označme si proto délku trvání jednoho znaku (značka nebo mezera) jako etu (Elementary Time Unit). Během vysílání dat Answer-to-Reset (dále už jen ATR) platí, že etu je rovno 1/9600 s, pro karty s interním zdrojem hodin nebo 372/fi pro karty využívající externí synchronizace pomocí frekvence fi, přiváděné na pin CLK. Pro univerzální terminál z toho tedy vyplývá, že by měl předpokládat přenosovou frekvenci 9600 b/s a fi nastavit na 372*9600 Hz. Tím bychom měli dosáhnout toho, že karta jak s interním, tak i s externím časováním zahájí vysílání ATR na stejné frekvenci –9600 b/s.
Formát slov tvoří posloupnost deseti stavů, přičemž první z nich je vždy mezera označující začátek vysílání. Potom následuje osm datových bitů, které jsou při začátku ATR v pořadí nižší-vyšší. Poslední bit zabezpečuje celou posloupnost sudou paritou. Mapování stavů Z a A na logické hodnoty je přitom následující: Z = 1, A = 0. Důležité však je uvědomit si, že tato konvence platí pouze pro začátek ATR – po prvním znaku (TS) se může změnit. Přesněji řečeno: může se změnit pořadí přenášených bitů a význam stavů Z a A (jejich mapování na úrovně H nebo L). Co se naopak nikdy nezmění, je tvar slova, takže vždy bude přenášeno osm datových bitů uvozených jedním start-bitem a končících sudou paritou.
Posledním důležitým parametrem komunikace na fyzické úrovni je minimální časová vzdálenost mezi dvěma slovy, označovaná jako tzv. Guardtime. Její hodnotu je možné odvodit z toho, že vzdálenost spádových hran startovacích impulzů uvozujících dvě bezprostředně po sobě jdoucí slova je minimálně 12*etu. Vzhledem k tomu, že délka trvání n bitové posloupnosti by měla být (n±0,2) *etu, potom můžeme zhruba říci, že tg (Guardtime) by se měl pohybovat kolem dvou etu jednotek. Rád bych ale připomněl, že zde nejde o to, čemu jsme ze sériové komunikace v oblasti PC zvyklí říkat stop-bity. Ačkoliv je možné zaručit korektní tg právě pomocí dvou stop-bitů, nelze tyto dva pojmy ztotožnit. Jak ukazuje obrázek, protokol 7816 totiž v "druhé polovině" tg vyhrazuje prostor pro hlášení chyb na straně příjemce. Celá situace funguje zhruba takto: Po odvysílání daného slova monitoruje vysílající stav linky během dvanáctého bitu, a pokud zde najde stav mezera, znamená to, že příjemce hlásí chybu. Na to vysílající zareaguje tak, že po uplynutí tg zahájí opakované vysílání předchozího slova. Dlužno ovšem podotknout, že takovéto chování je povinné pouze pro fázi ATR a dále pak jen pro některé komunikační protokoly. Naštěstí pro nás dále popsaný protokol T=0 tento způsob hlášení chyb podporuje, takže je jistě dobré o něm vědět.
Struktura ATR
Struktura dat Answer-to-Reset
Vlastní posloupnost ATR začíná znakem (dále se budeme bavit pouze o datové části přenášených slov, jimž budeme říkat znaky) TS, který říká, jakým způsobem bude prováděno kódování následujících znaků ATR. Slovo nesoucí znak TS začíná posloupností (Z) AZZA. Ta slouží k synchronizaci a může se též použít pro zjištění etu (nejvyšší čas). Následující tři stavy jsou buď AAA, nebo ZZZ a popisují způsob kódování dále přenášených znaků. Posloupnost AAA definuje takzvanou inverzní konvenci, kdy stav A odpovídá logické hodnotě 1 a jednotlivé bity znaků jsou přenášeny v pořadí vyšší-nižší. Opakem je potom přímá konvence signalizovaná posloupností ZZZ, která předepisuje stejný způsob kódovaní, jaký platil pro začátek ATR (A = 0, pořadí nižší-vyšší). Celé toto slovo končí vždy stejnou posloupností AAZ, nastavující korektní stav paritního bitu.
Po odvysílání TS už terminál ví, jakým způsobem má z přicházejících slov dekódovat informace. Následujícím znakem je T0, který říká, jaká bude struktura ATR. Typický vzhled každé ATR je možné vidět na obrázku. Z něho je zřejmé, že znaky TS a T0 jsou odvysílány vždy. Po znaku T0 potom následuje "první sada" globálních znaků TA1, TB1, TC1 a TD1. Informaci o tom, které znaky z této posloupnosti budou vysílány a které nikoliv, podávají horní čtyři bity znaku T0. Je-li bit 5 nastaven na hodnotu jedna, potom je přenášen znak TA1, analogicky bit 6 určuje přítomnost TB1 atd. až po TD1. Jak je z obrázku vidět, posloupnost TAi, TBi, TCi, TDi se může několikrát opakovat. Pro tento účel nese znak TDi (je-li přítomen) ve svých horních čtyřech bitech stejnou informaci jako T0, s tím rozdílem, že nyní se rozhoduje o přítomnosti znaků TAi+1 až TDi+1. To, že tato série je už poslední, poznáme podle toho, že příslušný TDi+1 buď není vůbec vysílán (určeno maskou v TDi), nebo obsahuje v horních čtyřech bitech samé nuly.
Podrobně význam jednotlivých znaků z ATR rozebírat nebudeme, neboť jde daleko za rámec tohoto článku. Jen se ještě podíváme na dolní čtyři bity znaků T0 a TDi. V případě T0 je zde uložen počet tzv. historářových znaků T1 až Tk, které následují za poslední posloupností TAi až TDi. Zatímco TAi až TDi popisují spíše protokolové charakteristiky karty, jsou v bajtech T1 až Tk uloženy informace o tom, kdo kartu vyrobil, jaký má operační systém a procesor, jaký je její stav atd. Spodní čtveřice bitů v TDi zase určuje typ použitého protokolu, kterým je karta schopna komunikovat. Z toho, že bitů TDi zde může být více, je ihned patrno, že chytré karty mohou komunikovat i více protokoly najednou. Pro jednoduchost se dále omezíme pouze na protokol označovaný jako T=0 (to proto, že má v TDi číslo 0). Tento protokol by měl být podporován většinou karet a vždy by měl být ohlášen jako první (tedy v TD1).
Protokol T=0
Představuje nadstavbu pro výše popsaný sériový kanál tak, že definuje jednotný formát zadávání příkazů a zasílání odpovědí. Připomínám ale, že vlastní typy příkazů a jejich data už na této úrovni normovány nejsou. V protokolu T = 0 je karta vedena jednoznačně jako pasivní prvek – příkazy vždy zasílá terminál kartě, nikdy ne obráceně. Vlastní hlavička příkazu se skládá z posloupnosti znaků CLA, INS, P1, P2 a P3.
CLA  definuje takzvanou třídu instrukce.
INS  je vlastní kód dané instrukce a je platný pouze tehdy, obsahuje-li nejnižší bit hodnotu nula a nejvyšší čtyři bity nenesou ani jednu z hodnot 6 nebo 9.
P1, P2 jsou referenční data závislá na typu konkrétní instrukce (slouží pro adresaci).
P3  říká, kolik dat bude pro daný příkaz přenášeno. V případě P3 = 0 závisí jejich počet na tom, v jakém směru se přenos očekává.
V případě směru karta –>terminál to znamená přenos 256 znaků, přičemž obráceně P3 = 0 říká, že příkaz nemá žádná další data.
Po odeslání této hlavičky čeká terminál na odpověď od karty. Možné jsou tyto odpovědi:
 
 
Typ odpovědi  Hodnota Popis
ACK INS Vpp neaktivní, přenos všech zbývajících dat následuje
INS+1 Vpp aktivní, přenos všech zbývajících dat následuje
not(INS) Vpp neaktivní, následuje přenos jednoho znaku
not(INS+1) Vpp aktivní, následuje přenos jednoho znaku
NULL 0x60 Vpp beze změny, zatím žádný přenos dat
SW1 SW1 Vpp neaktivní, přenos znaku SW2 následuje

Rozdíl mezi jednotlivými ACK reakcemi je jednak v tom, zda karta nadále potřebuje napětí Vpp, a jednak v tom, zda bude následovat přenos všech dat najednou, či po slabikách potvrzovaných dalšími ACK odpověďmi. Konec zpracování každého příkazu je oznámen dvojicí znaků SW1 a SW2, které určují stav výsledku operace. Kromě hodnot uvedených v tabulce pro SW1 opět neplatí žádné normativní omezení, takže každá karta může reagovat v zásadě po svém. Platí jen, že "normální" správné ukončení by mělo být signalizováno sekvencí
SW1 - SW2 = 0x90-00.

Normované chybové kódy pro SW1:
 
Hodnota SW1 Význam
0x6e Chybná instrukce (CLA)
0x6d Instrukce není podporována nebo nepracuje
0x6b Špatná reference (P1, P2)
0x67 Chybná délka (P3)
0x6f Blíže nespecifikovaná chyba

 

<--<-^->-->



 



Semestrální projekt z Číslicových počítačů II.
Autoři: Lumír Návrat, Jakub Konštacký, Zdeněk Šmíd, Pavel Oplatek