2008-07-15

JavaCard Classic

Volt egy projekt egy-két hónapja, amiben JavaCard technológiát használtunk. Most már teljes a skála, JavaCard-tól MIDP-n és Standard Edition-on keresztül a J2EE-ig mindent programoztam Java-ban. Igaz, a JavaCard-nak éppenhogy csak karcoltam a felszínét, de arra ez is elég hogy rálátás legyen. Most csak konyhanyelven írom le hogy megy ez a dolog:

Gyakorlatilag java-t kell programozni, de az osztálykönyvtár irdatlanul le van csupaszítva és csak 2 bytes-os adatszerkezetek vannak, tehát tele van az egész kód short kasztolásokkal és tömbműveletekkel. Úgynevezett javacard appleteket kell programozni, amiknek saját primitív tranzakciókezelésük és belső security managementjük van, lényegében perzisztens szerkezetűek és byte alapú módon kell kommunikálni velük. A kártyában pár kilobájt EEPROM áll rendelkezésünkre a programhoz és az eltárolt adatokhoz. Egy kártyára több appletet is installálhatunk. Sok firkálás után a kártya szépen tönkremegy.

A kártya valójában nem igazi bájtkódot futtat, hanem speckó eszközzel kell lefordítani a java forrást egy jobban megemésztett formátumra. Például a standard java-val ellentétben a linkelési információk nem kerülnek be a lefordított bináris állományba, hanem azokat egy másik állományban tárolják kb. név, index párokként. Az eszköz és a doksik letölthetőek a netről, van valami plugin Eclipse-hez (JCOP) ami szimulálni tudja a kártyát és kommunikálni tud magasabb szinten a géphez csatlakoztatott kártyaolvasókkal.

Az appletnek van egy belépési metódusa, ami egy az egyben megkapja azokat a bájtokat, amiket a kártya vett a külvilágtól akár a felületre integrált csatlakozási pontok, akár egyéb átviteli módszerrel. Pl. vannak RFID-vel vagy NFC-vel kommunikáló kártyák. Az RFID egyébként hasonlóan működik mint egy trafó. Váltakozó áram indukálódik a kártyában, ami egyben magát az adatot is jelenti, emellett a kártya áramellátását is megoldja arra az időre amíg az adatok feldolgozódnak. vicces nem?

Visszatérve a bájt tömbre: van egy viszonylag kötött formátumú fejléce, amit a kártya mini oprendszere kiértékel. Ez az első körben max kb 256 byte hosszú bájtsorozat használható az authentikációra, új applet telepítésére, törlésére, kiválasztására, befixálására. Megfelelő számú partizán kísérlet után a kártyát jól le lehet tiltani örökre. Ugyanezt a bájtsorozatot használhatjuk az appletben a saját protokoll kialakításához. Hosszabb bájtsorozatokra van valami összeillesztős mechanizmus.

A konvencionális java SE programokkal ellentétben a javacard applet mezőváltozói perzisztensek, azaz ha valamit beállítok az úgy is marad magától. Tehát mezőváltozóban lehet tárolni ilyeneket, hogy hányszor használták a kártyát. Ha jól emlékszem van valami commit-szerű művelet is, amivel gondoskodni lehet (kell?) róla, hogy a beírt értékek valóban perzisztálódjanak, és ezt ráadásul egyszerre tegyék. A változtatásokat a javacard egy kb 256 byte-os RAM pufferben gyűjti és a commit-nál beírja az EEPROM-ba. Ha túl sok változtatást akarunk csinálni, a puffer túlcsordul és hibát kapunk.

A kimenet szintén egy bájtsorozat. Össze kell rakni és elküldeni. PC oldalon vannak driverek, amikkel meg lehet hajtani mindenféle csatlakoztatott kártyaolvasókat, de most hirtelen nem is tudom milyen interfész van hozzájuk.

Ahogy a Sun Java Cafés postban írtam, a 3-as JavaCard verzióban bevezetnek egy új programozási módot, amiben magasabb szinten, szervletekkel (ezek sem igazi szervletek) lehet programozni a kártyákat. Ezt nevezik Connected Edition-nek.

Amiről én írtam az még a régebbi spec, amit meghagytak és Classic Edition-nek hívják.

2008-07-02

Eredményhirdetés


Köszi hogy 31-en nyilvánítottatok véleményt! A végeredményt idemásolom, hogy akkor is látható legyen, amikor az oldal széléről majd eltűnik és a múlt homályába vész:

  • 7 ember (22%) 100%-ban szXrt lapátol.
  • 10 ember (32%) 80%-ban szXrt lapátol, de 20%-ban király dolgokkal foglalkozik.
  • 9 embernél (29%) fele-fele ez az arány.
  • 1 embernél (3%) inkább a király dolgok felé dől a mérleg, 80%-ban ezzel foglalkoznak.
  • 3-an (9%) folyamatosan király dolgokat csinálnak profi csapatban.
  • 1 szavazó pedig nem szoftverfejlesztő.

Mivel ez egy egyszerű közvéleménykutatás volt, nem derülnek ki bizonyos dolgok, például:

-Milyen szakterületekre koncentrálódik a lapátolás nagy része? Azt gyanítom, hogy főként az ügyviteli és banki szoftverekre. Technológiai és akadémiai/kutatás témakörben készült szoftvereket gondolom jobban összeraknak. Például több idő van a tesztelésre. Emellett úgy gondolom az open source szoftverekben kevesebb a szégyellendő, rejtegetnivaló megoldás.

-Milyen programnyelvre koncentrálódik a gányolás nagy része? Igaz hogy C-ben, C++-ban életveszélyesebb dolgokat lehet összehozni mint Java-ban vagy PHP-ben, de talán pont ezért a C, C++ programozóknál precízebb munkára van szükség. Modernebb nyelveknél/platformoknál, vagy legalábbis a Bábel torony felsőbb emeletein nagyvonalúbban dobálóznak rétegekkel, konverziókkal, magasszintű komponensekkel. Felhígul a társaság, divat van, nincs meg az elhivatottság. Nem utolsósorban műszakilag műveletlenebb megrendelőkkel konfrontálódnak ezen a szinten a fejlesztők és jobban beleszól a politika a tervezésbe ami kimondja mikor mit kell használni -függetlenül attól hogy az eszköz alkalmas-e az adott feladatra. Itt már visszakanyarodunk lassan a szakterületekre.

-A válaszok nyilván szubjektívek és önkritikán alapulnak. Az is lehet hogy valaki bepipálta hogy király dolgokat csinál profi csapatban, közben pedig a TheDailyWTF-nek kimeríthetetlen témaforrást tudna biztosítani. A fordítottját nehezebben tudom elképzelni, hogy egy elégedetlen munkásember valójában egy nagyon irigylésre méltó team-ben dolgozik. Ki mennyire becsüli meg a melóját? Erről is szólt ez a szavazás.

-Ha valaki szXrt lapátol, miért nem koccol le? Ez csak költői kérdés. Pár dolog közrejátszhat a maradásban. Pl. lojalitás (muhaha), pénz, van aki hisz benne hogy jobbra fordul a helyzet, a következő projekt jobb lesz és ne titkoljuk: van aki belekényelmesedik a helyzetébe.

-Végül ahol király csapatban profi dolgokat csinálnak az emberek az vajon melyik cég lehet és keresnek-e mostanában náluk munkaerőt? És vajon lehet-e itt a blogon privát üzenetet küldeni nekem ezügyben? :)