ATR を使用して、ISO14443A または ISO14443B タイプのカードを持っているかどうかを判断することはできますか? はいの場合、どのように?
3 に答える
mictterが正しく説明したように、実際のAT Rは ISO 7816 の連絡先カードに対してのみ存在します。ISO 14443 に相当するものは ATQA/ATQB である可能性があるという議論に従うことができます。これは、アクティベーション後にタグから得られる最初の回答であるためです。ただし、ATR に相当するものは、ATQA + SAK + ATS (タイプ A の場合) および ATQB + ATTRIB への回答の組み合わせ (タイプ B の場合)。
表示されている ATR については、これはPC/SC 仕様に従って PC/SC でエミュレートされた ATR であると想定しています。
スマートカード (ISO 14443-4 トランスポート プロトコル) の場合、この ATR の形式は次のようになります。
3B 8n 80 01 T[1]..T[n] xx
存在するT[1]
ことT[n]
で
- ISO 14443 タイプ A の ATS 履歴バイト、または
- ATQB アプリケーション データ (
T[1] T[2] T[3] T[4]
)、ATQB プロトコル情報フィールド (T[5] T[6] T[7]
)、および ATTRIB MBLI フィールド (T[8]
) の連結。
したがって、タイプ A または B のスマートカードであるかどうかを推測するために、何らかの形式の照合を行うことができる場合があります。つまり、n == 8 の場合、パラメータは、タイプ B カードのフィールドに期待されるものと一致しますT[1]
。T[n]
それでも、任意のカードに対して信頼できる結果が得られるとは思えません。
非接触型メモリーカードの場合、状況は確実に良くなります。これらのカードの場合、エミュレートされた ATR は次のようになります。
3B 8n 80 01 T[1]..T[n] xx
アプリケーション識別子の存在インジケータ (タグ )を含むようにしT[1]
ます。したがって、通常は次のようになります。T[n]
4F
T[1]
T[n]
80 4F yy A000000306 ss nnnn 00000000
ss
カードのプロトコルを識別して:
0x01: ISO 14443-1 Type A
0x02: ISO 14443-2 Type A
0x03: ISO 14443-3 Type A
0x05: ISO 14443-1 Type B
0x06: ISO 14443-2 Type B
0x07: ISO 14443-3 Type B
nnnn
カード名の識別 (完全なリストについては、PC/SC 仕様を参照してください)。
ATR は、連絡先スマートカードに対してのみ存在します。非接触カードの場合、これに相当するものは ATQ と呼ばれ、2 つの ISO14443 タイプのそれぞれについて、ATQ-A と ATQ-B の 2 つのバリエーションがあります。
そこで、私がお勧めする方法は次のとおりです。
- リーダーは REQ-A と REQ-B の両方を送信し、範囲内に非接触型カードがあるかどうかをポーリングします。
- カードが REQ-A で応答する場合、それはタイプ A です。REQ-B の場合はタイプ B です。
非接触リーダーのドライバーは、この情報をソフトウェアに渡す必要があります。ISO 14443-3 規格のコピーを入手することをお勧めします。カード検出と衝突防止プロトコルの最初の手順が説明されているので、タイプ A と B の違いを確認できます。