Programování

Porozumění kartě Java Card 2.0

Tento článek začíná přehledem čipových karet a krátkým přehledem normy ISO 7816, standardu čipových karet. Vzhledem k pozadí na čipových kartách v předchozím Java Developer sloupců, bude tato splátka začínat odpovědí na otázku „Co je to Java karta?“ a přehled architektury systému Java Card. Dále se zaměříme na mnoho problémů specifických pro kartu Java Card, včetně životního cyklu karty Java Card; podmnožina jazyků Java Card 2.0 a třídy knihoven API; a zabezpečení Java Card. Poté probereme běhové prostředí Java Card a ukážeme, jak běží Java Card. Ukončíme osvětlujícím příkladem: Aplikace elektronické peněženky napsaná pouze pro kartu Java Card.

Od této chvíle všechny odkazy na kartu Java Card implicitně odkazují na kartu Java Card 2.0.

Co je to čipová karta?

Identická s velikostí kreditní karty, inteligentní karta ukládá a zpracovává informace prostřednictvím elektronických obvodů zabudovaných do křemíku v plastovém substrátu jejího těla. Existují dva základní druhy čipových karet: An inteligentní čipová karta obsahuje mikroprocesor a nabízí schopnost čtení, zápisu a výpočtu, jako malý mikropočítač. A Paměťová karta, na druhé straně nemá mikroprocesor a je určen pouze pro ukládání informací. Paměťová karta používá k řízení přístupu do paměti bezpečnostní logiku.

Všechny čipové karty obsahují tři typy paměti: trvalou neměnnou paměť; trvalá proměnlivá paměť; a perzistentní proměnlivá paměť. ROM, EEPROM a RAM jsou nejpoužívanější pamětí pro tři příslušné typy v současných čipových kartách. Trvalá paměť se také nazývá energeticky nezávislá paměť. Budeme používat podmínky vytrvalý a energeticky nezávislé zaměnitelně v tomto článku.

ISO 7816 část 1-7, definovaná Mezinárodní organizací pro normalizaci, obsahuje soubor norem, které pokrývají různé aspekty čipových karet. ISO 7816 se skládá z:

  • Fyzikální vlastnosti (část 1)

  • Rozměry a umístění kontaktů (část 2)

  • Elektronické signály a přenosové protokoly (část 3)

  • Mezioborové příkazy pro výměnu (část 4)

  • Identifikátory aplikace (část 5)

  • Meziodvětvové datové prvky (část 6)

  • Mezioborové příkazy pro SCQL (část 7)

Následující diagram ilustruje fyzikální vlastnosti čipové karty, které jsou definovány v ISO 7816, část 1.

Další informace o ISO 7816 a čipových kartách najdete v části „Čipové karty: základní nátěr“.

Za normálních okolností čipová karta neobsahuje napájecí zdroj, displej ani klávesnici. Interaguje s vnějším světem pomocí sériového komunikačního rozhraní prostřednictvím svých osmi kontaktních bodů. Rozměry a umístění kontaktů jsou uvedeny v části 2 normy ISO 7816. Tento diagram zobrazuje kontakty na čipové kartě.

Chytrá karta je vložena do zařízení pro přijímání karet (CAD), které se může připojit k jinému počítači. Další pojmy používané pro zařízení pro přijímání karet jsou terminál, čtenář, a IFD (zařízení rozhraní). Všechny poskytují stejné základní funkce, jmenovitě napájení karty a navázání spojení s daty.

Když dva počítače vzájemně komunikují, vyměňují si datové balíčky, které jsou konstruovány podle sady protokolů. Podobně čipové karty mluví s vnějším světem pomocí vlastních datových balíčků - tzv APDU (Datové jednotky aplikačního protokolu). APDU obsahuje buď příkaz, nebo zprávu s odpovědí. Ve světě karet se používá model master-slave, přičemž čipová karta hraje vždy pasivní roli. Jinými slovy, čipová karta vždy čeká na příkaz APDU z terminálu. Poté provede akci uvedenou v APDU a odpoví terminálu s odpovědí APDU. Příkazové APDU a APDU odpovědi se vyměňují alternativně mezi kartou a terminálem.

Následující tabulky ilustrují formáty APDU příkazů a odpovědí. Struktura APDU je popsána v ISO 7816, část 4.

Příkaz APDU
Povinná hlavičkaPodmíněné tělo
CLAINSP1P2LcDatové poleLe

Záhlaví kóduje vybraný příkaz. Skládá se ze čtyř polí: třída (CLA), instrukce (INS) a parametry 1 a 2 (P1 a P2). Každé pole obsahuje 1 bajt:

  • CLA: Bajt třídy. Na mnoha čipových kartách se tento bajt používá k identifikaci aplikace.

  • INS: Instrukční bajt. Tento bajt označuje kód instrukce.

  • P1-P2: Bajty parametrů. Ty poskytují další kvalifikaci příkazu APDU.

