![]() |
Модераторы: AntonSaburov |
![]() ![]() ![]() |
|
firstone |
|
||||||||||||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
PC\SC - Интерфейс между PC и смарт картой
Общие сведения. Для того, чтобы обеспечить простой и понятный интерфейс между персональным компьютером и смарт картой был разработан стандарт PC/SC (Personal Computer - Smart Card). В частности этот стандарт определяет прозрачный интерфейс между приложением на PC и смарт картой. Совершенно неважно какой именно ридер (считывающее устройство) и через какой порт он подключен к Вашему компьютеру, Вы можете посылать данные прямиком на карту не заботясь о протоколах между ридером и компьютером и между ридером и смарт картой. Это существенно упрощает работу. Кроме этого, PCSC имеет возможность сообщить Вам когда и на каком ридере произошло какое либо событие, например: карта была удалена из устройства или наоборот вставлена, ошибки и сбои в передачи данных. Стандарт PCSC поддерживается практически всеми операционными системами. В ос Windows реализация PCSC представлена библиотекой winscard.dll. В ос Linux PCSC представлен опциональным пакетом pcsc-lite. Для Java разработан специальный фреймворк jPCSC. Спецификация Как и стандарты ISO стандарт PCSC разбит на разделы: Часть 1: Введение и обзор архитектуры Часть 2: Требования к интерфейсу совместимых карт и ридеров Часть 3: Требования для устройств соединяющихся с ПК Часть 4: Обсуждение дизайна считывающих устройств Часть 5: Определение мэнеджера ICC ресурсов (ICC = Integrated Circuit Card или Integrated Chip Card, т.е. смарт карта) Часть 6: Определение интерфейса ICC Service Provider'а Часть 7: Application Domain/Developer Design Considerations Часть 8: Рекомендации для безопасности карт и устройств секретности Часть 9: Ридеры с расширенными возможностями Часть 10: Ридеры с возможностью Secure Pin Entry В отличии от ISO, PCSC - открытый стандарт и доступен для скачивания с сайта организации PCSCWorkGroup (см. Ссылки (1)). Больше всего нас интересует пятая часть спецификации. Именно в ней определены все функции PCSC-интерфейса. Далее мы рассмотрим основные функции для работы со смарт картами (хотя в самой спецификации вы можете найти также функции для работы с ридерами). Архитектура и функциональность. Полностью дизайн архитектуры мы затрагивать не будем, так как это иррелевантно для нас. Единственное, что необходимо уяснить - это как хранятся данные о ридерах и смарт картах в самой системе. И так, вся функциональность обеспечивается за счет:
Константы и определения типов: RESPONSECODE - код возврата из всех PCSC-функций. Коды и их значения смотрите в ссылке 4. Функции ResourceManager`а: Для того, чтобы выполнить какую-либо операцию необходимо заведомо получить контекст для ResourceManager`a, который будет использован. Без этого контекста (проще говоря - handle) работа с PCSC невозможна.
Устанавливает и возвращает новый контекст - handle на объект ResourceManager. Параметры: Scope - определяет область активности handle`a, Могут быть переданы следующие константы (реальные значения этих констант могут варьироваться в зависимости от среды): SCARD_SCOPE_USER = 0x00000000 Все операции с базой данных выполняются в сфере пользователя. SCARD_SCOPE_TERMINAL = 0x00000001 Операции с базой данных выполняются на уровне всего терминала (т.е. компьютера, например) SCARD_SCOPE_SYSTEM = 0x00000002 Операции выполняются на уровне всей системы. Reserved1, Reserved2 - Зарезервированы для будующего использования и должны быть равны нулю. MSDN:SCardEstablishContext
Освобождает ранее выделенный handle (контекст) функцией EstablishContext. MSDN: SCardReleaseContext Функции ResourceDB нас не будут особо интересовать. Если вы все же хотите с ними ознакомиться, зайдите на следующую страничку: Smart Card Database Management Functions Из функций ResourceQuery нам будет нужна только одна функция - ListReaders, которая позволяет получить список имен всех подключенных ридеров. Имя ридера необходимо для того, чтобы подключить смарт карту через PCSC.
Параметры: Groups - содержит список названий групп, ридеры которых необходимо вернуть. В базе данных ресурсов (ResourceDB) наряду с ридерами хранятся еще и группы. Каждый ридер может быть ассоциирован с несколькими группами а каждая группа идентифицируется уникальным текстовым именем (впрочем, как и ридер). Я еще никогда не прибегал к использованию этого параметра, и всегда передавал NULL в этом параметре, что означает - вернуть список ридеров всех групп без повторений. Readers - этот OUT-параметр будет содержать указатель на список наименований ридеров, установленных в системе. MSDN: SCardListReaders Функции SCardTrack-а. Как я упомянул выше, класс SCardTrack позволяет программе получать оповещения о каком-либо событии, например: установка соединения со смарт картой и его потеря, нахождение определенной смарт карты с заданным ATR (Answer To Reset - см. ISO/IEC 7816-4) и т.д. Мне приходилось писать средства мониторинга смарт карт и поэтому я не раз прибегал к использованию функционала этого класса. И так, разберем наиболее полезные функции.
Параметры: ReaderStates - массив структур SCARD_READERSTATE, каждая из которых содержит предыдущее состояние ридера (до вероятного изменения) и текущее состояние ридера. Timeout - таймаут в течении которого производится мониторинг заданных ридеров. Функция возвращает значение либо в случае события на одном из заданных ридеров либо по истечении заданного тайм-аута. Структура SCARD_READERSTATE имеет следующий вид:
Нас интересуют прежде всего вот эти поля: Reader - имя ридера, на котором зарегестрировано изменение состояния CurrentState - предыдущее сотояние ридера EventState - новое состояние ридера. Предыдущее и новое состояния ридера могут включать в себя следующие флаги:
MSDN: SCARD_READERSTATE Structure MSDN: SCardGetStatusChange
Этот метод отменяет все операции мониторинга (в частности работу функции GetStatusChange). MSDN: SCardCancel Функции SCardComm - пересылка данных на карту и получение данных от карты.
Метод Connect устонавливает связь со смарт картой. Вызов этого метода обязателен для работы со смарт картой. Параметры: ReaderName - имя ридера где присутствует карта. Может быть получено вызовом ListReaders. Flags - задает режим доступа к карте: эксклюзивный (SCARD_SHARE_EXCLUSIVE) - только текущее приложение имеет доступ к карте, общий (SCARD_SHARE_SHARED) - другие приложения могут иметь доступ к карте, прямой (SCARD_SHARE_DIRECT) - прямой доступ к ридеру вне зависимости от того есть ли в нем карта или нет. PreferredProtocols - предпочитаемые протоколы для связи с картой (см. "Протоколы Т0 и Т1"): Т0 (SCARD_PROTOCOL_T0) Т1 (SCARD_PROTOCOL_T1) Лучше всегда задавать оба протокола. В этом случает система сама выберет нужный. ActiveProtocol - Возвращаемое значение - выбранный протокол для связи. MSDN: SCardConnect
Закрывает доступ к карточке. Последующие операции ввода/вывода не возможны. Параметры: Disposition - действие при отключении от карты: SCARD_LEAVE_CARD - оставить карту в ридере и не предпринимать никаких действий SCARD_RESET_CARD - выполнить reset (сброс) SCARD_UNPOWER_CARD - отключить питание карты SCARD_EJECT_CARD - вытащить карту из ридера (ридер должен иметь соответствующий механизм) Есть еще режим для конфискации карты, но он почему-то не поддерживается WinAPI. MSDN: SCardDisconnect
А это самая главная функция. Ее задача - переслать на карту данные и получить ответ. Параметры: SendPci - структура содержащая информацию о протоколе для пересылки. Эта структура имеет следующие поля:
SendBuffer - содержит данные, которые нужно послать на карту RecvPci - содержит протокол для принятия данных с карты. RecvBuffer - содержит данные полученные с карты. RecvLength - длина RecvBuffer на входе/количество байт полученных с карты на выходе. Я на самом деле не понимаю почему нельзя былo сделать эту функцию попроще (убрать эти структуры). Из своего опыта я могу заключить, что если пересылать вместо параметров SendPci и RecvPci нули (т.е. NULL), то все прекрасно работает. MSDN: SCardTransmit Библиография: 1) Interoperability Specification for ICCs and Personal Computer Systems (Part 5. ICC Resource Manager Definition) Ссылки: 1) Страница Download спецификации PCSC 2) winscard.h 3) winsmcrd.h 4) scarderr.h Это сообщение отредактировал(а) firstone - 28.2.2008, 18:49 --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
||||||||||||||||||||||
|
|||||||||||||||||||||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java Card | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |