Java karta - Java Card

Karta Java Card označuje softwarovou technologii, která umožňuje bezpečné spouštění aplikací ( appletů ) založených na prostředí Java na čipových kartách a podobných zařízeních s malou stopou paměti. Java Card je nejmenší platforma Java zaměřená na vestavěná zařízení. Karta Java Card umožňuje uživateli programovat zařízení a přizpůsobit je konkrétním aplikacím. Je široce používán na kartách ATM . První karta Java byla představena v roce 1996 divizí karet společnosti Schlumberger, která se později spojila s Gemplus a vytvořila Gemalto . Produkty Java Card jsou založeny na specifikacích platformy Java Card Platform vyvinutých společností Sun Microsystems (později adceřiná společnost Oracle Corporation ). Mnoho produktů Java card také spoléhá na specifikace GlobalPlatform pro bezpečnou správu aplikací na kartě (stahování, instalace, personalizace, mazání).

Hlavními konstrukčními cíli technologie Java Card jsou přenositelnost a bezpečnost.

Přenosnost

Cílem karty Java Card je definovat standardní výpočetní prostředí čipových karet, které umožňuje spuštění stejného appletu Java Card na různých čipových kartách, podobně jako je applet Java spuštěn na různých počítačích. Stejně jako v Javě se toho dosahuje pomocí kombinace virtuálního stroje (Java Card Virtual Machine) a dobře definované běhové knihovny, která do značné míry abstrahuje applet od rozdílů mezi čipovými kartami. Přenositelnost zůstává zmírněna problémy s velikostí paměti, výkonem a podporou běhu (např. U komunikačních protokolů nebo kryptografických algoritmů).

Bezpečnostní

Technologie Java Card byla původně vyvinuta za účelem zabezpečení citlivých informací uložených na čipových kartách . Zabezpečení je určováno různými aspekty této technologie:

Zapouzdření dat
Data jsou uložena v aplikaci a aplikace Java Card jsou spouštěny v izolovaném prostředí (Java Card VM), odděleně od základního operačního systému a hardwaru.
Appletový firewall
Na rozdíl od jiných virtuálních počítačů Java, virtuální počítač Java Card obvykle spravuje několik aplikací, z nichž každá řídí citlivá data. Různé aplikace jsou proto od sebe odděleny firewallem appletů, který omezuje a kontroluje přístup datových prvků jednoho appletu k druhému.
Kryptografie
Jsou podporovány běžně používané algoritmy symetrických klíčů jako DES , Triple DES , AES a asymetrické klíčové algoritmy jako RSA , kryptografie eliptické křivky a další kryptografické služby jako podepisování, generování klíčů a výměna klíčů.
Applet
Applet je stavový stroj, který zpracovává pouze příchozí požadavky na příkazy a odpovídá zasláním dat nebo stavových slov odpovědi zpět do zařízení rozhraní.

Design

Na jazykové úrovni je Java Card přesnou podmnožinou Javy: všechny jazykové konstrukce Java Card existují v Javě a chovají se shodně. To jde do té míry, že jako součást standardního cyklu sestavování je program Java Card kompilován do souboru třídy Java kompilátorem Java; soubor třídy je dodatečně zpracován nástroji specifickými pro platformu Java Card.

Mnoho funkcí jazyka Java však karta Java nepodporuje (zejména typy char, double, float a long; transientkvalifikátor; výčty; pole více než jedné dimenze; ​​finalizace; klonování objektů; vlákna). Některé běžné rysy Javy dále za běhu neposkytuje mnoho skutečných čipových karet (zejména typ int, který je výchozím typem výrazu Java; a sběr odpadků z objektů).

Bytecode

Bajtkód Java Card spuštěný virtuálním strojem Java Card je funkční podmnožina bytového kódu Java 2 spuštěného standardním Java Virtual Machine, ale s odlišným kódováním pro optimalizaci velikosti. Applet Java Card tedy obvykle používá méně bajtových kódů než hypotetický applet Java získaný kompilací stejného zdrojového kódu Java. To šetří paměť, což je nutnost u zařízení s omezeným zdrojem, jako jsou čipové karty. Jako kompromis designu neexistuje podpora pro některé funkce jazyka Java (jak je uvedeno výše) a omezení velikosti. Existují techniky, jak překonat omezení velikosti, například rozdělit kód aplikace na balíčky pod limit 64  KiB .

Knihovna a runtime

Standardní knihovna tříd Java Card a podpora běhu se velmi liší od podpory v Javě a běžná podmnožina je minimální. Například třída Java Security Manager není podporována na kartě Java Card, kde jsou zásady zabezpečení implementovány virtuálním počítačem Java Card; a přechodné (trvalé, rychlé proměnné RAM, které mohou být členy třídy) jsou podporovány prostřednictvím knihovny tříd Java Card, zatímco v Javě mají podporu nativního jazyka.

Specifické funkce

Modul runtime Java Card a virtuální stroj také podporují funkce, které jsou specifické pro platformu Java Card:

Vytrvalost
U karty Java Card jsou objekty ve výchozím nastavení uloženy v trvalé paměti (paměť RAM je na čipových kartách velmi vzácná a používá se pouze pro dočasné nebo na objekty citlivé na zabezpečení). Runtime prostředí i bytecode byly proto upraveny pro správu trvalých objektů.
Atomicita
Protože čipové karty jsou napájeny externě a spoléhají na trvalou paměť, musí být trvalé aktualizace atomické. Jednotlivé operace zápisu prováděné jednotlivými instrukcemi bytecode a metodami API jsou proto zaručeně atomické a prostředí Java Card Runtime obsahuje omezený transakční mechanismus.
Izolace appletu
Brána firewall Java Card je mechanismus, který od sebe izoluje různé applety přítomné na kartě. Zahrnuje také mechanismus sdílení, který umožňuje appletu explicitně zpřístupnit objekt jiným appletům.

Rozvoj

Techniky kódování používané v praktickém programu Java Card se významně liší od technik používaných v programu Java. Tato karta Java stále používá přesnou podmnožinu jazyka Java, což zrychluje křivku učení a umožňuje použití prostředí Java k vývoji a ladění programu Java Card (upozornění: i když k ladění dochází pomocí bajtového kódu Java, ujistěte se, že soubor třídy odpovídá omezení jazyka Java Card převedením na bytecode Java Card; a brzy otestujte skutečnou inteligentní kartu Java Card, abyste získali představu o výkonu); dále lze spustit a ladit jak kód Java Card pro aplikaci, která má být vložena do čipové karty, tak aplikaci Java, která bude v hostiteli pomocí čipové karty, přičemž všechny budou pracovat společně ve stejném prostředí.

Verze

Společnost Oracle vydala několik specifikací platformy Java Card a poskytuje nástroje SDK pro vývoj aplikací. Prodejci čipových karet obvykle implementují pouze podmnožinu algoritmů specifikovaných v cíli platformy Java Card a jediným způsobem, jak zjistit, která podmnožina specifikace je implementována, je otestovat kartu.

  • Verze 3.1 (17.12.2018)
    • Přidaná podpora konfigurovatelného generování párů klíčů, podpora pojmenovaných eliptických křivek, podpora nových algoritmů a operací, další režimy AES a čínské algoritmy.
  • Verze 3.0.5 (03.06.2015)
    • Oracle SDK: Java Card Classic Development Kit 3.0.5u1 (03.06.2015)
    • Přidána podpora pro modulární umocňování Diffie-Hellman, ochrana dat domény pro Diffie-Hellman, klíče eliptické křivky a DSA, RSA-3072, SHA3, prosté ECDSA, AES CMAC, AES CTR.
  • Verze 3.0.4 (06.08.2011)
    • Oracle SDK: Java Card Classic Development Kit 3.0.4 (06.11.2011)
    • Přidána podpora pro DES MAC8 ISO9797.
  • Verze 3.0.1 (15.06.2009)
    • Oracle SDK: Java Card Development Kit 3.0.3 RR (11.11.2010)
    • Přidána podpora pro SHA-224, SHA-2 pro všechny podpisové algoritmy.
  • Verze 2.2.2 (03.2006)
    • Oracle SDK: Java Card Development Kit 2.2.2 (03.2006)
    • Přidána podpora pro SHA-256, SHA-384, SHA-512, ISO9796-2, HMAC, Korean SEED MAC NOPAD, Korean SEED NOPAD.
  • Verze 2.2.1 (10.2003)
    • Oracle SDK: Java Card Development Kit 2.2.1 (10.2003)
  • Verze 2.2 (11.2002)
    • Přidána podpora pro zapouzdření kryptografických klíčů AES, algoritmy CRC, zapouzdření klíčů kryptografie eliptických křivek, výměna klíčů Diffie-Hellman pomocí ECC, klíče ECC pro binární polynomiální křivky a pro křivky primárního celého čísla, AES, ECC a RSA s proměnnou délkou klíče.
  • Verze 2.1.1 (18.05.2000)
    • Oracle SDK: Java Card Development Kit 2.1.2 (05.04.2001)
    • Přidána podpora pro RSA bez polstrování.
  • Verze 2.1 (07.06.1999)

Java Card 3.0

Verze 3.0 specifikace Java Card (koncept vydaný v březnu 2008) je rozdělena do dvou edic: Classic Edition a Connected Edition .

  • Classic Edition (v současné době ve verzi 3.0.5 vydané v červnu 2015) je vývoj Java Card Platform verze 2 (přičemž poslední verze 2.2.2 byla vydána v březnu 2006), který podporuje tradiční karty applety na zařízení s omezenými zdroji takových jako čipové karty. Starší applety jsou obecně kompatibilní s novějšími zařízeními Classic Edition a applety pro tato novější zařízení mohou být kompatibilní se staršími zařízeními, pokud neodkazují na nové funkce knihovny. Chytré karty implementující Java Card Classic Edition byly certifikovány bezpečnostními systémy několika dodavateli a jsou komerčně dostupné.
  • Connected Edition (v současné době ve verzi 3.0.2 vydané v prosinci 2009) má za cíl poskytnout nový virtuální stroj a vylepšené prostředí pro spouštění se síťovými-orientované rysy. Aplikace lze vyvíjet jako klasické applety karet požadované příkazy APDU nebo jako servlety využívající HTTP k podpoře webových schémat komunikace ( HTML , REST , SOAP ...) s kartou. Modul runtime používá podmnožinu bajtového kódu Java (1.) 6, bez plovoucího bodu; podporuje těkavé objekty ( uvolňování paměti ), multithreading , komunikační zařízení mezi aplikacemi, vytrvalost , transakce , zařízení pro správu karet ... Od roku 2017 došlo v komerčně dostupných čipových kartách k malé adopci, a to natolik, že odkaz na Java Card (včetně na této stránce Wikipedie) často implicitně vylučuje Connected Edition .

Viz také

Reference

externí odkazy