681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа...

53
УДК 125 Л ) 07 ( 06 . 3 . 681 3599 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ТАГАНРОГСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Факультет информационной безопасности Кафедра безопасности информационных технологий ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению возможностей и приобретению практических навыков разработки приложений с использованием смарт-карт ASE фирмы Athena Smartcard Solutions Ltd по курсу Программно-аппаратные средства защиты информации Для студентов специальностей 075400, 075300, 220600 Таганрог 2004

Upload: others

Post on 04-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

УДК 125Л

)07(06.3.681 № 3599

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ТАГАНРОГСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационной безопасности Кафедра безопасности информационных технологий

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению возможностей и приобретению практических

навыков разработки приложений с использованием смарт-карт ASE фирмы Athena Smartcard Solutions Ltd

по курсу Программно-аппаратные средства защиты информации

Для студентов специальностей

075400, 075300, 220600

Таганрог 2004

Page 2: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

УДК 681.3.067 (076.5) Составители: Л.К. Бабенко, Д.А. Зорина, П.Ю.Юрков.

Лабораторный практикум по изучению возможностей и приобретению практических навыков разработки приложений с использованием смарт-карт ASE фирмы Athena Smartcard Solutions Ltd по курсу «Программно-аппаратные средства защиты информации».-Таганрог: Изд-во ТРТУ, 2004.-54 с.

Работа посвящена вопросам изучения возможностей и приобретения практических навыков разработки приложений с использованием смарт-карт ASE фирмы Athena Smartcard Solutions Ltd. Пособие рассчитано на студентов специальностей 075400, 075300, 220600, а также может быть полезно студентам других специальностей, изучающих вопросы обеспечения информационной безопасности.

Рецензент зав. каф. БИТ, д-р техн. наук, проф. Макаревич О.Б.

2

Page 3: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Цель работы Практическое изучение функционирования устройств считывания ASE

Drive и работы смарт-карт, ознакомление с API-функциями для работы с карта-ми и устройством, приобретение навыков по разработке приложений, взаимо-действующих с картами.

Краткое описание Продукты израильской фирмы Athena Smartcard Solutions Ltd. пред-

ставлены на отечественном рынке представительством фирмы Aladdin в России [1]. Фирма располагает различными смарт-картами, обладающими возможно-стью шифрования информации при помощи протокола DES, Triple DES, а также подписи информации, используя протокол RSA.

Микропроцессорные (интеллектуальные) карты ASE Card это: − 8-битный микроконтроллер; − внутреннее управление памятью для хранения данных различных

приложений; − возможность группировать приложения в логических файлах; − набор команд на языках высокого уровня, значительно упрощающий

работу с картой; − парольная авторизация с различными паролями на чтение/запись; − надежная архитектура для обеспечения сохранности данных;

3

− контроль жизненного цикла. Объем внутренней памяти EEPROM — до 8 Кб. Минимальное число

циклов перезаписи — 10,000. Время хранения записанной информации — до 10 лет.

ASE Soft — интегрированная программная среда для создания смарт-карт приложений.

Иерархическая структура поддержки функций работы со смарт-картами можно представить в виде двух уровней.

Первый (нижний) уровень предназначен для обмена данными с карта-ми ASE card и устройствами считывания карт ASE Drive, передачу потоков данных между программой и устройством ASE Drive, между устройством и картами. Программная реализация этих функций осуществляется с помощью API ASE Drive, создаваемых скриптов для работы ASE Drive, а также API, со-ответствующих ISO 7816-3, которые поставляются программной средой ASE-Soft.

Второй уровень (High Level Api) позволяет разработчику обмениваться данными с картой по протоколу ISO 7816-4, управлять состоянием ридера и карты, позволяет сформировать пакет данных, распознаваемых ридером, прове-рить ответ на валидность, производить выполнение простейших операций над картой (доступ к данным, выбор идентификатора файла, получение служебной информации о карте), а также высокоуровневых команд (прочитать данные в пользовательском файле, создавать и управлять файлами, производить внутрен-нюю и внешнюю аутентификацию, операции сравнения и т.д.)

Page 4: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Данная структура позволяет разработчику наиболее гибко использо-вать возможности смарт-карт какой-либо фирмы и в то же время имеется воз-можность скрыть детали управления потоками данных между картой и прило-жением, используя высокоуровневый набор команд.

Существует возможность на основе функций, предоставляемых биб-лиотекой, разработать другие функции (не реализованные в данной версии библиотеки для работы с картами), а также реализовать взаимодействие с кар-тами других фирм.

− API нижнего уровня, функции которого используются совместно со специфическими для каждой данной “интеллектуальной карточки” функциями, удовлетворяющими стандарту ISO 7816-3/ ISO 7816-4;

− API высокого уровня — общий механизм работы со всеми микропро-цессорными карточками, поддерживаемыми ASE;

− утилиты для работы с устройствами считывания (ридерами) и картами. В целом можно сказать, что продукты этой фирмы не могут в полной

мере использоваться для построения высоконадежных СЗИ от НСД, в первую очередь из-за того, что они работают только под управлением ОС Windows, ко-торые практически не отвечают классам защиты, необходимым для построения такой СЗИ от НСД. Программная среда разработки приложений ASE High Level API поддерживает в полной мере лишь «родные» карты фирмы Athena Smartcard Solutions Ltd. Для разработки приложений с использованием ИК лю-бой сторонней фирмы необходимо пользоваться только низкоуровневыми функциями ISO 7816-4 каждой конкретной карты, что не всегда бывает удобно. К тому же, низкоуровневые функции ISO 7816-4 не предусматривают в своем составе таких необходимых для построения высоконадежной СЗИ от НСД функций, как шифрование информации, генерация ключей, формирование циф-ровой подписи и пр.

Программирование смарт-карт ASE

Для поддержки смарт-карт, состоящих из множества приложений, ASE Soft включает несколько функций, которые позволяют разработчикам создавать и получать доступ к двум уровням микропроцессорных карт:

Уровень карты Этот уровень является самым верхним уровнем карты, то есть, по сути,

является корневым каталогом. На этом уровне обычно хранятся данные и ключи, которые могут быть

общими для всех приложений смарт-карты. Файлы уровня карты часто содер-жат такие данные, как имя владельца карты и идентификатор карты (ID number).

Уровень приложений В небольшом мире смарт-карт, термин приложение обычно использу-

ется в смысле каталога, поскольку приложение рабочей станции, как правило, работает только с одним определенным каталогом. Уровень приложений может содержать несколько приложений (каталогов).

4

Page 5: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Каждое приложение обычно содержит свои собственные файлы и клю-чи.

Каждое приложение является полностью независимым в смысле хра-нимых в нем данных, правил доступа и ключей.

К примеру, карта студента университета может содержать одно прило-жение для библиотеки, одно – для медицинского пункта университета, еще од-но– для бухгалтерии ВУЗа и так далее. Каждое приложение такой карты содер-жит свои собственные данные, которые не могут быть доступны другим прило-жениям.

Работа с ключами API высокого уровня содержит различные функции, позволяющие соз-

давать и манипулировать четырьмя типами ключей. Полный перечень API вы-сокого уровня представлен в прил. 1.

1. Персональный идентификационный номер (PIN) PIN-код, известный также как “Удостоверитель” держателя карты

(CHV — Card Holder Verification), идентифицирует владельца карты при помо-щи уникального секретного кода. Поскольку PIN-код является частью общей информации о пользователе карты, он находится на уровне карты (в корневом каталоге).

Смарт-карты, поддерживаемые высокоуровневыми функциями API, должны содержать PIN-код, проинициализированный на уровне карты.

Так как PIN-код относится к общим данным смарт-карты, находящимся на уровне карты, файлы любого приложения могут быть защищены при помощи только лишь одного PIN-кода.

2. Главный ключ Главные ключи должны обязательно присутствовать как на уровне кар-

ты, так и на уровнях всех приложений (каталогов), находящихся на ИК. Эти ключи должны быть различными для разных уровней и различных приложений. Главный ключ — самый мощный ключ на уровне.

Каждый уровень должен иметь только один главный ключ, и смарт-карты, поддерживаемые высокоуровневыми функциями API, должны содержать Главный ключ, проинициализированный на уровне карты.

При помощи Главного ключа карты происходит создание приложений и файлов на уровне карты. Главный ключ карты может использоваться при по-пытке доступа к файлам (т.е. при авторизации, или разграничении доступа) на уровне карты. Главные ключи уровня приложений предназначены для создания файлов и ключей доступа в каталогах (в своих приложениях).

3. Ключи доступа Ключи доступа используются для дополнительного разграничения дос-

тупа к файлам приложений по чтению/записи. Эти ключи являются необяза-тельными и могут существовать только на уровне приложений. Каждое прило-

5

Page 6: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

жение может иметь более одного ключа доступа, но не более максимального их количества, определяемого возможностями самой ИК.

4. Вычислительные ключи Вычислительные ключи используются для внутренней аутентификации

(проверки ИК приложением компьютера) и для шифрования данных. Смарт-карты, поддерживаемые высокоуровневыми функциями API, должны содержать один вычислительный ключ, проинициализированный на уровне карты. На уровне приложений каждый каталог может содержать только один вычисли-тельный ключ.

ИК фирмы Athena инициализированы при их изготовлении следующим значением основных ключей (PIN, Главный ключ карты, Главный вычислитель-ный ключ) — 0x FF FF FF FF FF FF FF FF (8 байт). Эти значения могут быть легко изменены при использовании соответствующих функций API высокого уровня.

Каждый ключ ИК имеет предопределенное число возможных непра-вильных попыток ввода этого ключа (по умолчанию — три), после которых данный ключ автоматически блокируется. Проверить значение этого параметра карты можно, вызвав функцию ASEHLGetCardCaps(). Как только число попы-ток неверного ввода ключа достигнет установленного предела, ключ заблокиру-ется. Для разблокировки ключа необходимо указать главный ключ соответ-ствующего уровня, PIN-код и сам заблокированный ключ. В некоторых картах, если будет заблокирован Главный ключ карты, он уже не может быть разблоки-рован, и карта становится непригодной к дальнейшему использованию.

На рис. 1 показана структура ИК с двумя инициализированными при-ложениями. На корневом уровне карты находится один файл и 3 ключа. Уро-вень приложений содержит два приложения: в первом находится 2 файла и 2 ключа, во втором — 3 файла и один обязательный ключ.

Как видно из структуры, приведенной на рис. 1, на карте возможно размещение как простых файлов, так и директорий, называемых приложениями. Каждое приложение может содержать в себе свои собственные файлы, доступ к которым будет производиться уже согласно установленными в этом приложе-нии правилами доступа, а не правилами, действующими на корневом уровне карты. Это означает, что любое приложение, находящееся на ИК, можно защи-тить от доступа других лиц, имеющих доступ к этой карточке, при помощи ус-тановки правил разграничения доступа, требующих от пользователя ввода клю-ча доступа, созданного хозяином данного приложения. Приложения обычно могут иметь до 2-х уровней вложенности (это предусмотрено спецификацией EMV — EuroCard, MasterCard, VISA — введенной крупнейшими компаниями по производству и поддержке банковских смарт-карт). Работа с карточкой орга-низуется таким образом, что выбранное приложение (т.е. то, в которое был про-изведен переход из корневого уровня карты) считает, что оно находится на кар-те единолично и получает в свое распоряжение все ресурсы ИК (память,

6

Page 7: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Уровень карты

Файл 1

Главный ключ PIN-код Вычислительный ключ

Приложение 1

Файл 2

Файл 1

Главный ключ (обязательно)

Ключ доступа 1

Приложение 2

Файл 2

Файл 1

Главный ключ (обязательно)

Файл 3

Эти 3 ключа преинициализированы на картах ASE(значение может быть изменено)

Рис.1. Файловая структура смарт-карт ASE МП). Естественно, что это приложение может попытаться получить доступ к файлам другого приложения, однако для этого необходимо выполнить требова-ния правил доступа, установленных для тех файлов, доступ к которым требует-ся получить. Таким образом, реализуется так называемая мультиаппликацион-ность ОС карты — еще одно требование спецификации EMV. К слову, требова-ниями на доступ могут выступать: требование предъявления PIN-кода карты, требование предъявления ключа доступа (на чтение или запись отдельно или на полный доступ), требование предъявления Мастер-ключа карты (редко). При

7

Page 8: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

этом файлы приложения могут быть и не защищены правилами разграничения доступа. Чтение и запись в таких файлах могут быть произведены любым поль-зователем или процессом.

Разработка приложения Как уже упоминалось выше, типичное приложение, работающее со

смарт-картами, использует следующую последовательность вызова функций API низкого уровня:

1. Получение основной информации об устройстве ASEDrive. 2. Открытие устройства. 3. Вызов событийной функции для проверки наличия карты в гнезде

ридера (необязательно) и подача питания на карту (обязательно). 4. Вызов функций для проведения необходимых операций с картой. 5. После выполнения всех операций с картой, завершение сеанса работы

путем закрытия устройства. Рассмотрим подробно каждый из этапов разработки описанного выше

приложения для ИК. Программу будем писать на языке C. Каждый блок вызова функции работы с ридером выглядит следующим

образом: printf("\n_Описание_функции_\n"); — вывод на экран сообщения; AseResult=ASExxx(xxxx); — вызов нужной функции; if(AseResult != 0) — обработка возможной ошибки и вызов функции

обработки ошибок; prinf(…)— комментарий возникшей ошибки; exit(1); — выход из программы при возникновении ошибки; getch() — ожидание нажатия любой клавиши. Получение информации об устройстве ASEDrive Для того чтобы убедиться, что в системе установлено хотя бы одно

устройство ASEDrive, нам необходимо вызвать функцию GetReadersCount, и если она вернет число <1, завершить работу, поскольку в этом случае очевидно, что в системе не установлено ни одного ридера. При возврате этой функцией числа >1 считаем, что мы работаем с первым по списку в базе данных (БД) ри-дером. // Проверка, что, по крайней мере, одно устройство чтения //установлено в этой системе printf("\nУбедимся, что по крайней мере, 1 ридер установлен.\n"); ASEGetReadersCount(&aseReadersCount); if(aseReadersCount == 0) { printf ("В системе не установлено ни одного ридера!\n"); exit(1); }

8

Page 9: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Открытие ридера Для открытия устройства чтения/записи необходимо вызвать функцию

ASEOpenReaderByPort или ASEOpen ReaderByName. Первая производит откры-тие устройства ASEDrive, подключенного к указанному порту ввода/вывода (последовательному COM1, COM2 или параллельному LPT), вторая — по ука-занному имени в БД ридеров ASEDrive. Предпочтений в использовании той или иной команды нет, выбор существует лишь для удобства пользователя и избав-ляет от необходимости знания того, к какому именно порту компьютера под-ключен ридер. Если в системе установлен и зарегистрирован только один ридер, то для его открытия удобно воспользоваться командой ASEOpenReaderByPort, указав в качестве первого параметра (который отвечает за имя устройства в базе данных) ключевое слово NULL, что будет означать требование выбора первого по списку ридера в БД. // Отрытие порта устройства чтения printf("\nОткроем устройство чтения.\n"); AseResult = ASEReaderOpenByPort(NULL, &hAseReader); // Первый по списку if(AseResult != 0) exit(1);

В переменную hAseReader занесется хэндл (указатель) устройства чте-

ния/записи ASEDrive, по которому в дальнейшем и будет производиться обра-щение к ридеру и вызов функций API устройства ASEDrive.

После этого могут быть произведены различные действия по настройке параметров ридера, например, установка тайм-аута (времени ожидания выпол-нения команды смарт-картой) на то или иное гнездо устройства, установка или снятие показаний со встроенных часов реального времени, получение характе-ристик устройства и другие. К примеру, установка тайм-аута на главное гнездо ридера с целью ограничения ожидания ответа от ИК в случае каких-либо про-блем, может быть произведена следующим образом:

// Установка тайм-аута карты на 5 секунд printf("\nУстановка тайм-аута главного гнезда на 5 cекунд.\n"); AseResult = ASESetTimeout(hAseReader, MAIN_CARD_TIMEOUT, 5000); if(AseResult != 0) exit(1);

В качестве первого параметра функции необходимо указать хэндл ри-

дера, полученный после вызова функции ASEReaderOpenByPort. Подача питания на карту После открытия ридера необходимо убедиться, что карта находится в

гнезде устройства и подать на нее питание. Одновременно выбирается протокол передачи данных с карты на терминал и обратно — Т = 0 или Т = 1. Функция

9

Page 10: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASECardPowerOn после включения карты вернет в переменную dwActiveProto-col имя протокола, по которому реально будет включена ИК. Т.е. возможна си-туация, когда производится попытка включения карты, не поддерживающей протокол Т=1. В этом случае в данную переменную занесется символическое название протокола Т=0, по которому и будет включена ИК. // Включение питания карты с выбором протокола ISO7816 T=0. printf("\nВключение ISO7816 T=0 микропроцессорной карты.\n"); AseResult = ASECardPowerOn( hAseReader, MAIN_SOCKET, // в главном гнезде ридера CARD_POWER_UP, // функция включения PROTOCOL_CPU7816_T0, // по протоколу ISO 7816-3 T0 &dwActiveProtocol, // сюда занесется реальный //протокол, по которому // будет включена карта &hAseCard); if(AseResult != 0) { ASEReaderClose(hAseReader); exit(1); } // Проверка соответствия карты в разъёме карте с //поддержкой ISO7816 T=0 if(dwActiveProtocol != PROTOCOL_CPU7816_T0) { printf("Ошибка: карта не является ISO7816 T=0 микропроцессорной.\n"); ASEReaderClose(hAseReader); exit(1); }

Вызов необходимых функций Рассмотрим теперь некоторые команды, используемые для создания

приложений и файлов на карте, смены PIN-кода, работы с ключами, чтения и записи данных в файлы и другие.

Для начала следует показать, как инициализируются необходимые для работы переменные.

Ключи уровня карты и приложений, как и PIN-код, описываются 8-байтными массивами шестнадцатиричных чисел, например:

BYTE byPIN[8] = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}; Параметры создаваемых фалов описываются в виде специальной запи-