Lc označuje počet bajtů v datovém poli příkazu APDU; Le označuje maximální počet bajtů očekávaný v datovém poli následující APDU odpovědi.

Odpověď APDU
Podmíněné těloPovinný přívěs
Datové poleSW1SW2

Stavové bajty SW1 a SW2 označují stav zpracování příkazu APDU na kartě.

Co je to Java karta?

Java Card je čipová karta, která je schopná spouštět programy Java. Specifikace Java Card 2.0 byla zveřejněna na adrese //www.javasoft.com/javacard. Obsahuje podrobné informace o vytváření virtuálního stroje Java Card a aplikačního programovacího rozhraní (API) na čipových kartách. Minimální systémový požadavek je 16 kilobajtů paměti jen pro čtení (ROM), 8 kilobajtů EEPROM a 256 bajtů paměti s náhodným přístupem (RAM).

Architektura systému na kartě Java Card je znázorněna na následujícím obrázku.

Jak je znázorněno na obrázku, virtuální karta Java Card je postavena na implementaci konkrétního integrovaného obvodu (IC) a nativního operačního systému. Vrstva JVM skrývá patentovanou technologii výrobce se společným jazykem a systémovým rozhraním. Rámec Java Card definuje sadu tříd rozhraní API (Application Programming Interface) pro vývoj aplikací Java Card a pro poskytování systémových služeb těmto aplikacím. Specifické odvětví nebo podnik může dodat doplňkové knihovny k poskytování služby nebo k vylepšení modelu zabezpečení a systému. Aplikace Java Card se nazývají applety. Na jedné kartě může být uloženo více appletů. Každý applet je jednoznačně identifikován POMOC (identifikátor aplikace), jak je definováno v ISO 7816, část 5.

Důležitým bodem, který je třeba mít na paměti, je to, jaké čipové karty nejsou: Nejsou to osobní počítače. Mají omezené paměťové zdroje a výpočetní výkon. Uživatelé by si neměli myslet na kartu Java Card 2.0 jako na jednoduše odizolovanou verzi JDK.

Životnost karty Java Card

Životnost karty Java začíná, když jsou nativní OS, Java Card VM, knihovny tříd API a volitelně applety vypáleny do ROM. Tento proces zápisu permanentních komponent do neměnné paměti čipu pro provádění příchozích příkazů se nazývá maskování.

Než karta Java Card přistane v peněžence, musí projít inicializací a personalizací. Inicializace se týká načítání obecných dat do energeticky nezávislé paměti karty. Tato data jsou identická u velkého počtu karet a nejsou specifická pro jednotlivce; příkladem může být název emitenta nebo výrobce.

Další krok, personalizace, zahrnuje přiřazení karty osobě. Může k tomu dojít prostřednictvím fyzické personalizace nebo prostřednictvím elektronické personalizace. Fyzická personalizace označuje embosování nebo laserové gravírování vašeho jména a čísla karty na plastový povrch karty. Elektronická personalizace označuje načítání osobních údajů do energeticky nezávislé paměti karty, například váš osobní klíč, jméno a číslo PIN.

Inicializace a přizpůsobení se liší od dodavatele k dodavateli a od vydavatele k emitentovi. V obou případech se pro ukládání dat často používá EEPROM (typ energeticky nezávislé paměti).

V tomto okamžiku je karta Java Card připravena k použití. Kartu Java můžete získat od vydavatele nebo si ji můžete koupit od maloobchodníka. Karty prodávané maloobchodníkem jsou univerzální, v takovém případě je personalizace často vynechána.

Nyní můžete kartu Java Card vložit do čtečky a odeslat příkazy APDU do appletů umístěných na kartě nebo stáhnout další applety nebo data na kartu.

Karta Java Card zůstane aktivní, dokud nevyprší její platnost nebo nebude blokována kvůli neodstranitelné chybě.

Životnost virtuálního stroje Java Card

Na rozdíl od virtuálního stroje Java (JVM) v počítači nebo pracovní stanici běží virtuální stroj Java Card navždy.

Většina informací uložených na kartě musí být zachována, i když je odpojeno napájení - tedy když je karta vyjmuta ze čtečky. Virtuální počítač Java Card vytváří objekty v EEPROM, aby uchovával trvalé informace. Životnost spuštění virtuálního počítače Java Card je životnost karty. Pokud není k dispozici napájení, virtuální počítač běží v nekonečném hodinovém cyklu.

Životnost appletů a objektů Java Card

Život appletu začíná, když je správně nainstalován a zaregistrován v tabulce registru systému, a končí, když je z tabulky odstraněn. Místo odstraněného appletu může, ale nemusí být znovu použito, v závislosti na tom, zda je na kartě implementováno uvolňování paměti. Applet na kartě je v neaktivní fázi, dokud není výslovně vybrán terminálem.

