stringtranslate.com

Java-карта

Java Card — это программная технология, которая позволяет безопасно запускать приложения ( апплеты ) на основе Java на смарт-картах и, в более общем плане, на аналогичных безопасных устройствах с малым объемом памяти [1] , которые называются «безопасными элементами» (SE). Сегодня элемент безопасности не ограничивается форм-факторами смарт-карт и других съемных криптографических жетонов; Также широко используются встроенные SE, припаянные к плате устройства, и новые конструкции защиты, встроенные в микросхемы общего назначения. Java Card устраняет эту аппаратную фрагментацию и особенности, сохраняя при этом переносимость кода, обеспечиваемую Java.

Java Card — самая маленькая из платформ Java, предназначенная для встраиваемых устройств. Java Card дает пользователю возможность программировать устройства и настраивать их для конкретных приложений. Он широко используется на различных рынках: беспроводная связь внутри SIM-карт и встроенных SIM-карт, оплата банковскими картами [2] и мобильные платежи NFC, а также для удостоверений личности, медицинских карт и паспортов. Некоторые продукты Интернета вещей, такие как шлюзы, также используют продукты на основе Java Card, например, для защиты связи с облачной службой.

Первая карта Java Card была представлена ​​в 1996 году карточным подразделением Schlumberger , которое позже объединилось с Gemplus и образовало Gemalto . Продукты Java Card основаны на спецификациях Sun Microsystems (позже дочерней компании Oracle Corporation ). Многие продукты Java-карт также используют спецификации GlobalPlatform для безопасного управления приложениями на карте (загрузка, установка, персонализация, удаление).

Основными целями разработки технологии Java Card являются портативность, безопасность и обратная совместимость. [3]

Портативность

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

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

Технология Java Card изначально была разработана с целью защиты конфиденциальной информации, хранящейся на смарт-картах . Безопасность определяется различными аспектами этой технологии:

Инкапсуляция данных
Данные хранятся внутри приложения, а приложения Java Card выполняются в изолированной среде (виртуальная машина Java Card), отдельно от базовой операционной системы и оборудования.
Аплет брандмауэра
В отличие от других виртуальных машин Java, виртуальная машина Java Card обычно управляет несколькими приложениями, каждое из которых контролирует конфиденциальные данные. Таким образом, различные приложения отделены друг от друга брандмауэром апплета, который ограничивает и проверяет доступ элементов данных одного апплета к другому.
Криптография
Поддерживаются широко используемые алгоритмы с симметричным ключом, такие как DES , Triple DES , AES , и алгоритмы с асимметричным ключом, такие как RSA , криптография на эллиптических кривых , а также другие криптографические службы, такие как подписывание, генерация ключей и обмен ключами.
Апплет
Апплет — это конечный автомат, который обрабатывает только входящие запросы команд и отвечает, отправляя данные или слова состояния ответа обратно на интерфейсное устройство.

Дизайн

На уровне языка Java Card представляет собой точное подмножество Java: все языковые конструкции Java Card существуют в Java и ведут себя одинаково. Это доходит до того, что в рамках стандартного цикла сборки программа Java Card компилируется в файл класса Java компилятором Java; файл класса подвергается постобработке с помощью инструментов, специфичных для платформы Java Card.

Однако многие функции языка Java не поддерживаются Java Card (в частности, типы char, double, float и long; квалификатор transient; перечисления; массивы более чем одного измерения; финализация; клонирование объектов; потоки). Кроме того, некоторые общие функции Java не предоставляются во время выполнения многими реальными смарт-картами (в частности, type int, который является типом выражения Java по умолчанию; и сборка мусора объектов).

Байт-код

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

Библиотека и среда выполнения

Стандартная библиотека классов Java Card и поддержка среды выполнения сильно отличаются от таковых в Java, а общее подмножество минимально. Например, класс Java Security Manager не поддерживается в Java Card, где политики безопасности реализуются виртуальной машиной Java Card; и переходные процессы (непостоянные, быстрые переменные RAM, которые могут быть членами класса) поддерживаются через библиотеку классов Java Card, хотя они имеют поддержку собственного языка в Java.

Особенности

Среда выполнения и виртуальная машина Java Card также поддерживают функции, специфичные для платформы Java Card:

Упорство
При использовании Java Card объекты по умолчанию хранятся в постоянной памяти (на смарт-картах очень мало оперативной памяти, и она используется только для временных или чувствительных к безопасности объектов). Поэтому среда выполнения, а также байт-код были адаптированы для управления постоянными объектами.
атомарность
Поскольку смарт-карты питаются от внешнего источника и используют постоянную память, постоянные обновления должны быть атомарными. Таким образом, отдельные операции записи, выполняемые отдельными инструкциями байт-кода и методами API, гарантируются атомарными, а среда выполнения 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, и единственный способ узнать, какое подмножество спецификаций реализовано, — это протестировать карту. [4]

Java-карта 3.0

Версия 3.0 спецификации Java Card (проект, выпущенный в марте 2008 г.) разделена на две редакции: Classic Edition и Connected Edition . [7]

Java-карта 3.1

Java Card 3.1 была выпущена в январе 2019 года.

Новый формат файла CAP и модель развертывания апплета

Новая платформа ввода-вывода и доверенная периферия

Улучшения базовой платформы

Охранные услуги

Новые криптографические расширения

Смотрите также

Рекомендации

  1. ^ Чен, З. (2000). Технология Java Card для смарт-карт: Руководство по архитектуре и программированию . Серия Java Аддисона-Уэсли. Аддисон-Уэсли. ISBN 978-0-201-70329-0. Проверено 9 апреля 2019 г.
  2. ^ Учебная библиотека Oracle (30 января 2013 г.), Разработка приложений Java Card, заархивировано из оригинала 13 декабря 2021 г. , получено 18 апреля 2019 г.
  3. ^ Ахмед Патель; Кенан Каладжич; Лалех Голафшан; Мона Тагави (2011). «Проектирование и реализация системы аутентификации с нулевым разглашением для Java Card». Международный журнал информационной безопасности и конфиденциальности . ИГИ. 5 (3): 1–18. дои : 10.4018/ijisp.2011070101.
  4. ^ «JCAlgTest — база данных поддерживаемых алгоритмов JavaCard» . Проверено 27 января 2016 г.
  5. ^ Понсини, Николя (30 января 2023 г.). «Анонс выпуска Java Card 3.2». Блог о Java-картах . Проверено 6 февраля 2023 г.
  6. ^ Понсини, Николя. «Представление Java Card 3.1: новые криптографические расширения». blogs.oracle.com . Проверено 18 апреля 2019 г.
  7. ^ Самойлов, Н. (2018). Введение в программирование: научитесь программировать на Java, используя структуры данных, алгоритмы и логику. Пакт Паблишинг. п. 13. ISBN 978-1-78883-416-2. Проверено 9 апреля 2019 г.

Внешние ссылки