検出プロセス

Windows 7 以降では、Windows ロゴ プログラム (WLP) を通じてロゴ認定を受けたスマート カード ミニドライバーは、Windows プラグ アンド プレイ コンポーネントによって自動的にダウンロードおよびインストールされます。 Windows 7 では、GIDS カード エッジをサポートする PIV 互換カードとカード用のクラス ミニドライバーも導入されています。

スマート カードがリーダーに挿入されると、Windows は次の検出プロセスを実行します。

  • スマート カード プラグ アンド プレイ プロセス:

    このプロセスでは、プラグ アンド プレイを通じて Windows Update からロゴ認定ミニドライバーを要求してダウンロードします。

  • Winscard 検出プロセス: このプロセスは、互換性のあるスマート カードを PIV または GIDS 互換のクラス ミニドライバーに関連付けます。

  • Windows スマート カード クラス ミニドライバー検出プロセス: このプロセスは、インストールされているミニドライバーをスマート カードに関連付けます。

次の表に、さまざまな検出プロセスで使用される AID 値を示します。

AID名 AID 値 説明
PIV AID A0 00 00 03 08 00 00 10 00 xx yy PIV AID。バージョン情報は含まれません。 Microsoft スマート カード フレームワークは、最下位 2 バイトを無視します。
MS GIDS AID A0 00 00 03 97 42 54 46 59 xx yy

Microsoft (MS) GIDS AID。バージョン情報は含まれません。

最下位 2 バイトはカードに送信されませんが、次のようにホストによって予約されます。

  • これらのバイトの最初の (xx) は、GIDS バージョン番号の Windows スマート カード フレームワークによって使用されます。 このバイトは、GIDS 仕様リビジョン番号 (0x01または0x02) に設定する必要があります。
  • 2 番目のバイト (yy) は、カード アプリケーションで使用するために予約されています。
SC PNP AID A0 00 00 03 97 43 49 44 5F 01 00 スマート カード プラグ アンド プレイ AID。

次の表に、検出プロセスで使用されるファイルの一覧を示します。

コマンド 命令 (INS) 値
MF 0x3F00
エフ。ATR 0x2F01

次の表に、さまざまな検出プロセスで使用されるコマンドの一覧を示します。

コマンド 命令 (INS) 値
SELECT 0xA4
データの取得 0xCA
レスポンスを取得 0xC0

スマート カード プラグ アンド プレイ プロセス

プラグ アンド プレイでは、互換性のある受信トレイ ミニドライバーが利用できない場合は、スマート カード ミニドライバーをインストールします。 プラグ アンド プレイでは、Windows Update を使用して、インストールされているスマート カード ミニドライバーも更新されます。

