Карта Java относится к программная технология, позволяющая безопасно запускать приложения на основе Java (апплеты ) на смарт-картах и подобных устройствах с малым объемом памяти. Java Card - самая маленькая из платформ Java, предназначенная для встраиваемых устройств. Java Card дает пользователю возможность программировать устройства и настраивать их для конкретных приложений. Он широко используется в картах ATM. Первая карта Java Card была представлена в 1996 году подразделением карт Schlumberger, которое позже объединилось с Gemplus и образовало Gemalto. Продукты Java Card основаны на спецификациях платформы Java Card Platform, разработанных Sun Microsystems (позже дочерней компанией Oracle Corporation ). Многие продукты для карт Java также полагаются на спецификации GlobalPlatform для безопасного управления приложениями на карте (загрузка, установка, персонализация, удаление).
Основными целями разработки технологии Java Card являются мобильность и безопасность.
Java Card направлена на определение стандартной вычислительной среды смарт-карты, позволяющей одному и тому же апплету Java Card работать на разных смарт-картах, подобно тому, как апплет Java работает на разных компьютерах. Как и в Java, это достигается с помощью комбинации виртуальной машины (виртуальной машины Java Card) и четко определенной библиотеки времени выполнения, которая в значительной степени абстрагирует апплет от различий между смарт-картами. Переносимость по-прежнему снижается из-за проблем, связанных с объемом памяти, производительностью и поддержкой времени выполнения (например, для протоколов связи или криптографических алгоритмов).
Технология Java Card изначально была разработана с целью защиты конфиденциальной информации, хранящейся на смарт-картах. Безопасность определяется различными аспектами этой технологии:
На уровне языка Java Card является точным подмножеством Java: все языковые конструкции Java Card существуют в Java и ведут себя идентично. Это доходит до того, что как часть стандартного цикла сборки, программа Java Card компилируется в файл класса Java компилятором Java; файл класса обрабатывается инструментами, специфичными для платформы Java Card.
Однако многие функции языка Java не поддерживаются Java Card (в частности, типы char, double, float и long; квалификатор transient
; перечисления; массивы более одного измерения; финализация; клонирование объекта; потоки). Кроме того, некоторые общие функции Java не предоставляются во время выполнения многими действительными смарт-картами (в частности, тип int
, который является типом по умолчанию для выражения Java; и сборка мусора объектов).
Байт-код Java Card, выполняемый виртуальной машиной Java Card, является функциональным подмножеством байт-кода Java 2, выполняемого стандартной виртуальной машиной Java, но с другой кодировкой оптимизировать по размеру. Таким образом, апплет Java Card обычно использует меньше байт-кода, чем гипотетический Java-апплет, полученный путем компиляции того же исходного кода Java. Это экономит память, что необходимо для устройств с ограниченными ресурсами, таких как смарт-карты. В качестве компромисса с дизайном нет поддержки некоторых функций языка Java (как упоминалось выше) и ограничений по размеру. Существуют методы преодоления ограничений по размеру, такие как разделение кода приложения на пакеты, размер которых меньше 64 KiB.
Стандартная библиотека классов Java Card и поддержка среды выполнения сильно отличаются от таковой в Java, и общее подмножество минимально. Например, класс Java Security Manager не поддерживается в Java Card, где политики безопасности реализуются виртуальной машиной Java Card; и переходные процессы (непостоянные, быстрые переменные RAM, которые могут быть членами класса) поддерживаются через библиотеку классов Java Card, в то время как они имеют поддержку собственного языка в Java.
Среда выполнения Java Card и виртуальная машина также поддерживают функции, характерные для платформы Java Card:
Методы кодирования, используемые в практической программе Java Card, значительно отличаются от тех, которые используются в программе Java. Тем не менее, эта Java Card использует точное подмножество языка Java, ускоряет процесс обучения и позволяет использовать среду Java для разработки и отладки программы Java Card (предостережение: даже если отладка происходит с помощью байт-кода Java, убедитесь, что файл класса соответствует ограничению языка Java Card, преобразовывая его в байт-код Java Card; и протестируйте на реальной смарт-карте Java Card на раннем этапе, чтобы получить представление о производительности); кроме того, можно запускать и отлаживать как код Java Card для приложения, которое будет встроено в смарт-карту, так и приложение Java, которое будет находиться на хосте с помощью смарт-карты, и все они будут работать совместно в одной среде.
Oracle выпустила несколько спецификаций платформы Java Card и предоставляет инструменты SDK для разработки приложений. Обычно поставщики смарт-карт реализуют только подмножество алгоритмов, указанных в целевой платформе Java Card, и единственный способ узнать, какая часть спецификации реализована, - это проверить карту.
Версия 3.0 спецификации Java Card (черновик выпущен в марте 2008 г.) разделена на две редакции: Classic Edition и Connected Edition.