Разбиране на Java Card 2.0

Тази статия започва с преглед на смарт картите и кратък преглед на ISO 7816, стандарта за смарт карти. Като се има предвид фона на смарт картите в предишните графи на Java Developer , тази вноска ще започне с отговор на въпроса „Какво представлява Java Card?“ и преглед на архитектурата на системата Java Card. След това ще се съсредоточим върху много въпроси, специфични за Java Card, включително жизнения цикъл на Java Card; езиковите подмножества Java Card 2.0 и класовете на API библиотека; и защита на Java Card. След това ще обсъдим средата на изпълнение на Java Card и ще покажем как работи Java Card. Ще завършим с един осветителен пример: приложение за електронен портфейл, написано само за Java Card.

Оттук нататък всички препратки към Java Card имплицитно се отнасят до Java Card 2.0.

Какво е смарт карта?

Идентично на размера на кредитната карта, смарт картата съхранява и обработва информация чрез електронните вериги, вградени в силиций в пластмасовия субстрат на тялото си. Има два основни вида смарт карти: Интелигентната смарт карта съдържа микропроцесор и предлага възможности за четене, запис и изчисляване, като малък микрокомпютър. А карта с памет , от друга страна, не разполага с микропроцесор и е предназначен само за съхранение на информация. Карта с памет използва логика за сигурност, за да контролира достъпа до паметта.

Всички смарт карти съдържат три вида памет: постоянна непроменяема памет; постоянна променлива памет; и непостоянна променлива памет. ROM, EEPROM и RAM са най-широко използваната памет за трите съответни типа в настоящите смарт карти. Постоянната памет се нарича още енергонезависима памет. В тази статия ще използваме взаимозаменяемите термини устойчиви и енергонезависими .

ISO 7816 част 1-7, дефинирана от Международната организация по стандартизация, съдържа набор от стандарти, които обхващат различни аспекти на смарт картите. ISO 7816 се състои от:

  • Физически характеристики (част 1)

  • Размери и местоположение на контактите (част 2)

  • Електронни сигнали и протоколи за предаване (част 3)

  • Междуиндустриални команди за обмен (част 4)

  • Идентификатори на приложения (част 5)

  • Междуиндустриални елементи от данни (част 6)

  • Междуиндустриални команди за SCQL (част 7)

Следващата диаграма илюстрира физическите характеристики на смарт карта, които са определени в ISO 7816, част 1.

За повече информация относно ISO 7816 и смарт картите вижте „Смарт карти: грунд“.

Обикновено смарт картата не съдържа захранване, дисплей или клавиатура. Той взаимодейства с външния свят, като използва серийния комуникационен интерфейс чрез своите осем точки за контакт. Размерите и местоположението на контактите са описани в част 2 на ISO 7816. Тази диаграма показва контактите на смарт карта.

Смарт карта се вмъква в устройство за приемане на карти (CAD), което може да се свърже с друг компютър. Други термини, използвани за устройството за приемане на карти, са терминал , четец и IFD (интерфейсно устройство). Всички те предоставят едни и същи основни функции, а именно да захранват картата и да установят връзка за пренос на данни.

Когато два компютъра комуникират помежду си, те обменят пакети от данни, които се конструират след набор от протоколи. По същия начин смарт картите говорят с външния свят, използвайки свои собствени пакети данни - наречени APDU (Application Protocol Data Units). APDU съдържа или команда, или съобщение за отговор. В света на картите се използва моделът master-slave, при който смарт картата винаги играе пасивна роля. С други думи, интелигентната карта винаги чака команда APDU от терминал. След това изпълнява действието, посочено в APDU, и отговаря на терминала с APDU за отговор. Командните APDU и APDU за отговор се обменят алтернативно между карта и терминал.

Следващите таблици илюстрират съответно форматите APDU за команди и отговори. Структурата на APDU е описана в ISO 7816, част 4.

Команда APDU
Задължителна заглавка Условно тяло
CLA INS P1 Р2 Lc Поле с данни Le

Заглавката кодира избраната команда. Състои се от четири полета: клас (CLA), инструкция (INS) и параметри 1 и 2 (P1 и P2). Всяко поле съдържа 1 байт:

  • CLA: Байт на класа. В много смарт карти този байт се използва за идентифициране на приложение.

  • INS: Байт с инструкции. Този байт показва кода на инструкциите.

  • P1-P2: байтове на параметрите. Те осигуряват допълнителна квалификация на командата APDU.