си, содержащей несколько обязательных полей:

10

Page 11: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

FileProperties1.wID = 0x01; // Идентификатор файла FileProperties1.wBytesAllocated = 32; // Размер файла FileProperties1.wWriteConditions = AC_PIN_AND_MAIN_KEY; // Условия записи FileProperties1.wWriteKeyNumber = 0; // Номер ключа доступа на запись FileProperties1.wReadConditions = AC_NONE; //Условия чтения FileProperties1.wReadKeyNumber = 0;// Номер ключа доступа на чтение

Здесь: FileProperties1.wID — идентификатор файла (уникальное в пре-

делах приложения однобайтовое имя в шестнадцатиричном формате); FileProp-erties1.wBytesAllocated — количество байт, отведенное под файл (отводится один раз при создании файла и впоследствии не может быть изменено); FileProperties1.wWriteConditions — права доступа на запись данных в файл в виде символьной константы (в данном случае перед попыткой записи в файл требуется предъявить PIN-код и Главный ключ карты); FileProper-ties1.wWriteKeyNumber — номер ключа доступа (для случая указания требова-ния предъявления ключа доступа — ACCESS_KEY); FileProper-ties1.wReadConditions — права доступа на чтение данных из файла в виде сим-вольной константы (в данном случае для чтения из файла не требуется предъяв-ления никакого ключа, т.е. чтение свободно для всех); FileProper-ties1.wReadKeyNumber — номер ключа доступа (для случая указания требова-ния предъявления ключа доступа — ACCESS_KEY).

Ниже приведено описание типов некоторых стандартных переменных для работы с картой:

// Стандартные структуры данных для работы. ASERESULT AseResult; HASEREADER hAseReader; HASECARD hAseCard; DWORD dwActiveProtocol; DWORD aseReadersCount; WORD wMaxKeyChanges; FILEPROPERTIES FileInfo;

Здесь: AseResult — переменная в которую будут заноситься результаты

выполнения команд (по сути — коды ошибок), физически представляет собой двойное слово; hAseReader — хэндл (указатель) на устройство чтения/записи ASEDrive, по которому в дальнейшем и будет производиться обращение к ри-деру и вызов функций API устройства ASEDrive; hAseCard — хэндл на актив-ную в данный момент карту, по нему производится вызов всех высокоуровне-вых функций High Level API; dwActiveProtocol — двойное слово, сюда после вызова функции ASECardPowerOn() занесется символьная константа протокола

11

Page 12: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

передачи данных, по которому реально будет включена карта; aseReaderCount — двойное слово, сюда после вызова функции ASEGetReadersCount занесется число ридеров, подключенных к компьютеру и зарегистрированных в БД уст-ройств ASE; wMaxKeyChanges — слово, вспомогательная переменная, в нее будет перенесено значение поля dwMaxKeyChanges из записи CardCaps (воз-можности карты), означает число возможных попыток смены ключа; FileInfo — запись специального типа для заполнения свойств создаваемых файлов, пример заполнения приведен выше.

Работа с ключами Работа с ключами средствами API высокого уровня ASE подразумевает

возможность проверки количества разрешенных смен ключей для карты, воз-можность изменения существующих ключей и проверки знания ключей пользо-вателем (аутентификация). Начнем по порядку.

В некоторых картах не предусмотрено изменение значений ключей не-ограниченное количество раз, как правило, разрешается сменить PIN-код и лю-бой из ключей карты не более 4 раз. Узнать это количество можно, вызвав функцию ASEGetCardCaps() и просмотрев значение поля dwMaxKeyChanges в полученной записи.

printf( "\nПолучим параметры карты.\n" ); AseResult = ASEHLGetCardCaps( hAseCard, & CardCaps ); if(AseResult != 0 ) { ASEReaderClose(hAseReader); exit(1); } printf( "Для продолжения нажмите любую клавишу.\n" ); getch();

// Проверка количества изменений ключа, допущенных до блокировки // карты. if( CardCaps.dwMaxKeyChanges == 0xFFFF ) wMaxKeyChanges = NULL; else wMaxKeyChanges = 4;

Изменение существующих на карте ключей производится путем вызова

функций ASEHLChangeKey() и ASEHLChangePIN(). Первая из них может ис-пользоваться для смены любого ключа карты (Главного ключа, ключей доступа и вычислительных ключей), вторая — только для смены PIN-кода карты. Обяза-тельными параметрами каждой из этих функций являются Главный ключ карты, текущее значение ключа, который требуется изменить и новое значение изме-няемого ключа. Эти функции обязательно должны вызываться из соответст-

12

Page 13: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

вующего уровня карты. Так, для функции ASEHLChangePIN() –– это главный (корневой) уровень карты, для функции ASEHLChangeKey() –– это тот уровень, на котором находится ключ, который требуется изменить. Пример смены Глав-ного ключа и PIN-кода карты приведен ниже.

// Изменение главного ключа карты. printf( "\nИзменим главный ключ карты.\n" ); AseResult = ASEHLChangeKey( hAseCard, byCardOldMainKey,

byCardOldMainKey, byCardMainKey, SC_MAIN_KEY, 0 ); if(AseResult != 0) { ASEReaderClose(hAseReader); exit(1); } printf( "Для продолжения нажмите любую клавишу.\n" ); getch();

В качестве первого параметра выступает указатель на карту, получен-ный после вызова функции ASECardPowerOn(), в качестве второго — текущее значение Главного ключа карты, который мы, собственно, и хотим изменить, поэтому это значение совпадает с третьим параметром функции — текущим значением ключа, который мы хотим изменить. Четвертым параметром следует указать новое значение Главного ключа карты, пятым — символьное имя клю-ча, который мы хотим изменить, шестым — номер ключа доступа (SC_ACCESS_KEY), если мы хотим изменить конкртентый ключ из набора ключей доступа приложения или главного уровня карты. Правила вызова этой функции более подробно описаны в п. 1.2.4. // Изменение старого значения PIN на новое. printf( "\nСмена PIN.\n" ); AseResult = ASEHLChangePIN( hAseCard, byCardMainKey, byOldPIN, byPIN ); if (AseResult != 0) { ASEReaderClose(hAseReader); exit(1); } printf( "Для продолжения нажмите любую клавишу.\n" ); getch();

В этой функции все параметры аналогичны параметрам функции

ASEHLChangeKey(). Сначала требуется указать хэндл карты, затем Главный ключ ИК, и, наконец, текущее и новое значение PIN-кода.

13

Page 14: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Создание приложений и файлов на карте Аналогично работе с данными, хранящимися на рабочей станции, наи-

более часто используемыми функциями являются функции создания, выбора директорий (приложений) и файлов, чтения и записи данных в выбранный файл. Главным же отличием работы с картой является требование обязательно-го предъявления ключей для доступа к той или иной информации (если, конеч-но, на этапе персонализации карты предусмотрена защита этих данных при по-мощи соответствующих ключей). Рассмотрим теперь, как работают функции создания приложений и файлов. printf( "\nСоздаем файл с №1 на главном уровне карты.\n" ); AseResult = ASEHLCreateFile( hAseCard, byCardMainKey, FileProperties1); if(AseResult != 0) { ASEReaderClose(hAseReader); exit(1); } printf( "Для продолжения нажмите любую клавишу.\n" ); getch();

При вызове функции необходимо указать хэндл карты, на которой соз-

дается файл, Главный ключ соответствующего уровня (Главного уровня карты при создании файла на этом уровне или Главного ключа приложения при созда-нии файла в приложении) и передать указатель на запись типа FILEPROPER-TIES, описывающую свойства файла. Эта запись должна заполняться заранее.

// Запись свойств для файла №1 // Студенческая идентификация (созданного на главном уровне карты) FileProperties1.wID = 0x01; // Идентификатор файла FileProperties1.wBytesAllocated = 32; // Размер файла FileProperties1.wWriteConditions = AC_PIN_AND_MAIN_KEY; // Условия записи FileProperties1.wWriteKeyNumber = 0; // Номер ключа доступа на запись FileProperties1.wReadConditions = AC_NONE; //Условия чтения FileProperties1.wReadKeyNumber = 0;// Номер ключа доступа на чтение

В отличие от файлов при создании приложений параметры указывают-

ся непосредственно в теле команды. // Создание Приложения Номер 1: // ID: 0x01 // Размер: 20 байт ( 10 байт отводится под файл №2 ).

14

Page 15: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

// Количество ключей: 1 ( 1 ключ доступа ). // Число смены ключей: Зависит от параметров карты. // Число файлов: 1. // printf( "\nСоздание приложения с №1 на главном уровне карты.\n" ); AseResult = ASEHLCreateApp( hAseCard, 0x01, 20, byCard-MainKey, byApp1MainKey, NULL, 1, wMaxKeyChanges, 1); if(AseResult != 0) { ASEReaderClose(hAseReader); exit(1); } printf( "Для продолжения нажмите любую клавишу.\n" ); getch();

В качестве параметров команды указываются последовательно: хэндл

карты, уникальный идентификатор приложения, размер в байтах, который тре-буется отвести под рабочее пространство приложения, Главный ключ карты, главный и вычислительный ключи создаваемого приложения, число ключей доступа, которые будут созданы в приложении при создании файлов, макси-мально разрешенное число смены ключей и число файлов, которые будут в дальнейшем созданы на смарт-карте внутри данного приложения.

Завершение работы Закрытие ридера производится путем вызова функции ASEReaderClose

с указанием хэндла устройства. ASEReaderClose(hAseReader); Низкоуровневые и высокоуровневые функции для работы с устройст-

вом считывания и картами соответственно приведены в прил. 1 и 2.

Выполнение работы При подготовке лабораторной работы необходимо предоставить: - работающую программу, соответствующую выбранному варианту; - отчет, содержащий: • титульный лист с указанием варианта задания; • цель работы; • описание использованных API; • структуры данных, используемые в программе. Перед выполнением работы необходимо также изучить теоретический

материал по функционированию устройства и карт, описание API, ознакомиться с документами и примерами, предоставляемыми при инсталляции программно-го обеспечения. Полезно рассмотреть Приложение А с приведенными в нем API структурами в документе Guide.pdf, обычно расположенном "C:\Program

15

Page 16: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Files\Athena\ASEDK\Docs\" или в той директории, которая будет указана при инсталляции программного обеспечения для ридера. Такую же информацию можно найти в приложении А [2].

Задания Варианты заданий:

