ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Институт математики и компьютерных наук Кафедра информационной безопасности Допустить к защите в ГАК Заведующий кафедрой информационной безопасности, д.т.н., профессор А.А. Захаров “____” _________ 2010 г. Пылаев Михаил Александрович Разработка программного обеспечения для работы с индивидуальными электронными картами пациента (Дипломная работа) Научный руководитель: к.т.н., доцент __________ Оленников Е.А. Автор работы: __________ Пылаев М.А. Тюмень – 2010 Содержание. Введение. .................................................................................................................. 4 Глава 1. Обзор внешних запоминающих устройств и спецификация смарткарт............................................................................................................................ 6 1.1 Обзор и анализ распространенных внешних запоминающих устройств. .............................................................................................................................. 6 1.1.1 iButton.................................................................................................... 6 1.1.2 Пластиковая карта с магнитной полосой. ......................................... 9 1.1.3 Flash накопитель. ............................................................................... 10 1.1.4 Смарт-карта ........................................................................................ 11 1.2 Устройство и функции карт ACOS2. ....................................................... 15 1.2.1 Отличительные особенности карт ACOS2. ..................................... 15 1.2.2 Стадии. ................................................................................................ 15 1.2.3 Распределение памяти. ...................................................................... 18 1.2.4 Системные файлы. ............................................................................. 20 1.2.5 Пользовательские файлы. ................................................................. 25 1.2.6 Безопасность карты. .......................................................................... 26 1.2.7 Секретные коды. ................................................................................ 28 1.2.8 ATR (Answer-To-Reset). .................................................................... 30 1.2.9 Команды ACOS2. ............................................................................... 31 1.3 Smart Card Development Kit (SDK). .......................................................... 32 Глава 2 Реализация программного обеспечения для работы с индивидуальными электронными картами пациента........................................ 38 2.1 Разработка класса, упрощающего разработку приложений ориентированных на работу со смарт-картами ACOS. ................................ 38 2.1.1 Свойства класса.................................................................................. 38 2.1.2 Методы класса. ................................................................................... 41 2.2 Разработка модели разграничения доступа к информации на смарткарте................................................................................................................... 47 2 2.2.1 Логические компоненты модели. ..................................................... 48 2.2.2 Структура пользовательских файлов на смарт-карте. ................... 49 2.2.3 Принцип работы разработанной модели. ........................................ 53 2.3 Формат представления данных на смарт-карте. ..................................... 54 2.4 Разработка комплекса программ для работы с индивидуальными картами пациентов. .......................................................................................... 55 2.4.1 Программа администратора. ............................................................. 56 2.4.2 Программа для чтения и записи медицинской информации на смарт-карту пациента. ................................................................................... 64 2.4.3 Программа для просмотра информации о пациенте хранящейся на смарт-карте. .................................................................................................... 70 Заключение. ........................................................................................................... 73 Список использованной литературы................................................................... 74 3 Введение. Важным направлением реализации государственной политики в социальной сфере является решение задач повышения качества жизни населения, качества, доступности и своевременности оказания медицинских, образовательных, культурных и других социальных услуг на основе широкого применения современных информационных технологий. Значительное внимание уделяется в настоящее время использованию информационных технологий при реализации национальных проектов, при этом важное значение в рамках реформирования социальной сферы имеет внедрение наиболее передовых и прогрессивных стандартов социального обслуживания на основе введения многофункциональной электронной социальной карты гражданина. Социальная карта гражданина должна сочетать в себе функции социальных расчетов и учета льгот, например в сферах транспорта, медицинских услуг, коммунальных услуг, с функциями идентификатора личности для различных категорий граждан. Такая социальная карта позволит намного упростить взаимодействия с государственными и социальными органами управления. В лаборатории информатизации медицинских учреждений НИИ «КИТ» ведутся разработки в области информатизации медицины и исследуются вопросы, связанные с этим направлением. В частности, исследуется возможность использования социальной карты гражданина для получения доступа к медицинским услугам. Поскольку в России применение индивидуальных электронных карт пациента не распространено и данная технология не отработана, существует много вариантов ее реализации. Возникают такие вопросы как: Какие внешние носители использовать? Как обезопасить данные гражданина? Какая информация должна хранится на карте? 4 Какой уровень централизации использовать? Отсюда следует, что сразу готового решения не найти. Надо протестировать много вариантов, чтобы выявить наиболее подходящее решение. В своей дипломной работе я сделал обзор более распространенных внешних запоминающих устройств и произвел их анализ по пригодности безопасного хранения медицинской информации. И рассмотрел ситуацию, когда в ЛПУ не используется централизованная информационная система, то есть используется отдельно изолированные компьютеры. В данной ситуации приходится ограничиваться определенными рамками. А именно: вся информация должна хранится на внешнем запоминающемся устройстве (ВЗУ); дано е ВЗУ должно иметь защиту от несанкционированного доступа к медицинским данным пациента; медицинские данные должны, представлены в универсальном формате, который позволит обмениваться медицинскими данными между различными МИС. Цель дипломной работы - разработка программного обеспечения для работы с индивидуальными электронными картами пациента на внешних носителях. Поставленная цель обусловила следующие задачи: Выбор внешнего запоминающего устройства, для безопасного хранения данных пациента; Разработка класса упрощающего разработку приложений ориентированных на работу со смарт-картами; Разработка комплекса программ для работы с индивидуальными электронными картами пациента; Разработка модели разграничения доступа к медицинской информации хранящейся на смарт-карте. 5 Глава 1. Обзор внешних запоминающих устройств и спецификация смарт-карт. 1.1 Обзор и анализ распространенных внешних запоминающих устройств. Рынок внешних запоминающих устройств дает нам на выбор несколько решений, в каждом из них есть как плюсы, так и минусы. Для начала разберемся, каким требованиям должно обладать внешнее запоминающее устройство: 1. Ограничения доступа – т.к. речь идет о конфиденциальной информации, как паспортные данные пациента, данные о страховом полисе, болезни, диагнозы и т.д. 2. Стоимость ВЗУ – не каждое ЛПУ может себе позволить дорогое оборудование, когда речь идет о сотнях пользователей; 3. Интерфейс – необходимо чтобы информация была доступна при минимальном использовании дополнительного оборудования; 4. Объем памяти должен быть достаточным, чтоб было возможным хранить более полную информацию о пациенте; 5. Риск заражения вирусами – так как не приемлемо чтобы на ВЗУ вместе с медицинской информацией распространялись вирусы; 6. Практическое удобство – удобство использования, удобство транспортировки. Разберем предполагаемые варианты решения, их физические характеристики и возможность использования. 1.1.1 iButton. iButton — оригинальное семейство микросхем, разработанных и выпускаемых фирмой Dallas Semiconductor, USA. Каждая такая микросхема заключена в стальной герметичный цилиндрический корпус и имеет 6 уникальный регистрационный номер (ID), записываемый в процессе изготовления во постоянное внутреннее запоминающее устройство. Все микросхемы iButton выполнены по жестким стандартам. Попробуйте согнуть их — это невозможно. Бросьте устройство на Рис.1 Внешний вид iButton. пол, наступите на него, опустите его в воду или в снег — корпус выдерживает механический удар 500 G, рабочий диапазон температур от -40° С до +85° С для большинства приборов семейства, падение с высоты 1,5 метра на бетонный пол, 11-килограммовую нагрузку, не подвержен воздействию магнитных и статических полей, промышленной атмосферы; iButton испытан на ношение в течение 10 лет и гарантированно сохраняет прочность корпуса при 1 миллионе контактов со считывателем. Его компактная форма в виде монеты обеспечивает самовыравнивание в ответном контактном разъеме, что гарантирует простоту использования. Аксессуары позволяют закрепить iButton практически на любой поверхности, включая печатные платы, пластиковые карточки, идентификационные брелки и брелки для ключей. По выполняемым функциям iButton подразделяются следующим образом: только ID; ID и память (энергонезависимое ОЗУ, ПЗУ и ППЗУ); ID и энергонезависимое ОЗУ с защитой; ID, энергонезависимое ОЗУ и часы календарь реального времени; ID и цифровой термометр; ID и Java - криптопроцессор. 7 Рис.2 Физические размеры IButton. Используемый интерфейс Обмен данными с iButton производится через интерфейс 1-Wire, также являющийся фирменной разработкой Dallas Semiconductor. Информация в этом интерфейсе передается по единственному проводнику, то есть шина данных — однопроводная. Питание iButton получают из этого же проводника, заряжая внутренний конденсатор в моменты, когда на шине нет обмена данными. Скорость обмена достаточна для обеспечения передачи данных в момент касания контактного устройства. Рис. 3 Схема организации сетей 1-Wire. Протокол интерфейса 1-Wire обеспечивает возможность работы с множеством iButton, подключенных параллельно к линии данных. Команды интерфейса позволяют определить ID всех iButton, подключенных в данный момент к линии и затем работать с конкретным прибором, переведя остальные в режим ожидания. Управление линией данных и выдачу команд производит ведущее устройство, в качестве которого может использоваться любой микроконтроллер или персональный компьютер (ПК). Для 8 обеспечения целостности данных используется вычисление контрольных кодов, а также аппаратный промежуточный буфер в ОЗУ iButton. Данные сначала записываются в этот буфер, затем ведущий проверяет их правильность, и только после этого выдает команду ведомому устройству — скопировать их из буфера в основную память. Для подключения iButton к персональному компьютеру фирмой Dallas Semiconductor выпускаются адаптеры, преобразующие сигналы стандартных портов компьютера (RS232, LPT и USB) в сигналы 1-Wire. Программные драйверы и комплект разработчика iButton TMEX SDK свободно доступны на сайте фирмы, посвященном iButton — www.ibutton.com Итак, iButton- ВЗУ с отличными показателями физической стойкости, но с малым количеством энергонезависимой памяти, порядка 1КБ. Так же имеется не перезаписываемая память объемом несколько сотен байт. В качестве хранителя медицинской информации данное устройство нам не подходит т.к. оно имеет малый объем памяти, не имеет никого ограничения доступа. Для использования необходимо дополнительное дорогостоящее оборудование для считывания и записи данных. 1.1.2 Пластиковая карта с магнитной полосой. Магнитная полоса на карте имеет три дорожки. Карты с магнитной полосой делятся по типу полосы на LoCo - низкоэрцитивная магнитная полоса (на 300 эрстед), HiCo - высокоэрцитивная магнитная полоса (помехозащищенные, до 4000 эрстед) и Meco - около 2600 эрстед. Эти виды характеризуется разной степенью устойчивости к магнитным полям. Запись информации на магнитную полосу: На магнитные дорожки возможна запись только латинских букв, буквы кириллицы вызывают ошибку в работе записывающего устройства. Рис. 4 Внешний вид пластиковой карты с магнитной полосой. 9 1-дорожка – цифробуквенная информация: до 76 знакомест QWERTYUIOPASDFGHJKLZXCVBNM1234567890: ; = + ( ) – ‘ - (клавиша “ ‘ Э) ! @ # ^ & * < > / \ Все латинские буквы заглавные. Служебный знак „?” добавляется в конце каждой строки базы данных и означает конец записи на магнитную полосу и при считывании не отображается. 2-дорожка – только цифры: 1234567890 и знак „=”, до 37 знакомест. Пробел отображается на магнитной полосе знаком „=”, знак „?” означает конец записи на магнитную полосу и при считывании не отображается. Знак „?” добавляется в конце каждой строки таблиц базы данных. 3-дорожка – только цифры: 1234567890 и знак „=”, до 104 знакомест. Пробел отображается на магнитной ленте знаком „=”, знак „?” означает конец записи на магнитную ленту и при считывании не отображается. Знак „?” добавляется в конце каждой строки таблиц базы данных. Итак, ключевыми и критическими недостатками являются: объем памяти менее чем на iButton, возможность легко дублировать данные, использование только латинских букв. 1.1.3 Flash накопитель. Не нуждается в подробном описании. Удобна в обращении, маленькая в размере, имеет большой объем памяти. Поддерживает как аппаратное шифрование, так и программное шифрование данных. Не требует дополнительного оборудования для работы. Стойкость к физическим повреждениям меньше по сравнению с вышеописанными запоминающими Рис. 5 Внешний вид USBFlash карты. устройствами. Распространенность данного оборудования делает возможным распространение вирусов. Возможность легко сделать дубликат всей хранимой информации. Отмечу, что существуют Flash накопители с аппаратной криптозащитой. Но цена таких устройств внушительно 10 увеличивается, что является критическим не достатком для медицинских учреждений. Программное шифрование ненадежно. 1.1.4 Смарт-карта Смарт-карты классифицируются по следующим признакам: тип микросхемы; способ считывания информации; соответствие стандартам; область применения. Тип применяемых микросхем в смарт-картах В зависимости от встроенной микросхемы все смарт-карты делятся на несколько основных типов, кардинально различающихся по выполняемым функциям: карты памяти; микропроцессорные карты; карты с криптографической логикой. Карты памяти предназначены для хранения информации. Память на таких типах карт может быть свободной для доступа или содержать логику контроля доступа к памяти карты для ограничения операций чтения и записи данных. Микропроцессорные карты также предназначены для хранения информации, но в отличие обычных карт памяти они содержат в себе специальную программу или небольшую операционную систему, которая позволяет преобразовывать данные по определенному алгоритму, осуществлять защиту информации хранящейся на карте при передаче, чтении и записи. Карты с криптографической логикой используются в системах защиты информации для принятия шифрования данных или непосредственного выработки участия в процессе криптографических ключей, 11 электронных цифровых подписей и другой необходимой информации для работы системы. Сводная информация о некоторых распространенных типах смарт-карт приведена в таблице 1. Карты памяти Размер памяти (EEPROM), Защита PIN Активная IC, PIN, 3DES, кодом от записи аутентификация, ISO 7816-3, 5 APP кодов, countdown файловая структура, счетчик активная аутентификация байт Двухбайтовый Трехбайтовый < 256 SLE-4436 256 1024 Микропроцессорные карты SLE-4442 SLE-4428 ACOS-1 1K, ACOS-2 1K ACOS-2 8K, ACOS-3 16К, > 1024 24К Таблица 1 - Сводная таблица некоторых распространенных типов смарт-карт. Способы считывания информации со смарт-карты По методу считывания информации карты делятся на следующие виды: Контактные; Бесконтактные; Со сдвоенным интерфейсом. Контактные карты взаимодействуют со считывателем посредством непосредственного соприкосновения металлической контактной площадки карты и контактов считывателя. Данный метод считывания просто реализуем, но повышает износ карты при частом Рис. 6 Схематическое представление смарт-карты. использовании. Контактная смарт-карта состоит из трех частей: 12 1. Контактная область - 6 или 8 контактов, квадратной или овальной формы - Позиции контактов выполнены в соответствии со стандартом ISO-7816; 2. Чип (микропроцессор карты); 3. Пластиковая основа. Бесконтактные карты имеют встроенную катушку индуктивности, которая в электромагнитном поле считывателя обеспечивает питанием микросхему, выдающую информационные радиосигналы. Такой метод считывания позволяет часто использовать карту без износа самой карты и считывателя. Карты со сдвоенным интерфейсом имеют одновременно и контактную площадку и встроенную катушку индуктивности. Такие карты позволяют осуществлять работу с разными типами считывателей. Стандарты на смарт-карты Для смарт-карт существует несколько международных стандартов, определяющих практически все свойства карт, начиная от размеров, свойств и типов пластика, и заканчивая содержанием информации на карточке, протоколов работы и форматов данных. Стандарт ISO-7816 «Идентификационные карты — карты с микросхемой с контактами». Состоит из шести частей, регламентирующих физические характеристики, размер и расположение контактов, сигналы и протоколы, структуру файлов, адресацию и команды обмена. Стандарт EMV (Europay, MasterCard & Visa). 1я и 2я части базируется на ISO-7816, в последующих частях добавлены определения обработки транзакций, спецификации терминалов и т.д. Преимущества смарт-карт над пластиковыми картами с магнитной полосой Популярность смарт-карт в последнее время становится выше, и это связано с тем, что смарт-карты имеют серьезные отличия от обычных карт с магнитной полосой: 13 1. Смарт-карта содержит в себе память, из-за этого она может нести в себе гораздо большее количество информации, которая необходима для работы. 2. Смарт-карты имеют надежную встроенную систему защиты от считывания информации и ее подделки. Эта особенность смарт-карты уберегает ее владельца от случаев любого нелегального копирования (клонирования) карты и несанкционированного использования. 3. Обмен информацией со смарт-картой проходит в зашифрованном виде, поэтому ее просто невозможно перехватить или изменить. Эта возможность позволяет со сто процентной уверенностью утверждать, что Ваша информация не будет прослушана кем-либо. Ваши данные о счете и балансе останутся не известны кассиру или продавцу. 4. Смарт-карта является более долговечной. Она не подвержена влиянию электромагнитных излучений и менее подвержена влиянию воды, грязи и химикатам. Срок службы смарт-карт различных производителей в зависимости от условий использования составляет от 3 до 10 лет. Магнитные же карты служат всего 1-2 года. Из выше представленных устройств пригодно только два, для хранения медицинских данных. Это Flash накопитель и смарт-карта. В таблице 2 представленные сравнительные характеристики этих устройств. Главные факторы Смарт-карта Flash-накопитель Объем памяти До 64 Kb От 512 Mb Стоимость От 250 руб. От 300 руб. Криптозащита Высокая отсутствует необходим Интерфейс USB карт-ридер Риск заражения вирусами отсутствует высокий Таблица 2 сравнительные характеристики Смарт-карты и Flash накопителя. В итоге я выбрал для использования в своей работе микропроцессорную смарт-карту ACO2 8Kb. 14 1.2 Устройство и функции карт ACOS2. Подробно рассмотрим устройство и функции микропроцессорной смарт-карты ACOS2. ACOS2 – ACS Smart Card Operating System version 2, разработана компанией Advanced Card Systems Ltd, Гонг-Конг. Приведенный далее текст основан на спецификации на карту ACOS2. Версия спецификации – 2.3, апрель 2006. В данной спецификации рассматривается карта с объемом памяти 8 КБ. 1.2.1 Отличительные особенности карт ACOS2. 8 килобайт памяти EEPROM для пользовательских данных; Совместимость со стандартом ISO 7816-1/2/3, поддержка протокола Т=0; Поддержка DES, 3-DES и MAC; Пять секретных кодов (AC-коды) и код эмитента (IC-код); PIN-код, который владелец карты может изменить; Пара ключей для взаимной аутентификации; Ключ сессии на основе случайных чисел; Файлы с фиксированной длиной записи (длина записи может различаться в разных файлах); Account Data Structure для выполнения хорошо защищенных платежных операций в качестве дополнительной функции. 1.2.2 Стадии. Карта может пребывать в одной из трех стадий ее жизненного цикла: производства (Manufacturing Stage), персонализации (Personalization Stage) и стадии использования (User Stage) (рис. 7). У последней стадии есть два режима: обычный и привилегированный (Issuer Mode). 15 Рис. 7 – Стадии. Стадия, в которой находится карта в данный момент, определяется ее операционной системой сразу же после ее сброса (reset). Стадия не может быть изменена непосредственно во время выполнения операций с картой. Стадия производства. Чип пребывает в стадии производства до тех пор, пока специальный «предохранитель», называемый Manufacturer Fuse (т.е. специальный бит в EEPROM) не будет установлен. «Прожиг» Manufacturer Fuse – действие необратимое. На этой стадии в EEPROM может быть записано следующее: Manufacturer File, содержащий две записи по 8 байт, который ассоциируется со стадией производства. Этот файл может быть записан только на этой стадии (на остальных он будет доступен только для чтения). Сюда производитель может записывать свою идентификационную информацию (в том числе серийный номер карты); 16 IC-код, который понадобится при записи в системные файлы на стадии персонализации. Manufacturer Fuse, установка которого необратимо завершает стадию производства. Manufacturer Fuse – это один бит в Manufacturer File. Стадия персонализации. Стадия персонализации начинается с момента завершения стадии производства, и длится до момента установки Personalization Bit. После того, как в версии 2.3 спецификации была отменена команда CLEAR CARD, завершение стадии персонализации также необратимо. На этой стадии любая запись в системные файлы (Internal Data Files), также как и чтение Security File, возможна только после предъявления корректного IC-кода. На этой стадии в память может быть записана следующая информация: Personalization File, содержащий 3 записи по 4 байта. Он включает Option Register и другие подобные структуры, в которых хранятся различные настройки. Эта область доступна для записи только на стадии персонализации. После установки Personalization Bit (т.е. завершения стадии) этот файл доступен только для чтения. Первые 10 байт файла возвращаются в качестве Historical Bytes в ответ на команду Answer-ToReset; Секретные коды и ключи; File Definition Blocks – аналог файловой системы, необходимой для пользовательских файлов (User Data Files); Account Data Structure (если в опциях установлен соответствующий бит); Personalization Bit, для перехода в стадию использования. Стадия использования. Стадия использования характеризует «нормальный» режим функционирования карты. Эта стадия активна с момента завершения стадии персонализации. Она представлена двумя режимами: обычным и 17 привилегированным (Issuer Mode). Вход в привилегированный режим происходит после предъявления IC-кода. В этом режиме возможен доступ к определенным областям памяти, которые недоступны в обычном режиме. 1.2.3 Распределение памяти. 8 КБ EEPROM памяти разделены на Internal Data Memory и User Data Memory. Internal Data Memory используется для нужд операционной системы, User Data Memory хранит пользовательские данные, которыми могут управлять приложения пользователя. Доступ и к пользовательской и к системной области осуществляется, используя файлы и записи. Файл – это наименьший объект, которому могут назначаться атрибуты безопасности (на чтение и запись). Файлы состоят из записей. Запись – это наименьший объект, который можно считать или записать. Когда производится чтение/запись в файл, должен быть указан номер записи. В одном файле их может быть до 255. Размер записи может различаться в разных файлах, но они все одинаковы внутри одного файла. Структура системных файлов (размер файлов, их идентификаторы, длина записей, атрибуты безопасности) определена операционной системой и не может быть изменена. Структура же пользовательских – определяется при персонализации. После установки параметра N_OF_FILE на стадии персонализации, файловая структура фиксируется. Доступ к данным любых файлов возможен только с помощью команд READ RECORD и WRITE RECORD (прочитать и записать запись). Каждый файл определяется двухбайтовым именем – идентификатором. Идентификатор ассоциируется с файлом в процессе создания файла на стадии персонализации. Операционная система не выполняет никаких проверок на уникальность идентификаторов. Если у нескольких файлов будут одинаковые идентификаторы, это может привести к сбоям в работе карты. 18 Значение FFh в первом байте файлового идентификатора используется для системных файлов и не может быть «занято» пользователем. До выполнения команд READ RECORD или WRITE RECORD файл должен быть открыт командой SELECT FILE (выбрать файл). Только один файл может быть открыт в любой момент времени. Команды чтения и записи выполняются с последним выбранным файлом. Атрибуты безопасности файлов данных. Существует два атрибута безопасности: на чтение и на запись. Атрибуты безопасности определяют условия, которые должны быть выполнены для разрешения операций чтения и записи. Атрибуты безопасности ограничивают доступ на чтение (запись) при выполнении команд READ RECORD (WRITE RECORD). Если условия, определенные в атрибутах, не выполняются, карта отвергает команду READ RECORD (WRITE RECORD) для данного файла. Для системных файлов атрибуты безопасности фиксированы и определены операционной системой. Атрибуты для пользовательских файлов хранятся в блоке-описателе в User File Management File. Атрибуты безопасности представлены как набор из 8 бит (8 на чтение и 8 на запись) (рис 8). Каждый бит представляет соответствующий код. Если бит имеет значение «1», то соответствующий ему код должен быть предъявлен карте, если «0» – то он не влияет на условия доступа. bit 7 IC bit 0 PIN AC5 AC4 AC3 AC2 AC1 AC0 IC – Issuer Code (код эмитента). PIN – PIN-код. AC х – Application Code x (код для применения в пользовательских приложениях). Рис. 8 – Атрибуты безопасности. 19 Отметим правила совместного применения атрибутов безопасности. Если для файла в атрибутах задано несколько AC-кодов, то действие разрешается при предъявлении любого AC-кода из заявленных. Для всех остальных кодов действует правило «логического и», т.е. нужно предъявлять все требуемые коды. Например: AC x или AC y или AC z; PIN и AC; IC и PIN и (AC x или AC y). Код AC0 может быть заявлен в атрибутах безопасности, но он не может быть предъявлен карте. Это может использоваться, например, для того, чтобы полностью защитить от записи какой-либо файл. 1.2.4 Системные файлы. За исключением Account Data Structure, у которой специальный набор команд, работа с системными файлами ведется также, как и с файлами данных. Атрибуты безопасности системных файлов определяются операционной системой и не могут быть изменены, однако они зависят от стадии, на которой находится карта. В таблице 3 представлены системные файлы и их атрибуты безопасности. Область File ID памяти (hex) MCU-ID File FF 00 Manufacturer File Personalization File Security File FF 01 FF 02 FF 03 User File Management FF 04 File Account File Account Security File FF 05 FF 06 Атрибуты безопасности Стадия Стадия Стадия производства персонализации использования R: FREE R: FREE R: FREE W: NO ACCESS W: NO ACCESS W: NO ACCESS R: FREE R: FREE R: FREE W: IC W: NO ACCESS W: NO ACCESS R: FREE R: FREE R: FREE W: IC W: IC W: NO ACCESS R: IC R: IC R: NO ACCESS W: IC W: IC W: IC R: FREE R: FREE R: FREE W: IC W: IC W: IC R: FREE R: FREE R: IC W: IC W: IC W: IC R: FREE R: FREE R: NO ACCESS W: IC W: IC W: IC Организация записей 2 x 8 байт 2 x 8 байт 3 x 4 байта 12 x 8 байт N_OF_FILE x 6 байт 8 x 4 байта 4 x 8 байт 20 User File Data Area ID вида: в соответствии с определенной пользователем структурой xx yy xx ≠ FF Таблица 3 – Системные файлы. MCU-ID File. MCU-ID File состоит из двух записей по 8 байт. Содержание этого файла определяется в процессе производства чипа и не может быть изменено. Этот файл всегда свободно доступен для чтения, и никогда – для записи. Manufacturer File. Manufacturer File состоит из двух записей по 8 байт каждая, запись данных в него производится на стадии производства (Manufacturing Stage). После завершения этой стадии его можно свободно считывать, но запись в него становится невозможна. Завершение стадии производства происходит при «прожигании» Manufacturer Fuse – записи «1» в старший бит первого байта первой записи Manufacturer File. Примечание: в картах ACOS2 компанией ACS обычно еще до продажи уже записан Manufacturer File и «прожжен» Manufacturer Fuse. Personalization File. Personalization File состоит из трех записей по 4 байта каждая (рисунок 9). запись 1 байт 1 байт 2 Байт 3 Option Register Security Option Register N_OF_FILE байт 4 P 2 3 Рис. 9 - Personalization File. Первая запись служит для хранения определенных параметров операционной системы. Кратко рассмотрим основные из них: 1-й байт. 21 Первый байт называется Option Register. Он содержит указание на то, чтобы: - Использовать или нет Account Data Structure; - Использовать DES или 3-DES (во всех операциях); - Возможно ли изменять PIN-код (командой CHANGE PIN); - и др. параметры, касающиеся операций с электронным кошельком. 2-й байт. Второй байт называется Security Option Register. Он содержит указание на то, в каком виде должен предоставляться каждый из семи секретных кодов – в обычном виде, либо же в зашифрованном (DES или 3-DES – определяется в Option Register). 3-й байт. Байт 3 называется N_OF_FILE (Number Of File). В него записывается числовое значение – количество пользовательских файлов. Примечание. Максимальное значение этого параметра – 31, следовательно может существовать не более 31 пользовательского файла. ACOS2 оперирует только 5 младшими битами этого байта. 4-й байт. Завершение стадии персонализации происходит после записи «1» в Personalization Bit – старший бит четвертого байта первой записи Personalization File. Первые 8 байт (две записи) Personalization File передаются в качестве «Historical Bytes» в ответ на команду Answer-To-Reset. Security File. В Security File хранится следующая информация: Ключи (карты и терминала) для проведения аутентификации; Пять AC-кодов; IC-код; PIN-код; 22 Счетчик ошибок для ограничения количества попыток ввода кодов и попыток аутентификации; Число, использующееся для инициализации генератора случайных чисел. Security File доступен для чтения только во время стадий производства и персонализации, после предъявления корректного IC-кода. После завершения стадии персонализации прочитать Security File невозможно. Для записи он доступен на стадии производства и персонализации, а также в привилегированном режиме (Issuer Mode) стадии использования. Файл содержит 14 записей по 8 байт и организован следующим образом (рис. 10): Примечание: Записи №11 и 12, хранящие CNT xxx и CNT' xxx, не должны записываться во время персонализации, потому что при помещении в них неправильного значения можно заблокировать карту. Примечание: Записи №13 и 14 доступны только в версии 3.0. В них хранятся правые части ключей аутентификации. Когда выбран режим 1-DES, они не используются, хотя и присутствуют. байт 1 байт 8 Запись 1 IC-код 2 PIN-код 3 Ключ аутентификации карты K C 4 Ключ аутентификации терминала KT 5 Число, инициализирующее генератор случайных чисел 6 AC1-код 7 AC2-код 8 AC3-код 9 AC4-код 10 AC5-код 11 CNT AC1 CNT AC3 CNT AC2 CNT AC5 CNT AC4 CNT IC CNT PIN CNT 12 CNT' AC1 CNT' AC3 CNT' AC2 CNT' AC5 CNT' AC4 CNT' IC CNT' PIN CNT' 13 KT KT CNT K rd CNT Kd CNT K cr CNT' K rd CNT' Kd CNT' K cr Правая часть 3-DES-ключа аутентификации карты K C 23 Правая часть 3-DES-ключа аутентификации терминала KT 14 CNT xxx (Counter xxx) – Счетчик попыток предъявления неправильного ключа/кода xxx. CNT' xxx – Резервная копия соответствующего счетчика. Рис. 10 – Содержимое Security File. Account File, Account Security File. Эти файлы служат для работы с электронным кошельком, поэтому я их в своей работе рассматривать не буду. User File Management File. User File Management File состоит из записей, количество которых задается в параметре N_OF_FILE (в Personalization File). Каждая запись имеет размер 6 байт и хранит описатели пользовательских файлов (File Definition Block). Одна запись соответствует одному файлу. Файл записывается на стадии персонализации, и после ее завершения его можно свободно читать, а записывать в него можно после предъявления IC-кода. Порядок описателей в файле не имеет значения. При выполнении команды SELECT FILE операционная система карты просматривает все описатели, пока не находит нужный. ОС не делает каких-либо проверок на наличие ошибок – т.е. если число, записанное в параметре N_OF_FILE, не совпадает с количеством описателей – это может привести к сбою в работе карты. User File Data Area. User File Data Area – это область, в которой хранится содержимое пользовательских файлов. Важное замечание. Пользовательские файлы не могут быть удалены. Область памяти, однажды выделенная для пользовательских файлов, резервируется, и уже не может быть освобождена. 24 1.2.5 Пользовательские файлы. Структура пользовательских файлов создается на стадии персонализации. Данные, хранимые в пользовательских файлах, могут быть прочитаны с помощью команды READ RECORD, и обновлены командой WRITE RECORD, при условии соблюдения требований, заданных в атрибутах безопасности. Пользовательский файл определяется (define) при создании соответствующего описателя в User File Management File на стадии персонализации. Изменить количество записей в файле становится невозможно, после того как файл хоть раз использовался. Пользовательский файл может содержать до 255 записей, в каждой из которых может быть до 32 байт. Всего файлов может быть не больше 31. Размер файлов должен быть кратен 4 байтам. Операционная система не делает проверку на наличие свободного места, поэтому программист должен самостоятельно проследить, чтобы требуемый для файлов размер не превышал количество свободной памяти. В противном случае могут быть сбои в работе карты. Описатель файла (User File Definition Block). Каждый пользовательский файл определяется в соответствующем описателе, который содержит: идентификатор файла, размер записи, количество записей в файле, и атрибуты безопасности. Каждый описатель состоит из 6 байт, расположенных следующим образом (рис 11). Описатели всех файлов находятся в User File Management File. Они могут быть прочитаны, используя команду READ RECORD, после выбора этого файла командой SELECT FILE. Количество записей в User File Management File можно получить из параметра N_OF_FILE в Personalization File. байт 1 байт 2 байт 3 байт 4 Размер Кол-во Атрибуты Атрибуты записи записей безопасности безопасности байт 5/6 Идентификатор файла 25 (чтение) (запись) Рис. 11 – Описатель файла. Запись нового файла. Чтобы создать новый файл нужно выполнить следующие шаги (предполагается, что перед выполнение этих операций карте предъявлен ICкод): Выполнить команду SELECT FILE для файла с идентификатором FF02h (Personalization File); Увеличить на единицу значение параметра N_OF_FILE (третий байт первой записи Personalization File), чтобы выделить необходимую память (новую запись) в User File Management File; Выполнить команду SELECT FILE для файла с идентификатором FF04h (User File Management File); Создать описатель нового файла в User File Management File, выполнив команду WRITE RECORD – все 6 байт описателя за раз; Теперь новый пользовательский файл доступен для чтения/записи. 1.2.6 Безопасность карты. Операционной системой карты ACOS2 предоставляются следующие функции для обеспечения безопасности: Вычисление DES и MAC; Взаимная аутентификация карты и терминала и сессионный ключ, основанные на случайных числах; Секретные коды; Защищенный электронный кошелек. Взаимная аутентификация – это процесс, в котором и карта и считывающий терминал доказывают друг другу свою подлинность. Сессионный ключ – результат удачно проведенной взаимной аутентификации. Он используется для шифрования и расшифрования данных во время сессии. Сессия – это время от удачно проведенной взаимной 26 аутентификации, и до сброса (reset) карты, или выполнения новой команды START SESSION. Секретные коды и PIN-код используются для выборочного ограничения доступа к данным в памяти карты. Все ключи, использующиеся для вычислений DES и MAC имеют длину 8 или 16 байт, в зависимости от того, выбран ли 1-DES или 3-DES в Option Register. Самый старший бит каждого байта ключа не используется в вычислениях и никак не интерпретируется операционной системой. Взаимная аутентификация. Взаимная аутентификация основана на обмене и взаимной верификации секретных ключей между картой и считывающим терминалом. Обмен ключами происходит в защищенной форме, используя случайные числа и шифрование DES. ACOS2 поддерживает пару специальных ключей для шифрования и расшифрования при взаимной аутентификации – ключ терминала KT и ключ карты K C . Также карта имеет генератор случайных чисел, который используется в процессе взаимной аутентификации. Сессионный ключ KS – результат удачно проведенной взаимной аутентификации. Он записывается в память карты и используется для всех процессов шифрования и расшифрования во время текущей сессии. Процесс взаимной аутентификации между картой и терминалом должен проходить в определенном порядке. Если любая другая команда, не относящаяся к аутентификации, будет послана карте во время этого процесса, то он прерывается, и карта отвергает аутентификацию. Терминал должен будет перезапустить процесс заново, используя команду START SESSION. Если после успешно проведенной аутентификации карта получит команду START SESSION, она удалит предыдущий сессионный ключ, и нужно будет вырабатывать новый ключ, начав процедуру заново. Текущий 27 статус карты будет сохранен, т.е. уже предоставленные карте секретные коды не нужно будет предоставлять заново. Карта сохраняет значение счетчика CNT K T (хранится в Security File) для подсчета и ограничения последовательных неудачных выполнений команды AUTHENTICATE: Значение счетчика увеличивается на единицу при каждом неудачном выполнении команды AUTHENTICATE, например, при предъявлении неправильного KT ; Значение счетчика обнуляется при успешном выполнении команды AUTHENTICATE; Если значение счетчика достигнет 8, карта больше не станет выполнять команду AUTHENTICATE. В этом случае все зависящие от этой команды механизмы безопасности (например, предъявление секретных кодов) будут заблокированы. Это состояние необратимо, и оно может сделать карту непригодной для использования. Счетчик хранится в Security File. Значение счетчика возвращается картой в ответ на команду AUTHENTICATE при предъявлении ей неправильного KT . 1.2.7 Секретные коды. Секретные коды используются для разграничения доступа к данным, хранимым в пользовательских файлах, а также для некоторых команд, исполняемых картой. ACOS2 имеет следующие секретные коды: Пять AC-кодов (Application Code – для применения в пользовательских приложениях); Один IC-код; Один PIN-код. AC-коды. Пять кодов для применения в пользовательских приложениях (AC1 .. AC5), используются для ограничения доступа к данным пользовательских 28 файлов. AC-код имеет длину 8 байт. В зависимости от значений специальных битов (по одному на каждый AC-код) в Security Option Register в Personalization File, каждый код должен предъявляться карте в зашифрованном (текущим сессионным ключом), либо незашифрованном виде. IC-код. IC-код используется для контроля доступа к файлам и для привилегированных функций карты. IC-код имеет длину 8 байт. В зависимости от значения специального бита в Security Option Register в Personalization File, код должен предъявляться карте в зашифрованном (текущим сессионным ключом), либо незашифрованном виде. PIN-код. PIN-код используют для контроля доступа к пользовательским файлам. Он имеет длину 8 байт. PIN-код предъявляется карте с помощью команды SUBMIT CODE. В зависимости от значения специального бита в Security Option Register в Personalization File, код должен предъявляться карте в зашифрованном (текущим сессионным ключом), либо незашифрованном виде. Изменить PIN-код можно специальной командой CHANGE PIN, если значение соответствующего бита в Option Register в Personalization File позволяет это делать. В зависимости от значения бита PIN_DES (в Security Option Register в Personalization File), новый код должен записываться на карту в зашифрованном (текущим сессионным ключом), либо незашифрованном виде. Команду CHANGE PIN можно выполнять и на стадии использования. Перед процедурой изменения PIN-кода старый код должен быть предъявлен карте. Из соображений безопасности, команда CHANGE PIN может быть выполнена только сразу после проведения взаимной аутентификации. Никаких других команд между ними быть не должно, иначе команда CHANGE PIN будет отвергнута. 29 Счетчики попыток неправильного ввода кода. Для каждого секретного кода картой поддерживается свой счетчик попыток неправильного ввода кода. Это делается для подсчета и ограничения последовательных неудачных попыток ввода кода – выполнений команды SUBMIT CODE: Значение соответствующего счетчика увеличивается на единицу при каждом неудачном выполнении команды SUBMIT CODE, т.е. когда карте предъявляется неправильный код; Значение соответствующего счетчика обнуляется при успешном выполнении команды SUBMIT CODE; Если значение соответствующего счетчика достигнет 8, карта больше не станет выполнять команду SUBMIT CODE для данного кода. Счетчики хранятся в Security File. Значение счетчика для соответствующего кода возвращается картой в ответ на неуспешно выполненную команду SUBMIT CODE. Резервная копия всех счетчиков также хранится в Security File. Она используется для предотвращения повреждения этой важной информации, если в процессе ее обновления произойдет сброс (reset) карты. 1.2.8 ATR (Answer-To-Reset). После аппаратного сброса (reset) карта передает Answer-To-Reset (ATR), в соответствии со стандартом ISO 7816 часть 3. В ответе ATR передаются следующие данные (рис. 12): TS T0 TA1 TB1 TD1 3Bh BEh 11h 00h 00h 14 Historical Character Рис. 12 – ATR. 14 байт, передающихся в Historical Character, организованы следующим образом (рис. 13): 30 T1 T2 T3 10h/ 41h 01h 20h/ 38h T4 T5 T6 Personalization File, байты 1-3 T7 T8 T9 T10 T11 Personalization File, байты 4-8 T12 T13 T14 Стадия 90h 00h Рис. 13 - Historical Character. T1 – T3 – Информация о версии карты: T1 = 41h = ACOS T2 = 01h = Версия 1 (Version 1) T3 = 10h / 20h / 38h = Издание (Revision) 1.0 / 2.0 / 3.8 T4 – T11 – Параметры: T4 = Option Register T5 = Security Option Register T6 = N_OF_FILE T7-T11 = Байты 4-8 Personalization File T12 – Стадия: T12 = 0 = Стадия использования T12 = 1 = Стадия производства T12 = 2 = Стадия персонализации 1.2.9 Команды ACOS2. Рассмотрим команды, выполняемые картой ACOS2 (таблица 4): START SESSION AUTENTICATE Начать процесс взаимной аутентификации, и сгенерировать случайное число карты RNDC Аутентифицировать терминал и карту, и вычислить сессионный ключ (послав карте случайное число терминала RNDT) SUBMIT CODE Предъявить секретный код карте SELECT FILE Выбрать файл данных для чтения и записи READ RECORD Прочитать указанное количество байт из одной записи 31 выбранного в данный момент файла WRITE RECORD Записать указанное количество байт в одну запись выбранного в данный момент файла INQUIRE ACCOUNT CREDIT DEBIT Служат для операций с электронным кошельком. REVOKE DEBIT CHANGE PIN GET RESPONSE Установить новый PIN-код Получить ответ от карты. Используется сразу после команд AUTENTICATE или INQUIRE ACCOUNT Таблица 4 – Команды ACOS2. Команды READ RECORD и WRITE RECORD. Команда READ RECORD (WRITE RECORD) выполняется после того, как файл выбран командой SELECT FILE. Условия доступа, заданные в атрибутах безопасности данного файла, проверяются до выполнения команды чтения (записи). Если они не выполняются – команда отвергается картой. При выполнении команды READ RECORD могут быть прочитаны данные только одной записи. Количество байт, которые нужно считать, указываются при выполнении команды. Максимальное количество байт – соответствует длине записи. Если количество байт (= N) меньше длины записи – команда возвратит первые N байт записи. При выполнении команды WRITE RECORD данные могут быть записаны только в одну запись. Количество байт, которые нужно записать, указывается при выполнении команды. Максимальное количество байт – соответствует длине записи. Если количество байт (= N) меньше длины записи – команда перезапишет первые N байт записи, остальные останутся без изменения. 1.3 Smart Card Development Kit (SDK). SDK - комплект разработчика приложений, работающих со смарткартами. 32 Комплект предназначен для разработчиков программного обеспечения с применением интеллектуальных пластиковых карт (смарт-карт). При разработке программного обеспечения я использовал следующие классы библиотеки ESDK2.dll: PCSCInfo; PCSCMonitoring; PCSCCard_ACOS; SafeArrayHelper. Класс PCSCInfo Класс позволяет получать информацию о ридерах и картах, в них вставленных. Методы и свойства которые я использовал: ListReaders ([out,retval] SAFEARRAY(BSTR) *Readers) - возвращается список названий ридеров. Возвращаются только доступные ридеры; IsCardInserted ([in] BSTR ReaderName,[out,retval] VARIANT_BOOL *Inserted) - определят вставлена ли карта в ридер. Параметры: [in] ReaderName - Имя ридера, результат: [VARIANT_BOOL] VARIANT_TRUE = карта вставлена, VARIANT_FALSE = карта не вставлена; GetCardATR ([in] BSTR ReaderName, [out,retval] SAFEARRAY(byte) *ATR) - возвращает ATR карты. Параметры: [in] ReaderName - имя ридера, результат: [SAFEARRAY(byte)] - ATR вставленной карты. Если карта не вставлена или не отвечает, то возвращается пустой массив (ATR позволяет опознать тип карты. ATR представляет собой последовательность байтов максимальной длиной 36, и доступен без установления подключения к карте); Класс PCSCMonitoring 33 Класс позволяет осуществлять наблюдение за приходом/уходом ридеров и вставлением/извлечением карт. Функция мониторинга может быть полезна в приложениях, работающих с несколькими ридерами. Мониторинг производится в отдельном потоке. После выполнения метода InitializeMonitoring могут вызываться события. Внутри класса имеется очередь событий. Это значит, что пока вы обрабатываете событие, цикл опроса продолжается, и все новые события поступают в очередь. С приходом нового ридера автоматически проверяется наличие карты в нем. Если карта присутствует, то после события прихода ридера вызывается событие вставления карты. С уходом ридера, если в нем была вставлена карта, то перед событием ухода ридера вызывается событие извлечения карты. Таким образом, если вас интересует только мониторинг карт, не обязательно обрабатывать события прихода/ухода ридеров. Методы которые я использовал: InitializeMonitoring() - запустить мониторинг; StopMonitoring() - завершить мониторинг. Операция автоматически выполняется при уничтожении класса. События класса: OnReaderArrived([in] BSTR ReaderName) - появился новый ридер. Параметры: [in] ReaderName - имя ридера; OnReaderGone([in] BSTR ReaderName) - ридер перестал существовать. Параметры: [in] ReaderName - имя ридера; OnCardInserted([in] BSTR ReaderName,[in] VARIANT /*SAFEARRAY(byte)*/ ATR) - карта вставлена. Параметры [in] ReaderName - имя ридера, [in] ATR - ATR карты. Для совместимости передается в виде VARIANT, содержащего SAFEARRAY(byte). OnCardRemoved([in] BSTR ReaderName) - карта извлечена. Параметры: [in] ReaderName - имя ридера. Класс PCSCCard_ACOS 34 Класс для работы с картами ACOS. Класс позволяет задействовать все возможности карт ACOS, за исключением одной: не поддерживается опция производителя RECORD_NUMBERING (нумерация записей файлов с единицы). Методы которые я использовал: GetVersion([out,retval] unsigned long *Version) - получить версию карты. Результат: [unsigned long]. Версия карты. Возможные значения представлены в таблице 5. Значение Описание ACOS_TYPE_12 ACOS1 и ACOS2. Эти карты отличаются только скоростью передачи данных. В остальном, с точки зрения программиста они неотличимы. ACOS_TYPE_3_8K ACOS3 8K ACOS_TYPE_3_16K ACOS3 16K Таблица 5 – возможные значения функции GetVersion. Verify ([in] unsigned char CodeNumber,[in] SAFEARRAY(byte) Code,[in] VARIANT_BOOL SubmitEncrypted) - проверить код доступа. Параметры: [in] CodeNumber - номер кода доступа. Возможны следующие значения : ACOS_CODE_AC1, ACOS_CODE_AC2, ACOS_CODE_AC3, ACOS_CODE_AC4, ACOS_CODE_AC5, ACOS_CODE_PIN, ACOS_CODE_IC. [in] Code - значение кода доступа. Указатель на область памяти длиной 8 байт. [in] SubmitEncrypted - VARIANT_TRUE = проверять код в зашифрованном виде, VARIANT_FALSE = проверять код в открытом виде. ChangePIN([in] SAFEARRAY(byte) NewPin, [in] VARIANT_BOOL PinIsEncrypted) - сменить PIN код. Параметры: [in] NewPin - Новое значение PIN кода длиной 8 байт. [in] SubmitEncrypted VARIANT_TRUE = менять код в зашифрованном виде, 35 VARIANT_FALSE = менять код в открытом виде (Для изменения PIN кода требуется сначала проверить его текущее значение. Необходимо, чтобы в регистре настроек стадии персонализации была включана опция ACOS_PERSOPT_PIN_ALT). SelectFile([in] unsigned short FID, [out,retval] unsigned char *LastSelectedFileDefinitionBlockIdx) - выбрать файл. Параметры: [in] FID - идентификатор файла. Результат: [unsigned char] - номер файлового дескриптора, соответствующего выбранному файлу. Если выбран системный файл, то возвращается значение 0xFF (Выбор файла необходим перед использованием функций ReadRecord и WriteRecord). ReadRecord([in] unsigned char RecordNumber,[in] unsigned char RecordLength) - прочитать запись. Параметры: [in] RecordNumber номер записи в диапазоне от 0 до количества записей в файле минус 1. [in] RecordLength - длина читаемого блока в диапазоне от 1 до длины записи файла. WriteRecord([in] unsigned char RecordNumber,[in] SAFEARRAY(byte) Data) - Сохранить запись. Параметры: [in] RecordNumber - номер записи в диапазоне от 0 до количества записей в файле минус 1. [in] Data - сохраняемые данные. Длина сохраняемого блока должна быть в диапазоне от 1 до длины записи файла. Класс SafeArrayHelper Класс-помощник для выполнения операций с байтовыми массивами SAFEARRAY. Представленные операции могут потребовать специального программирования. Чтобы его избежать, возможно, воспользоваться классом-помощником. Методы которые я использовал: Str2ByteArrayA([in] BSTR Str,[out,retval] SAFEARRAY(byte) *SA) строка => байтовый массив ANSI. Параметры: [in] Str - произвольная 36 строка. Результат: [SAFEARRAY(byte)] - массив байтов, содержащий конвертированные в ANSI символы исходной строки. ByteArray2StrA([in] SAFEARRAY(byte) SA, [out,retval] BSTR *Str) байтовый массив ANSI -> строка. Параметры: [in] SA - массив байтов, содержащий ANSI символы. Результат: [BSTR] - строка. 37 Глава 2 Реализация программного обеспечения для работы с индивидуальными электронными картами пациента. 2.1 Разработка класса, упрощающего разработку приложений ориентированных на работу со смарт-картами ACOS. Так как для хранения медицинской информации о пациенте была выбрана смарт-карта, стало необходимым изучить и применить для разработки программного обеспечения Smart Card Development Kit (SDK). Но при подробном изучении стало очевидным, что применение SDK крайне неудобно. Это обусловлено тем, что необходимо выполнять много проверок для корректной работы смарт-карты, а так же много рутинных операций для выполнения простых команд, например, таких как запись или чтение со смарт-карты. Следуя из этого, я посчитал целесообразно разработать свой класс на основе SDK. Который позволяет избавиться от многих рутинных операций, в том числе связанных с аппаратными устройствами. Так же в классе реализовано проверки на критические ошибки, которые могут привести к сбою работы смарт-карты. Отмечу, что разработанный мною класс ориентирован только на смарт-карты типа ACOS. В дальнейшем речь пойдет только про смарт-карты типа ACOS. 2.1.1 Свойства класса. Класс имеет следующие свойства: currentReader: String – свойство определяет какой кард-ридер выбран, при записи данного свойства, класс проверяет вставлена ли смарт-карта в данный карт-ридер (чтение\запись); IsCardInserted: Boolean – свойство определяет вставлена ли смарткарта в выбранный карт-ридер. Значение true – карта вставлена, false – карта не вставлена в карт-ридер (только чтение); 38 Connect: Boolean – свойство определяет подключение к смарт-карте. Значение true – смарт-карта подключена, false – смарт-карта не подключена (только чтение); Version: Cardinal – хранится версия подключенной смарт-карты (только чтение); IC_Submited: Boolean – свойство определяет предъявлен ли IC код смарт-карте. Значение true – IC код предъявлен, false – IC код не предъявлен (только чтение); PIN_Submited: Boolean – свойство определяет предъявлен ли PIN код смарт-карте. Значение true – PIN код предъявлен, false – PIN код не предъявлен (только чтение); ACx_Submited[Index: Integer]: Boolean – свойство определяет предъявлен ли какой либо из AC кодов. Index соответствует номеру AC кода. Значение true – соответственный AC код предъявлен, false – соответственный AC код не предъявлен (только чтение); ListReaderNames: BSTRArray – свойство содержит список готовых карт-ридеров. Список доступен только после вызова функции HGetListReaders (только чтение); ReadersCount: Integer – количество найденных карт-ридеров (только чтение); Log: TStringList – в данном свойстве хранится записи действий над смарт-картой (Ведется лог, только чтение); EnabledLog: Boolean – свойство определяет включение или выключение лога. Значение true – включить лог, false – выключить лог. По умолчанию лог включен (чтение, запись); LogExceptionOLE: TStringList – в данном свойстве хранить список OLE ошибок (только чтение); LogExceptionOther: TStringList – в данном свойстве хранится список других ошибок (только чтение); 39 ArrayFileUsers[Index: Integer]: TFileSmartCard – в свойстве хранится массив пользовательских файлов хранящихся на смарт-карте. Данный массив доступен только после подключение к смарт-карте, тип TFileSmartCard будет описан ниже (только чтение); CountFileUsers: Integer – количество пользовательских файлов хранящихся на смарт-карте (только чтение); Тип TFileSmartCard представляет собой запись из: IDFile: String – идентификатор файла; SizeRecord: Integer – размер записи в файле; CountRecord: Integer – количество записи в файле; SecurityAtr_Write: TAtr_ Security – атрибут безопасности на запись файла; SecurityAtr_Read: TAtr_ Security – атрибут безопасности на чтение файла; Тип TAtr_ Security представляет собой запись из: ACx: array [0..5] of Boolean – массив AC кодов. Значение true – определяет, что данный код должен быть предъявлен при определенной операции чтение или записи, false - иначе; PIN: Boolean – секретный PIN код. Значение true – что данный код должен быть предъявлен при определенной операции чтение или записи, false - иначе; IC: Boolean – секретный IC код. Значение true – что данный код должен быть предъявлен при определенной операции чтение или записи, false иначе; Так же класс содержит экземпляры классов из библиотеки SDK ESDK2.dll (Данные классы описаны в первой главе),: 40 MonitoringIfaceVar: TPCSCMonitoring; InfoIfaceVar: IPCSCInfo; CardIfaceVar: IPCSCCard; ACOSIfaceVar: IPCSCCard_ACOS; SAHelpIfaceVar: ISafeArrayHelper; При создании экземпляра моего класса, создаются классы представленные выше и могут быть использованы на прямую через мой класс. 2.1.2 Методы класса. Класс имеет следующие методы: Функция HGetListReaders: BSTRArray. Данная функция позволяет определить все доступные и готовые картридеры в системе и записывает их в свойство ListReaderNames, а количество в свойство ReadersCount. Так же функция возвращает BSTRArray массив с найденными карт-ридерами. В данной функции используется функция ListReaders из класса PCSCInfo. Функция HReadRecord (fileID: word; recNum,recLen: integer): string; Данная функция позволят считывать из файла информацию, хранящиеся на смарт-карте, и конвертирует считанные данные в строку. Используется методы SelectFile и ReadRecord из класса PCSCCard_ACOS. Параметры: fileID – идентификатор файла с которого надо считать данные; recNum – порядковый номер записи в файле, которую нужно считать. Нумерация записей в файле начинается с 0; recLen – Количество байт, которые нужно считать. Может быть меньше длины записи. 41 Результат: Функция возвращает прочитанную строку. Процедура HWriteRecord(fileID: word; recNum,recLen: integer; recData: string); Данная процедура позволяет сохранять информацию в файл, хранящиеся на смарт-карте, и конвертирует исходную информацию. Используется методы SelectFile и WriteRecord из класса PCSCCard_ACOS. Параметры: fileID – Идентификатор файла, в который нужно записать данные. recNum – Порядковый номер записи в файле, в которую нужно записать данные. Нумерация записей в файле начинается с 0. recData – Строка, содержащая данные. Может быть меньше длины записи. Функция HSubmitCode(codeNum: byte; codeText: string; Encrypt: Boolean): Boolean; Данная функция предназначена для предъявления секретных кодов смарт-карте. Используется методы Verify из класса PCSCCard_ACOS. Параметры: codeNum - Номер кода. Допустимы следующие значения: o 1..5 = AC1..AC5; o 6 = PIN; o 7 = IC. codeText - Строка, содержащая непосредственно сам код. Encrypt - параметр определяющий в каком виде проверять секретный код. Если true – то в зашифрованном виде, false – в открытом. 42 Результат: функция возвращает true, если секретный код подтвержден смарткартой и false, если не подтвержден. Функция ConnectCard: Boolean; Данная процедура осуществляет подключение к смарт-карт, если та вставлена в карт-ридер, который определен в свойстве currentReader. При вызове процедуры она определяет версию и записывает ее в свойство Version. Так же данная процедура определяет количество пользовательских файлов и их дескрипторы. Если пользовательские файлы существуют, то процедура записывает их в массив ArrayFileUsers, а количество в CountFileUsers. Используется следующие методы: Connect, GetVersion, GetSerialNumber из класса PCSCCard_ACOS. Если подключение произошло успешно тогда, функция возвращает true, иначе false. Функция DisconnectCard: Boolean. Данная функция осуществляет отключение от смарт-карты. Функция выполняется только в том случае, если до этого было выполнено успешное подключение к смарт-карте. При вызове функции выполняется обнуление некоторых свойств, а конкретно: IC_Submited,PIN_Submited; Connect, ACx_Submited, ArrayFileUsers, CountFileUsers. Используется следующий метод: Disconnect из класса PCSCCard_ACOS. При удачном отключении функция возвращает true, иначе false. Функция CreateFile(FileID:word;CountRec,LenRec: Integer;Atr_Write, Atr_Read: TAtr_ Security): Boolean; Данная функция позволяет создавать новые файлы. Данная функция выполняется, только когда было выполнено успешное подключение к смарткарте, и смарт-карта находится на стадии персонализации. Так как на стадии использования уже не возможно добавлять пользовательские файлы. Отмечу, что изменить количество записей в файле становится невозможно, после 43 того как файл хоть раз использовался. Так же функция проверят все входящие параметры на допустимые значения. После того как параметры проверены увеличивается количество файлов N_OF_FILE в Personalization File. Далее создается описатель создаваемого файла в User File Management File соответствующим входящим параметром. Если в процессе создании произошла какая либо ошибка, действия откатываются назад, чтобы избежать сбоя работы смарт-карты. Параметры: FileID – идентификатор создаваемого файла. Должен быть в промежутке 0x0000…0xFF00; CountRec – количество записей в создаваемом файле. Должен быть не больше 255. LenRec – длина записи в создаваемом файле. Должен быть не больше 32 байт. Atr_Write – атрибут безопасности на запись создаваемого файла. Atr_Read - атрибут безопасности на чтение создаваемого файла. Результат: при успешном создании файла функция возвращает true, иначе false. После успешного создания файла функция обновляет массив пользовательских файлов ArrayFileUsers и увеличивает количество файлов. Функция ChangeCode(numCode: Integer; newCode: String): Boolean; Данная функция позволяет изменять секретные коды смарт-карты. Отмечу, что данная функция доступна только после предъявления IC кода. Если IC код предъявлен карте, то функция просто переписывает секретный код, хранящийся в Security File. Параметры: numCode – номер кода который нужно изменить. Возможные значения: 44 o 1..5 = AC1..AC5; o 6 = PIN; o 7 = IC. newCode – строка являющаяся новым секретным кодом. Должна быть не больше 8 байт. Результат: при удачном изменении кода функция возвращает true, иначе false. Функция HChangePIN(newPIN: String; Encrypt: Boolean): Boolean; Данная функция позволяет изменять PIN код, после того как старый PIN код был предъявлен смарт-карте. Так же необходимо, чтобы в регистре настроек стадии персонализации была включена опция ACOS_PERSOPT_PIN_ALT. Параметры: newPIN – строка содержащая новый PIN код. Должна быть не больше 8 байт; Encrypt – параметр определяющий в каком виде менять PIN код. Если true – то в зашифрованном, false – в открытом. Результат: при успешной смене PIN кода функция возвращает true, иначе false. Функция EditAtrWriteRead(FileID: Word; AtrWrite, AtrRead: TAtr_ Security):Boolean. Данная функция позволяет изменять атрибуты безопасности уже существующего файла. Функция доступна только после предъявление IC кода смарт-карте. После проверки наличие файла на смарт-карте, функция переписывает атрибуты безопасности соответствующего описателя файла. Параметры: 45 FileID – идентификатор файла которому нужно изменить атрибуты безопасности; AtrWrite – новый атрибут безопасности на запись; AtrRead – новый атрибут безопасности на чтение; Результат: при успешном изменении атрибутов безопасности функция возвращает true, иначе false. Функция ASafeArrayToByteArray(psa: PSafeArray; out byteCount: integer): byteArrayType; Данная функция является вспомогательной. Конвертирует массив SafeArray в байтовый массив. Параметры: psa: - массив SafeArray который нужно конвертировать; out byteCount – количество байт. Результат: функция возвращает байтовый массив, количество байт в данном массиве определяет параметр byteCount. Функция ASafeArrayFromByteArray(pba: PByteArray; baSize: Integer): PSafeArray; Данная функция является вспомогательной. Конвертирует байтовый массив в массив SafeArray. Параметры: pba: - байтовый массив который нужно конвертировать; baSize – размер байтового массива. Результат: функция возвращает массив SafeArray. 46 В итоге был разработан класс, упрощающий разработку приложений ориентированных на работу со смарт-картами ACOS. Приведу пример использования моего класса, допустим, нам необходимо узнать версию и дескрипторы всех пользовательских файлов смарт-карты. Необходимо выполнить следующие операции: 1. Создать экземпляр моего класса с помощью конструктора Create; 2. Вызвать метод HGetListReaders. После чего нам доступен список найденных карт-ридеров в свойстве ListReaderNames, и их количество в свойстве ReadersCount; 3. После чего нам необходимо выбрать нужный карт-ридер из списка ListReaderNames, записав в свойство currentReader выбранный картридер. При выборе карт-ридера, класс проверяет вставлена в него смарт-карта или нет. Если вставлена то в свойство IsCardInserted записывается true, иначе false. 4. Если смарт-карта вставлена, то подключаемся к ней функцией ConnectCard. После чего нам доступна версия смарт-карты и список всех пользовательских файлов, если такие существуют, в ArrayFileUsers. Таким образом, мы получили большую часть информации о смарт-карте всего за 4 операции. 2.2 Разработка модели разграничения доступа к информации на смарткарте. Существует разная медицинская информация, которая должна быть доступна не всем врачам или доступна только группе врачей. Так же врач не должен изменять информацию на смарт-карте пациента, без ведома самого пациента. Пациент тоже не должен изменять информацию на своей смарткарте. Но в тоже время должен быть максимально быстрый доступ к той или иной информации на смарт-карте. В такой ситуации надо найти «золотую 47 середину», когда информация максимально защищена и доступна. Возникает идея разграничить доступ к информации по уровням секретность и уровням доступа, а так же выделить область данных, которая доступна всем без исключений. Смарт-карта ACOS2 (которую я использую для разработки) позволяет разграничить доступ к данным за счет атрибутов безопасность и семи секретных кодов. Ограничиваясь архитектурой данной смарт-карты, и ситуацией когда в ЛПУ нет централизованной информационной системы, я разработал следующею модель разграничения доступа к информации на смарт-карте. 2.2.1 Логические компоненты модели. В разрабатываемой мной модели будет участвовать смарт-карта пациента и смарт-карта врача, а так же сами врач и пациент, знающие свои секретные PIN коды. 1. На смарт-карте пациента будет храниться два типа информации это: персональные данные и медицинские данные. Медицинские данные делятся на общедоступные и закрытые. Общедоступные данные могут получить любой без предъявления секретного кода. Закрытые данные делятся на уровни секретности; 2. На смарт-карте врача будет храниться его персональные данные, а так же уровень доступа. Так как мы рассматриваем ситуацию, когда в ЛПУ нет централизованной информационной системы, а есть только изолированные компьютеры, то вся информация должна хранится на смарт-карте. В такой ситуации я ограничился четырьмя уровнями секретности и четырьмя уровнями доступа. Четыре уровня доступа соответствует первым четырем AC кодам смарт-карты. То есть AC1 соответствует первому уровню доступа, AC2 второму и т.д. Следуя, какой уровень доступа у врача, он должен знать соответственные AC коды. Если у врача уровень доступа третий, то он 48 должен знать первые три AC кода. Но это крайне не удобно – запоминать такое количество кодов. Поэтому было решено хранить эти секретные коды на смарт-карте врача, доступ к которым можно получить только после предъявления PIN кода который знает врач. В итоге получается что на смарткарте пациента хранится четыре файла, в которых хранится медицинская информация о пациенте, а на смарт-карте врача его уровень доступа. 2.2.2 Структура пользовательских файлов на смарт-карте. В соответствии с выше представленной ситуации была разработана следующая структура пользовательских файлов. В таблице 6 представлена структура файлов смарт-карты пациента. Структура File ID Содержание записей, размер Размер Атрибуты файла безопасности 2 записи 00А1 ФИО пациента x 64 байта 32 байта 32 записи 00А2 Персональные данные x 1024 байт 32 байта 00A3 Тип карты (пациента или врача) 1 запись x 1 байт 1 байт 1 запись 00A4 AC 5 код x 8 байт 8 байт Медицинские данные 0001 (1 уровень секретности) Медицинские данные 0002 (2 уровень секретности) 40 записей x 1280 байт 32 байта 40 записей x 32 байта 1280 байт R: free W: IC; PIN; R: AC1…AC5; W: IC; PIN; R: free; W: AC0; R: PIN; W: IC; R: AC5; AC1; W: AC1; PIN; R: AC5; AC2; W: AC2; PIN; 49 Медицинские данные 0003 (3 уровень секретности) Медицинские данные 0004 x Медицинские данные (открытая зона) 1280 байт 32 байта 40 записей (4 уровень секретности) 00 05 40 записей x 1280 байт 32 байта 50 запись x 1600 байт 32 байт R: AC5; AC3; W: AC3; PIN; R: AC5; AC4; W: AC4; PIN; R: free; W: PIN; AC4; Таблица 6 - Структура пользовательских файлов смарт-карты пациента. В таблице 7 представлена структура пользовательских файлов смарт-карты врача. Структура File ID Содержание записей, размер Размер Атрибуты файла безопасности 2 записи 00А1 ФИО врача x 64 байта 32 байта 32 запись 00А2 Данные врача x 1024 байт 32 байт Тип карты 00A3 (Пациента или врача) 1 запись x 1 байт 1 байт 2 записи 0003 Id врача x 64 байта 32 байта Секретные AC 0004 коды смарткарты пациента 4 записи x 8 байт 32 байта R: free; W: IC; PIN; R: PIN; W: IC; PIN; R: free; W: AC0; R: free; W: AC0; R: PIN; W: IC; PIN; Таблица 7 - Структура пользовательских файлов смарт-карты врача. 50 Отмечу, что данные структуры не окончательные и приложение представленное ниже может менять структуру пользовательских файлов, не переписывая при этом приложения. Секретные коды: IC код каждой смарт-карты знает только администратор; PIN код смарт-карты пациента или врача знает только пациент или врач соответственно; AC1...AC4 коды смарт-карты пациента являются общими для всех смарт-карт пациентов; AC5 код смарт-карты пациента хранится в файле 00A4; Рассмотрим подробнее структуру пользовательских файлов смарткарты пациента и врача. Структура файлов смарт-карты пациента: Файл 00A1. В данном файле хранится фамилия, имя, отчество пациента. Он состоит из двух записей, но они должны интерпретироваться как одна текстовая строка. Размер в 32 символа является недостаточным для сохранения в нем полного имени. Файл свободно доступен для чтения. Это позволяет в любом случае определить принадлежность карты – даже в отсутствии ее держателя, знающего PIN-код. Но для записи файла требуется предъявления IC и PIN кодов. В такой ситуации администратор не может поменять ФИО пациента без ведома самого пациента, так как он не знает PIN кода. Файл 00А2. В данном файле хранятся персональные данные пациента. Он состоит из 32 записей по 32 байта, что представляет собой одно большое текстовое поле. В каком формате представлять данные, рассмотрено ниже. Персональные данные можно прочитать после предъявления AC5 кода, который хранится в файле 00A4 или любого другого AC кода которые хранятся на смарт-карте врача. 51 Файл 00A3. Файл занимает всего 1 байт. Значение данного байта определяет, кому принадлежит данная смарт-карта врачу или пациенту. Значение “1” – смарт-карта врача, “0” – смарт-карта пациента. Файл свободен для чтения, но защищен от записи AC0 кодом, то есть его нельзя переписать. Файл 00A4. В данном файле хранится AC5 код. Доступен для чтения только после предъявления PIN кода пациента. Сменить AC5 можно только после предъявления IC кода. Файлы 0001-0004. В данных файлах хранится медицинская информация, уровень секретности соответствует идентификатору файла. Прочитать данный файл можно только после предъявления AC5 кода, или предъявления AC кода, номер которого соответствует идентификатору файла. А изменять только после совместного предъявления PIN кода и AC кода номер, которого соответствует идентификатору файла. Файл 0005. В данном файле хранится медицинская информация, которую можно прочитать любому без предъявления секретного кода. Но записать только после совместного предъявления PIN кода и любого AC кода кроме AC5. Структура файлов смарт-карты пациента: Файл 00А1. В данном файле хранится фамилия, имя, отчество врача. Структура аналогична структуре файла 00А1 смарт-карты пациента. Файл 00А2. В данном файле хранится данные о враче. Изменить данные можно только после совместного предъявления IC и PIN кодов. А прочитать только после предъявления PIN кода. Файл 00A3. Файл занимает всего 1 байт. Значение данного байта определяет, кому принадлежит данная смарт-карта врачу или пациенту. 52 Файл 0003. В данном файле хранится идентификатор врача. Файл свободен для чтения, но защищен от записи, то есть идентификатор врача невозможно перезаписать. Файл 0004. В данном файле хранятся общие AC коды смарт-карт пациентов, кроме пятого. Количество хранящихся AC кодов указывают на уровень доступа врача. Файл доступен для чтения после предъявления PIN кода, для записи совместного предъявления IC и PIN кодов. Благодаря такой структуре файлов и правилам совместного использования секретных кодов, мы добиваемся, что пациент не может менять информацию на своей смарт-карте и врач не может менять информацию без ведома пациента. Но пациент может просмотреть всю информацию ведя свой PIN код. Так же и врач может просмотреть информацию о пациенте только ту, которая соответствует его уровню доступа. 2.2.3 Принцип работы разработанной модели. Рассмотрим несколько ситуаций, которые могут произойти. Например ситуация когда карта пациента находится у врача и ему необходимо получить некоторую информацию: Врач вставляет свою смарт-карту и водит свой PIN код, после чего он получает доступ к файлам на смарт-карте; Приложение получает, какие у него хранятся AC коды, и определяет уровень доступа врача и записывает их в память; После чего врач вставляет смарт-карту пациента, и приложение предъявляет AC коды, считанные со смарт-карты врача. И врач получает доступ к той информации, к которой соответствует его уровень доступа. 53 Рассмотрим ситуацию, когда пациенту необходимо получить медицинскую информацию, вне какого либо ЛПУ: Пациент вставляет свою смарт-карту, вводит PIN код и получает доступ к файлу, где хранится AC5 код, после чего приложение считывает AC5 код и предъявляет его смарт-карте и пациент получает доступ на всю необходимую информацию. Так же рассмотрим когда необходимо сделать запись на смарт-карту пациента: Врач вставляет свою смарт-карту и вводит PIN код; Приложение получает, какие у него хранятся AC коды, и определяет уровень доступа врача и записывает их в память; После чего пациент вставляет свою смарт-карту и вводит свой PIN код; Приложение предъявляет AC коды смарт-карте пациента, считанные со смарт-карты врача. И врач получает доступ к записи только в те файлы у которых уровень секретности не выше уровня доступа врача. 2.3 Формат представления данных на смарт-карте. При разработке системы передо мною встал вопрос, в каком формате хранить данные о пациенте на смарт-карте. В данной ситуации можно пойти двумя путями: 1. Разрабатывать свой формат; 2. Взять существующий формат. Я не стал разрабатывать свой формат, так как это не тривиальная задача и ей должны занимается специалисты. Использовать существующий формат не целесообразно, так как одной из серьезных проблем в Российской медицине является отсутствие стандартов на хранение и передачу 54 информации в электронном виде. Используя существующий формат данных, мы загоняем себя в узкие рамки. Так же на формат должен соответствовать следующим критериям: 1. Формат должен быть компактный (так как объем памяти не большой); 2. Формат должен быть универсальным (то есть, понятен другим системам); 3. Формат должен легко экспортироваться, импортироваться. Я пошел другим путем – в своем программном обеспечении я предусмотрел возможность описывать любой формат данных с помощью языка XML. XML обладает следующими преимуществами: все прочие форматы могут быть представлены в виде XML; XML позволяет создать компактный формат данных; XML является обычным текстовым файлом, поэтому не возникает проблем с его формированием и чтением; XML поддерживается почти всеми разработчиками ПО и технологичен для разработки; Так же формат на основе XML позволяет обмениваться медицинскими данными, между различными МИС в которых форматы данных существенно различаются. То есть Электронная Медицинская Карта является форматом промежуточного хранения информации. 2.4 Разработка комплекса программ для работы с индивидуальными картами пациентов. Комплекс состоять из следующих программ: Программы администратора; Программа для чтения и записи медицинской информации о пациенте на смарт-карту; Программа для просмотра данных пациента; 55 Данный комплекс разработан на основе моего класса. Программа для чтения и записи медицинской информации и программа для просмотра данных пациента не являются готовыми программными продуктами. Данные программы являются прототипами реализовывающие разработанную мной модель разграничения доступа. 2.4.1 Программа администратора. Программа администратора предназначена для администрирования смарт-карт. Основные функции программы администратора: 1. Разметка новых смарт-карт с указанными параметрами; 2. Запись, редактирование персональных данных пациентов или врачей; 3. Смена секретных кодов (IC, AC1..AC5); 4. Создавать, редактировать формат данных, в котором информация о пациенте будет храниться на смарт-карте; 5. Устанавливать уровень доступа врачам; 6. Экспорт/импорт персональных данных. Главное окно программы представлено на рисунок 14. 56 Рис. 14 – Программа администрирования (Главное окно). Поясним основные моменты работы с программой. В списке, называемом «Список карт-ридеров», отображается список всех найденных в системе карт-ридеров. Их поиск происходит автоматически при запуске программы. Для выбора карт-ридера щелкаем по его названию в списке. После этого программа определяет, вставлена ли в выбранный карт-ридер смарт-карта, если не вставлена, то в нижней части главного окна программы выводится статус – смарт-карта не вставлена. Если же смарт-карта вставлена 57 в карт-ридер, то программа автоматически подключается к смарт-карте. При подключении программа определяет, кому принадлежит смарт-карта, пациенту или врачу и стадию смарт-карты. Если смарт-карта находится в стадии персонализации, то становится доступна кнопка «Разметить смарткарту» (разметку новой смарт-карты я опишу ниже). Так же при подключении программа определяет описатели пользовательских файлов на смарт-карте, если такие существуют. Если мы успешно подключились, то программа предлагает предъявить IC и PIN код смарт-карте. После чего мы получаем доступ к редактированию информации, если IC и PIN код принят смарт-картой. Допустим, если мы предъявили только IC код или не предъявили его вообще, то мы получаем доступ только на чтение фамилии, имени и отчество хранящейся в файле 00A1. Если же мы предъявили только PIN код то, мы получаем доступ ко всем персональным данным только на чтение. Только после предъявления IC и PIN кода, мы получаем доступ на редактирование всей персональной информации. Кнопки «Предъявить IC код» и «Предъявить PIN код» позволяют предъявлять секретные коды соответственно. На рисунке 15 представлено окно предъявление IC кода смарт-карте (окно предъявление PIN кода аналогичное). Рис. 15 – окно предъявление IC кода смарт-карте. В области называемой «Структура данных» отображается структура XML файла хранящегося на смарт-карте в файле с идентификатор 00A2. При выборе, какого либо поля в отображаемой структуре данных, отображается содержимое выбранного поля на вкладке называемой «Текст». По умолчанию текст отображается в стандартном коротко поле, но можно 58 использовать большое текстовое поле, выбрав «Использовать как большое поле» (Рис 16). Рис. 16 – Использовать как большое поле. Область называемая «Атрибуты безопасности» предназначена для редактирования атрибутов безопасности пользовательских файлов. В списке называемом «Файлы» отображается список идентификаторов всех пользовательских файлов. При выборе како либо файла, в области «Чтение» и «Запись» отображаются атрибуты безопасности выбранного файла. Так же атрибуты безопасности можно редактировать, только после предъявления IC кода. Кнопка «Сохранить» в области «Атрибуты безопасности» предназначена для сохранения отредактированных атрибутов безопасности. Отмечу, что сохраняются атрибуты только одного выбранного файла. Кнопка «Сохранить» находящиеся в общей области «Данные со смарткарты» сохраняет отредактированные данные на смарт-карту. Кнопка «Выгрузить в файл» позволяет выгружать персональные данные в XML файл на выборный носитель. Разметка новой смарт-карты доступна только после предъявления IC кода. На рисунке 17 представлено окно позволяющее указывать параметры для новой смарт-карты. 59 Рис. 17 – Окно разметки новой смарт-карты. Программа позволяет задать параметры при разметке смарт-карты, которые будут использоваться в стадии использования. В данные параметры входят: Возможность смена PIN кода командой ChangePIN (Команда ChangePIN позволяет сменить PIN код, после предъявления старого PIN кода, остальные секретные коды можно сменить после предъявления IC кода); Использовать 3-DES для шифрования (по умолчанию используется DES); 60 Перевод карты в стадию использования. Я рекомендую менять стадию карты в процессе персонализации, только если приложение будет работать с электронным кошельком, или существует угроза компрометации IC кода. Во всех остальных случаях с точки зрения безопасности нет угрозы оставлять карту в стадии персонализации. Выполнение необратимых действий неоправданно; Выбор секретных кодов, которые будут храниться в зашифрованном виде; Так же сразу можно задать секретные коды в области «Задать секретный код». Если секретный код задан, то он отмечен в списке. В области «Пользовательские файлы» можно редактировать дескрипторы файлов, а именно: Количество записей в файле; Длину записей в файле; Атрибуты безопасности файла; При выборе типа карты определяется количество и идентификаторы файлов. Все данные параметры можно сохранять в XML файл и загружать из XML файла, что позволяет избавиться от много кратного ввода одинаковых параметров. После нажатия кнопки «Разметить смарт-карту» все параметры записываются на смарт-карту. Отмечу, что если смарт-карта переводится в стадию использования, то становится невозможным поменять заданные параметры. При необходимости редактировать или создать новую структуру данных нужно предъявления IC кода. На рисунке 18 представлено окно, позволяющее редактировать структуры XML данных. 61 Рис. 18 – Редактирование структуры данных. Программа позволяет добавлять, удалять, редактировать название тегов, а так же сохранять и загружать разработанные шаблоны. В области «Атрибуты поля» можно добавлять и удалять атрибуты выбранного поля. После нажатия кнопки «Сохранить» сформированный XML файл сохраняется на смарткарту в выбранный файл. Так же на главном окне программы расположена кнопка «Сменить секретный код», которая позволяет сменить любой секретный код. 62 Рис. 19 – Смена секретного кода. На рисунке 19 представлено окно, которое позволяет сменить выбранный секретный код. Если смарт-карта принадлежит пациенту, то при изменении AC5 кода программа переписывает введенный новый AC5 код в файл 00A4. На главной форме так же расположена кнопка «Установить уровень доступа врача», которая открывает окно представленное на рисунке 20. Данное окно позволяет установить уровень доступа врача путем ввода соответствующего AC1-AC4 кода смарт-карты пациента. Рис. 20 – Установка уровня доступа врача. С право на окне расположен список AC кодов – отмеченный AC обозначают, что он записан на смарт-карте врача и может быть предъявлен смарт-карте пациента. 63 2.4.2 Программа для чтения и записи медицинской информации на смарт-карту пациента. Программа для чтения и записи медицинской информации о пациенте на смарт-карту предназначена для врачей. Основные функции программы: Смена PIN кода врача; Просмотр, запись медицинской информации о пациенте на смарт-карту последнего. Принцип работы программы: врач вставляет свою смарт-карту и предъявить ей свой PIN код. После чего программа считывает данные врача и определяет его уровень доступа. Прежде чем врачу начать работу с программой ему необходимо вставить свою смарт-карту в карт-ридер. При запуске программы открывается окно представленное на рисунке 21. Рис. 21 Авторизация врача. В данном окне представлен список всех найденных в системе картридеров. Врач должен выбрать карт-ридер в который он вставил свою смарткарту. После выбора карт-ридера программа определяет, вставлена ли смарткарта в карт-ридер, если вставлена, то проверяет, кому, принадлежит смарткарта. При этом считывает фамилию, имя и отчество и выводит в поле 64 «ФИО», чтобы владелиц данной смарт-карты убедился что это его смарткарта. После чего врач может ввести свой PIN код. Если PIN код верен, то открывается главное окно программы представленное на рисунке 22 и считываются данные о враче со смарт-карты. Так же определяется, какой уровень доступа врача и представляется как список из названий AC кодов. Рис. 22 Главное окно программы. Главное окно делится на две области: Область данных врача; Область данных пациента; Область данных врача предназначена для отображения данных считанных со смарт-карты врача. Так же в данной области расположены три кнопки. 65 Кнопка «Выход» предназначена для выхода из главного окна и возможностью смены пользователя. Кнопка «Сменить PIN код» открывает окно, представленное на рисунке 23, для смены PIN кода врача. Рис. 23 Смена PIN кода врача. Прежде чем сменить PIN код необходимо вести старый PIN код. Кнопка «>>>>>>>>>» предназначена для уменьшения области данных врача, что делает более удобный интерфейс программы. Свернутый вариант главного окна программы представлен на рисунке 24. 66 Рис. 24 Свернутый вариант главного окна программы. При свернутом варианте в области данных врача остаются, доступны фамилия, имя, отчество врача и его уровень доступа. В области «Пациент» расположен список карт-ридеров найденных в системе. После выбора карт-ридера программа автоматически подключается к смарт-карте пациента, если та вставлена в выбранный карт-ридер. После чего предъявляет AC коды, считанные со смарт-карты врача, а так же считывает персональные и медицинские данные пациента. После удачного подключения становится доступна кнопка «Предъявить PIN код». Данная кнопка предназначена для предъявления пациентом своего PIN кода. Закладка «Медицинские данные», представленная на рисунке 25, отображает медицинские данные в пяти файлах хранящиеся на смарт-карте пациента. 67 Рис. 25 Закладка «Медицинские данные». Файлы 01 по 04 доступны только после предъявления соответствующих AC кодов. В файле «Открытая информация» хранится общедоступная информация доступ, к которой не требует предъявления секретных кодов. В файлах хранятся записи врачей, при выборе какого либо файла открывается список всех врачей, которые делали записи в данном файле. Если выбирается, какой, то определенный врач открывается список всех записей сделанных выбранным врачом. Так же если выбирается какая либо запись открывается данная запись с датой и временем когда была сделана выбранная запись. При нажатии кнопки «Добавить запись» открывается окно представленное на рисунке 26. Данное окно предназначено для добавления новых записей в выбранный файл. 68 Рис. 26 Добавление новой медицинской записи. Добавлять новую медицинскую запись можно, только при условии, что пациент предъявил свой PIN код смарт-карте, иначе врач может только просматривать медицинские записи, хранящиеся на смарт-карте пациента. При выборе файла, в который будет добавлена новая медицинская запись, врачу доступен список тех файлов, к которым предъявлен соответствующий AC код. То есть если у врача хранились только AC1 и AC2 коды и при подключении к смарт-карте пациента эти коды были ей предъявлены, то врачу доступны только «Файл 01» и «Файл 02». Кнопка «Редактировать Медико-биологические характеристики» открывает окно, которое позволяет редактировать медико-биологические характеристики. Данное окно представлено на рисунке 27. 69 Рис. 27 Редактирование медико-биологических характеристик. Редактирование медико-биологических характеристик возможно только после предъявление PIN кода пациентом и AC4 кода, если он хранится на смарт-карте врача. 2.4.3 Программа для просмотра информации о пациенте хранящейся на смарт-карте. Данная программа предназначена для пациента владеющий смарткартой, чтобы он имел возможность самостоятельно просматривать свои персональные и медицинские данные вне какого либо лечебного учреждения. Основные функции программы: Просмотр всей информации хранящейся на смарт-карте; 70 Смена PIN кода; Выгрузка выбранной информации на другой носитель. На рисунке 28 представлено главное окно программы. Рис. 28 Главное окно программы. На главном «Персональные окне расположено данные» и список карт-ридеров, «Медицинские данные». две области Отображения персональных и медицинских данных аналогично в выше описанных программах. Кнопка «Предъявить PIN код» предназначена для предъявления пациентом своего PIN кода. Кнопка «Сменить PIN код» предназначена для смены PIN кода. Прежде чем сменить PIN код на новый необходимо 71 предъявить старый PIN код. Кнопка «Выгрузить персональные данные на другой носитель» позволяет выгрузить в XML файл персональные данные на выбранный носитель. Кнопка «Выгрузить медицинские данные на другой носитель» позволяет выгружать в XML файл выбранную медицинскую информацию. Выбирать можно как целый файл, так и отдельно врача, при чем в файл сохраняется только записи выбранного врача. Так же можно выбрать одну запись определенного врача. 72 Заключение. При выполнении дипломной работы было сделано: обзор внешних запоминающих устройств, и их характеристик; произведен подробный анализ ВЗУ на пригодность защищенного хранения медицинской информации; изучена спецификация смарт-карты ACOS2, ACOS3; Наиболее существенные результаты, полученные в процессе работы, состоят в следующем: Разработан класс на основе набора библиотек SDK, для упрощения разработки приложений ориентированных на работу со смарткартами типа ACOS; Разработана программа администратора, позволяющая администрировать смарт-карты пациентов и врачей. А так же описывать любой формат данных на языке XML; Разработана модель разграничения доступа к информации на смарткарте с помощью секретных кодов и атрибутов безопасности; Разработана программа для врачей, позволяющая считывать и записывать медицинскую информацию на смарт-карту пациента. Разработана программа для пациентов, позволяющая просматривать любую информацию, считанную со смарт-карты. В итоге разработана программа, для администратора позволяющая описывать любые форматы данных на языке XML хранящихся на смарткарте, а так же осуществлять разметку смарт-карт с возможностью устанавливать различные параметры. Программы для пациента и врача реализовывает разработанную мной модель разграничения доступа. 73 Список использованной литературы. 1. Гулиев Я.И., Белышев Д.В., Куликов Д.Е. Мобильные электронные медицинские карты [Электрон. ресурс] / Институт программных систем РАН. – Режим доступа: http://skif.pereslavl.ru/psiinfo/interin/interin-publications/mk.pdf. 2. Емелин И. В., Лебидько Л. М. Стандартизация представления электронных медицинских документов [Электрон. ресурс] – Режим доступа: http://emag.iis.ru/arc/infosoc/emag.nsf/BPA/3cbccb8d95af5a61c325729900 44ade9. 3. Ермаков Д. Е. Средства представления структурированных данных в медицинской информатике [Электрон. ресурс] / Институт программных систем РАН, Исследовательский центр медицинской информатики – Режим доступа: http://1gkb.kazan.ru/03_2_1/. 4. Лосьев М.Б. Обзор стандартов, видов и областей применения смарткарт [Электрон. ресурс] / Передовые охранные системы – Режим доступа: http://www.biometricsecurity.ru/index.php?page=smart. 5. Смарт-карта, типы и виды смарт-карт [Электрон. ресурс] / ИнфоБезпека: 2007. – Режим доступа: http://www.infobezpeka.com/publications/?id=101. 6. Виды пластиковых карт [Электрон. ресурс] / КардПром – Режим доступа: http://www.cardprom.ru/vid.htm. 7. Комплект разработчика смарт-карт приложений (SDK) 3.0 // «Интеллектуальные системы управления бизнесом» ISBC 2007 8. Комплект разработчика смарт-карт приложений (SDK) 2.3 // «Интеллектуальные системы управления бизнесом» ISBC М., 2005. 9. «ACOS2 Reference Manual v2.3» Advanced Card Systems Ltd, Hongkong, 2006. 74 10.«ACSR20 Application Programming Interface/ ACR20 & ACR30 Smart Card Reader» // Advanced Card Systems Ltd. rev 1.1 Sept, 2003 11.«ACR30 - Reference Manual rev 2.06» // Advanced Card Systems Ltd, March, 2002. 75