Lc означава броя на байтовете в полето за данни на командата APDU; Le означава максималния брой байтове, очакван в полето за данни на следващия APDU за отговор.

Отговор APDU
Условно тяло Задължителен ремарке
Поле с данни SW1 SW2

Байтовете на състоянието SW1 и SW2 означават състоянието на обработка на командата APDU в карта.

Какво е Java карта?

Java Card е смарт карта, която може да изпълнява Java програми. Спецификацията на Java Card 2.0 е публикувана на //www.javasoft.com/javacard. Той съдържа подробна информация за изграждане на виртуална машина Java Card и интерфейс за програмиране на приложения (API) в смарт карти. Минималното системно изискване е 16 килобайта памет само за четене (ROM), 8 килобайта EEPROM и 256 байта памет с произволен достъп (RAM).

Системната архитектура на Java Card е илюстрирана на следващата фигура.

Както е показано на фигурата, Java Card VM е изградена върху специфична интегрална схема (IC) и вградена операционна система. JVM слоят крие собствената технология на производителя с общ език и системен интерфейс. Рамката на Java Card определя набор от класове интерфейс за програмиране на приложения (API) за разработване на приложения на Java Card и за предоставяне на системни услуги на тези приложения. Конкретна индустрия или бизнес може да предостави допълнителни библиотеки за предоставяне на услуга или за усъвършенстване на модела за сигурност и система. Приложенията на Java Card се наричат аплети . На една карта могат да се намират множество аплети. Всеки аплет се идентифицира уникално чрез своя AID (идентификатор на приложението), както е дефиниран в ISO 7816, част 5.

Важен момент, който трябва да имате предвид, е това, което не са смарт картите : те не са персонални компютри. Те имат ограничени ресурси на паметта и изчислителна мощ. Потребителите не трябва да мислят за Java Card 2.0 като просто за съкратена версия на JDK.

Животът на Java Card

Животът на Java Card започва, когато родната операционна система, Java Card VM, библиотеките с класове на API и по избор аплетите се изгарят в ROM. Този процес на запис на постоянните компоненти в неизменяемата памет на чип за изпълнение на входящи команди се нарича маскиране .

Преди да попадне в портфейла ви, Java Card трябва да премине през инициализация и персонализация. Инициализацията се отнася до зареждане на общи данни в енергонезависимата памет на картата. Тези данни са идентични за голям брой карти и не са специфични за дадено лице; пример може да бъде името на издателя или името на производителя.

Следващата стъпка, персонализирането, включва присвояване на карта на човек. Това може да се случи чрез физическа персонализация или чрез електронна персонализация. Физическата персонализация се отнася до щамповане или лазерно гравиране на вашето име и номер на картата върху пластмасовата повърхност на картата. Електронната персонализация се отнася до зареждане на лични данни в енергонезависимата памет на картата, например вашия личен ключ, име и ПИН номер.

Инициализацията и персонализацията варират от доставчик на продавач и издател на издател. И в двете, EEPROM (вид енергонезависима памет) често се използва за съхраняване на данни.

На този етап Java картата е готова за употреба. Можете да получите Java карта от издател или да я закупите от търговец на дребно. Картите, продавани от търговец на дребно, са с общо предназначение, като в този случай персонализирането често се пропуска.

Сега можете да вмъкнете вашата Java карта в четец и да изпратите APDU команди на аплетите, намиращи се на картата, или да изтеглите още аплети или данни на картата.

Java карта остава активна, докато не изтече или бъде блокирана поради непоправима грешка.

Живот на виртуална машина Java Card

За разлика от Java виртуалната машина (JVM) в компютър или работна станция, виртуалната машина Java Card работи завинаги.

По-голямата част от информацията, съхранявана на картата, трябва да бъде запазена, дори когато захранването е премахнато - т.е. когато картата е извадена от четеца. Java Card VM създава обекти в EEPROM, за да съхранява постоянната информация. Животът на изпълнението на Java Card VM е животът на картата. Когато захранването не е осигурено, VM работи в безкраен тактов цикъл.

Животът на аплети и обекти на Java Card

Животът на един аплет започва, когато е правилно инсталиран и регистриран в системната таблица на системния регистър и завършва, когато бъде премахнат от таблицата. Пространството на премахнат аплет може или не може да бъде използвано повторно, в зависимост от това дали събирането на боклука е внедрено на картата. Аплетът на карта е в неактивен етап, докато не бъде изрично избран от терминала.