1. На карте данные организованы следующим образом: на главном уровне карта содержит общую информацию свободную для чтения о владельце-студенте (ФИО, паспортные данные, место жительства). Возможность ее изме-нения есть только у владельца. На главном уровне создано приложение для ис-пользования бухгалтерией. В нем файл, в который может вносить изменения только бухгалтерия; считывать информацию может бухгалтерия с согласия сту-дента. Необходимо осуществить попытку чтения/записи информации из файла сначала только студентом, потом только бухгалтерией и совместно. Проанали-зировать результаты.

2. На карте данные организованы следующим образом: на главном уровне карта содержит общую информацию свободную для чтения о владельце-студенте (ФИО, паспортные данные, место жительства). Возможность ее изме-нения есть только у владельца. На главном уровне создано приложение для ис-пользования библиотекой. В нем файл, в который может вносить изменения библиотека только с разрешения студента; считывать информацию может лю-бой, имеющий доступ к карте. Требуется осуществить чтение / запись в файл без студента и с его разрешением. Проанализировать результаты.

3. На карте данные организованы следующим образом: на главном уровне карта содержит общую информацию свободную для чтения о владельце-пациенте (ФИО, паспортные данные, место жительства). Возможность ее изме-нения должна быть только у владельца. На главном уровне создано приложение для использования лечащим врачом и фармацевтом. В нем два файла. В первый запись возможна только врачом с согласия пациента; чтение – только врач. Во-второй запись возможна только врачом, чтение – только фармацевтом аптеки. Необходимо получить доступ на чтение и запись в оба файла. Проанализиро-вать результаты.

4. На карте данные организованы следующим образом: на главном уровне карта содержит общую информацию свободную для чтения о владельце, являющимся клиентом банка (ФИО, паспортные данные, место жительства). Возможность ее изменения есть только у владельца. На главном уровне создано приложение для использования банком. В нем файл, в который может вносить изменения только банк; считывать информацию может только владелец карты. Требуется осуществить попытку записи в файл владельцем карты и банком. Проанализировать результаты.

5. Провести сканирование карты. Отобразить наглядно структуру кар-ты, привести назначенные права.

16

Page 17: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Приложение 1. Низкоуровневые функции работы с устройствами считывания.

ASEGetReadersCount Описание: Возвращает число устройств считывания ASEDrive, зарегистрирован-

ных в системе. Синтаксис: ASERESULT ASEAPI ASEGetReadersCount( LPDWORD lpdwReadersCount); Параметры: lpdwReadersCount — возвращает число устройств считывания. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно. ASEER_NOT_INSTALLED — ASEDrive не установлен в системе. См. также функцию ASEEnumReaders.

ASEGetReaderStatus Описание: Определяет наличие карточек в устройстве считывания ASEDrive.

Синтаксис: ASERESULT ASEAPI ASEGetReaderStatus( HASEREADER hAseReader LPASEREADERSTATE lpReaderState); Параметры: hAseReader — содержит хэндл устройства считывания. lpReaderState — возвращает структуру, содержащую состояние указан-ного устройства считывания. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно. ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат. ASEERR_READER_COMM_ERROR — проблемы при установке связи с устройством считывания ASEDrive. Рекомендуется закрыть устройство. ASEERR_TIMEOUT — достигнуто максимальное время ожидания.

ASEEnumReaders Описание: Возвращает информацию об указанном устройстве считывания ASE-

Drive из базы данных ридеров.

17

Page 18: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Синтаксис: ASERESULT ASEAPI ASEEnumReaders(

DWORD dwReaderIndex LPASEREADERID lpoReaderID); Параметры: dwReaderIndex — порядковый номер необходимого устройства считы-вания в БД (начиная с 0). lpoReaderID — указатель на структуру, в которую будет возвращена информация об указанном ридере. Эта информация включает в себя серийный номер устройства, символическое имя в системе и порт, по которому зарегист-рирован ридер. Примечание: В базе данных ридеры упорядочены по номерам. Чтобы узнать общее число ридеров, зарегистрированных в системе, используется функция ASEGetReadersCount. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_NOT_INSTALLED — указанный ридер не зарегистрирован в системе.

ASEERR_INVALID_INDEX — указанный номер слишком высок. Мак-симальное значение, которое можно указывать в этой функции, определяется числом, возвращаемым функцией ASEGetReadersCount. См. также функцию ASEGetReadersCount.

ASEReaderOpenByName Описание: Открывает устройство считывания ASEDrive по его символическому

имени. Синтаксис:

ASERESULT ASEAPI ASEReaderOpenByName( LPCSTR lpszAseReaderName LPHASEREADER lphAseReader); Параметры:

lpszAseReaderName — содержит имя устройства считывания ASEDrive, под которым оно зарегистрировано в системе.

lphAseReader — возвращает хэндл устройства считывания. Примечание:

Эта функция возвращает хэндл устройства, который может быть ис-пользован в любой другой операции. Функция считает, что только один процесс может получить доступ к устройству одновременно. Красный цвет индикатора устройства говорит о том, что ридер открыт, зеленый — SEDrive работает. Указание:

18

Page 19: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Эта функция может возвращать как ошибки, так и предупреждения, ко-торые означают, что функция была выполнена, однако ASEERR_SUCCESS при этом не возвращается. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_READER_ALREADY_OPENED — указанное устройство уже открыто.

ASEERR_WRONG_READER_NAME — в системе нет устройства счи-тывания с указанным именем.

ASEERR_READER_OPEN_ERROR — невозможно открыть ридер. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEERR_MAX_READERS_ALREADY_OPEN — максимально воз-

можное число ридеров (32) уже открыто. ASEERR_SYSTEM_ERROR — неустранимая ошибка системы. Воз-

можно это проблема с размещением памяти. Попробуйте освободить немного памяти.

ASEERR_NOT_INSTALLED — ASEDrive не установлен в системе. ASEWRN_SERIAL_NUMBER_MISMATCH — предупреждение: се-

рийный номер открытого ридера не совпадает с серийным номером устройства, зарегистрированного в системе под указанным именем. См. также функции ASEReaderOpenByPort, ASEReaderClose.

ASEReaderOpenByPort Описание: Открывает устройство считывания ASEDrive по указанному порту.

Синтаксис: ASERESULT ASEAPI ASEReaderOpenByPort(

LPCSTR lpszPortName LPHASEREADER lphAseReader); Параметры:

lpszPortName — содержит название порта, на который установлено устройство считывания ASEDrive. Имя порта должно выглядеть так: “COM1”, “LPT1”, и т.д. Если имя порта NULL, то открывается первый ридер, перечис-ленный в базе данных ASEDrive.

lphAseReader — возвращает хэндл устройства считывания. Примечание:

Эта функция возвращает хэндл устройства, который может быть ис-пользован в любой другой операции. Функция считает, что только один процесс может получить доступ к устройству одновременно. Красный цвет индикатора устройства говорит о том, что ридер открыт, зеленый —ASEDrive работает. Указание:

19

Page 20: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Эта функция может возвращать как ошибки, так и предупреждения, ко-торые означают, что функция была выполнена, однако ASEERR_SUCCESS при этом не возвращается. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_READER_ALREADY_OPENED— указанное устройство уже открыто.

ASEERR_WRONG_READER_NAME — в системе нет устройства счи-тывания с указанным именем.

ASEERR_READER_OPEN_ERROR — невозможно открыть ридер. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEERR_MAX_READERS_ALREADY_OPEN — максимально воз-

можное число ридеров (32) уже открыто. ASEERR_SYSTEM_ERROR — неустранимая ошибка системы. Воз-

можно это проблема с размещением памяти. Попробуйте освободить немного памяти.

ASEERR_NOT_INSTALLED — ASEDrive не установлен в системе. ASEWRN_SERIAL_NUMBER_MISMATCH — предупреждение: се-

рийный номер открытого ридера не совпадает с серийным номером устройства, зарегистрированного в системе под указанным именем.

ASEERR_TIMEOUT — достигнуто максимальное время ожидания. См. также функции ASEReaderOpenByName, ASEReaderClose.

ASEReaderClose Описание: Прекращает соединение с устройством считывания ASEDrive.

Синтаксис: ASERESULT ASEAPI ASEReaderClose( ASEREADER hAseReader);

Параметры: hAseReader — содержит хэндл устройства считывания. Примечание: Эта функция сначала выключает карты, которые были активированы, а затем освобождает все блочные операции. После успешного завершения данной функции, хэндл устройства считывания теряется. Чтобы создать новый хэндл, необходимо вызвать функцию ASEReaderOpenByName или ASEReaderOpenBy-Port. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат. См. также функции ASEReaderOpenByName, ASEReaderOpenByPort.

20

Page 21: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEGetReaderCaps Описание: Возвращает параметры указанного устройства считывания ASEDrive.

Синтаксис: ASERESULT ASEAPI ASEGetReaderStatus(

HASEREADER hAseReader LPHASEREADERCAPS lpAseParams); Параметры: hAseReader — содержит хэндл устройства считывания.

lpAseParams — возвращает структуру типа ASEREADERCAPS, содер-жащую параметры указанного устройства считывания. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASESetRTC Описание: Устанавливает встроенные в ридер часы реального времени (только для

ASEDrive со встроенными часами — RTC). Синтаксис:

ASERESULT ASEAPI ASESetRTC( HASEREADER hAseReader LPASERTC lpAseRTC); Параметры:

hAseReader — содержит хэндл устройства считывания. lphAseReader — указатель на структуру, содержащую данные об уста-

новке времени. Значения, записываемые в эту структуру, округляются до пра-вильного значения (например, при попытке установки секунд = 100 будет уста-новлено значение = 40). Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_NO_RTC — в открытом ридере ASEDrive нет часов реально-го времени. См. также функции ASEGetRTC.

21

Page 22: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEGetRTC Описание: Считывает из встроенных в ридер часов реального времени текущее

значение времени (только для ASEDrive со встроенными часами — RTC). Синтаксис

ASERESULT ASEAPI ASEGetRTC( HASEREADER hAseReader LPASERTC lpAseRTC); Параметры:

hAseReader — содержит хэндл устройства считывания. lphAseReader — указатель на структуру, в которую занесутся данные о

текущем времени. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_NO_RTC — в ткрытом ридере ASEDrive нет часов реального времени. См. также функции ASESetRTC.

ASEScriptRead Описание: Считывает данные из области хранения скриптов ASEDrive.

Синтаксис: ASERESULT ASEAPI ASEScriptRead(

HASEREADER hAseReader DWORD dwStartAddress LPBYTE lpbDataBuffer WORD wBytesToRead LPWORD lpwBytesActuallyRead); Параметры:

hAseReader — содержит хэндл устройства считывания. dwStartAddress — должен содержать начальный адрес скрипта в памя-

ти. Длина каждого скрипта — 10 байт. lpbDataBuffer — указатель на область памяти, куда будет помещен счи-

танный из памяти ридера скрипт. wBytesToRead — должен содержать длину считываемых данных. lpwBytesActuallyRead — указатель на область памяти, в которую зане-

сется длина действительно считанных данных.

22

Page 23: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Примечание: Скрипты располагаются в памяти ридера, начиная с первого байта

(смещение 0). Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_INVALID_PARAMETERS — один из параметров указан не-верно: неверный стартовый адрес, либо стартовый адрес плюс длина считывае-мых данных находятся вне области памяти скриптов ридера ASEDrive. См. также функции ASEScriptWrite, ASEScriptRun.

ASEScriptWrite Описание: Записывает данные в область хранения скриптов ASEDrive.

Синтаксис: ASERESULT ASEAPI ASEScriptWrite(

HASEREADER hAseReader DWORD dwStartAddress LPBYTE lpbDataBuffer WORD wBytesToWrite); Параметры:

hAseReader — содержит хэндл устройства считывания. dwStartAddress — должен содержать начальный адрес скрипта в памяти

ридера. lpbDataBuffer — указатель на область памяти, откуда будет считан

скрипт для записи в память ридера. wBytesToWrite — должен содержать длину записываемых данных.

Примечание: После выполнения этой команды ридер автоматически закрывается и

высвобождается хэндл hAseReader. Для повторного открытия ридера следует использовать команды ASEReaderOpenByName или ASEReaderOpenByPort. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

23

Page 24: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_INVALID_PARAMETERS — один из параметров указан не-верно: неверный стартовый адрес, либо стартовый адрес плюс длина считывае-мых данных находятся вне области памяти скриптов ридера ASEDrive. См. также функции ASEScriptRead, ASEScriptRun, ASEReaderOpenBy-Name, ASEReaderOpenByPort.

ASEScriptRun Описание: Запускает скрипт на ИК.

Синтаксис: ASERESULT ASEAPI ASEScriptRun(

HASEREADER hAseReader DWORD dwStartAddress WORD wNumberCommands LPBYTE lpbInDataBuffer WORD wInDataLength LPBYTE lpbOutDataBuffer LPWORD lpwOutBufferLength LPWORD lpwLastCommandOK LPWORD lpwLastCommandStatus); Параметры:

hAseReader — содержит хэндл устройства считывания. dwStartAddress — должен содержать начальный адрес скрипта в памяти

ридера. К примеру, чтобы запустить выполнение скрипта со второй команды, начальный адрес должен быть 0x0A.

wNumberCommands — число команд скрипта, которые следует выпол-нить.

lpbInDataBuffer — указатель на область памяти, откуда будут считаны данные для начальной инициализации буфера данных устройства ASEDrive, может быть NULL.

wInDataLength — должен содержать длину буфера входных данных. lpbOutDataBuffer — указатель на область памяти, в которую будет воз-

вращен буфер обработанных данных после выполнения последней команды скрипта.

lpwOutBufferLength — указатель на область памяти, куда перед вызо-вом данной команды заносится ожидаемая от скрипта длина обработанных данных, а после выполнения команды — реальная длина данных, возвращенных скриптом.

lpwLastCommandOK — указатель на область памяти, куда после вы-полнения команды будет возвращено количество выполненных команд скрипта. Если это значение будет совпадать с номером в параметре wNumberCommands, то весь скрипт выполенен успешно.

24

Page 25: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

lpwLastCommandStatus — указатель на область памяти, куда будет воз-вращен статус выполнения последней команды скрипта (байты SW1, SW2). Примечание:

Следует учитывать, что во время выполнения скрипта может быть пре-вышен тайм-аут ожидания выполнения команды от карты. Для больших скрип-тов, насчитывающих много команд, следует предварительно установить более продолжительное время ожидания при помощи команды ASESetTimeout. Уз-нать текущее значение времени ожидания ответа можно, вызвав команду ASEGetTimeout. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_INVALID_PARAMETERS — один из параметров указан не-верно: неверный стартовый адрес, либо стартовый адрес плюс длина данных находятся вне области памяти скриптов ридера ASEDrive. См. также функции ASEScriptRead, ASEScriptRun, ASEGetTimeout, AS-EsetTimeout.

ASEReaderDetect Описание: Функция определяет, установлен ли по указанному порту ввода/вывода

ридер ASEDrive. Если ридер обнаружен, функция возвращает специальный хэндл и серийный номер ридера. Синтаксис:

ASERESULT ASEAPI ASEReaderDetect( LPCSTR lpszPortName PORT_TYPE Type LPHDETECT lphDetect LPCSTR lpszSN); Параметры:

lpszPortName — символьная строка, описывающая имя порта вво-да/вывода (имя должно быть написано строчными буквами). Например: “COM1”, “LPT2”.

Type — указывает тип проверяемого порта. Может принимать два зна-чения: SERIAL_PORT или PARALLEL_PORT

lphDetect — специальный хэндл обнаружения ридера по указанному порту. Если ридер обнаруживается, возвращается этот хэндл. Он должен быть использован при добавлении ридера в систему при помощи функции

25

Page 26: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEReaderAdd(). После использования данный хэндл не уничтоживается авто-матически. Удаляется он путем вызова функции ASEReleaseHDETECT().

lpszSN — при успешном обнаружении ридера содержит серийный но-мер ридера. Этот указатель должен указывать на область памяти для размеще-ния не менее 12 символов. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_READER_AT_PORT — по указанному порту не обнаружено ридера.

ASEERR_NOT_INSTALLED — БД ASE не установлена на этом ком-пьютере.

ASEReaderAdd Описание: Функция добавляет ридер, обнаруженный при помощи функции

ASEReaderDetect, в базу данных устройств ASE. После добавления ридера в систему он может быть использован с помощью функций API ASE. Синтаксис:

ASERESULT ASEAPI ASEReaderAdd( HDETECT hDetect LPCSTR lpszReaderName); Параметры:

hDetect — специальный хэндл обнаружения ридера, полученный от функции ASEReaderDetect.

lpszReaderName — указатель на строку в памяти, в которой хранится символическое имя ридера, под которым его следует зарегистрировать в систе-ме. Примечание: На один порт может быть зарегистрирован только один ридер. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_DETECT_HANDLE — хэндл hDetect неверен. ASEERR_DUPLICATE_READER_NAMES — указанное в параметре

lpszReaderName имя ридера уже существует в системе. ASEERR_NOT_INSTALLED — БД ASE не установлена на этом ком-

пьютере.

ASEReaderRemoveByPort Описание: Функция удаляет ридер, зарегистрированный в БД ASE по указанному

порту.

26

Page 27: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Синтаксис: ASERESULT ASEAPI ASEReaderRemoveByPort(

LPCSTR lpszPortName); Параметры:

lpszPortName — имя порта, по которому зарегистрирован ридер, уда-ляемый из системы. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_NO_READER_AT_PORT — по указанному порту ридер не установлен.

ASEERR_NOT_INSTALLED — БД ASE не установлена на этом ком-пьютере.

ASEReaderRemoveByName Описание: Функция удаляет ридер, зарегистрированный с указанным именем в БД

ASE. Синтаксис:

ASERESULT ASEAPI ASEReaderRemoveByName( LPCSTR lpszReaderName); Параметры:

lpszReaderName — имя ридера, который требуется удалить из системы. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_NO_READER_AT_PORT — по указанному имени не найдено ни одного ридера, установленного по любому порту.

ASEERR_NOT_INSTALLED — БД ASE не установлена на этом ком-пьютере.

ASEReaderRemoveAllReaders Описание: Функция удаляет все ридеры, зарегистрированные в системе.

Синтаксис: ASERESULT ASEAPI ASEReaderRemoveAllReaders( );

Параметры: Нет. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_NOT_INSTALLED — БД ASE не установлена на этом ком-пьютере.

27

Page 28: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEReleaseHDETECT Описание: Функция высвобождает использованный хэндл.

Синтаксис: ASERESULT ASEAPI ASEReleaseHDETECT(

LPHDETECT lphDetect); Параметры:

lphDetect — хэндл, который требуется освободить. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEReaderSetMessage Описание: Функция устанавливает ловушку на событие, связанное с физическим

выниманием/вставкой ИК из гнезд ридера, по достижении которого следует послать сообщение окну (приложению) Windows. Синтаксис:

ASERESULT ASEAPI ASEReaderSetMessage( HASEREADER hAseReader HWND hwndNotifiedWindow UINT uMessageID); Параметры:

hAseReader — содержит хэндл устройства считывания. hwndNotifiedWindow — содержит хэндл окна, которому следует по-

