190 likes | 402 Views
Верификация байт-кода в среде смарт-карт: использование криптографических методов. К. Н. Хюппенен Кафедра информатики и математического обеспечения ПетрГУ 20 июня 2003 г. Содержание. Загрузка апплетов на смарт-карты Алгоритм верификации байт-кода компании Sun
E N D
Верификация байт-кода в среде смарт-карт: использование криптографических методов К. Н. Хюппенен Кафедра информатики и математического обеспечения ПетрГУ 20 июня 2003 г.
Содержание • Загрузка апплетов на смарт-карты • Алгоритм верификации байт-кода компании Sun • Разделенная модель верификации байт-кода • Описание разработанного прототипа
Приложение a Приложение b Приложение c Приложение ... Современная архитектура Java Card API Виртуальная машина Рабочая среда (ОС) Ресурсы микросхемы
Собственный код Загрузка апплета Апплет Требования Верификация Собственный код Апплет типа s Апплет типа 2 Апплет типа 1 Контекст s Контекст 2 Контекст 1 JCVM Системные ресурсы
Верификация байт-кода • Верификация байт-кода Java: • Статический и структурный анализ загружаемого пакета • Проверяет, что байт-код пакета оперирует верными типами данных. • Верификация байт-кода – это крайне важный элемент защиты: • Предотвращает нелегальные операции: • Подделка ссылок на объекты. • Неверное преобразование ссылок. • Созданные со злым умыслом апплеты способны: • Полностью считать память карты. • Получить доступ к частным данным.
Как работает верификация • Что такое верификатор? • Это программа, которая определяет, является ли апплет «безопасным» или «небезопасным». • Что значит «безопасный»? • Апплет удовлетворяет набору свойств, которые необходимы, но не достаточны для обеспечения реальной защиты.
Как работает верификация • Тесты, которые могут осуществляться: • Переменные имеют верные типы во всех ситуациях • Нелегальные преобразования типов (напр., чтение целочисленного типа как ссылки на объект) не происходят. • Код является замкнутым • Команды перехода не выводят интерпретатор за границы метода. • Стек ограничен • Не возникает переполнение или незагруженность стека. • Объекты используются безопасно • Все переменные инициализируются перед использованием. • И прочие...
Регистр 3 Регистр 2 Регистр 1 Регистр 0 Виртуальная машина Java Card Ячейка стека 2 Объект 67 Имеет стековую архитектуру Стек операндов Ячейка стека 1 Объект 3 Ячейка стека 0 Системная область Объект 42 Ссылка Регистры Объект 2 Куча Стековый кадр
0 iload_1 .L i i ? 1 iload_2 ? ? ? ? ? 2 if_icmpne 12 ? ? ? ? ? 5 iload_1 ? ? ? ? ? 6 iload_2 ? ? ? ? ? 7 iadd ? ? ? ? ? 8 istore_3 ? ? ? ? ? 9 goto 16 ? ? ? ? ? 12 iload_1 ? ? ? ? ? 13 iload_1 ? ? ? ? ? 14 imul ? ? ? ? ? 15 istore_3 ? ? ? ? ? 16 iload_3 ? ? ? ? ? 17 ireturn ? ? ? ? ? Работа алгоритма верификации Sun Регистры 0 1 2 3 Стек
0 iload_1 . L i i ? 1 iload_2 i L i i ? 2 if_icmpne 12 ? ? ? ? ? 5 iload_1 ? ? ? ? ? 6 iload_2 ? ? ? ? ? 7 iadd ? ? ? ? ? 8 istore_3 ? ? ? ? ? 9 goto 16 ? ? ? ? ? 12 iload_1 ? ? ? ? ? 13 iload_1 ? ? ? ? ? 14 imul ? ? ? ? ? 15 istore_3 ? ? ? ? ? 16 iload_3 ? ? ? ? ? 17 ireturn ? ? ? ? ? Работа алгоритма верификации Sun Регистры 0 1 2 3 Стек
0 iload_1 . L i i ? 1 iload_2 i L i i ?2 if_icmpne 12 i,i L i i ? 5 iload_1 ? ? ? ? ? 6 iload_2 ? ? ? ? ? 7 iadd ? ? ? ? ? 8 istore_3 ? ? ? ? ? 9 goto 16 ? ? ? ? ? 12 iload_1 ? ? ? ? ? 13 iload_1 ? ? ? ? ? 14 imul ? ? ? ? ? 15 istore_3 ? ? ? ? ? 16 iload_3 ? ? ? ? ? 17 ireturn ? ? ? ? ? Работа алгоритма верификации Sun Регистры 0 1 2 3 Стек
0 iload_1 . L i i ? 1 iload_2 i L i i ? 2 if_icmpne 12 i,i L i i ? 5 iload_1 . L i i ? 6 iload_2 ? ? ? ? ? 7 iadd ? ? ? ? ? 8 istore_3 ? ? ? ? ? 9 goto 16 ? ? ? ? ? 12 iload_1 . L i i ? 13 iload_1 ? ? ? ? ? 14 imul ? ? ? ? ? 15 istore_3 ? ? ? ? ? 16 iload_3 ? ? ? ? ? 17 ireturn ? ? ? ? ? Работа алгоритма верификации Sun Регистры 0 1 2 3 Стек
Разделенная модель верификации байт-кода • Терминал используется как внешний источник памяти. Для защиты данных применяются криптографические методы. • Требования к памяти сокращаются до O(S log S), где S – количество байт-кодов в методе. • Верификация производится на карте
Постановка задачи • Исследовать применимость модели разделенной верификации байт-кода к технологии Java Card • Реализовать прототип верификатора • Провести тесты и измерения
Разделенная модель верификации ТерминалХранилище кадров Данные Frame 0: MAC, PC=0, un/changed bit, types of variables Процедура верификации со стороны терминала Программа Frame 0: MAC, PC=0, un/changed bit, types of variables Frame 0: MAC, PC=0, un/changed bit, types of variables Frame 0: MAC, PC=0, un/changed bit, types of variables Frame i: MAC, PC=i, un/changed bit, types of variables Frame i: MAC, PC=i, un/changed bit, types of variables Кадр i Запись кадра Чтение кадра КартаСчетчики MAC-функция f с эфемерным ключом k С[i] 3 подписать проверить 5 12 2 Исходящий кадр 2 C[i] C[i]++ 1 Исходящий кадр Входящий кадр 3 7 Процедура верификации со стороны карты
Оптимизации модели • Экспорт счетчиков на терминал • Дальнейшее сокращение объема требуемой для работы оперативной памяти. • Неявные запросы • Уменьшение объема передаваемых данных и снижение нагрузки на карту.
Архитектура прототипа Содержимое пакета Апплет, исполняемый на терминале Апплет, исполняемый на карте Команды Кадры Принять/отвергнуть Проверяемый апплет
Тестирование прототипа • Оценен объем требуемой памяти • Оценен объем передаваемых данных • Проведены измерения времени работы программы • Проведено тестирование на реальных смарт-картах • Доказана применимость модели разделенной верификации
Результаты работы • Разделенная модель верификации байт-кода исследована и адаптирована к технологии Java Card; • Предложено несколько оптимизаций модели; • Реализован прототип верификатора, экспериментально подтверждающий применимость данного метода.