Java-карта
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2016 г. ) |
платформы Java Редакции |
---|
|
Java Card — это программная технология, которая позволяет ) на основе Java приложения ( апплеты безопасно запускать на смарт-картах и, в более общем смысле, на аналогичных безопасных с небольшим объемом памяти . устройствах [1] которые называются «элементами безопасности» (SE). Сегодня элемент безопасности не ограничивается форм-факторами смарт-карт и других съемных криптографических жетонов; Также широко используются встроенные SE, припаянные к плате устройства, и новые конструкции защиты, встроенные в микросхемы общего назначения. Java Card устраняет эту аппаратную фрагментацию и особенности, сохраняя при этом переносимость кода, обеспечиваемую Java.
Java Card — самая маленькая из платформ Java, предназначенная для встраиваемых устройств. Java Card дает пользователю возможность программировать устройства и настраивать их для конкретных приложений. Широко используется на различных рынках: беспроводная связь внутри SIM-карт и встроенных SIM-карт, оплата банковскими картами. [2] и мобильные платежи NFC, а также для удостоверений личности, медицинских карт и паспортов. Некоторые продукты IoT, такие как шлюзы, также используют продукты на основе 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 не предоставляются во время выполнения многими реальными смарт-картами (в частности, типа 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 версии 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» . Международный журнал информационной безопасности и конфиденциальности . 5 (3). ИГИ: 1–18. дои : 10.4018/ijisp.2011070101 .
- ^ «JCAlgTest — база данных поддерживаемых алгоритмов JavaCard» . Проверено 27 января 2016 г.
- ^ Понсини, Николя (30 января 2023 г.). «Анонсируем выпуск Java Card 3.2» . Блог Java Card . Проверено 6 февраля 2023 г.
- ^ Понсини, Николя. «Представление Java Card 3.1: новые криптографические расширения» . blogs.oracle.com . Проверено 18 апреля 2019 г.
- ^ Самойлов, Н. (2018). Введение в программирование: научитесь программировать на Java, используя структуры данных, алгоритмы и логику . Пакт Паблишинг. п. 13. ISBN 978-1-78883-416-2 . Проверено 9 апреля 2019 г.