Java Card

Java Card — версия Java-платформы для устройств с крайне ограниченными вычислительными ресурсами. По сравнению с другими версиями Java изменен байткод, требования к исполняющей платформе, состав стандартных библиотек.

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

Java Card дает возможность безопасным образом устанавливать и исполнять небольшие Java-приложения (апплеты) на смарт-картах и других устройствах с весьма ограниченным объёмом памяти. Эта платформа позволяет поставщику программировать устройства и делать их адаптированными под конкретное применение. Java Card широко используется в SIM-картах и банкоматах. Разработана компанией Schlumberger, представлена публике 29 октября 1996 года несколькими компаниями, включая тогдашнее подразделение Schlumberger по производству смарт-карт (теперь компания Gemalto). Программная платформа Java Card описывается спецификациями, разрабатываемыми компанией Sun Microsystems. Кроме того, GlobalPlatform (организация по стандартизации) разрабатывает стандарты для безопасной установки апплетов Java Card на устройства.

Портируемость 

Java Card описывает стандартную среду исполнения на смарт-картах с целью дать возможность одному и тому же приложению работать на различных устройствах, так же, как апплеты Java SE/Java EE исполняются на различных по программной и аппаратной части компьютерах, а мидлеты Java ME — на различных телефонах. Как и в более сложных платформах Java, это достигается комбинацией виртуальной машины (Java Card Virtual Machine, JCVM) и стандартизированной библиотеки классов, что позволяет апплету значительно абстрагироваться от особенностей конкретных моделей смарт-карт. Однако это все же не дает полной гарантии переносимости приложения на любую смарт-карту, поскольку остаются такие факторы, как объём памяти, производительность, или доступность особых интерфейсов (например, коммуникационных протоколов или криптографических алгоритмов).

Java Card OpenPlatform (JCOP) 
JCOP — это комплекс мер для разработки единого стандарта операционной системы с виртуальной машиной Java Card для систем сильной идентификации личности и платежных систем. Разработана IBM с широкой интеграцией с организациями GlobalPlatform, ICAO. На сегодня является практически синонимом JCVM.

Безопасность 

Безопасность данных на смарт-картах была одним из основных приоритетов при разработке Java Card. Она обеспечивается различными свойствами платформы:
 Сокрытие данных. Приложения запускаются в изолированной среде (виртуальная машина Java Card) и могут получать доступ к операционной системе и аппаратному обеспечению только через специализированные интерфейсы.
 Экран (экранирование) апплетов (). Несколько апплетов может быть активно одновременно, однако они изолированы по модели «песочницы»: приложению выделяется контекст, к данным которого оно имеет доступ. Данные других приложений ограждены экраном. Для обеспечения совместной работы нескольких приложений есть механизм переключения контекстов, который выполняется через процесс, контролируемый виртуальной машиной .
 Криптография. Поддерживаются популярные алгоритмы шифрования, такие, как DES, 3DES, AES, RSA. Также поддерживаются другие криптографические сервисы: цифровые подписи, генерирование электронных ключей и обмен ими.
 Механизм апплетов. Апплет Java Card — это, по сути, конечный автомат, который обрабатывает входящие команды и отвечает, посылая данные или возвращая информацию о статусе.

Отличия Java Card от Java

Язык 

На уровне языка Java Card — это подмножество более полных платформ Java: все языковые конструкции Java Card присутствуют в Java и ведут себя в точности так же. Более того, при стандартной последовательности компиляции используется обычный компилятор Java (javac) без каких-либо специальных опций, и лишь потом результат обрабатывается специфичной для Java Card программой, чтобы получить файл, который можно будет установить на смарт-карту. Однако многие возможности языка Java не поддерживаются в Java Card, например, типы char, double, float и long, ключевое слово transient, перечислимые типы (enum), многомерные массивы, финализаторы, клонирование объектов, потоки.

Байткод 

Байткод, выполняемый виртуальной машиной Java Card, функционально является подмножеством байткода Java, однако он кодируется иным образом для минимизации размера приложения. Таким образом, апплет Java Card обычно занимает меньше места, чем гипотетический апплет Java SE, полученный компилированием того же исходного кода. Такая экономия памяти смарт-карты имеет и обратную сторону: отсутствие поддержки некоторых свойств языка (как описано выше) и ограничение по размеру апплета. Существуют возможности обойти ограничение на размер: например, разделив код приложения на пакеты не более 64 кБ каждый.

Разработка 

Приемы программирования, используемые в типичном приложении Java Card, значительно отличаются от применяемых в Java SE. Однако тот факт, что Java Card является строгим подмножеством языка Java, значительно ускоряет обучение этой технологии, а также позволяет использовать среду Java SE для разработки и отладки приложений. Более того, можно совместно запускать и отлаживать в одной среде и приложение для Java Card, и его серверную часть, которую предполагается выполнять на PC.

Однако при этом следует периодически проверять, что приложение соответствует ограничениям Java Card, компилируя его в соответствующий байткод, а также проверять его работу на настоящей смарткарте, чтобы получить представление о производительности реального устройства.

Ссылки 
 Опубликована спецификация Java Card 3.0 
 GlobalPlatform

См. также 
 MULTOS
 ISO 7816

Примечания 

Java
Встраиваемые операционные системы
Смарт-карта