これらのタスクのいずれかを実行するには、プラグ アンド プレイでスマート カードの一意の ID を取得できる必要があります。 Windows 7 以降では、プラグ アンド プレイがカードの一意の ID を取得するために使用するスマート カード検出プロセスについて説明します。

  1. プラグ アンド プレイは、ATR から履歴バイトを取得します。 これらのバイトは、この検出プロセスの後半で使用されます。

  2. プラグ アンド プレイは SELECT コマンドを発行して SC PNP AID を見つけます。プラグ アンド プレイは GET DATA コマンドを発行して、Windows 独自のタグ 0x7F68 (ASN.1 DER エンコード) を見つけます。 詳細については、次のサブセクション「Windows スマート カード フレームワーク カード識別子」を参照してください。 このコマンドが成功すると、一意の識別子の一覧が返されます。 プラグ アンド プレイでは、一覧の最初の識別子がスマート カードのデバイス ID として使用され、カードの一意の ID にその値が使用されます。 詳細については、「デバイス ID」を参照してください。

  3. プラグ アンド プレイがスマート カードの一意の ID を取得した場合は、手順 12 に進みます。

  4. Windows が上記の手順でデバイス ID を取得できない場合は、MF と EF の SELECT が発行されます。ATR の後に READ BINARY コマンドが続きます。Windows が WU のデバイス ID として使用できる一意識別子の取得に成功した場合は、手順 12 に進みます。

  5. プラグ アンド プレイが上記の手順で一意の識別子を取得できない場合は、PIV AID の SELECT コマンドを発行します。 プラグ アンド プレイが成功した場合、スマート カードは PIV 互換デバイスと見なされます。 プラグ アンド プレイでは、カードの一意の ID として次のものが使用されます。

    1. デバイスの互換性 ID としての PIV 互換デバイス ID。 詳細については、「 互換性のある ID」を参照してください。
    2. デバイス ID としてのカードの ATR 履歴バイト。 ATR バイトの履歴がない場合、Windows ではデバイス ID として PIV 互換のデバイス ID が使用されます。
  6. プラグ アンド プレイがスマート カードの一意の ID を取得した場合は、手順 12 に進みます。

  7. 手順 4 の SELECT コマンドが失敗した場合、Windows は MS GIDS AID に対して SELECT コマンドを発行します。プラグ アンド プレイが MS GIDS AID の選択に成功した場合、スマート カードは GIDS 互換デバイスと見なされます。 プラグ アンド プレイでは、カードの一意の ID として次のものが使用されます。

    1. GIDS 互換デバイス ID を互換性のある ID として使用します。
    2. デバイス ID としてのカードの ATR 履歴バイト。 ATR の履歴バイトがない場合、プラグ アンド プレイではデバイス ID として GIDS 互換のデバイス ID が使用されます。
  8. プラグ アンド プレイがスマート カードの一意の ID を取得した場合は、手順 12 に進みます。

  9. プラグ アンド プレイで PIV AID または MS GIDS AID の選択に失敗した場合、スマート カードの一意の ID のデバイス ID としてカードの ATR 履歴バイト (存在する場合) が使用されます。

  10. プラグ アンド プレイに ATR 履歴バイトがない場合、Windows Update に関する十分な情報がありません。 プラグ アンド プレイは、SCARD_E_UNEXPECTEDで検出プロセスに失敗します。

  11. プラグ アンド プレイがスマート カードの一意の ID を取得した場合は、手順 12 に進みます。

  12. プラグ アンド プレイは検出プロセスを停止し、一意の識別子を使用します。

Windows 8 以降では、プラグ アンド プレイでカードのドライバーが見つからない場合、カードは受信トレイの NULL ドライバーとペアリングされます。 カードに固有の追加ソフトウェアは、PC に接続されているスマート カード リーダーに接続されている場合にカードが機能するために必要です。

Winscard 検出プロセス

Winscard (Winscard.dll) 検出プロセスは、システム内のカードをインストール済みのミニドライバーに関連付けるために使用されます。 このプロセスは、 SCardListCards または SCardLocateCards が呼び出されたときに開始されます。

Windows 7 以降では、Winscard 検出プロセスについて次に説明します。

  1. Winscard は、コンピューターにインストールされているスマート カードを表すさまざまなサブキーについて、カレー キーの下のレジストリを検索します。 これらのサブキーは次の場所にあります。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards

  2. Winscard では、SmartCards サブキーの下にある各サブキーで、サブキーの ATR 値とスマート カードから取得された ATR 値との一致が検索されます。 一致するものが見つかった場合は、手順 6 に進みます。

  3. Winscard は、ミニドライバーの SmartCards サブキー値と、PIV デバイス ATR キャッシュ (PIV カードの場合) または IDMP ATR キャッシュ (Microsoft GIDS 互換カードの場合) サブキー内の値との間の一致を検索します。 一致するものが見つかった場合は、手順 6 に進みます。

  4. Winscard は、MS GIDS AID の SELECT コマンドを発行します。 このコマンドが成功した場合は、手順 6 に進みます。

  5. 手順 4 で失敗した場合、Winscard は PIV AID の SELECT コマンドを発行します。 このコマンドが成功した場合は、手順 6 に進みます。

  6. Winscard はカードの名前を返します。これは、カードに一致するミニドライバー レジストリ キーに対応します。

次の表では、Winscard 検出プロセスで使用されるさまざまなレジストリ キーについて説明します。