слать сообщение по достижении события. uMessageID — содержит идентификатор посылаемого сообщения. Ин-

формация по установке таких идентификаторов содержится в документации Windows (путем вызова функции RegisterWindowMessage или присвоением зна-чения WM_USER + константа). Примечание:

Данная функция посылает сообщение Windows указанному окну каж-дый раз при возникновении события. Параметр wParam сообщения содержит описание события. Такими событиями могут быть следующие:

MAIN_CARD_INSERTED MAIN_CARD_REMOVED SECOND_CARD_INSERTED SECOND_CARD_REMOVED Соответственно вставка/вынимание карты из главного и из вторичного

гнезда ридера. Каждый ридер ASEDrive может послать одно сообщение одному окну

(включая широковещательные сообщения HWND_BROADCAST и сообщения

28

Page 29: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

никому NULL). Эта функция может применяться только в ОС семейства Win-dows. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASECardStateChange Описание: Функция блокирует ридер до возникновения события, связанного с фи-

зическим выниманием/вставкой ИК из гнезд ридера. Синтаксис:

ASERESULT ASEAPI ASECardStateChange( HASEREADER hAseReader WORD wSocket WORD wStateFlag DWORD dwTimeout); Параметры:

hAseReader — содержит хэндл устройства считывания. wSocket — указывает на гнездо ридера, в котором следует ждать собы-

тия. Возможны два типа гнезд, обозначаемых следующими символьными кон-стантами:

MAIN_SOCKET SECONDARY_SOCKET wStateFlag — указывает состояние блокировки. Может принимать два

значения: BLOCK_UNTIL_PRESENT BLOCK_UNTIL_ABSENT dwTimeout — содержит время ожидания события в миллисекундах.

Значение 0 означает бесконечное время ожидания. Примечание:

Данная функция блокирует все операции с гнездом ридера до возник-новения соответствующего события (соответственно “карта присутствует” или “карта отсутствует”). Блокировку можно отменить путем вызова функции ASE-Cancel. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_INVALID_SOCKET — в указанном устройстве ASEDrive от-сутствует указанное гнездо, или же данная операция не может быть применена к данному гнезду ридера.

29

Page 30: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_OPERATION_CANCELLED — операция была отменена функцией ASECancel, или же ридер закрыт.

ASEERR_OPERATION_TIMEOUT — по истечении времени ожидания не возникло указанного события.

ASEERR_INVALID_PARAMETERS — один или несколько параметров команды указаны неверно.

ASEERR_SYSTEM_ERROR — возникла системная ошибка. См. также функции ASECancel.

ASECancel Описание: Функция отменяет операцию блокирования карты.

Синтаксис: ASERESULT ASEAPI ASECancel(

HASEREADER hAseReader WORD wSocket WORD wPresentFlag); Параметры:

hAseReader — содержит хэндл устройства считывания. wSocket — указывает на гнездо ридера, с которого следует снять бло-

кировку. Возможны два типа гнезд, обозначаемых следующими символьными константами:

MAIN_SOCKET SECONDARY_SOCKET wStateFlag — указывает состояние блокировки. Может принимать два

значения: BLOCK_UNTIL_PRESENT BLOCK_UNTIL_ABSENT

Примечание: Данная функция отменяет все предыдущие операции блокирования

карты. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_INVALID_SOCKET — в указанном устройстве ASEDrive от-сутствует указанное гнездо, или же данная операция не может быть применена к данному гнезду ридера.

ASEERR_INVALID_PARAMETERS — один или несколько параметров команды указаны неверно. См. также функции ASECardStateChange.

30

Page 31: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Приложение 2. Высокоуровневые функции API для работы с микропроцессорными карточками

ASECardPowerOn Описание: Функция активирует карту (подает питание на карту).

Синтаксис: ASERESULT ASEAPI ASECardPowerOn(

HASEREADER hAseReader WORD wSocket WORD wAction DWORD dwPreferredProtocol LPDWORD lpdwActiveProtocol LPHASECARD lphAseCard); Параметры: hAseReader — содержит хэндл устройства считывания.

wSocket — указывает ридеру, в какое гнездо вставлена карта. Возмож-ные значения:

MAIN_SOCKET SECONDARY_SOCKET. wAction — указывает ридеру, какое действие необходимо произвести с

картой. Возможные значения: CARD_POWER_UP CARD_RESET (используется только для обеспечения совместимости со

старыми картами). dwPreferredProtocol — указывает протокол, по которому требуется

включить карту. Для ИК может принимать следующие значения: PROTOCOL_CPU7816_AUTODETECT PROTOCOL_CPU7816_AUTODETECT_OPT PROTOCOL_CPU7816_T0 PROTOCOL_CPU7816_T0_OPT PROTOCOL_CPU7816_T1 PROTOCOL_CPU7816_T1_OPT При указании значений PROTOCOL_CPU7816_AUTODETECT или

PROTOCOL_CPU7816_AUTODETECT_OPT устройство ASEDrive автоматиче-ски обнаруживает протокол, поддерживаемый смарт-картой, и возвращает сим-вольное обозначение этого протокола в параметре lpdwActiveProtocol. Пристав-ка _OPT указывает ридеру, что требуется автоматически установить оптималь-ную скорость обмена данными с ИК.

lpdwActiveProtocol — указатель на область памяти, куда будет возвра-щено символьное обозначение протокола обмена, по которому реально будет включена карта.

31

Page 32: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

lphAseCard — указатель на область памяти, куда будет возвращен хэндл на активированную карту. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_INVALID_SOCKET — у устройства считывания указанное гнездо отсутствует, или операция не может быть применена к данному гнезду.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_PROTOCOL_NOT_SUPPORTED — указанный протокол об-

мена данными не поддерживается картой. ASEERR_INVALID_PARAMETERS — один или несколько параметров

команды указаны неверно. ASEERR_CARD_NOT_POWERED — карта не включена (в случае вы-

зова функции в режиме CARD_RESET). ASEERR_CARD_NOT_PRESENT — в указанном гнезде отсутствует

карта. ASEERR_CARD_ALREADY_POWERED — указанная карта уже вклю-

чена. Следует сначала вызвать функцию ASECardPowerOff для повторного включения ИК.

ASEERR_TIMEOUT — превышено максимальное время ожидания от-вета от карты.

ASEERR_UNSUPPORTED_CARD_BAUD_RATE — скорость обмена данными с картой не поддерживается ридером ASEDrive. См. также функции ASECardPowerOff, ASEGetCardStatus.

ASECardPowerOff Описание: Функция деактивирует карту (снимает питание с карты).

Синтаксис: ASERESULT ASEAPI ASECardPowerOff(

HASECARD hAseCard); Параметры: hAseCard — содержит хэндл карты. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_CARD_NOT_POWERED — карта не включена (в случае вы-

зова функции в режиме CARD_RESET).

32

Page 33: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_CARD_NOT_PRESENT — в указанном гнезде отсутствует карта.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_TIMEOUT — превышено максимальное время ожидания от-вета от карты. См. также функции ASECardPowerOn, ASEGetCardStatus.

ASEGetCardStatus Описание: Возвращает состояние вставленной карточки.

Синтаксис: ASERESULT ASEAPI ASEGetCardStatus(

HASEREADER hAseReader WORD wSocket LPCARDSTATE lpCardState); Параметры: hAseReader — содержит хэндл устройства считывания.

wSocket — указывает ридеру, в какое гнездо вставлена карта. Возмож-ные значения:

MAIN_SOCKET SECONDARY_SOCKET. lpCardState — возвращает структуру типа CARDSTATE, в которую за-

писывается текущее состояние карты. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_READER_HANDLE — хэндл, указанный в пара-метре hAseReader, неправильный или имеет неверный формат.

ASEERR_INVALID_SOCKET — у устройства считывания указанное гнездо отсутствует, или операция не может быть применена к данному гнезду.

ASEHLGetCardCaps Описание: Возвращает параметры указанной карточки.

Синтаксис: ASERESULT ASEAPI ASEHLGetCardCaps(

HASECARD hAseCard LPHLCARDCAPS lpHlCardCaps); Параметры:

33

Page 34: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

hAseCard — содержит хэндл смарт-карты. lpHlCardCaps — возвращает структуру, содержащую параметры смарт-

карты. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-вается.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка смарт-карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка системы. ASEHLCreateApp Описание: Создает новое приложение на текущем уровне карты.

Синтаксис: ASERESULT ASEAPI ASEHLCreateApp(

HASECARD hAseCard WORD wID WORD wBytesAllocated LPBYTE lpCardMainKey LPBYTE lpAppMainKey LPBYTE lpAppCalcKey WORD wNumberOfKeys WORD wNumOfKeyChanges WORD wNumOfFiles); Параметры: hAseCard — содержит хэндл смарт-карты.

wID — указывает идентификатор создаваемого приложения. wBytesAllocated — содержит количество байт, которое необходимо от-

вести создаваемому приложению. lpCardMainKey — указатель на главный ключ карты (обязательный па-

раметр). lpAppMainKey — указатель на главный ключ приложения (обязатель-

ный параметр). lpAppCalcKey — указатель на расчетный ключ приложения. Если новое

приложение не будет иметь расчетного ключа, это значение должно быть NULL.

34

Page 35: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

wNumberOfKeys — содержит число дополнительных ключей доступа, которые будут созданы на уровне нового приложения. Если новое приложение не будет иметь ключей доступа, это значение должно быть NULL.

