Java Card

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Wave.svg
Java Card
Micro Edition (ME)
Standard Edition (SE)
Enterprise Edition (EE)
PersonalJava (не поддерживается)

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

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

Java Card дает возможность безопасным образом устанавливать и исполнять небольшие Java приложения (апплеты) на смарт-картах и других устройствах с весьма ограниченным объемом памяти. Эта платформа позволяет поставщику программировать устройства и делать их адаптированными под конкретное применение. Java Card широко используется в SIM-картах и банкоматах. Разработана компанией Шлюмберже[1], представлена публике 29 октября 1996 года[2] несколькими компаниями, включая тогдашнее подразделение Шлюмберже по производству смарт-карт (теперь компания Gemalto). Программная платформа Java Card описывается спецификациями, разрабатываемыми компанией Sun Microsystems[3]. Кроме того, 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) и могут получать доступ к операционной системе и аппаратному обеспечению только через специализированные интерфейсы.
  • Экран апплетов (англ. Application Firewall). Несколько апплетов может быть активно одновременно, однако они изолированы по модели «песочницы»: приложению выделяется контекст, к данным которого оно имеет доступ. Данные других приложений ограждены экраном. Для обеспечения совместной работы нескольких приложений есть механизм переключения контекстов, который выполняется через процесс, контролируемый виртуальной машиной [4].
  • Криптография. Поддерживаются популярные алгоритмы шифрования, такие как 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, компилируя его в соответствующий байткод, а также проверять его работу на настоящей смарткарте, чтобы получить представление о производительности реального устройства.

Ссылки[править | править исходный текст]

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

  1. U.S. provisional application Serial No. 60/029,057, filed Oct. 25, 1996, non-provisional application No. 957512 filed on 10/24/1997, issued as patent
  2. Sun Microsystems Announces Java Card API , Business Wire, Oct. 29, 1996
  3. Обзор платформы Java Card на сайте компании Sun
  4. Java Card Technology FAQs