レジストリ キー 用途
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Cryptography\Calais\SmartCards Winscard では、手順 1 でこのキーを Calais\SmartCards キーとして使用します。
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 互換としてマークするために、この検出プロセスを実行します。

  1. ミニドライバーは、PIV AID の SELECT コマンドを発行します。 コマンドが成功すると、カードは PIV 互換としてマークされ、検出プロセスは停止します。

  2. それ以外の場合、ミニドライバーは MS GIDS AID の SELECT コマンドを発行します。 コマンドが成功した場合、または AID の検索に失敗した場合、ミニドライバーはカードを MS GIDS としてマークします。

クラス ミニドライバーを使用して Winscard 検出プロセスを通じてスマート カードが以前に検出された場合、PIV または GIDS AID の SELECT コマンドに応答しない可能性があります。 この状況では、カスタム AID を使用して GIDS カード エッジを実装するベンダーのカードである必要があります。 このようなカードは、追加のデータ オブジェクトを使用して Microsoft スマート カード データ モデルを拡張できます。

PIV および GIDS スマート カード ベンダーは、Windows スマート カード クラス ミニドライバーを使用し、INF のみのインストール パッケージを提供することでブランド化を追加できます。 互換性のあるカードにクラス ミニドライバーを使用する方法の詳細については、 スマート カード プラグ アンド プレイの INF サンプルを参照してください。 INF のプラグ アンド プレイ マッチングには履歴バイトのみが使用されます。

ベンダーが提供する INF ファイルは、次の情報を含む、Calais\SmartCards レジストリ サブキーの下にエントリを作成します。

エントリ名 タイプ 価値
80000001 カードのミニドライバーの場所。 これには、ベンダーが提供するミニドライバーへの完全なパス、または system32 ディレクトリまたは ドライバー ストア内のファイルの名前を指定できます。 ドライバー パッケージによって提供されるミニドライバーは、ミニドライバーへの完全なパスを提供し、ドライバー ストアからミニドライバーを実行することをお勧めします。 受信トレイ ミニドライバー (msclmd.dll) は、%windir%\system32 ディレクトリ下に格納されます。
ATR バイナリ カードのATR
ATRMask バイナリ カードの ATR マスク
暗号プロバイダー Microsoft ベース スマートカード クリプト プロバイダー
スマート カード キー ストレージ プロバイダー Microsoft スマート カード キー ストレージ プロバイダー

選択メカニズム

Microsoft 識別子を含むアプリケーション

Windows スマート カード フレームワークは、Microsoft プラグ アンド プレイ AID を使用してアプリケーションの選択を試みます。 カードが指定した AID をサポートしていない場合は、SELECT コマンドの後にエラーが返されます。 SELECT コマンドが正常に完了すると、フレームワークは GET DATA コマンドを発行して、カードと対応するスマート カード ミニドライバーの識別を試みます。

GET DATA コマンドは、SC プラグ アンド プレイ AID がサポートされているかどうかに関係なく実行されます。 これにより、他の AID に関連付けられているか、または AID に関連付けられていないアプリケーションで、この仕様のカード選択メカニズムを実装できます。

データの取得

カードのプラグ アンド プレイ MS AID を選択すると、スマート カード フレームワークは、0x7F68の Windows 独自のタグを使用して GET DATA コマンドを発行します。 カードが GET DATA コマンドと独自のタグをサポートしている場合は、1 つ以上の一意識別子のリストを返すことによって応答します。 一意の識別子は、次の「Windows スマート カード フレームワーク カード識別子」セクションで定義されているように構成する必要があります。

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 履歴バイト ATR を使用して、読み込むミニドライバーを決定します。

  • スマート カードは GET DATA コマンドをサポートしていません。
  • スマート カードは、この仕様の AID 選択方法をサポートしていません。

ATR 履歴バイトの使用は、挿入されたカードを識別するために使用される従来の方法です。 フレームワークでは、ミニドライバーの検索ですべての履歴バイトが使用されます。

Windows スマート カード フレームワーク カード識別子

スマート カードが GET DATA コマンドをサポートしている場合、Windows スマート カード フレームワークは、カードが次の ASN.1 構造体で書式設定された DER-TLV エンコードされたバイト配列を返す必要があります。

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 を作成する必要があります。