wNumberOfKeyChanges — содержит число, которое показывает, сколь-ко максимально раз можно сменить ключи на уровне этого приложения. Это значение не должно превышать значение wMaxKeyChanges в структуре CARD-CAPS. Если значение wMaxKeyChanges в структуре CARDCAPS составляет FFFF, то количество смены ключей неограниченно, и, следовательно, параметр wNumberOfKeyChanges должен иметь значение NULL.

wNumOfFiles — указывает количество файлов, которые будут созданы в этом новом приложении. Этот обязательный параметр используется, чтобы посчитать общий размер приложения, включая место под будущие создаваемые файлы. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_CARD_MEMORY_PROBLEM — проблемы с памятью

карты. ASEHLERR_CARD_INSUFFICIENT_MEMORY — недостаточно сво-

бодной памяти карты для выполнения операции. ASEHLERR_BLOCKED — главный ключ карты заблокирован. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEHLERR_ID_ALREADY_EXISTS — данный ID уже существует на

карте. ASEHLERR_WRONG_KEY — неверно указан главный ключ карты. ASEHLERR_INCORRECT_PARAMETER — один или более парамет-

ров команды указаны неправильно.

35

Page 36: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLCreateFile Описание: Создает новый файл на текущем уровне карты или приложения.

Синтаксис: ASERESULT ASEAPI ASEHLCreateFile(

HASECARD hAseCard LPBYTE lpMainKey LPFILEPROPERTIES lpFileProperties); Параметры: hAseCard — содержит хэндл смарт-карты.

lpCardMainKey — указатель на соответствующий главный ключ. lpFileProperties — указатель на структуру FILEPROPERTIES.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_CARD_MEMORY_PROBLEM — проблемы с памятью

карты. ASEHLERR_CARD_INSUFFICIENT_MEMORY — недостаточно сво-

бодной памяти карты для выполнения операции. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEHLERR_ID_ALREADY_EXISTS — данный ID уже существует на

карте. ASEHLERR_INCORRECT_PARAMETER — один или более парамет-

ров команды указаны неправильно. См. также функции ASEHLCreateApp.

36

Page 37: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLCreateAccessKey Описание: Создает ключ доступа на текущем уровне карты.

Синтаксис: ASERESULT ASEAPI ASEHLCreateAccessKey(

HASECARD hAseCard LPBYTE lpMainKey LPBYTE lpNewAccessKey WORD wKeyNumber); Параметры: hAseCard — содержит хэндл смарт-карты.

lpMainKey — указатель на главный ключ приложения. lpNewAccessKey — указатель на значение нового ключа доступа при-

ложения. wKeyNumber — содержит номер создаваемого ключа доступа. Это зна-

чение не должно превышать количество ключей, указанного в структуре при-ложения при его создании.

Функция должна вызываться с уровня приложения. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_CARD_MEMORY_PROBLEM — проблемы с памятью

карты. ASEHLERR_CARD_INSUFFICIENT_MEMORY — недостаточно сво-

бодной памяти карты для выполнения операции. ASEHLERR_BLOCKED — ключ заблокирован. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEHLERR_WRONG_KEY — неверно указан главный ключ карты.

37

Page 38: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLERR_INCORRECT_PARAMETER — один или более парамет-ров команды указаны неправильно.

ASEHLERR_API — ситуация не соответствует спецификации API вы-сокого уровня. См. также функции ASEHLCreateApp.

ASEHLGetCurrentApp Описание: Получает параметры текущего уровня карты или приложения.

Синтаксис: ASERESULT ASEAPI ASEHLGetCurrentApp(

HASECARD hAseCard LPPROPERTIES lpProperties); Параметры: hAseCard — содержит хэндл смарт-карты.

lpProperties — указатель на структуру PROPERTIES. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-вается.

ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-занную функцию.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

См. также функции ASEHLGetCurrentFile.

ASEHLGetCurrentFile Описание: Получает параметры текущего уровня карты или приложения.

Синтаксис: ASERESULT ASEAPI ASEHLGetCurrentFile(

HASECARD hAseCard LPFILEPROPERTIES lpFileProperties); Параметры: hAseCard — содержит хэндл смарт-карты.

lpFileProperties — указатель на структуру FILEPROPERTIES, в которую функция вернет текущие параметры файла.

38

Page 39: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-вается.

ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-занную функцию.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

ASEHLSelectCardLevel Описание: Переходит на главный уровень карты.

Синтаксис: ASERESULT ASEAPI ASEHLCreateFile(

HASECARD hAseCard); Параметры: hAseCard — содержит хэндл смарт-карты.

Все уровни доступа, которые были указаны для текущего приложения, обнуляются, как только происходит вызов данной функции. Если функция вы-полнена успешно, ID текущего приложения определяется как SC_CARD_LEVEL. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

См. также функции ASEHLSelectApp.

39

Page 40: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLSelectApp Описание: Переходит на уровень указанного приложения.

Синтаксис: ASERESULT ASEAPI ASEHLCreateFile(

HASECARD hAseCard WORD wApplicationID); Параметры: hAseCard — содержит хэндл смарт-карты.

hApplicationID — содержит ID приложения, на уровень которого необ-ходимо перейти.

Все уровни доступа, которые были указаны для текущего приложения, обнуляются, как только происходит вызов данной функции из другого прило-жения. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEERR_INVALID_ID — указанный ID неверен или имеет неправиль-

ный формат. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

См. также функции ASEHLSelectCardLevel. ASEHLOpenFile Описание: Открывает указанный файл на текущем уровне.

Синтаксис: ASERESULT ASEAPI ASEHLOpenFile(

HASECARD hAseCard WORD wFileID); Параметры:

40

Page 41: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

hAseCard — содержит хэндл смарт-карты. hFileID — содержит ID файла, который необходимо открыть.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEERR_INVALID_ID — указанный ID неверен или имеет неправиль-

ный формат. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

См. также функции ASEHLCloseFile. ASEHLCloseFile Описание: Закрывает текущий файл и возвращается на родительский уровень фай-

ла (уровень карты или приложения). Синтаксис:

ASERESULT ASEAPI ASEHLCloseFile( HASECARD hAseCard); Параметры: hAseCard — содержит хэндл смарт-карты. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-вается.

ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-занную функцию.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты.

41

Page 42: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-ка карты. Рекомендуется перегрузить карточку.

ASEHLERR_FAILURE — общая ошибка. См. также функции ASEHLOpenFile.

ASEHLRead Описание: Читает и возвращает указанные данные из текущего отрытого файла.

Синтаксис: ASERESULT ASEAPI ASEHLRead(

HASECARD hAseCard WORD wLength WORD wOffset LPBYTE lpDataBuffer); Параметры: hAseCard — содержит хэндл смарт-карты.

wLength — содержит число байт, которые необходимо прочитать. wOffset — содержит смещение от начала файла, с которого необходимо

начать чтение. lpDataBuffer — указатель на буфер, в который запишутся считанные

данные. Перед вызовом данной функции все условия доступа по чтению к те-

кущему файлу должны быть исполнены (то есть все необходимые ключи долж-ны быть уже предъявлены карте для проверки). Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEHLERR_API — ситуация не соответствует спецификации API вы-

сокого уровня. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_CARD_MEMORY_PROBLEM — проблемы с памятью

карты. ASEHLERR_INVALID_LENGTH — параметр wLength неверен или

имеет неверный формат.

42

Page 43: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEHLERR_INVALID_OFFSET — параметр wOffset неверен или име-ет неверный формат.

ASEHLERR_FAILURE — общая ошибка. ASEHLERR_UNFULFILLED_CONDITIONS — права доступа по чте-

нию для текущего файла не были выполнены корректно. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. См. также функции ASEHLOpenFile.

ASEHLWrite Описание: Записывает указанные данные в текущий отрытый файл.

Синтаксис: ASERESULT ASEAPI ASEHLWrite(

HASECARD hAseCard WORD wLength WORD wOffset LPBYTE lpData LPBYTE lpWriteKey); Параметры: hAseCard — содержит хэндл смарт-карты.

wLength — содержит число байт, которые необходимо записать на ИК. wOffset — содержит смещение от начала файла, с которого необходимо

начать запись. lpData — указатель на данные, которые необходимо записать. lpWriteKey — указатель на ключ, который защищает данный текущий

файл от записи. Перед вызовом данной функции все условия доступа по записи к теку-

щему файлу должны быть исполнены (т.е. все необходимые ключи должны быть уже предъявлены карте для проверки). Если карточка поддерживает за-щищенную запись данных (т.е. передаваемые на карту данные шифруются), и текущий файл был защищен от записи каким-либо ключом доступа или глав-ным ключом, то этот ключ должен быть указан в параметре lpWriteKey. Если файл не был защищен от записи, то параметр lpWriteKey должен быть установ-лен в NULL. Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат.

43

Page 44: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEHLERR_API — ситуация не соответствует спецификации API вы-сокого уровня.

ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка API. Рекомендуется перегрузить карточку.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_CARD_MEMORY_PROBLEM — проблемы с памятью

карты. ASEHLERR_INVALID_LENGTH — параметр wLength неверен или

имеет неверный формат. ASEHLERR_INVALID_OFFSET — параметр wOffset неверен или име-

ет неверный формат. ASEHLERR_FAILURE — общая ошибка. ASEHLERR_UNFULFILLED_CONDITIONS — права доступа по чте-

нию для текущего файла не были выполнены корректно. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_SECURE_WRITING_UNSUPPORTED — карта не поддер-

живает защищенную запись данных. ASEHLERR_WRONG_KEY — параметр lpWriteKey неверен или имеет

неверный формат. ASEERR_KEY_NOT_EXIST — указанный в параметре lpWriteKey

ключ не существует. См. также функции ASEHLOpenFile, ASEHLExtAuthentication, ASEHL-GetCardCaps.

ASEHLVerifyPIN Описание: Проверяет PIN-код, передавая его в открытом виде на карту.

Синтаксис: ASERESULT ASEAPI ASEHLVerifyPIN(

HASECARD hAseCard LPBYTE lpPIN); Параметры: hAseCard — содержит хэндл смарт-карты.

lpPIN — указатель на PIN-код. Возвращаемые значения:

44

Page 45: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_SUCCESS — функция выполнена успешно. ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_WRONG_KEY — указанный PIN-код неверен или имеет

неверный формат. ASEHLERR_BLOCKED — PIN-код заблокирован.

См. также функции ASEHLChangePIN, ASEHLExtAuthentication, ASEHLUnblockPIN.

ASEHLChangePIN Описание: Производит смену текущего значения PIN-кода.

Синтаксис: ASERESULT ASEAPI ASEHLChangePIN(

HASECARD hAseCard LPBYTE lpCardMainKey LPBYTE lpOldPIN LPBYTE lpNewPIN); Параметры: hAseCard — содержит хэндл смарт-карты.

lpCardMainKey — указатель на Главный ключ карты (обязательный па-раметр).

lpOldPIN — указатель на текущий PIN-код. lpNewPIN — указатель на новое значение PIN-кода. Данная функция должна вызываться только с уровня карты с обяза-

тельным указанием Главного ключа карты. Возвращаемые значения:

ASEERR_SUCCESS — функция выполнена успешно. ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой.

45

Page 46: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре hAseCard, неправильный или имеет неверный формат.

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка API. Рекомендуется перегрузить карточку.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_WRONG_KEY — указанный PIN-код неверен или имеет

неверный формат. ASEHLERR_BLOCKED — указанный PIN-код заблокирован.

См. также функции ASEHLVerifyPIN.

ASEHLUnblockPIN Описание: Производит сброс текущего значения PIN-кода, который был заблоки-

рован в результате неправильной проверки. Синтаксис:

ASERESULT ASEAPI ASEHLUnblockPIN( HASECARD hAseCard LPBYTE lpPIN LPBYTE lpCardMainKey); Параметры: hAseCard — содержит хэндл смарт-карты.

lpPIN — указатель на текущий PIN-код. lpCardMainKey — указатель на Главный ключ карты (обязательный па-

раметр). Данная функция должна вызываться только с уровня карты с обяза-

тельным указанием Главного ключа карты и текущего PIN-кода. Следует пом-нить, что некоторые карты могут быть разблокированы только лишь два или три раза.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно. ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат.

46

Page 47: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка API. Рекомендуется перегрузить карточку.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_WRONG_KEY — указанный PIN-код неверен или имеет

неверный формат. ASEHLERR_BLOCKED — указанный PIN-код заблокирован.

См. также функции ASEHLVerifyPIN.

ASEHLGetChallenge Описание: Производит запрос случайного числа с карты.

Синтаксис: ASERESULT ASEAPI ASEHLFetChallenge(

HASECARD hAseCard WORD wChallengeLength LPBYTE lpChallenge); Параметры: hAseCard — содержит хэндл смарт-карты.

wChallengeLength — длина запрашиваемого случайного значения (должна быть равна 8 байтам).

lpChallenge — указатель на переменную, в которую будут возвращено случайное 8-ми байтовое число.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка.

47

Page 48: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-вается.

ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-занную функцию.

ASEHLExtAuthentication Описание: Производит аутентификацию приложения при помощи указанного

ключа. Синтаксис:

ASERESULT ASEAPI ASEHLExtAuthentication( HASECARD hAseCard LPBYTE lpKey WORD wKeyRef WORD wKeyNumber); Параметры: hAseCard — содержит хэндл смарт-карты.

lpKey — указатель на ключ карты, с помощью которого необходимо произвести процедуру внешней аутентификации.

wKeyRef — содержит константу, определяющую тип ключа карты, с помощью которого необходимо произвести процедуру аутентификации. Воз-можные значения этого параметра:

SC_MAIN_KEY SC_ACCESS_KEY wKeyNumber — содержит номер ключа доступа для аутентификации

(если wKeyRef — SC_ACCESS_KEY). Данная функция позволяет приложению аутентифицировать само себя,

используя для этого определенный ключ смарт-карты. Эта функция является аналогом функции внешней аутентификации стандарта ISO 7816-4.

Для проведения процедуры аутентификации при использовании опре-деленного ключа сперва необходимо выбрать уровень этого ключа, используя функции ASEHLSelectCardLevel или ASEHLSelectApp.

Эта функция всегда вызывается перед вызовом функций чтения/записи файла, защищенного по этим параметрам при помощи Главного ключа карты или ключей доступа приложений. Таким образом осуществляется проверка то-го, что у запрашивающего чтение/запись пользователя есть право на эту опера-цию, т.е. он знает требуемые ключи.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат.

48

Page 49: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-дером.

ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка API. Рекомендуется перегрузить карточку.

ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_WRONG_KEY — указанный ключ неверен или имеет не-

верный формат. ASEHLERR_KEY_NOT_EXIST — указанный ключ не был создан или

не существует. См. также функции ASEHLSelectCardLevel, ASEHLSelectApp.

ASEHLIntAuthentication Описание: Производит аутентификацию карты при помощи вычислительного

ключа текущего уровня. Синтаксис:

ASERESULT ASEAPI ASEHLIntAuthentication( HASECARD hAseCard LPBYTE lpPIN LPBYTE lpCalcKey); Параметры: hAseCard — содержит хэндл смарт-карты.

lpPIN — указатель на PIN-код карты, который необходим для проведе-ния процедуры внутренней аутентификации.

lpCalcKey — указатель на вычислительный ключ, с помощью которого необходимо произвести процедуру внутренней аутентификации.

Данная функция позволяет приложению аутентифицировать смарт-карту, используя для этого вычислительный ключ текущего уровня. Эта функ-ция является аналогом функции внутренней аутентификации стандарта ISO 7816-4.

В зависимости от типа карты данная функция может потребовать вызов функции получения случайного числа с карты, запросить внутреннюю аутенти-фикацию при помощи определенного ключа, и затем проверить значение, воз-вращенное картой.

49

Page 50: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Эта функция вызывается, когда требуется проверить наличие на карте вычислительного ключа. Таким образом осуществляется проверка того, что приложение рабочей станции имеет дело с правильной картой, и что то или иное приложение карты осталось неизменным с момента своего создания.

Возвращаемые значения: ASEERR_SUCCESS — функция выполнена успешно.

ASEERR_CARD_COMM_ERROR — ошибка установки связи с картой. ASEERR_INVALID_CARD_HANDLE — хэндл, указанный в параметре

hAseCard, неправильный или имеет неверный формат. ASEERR_READER_COMM_ERROR — ошибка установки связи с ри-

дером. ASEHLERR_API_FATAL_ERROR — неустранимая фатальная ошибка

API. Рекомендуется перегрузить карточку. ASEHLERR_CARD_ERROR — внутренняя ошибка карты. ASEHLERR_CARD_FATAL_ERROR — неустранимая фатальная ошиб-

ка карты. Рекомендуется перегрузить карточку. ASEHLERR_FAILURE — общая ошибка. ASEERR_UNSUPPORTED_CARD — указанная карточка не поддержи-

вается. ASEERR_UNSUPPORTED_FUNCTION — карта не поддерживает ука-

занную функцию. ASEHLERR_WRONG_KEY — указанный ключ неверен или имеет не-

верный формат. ASEHLERR_KEY_NOT_EXIST — указанный ключ не был создан или

не существует. См. также функции ASEHLSelectCardLevel, ASEHLSelectApp.

50

Page 51: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Библиографический список 1. Л.К. Бабенко, Ищуков И.С., Макаревич О.Б. Защита информации с

использованием смарт-карт и электронных брелоков. – М.:Гелиос АРВ, 2003. – 352 с.

2. ASETM Developer’s Guide. Release 2.6. First Edition August 2000.

51

Page 52: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Содержание Краткое описание.................................................................................................... 3 Программирование смарт-карт ASE ..................................................................... 4 Работа с ключами.................................................................................................... 5 Разработка приложения.......................................................................................... 8 Выполнение работы.............................................................................................. 15 Задания................................................................................................................... 16 Варианты заданий:................................................................................................ 16 Приложение 1. Низкоуровневые функции работы с устройствами считывания .......................................................................................................... 177Приложение 2. Высокоуровневые функции API для работы с микропроцессорными карточками ................................................................... 311Библиографический список………………………………………………….…..51

52

Page 53: 681.3.06(07) УДК 3599 Л125window.edu.ru/resource/822/28822/files/tsure048.pdf · Работа посвящена вопросам изучения возможностей и

Бабенко Людмила Климентьевна Зорина Дарья Алексеевна Юрков Павел Юрьевич

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по изучению возможностей и приобретению практических навыков разработки

приложений с использованием смарт-карт ASE фирмы Athena Smartcard Solutions Ltd

по курсу Программно-аппаратные средства защиты информации

Для студентов специальностей

075400, 075300, 220600.

Ответственный за выпуск Юрков П.Ю. Редактор Надточий З.И.

Корректор Чиканенко Л.В.

ЛР № 020565 от 23.06.93г. Подписано к печати Формат 60х84 841/16 Бумага офсетная. Печать офсетная. Усл.п.л.-3,4. Уч. –изд. л. – 3,2. Заказ № Тираж 100 экз.

«С»

Издательство Таганрогского государственного радиотехнического университета ГСП 17 А, Таганрог, 28, Некрасовский, 44

Типография Таганрогского государственного радиотехнического университета ГСП 17 А, Таганрог, 28, Энгельса, 1

53