Обектите се създават в постоянната памет (например EEPROM). Те могат да бъдат загубени или събрани боклук, ако други постоянни обекти не ги препращат. Въпреки това е хиляда пъти по-бавно да пишете в EEPROM, отколкото в RAM.

Някои обекти са достъпни често и съдържанието на техните полета не трябва да бъде постоянно. Java Card поддържа преходни (временни) обекти в RAM. След като обектът бъде деклариран като преходен, съдържанието му не може да бъде преместено обратно в постоянната памет.

Подгрупа на езика Java Card 2.0

Програмите на Java Card, разбира се, са написани на Java. Те се компилират с помощта на общи Java компилатори. Поради ограничените ресурси на паметта и изчислителната мощност, не всички езикови функции, дефинирани в спецификацията на езика Java, се поддържат на Java Card. По-конкретно, Java Card не поддържа:

  • Динамично зареждане на класа

  • Мениджър по сигурността

  • Конци и синхронизация

  • Клониране на обект

  • Финализиране

  • Големи примитивни типове данни (float, double, long и char)

Не е изненадващо, че ключовите думи, които поддържат тези функции, също са пропуснати от езика. VM внедрителите могат да решат да поддържат 32-битови цели числа или естествени методи за аплети след издаване, ако работят върху по-усъвършенствана смарт карта с повече памет. Аплети след издаване са онези аплети, които се инсталират на Java Card след издаване на картата на притежателя на картата.

Рамката Java Card 2.0

Смарт картите са на пазара от 20 години и повечето от тях обикновено са съвместими с ISO 7816 Части 1-7 и / или EMV. Вече разгледахме ISO 7816. Какво е EMV? Стандартът EMV, определен от Europay, MasterCard и Visa, се основава на серията стандарти ISO 7816 с допълнителни собствени функции, за да отговори на специфичните нужди на финансовата индустрия. Java Card Framework е проектиран да поддържа лесно системи и приложения на смарт карти. Той крие подробностите за инфраструктурата на смарт картите и предоставя на разработчиците на приложения Java Card относително лесен и ясен интерфейс за програмиране.

Рамката на Java Card съдържа четири пакета:

Име на пакета Описание
javacard.framework Това е основният пакет на картата. Той дефинира класове като и , които са основните градивни елементи за програмите на Java Card и , и които предоставят време за изпълнение и системно обслужване на програми на Java Card, като обработка на APDU и споделяне на обекти
javacardx.framework Този пакет осигурява обектно-ориентиран дизайн за файлова система, съвместима с ISO 7816-4. Той поддържа елементарни файлове (EF), специални файлове (DF) и ориентирани към файлове APDU, както е посочено в ISO7816
javacardx.crypto и javacardx.cryptoEnc Тези два пакета поддържат криптографска функционалност, необходима за смарт карти

В съответствие с конвенцията за именуване на Java, пакетите Java Cardx са разширения на рамката на Java Card. Не е задължително да ги поддържате на картата.

Сигурност на Java Card

Java аплетите са обект на ограничения за защита на Java, но моделът за сигурност на системите Java Card се различава от стандартната Java в много отношения.

Класът Security Manager не се поддържа на Java Card. Политиките за езикова сигурност се прилагат от виртуалната машина.

Java аплетите създават обекти, които съхраняват и манипулират данни. Обект е собственост на аплета, който го създава. Въпреки че аплетът може да има препратка към обект, той не може да извиква методите на обекта, освен ако не притежава обекта или обектът е изрично споделен. Аплетът може да споделя всеки свой обект с определен аплет или с всички аплети.

Аплетът е независим обект в Java Card. Изборът, изпълнението и функционалността му не се влияят от други аплети, намиращи се на същата карта.

Как нещата работят заедно в Java Card

Вътре в Java Card JCRE (Java Card Runtime Environment) се отнася до виртуалната машина Java Card и класовете в Java Card Framework. Всеки аплет в Java Card е свързан с уникален AID, присвоен от JCRE.

След като аплетът бъде правилно зареден в постоянната памет на картата и свързан с Java Card Framework и други библиотеки на картата, JCRE извиква метода за инсталиране на аплета като последна стъпка в процеса на инсталиране на аплета. Публичен статичен метод, installтрябва да бъде реализиран от клас на аплет, за да създаде екземпляр на аплета и да го регистрира в JCRE. Тъй като паметта е ограничена, в този момент е добра практика за програмиране да се създават и инициализират обектите, от които аплетът ще се нуждае по време на живота си.