Objekty jsou vytvářeny v trvalé paměti (například EEPROM). Mohly by být ztraceny nebo shromážděny, pokud na ně jiné trvalé objekty neodkazují. Je však tisíckrát pomalejší zápis do EEPROM než do RAM.

K některým objektům se často přistupuje a obsah jejich polí nemusí být trvalý. Karta Java Card podporuje přechodný (dočasné) objekty v paměti RAM. Jakmile je objekt prohlášen za přechodný, nelze jeho obsah přesunout zpět do trvalé paměti.

Podmnožina jazyka Java Card 2.0

Programy Java Card jsou samozřejmě psány v jazyce Java. Jsou kompilovány pomocí běžných kompilátorů Java. Kvůli omezeným paměťovým zdrojům a výpočetnímu výkonu nejsou na kartě Java Card podporovány všechny jazykové funkce definované ve specifikaci jazyka Java. Karta Java Card konkrétně nepodporuje:

  • Dynamické načítání tříd

  • Bezpečnostní manažer

  • Vlákna a synchronizace

  • Klonování objektů

  • Dokončení

  • Velké primitivní datové typy (float, double, long a char)

Není žádným překvapením, že klíčová slova podporující tyto funkce jsou z jazyka také vynechána. Implementátoři virtuálních počítačů se mohou rozhodnout podporovat 32bitový celočíselný typ nebo nativní metody pro applety po vydání, pokud pracují na pokročilejší čipové kartě s větší pamětí. Aplety po vydání jsou ty applety, které jsou nainstalovány na kartu Java Card po vydání karty držiteli karty.

Rámec Java Card 2.0

Čipové karty jsou na trhu již 20 let a většina z nich je obecně kompatibilní s ISO 7816 části 1-7 a / nebo EMV. Již jsme se podívali na ISO 7816. Co je EMV? Standard EMV definovaný společnostmi Europay, MasterCard a Visa je založen na řadě norem ISO 7816 s dalšími vlastnickými funkcemi, které splňují specifické potřeby finančního odvětví. Rámec Java Card Framework je navržen tak, aby snadno podporoval systémy a aplikace čipových karet. Skrývá podrobnosti o infrastruktuře čipových karet a poskytuje vývojářům aplikací Java Card relativně snadné a přímé programovací rozhraní.

Rámec Java Card obsahuje čtyři balíčky:

Název balíčkuPopis
javacard.frameworkToto je základní balíček na kartě. Definuje třídy jako a , které jsou základními stavebními kameny pro programy Java Card a , a , které poskytují runtime a systémovou službu programům Java Card, jako je manipulace APDU a sdílení objektů
javacardx.framework Tento balíček poskytuje objektově orientovaný design pro souborový systém kompatibilní s ISO 7816-4. Podporuje základní soubory (EF), vyhrazené soubory (DF) a souborově orientované APDU, jak je uvedeno v ISO7816
javacardx.crypto a javacardx.cryptoEnc Tyto dva balíčky podporují kryptografické funkce vyžadované na čipových kartách

V souladu s konvencí pojmenování Java, Java Cardx balíčky jsou rozšíření rámce Java Card. Není nutné, abyste je na kartě podporovali.

Zabezpečení Java Card

Na applety Java se vztahují bezpečnostní omezení Java, nicméně model zabezpečení systémů Java Card se v mnoha ohledech liší od standardní Javy.

Třída Security Manager není na kartě Java Card podporována. Zásady jazykového zabezpečení jsou implementovány virtuálním strojem.

Applety Java vytvářejí objekty, které ukládají a manipulují s daty. Objekt vlastní applet, který jej vytváří. Přestože applet může mít odkaz na objekt, nemůže vyvolat metody objektu, pokud objekt nevlastní nebo není objekt výslovně sdílen. Applet může sdílet kterýkoli ze svých objektů s konkrétním appletem nebo se všemi applety.

Applet je nezávislá entita v rámci karty Java Card. Jeho výběr, provedení a funkčnost nejsou ovlivněny jinými applety umístěnými na stejné kartě.

Jak věci spolupracují uvnitř karty Java Card

Uvnitř karty Java Card odkazuje JCRE (Java Card Runtime Environment) na virtuální stroj Java Card a třídy v rámci Java Card Framework. Každý applet na kartě Java Card je spojen s jedinečným AID přiřazeným JCRE.

Poté, co je applet správně načten do trvalé paměti karty a propojen s Java Card Framework a dalšími knihovnami na kartě, zavolá JCRE metodu instalace appletu jako poslední krok v procesu instalace appletu. Veřejná statická metoda, Nainstalujte, musí být implementováno třídou appletu k vytvoření instance appletu a jeho registraci v JCRE. Protože paměť je omezená, je v tomto okamžiku dobrým programovacím postupem vytvářet a inicializovat objekty, které bude applet během své životnosti potřebovat.

$config[zx-auto] not found$config[zx-overlay] not found