Java Card: технологии создания и перспективы использования
Смарт-карты до появления Java Card
Преимущества Java Card-технологии
Процесс разработки приложений Java Card
Средства разработки GemXpresso (TM)
За последнее десятилетие область применения смарт-карт постоянно расширялась, а их характеристики (объем хранимой информации, тактовая частота процессора, файловая система, набор функций (API) для смарт-карт разработки приложений) совершенствовались. Быстрое развитие новых технологий передачи данных, таких как Internet, сотовая и спутниковая связь, усиливает интерес со стороны компаний, использующих эти технологии, к смарт-картам. Ведь смарт-карты могут предложить новый подход к решению проблем безопасности, надежности и эффективности хранения и обработки данных.
И все же до недавнего времени применение смарт-карт было ограничено и сводилось в основном к следующему:
- к платежным картам, которые используются для проведения дебетовых и кредитовых операций и выступают в роли надежного средства хранения информации о счете клиента, обеспечивая разграничение доступа к данным. Платежные системы, построенные на смарт-картах, способны осуществлять операции списания и начисления денежных средств без оперативной связи с банком — эмитентом карты (в режиме offline). Смарт-карты обеспечивают существенно более высокую защиту данных по сравнению с картами с магнитной полосой. В настоящий момент смарт-карты активно используются в платежных системах французских и некоторых европейских банков;
- электронным кошелькам, применяемым для оплаты реальных или виртуальных транзакций. На смарт-карту записывается определенное значение, которое затем расходуется держателем карты, например в магазине либо при оплате услуг или товаров в сети Internet. При списании всех средств с электронного кошелька он уничтожается либо в него перезаписывается новое значение с помощью цифровой транзакции (подписанной на специальном ключе) банка-эмитента или провайдера финансовых услуг.
Примерами реализации являются проекты VISA Cash (VISA) и CLIP (EuroPay);
- телефонным картам, используемым как средство оплаты телефонных разговоров по всему миру. Телефонная карта стала первым практическим применением смарт-карты. В память карты заносится определенное значение, которое дискретно уменьшается при оплате телефонных разговоров держателя карты. В настоящий момент лидером по использованию телефонных карт является Китай;
- картам для мобильной связи (SIM-картам). SIM-карта является ключевым элементом стандарта GSM. SIM-карта (Subscriber Identification Module) обеспечивает взаимодействие между абонентом, мобильным телефоном и оператором GSM. Память SIM-карты используется для хранения телефонной книги абонентов, SMS-сообщений, секретного номера для активизации телефона (PIN-кода). Функциональные возможности карты могут быть расширены благодаря добавлению в SIM-карту новых приложений, например платежных приложений. Это позволяет превратить мобильный телефон клиента в мобильный терминал, с которого он может управлять своим банковским счетом. Стандарт GSM Phase 2+ поддерживает процедуру загрузки в SIM-карту приложений и другой информации через GSM-сеть. Также существует стандарт SIM ToolKit (STK), который обеспечивает удобный для пользователя мобильного телефона интерфейс с дополнительными приложениями посредством системы сервис-меню, расширяющий услуги мобильного телефона (GSM 11.14). С помощью пакетов разработки приложений для SIM-карт, наиболее популярным из которых является GemXplore CASE от компании Gemplus, становится возможным для операторов GSM-сетей и их партнеров создавать и тестировать свои собственные приложения с дополнительными услугами. Новые возможности кардинально изменяют маркетинговую политику операторов по всему миру. Приложения стандарта SIM ToolKit могут быть ориентированы как на доставку информации по запросу абонента и мобильный банкинг, так и на выполнение уникальных функций;
- идентификационным картам, используемым как средство контроля доступа в офисы, парковки и т.д. При предъявлении смарт-карты может быть запрошен секретный PIN-код. Память смарт-карты также может хранить фотографию владельца карты;
- дисконтным картам, которые позволяют держателям карт увеличивать свои очки при покупке товаров или услуг у эмитента карт, а затем использовать данные очки для получения каких-либо скидок. Терминал, который осуществляет запись очков на карту, также может информировать держателя карты о балансе карты. Многие торговые организации уже осознали, как гибко данный вид карт позволяет им осуществлять их маркетинговую позицию;
- медицинским картам, содержащим конфиденциальную информацию по истории болезни держателя карты. В дополнение к способности надежно хранить информацию микропроцессор карты осуществляет контроль доступа к информации со стороны различных лиц (врачей, медсестер, работников страховой компании и самого пациента).
Основным препятствием на пути более широкого применения смарт-карт является сложный процесс разработки приложений для них. Повсеместное развитие цифровых сетей всех типов дает новые возможности для применения смарт-карт, но сначала должна быть решена проблема упрощения и стандартизации процесса разработки приложений для смарт-карт.
Новая Java Card — тип смарт-карты, способной выполнять приложения, написанные на языке Java, существенно облегчает труд разработчика при написании смарт-карт-приложений. Впервые за всю историю развития смарт-карт разработчики получили возможность использовать для разработки мощный объектно-ориентированный язык Java, реализующий концепцию «Написано однажды, работает везде (TM)», для которого существует множество сред разработки. Бесспорно, что более быстрый и эффективный способ разработки программ для смарт-карт в сочетании с поколением более мощных по своим характеристикам Java Card значительно расширит области применения смарт-карт.
Смарт-карты до появления Java Card
Эпоха смарт-карт начиналась в различных странах мира более десяти лет назад с телефонных карт и электронных кошельков. Со временем возможности смарт-карт расширились за счет улучшения механизма безопасности. Они стали использоваться как дебетовые/кредитовые банковские карты, карты, хранящие конфиденциальную информацию, в качестве средства, контролирующего доступ к кабельному и спутниковому вещанию. Наиболее широкое применение карты нашли в сфере беспроводной (мобильной) связи, например в сотовой связи стандарта GSM или CDMA (SIM-карты). Хотя все физические параметры смарт-карт стандартизованы (ISO 7810) и все ведущие производители придерживаются данных стандартов, принципы внутренней работы смарт-карты (набор команд, тип файловой системы) зависят от производителя смарт-карты, что делает сложным процесс создания переносимых с карты на карту приложений. Большинство средств разработки приложений имели собственный внутренний язык, а API (интерфейсы прикладных программ) смарт-карт были сложными и требовали от разработчиков высокой подготовки и умения работать с низкоуровневыми коммуникационными протоколами и механизмами управления памятью. Также при разработке приложений приходилось постоянно учитывать особенности реализации той или иной смарт-карты. Поэтому при создании приложений смарт-карт подготовка и опыт разработчиков играли исключительно важную роль, и обычно программисты тратили много усилий на изучение особенностей того или иного типа смарт-карт до начала процесса разработки приложений для нее. Более того, не существовало какого-либо универсального средства создания приложений для смарт-карт от различных поставщиков, что замедляло перенос приложения со смарт-карты одного поставщика на смарт-карту другого, иногда делая процесс переноса практически невозможным. Если даже разработчикам удавалось переносить свои приложения на смарт-карты других поставщиков, то большинство смарт-карт, терминалов и приложений не могли взаимодействовать друг с другом. Очень быстро стало обременительно использовать различные типы карт для осуществления разных транзакций.
К 2001 году оборот смарт-карт возрастет от 1 до 3 миллиардов, и ожидается, что половина из них будет продана в Азии и США. Пока в мире количество разработчиков программ для смарт-карт весьма ограничено, что ведет к ограничению числа компаний, занимающихся коммерческой разработкой смарт-карт-приложений и, как следствие, ограничивает количество самих смарт-карт-приложений, доступных на рынке. Но с появлением Java Card ситуация кардинально изменится.
Преимущества Java Card-технологии
Спецификации Java Card были разработаны JavaSoft (дочерней компанией Sun Microsystems). Небольшие приложения, написанные на языке Java (аплеты), могут быть динамически загружены в карту даже после выпуска карты эмитентом. Java Card API определяет подмножество языка Java, учитывая особенности выполнения программ на смарт-картах и других устройствах с ограниченной памятью. Java Card API был разработан в сотрудничестве с ведущими производителями смарт-карт во всем мире. Использование языка Java значительно изменяет концепцию разработки приложении для смарт-карт, делая ее более быстрой и легкой и позволяя приложению, написанному для одной Java Card, работать на других Java-совместимых картах.
Виртуальная машина Java (JVM) — часть среды исполнения Java, выполняющая интерпретацию байт-кода Java, работает с функциями самой смарт-карты (управление файловой системой, системой памяти и т.д.) и скрывает от программиста все аппаратные особенности реализации той или иной смарт-карты, обеспечивая программисту стандартный набор функций для разработки приложений для любой Java Card.
Использование языка Java сокращает время кодирования на 60% по сравнению с традиционными языками программирования, например С. А если сравнивать с языком ассемблера смарт-карты, который зависит от типа смарт-карты и обычно используется для создания приложений, то эффективность разработки приложения будет еще значительно выше. Java Card также позволяет программистам использовать объектно-ориентированный подход, причем допустимо повторное использование компонентов при создании приложений. Объектно-ориентированное API смарт-карты также упрощает взаимодействие приложения на смарт-карте и программы, исполняемой на терминале или PC.
Еще одной причиной повышения производительности процесса разработки для Jаva Card является наличие на рынке мощных средств разработки для Java. Программист может выбрать между средами Java разработки от Borland, IBM, Microsoft, Sun и Symantec.
Популярность языка Java вызвала значительный рост числа программистов, хорошо владеющих этим языком. Любой программист, использующий язык Java, может стать Java Card-программистом. Компании, создающие Java Card-приложения, сейчас могут формировать штат из все большего числа разработчиков, использующих Java-язык, что удешевит процесс самой разработки смарт-карт-приложений.
Java Card обеспечивает безопасную среду, которая отслеживает целостность данных и предотвращает доступ приложения к данным и коду другого приложения. Хотя класс управления безопасностью (Security Manager Class) не поддерживается, Java Card-механизмы безопасности реализуются с помощью самой виртуальной машины Java. Уровень доступа ко всем методам и переменным строго контролируется, и здесь не существует указателей, с помощью которых программист может получить неограниченный доступ к памяти карты.
Одним из основных преимуществ Java Card является возможность размещать на данной карте два и более приложений, которые могут быть разработаны различными фирмами. Приложения будут размещаться на карте и не смогут никоим образом влиять на работу друг друга, если разработчики не предусмотрели такой возможности. Это замечательное преимущество позволяет использовать Java Card в качестве многоцелевой карты, например Java Card одновременно может быть: платежной картой, телефонной картой и картой доступа на какие-либо объекты.
Благодаря возможности динамически загружать приложения в Java Card, после выпуска карты изменения в логике работы приложения не повлекут за собой отзыва старых карт и выпуска новых (как это было раньше); сегодня держатель карт получает возможность обновлять приложения на карте через терминал или PC, оснащенный устройством чтения смарт-карт. Механизм обновления приложений на Java Card реализует проверку приложения на карте перед загрузкой, которая гарантирует, что загружаемое приложение было действительно разработано либо сертифицировано эмитентом карты или доверенной организацией и целостность данных не нарушена. Это реализуется за счет подписи каждого аплета ключом эмитента (используется алгоритм несимметричных ключей, например RSA).
Возможность динамического обновления программ значительно увеличит жизненный цикл карт и сделает работу с ней более удобной как для держателя, так и для эмитента карты.
Структура Java Card
Java Card состоит из шести компонентов:
1. Аппаратная часть – физический компонент карты, который обеспечивает ее физическое функционирование (ROM, RAM, EEPROM, микропроцессор и т.д.). В настоящие время в Java Card могут использоваться микропроцессоры с 8-, 16- и 32-битной архитектурой.
2. Функции смарт-карты, отвечающие за выполнение следующих операций:
- работа с памятью смарт-карты:
- доступ к RAM, ROM или EEPROM;
- восстановление первоначального состояния смарт-карты (когда карта неожиданно вынимается из устройства чтения смарт-карт, данная функция восстанавливает первоначальное состояние смарт-карты до момента начала работы с устройством);
- механизм сбора «мусора» (автоматическое обнаружение и освобождение неиспользуемой памяти реализуется дополнительно);
- проверка целостности различных объектов, составляющих приложение. Если какой-либо объект окажется поврежденным, смарт-карта может быть переведена в нерабочее состояние или останется частично работоспособной в зависимости от важности данного объекта;
- функции ввода-вывода и транспортный уровень. Обеспечивает связь между смарт-картой и устройством чтения смарт-карт (T=0 протокол);
- поддержка криптографических алгоритмов (COMP 128 для использования в GSM-сетях, 3DES, шифрование на несимметричных ключах и т.д.);
- функции, обеспечивающие защиту от физических и программных попыток незаконного доступа к информации на смарт-карте.
3. Виртуальная машина Java (Java Card Virtual Machine — JVM), являющаяся интерпретатором Java-байт-кода. В отличие от обычных микропроцессорных смарт-карт, где код приложения хранится в памяти смарт-карты в откомпилированном виде и напрямую выполняется ее микропроцессором, приложения в Java Card хранятся в формате байт-кода. Виртуальная машина Java интерпретирует и выполняет приложения в Java Card.
Виртуальная машина также обеспечивает:
- управление безопасностью, применяя:
- механизм разграничения и контроля обмена данными между приложениями на Java Card;
- анализ синтаксиса, который проверяет на правильность байт-код, неправильные коды байтов;
- управление объектами:
- выделение памяти при создании объекта и высвобождение памяти при удалении объекта;
- доступ и ссылки на объекты (проверка на право использования того или иного объекта приложением);
- независимость выполнения программ от аппаратных средств Jаva Card.
Реализация самой виртуальной машины зависит от типа и производителя карты.
4. Интерфейс прикладных программ Java Card (Java Card API).
Java Card API обеспечивает сервисы для разработчиков при написании Java Card-приложений. Java Card API состоит из набора стандартных, заранее определенных объектов и методов, которые легко использовать при написании приложений.
Следует отметить, что доступ приложения к определенным объектам и методам карты может быть ограничен, что повышает уровень безопасности при выполнении Java Card-приложения.
5. Исполняемая среда Java Card (Java Card runtime environment — JCRE).
Исполняемая среда Java Card поддерживает и управляет всеми данными и глобальными сервисами на карте.
Основные функции исполняемой среды следующие:
- обработка данных (PIN, информация о владельце карты);
- поддержка жизненного цикла карты и приложения (этапами жизненного цикла приложения является: инициализация, персонализация, блокировка);
- управление и контроль над административными задачами при работе с приложениями: инсталляция, регистрация, выбор приложения и т.д.;
- передача поступившей внешней инструкции соответствующему приложению в карте;
- осуществление всех необходимых функций для реализации безопасного механизма загрузки новых приложений в Java Card.
6. Приложения Java Card (аплеты), написанные на языке Java, физически хранятся в памяти карты в байт-коде, который компилируется из исходных файлов Java Card. Приложения могут быть написаны как для SIM-карты, поддерживающей концепцию Java Card, так и для обычной Java Card.
Процесс разработки приложений Java Card
Приведенная далее диаграмма описывает цикл разработки приложения для Java Card.
Сначала программист начинает разработку Java Card-аплета, используя стандартное средство разработки (Sun JDK, Microsoft Visual J, Symantec Cafe) и объектов Java Card API. Затем исходный файл (назовем его appl.java) компилируется в файл с расширением appl.class. На этапе компиляции также может быть использовано средство для проверки соблюдения программистом всех ограничений, налагаемых Java Card API.
Для продолжения процесса разработки программист должен использовать средство разработки для Java Card. Файл appl.class обрабатывается конвертором и внешним компоновщиком. Конвертор кода необходим для преобразования файла appl.class в байт-код, который мог бы интерпретироваться виртуальной машиной JVM. Внешний компоновщик преобразует файл appl.class в файл appl.cap, обеспечивая в последнем корректное преобразование адресов для Java Card. Необходимо отметить, что наличие внешнего компоновщика является спецификой разработки для Java Card. В «классическом» процессе Java разработки для PC компоновщик не делится на внутренний и внешний и является частью виртуальной машины Java. Выделение внешнего компоновщика необходимо для более экономного использования ограниченных, по сравнению с PC, ресурсов памяти Java Card.
Наконец, файл appl.cap помещается в память карты с помощью Java Card-загрузчика, и внутренний компоновщик связывает данный файл с программным обеспечением, расположенным на карте.