Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 7 мини-накопители смарт-карт, сертифицированные с помощью программы логотипа Windows (WLP), автоматически загружаются и устанавливаются компонентами Windows Plug and Play. В Windows 7 также представлен минодрайвер класса для карт, совместимых с PIV, и карт, поддерживающих интерфейс GIDS.
При вставке смарт-карты в средство чтения Windows выполняет следующие процессы обнаружения:
Процесс Plug and Play для смарт-карты:
Этот процесс запрашивает и загружает сертифицированный логотипом минидрайвер из Центра обновления Windows с помощью Plug and Play.
Процесс обнаружения Winscard: этот процесс связывает совместимую смарт-карту с минидрайвером класса, совместимого с PIV или GIDS.
Процесс обнаружения минидрайверов класса смарт-карт Windows: этот процесс связывает установленный минидрайвер с смарт-картой.
В следующей таблице перечислены значения AID, используемые различными процессами обнаружения.
| Имя ПОМОЩНИКА | Значение AID | Описание |
|---|---|---|
| PIV AID | A0 00 00 03 08 00 00 10 00 xx yy | PIV AID, который не содержит сведения о версии. Платформа смарт-карт Майкрософт игнорирует наименее значимые 2 байта. |
| ПОМОЩЬ MS GIDS | A0 00 00 03 97 42 54 46 59 xx yy | Microsoft (MS) GIDS AID, которая не содержит информацию о версии. Наименее значимые 2 байта не отправляются на карту, но зарезервированы хостом следующим образом:
|
| ПОМОЩЬ SC PNP | A0 00 00 03 97 43 49 44 5F 01 00 | Смарт-карта Plug and Play AID. |
В следующей таблице перечислены файлы, используемые процессом обнаружения.
| Приказ | Значение инструкции (INS) |
|---|---|
| МФ | 0x3F00 |
| EF.ATR | 0x2F01 |
В следующей таблице перечислены команды, используемые различными процессами обнаружения.
| Приказ | Значение инструкции (INS) |
|---|---|
| ВЫБЕРИТЕ | 0xA4 |
| ПОЛУЧЕНИЕ ДАННЫХ | 0xCA |
| ПОЛУЧЕНИЕ ОТВЕТА | 0xC0 |
Процесс автоматического распознавания и настройки смарт-карт
Плаг энд Плей устанавливает минидрайвер смарт-карты, если нет совместимого встроенного минидрайвера. Plug and Play также обновляет установленные минидрайверы смарт-карт через Центр обновления Windows.
Для выполнения любой из этих задач Plug and Play должен уметь получать уникальный идентификатор смарт-карты. Начиная с Windows 7, в следующем описан процесс обнаружения смарт-карт, который plug and Play использует для получения уникального идентификатора карты:
Plug and Play получает исторические байты из ATR. Эти байты используются позже в этом процессе обнаружения.
Plug and Play отправляет команду SELECT для определения SC PNP AID. Plug and Play отправляет команду GET DATA для поиска проприетарного тега Windows 0x7F68 (в кодировке ASN.1 DER). Дополнительные сведения см. в следующем подразделе "Идентификатор карты Windows Smart Card Framework". Если эта команда выполнена успешно, возвращается список уникальных идентификаторов. Plug and Play использует первый идентификатор в списке в качестве идентификатора устройства смарт-карты и использует это значение для уникального идентификатора карты. Дополнительные сведения см. в разделе "Идентификаторы устройств".
Если Plug and Play выводит уникальный идентификатор для смарт-карты, то он переходит к шагу 12.
Если Windows не удается получить идентификатор устройства на шаге выше, он выдает select MF и EF. ATR, за которой следует команда READ BINARY, если Windows успешно получает уникальный идентификатор, который он может использовать в качестве идентификатора устройства для WU, перейдите к шагу 12.
Если Plug and Play не удается получить уникальный идентификатор на шаге выше, он выдает команду SELECT для PIV AID. Если Plug and Play успешен, он считает смарт-карту совместимой с устройством PIV. Plug and Play использует следующий код в качестве уникального идентификатора карты:
- Идентификатор устройства, совместимого с PIV, указывается в качестве совместимого идентификатора для устройства. Дополнительные сведения см. в разделе "Совместимые идентификаторы".
- Исторические байты ATR карты в качестве идентификатора устройства. Если нет исторических байтов ATR, Windows использует идентификатор устройства, совместимого с PIV, в качестве идентификатора устройства.
Если Plug and Play выводит уникальный идентификатор для смарт-карты, то он переходит к шагу 12.
Если команда SELECT на шаге 4 не выполняется, Windows выдает команду SELECT для MS GIDS AID. Если Plug and Play успешно выбирает MS GIDS AID, она считает смарт-карту совместимой с устройством GIDS. Plug and Play использует следующий код в качестве уникального идентификатора карты:
- Идентификатор устройства, совместимого с GIDS, используется как совместимый идентификатор.
- Исторические байты ATR карты в качестве идентификатора устройства. Если нет исторических байтов ATR, Plug and Play использует идентификатор устройства, совместимый с GIDS, в качестве идентификатора устройства.
Если Plug and Play выводит уникальный идентификатор для смарт-карты, то он переходит к шагу 12.
Если Plug and Play не удаётся выбрать PIV AID или MS GIDS AID, он использует исторические байты ATR карты (если таковые имеются) в качестве идентификатора устройства для уникального идентификатора смарт-карты.
Если Plug and Play не содержит исторические байты ATR, у него недостаточно сведений для Центра обновления Windows. Plug and Play не удается обнаружение с ошибкой SCARD_E_UNEXPECTED.
Если Plug and Play выводит уникальный идентификатор для смарт-карты, то он переходит к шагу 12.
Plug and Play останавливает процесс обнаружения и использует уникальный идентификатор.
Начиная с Windows 8, если Plug and Play не удается найти драйвер для карты, карта связывается с встроенным драйвером NULL. Дополнительное программное обеспечение, связанное с картой, необходимо для работы карты при подключении к средству чтения смарт-карт, подключенного к компьютеру.
Процесс обнаружения Winscard
Процесс обнаружения Winscard (Winscard.dll) используется для связывания карточки в системе с установленным мини-драйвером. Процесс запускается при вызове SCardListCards или SCardLocateCards .
Начиная с Windows 7, в следующем описан процесс обнаружения Winscard:
Winscard ищет в реестре в разделе Calais подразделы, представляющие смарт-карты, установленные на компьютере. Эти подразделы находятся по адресу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards
Winscard выполняет поиск каждого подраздела под ключом SmartCards для сопоставления между значением ATR подраздела и значением ATR, полученным из смарт-карты. Если совпадение найдено, перейдите к шагу 6.
Winscard ищет совпадение между значением подраздела SmartCards для минидрайвера и значением в подразделе кэша ATR PIV устройства (для карт PIV) или кэша ATR IDMP (для карт, совместимых с Microsoft GIDS). Если совпадение найдено, перейдите к шагу 6.
Winscard выдаёт команду SELECT для MS GIDS AID. Если эта команда выполнена успешно, перейдите к шагу 6.
Если шаг 4 завершается ошибкой, Winscard выдает команду SELECT для PIV AID. Если эта команда выполнена успешно, перейдите к шагу 6.
Winscard возвращает имя карты, которое соответствует ключу реестра minidriver, совпадающему с картой.
В следующей таблице описаны различные ключи реестра, которые использует процесс обнаружения Winscard.
| Ключ реестра | Использование |
|---|---|
| HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Cryptography\Calais\SmartCards | Winscard использует этот ключ в качестве ключа Calis\SmartCards на шаге 1. |
| HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft \Cryptography\Calais\PIV Device ATR Cache | Если совпадение найдено на шаге 4, полный ATR соответствующей карточки хранится в этом разделе реестра как двоичное значение. Имя записи выбирается случайным образом.
После кэширования этой записи он используется на шаге 3 для повышения производительности. |
| HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft \Cryptography\Calais\IDMP ATR Cache | Если совпадение найдено на шаге 5, полный ATR совпавшей карты хранится в данном ключе реестра как двоичное значение. Имя записи выбирается случайным образом.
После кэширования этой записи он используется на шаге 3 для повышения производительности. |
Процесс обнаружения минидрайвера класса смарт-карт Windows
Минидрайвер класса смарт-карт Windows выполняет процесс обнаружения, когда вызывается CardAcquireContext. Мини-драйвер выполняет этот процесс обнаружения, чтобы пометить связанную карту как совместимую с PIV или Microsoft GIDS.
Минидрайвер осуществляет команду SELECT для PIV AID. Если команда выполнена успешно, карточка помечается как совместимая с PIV, и процесс обнаружения останавливается.
В противном случае минидрайвер выполняет команду SELECT для MS GIDS AID. Если команда завершается успешно или терпит неудачу в нахождении AID, минидрайвер помечает карту как MS GIDS.
Если смарт-карта была обнаружена ранее с помощью процесса обнаружения Winscard с минидрайвером класса, она может не реагировать на команду SELECT для PIV или GIDS AID. В этой ситуации это должна быть карта от поставщика, который реализует интерфейс GIDS card-edge с пользовательским идентификатором приложения (AID). Такие карточки могут расширить модель данных смарт-карт Майкрософт с дополнительными объектами данных.
Поставщики смарт-карт PIV и GIDS могут использовать микродрайвер класса смарт-карт Windows и добавить брендинг, предоставив пакет установки с одним .INF-файлом. Дополнительные сведения об использовании минидрайвера класса для совместимых карт см. в примере INF в Smart Card Plug and Play. В INF используются только исторические байты для сопоставления Plug and Play.
INF-файл, который поставщик предоставляет, создает записи в подразделе реестра Calais\SmartCards с информацией следующего содержания.
| Имя записи | Тип | Ценность |
|---|---|---|
| 80000001 | Струна | Расположение минидрайвера карты. Это может быть полный путь к минидрайверу, предоставленному поставщиком, или имя файла в каталоге system32 или в хранилище драйверов. Рекомендуется, чтобы минидрайвер, предоставленный пакетом драйвера, имел полный путь к минидрайверу и обеспечивал его запуск из хранилища драйверов. Входящий минидрайвер, msclmd.dll, хранится в каталоге %windir%\system32. |
| ATR | двоичный | ATR карточки |
| ATRMask | двоичный | Маска ATR карты |
| Поставщик шифрования | Струна | Поставщик шифрования смарт-карт Microsoft Base |
| Поставщик хранилища ключей смарт-карты | Струна | Поставщик хранилища ключей смарт-карт Майкрософт |
Механизмы выбора
Приложения, содержащие идентификаторы Майкрософт
Платформа смарт-карт Windows пытается выбрать приложение с помощью MICROSOFT Plug and Play AID. Если карта не поддерживает указанный AID, она должна вернуть ошибку после команды SELECT. Если команда SELECT успешно завершена, платформа пытается определить карточку и соответствующий мини-накопитель смарт-карты, выполнив команду GET DATA.
Команды GET DATA выполняются независимо от того, поддерживается ли SC Plug and Play AID. Это позволяет приложениям, которые связаны с другими идентификаторами ИИД или не связаны с любыми идентификаторами ИИД, реализовать механизмы выбора карт в этой спецификации.
ПОЛУЧЕНИЕ ДАННЫХ
После выбора Plug and Play MS AID на карточке структура смарт-карты выдает команду GET DATA с фирменным тегом Windows 0x7F68. Если карточка поддерживает команду GET DATA и собственный тег, он отвечает, возвращая список одного или нескольких уникальных идентификаторов. Уникальные идентификаторы должны быть структурированы, как определено в следующем разделе "Идентификатор карточки Windows Smart Card Framework".
Платформа смарт-карт Windows использует только первый уникальный идентификатор в списке для поиска и установки соответствующего мини-драйвера смарт-карты. Другие идентификаторы могут использоваться в будущем.
Команда SELECT PIV AID
Чтобы определить приложение PIV, Windows выдает команду SELECT PIV AID. Если эта команда выполнена успешно, приложение PIV присутствует на карточке и теперь выбрано. В этой ситуации фреймворк смарт-карт Windows теперь может связать минидрайвер, совместимый со стандартом PIV, с карточкой.
Команда SELECT MS GIDS AID
Чтобы определить приложение MS GIDS, используется команда SELECT MS GIDS AID. Если эта команда выполнена успешно, приложение MS GIDS присутствует на карточке и теперь выбрано. Платформа смарт-карт Windows теперь может связать минидрайвер, совместимый с MS GIDS, с картой.
Использование исторических байтов ATR
В следующих условиях платформа смарт-карт Windows возобновляет использование исторических байт ATR для определения минидрайвера для загрузки:
- Смарт-карта не поддерживает команду GET DATA.
- Смарт-карта не поддерживает методы выбора AID в этой спецификации.
Использование исторических байтов ATR — это устаревший метод, используемый для идентификации вставленной карточки. Фреймворк использует все исторические байты в поиске минидрайвера.
Идентификатор карточки Windows Smart Card Framework
Если смарт-карта поддерживает команду GET DATA, платформа смарт-карт Windows ожидает, что карта возвращает DER-TLV закодированный массив байтов, отформатированный в следующей структуре ASN.1.
CardID ::= SEQUENCE {
version Version DEFAULT v1,
vendor VENDOR,
guids GUIDS }
Version ::= INTEGER {v1(0), v2(1), v3(2)}
VENDOR ::= IA5STRING(SIZE(0..8))
GUID ::= OCTET STRING(SIZE(16))
GUIDS ::= SEQUENCE OF GUID
Параметр Version должен быть установлен в 0 (v1).
Элемент VENDOR должен иметь значение "MSFT".
Элемент GUID — это 16-байтовый GUID, который однозначно идентифицирует комбинацию карты и приложения. Это значение используется для обнаружения и загрузки соответствующего минидрайвера смарт-карт.
Примечание.
Поставщик IHV или ISV, который выдает приложение, должен создать уникальный GUID для комбинации карты и приложения.