Содержание
Содержание
Об этой книге
Часть 1. Введение
1.
Начнем с начала
1.1.
Смарт-карты
1.1.1.
Краткая история
1.1.2.
Преимущества смарт-карт
1.1.3.
Области применения
1.2.
Проблемы разработки приложений для смарт-карт
1.3.
Использование технологии Java для смарт-карт
1.3.1.
Преимущества технологии Java Card
1.3.2.
Краткая история технологии Java Card
2.
Введение в мир смарт-карт
2.1.
Обзор технологии смарт-карт
2.2.
Основные типы смарт-карт
2.2.1
Сравнение карт памяти и интеллектуальных карт
2.2.2
Сравнение контактных и бесконтактных карт
2.3.
Аппаратные средства смарт-карт
2.3.1
Контакты смарт-карты
2.3.2
Центральный процессор смарт-карты
2.3.3
Сопроцессоры смарт-карт
2.3.4
Система памяти смарт-карт
2.4.
Система связи смарт-карт
2.4.1
Устройства считывания карт и хост-приложения
2.4.2
Модель взаимодействия со смарт-картами
2.4.3
Протокол APDU
2.4.4
Протокол TPDU
2.4.5
Сообщение ATR
2.5.
Операционные системы смарт-карт
2.5.1
Файловые системы смарт-карт
2.5.2
Корневой каталог (Master File)
2.5.3
Каталог (Dedicated File)
2.5.4
Файл данных (Elementary File)
2.6.
Программное обеспечение смарт-карт
2.7.
Стандарты и спецификации смарт-карт
2.7.1
Стандарты ISO 7816
2.7.2
Стандарты GSM
2.7.3
Спецификация EMV
2.7.4
Спецификации Open Platform
2.7.5
Интегрированная среда OpenCard Framework
2.7.6
Спецификации PC/SC
Часть 2: Технология Java Card
3.
Обзор технологии Java Card
3.1.
Обзор архитектуры
3.2.
Подмножество языка Java Card
3.3.
Виртуальная машина Java Card
3.3.1
Файлы CAP и экспортные файлы
3.3.2
Конвертор Java Card
3.3.3
Интерпретатор Java Card
3.4.
Инсталлятор Java Card и внешняя инсталляционная программа
3.5.
Среда исполнения Java Card
3.5.1
Время существования JCRE
3.5.2
Как работает JCRE во время сеанса связи с устройством считывания?
3.5.3
Дополнительные возможности среды исполнения Java Card
3.6.
API, поддерживаемые платформой Java Card
3.6.1
Пакет Java.lang
3.6.2
Пакет javacard.framework
3.6.3
Пакет javacard.security
3.6.4
Пакет javacard.crypto
3.7.
Аплеты Java Card
3.8.
Соглашение о присваивании имен пакетам и аплетам
3.9.
Процесс разработки аплета
3.10.
Инсталляция аплета
3.10.1
Аплеты ROM
3.10.2
Предопределенные и загружаемые аплеты
3.10.3
Инсталляция загружаемых аплетов
3.10.4
Обработка ошибок в процессе инсталляции аплета
3.10.5
Ограничения инсталляции
4.
Объекты Java Card
4.1.
Модель памяти Java Card
4.2.
Постоянные объекты
4.3.
Временные объекты
4.3.1
Свойства временных объектов
4.3.2
Типы временных объектов
4.3.3
Создание временных объектов
4.3.4
Запросы к временным объектам
4.4.
Кратко о создании и удалении объектов
5.
Атомарность и транзакции
5.1.
Атомарность
5.2.
Атомарное обновление блока данных в массиве
5.3.
Транзакции
5.3.1
Фиксация транзакции
5.3.2
Прерывание транзакции
5.3.3
Вложенные транзакции
5.3.4
Размер буфера транзакций
5.3.5
TransactionException
5.3.6
Изменение значений локальных переменных и временных объектов в процессе выполнения транзакции
6.
Исключения Java Card и их обработка
6.1.
Исключения в пакете java.lang
6.2.
Исключения Java Card
6.2.1
Код причины исключений Java Card
6.2.2
Возбуждение исключений в Java Card
6.2.3
ISOException
6.2.4
UserException
7.
Аплеты Java Card
7.1.
Обзор аплетов
7.1.1
Инсталляция и выполнение аплетов
7.1.2
Взаимодействие хост-системы и аплетов
7.2.
Класс javacard.framework.Applet
7.3.
Метод install
7.3.1
Создание объектов в конструкторе аплета
7.3.2
Регистрация экземпляра аплета в JCRE
7.3.3
Обработка параметров инсталляции
7.3.4
Дополнительная инициализация аплетов
7.4.
Метод select
7.4.1
Формат и обработка команды SELECT APDU
7.4.2
Аплет по умолчанию
7.5.
Метод deselect
7.6.
Метод process
7.7.
Другие методы класса javacard.framework.Applet
8.
Работа с пакетами данных APDU
8.1.
Класс APDU
8.1.1
Объект APDU
8.1.2
Размер буфера APDU
8.2.
Интерфейс ISO7816
8.3.
Работа с пакетами APDU в аплетах
8.3.1
Получение ссылки на буфер APDU
8.3.2
Проверка заголовка команды APDU
8.3.3
Извлечение данных из команды APDU
8.3.3.1
Получение больших блоков данных
8.3.4
Обработка команды APDU и генерация ответных данных
8.3.5
Отправка ответных данных APDU
8.3.5.1
Отправка данных из других местоположений
8.3.5.2
Отправка больших ответных блоков данных
8.3.6
Возвращение слова состояния
8.4.
Способы обработки команд APDU, зависящие от протокола
8.4.1
Метод getProtocol
8.4.2
Метод getlnBlockSize
8.4.3
Метод getOutBlockSize
8.4.4
Метод setOutgoingNoChaining
8.4.5
Метод getNAD
8.4.6
Метод waitExtension
8.5.
Выводы
9.
Брандмауэр аплетов и совместное использование объектов
9.1.
Брандмауэр аплетов
9.1.1
Контексты
9.1.2
Владение объектами
9.1.3
Доступ к объектам
9.1.4
Контексты и доступ к временным массивам
9.1.5
Статические поля и методы
9.2.
Использование объектов разными контекстами
9.2.1
Переключение контекстов
9.2.2
Привилегии JCRE
9.2.3
Объекты-точки входа в JCRE
9.2.4
Глобальные массивы
9.2.5
Интерфейсный механизм совместного использования объектов
9.2.5.1
Интерфейс совместного использования
9.2.5.2
Объект интерфейса совместного использования
9.2.5.3
Принципы действия интерфейсного механизма совместного использования объектов
9.2.5.4
Пример совместного использования объекта разными аплетами
9.2.5.5
Создание объекта интерфейса совместного использования
9.2.5.6
Запрос объекта интерфейса совместного использования
9.2.5.7
Использование объекта интерфейса совместного использования
9.2.5.8
Переключения контекстов в процессе совместного использования объектов
9.2.5.9
Типы параметров и результатов методов интерфейса совместного использования
9.2.5.10
Аутентификация клиентского аплета
9.2.5.11
Метод getPreviousContextAID
9.2.5.12
Выводы
10.
Программирование криптографических функций
10.1.
Введение в криптографию
10.1.1
Шифрование и расшифровка
10.1.2
Дайджест сообщений
10.1.3
Цифровая подпись
10.1.4
Случайные данные
10.2.
Использование криптографии в приложениях для смарт-карт
10.2.1
Обеспечение безопасности приложений
10.2.2
Использование смарт-карт в качестве защищенного средства идентификации
10.2.3
Выводы
10.3.
Криптографические API, поддерживаемые платформой Java Card
10.3.1
Принципы разработки
10.3.2
Архитектура
10.3.3
Структура пакетов
10.4.
Примеры программ
10.4.1
Вычисление дайджеста сообщения
10.4.2
Создание криптографического ключа
10.4.3
Создание и проверка цифровой подписи
10.4.4
Шифрование и расшифровка данных
10.4.5
Генерация случайных данных
11.
Безопасность платформы Java Card
11.1.
Средства безопасности платформы Java Card
11.1.1
Средства безопасности языка Java
11.1.2
Дополнительные средства обеспечения безопасности платформы Java Card
11.2.
Механизмы безопасности платформы Java Card
11.2.1
Проверка в процессе компиляции
11.2.2
Проверка файлов классов и проверка соответствия подмножеству языка
11.2.3
Проверка файлов CAP и экспортных файлов
11.2.4
Проверка при инсталляции
11.2.5
Криптографическая защита цепочки создания аплетов
11.2.6
Обеспечение безопасности во время выполнения
11.2.7
Криптографическая поддержка платформы Java Card
11.3.
Защита аплетов
Часть 3: Руководство для программиста и приемы программирования
12.
Пошаговое руководство по разработке аплета
12.1.
Проектирование аплета
12.1.1
Определение функций аплета
12.1.2
Определение AID для аплета
12.1.3
Определение структуры классов и функций методов аплета
12.1.4
Определение интерфейса между аплетом и его хост-приложением
12.1.4.1
SELECT APDU
12.1.4.2
VERIFY APDU
12.1.4.3
CREDIT APDU
12.1.4.4
DEBIT APDU
12.1.4.5
GET BALANCE APDU
12.2.
Разработка кода аплета
12.2.3
Пример кода аплета «электронный бумажник»
12.2.4
Реализация контроля за ошибками в аплетах
12.3.
Что дальше?
13.
Оптимизация аплетов
13.1.
Общая оптимизация проекта аплета
13.2.
Быстродействие аплета
13.3.
Вызов методов
13.4.
Создание объектов в аплетах
13.5.
Повторное использование объектов
13.6.
Устранение избыточного кода
13.7.
Доступ к массивам
13.8.
Сравнение операторов switch и if-else
13.9.
Арифметические операторы
13.10.
Оптимизация переменных в аплетах
14.
Работа с типом данных int
14.1.
32-разрядные арифметические операции
14.2.
Размеры и индексы массивов
14.3.
Хранение и вычисление данных типа int
14.4.
Выводы
Часть 4: Приложения
A. Подмножество языка Java Card
B. Интерфейс прикладного программирования Java Card 2.1
Глоссарий
Библиография
Предметный указатель
Об этой книге
Для кого предназначена эта книга
Технология Java Card™ – это сочетание подмножества языка программирования Java и среды времени исполнения, оптимизированных для использования в смарт-картах и других вычислительных устройствах с ограниченным объемом памяти. Эта книга рассчитана на широкий круг технических специалистов, которые интересуются различными аспектами технологии Java Card.
Но в первую очередь она будет полезна для разработчиков аплетов Java Card. В книге читатель найдет учебное пособие по смарт-картам, подробное обсуждение различных функциональных возможностей платформы Java Card, полезные советы для разработчиков аплетов, а также справочник по программным интерфейсам Java Card.
Во-вторых, эта книга будет полезна разработчикам платформы Java Card как дополнительное справочное пособие. В ней обсуждаются многие темы, связанные со спецификациями Java Card, и приведены поясняющие их примеры кода.
В третьих, эта книга будет полезна техническим руководителям, а также всем, кто хочет получить общее представление о технологии Java Card. В частности, первые три главы – это введение в технологию Java Card, которое поможет лучше ориентироваться в ней как инженерам, так и специалистам по маркетингу.
На протяжении всей книги я предполагаю, что читатели достаточно хорошо знакомы с языком программирования Java. Тем, которые хочет углубить свои знания в этой области, можно порекомендовать книгу Кена Арнольда и Джеймса Гослинга «Язык программирования JAVA».
Структура книги
Эта книга написана в восходящем стиле. Каждая глава содержит информацию, необходимую для понимания следующей. Поэтому рекомендуется читать книгу в порядке следования глав.
Часть 1: Введение
• Глава 1 содержит краткий обзор смарт-карт и технологии Java Card – историю, преимущества и области применения.
• В главе 2 обсуждаются основы технологии смарт-карт, которые помогут читателю понять основную идею этой книги.
Часть 2: Технология Java Card
• В главе 3 приведен обзор технологии Java Card – архитектура системы и ее компоненты.
• Глава 4 посвящена свойствам и поведению постоянных и временных объектов платформы Java Card, а также вопросам их создания и использования.
• В главе 5 обсуждается реализация атомарности для платформы Java Card, а также рассказывается об использовании транзакций в аплетах для обеспечения целостности данных.
• Глава 6 посвящена исключениям платформы Java Card. Обсуждаются способы возбуждения и обработки исключений в аплетах.
• В главе 7 объясняется, как выполняются аплеты в среде JCRE. Также приведена методика разработки аплетов.
• Глава 8 посвящена работе с пакетами данных APDU в аплетах.
• В главе 9 рассматривается защитная система аплетов и ее влияние на поведение объектов, исключений и аплетов. Обсуждаются механизмы совместного использования объектов, которые обеспечивают защиту общих данных.
• Глава 10 содержит введение в криптографию. В ней рассматриваются многие важные концепции и алгоритмы шифрования информации. Также приведен краткий обзор криптографических API, поддерживаемых платформой Java Card, и примеры кода, которые иллюстрируют использование этих API.
• В главе 11 описаны функции безопасности платформы Java Card и различные механизмы для их реализации. В этой главе заканчивается обсуждение тем, которым посвящена часть 2.
Часть 3: Руководство для программиста и приемы программирования
• Глава 12 содержит пошаговое руководство по разработке несложного аплета, в котором реализованы основные функции «электронного кошелька».
• В главе 13 приведен ряд рекомендаций по оптимизации аплетов. Многие из них дадут читателю представление о различных компромиссах, неизбежных на стадии разработки.
• В главе 14 обсуждаются проблемы, связанные с использованием типа данных int при разработке аплетов Java Card.
Часть 4: Приложения
• В приложении A содержится описание подмножества языка Java, которое поддерживается платформой Java Card.
• Приложение B – подробный справочник по программным интерфейсам Java Card 2.1.
Версии платформы Java Card, которые рассматриваются в этой книге
Эта книга основана на платформе Java Card версии 2.1. На момент написания книги это была самая последняя доступная версия. В то время следующая версия, 2.1.1, находилась в стадии разработки. Версия 2.1.1 содержит небольшие расширения и обновления по сравнению с версией 2.1. Темы и технологии, которым посвящена эта книга, не потеряют своего значения и после выхода будущих версий платформы Java Card. Новые возможности найдут отражение в следующих изданиях книги.
Источники дополнительной информации в Интернете
Новейшую информацию о технологии и средствах разработки Java Card можно найти на Web-узле Java Card: http://java.sun.com/products/javacard. Дополнительную информацию об этой книге можно найти на Web-узле http://java.sun.com/books/series/javacard.
Благодарности
Процесс написания книги не ограничивается простым переносом слов на бумагу, и эта книга не стала исключением. Она смогла появиться только благодаря помощи и поддержке многих людей.
Реализация этого проекта была бы невозможна без руководящей поддержки Энди Стрейча, Алана Бреннера и Пэтрис Пейрет. Мой руководитель, Энди Стрейч, выделил мне время, необходимое для работы над книгой, и не раз спасал меня, когда я испытывала затруднения. Хочу также поблагодарить Дебру Дули, которая уговорила меня ввязаться в этот проект и постоянно помогала мне в процессе работы.
Лайза Френдли и Тим Лингхольм, редакторы книжной серии Java Series, давали мне бесчисленные ценные советы, которые в конечном итоге помогли написать и издать эту книгу. Отдельно хочу отметить неоценимую помощь команды издательства Addison-Wesley. Я признательна Майку Хендриксону и Джулии Ди-Никола, которые направляли меня и помогали, когда я испытывала затруднения. Диан Фрид обеспечила весь производственный процесс, от редактирования до выпуска тиража. Редактором книги был Пенни Халл, а корректором – Эвелин Пайл. Ким Эрни и Джим Холидэй выполнили набор текста и верстку.
Внимательный глаз и полезные советы множества рецензентов позволили существенно улучшить качество этой книги. Техническое руководство проектом осуществлял Ли Гонг, автор книги «Inside Java 2 Platform Security». Он помог существенно улучшить структуру и содержание книги. Кирк Чен, Питер Хартел и Рави Тэнджоур снабдили книгу подробными комментариями. Конструктивные дискуссии с ними очень помогли мне. Бертран Дю Кастел, Эрик Ветиллард и Себастиан Ганс подробно анализировали эту книгу и щедро делились своими неисчерпаемыми знаниями в области реализации технологии Java Card. Митч Батлер, Джером Дэнвилл, Майк Эйслер, Эдвард де Джонг, Дэнни Луи, Эрик Неллен, Энди Стрейч, Джессика Вей, Жианг Ву и Дженнифер Йонемицу давали ценные замечания, которые мне очень помогли.
Большую помощь в организации работы над проектом оказали Питер Каттанео, Карен Ксьянг, Альберт Льянг, Моше Леви и Дженнифер Йонемицу. Мне также очень помогли их полезные советы.
В завершение хочу сказать, что я получила счастливую возможность в течение нескольких лет работать с талантливыми и увлеченными людьми из команды Java Card. Всем им посвящается эта книга.
Жикун Чен
Апрель 2000 года
Часть 1
Введение
Глава 1. Начнем с начала
Бурный рост Интернета и развитие беспроводной цифровой связи вызвали быстрое изменение способов общения людей. С прогрессом средств общения в мире модели ведения бизнеса также эволюционировали. Если раньше нужно было идти в магазин и лично встречаться с продавцом, то теперь достаточно иметь подключение к Интернету. Не нужно покидать свой дом или офис. Чтобы приобрести товары или услуги, достаточно нескольких щелчков мышью. Быстрый рост популярности электронного бизнеса ведет не только к появлению новых способов торговли. Перед компаниями открываются огромные возможности для привлечения и удержания клиентов, а также для оказания дополнительных услуг.
Успех любой компании на рынке электронной коммерции определяется, во-первых, уровнем доверия, который она завоевала за годы ведения бизнеса традиционными методами, а во-вторых, наличием технологий, позволяющих упростить заключение сделок в электронной форме. Защищенность и мобильность смарт-карт позволяет им стать безопасным, надежным, удобным и эффективным носителем, способным не только обеспечить потребности электронного бизнеса, но и открыть широкий спектр новых областей применения.
1.1. Смарт-карты
Смарт-карта (Рис. 1.1) имеет такой же размер, как обычная кредитная карточка. Но в ее пластиковую основу вмонтирована кремниевая электронная микросхема, предназначенная для хранения и обработки информации. Фактически, смарт-карта – это миниатюрный и защищенный от несанкционированного вмешательства компьютер. В отличие от карт с магнитной полосой, смарт-карты способны не только хранить информацию, но и обрабатывать ее. Поэтому для проведения транзакции не требуется доступ к удаленным базам данных.
Рис. 1.1 Смарт-карта
\Рисунки Глава 1\1.1.jpg
plastic substrate - пластиковая основа
smart card chip - электронная микросхема смарт-карты
1.1.1. Краткая история
Идея встраивания интегральной микросхемы в пластиковую карту впервые пришла в голову двум немецким изобретателям – Юргену Детлоффу и Гельмуту Кроутруппу. Это произошло в 1968 году. Позже они запатентовали свое изобретение в Германии. В 1970 году, независимо от них, Кунитака Аримура из японского технологического института Arimura также зарегистрировал патент на изобретение смарт-карты. Однако реальный прогресс в этой области наметился лишь после того, как Роланд Морено с 1974 по 1979 год зарегистрировал 47 патентов, имеющих отношение к технологии смарт-карт, в 11 странах[1]. В конце 70-х годов 20 века компания CII-Honeywell-Bull (в настоящее время Groupe Bull) впервые наладила серийный выпуск продукции по технологии смарт-карт и представила карты на базе микропроцессоров.
Первые испытания смарт-карт были проведены во Франции и в Германии в начале 80-х годов. Они использовались в качестве телефонных карт с предоплатой и защищенных кредитных/дебетовых банковских карт. Успех этих экспериментов показал, что смарт-карты имеют высокий уровень гибкости и хорошо защищены от подделок.
В последнее время, благодаря развитию технологий производства микросхем и появлению современных средств криптографии, смарт-карты стали гораздо более универсальными и надежными. Теперь они используются для хранения электронной наличности, какзамена бумажных банкнот, для надежного хранения персональной медицинской документации, для защиты кабельных и спутниковых вещательных сетей от несанкционированного доступа, а также для повышения безопасности мобильной связи.
Первоначально смарт-карты получили распространение в Европе и в Азии, где они широко использовались для обслуживания сотовой связи и проведения банковских операций. Но в конце 90-х годов, в связи с развитием электронного бизнеса в США, стал расти спрос на технологии информационной безопасности. Поэтому смарт-карты завоевали и американский рынок.
1.1.2. Преимущества смарт-карт
Популярность смарт-карт стала расти благодаря выгодам, которые они предоставляют. Одно из преимуществ смарт-карт, несомненно, встроенные вычислительные возможности. Среди других важнейших свойств можно назвать защищенность, мобильность и простоту использования.
Процессор, память и интерфейс ввода/вывода реализованы в одной интегральной микросхеме, встроенной в пластиковую основу карты. Смарт-карта защищена от злонамеренных атак, потому что она не зависит от потенциально уязвимых внешних ресурсов. Для извлечения информации из смарт-карты необходим физический доступ к ней, дополнительное оборудование, а также глубокое знание аппаратного и программного обеспечения смарт-карт. Использование криптографических алгоритмов позволяет существенно повысить уровень защиты смарт-карт. Данные, которые хранятся в физической памяти смарт-карты, можно зашифровать. Информация для обмена между смарт-картой и внешним миром также может быть зашифрована и дополнена электронной подписью. Кроме того, для получения доступа к смарт-карте ее владелец обычно должен ввести PIN-код (личный идентификационный номер), который позволяет предотвратить использование карты лицами, не обладающими полномочиями. В целом смарт-карта защищена гораздо лучше, чем традиционный настольный компьютер.
Еще одно преимущество смарт-карт – присущая им мобильность. Вы можете хранить смарт-карту в бумажнике точно так же, как обычные кредитные карточки. Благодаря таким качествам данные, которые хранятся в смарт-карте, доступны в любой момент, когда в них появляется потребность, и владелец карты получает полную свободу передвижений.
Смарт-карты также весьма удобны в использовании. Чтобы начать сделку, достаточно вставить карту в устройство считывания. После завершения операции необходимо извлечь карту из устройства.
1.1.3. Области применения
Смарт-карты часто используются для защищенного хранения данных, аутентификации и обеспечения безопасности сделок. В этом разделе мы приведем примеры областей применения смарт-карт.
В отрасли телекоммуникаций телефонные карты с предоплатой обеспечивают удобный механизм доступа к телефонам-автоматам. Они хорошо защищены от мошенничества, не требуют специального обслуживания и избавляют от необходимости иметь при себе наличные деньги. В настоящее время одним из крупнейших сегментов рынка смарт-карт стала мобильная связь. В этой отрасли смарт-карты используются для обеспечения безопасности. В качестве наиболее значимого примера можно привести стандарт цифровой сотовой связи GSM (глобальная система мобильной связи). Беспроводные телефоны стандарта GSM оснащены SIM-картой, которая выполняет функции модуля идентификации абонента. Размер этой смарт-карты гораздо меньше стандартного – ведь она подключается к разъему, расположенному внутри телефона. SIM-карта предназначена для идентификации пользователя. Кроме того, на ней хранятся ключи шифрования, обеспечивающие конфиденциальность голосовой связи. Перехват мобильных телефонных номеров и перепрограммирование телефонов для их незаконного использования становится очень трудной задачей. Ключ шифрования, который генерирует SIM-карта, является временным и меняется после каждого соединения. Поэтому, даже если злоумышленнику удастся расшифровать параметры сеанса связи в стандарте GSM, для следующего соединения они будут недействительны. Благодаря тому, что данные идентификации абонента хранятся в SIM-карте, для связи можно использовать любой совместимый с ней сотовый телефон стандарта GSM. Абонент получает SIM-карту у оператора сотовой связи и вставляет ее в телефон, который можно приобрести или взять в аренду у других поставщиков.
Сотовая связь получила очень широкое распространение, и мобильные телефоны теперь – не просто средство общения. Чтобы сохранить конкурентоспособность, сотовые операторы предлагают дополнительные сервисы, например, мобильный банкинг, мобильную торговлю, доступ в Интернет и т.п. Все эти услуги основаны на использовании смарт-карт, которые обеспечивают идентификацию абонента и безопасность передачи данных.
В торговле и банковском деле смарт-карты используются в качестве защищенных кредитных/дебетовых банковских карт. Они выполняют функции, аналогичные функциям карт с магнитной полосой. Но благодаря встроенным вычислительным возможностям смарт-карты позволяют выполнять автономные операции и верификацию. В отличие от карт с магнитной полосой, данные со смарт-карты нельзя так же просто скопировать для использования в корыстных целях. Кредитные карты, использующие технологию смарт-карт, позволяют предотвратить случаи мошенничества, из-за которых банки во всем мире теряют ежегодно миллиарды долларов.
В последнее время появились новые тенденции применения смарт-карт в торговле и банковском деле – электронные деньги (или электронный кошелек). На карте хранится доступная сумма электронных денег. Баланс может уменьшаться или пополняться. Система электронных платежей на базе смарт-карт позволяет сократить расходы на обслуживание наличного денежного оборота. В частности, смарт-карты обеспечивают идеальный механизм для выполнения интерактивных микроплатежей, т.к. использование обычных кредитных карт для платежей на небольшие суммы сопряжено с существенными накладными расходами.
В розничной торговле смарт-карты можно использовать для организации коллективной системы скидок постоянным покупателям в розничной сети компаний-партнеров. Все эти меры способствуют росту продаж и степени удовлетворенности покупателей. Если клиент делает покупки в магазинах, входящих в партнерскую сеть, информация об этом накапливается на карте. В дальнейшем владелец карты может получить право на скидки, «авиамили» или другие подарки. Данные о покупках записываются на карте, поэтому продавцы также получают возможность анализировать предпочтения клиентов и их покупательское поведение.
На городском транспорте смарт-карты могут заменить жетоны и билеты. Автомобилисты могут использовать смарт-карты для оплаты парковки и дорожных сборов. В этом случае их действие будет подобно телефонным картам с предоплатой. Решения на базе смарт-карт сулят существенные выгоды: они позволяют накапливать информацию о скидках, совершать множество небольших операций, а также позволяют удобно и быстро оплатить товары и услуги.
В области здравоохранения смарт-карты позволяют упростить учет информации. На карте могут хранится данные о медицинском страховании и записи истории болезни пациента. На карте также может храниться информация о скидках, доступных пациенту, и данные для рассмотрения претензий. Персональные медицинские показатели пациента тоже можно хранить в карте. Это обеспечит актуальность и полноту информации. Кроме того, она будет всегда доступна для специалистов, сотрудников клиник и аптек.
При подключении к Интернету смарт-карты обеспечивают надежную аутентификацию пользователя и контроль доступа, поэтому их использование в этой области представляется весьма перспективным. Смарт-карты все чаще применяются в системах шифрования с открытым ключом. В смарт-карте хранится секретный ключ ее владельца и его цифровой сертификат (цифровая подпись). Эти два компонента позволяют идентифицировать владельца карты в цифровом мире. Метод шифрования с открытым ключом предусматривает наличие пары ключей: секретного, или частного, и открытого. Секретный ключ известен только его владельцу, а открытый ключ – всем, с кем он обменивается информацией. Каждая пара обладает следующими свойствами: что-либо зашифрованное одним из них может быть расшифровано с помощью другого; имея один ключ из пары, называемый открытым, невозможно получить другой, секретный. Пара «секретный ключ – открытый ключ» обеспечивает генерацию и проверку цифровой подписи. Цифровой сертификат выдается центром сертификации. Он гарантирует подлинность открытого ключа. Смарт-карты широко используются для аутентификации в таких областях, как контроль доступа к Web-сайтам, цифровая подпись электронных писем и обеспечение безопасности сделок в режиме онлайн. Можно представить и множество других вариантов использования смарт-карт в Интернете.
В закрытых сообществах, например, в компаниях или университетах, тоже можно найти множество моделей использования универсальных смарт-карт. Перечислим лишь некоторые из них: организация физического доступа в офисы и вычислительные центры, проверка прав доступа к компьютерным сетям, корпоративным Web-сайтам и серверам, хранение и обработка административных данных, выполнение различных финансовых операций (оплата обедов, приобретение товаров в торговых автоматах, получение наличных и пополнение счета в банкоматах и т.п.).
Технология смарт-карт уже получила широкое признание, и они становятся непременным атрибутом каждого человека.
1.2. Проблемы разработки приложений для смарт-карт
Разработка приложений для смарт-карт всегда была длительным и трудоемким процессом. Карты имеют одинаковый размер и внешний вид, в них используется стандартизованный протокол связи. Несмотря на это, смарт-карты разных производителей имеют разную внутреннюю «начинку». Большинство средств разработки выпускают производители смарт-карт. Обычно они включают общий инструментарий для программирования на языке ассемблера и специализированные эмуляторы аппаратуры, которые можно приобрести у поставщиков микросхем. Сторонние организации практически лишены возможности самостоятельно разрабатывать приложения и продавать их потребителям. Поэтому разработкой программ для смарт-карт обычно занимается только узкий круг высококвалифицированных специалистов, которые обладают глубокими знаниями в области аппаратного и программного обеспечения, используемого в картах определенных типов.
Из-за отсутствия доступных стандартизованных программных интерфейсов высокого уровня для смарт-карт разработчикам приложений приходилось использовать протоколы связи низкого уровня, самостоятельно реализовывать диспетчеризацию памяти, а также вникать в другие подробности конкретных аппаратных реализаций. Большинство используемых сегодня приложений для смарт-карт были разработаны «с нуля» по индивидуальным заказам. Это очень длительный и трудоемкий процесс. Обычно цикл разработки продукции до выхода на рынок занимает от года до двух. Модернизация программного обеспечения или перенос приложений на другие платформы сопряжены с огромными трудностями или вообще невозможны.
Более того, программное обеспечение разрабатывалось для специализированных платформ, поэтому приложения разных поставщиков услуг не могут сосуществовать и совместно использоваться на одной карте. Несовместимость и ограниченный набор доступных функциональных возможностей стали основными факторами, которые сдерживают дальнейшее распространение приложений для смарт-карт.
1.3. Использование технологии Java для смарт-карт
Технология Java Card™ призвана преодолеть препятствия, которые мешают более широкому распространению смарт-карт. Эта технология позволяет выполнять на смарт-картах и других устройствах с ограниченным объемом памяти приложения, написанные на языке программирования Java. Такие приложения называются аплетами. По существу, технология Java Card – это универсальная защищенная мобильная платформа для смарт-карт. Эта платформа позволяет использовать важнейшие функциональные возможности языка Java.
1.3.1. Преимущества технологии Java Card
Используя технологию Java Card, разработчики приложений для смарт-карт могут получить существенные выгоды.
Упрощение процесса разработки приложений – язык Java позволяет использовать для программирования смарт-карт стандартные технологии. Разработчикам теперь не нужно вникать в тонкости программирования микроконтроллеров и изучать языки ассемблера для процессоров 6805 и 8051. В продаже имеется множество стандартных интегрированных сред разработки Javaот таких компаний, как Borland, IBM, Microsoft, Sun и Symantec. Более того, технология Java Card включает открытую платформу, которая определяет стандартные программные интерфейсы и среду исполнения. Эта платформа позволяет преодолеть сложности, связанные с подробностями реализации аппаратного и программного обеспечения смарт-карты на низком уровне. При разработке аплетов используются только программные интерфейсы высокого уровня. Программисты могут сосредоточиться на совершенствовании основного алгоритма приложения. Им также доступны расширения и библиотеки, созданные другими разработчиками.
Безопасность – применительно к смарт-картам обеспечение безопасности всегда является первостепенной проблемой. Встроенные функции безопасности Java хорошо справляются с этой задачей. Например, права доступа ко всем методам и переменным четко регламентируются. Невозможно изменять значения указателей, чтобы получить несанкционированный доступ к «чужим» областям памяти. Кроме того, в платформе Java Card предусмотрен защитный механизм, или брандмауэр, который обеспечивает выполнение каждого аплета в отдельном контексте. Все эти функции безопасности позволяют защитить систему от попыток злоумышленной программы повредить другие части системы.
Независимость от аппаратных средств – технология Java Card позволяет абстрагироваться от используемой реализации аппаратного обеспечения. Она совместима со всеми процессорами, которыми оснащаются смарт-карты (8-разрядными, 16-разрядными и 32-разрядными). Между аплетами и аппаратурой смарт-карты находится «прослойка» - платформа Java Card, поэтому они независимы от физической реализации. Готовые к работе аплеты можно без перекомпиляции загружать в любую смарт-карту на базе технологии Java.
Возможность хранить и выполнять множество приложений – в смарт-карте с поддержкой технологии Java может храниться множество аплетов, предоставленных различными поставщиками услуг. Это могут быть приложения для проведения электронных платежей, аутентификации, накопления скидок, а также программы для работы с медицинской информацией. Защитная система аплетов Java Card не позволяет одному аплету получать доступ к другим без специального разрешения. Возможности каждой смарт-карты не ограничены каким-то одним применением. В одну карту можно загрузить несколько аплетов. Функциональные возможности смарт-карты Java можно постоянно увеличивать, загружая новые или обновленные аплеты. Для этого не нужна дополнительная карта.
Совместимость с имеющимися стандартами смарт-карт – технология Java Card соответствует международному стандарту смарт-карт ISO 7816. Поэтому она поддерживает все системы и приложения, которые в целом совместимы с ISO 7816. Аплеты Java Card могут работать не только со всеми смарт-картами Java, но и со всеми существующими устройствами считывания.
1.3.2. Краткая история технологии Java Card
Программные интерфейсы Java Card были впервые опубликованы в ноябре 1996 года группой специалистов производственного центра компании Schlumberger, которая расположена в Остине, шт. Техас. Разработчики преследовали следующие цели: создание технологий массового выпуска приложений для смарт-карт и обеспечение информационной безопасности. Скоро они поняли, что наилучшее решение – использование языка программирования Java. Компания Schlumberger предложила первый проект программных интерфейсов Java Card, и первой получила лицензию на разработки для смарт-карт. Через несколько месяцев к Schlumberger присоединились компании Bull и Gemplus. Партнеры учредили Java Card Forum, отраслевой консорциум, в задачи которого входило определение и разрешение проблем, связанных с технологией Java Card, а также ускорение принятия этой технологии отраслью смарт-карт.
Спецификация Java Card 1.0 содержала только описания программных интерфейсов и еще не была наращиваемой платформой, пригодной для непосредственного использования. Убедившись в широкой поддержке отрасли, корпорация Sun Microsystems приняла на себя обязательства по разработке технологии Java Card – платформы Java для смарт-карт и других устройств с ограниченным объемом памяти. Первым шагом в этом направлении стало приобретение компании Integrity Arts, которая отделилась от компании Gemplus. Integrity Arts специализировалась на проектировании виртуальных машин и операционных систем для смарт-карт.
В ноябре 1997 года корпорация Sun Microsystems опубликовала спецификацию Java Card 2.0. Она была основана на наработках компании Integrity Arts. В разработке принимали участие представители отрасли и члены Java Card Forum. Среди них были производители смарт-карт, эмитенты и различные ассоциации из смарт-карт индустрии. Программные интерфейсы Java Card 2.0 существенно отличались от начальной версии 1.0. Они позволяли создавать объектно-ориентированные аплеты. Кроме того, в спецификации Java Card 2.0 более подробно описывалась среда исполнения приложений. Однако в этой спецификации отсутствовало описание формата загружаемых аплетов.
В марте 1999 года была опубликована спецификация Java Card версии 2.1. Она состояла из трех частей: спецификации программных интерфейсов Java Card 2.1, спецификации среды исполнения Java Card 2.1, и спецификации виртуальной машины Java Card 2.1. В версии 2.1 программные интерфейсы были обновлены, но сохранилась преемственность с версией 2.0. Продолжилась также стандартизация среды исполнения аплетов. Самыми большими достижениями спецификации Java Card 2.1 стали точное определение архитектуры виртуальной машины Java Card и формата загружаемых аплетов. Функциональная совместимость аплетов стала реальностью.
За три года, прошедшие со времени появления технологии Java Card, она получила широкое распространение и была одобрена смарт-карт индустрией. Лицензии на право использования технологии Java Card получили все ведущие производители смарт-карт и многие ключевые отраслевые игроки. Всего было получено более 30 лицензий. Список обладателей лицензий на право использования технологии Java Card и их партнеров можно найти на Web-странице http://java.sun.com/products/javacard/#partners.
Для кого предназначена эта книга
Технология Java Card™ – это сочетание подмножества языка программирования Java и среды времени исполнения, оптимизированных для использования в смарт-картах и других вычислительных устройствах с ограниченным объемом памяти. Эта книга рассчитана на широкий круг технических специалистов, которые интересуются различными аспектами технологии Java Card.
Но в первую очередь она будет полезна для разработчиков аплетов Java Card. В книге читатель найдет учебное пособие по смарт-картам, подробное обсуждение различных функциональных возможностей платформы Java Card, полезные советы для разработчиков аплетов, а также справочник по программным интерфейсам Java Card.
Во-вторых, эта книга будет полезна разработчикам платформы Java Card как дополнительное справочное пособие. В ней обсуждаются многие темы, связанные со спецификациями Java Card, и приведены поясняющие их примеры кода.
В третьих, эта книга будет полезна техническим руководителям, а также всем, кто хочет получить общее представление о технологии Java Card. В частности, первые три главы – это введение в технологию Java Card, которое поможет лучше ориентироваться в ней как инженерам, так и специалистам по маркетингу.
На протяжении всей книги я предполагаю, что читатели достаточно хорошо знакомы с языком программирования Java. Тем, которые хочет углубить свои знания в этой области, можно порекомендовать книгу Кена Арнольда и Джеймса Гослинга «Язык программирования JAVA».
Структура книги
Эта книга написана в восходящем стиле. Каждая глава содержит информацию, необходимую для понимания следующей. Поэтому рекомендуется читать книгу в порядке следования глав.
Часть 1: Введение
• Глава 1 содержит краткий обзор смарт-карт и технологии Java Card – историю, преимущества и области применения.
• В главе 2 обсуждаются основы технологии смарт-карт, которые помогут читателю понять основную идею этой книги.
Часть 2: Технология Java Card
• В главе 3 приведен обзор технологии Java Card – архитектура системы и ее компоненты.
• Глава 4 посвящена свойствам и поведению постоянных и временных объектов платформы Java Card, а также вопросам их создания и использования.
• В главе 5 обсуждается реализация атомарности для платформы Java Card, а также рассказывается об использовании транзакций в аплетах для обеспечения целостности данных.
• Глава 6 посвящена исключениям платформы Java Card. Обсуждаются способы возбуждения и обработки исключений в аплетах.
• В главе 7 объясняется, как выполняются аплеты в среде JCRE. Также приведена методика разработки аплетов.
• Глава 8 посвящена работе с пакетами данных APDU в аплетах.
• В главе 9 рассматривается защитная система аплетов и ее влияние на поведение объектов, исключений и аплетов. Обсуждаются механизмы совместного использования объектов, которые обеспечивают защиту общих данных.
• Глава 10 содержит введение в криптографию. В ней рассматриваются многие важные концепции и алгоритмы шифрования информации. Также приведен краткий обзор криптографических API, поддерживаемых платформой Java Card, и примеры кода, которые иллюстрируют использование этих API.
• В главе 11 описаны функции безопасности платформы Java Card и различные механизмы для их реализации. В этой главе заканчивается обсуждение тем, которым посвящена часть 2.
Часть 3: Руководство для программиста и приемы программирования
• Глава 12 содержит пошаговое руководство по разработке несложного аплета, в котором реализованы основные функции «электронного кошелька».
• В главе 13 приведен ряд рекомендаций по оптимизации аплетов. Многие из них дадут читателю представление о различных компромиссах, неизбежных на стадии разработки.
• В главе 14 обсуждаются проблемы, связанные с использованием типа данных int при разработке аплетов Java Card.
Часть 4: Приложения
• В приложении A содержится описание подмножества языка Java, которое поддерживается платформой Java Card.
• Приложение B – подробный справочник по программным интерфейсам Java Card 2.1.
Версии платформы Java Card, которые рассматриваются в этой книге
Эта книга основана на платформе Java Card версии 2.1. На момент написания книги это была самая последняя доступная версия. В то время следующая версия, 2.1.1, находилась в стадии разработки. Версия 2.1.1 содержит небольшие расширения и обновления по сравнению с версией 2.1. Темы и технологии, которым посвящена эта книга, не потеряют своего значения и после выхода будущих версий платформы Java Card. Новые возможности найдут отражение в следующих изданиях книги.
Источники дополнительной информации в Интернете
Новейшую информацию о технологии и средствах разработки Java Card можно найти на Web-узле Java Card: http://java.sun.com/products/javacard. Дополнительную информацию об этой книге можно найти на Web-узле http://java.sun.com/books/series/javacard.
Благодарности
Процесс написания книги не ограничивается простым переносом слов на бумагу, и эта книга не стала исключением. Она смогла появиться только благодаря помощи и поддержке многих людей.
Реализация этого проекта была бы невозможна без руководящей поддержки Энди Стрейча, Алана Бреннера и Пэтрис Пейрет. Мой руководитель, Энди Стрейч, выделил мне время, необходимое для работы над книгой, и не раз спасал меня, когда я испытывала затруднения. Хочу также поблагодарить Дебру Дули, которая уговорила меня ввязаться в этот проект и постоянно помогала мне в процессе работы.
Лайза Френдли и Тим Лингхольм, редакторы книжной серии Java Series, давали мне бесчисленные ценные советы, которые в конечном итоге помогли написать и издать эту книгу. Отдельно хочу отметить неоценимую помощь команды издательства Addison-Wesley. Я признательна Майку Хендриксону и Джулии Ди-Никола, которые направляли меня и помогали, когда я испытывала затруднения. Диан Фрид обеспечила весь производственный процесс, от редактирования до выпуска тиража. Редактором книги был Пенни Халл, а корректором – Эвелин Пайл. Ким Эрни и Джим Холидэй выполнили набор текста и верстку.
Внимательный глаз и полезные советы множества рецензентов позволили существенно улучшить качество этой книги. Техническое руководство проектом осуществлял Ли Гонг, автор книги «Inside Java 2 Platform Security». Он помог существенно улучшить структуру и содержание книги. Кирк Чен, Питер Хартел и Рави Тэнджоур снабдили книгу подробными комментариями. Конструктивные дискуссии с ними очень помогли мне. Бертран Дю Кастел, Эрик Ветиллард и Себастиан Ганс подробно анализировали эту книгу и щедро делились своими неисчерпаемыми знаниями в области реализации технологии Java Card. Митч Батлер, Джером Дэнвилл, Майк Эйслер, Эдвард де Джонг, Дэнни Луи, Эрик Неллен, Энди Стрейч, Джессика Вей, Жианг Ву и Дженнифер Йонемицу давали ценные замечания, которые мне очень помогли.
Большую помощь в организации работы над проектом оказали Питер Каттанео, Карен Ксьянг, Альберт Льянг, Моше Леви и Дженнифер Йонемицу. Мне также очень помогли их полезные советы.
В завершение хочу сказать, что я получила счастливую возможность в течение нескольких лет работать с талантливыми и увлеченными людьми из команды Java Card. Всем им посвящается эта книга.
Жикун Чен
Апрель 2000 года
Часть 1
Введение
Глава 1. Начнем с начала
Бурный рост Интернета и развитие беспроводной цифровой связи вызвали быстрое изменение способов общения людей. С прогрессом средств общения в мире модели ведения бизнеса также эволюционировали. Если раньше нужно было идти в магазин и лично встречаться с продавцом, то теперь достаточно иметь подключение к Интернету. Не нужно покидать свой дом или офис. Чтобы приобрести товары или услуги, достаточно нескольких щелчков мышью. Быстрый рост популярности электронного бизнеса ведет не только к появлению новых способов торговли. Перед компаниями открываются огромные возможности для привлечения и удержания клиентов, а также для оказания дополнительных услуг.
Успех любой компании на рынке электронной коммерции определяется, во-первых, уровнем доверия, который она завоевала за годы ведения бизнеса традиционными методами, а во-вторых, наличием технологий, позволяющих упростить заключение сделок в электронной форме. Защищенность и мобильность смарт-карт позволяет им стать безопасным, надежным, удобным и эффективным носителем, способным не только обеспечить потребности электронного бизнеса, но и открыть широкий спектр новых областей применения.
1.1. Смарт-карты
Смарт-карта (Рис. 1.1) имеет такой же размер, как обычная кредитная карточка. Но в ее пластиковую основу вмонтирована кремниевая электронная микросхема, предназначенная для хранения и обработки информации. Фактически, смарт-карта – это миниатюрный и защищенный от несанкционированного вмешательства компьютер. В отличие от карт с магнитной полосой, смарт-карты способны не только хранить информацию, но и обрабатывать ее. Поэтому для проведения транзакции не требуется доступ к удаленным базам данных.
Рис. 1.1 Смарт-карта
\Рисунки Глава 1\1.1.jpg
plastic substrate - пластиковая основа
smart card chip - электронная микросхема смарт-карты
1.1.1. Краткая история
Идея встраивания интегральной микросхемы в пластиковую карту впервые пришла в голову двум немецким изобретателям – Юргену Детлоффу и Гельмуту Кроутруппу. Это произошло в 1968 году. Позже они запатентовали свое изобретение в Германии. В 1970 году, независимо от них, Кунитака Аримура из японского технологического института Arimura также зарегистрировал патент на изобретение смарт-карты. Однако реальный прогресс в этой области наметился лишь после того, как Роланд Морено с 1974 по 1979 год зарегистрировал 47 патентов, имеющих отношение к технологии смарт-карт, в 11 странах[1]. В конце 70-х годов 20 века компания CII-Honeywell-Bull (в настоящее время Groupe Bull) впервые наладила серийный выпуск продукции по технологии смарт-карт и представила карты на базе микропроцессоров.
Первые испытания смарт-карт были проведены во Франции и в Германии в начале 80-х годов. Они использовались в качестве телефонных карт с предоплатой и защищенных кредитных/дебетовых банковских карт. Успех этих экспериментов показал, что смарт-карты имеют высокий уровень гибкости и хорошо защищены от подделок.
В последнее время, благодаря развитию технологий производства микросхем и появлению современных средств криптографии, смарт-карты стали гораздо более универсальными и надежными. Теперь они используются для хранения электронной наличности, какзамена бумажных банкнот, для надежного хранения персональной медицинской документации, для защиты кабельных и спутниковых вещательных сетей от несанкционированного доступа, а также для повышения безопасности мобильной связи.
Первоначально смарт-карты получили распространение в Европе и в Азии, где они широко использовались для обслуживания сотовой связи и проведения банковских операций. Но в конце 90-х годов, в связи с развитием электронного бизнеса в США, стал расти спрос на технологии информационной безопасности. Поэтому смарт-карты завоевали и американский рынок.
1.1.2. Преимущества смарт-карт
Популярность смарт-карт стала расти благодаря выгодам, которые они предоставляют. Одно из преимуществ смарт-карт, несомненно, встроенные вычислительные возможности. Среди других важнейших свойств можно назвать защищенность, мобильность и простоту использования.
Процессор, память и интерфейс ввода/вывода реализованы в одной интегральной микросхеме, встроенной в пластиковую основу карты. Смарт-карта защищена от злонамеренных атак, потому что она не зависит от потенциально уязвимых внешних ресурсов. Для извлечения информации из смарт-карты необходим физический доступ к ней, дополнительное оборудование, а также глубокое знание аппаратного и программного обеспечения смарт-карт. Использование криптографических алгоритмов позволяет существенно повысить уровень защиты смарт-карт. Данные, которые хранятся в физической памяти смарт-карты, можно зашифровать. Информация для обмена между смарт-картой и внешним миром также может быть зашифрована и дополнена электронной подписью. Кроме того, для получения доступа к смарт-карте ее владелец обычно должен ввести PIN-код (личный идентификационный номер), который позволяет предотвратить использование карты лицами, не обладающими полномочиями. В целом смарт-карта защищена гораздо лучше, чем традиционный настольный компьютер.
Еще одно преимущество смарт-карт – присущая им мобильность. Вы можете хранить смарт-карту в бумажнике точно так же, как обычные кредитные карточки. Благодаря таким качествам данные, которые хранятся в смарт-карте, доступны в любой момент, когда в них появляется потребность, и владелец карты получает полную свободу передвижений.
Смарт-карты также весьма удобны в использовании. Чтобы начать сделку, достаточно вставить карту в устройство считывания. После завершения операции необходимо извлечь карту из устройства.
1.1.3. Области применения
Смарт-карты часто используются для защищенного хранения данных, аутентификации и обеспечения безопасности сделок. В этом разделе мы приведем примеры областей применения смарт-карт.
В отрасли телекоммуникаций телефонные карты с предоплатой обеспечивают удобный механизм доступа к телефонам-автоматам. Они хорошо защищены от мошенничества, не требуют специального обслуживания и избавляют от необходимости иметь при себе наличные деньги. В настоящее время одним из крупнейших сегментов рынка смарт-карт стала мобильная связь. В этой отрасли смарт-карты используются для обеспечения безопасности. В качестве наиболее значимого примера можно привести стандарт цифровой сотовой связи GSM (глобальная система мобильной связи). Беспроводные телефоны стандарта GSM оснащены SIM-картой, которая выполняет функции модуля идентификации абонента. Размер этой смарт-карты гораздо меньше стандартного – ведь она подключается к разъему, расположенному внутри телефона. SIM-карта предназначена для идентификации пользователя. Кроме того, на ней хранятся ключи шифрования, обеспечивающие конфиденциальность голосовой связи. Перехват мобильных телефонных номеров и перепрограммирование телефонов для их незаконного использования становится очень трудной задачей. Ключ шифрования, который генерирует SIM-карта, является временным и меняется после каждого соединения. Поэтому, даже если злоумышленнику удастся расшифровать параметры сеанса связи в стандарте GSM, для следующего соединения они будут недействительны. Благодаря тому, что данные идентификации абонента хранятся в SIM-карте, для связи можно использовать любой совместимый с ней сотовый телефон стандарта GSM. Абонент получает SIM-карту у оператора сотовой связи и вставляет ее в телефон, который можно приобрести или взять в аренду у других поставщиков.
Сотовая связь получила очень широкое распространение, и мобильные телефоны теперь – не просто средство общения. Чтобы сохранить конкурентоспособность, сотовые операторы предлагают дополнительные сервисы, например, мобильный банкинг, мобильную торговлю, доступ в Интернет и т.п. Все эти услуги основаны на использовании смарт-карт, которые обеспечивают идентификацию абонента и безопасность передачи данных.
В торговле и банковском деле смарт-карты используются в качестве защищенных кредитных/дебетовых банковских карт. Они выполняют функции, аналогичные функциям карт с магнитной полосой. Но благодаря встроенным вычислительным возможностям смарт-карты позволяют выполнять автономные операции и верификацию. В отличие от карт с магнитной полосой, данные со смарт-карты нельзя так же просто скопировать для использования в корыстных целях. Кредитные карты, использующие технологию смарт-карт, позволяют предотвратить случаи мошенничества, из-за которых банки во всем мире теряют ежегодно миллиарды долларов.
В последнее время появились новые тенденции применения смарт-карт в торговле и банковском деле – электронные деньги (или электронный кошелек). На карте хранится доступная сумма электронных денег. Баланс может уменьшаться или пополняться. Система электронных платежей на базе смарт-карт позволяет сократить расходы на обслуживание наличного денежного оборота. В частности, смарт-карты обеспечивают идеальный механизм для выполнения интерактивных микроплатежей, т.к. использование обычных кредитных карт для платежей на небольшие суммы сопряжено с существенными накладными расходами.
В розничной торговле смарт-карты можно использовать для организации коллективной системы скидок постоянным покупателям в розничной сети компаний-партнеров. Все эти меры способствуют росту продаж и степени удовлетворенности покупателей. Если клиент делает покупки в магазинах, входящих в партнерскую сеть, информация об этом накапливается на карте. В дальнейшем владелец карты может получить право на скидки, «авиамили» или другие подарки. Данные о покупках записываются на карте, поэтому продавцы также получают возможность анализировать предпочтения клиентов и их покупательское поведение.
На городском транспорте смарт-карты могут заменить жетоны и билеты. Автомобилисты могут использовать смарт-карты для оплаты парковки и дорожных сборов. В этом случае их действие будет подобно телефонным картам с предоплатой. Решения на базе смарт-карт сулят существенные выгоды: они позволяют накапливать информацию о скидках, совершать множество небольших операций, а также позволяют удобно и быстро оплатить товары и услуги.
В области здравоохранения смарт-карты позволяют упростить учет информации. На карте могут хранится данные о медицинском страховании и записи истории болезни пациента. На карте также может храниться информация о скидках, доступных пациенту, и данные для рассмотрения претензий. Персональные медицинские показатели пациента тоже можно хранить в карте. Это обеспечит актуальность и полноту информации. Кроме того, она будет всегда доступна для специалистов, сотрудников клиник и аптек.
При подключении к Интернету смарт-карты обеспечивают надежную аутентификацию пользователя и контроль доступа, поэтому их использование в этой области представляется весьма перспективным. Смарт-карты все чаще применяются в системах шифрования с открытым ключом. В смарт-карте хранится секретный ключ ее владельца и его цифровой сертификат (цифровая подпись). Эти два компонента позволяют идентифицировать владельца карты в цифровом мире. Метод шифрования с открытым ключом предусматривает наличие пары ключей: секретного, или частного, и открытого. Секретный ключ известен только его владельцу, а открытый ключ – всем, с кем он обменивается информацией. Каждая пара обладает следующими свойствами: что-либо зашифрованное одним из них может быть расшифровано с помощью другого; имея один ключ из пары, называемый открытым, невозможно получить другой, секретный. Пара «секретный ключ – открытый ключ» обеспечивает генерацию и проверку цифровой подписи. Цифровой сертификат выдается центром сертификации. Он гарантирует подлинность открытого ключа. Смарт-карты широко используются для аутентификации в таких областях, как контроль доступа к Web-сайтам, цифровая подпись электронных писем и обеспечение безопасности сделок в режиме онлайн. Можно представить и множество других вариантов использования смарт-карт в Интернете.
В закрытых сообществах, например, в компаниях или университетах, тоже можно найти множество моделей использования универсальных смарт-карт. Перечислим лишь некоторые из них: организация физического доступа в офисы и вычислительные центры, проверка прав доступа к компьютерным сетям, корпоративным Web-сайтам и серверам, хранение и обработка административных данных, выполнение различных финансовых операций (оплата обедов, приобретение товаров в торговых автоматах, получение наличных и пополнение счета в банкоматах и т.п.).
Технология смарт-карт уже получила широкое признание, и они становятся непременным атрибутом каждого человека.
1.2. Проблемы разработки приложений для смарт-карт
Разработка приложений для смарт-карт всегда была длительным и трудоемким процессом. Карты имеют одинаковый размер и внешний вид, в них используется стандартизованный протокол связи. Несмотря на это, смарт-карты разных производителей имеют разную внутреннюю «начинку». Большинство средств разработки выпускают производители смарт-карт. Обычно они включают общий инструментарий для программирования на языке ассемблера и специализированные эмуляторы аппаратуры, которые можно приобрести у поставщиков микросхем. Сторонние организации практически лишены возможности самостоятельно разрабатывать приложения и продавать их потребителям. Поэтому разработкой программ для смарт-карт обычно занимается только узкий круг высококвалифицированных специалистов, которые обладают глубокими знаниями в области аппаратного и программного обеспечения, используемого в картах определенных типов.
Из-за отсутствия доступных стандартизованных программных интерфейсов высокого уровня для смарт-карт разработчикам приложений приходилось использовать протоколы связи низкого уровня, самостоятельно реализовывать диспетчеризацию памяти, а также вникать в другие подробности конкретных аппаратных реализаций. Большинство используемых сегодня приложений для смарт-карт были разработаны «с нуля» по индивидуальным заказам. Это очень длительный и трудоемкий процесс. Обычно цикл разработки продукции до выхода на рынок занимает от года до двух. Модернизация программного обеспечения или перенос приложений на другие платформы сопряжены с огромными трудностями или вообще невозможны.
Более того, программное обеспечение разрабатывалось для специализированных платформ, поэтому приложения разных поставщиков услуг не могут сосуществовать и совместно использоваться на одной карте. Несовместимость и ограниченный набор доступных функциональных возможностей стали основными факторами, которые сдерживают дальнейшее распространение приложений для смарт-карт.
1.3. Использование технологии Java для смарт-карт
Технология Java Card™ призвана преодолеть препятствия, которые мешают более широкому распространению смарт-карт. Эта технология позволяет выполнять на смарт-картах и других устройствах с ограниченным объемом памяти приложения, написанные на языке программирования Java. Такие приложения называются аплетами. По существу, технология Java Card – это универсальная защищенная мобильная платформа для смарт-карт. Эта платформа позволяет использовать важнейшие функциональные возможности языка Java.
1.3.1. Преимущества технологии Java Card
Используя технологию Java Card, разработчики приложений для смарт-карт могут получить существенные выгоды.
Упрощение процесса разработки приложений – язык Java позволяет использовать для программирования смарт-карт стандартные технологии. Разработчикам теперь не нужно вникать в тонкости программирования микроконтроллеров и изучать языки ассемблера для процессоров 6805 и 8051. В продаже имеется множество стандартных интегрированных сред разработки Javaот таких компаний, как Borland, IBM, Microsoft, Sun и Symantec. Более того, технология Java Card включает открытую платформу, которая определяет стандартные программные интерфейсы и среду исполнения. Эта платформа позволяет преодолеть сложности, связанные с подробностями реализации аппаратного и программного обеспечения смарт-карты на низком уровне. При разработке аплетов используются только программные интерфейсы высокого уровня. Программисты могут сосредоточиться на совершенствовании основного алгоритма приложения. Им также доступны расширения и библиотеки, созданные другими разработчиками.
Безопасность – применительно к смарт-картам обеспечение безопасности всегда является первостепенной проблемой. Встроенные функции безопасности Java хорошо справляются с этой задачей. Например, права доступа ко всем методам и переменным четко регламентируются. Невозможно изменять значения указателей, чтобы получить несанкционированный доступ к «чужим» областям памяти. Кроме того, в платформе Java Card предусмотрен защитный механизм, или брандмауэр, который обеспечивает выполнение каждого аплета в отдельном контексте. Все эти функции безопасности позволяют защитить систему от попыток злоумышленной программы повредить другие части системы.
Независимость от аппаратных средств – технология Java Card позволяет абстрагироваться от используемой реализации аппаратного обеспечения. Она совместима со всеми процессорами, которыми оснащаются смарт-карты (8-разрядными, 16-разрядными и 32-разрядными). Между аплетами и аппаратурой смарт-карты находится «прослойка» - платформа Java Card, поэтому они независимы от физической реализации. Готовые к работе аплеты можно без перекомпиляции загружать в любую смарт-карту на базе технологии Java.
Возможность хранить и выполнять множество приложений – в смарт-карте с поддержкой технологии Java может храниться множество аплетов, предоставленных различными поставщиками услуг. Это могут быть приложения для проведения электронных платежей, аутентификации, накопления скидок, а также программы для работы с медицинской информацией. Защитная система аплетов Java Card не позволяет одному аплету получать доступ к другим без специального разрешения. Возможности каждой смарт-карты не ограничены каким-то одним применением. В одну карту можно загрузить несколько аплетов. Функциональные возможности смарт-карты Java можно постоянно увеличивать, загружая новые или обновленные аплеты. Для этого не нужна дополнительная карта.
Совместимость с имеющимися стандартами смарт-карт – технология Java Card соответствует международному стандарту смарт-карт ISO 7816. Поэтому она поддерживает все системы и приложения, которые в целом совместимы с ISO 7816. Аплеты Java Card могут работать не только со всеми смарт-картами Java, но и со всеми существующими устройствами считывания.
1.3.2. Краткая история технологии Java Card
Программные интерфейсы Java Card были впервые опубликованы в ноябре 1996 года группой специалистов производственного центра компании Schlumberger, которая расположена в Остине, шт. Техас. Разработчики преследовали следующие цели: создание технологий массового выпуска приложений для смарт-карт и обеспечение информационной безопасности. Скоро они поняли, что наилучшее решение – использование языка программирования Java. Компания Schlumberger предложила первый проект программных интерфейсов Java Card, и первой получила лицензию на разработки для смарт-карт. Через несколько месяцев к Schlumberger присоединились компании Bull и Gemplus. Партнеры учредили Java Card Forum, отраслевой консорциум, в задачи которого входило определение и разрешение проблем, связанных с технологией Java Card, а также ускорение принятия этой технологии отраслью смарт-карт.
Спецификация Java Card 1.0 содержала только описания программных интерфейсов и еще не была наращиваемой платформой, пригодной для непосредственного использования. Убедившись в широкой поддержке отрасли, корпорация Sun Microsystems приняла на себя обязательства по разработке технологии Java Card – платформы Java для смарт-карт и других устройств с ограниченным объемом памяти. Первым шагом в этом направлении стало приобретение компании Integrity Arts, которая отделилась от компании Gemplus. Integrity Arts специализировалась на проектировании виртуальных машин и операционных систем для смарт-карт.
В ноябре 1997 года корпорация Sun Microsystems опубликовала спецификацию Java Card 2.0. Она была основана на наработках компании Integrity Arts. В разработке принимали участие представители отрасли и члены Java Card Forum. Среди них были производители смарт-карт, эмитенты и различные ассоциации из смарт-карт индустрии. Программные интерфейсы Java Card 2.0 существенно отличались от начальной версии 1.0. Они позволяли создавать объектно-ориентированные аплеты. Кроме того, в спецификации Java Card 2.0 более подробно описывалась среда исполнения приложений. Однако в этой спецификации отсутствовало описание формата загружаемых аплетов.
В марте 1999 года была опубликована спецификация Java Card версии 2.1. Она состояла из трех частей: спецификации программных интерфейсов Java Card 2.1, спецификации среды исполнения Java Card 2.1, и спецификации виртуальной машины Java Card 2.1. В версии 2.1 программные интерфейсы были обновлены, но сохранилась преемственность с версией 2.0. Продолжилась также стандартизация среды исполнения аплетов. Самыми большими достижениями спецификации Java Card 2.1 стали точное определение архитектуры виртуальной машины Java Card и формата загружаемых аплетов. Функциональная совместимость аплетов стала реальностью.
За три года, прошедшие со времени появления технологии Java Card, она получила широкое распространение и была одобрена смарт-карт индустрией. Лицензии на право использования технологии Java Card получили все ведущие производители смарт-карт и многие ключевые отраслевые игроки. Всего было получено более 30 лицензий. Список обладателей лицензий на право использования технологии Java Card и их партнеров можно найти на Web-странице http://java.sun.com/products/javacard/#partners.