Интеллектуальная карточка
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]
- Версия 3.2 (30.01.2023) [5]
- Введена поддержка протоколов (D)TLS1.3.
- Добавлены разъяснения API, которые помогут разработчикам приложений и значительно повысят уровень совместимости между несколькими реализациями.
- Версия 3.1 (17.12.2018) [6]
- Добавлена поддержка генерации настраиваемых пар ключей, поддержка именованных эллиптических кривых, поддержка новых алгоритмов и операций, дополнительные режимы AES и китайские алгоритмы.
- Версия 3.0.5 (03.06.2015)
- Oracle SDK: пакет разработки Java Card Classic 3.0.5u1 (03.06.2015)
- Добавлена поддержка модульного возведения в степень Диффи-Хеллмана, сохранения доменных данных для Диффи-Хеллмана, эллиптических кривых и ключей DSA, RSA-3072, SHA3, обычного ECDSA, AES CMAC, AES CTR.
- Версия 3.0.4 (08.06.2011)
- Oracle SDK: пакет разработки Java Card Classic 3.0.4 (06.11.2011)
- Добавлена поддержка DES MAC8 ISO9797.
- Версия 3.0.1 (15.06.2009)
- Oracle SDK: Java Card Development Kit 3.0.3 RR (11.11.2010)
- Добавлена поддержка SHA-224, SHA-2 для всех алгоритмов подписи.
- Версия 2.2.2 (03.2006)
- Oracle SDK: Комплект разработки Java Card 2.2.2 (03.2006)
- Добавлена поддержка SHA-256, SHA-384, SHA-512, ISO9796-2, HMAC, Korean SEED MAC NOPAD, Korean SEED NOPAD.
- Версия 2.2.1 (10.2003)
- Oracle SDK: Комплект разработки карт Java 2.2.1 (10.2003)
- Версия 2.2 (11.2002)
- Добавлена поддержка инкапсуляции ключей шифрования AES, алгоритмов CRC, инкапсуляции ключей шифрования эллиптических кривых, обмена ключами Диффи-Хеллмана с использованием ECC, ключей ECC для бинарных полиномиальных кривых и для кривых простых целых чисел, AES, ECC и RSA с ключами переменной длины.
- Версия 2.1.1 (18.05.2000)
- Oracle SDK: Комплект разработки Java Card 2.1.2 (05.04.2001)
- Добавлена поддержка RSA без заполнения.
- Версия 2.1 (07.06.1999)
Java-карта 3.0
Версия 3.0 спецификации Java Card (проект, выпущенный в марте 2008 г.) разделена на две редакции: Classic Edition и Connected Edition . [7]
- Classic Edition (в настоящее время версия 3.0.5, выпущенная в июне 2015 г.) представляет собой развитие платформы Java Card Platform версии 2 (последняя версия 2.2.2 была выпущена в марте 2006 г.), которая поддерживает традиционные карточные апплеты на устройствах с ограниченными ресурсами, таких как как смарт-карты. Старые апплеты обычно совместимы с новыми устройствами Classic Edition, а апплеты для этих новых устройств могут быть совместимы со старыми устройствами, если не использовать новые функции библиотеки. Смарт-карты, использующие Java Card Classic Edition, сертифицированы по безопасности несколькими поставщиками и коммерчески доступны.
- Connected Edition (в настоящее время версия 3.0.2, выпущенная в декабре 2009 г.) призвана предоставить новую виртуальную машину и расширенную среду выполнения с сетевыми функциями. Приложения могут разрабатываться как классические апплеты карт, запрашиваемые командами APDU , или как сервлеты, использующие HTTP для поддержки веб-схем связи ( HTML , REST , SOAP ...) с картой. Среда выполнения использует подмножество байт-кода Java (1.)6 без чисел с плавающей запятой; он поддерживает изменчивые объекты ( сбор мусора ), многопоточность , средства связи между приложениями, постоянство , транзакции , средства управления картами... По состоянию на 2021 год коммерчески доступные смарт-карты получили мало распространения, настолько, что упоминание о Java Card ( включая нынешнюю страницу Википедии) часто неявно исключает Connected Edition .
Java-карта 3.1
Java Card 3.1 была выпущена в январе 2019 года.
Новый формат файла CAP и модель развертывания апплета
- Функциональность апплета можно разделить на несколько пакетов Java.
- Размер файла CAP может превышать 64 КБ.
Новая платформа ввода-вывода и доверенная периферия
- Поддерживаются различные физические уровни и протоколы приложений, помимо протоколов смарт-карт, определенных в ISO 7816.
- Облегчен логический доступ к периферийным устройствам устройства с помощью приложений защищенных элементов.
Улучшения базовой платформы
- Представления массива (представления подмножества массива), статические ресурсы, встроенные в файл CAP, и улучшенная расширяемость API.
Охранные услуги
- API сертификатов, API деривации ключей, API монотонного счетчика, API системного времени
Новые криптографические расширения
- Генерация настраиваемой пары ключей, именованные эллиптические кривые, такие как кривые Эдвардса , дополнительные режимы AES ( CFB и XTS ), китайские алгоритмы (SM2-SM3- SM4 )
Смотрите также
Рекомендации
- ^ Чен, З. (2000). Технология Java Card для смарт-карт: Руководство по архитектуре и программированию . Серия Java Аддисона-Уэсли. Аддисон-Уэсли. ISBN 978-0-201-70329-0. Проверено 9 апреля 2019 г.
- ^ Учебная библиотека Oracle (30 января 2013 г.), Разработка приложений Java Card, заархивировано из оригинала 13 декабря 2021 г. , получено 18 апреля 2019 г.
- ^ Ахмед Патель; Кенан Каладжич; Лалех Голафшан; Мона Тагави (2011). «Проектирование и реализация системы аутентификации с нулевым разглашением для Java Card». Международный журнал информационной безопасности и конфиденциальности . ИГИ. 5 (3): 1–18. дои : 10.4018/ijisp.2011070101.
- ^ «JCAlgTest — база данных поддерживаемых алгоритмов JavaCard» . Проверено 27 января 2016 г.
- ^ Понсини, Николя (30 января 2023 г.). «Анонс выпуска Java Card 3.2». Блог о Java-картах . Проверено 6 февраля 2023 г.
- ^ Понсини, Николя. «Представление Java Card 3.1: новые криптографические расширения». blogs.oracle.com . Проверено 18 апреля 2019 г.
- ^ Самойлов, Н. (2018). Введение в программирование: научитесь программировать на Java, используя структуры данных, алгоритмы и логику. Пакт Паблишинг. п. 13. ISBN 978-1-78883-416-2. Проверено 9 апреля 2019 г.
Внешние ссылки
- Обзор карты Java (Oracle)
- Defcon 21: Тайная жизнь SIM-карт на YouTube
- JavaCards-OpenSC