DS8007とスマートカードインタフェースの基礎技術

2008年04月14日
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成

要約

DS8007は、ISO 7816、EMV、およびGSM11-11の要件をすべてサポートした、マルチプロトコル、低コスト、デュアル、スマートカードインタフェースです。この1つのミクストシグナル周辺ICが、マイクロコントローラと2つの独立したスマートカードとの間のインタフェースのすべての詳細を管理します。このアプリケーションノートでは、スマートカードの若干の基礎技術およびスマートカードと通信を行う方法について解説します。DS8007を使用してDS5002セキュアマイクロプロセッサ搭載したスマートカードとのインタフェースを行うソフトウェアを提供します。

概要

スマートカードとは何でしょうか?スマートカードとは、一般にはICを内蔵したポケットサイズのカードと定義されます。ICを内蔵していることから、スマートカードはICカード(ICC)と呼ばれることもあります。図1に、典型的な例を示します。多種多様なアプリケーションで使用されているこれらのカードは、磁気ストライプを使用してカードのアカウント情報を格納するおなじみの支払いカード(デビットカードやクレジットカード)に取って代わるものです。支払いアプリケーションにおいてスマートカードへの移行が生じているのは、主として機能性が増大するためであり、特にこのテクノロジによって可能になるセキュリティの向上が要因になっています。しかし、こうしたセキュリティ機能については、スマートカード化によるコスト上昇と対比して評価する必要があります。

図1. スマートカードの例

図1. スマートカードの例

スマートカードに内蔵されるICは、単純な不揮発性メモリデバイスの場合も、また複雑な動作を実行可能な高度なマイクロコントローラのような場合もあります。単純な不揮発性メモリを支払いカードの磁気ストライプの代わりに使用してデータを格納することができます。そうしたデバイスの多くでは、メモリに外付けのロジックを組み合わせることによって、メモリの一部または全体に対するアクセスを制限しています。しかし、スマートカードの真の力は、内蔵マイクロコントローラによってデータ処理や暗号化の機能を実行することができる点にあります。この処理能力によって、セキュリティ機能の強化が可能になります。ただし、複雑性が高まるほどカードのコストも上昇します。プロセッサを内蔵したスマートカードのコストが7.00~15.00米ドルの範囲であるのに対し、磁気テープを使用した支払いカードのコストはわずか0.75米ドルという例もあります1。このスマートカードの高コストが原因で、より単純なテクノロジからの移行が広まるのに時間がかかっていますが、セキュリティに対する要求の増大につれて、スマートカードの必要性も高まることになります。

DS8007は、マイクロコントローラと2枚の独立したスマートカードとの物理的なインタフェースに必要となるすべての電気信号を提供します。このデバイスには、カードの自動的なアクティベーションおよびディアクティベーションの制御を行う専用のシーケンサと、データ通信のためのISO UARTが内蔵されています。チャージポンプと電圧レギュレータによって、2.7V~6.0Vの電源電圧での動作が可能になっており、2枚の独立したスマートカードに対する電源電圧を生成することができます。後者については、それぞれ1.8V、3.0V、または5Vのいずれかに設定することが可能です。マイクロコントローラとの通信は、非多重構成によるデータ伝送または多重構成によるデータとアドレスの伝送を行う標準的な並列8ビットバスによって提供されます。

スマートカードの詳細

最も一般的なスマートカードのフォームファクタはクレジットカードサイズのデバイスですが、「スマートカード」という言葉は、携帯電話で広く使用されている、ほぼ切手大のSIM (Subscriber Identification Module)カードにも適用されます。このSIMフォームファクタは支払い端末でも使用されており、支払いシステム固有のデータやアプリケーションの詳細情報を端末に提供します。クレジットカードサイズのデバイスのカード部分は一般にポリ塩化ビニル(PVC)製であり、通常はアカウント番号と、場合によって有効期限が刻印されています。どのフォームファクタであっても、電気機械的仕様はすべてISO 7816シリーズの規格に基づいています。さらに、EuroCard®、MasterCard®、およびVisa®の3社からなるコンソーシアム(EMV)によって、スマートカードおよびその支払いシステムへの応用に特化した一連の規格が策定されています。EMV仕様は、一般にISO 7816の各文書がベースになっています。

スマートカードの接点

スマートカード上の接点の数、位置、および機能は、前述の規格によって明確に定義されています。標準的なスマートカード上のICの位置および接点のサイズを図2に示します。接点として可能な位置は、ISO 7816で8個定義されています。これら8個の位置の内、5個が現在EMVのアプリケーションで使用されています。それらの設定の名称と機能を表1に示します。接点C6は、ISO 7816ではVPPと定義されていますが、EMV仕様では、このプログラミング電圧は現在のカードでは使用されていません。接点C4およびC8は使用されておらず、物理的に存在する必要もありません。EMV仕様で規定されている個々の接点について、この後さらに詳しく説明します。

表1. スマートカードの接点
接点の名称 接点の機能
C1 カードへの電源電圧(VCC)
C2 リセット(RST)
C3 クロック(CLK)
C4 DS8007で提供(EMVでは未使用)
C5 グランド(GND)
C6 VPP (EMVでは未使用)
C7 入出力(I/O)
C8 DS007で提供(EMVでは未使用)

図2. 接点のサイズおよび位置

図2. 接点のサイズおよび位置

VCC接点(C1)


この接点は、カードに電源電圧を供給します。元々VCCの仕様に含まれていたのは5V DC ±10%だけでした。しかし現在では、より低電圧のカードへ段階的な移行が進められています。この当初の仕様だけをサポートするカードはクラスAカードと呼ばれ、2009年6月末までにクラスABまたはクラスABCカードに置き換えられることになります。これらの各カードクラスのVCC仕様は、次の通りです。

クラスAカード:4.5V ≤ VCC ≤ 5.5V、50mA以下
クラスABカード:2.70V ≤ VCC ≤ 3.3V、50mA以下
クラスABCカード:1.62V ≤ VCC ≤ 1.98V、30mA以下

DS8007のカードインタフェースには、チャージポンプと電圧レギュレータが内蔵されており、デバイスが2.6V~6.0Vの電源で動作しているとき、3種類のカードクラスのいずれに対しても適切な電圧を供給することができます。


I/O接点(C7)


スマートカードのI/O接点は、端末からデータを受け取るための入力(受信モード)または端末にデータを送信するための出力(送信モード)として使用されます。

受信モードでは、入力が以下の仕様に準拠している場合にカードは有効なデータを認識します。


クラスAカード


入力ハイ電圧:0.7 × VCC ≤ VIH ≤ VCC
入力ロー電圧:0.0 ≤ VIL ≤ 0.8V
立上り/立下り時間:≤ 1µs


クラスABまたはABCカード


入力ハイ電圧:0.7 × VCC ≤ VIH ≤ VCC
入力ロー電圧:0.0 ≤ VIL ≤ 0.2 × VCC
立上り/立下り時間:≤ 1µs

送信モードでは、I/O接点は次の信号レベルを提供します。


クラスAカード


出力ハイ電圧:0.7 × VCC ≤ VOH ≤ VCC, -20µA < IOH < 0, VCC = min
出力ロー電圧:0.0 ≤ VOL ≤ 0.4V, 0 < IOL < 1mA, VCC = min
立上り/立下り時間:≤ 1.0µs


クラスABまたはABCカード


出力ハイ電圧:0.7 × VCC ≤ VOH ≤ VCC, -20µA < IOH < 0, VCC = min
出力ロー電圧:0.0 ≤ VOL ≤ 0.15 × VCC, 0 < IOL < 1mA, VCC = min
立上り/立下り時間:≤ 1.0µs

EMV仕様では、I/O接点が送信を行っていない限りスマートカードのI/O接点ドライバは受信モードに設定されると規定しています。


CLK接点(C3)


CLK接点は、インタフェース先の端末、すなわちDS8007によって供給される入力です。この信号は、処理プロセス中におけるデータ転送のタイミングを制御するために使用されます。周波数範囲は1.0MHz~5.0MHzと規定されています。この接点の電気的仕様は次の通りです。


クラスAカード


入力ハイ電圧:VCC - 0.7 ≤ VIH ≤ VCC
入力ロー電圧:0.0 ≤ VIL ≤ 0.5V
立上り/立下り時間:クロック周期の9%以下


クラスABまたはABCカード


入力ハイ電圧:0.7 × VCC ≤ VIH ≤ VCC
入力ロー電圧:0.0 ≤ VIL ≤ 0.2 × VCC
立上り/立下り時間:クロック周期の9%以下


RST接点(C2)


RST接点は、インタフェース先の端末によって供給されるカードへの入力です。この信号はアクティブローであり、カードの非同期リセットを発生させます。この接点の電気的仕様はCLK接点と同じですが、最大立上りおよび立下り時間は1.0µsです。

上記の仕様から分かるように、スマートカードとインタフェースする端末は様々な電源電圧および信号レベルを供給する必要があります。またこのインタフェース仕様は、カードの任意の2接点間における短絡に端末が耐えることも要求しています。こうした理由から、多数のディスクリートアナログICを組み合わせて作業を行うよりも、専用のデバイスを使用して必要な電源電圧と信号レベルを供給する方が明らかに有利です。そうした専用デバイスの1つがDS8007です。これらの機能を提供するために必要なアナログ回路に加えて、完全なカードセッションのサポートに必要なステートシーケンスとタイミングを管理するための、FIFOおよびその他のディジタル制御ロジックも内蔵しています。

端末インタフェース要件

すべてのカードセッションは、次の各ステップで構成されます。

  1. 端末へのカードの挿入、接点の接続およびアクティベーション
  2. カードのリセット、端末とカード間の通信の確立(ATRシーケンス−後述)
  3. トランザクションの実行
  4. 接点のディアクティベーション、カードの抜去

挿入後に行われるカードの初期リセットに続いて、カードからの応答としてATR (Answer To Reset)と呼ばれる文字列が送信されます。この文字列によって、以後のすべての通信で使用する具体的なプロトコル、ビットタイミング、およびデータ転送の詳細を含む、通信の初期設定が確立されます。以後の転送において特定の通信パラメータを変更することが可能ですが、最初の通信条件はATRによって確立します。ATRについては、この後の各セクションで詳しく検討します。


個々のキャラクタの詳細


スマートカードと端末がインタフェース接続されている間、双方向のI/O端子上で情報のシリアル通信が行われます。ビット当りの時間はETU (Elemental Time Unit)として定義されます。ETUの時間の長さと、CLK接点上で端末によって供給されるクロック信号との間には、直接のリニアな関係が存在します。ATR中のキャラクタのビットタイミングは、イニシャルETUと呼ばれます。このイニシャルETUは、次式で定義されます。

Initial ETU = 372/ƒ seconds

ここで、fはクロック信号の周波数(単位:Hz)です。

ATRの後は、ビット当りの時間はカレントETUと呼ばれ、パラメータFおよびDとクロック周波数の関数になります(パラメータFおよびDについては、この後のTA1キャラクタの項でさらに詳しく説明します)。

Current ETU = F/(Dƒ) seconds

ここで、fはクロック信号の周波数(単位:Hz)です。

すべての通信において各キャラクタは10ビットで構成され、結果としてキャラクタ当りの時間は10 ETUになります。キャラクタの最初のビットはスタートビットと呼ばれ、常にローになります。スタートビットより前は、I/Oラインがデフォルトのハイ状態に維持されます。キャラクタの最後のビットはパリティビットで、キャラクタに含まれる1の数の合計が偶数になるように、ソースによってハイまたはローに決まります。このビットパターンの図解を、図3に示します。

図3. 10ビットのキャラクタフレーム

図3. 10ビットのキャラクタフレーム

スマートカードの通信プロトコル

ISO 7816の仕様の中で、カードセッションの通信プロトコルを選択するために4個のビットを使用しています。指定可能な16種類のプロトコルの内、現在は2種類が使用されています。それらは、T=0およびT=1と呼ばれます。どちらのプロトコルも、半二重(一度に一方向)の非同期通信です。T=0プロトコルがキャラクタベースのフォーマットであるのに対し、T=1はブロックベースのフォーマットです。EMV準拠のすべてのスマートカードはT=0またはT=1プロトコルをサポートする必要があり、端末は両方をサポートする必要があります。

カードが端末に挿入された直後、すべての端子が「ロー」状態に維持されている間に、カードのVCC接点に電源電圧が印加されます。電圧が安定し、規定の制限内であることを端末が確認した後、端末のI/O接点ドライバが受信モードに設定されて、カードのCLK接点にクロック信号が印加されます。クロック信号の開始から200サイクル以内に、端末は自身のI/Oラインを受信モードにし、カードは自分のI/Oラインを送信モードにします。40,000~45,000クロック周期の間隔を置いて、端末はアクティブハイの信号をカードのRST接点に印加します。その400~40,000クロック周期後、カードは応答としてATRと呼ばれる一連のキャラクタを送信します。ATRには、T=0またはT=1のプロトコル選択を含めて、以後の通信をどのように行うかについての詳細情報が格納されます。プロトコルの指定がない場合は、T=0と見なされます(ATRおよびそこに格納される情報の完全な詳細については、この後で説明します)。

ATR (Answer to Reset)

最初に端末によってリセットされた後、EMVスマートカードはATR (Answer to Reset)と呼ばれる一連のキャラクタを応答として送信します。これらのキャラクタは、最初のキャラクタであるTSと、その後に続く最大32文字のキャラクタで構成されます。これらのキャラクタが一体となって、セッションの以後の部分でカードとどのように通信を行うかについての情報を端末に提供します。個々のキャラクタについては、この後の各項で説明します。

EMV仕様で定義されているATRの内容を、プロトコルT=0については表2に、プロトコルT=1については表3に示します。

表2. 基本的なEMVのATR (T=0の場合)
キャラクタ 説明
TS 3Bまたは3F 直接(3B)または反転(3F)変換を示す。
T0 '6x TB1とTC1が存在し、TA1とTD1は存在しない(xは存在するヒストリカルバイトの数を示す)。
TB1 '00' VPP不要。
TC1 00~FF 必要な補助ガードタイムの量を示す。FFという値は特別な意味を持つ(この後のTC1の説明を参照)。
表3. 基本的なEMVのATR (T=1の場合)
キャラクタ 説明
TS 3Bまたは3F 直接(3B)または反転(3F)変換を示す。
T0 'Ex' TB1、TC1、およびTD1が存在し、TA1は存在しない(xは存在するヒストリカルバイトの数を示す)。
TB1 '00' VPP不要。
TC1 00~FF 必要な補助ガードタイムの量を示す。
TD1 '81' TA2、TB2、およびTC2は存在しない。TD2が存在する。T=1を使用する。
TD2 '31' TA3とTB3が存在する。TC3とTD3は存在しない。T=1を使用する。
TA3 10~FE カードの情報フィールドサイズの初期値および16バイト~254バイトのIFSCを示すIFSIを返す。
TB3 MSN*は0~4、LSNは0~5 BWI = 0~4
CWI = 0~5
TCK   チェックキャラクタ。T0からTCKまでの全ATRバイト(両端含む)の排他的ORがゼロになる。
*注:MSN = 上位ニブル、LSN = 下位ニブル 

TSイニシャルキャラクタ


ATRシーケンスの最初のキャラクタは、イニシャルキャラクタTSと定義されています。このキャラクタは、そのビットパターンによって情報の同期を行い、後続の全キャラクタの極性を定義します。TSの最初の4ビットは、ローのスタートビットの後に続く、2個のハイビットと、もう1個のロービットで構成されます。この固定ビットパターンによって、タイミングの同期が可能になります。その後の3ビットは、すべてハイで直接変換を示すか、またはすべてローで反転変換を示します。直接変換の場合、I/Oライン上のハイ状態がロジック1に相当し、最下位ビットから順にデータが送信されます。反転変換の場合、I/Oライン上のロー状態がロジック1に相当し、最上位ビットから順にデータが転送されます。仕様上は反転変換も認められていますが、EMVでは現在のすべてのカード設計について直接変換を使用するよう推奨しています。その後の3ビットは、2個のロービットとそれに続くハイビットです。この(また他のすべての) 10ビットキャラクタフレームの最後のビットはパリティビットであり、フレーム内の1の数が偶数になるようにセットまたはクリアされます。


T0フォーマットキャラクタ


ATRシーケンスの第2のキャラクタは、フォーマットキャラクタと定義されており、T0と呼ばれます。このキャラクタには2つの部分が含まれており、その両方によって、残りのATRシーケンスに含まれるキャラクタが決定されます。上位4ビットはY1と呼ばれ、TA1、TB1、TC1、またはTD1が送信されるかどうかを示します。Y1中の個々のロジック1に対して、該当するキャラクタの有無が次のように決定されます。

ビット8 (最上位ビット) = 1は、キャラクタTD1が送信されることを示す
ビット7 = 1は、キャラクタTC1が送信されることを示す
ビット6 = 1は、キャラクタTB1が送信されることを示す
ビット5 = 1は、キャラクタTA1が送信されることを示す

T0の下位4ビットは、Kと呼ばれます。これらのビットは、残りのATRシーケンスに含まれる「ヒストリカルバイト」の数(0~15)を決定します。「ヒストリカルバイト」とは、カードのメーカー、カードに内蔵されているチップ、チップ内のマスクROM、あるいはカードの書換え可能回数など、カードに関する総合的な情報を伝えるものです。ISO 7816でもEMV仕様でも、(仮に存在する場合)どのような情報が伝えられるかについて明確には定義していません。

前掲の表2では、Y1のビットb7およびb6がハイ、ビットb8およびb5がローになっています(6x)。これは(表中に記載してある通り) TC1とTB1が送信され、キャラクタTA1とTD1は送信されないことを示します。プロトコルT=0の場合、キャラクタTB1とTC1だけで基本的ATRシーケンスが終了します。表3では、Y1のビット8もハイになっており、したがってプロトコルT=1の場合はキャラクタTD1も送信されることになります。


TA1キャラクタ


キャラクタTA1は、基本的なEMVのATRレスポンス中ではT=0またはT=1いずれのプロトコルでも送信されませんが、他の通信用にISO 7816仕様で定義されています。TA1を使用する場合は、上位ニブルと下位ニブルに分解されます。上位ニブルは、クロック信号の周波数を変更するために使用される、クロックレート変換率Fを決定します。下位ニブルは、ATRの後のビット当り時間を調節するために使用することができる、ビットレート調節係数Dを決定します。これらのパラメータがどのように使用されるかは、前出の式2に示されています。ATR中のイニシャルETUにはF = 372およびD = 1というデフォルト値が使用され、基本的ATRの外部で変更されない限り、以後のデータ交換中も引き続き使用されます。


TB1キャラクタ


TB1キャラクタは、スマートカードのプログラミング電圧の要件に関する情報を伝達します。ビットb1~b5 (PI1と呼ばれます)がプログラミング電圧を伝達し、ビットb6とb7 (IIと呼ばれます)はスマートカードが要求する最大プログラミング電流を伝達します。基本的なATRの場合、TB1 = 00でスマートカードの内部でVPP端子が接続されていないことを示します。


TC1キャラクタ


TC1キャラクタはNの値を伝達し、それによって端末からスマートカードに連続して送信するキャラクタ間に追加すべき補助ガードタイムを決定します。この値は、カードから端末に送信されるキャラクタ間や、反対方向に送信される2個のキャラクタ間には適用されません。Nは、補助ガードタイムとして挿入される追加のETUの数を表す2進数です。TC1 = ‘FF’の場合は、キャラクタ間の最小のディレイを使用する必要があります。プロトコルT=0の場合これは12 ETUであり、T=1の場合は11です。Nの値には、0~255の任意の数を指定することができます。ATRでTC1が返されなかった場合、端末は00という値を受信した場合と同様に動作を続行します。この値によってキャラクタの送信にかかる時間が増大する可能性があるため、トランザクションを高速化するために最小の値にすべきです。


TD1キャラクタ


TD1キャラクタは、その後さらにインタフェースバイトが送信されるか、そして(送信される場合)どのプロトコルが使用されるかを示します。キャラクタTD1は、一般形であるキャラクタTDxの特殊な例です。TDxの上位ニブルは、TA(x + 1)、TB(x + 1)、TC(x + 1)、またはTD(x + 1)が送信されるかどうかを示します。個々のロジック1に対して、後続の送信におけるそれぞれのキャラクタの有無が次のように決定されます。

ビット8 (最上位ビット) = 1は、キャラクタTD(x + 1)が送信されることを示す
ビット7 = 1は、キャラクタTC(x + 1)が送信されることを示す
ビット6 = 1は、キャラクタTB(x + 1)が送信されることを示す
ビット5 = 1は、キャラクタTA(x + 1)が送信されることを示す

TD1キャラクタ(一般形はTDx)の下位ニブルには、0x0または0x1のいずれかの値が格納され、それぞれプロトコルT=0またはT=1を示します。

プロトコルT=0が使用される場合、ATRシーケンスにキャラクタTD1は含まれず、後続のすべての送信にプロトコルT=0が使用されます。プロトコルT=1が使用される場合は、TD1が含まれ、0x81という値が格納されます。この後者の値は、TD2が存在し、後続のすべての送信にプロトコルT=1が使用されることを示します。


TA2キャラクタ


キャラクタTA2は、基本的なEMVのATRレスポンス中ではT=0またはT=1のいずれのプロトコルでも送信されませんが、ISO 7816仕様で定義されています。TA2の有無によって、ATRの後スマートカードがそれぞれ固有モードで動作するかネゴシエート可能モードで動作するかが決まります。TA2が存在しない場合、ネゴシエート可能モードの動作が使用されることを示します。


TB2キャラクタ


キャラクタTB2は、基本的なEMVのATRレスポンス中ではT=0またはT=1のいずれのプロトコルでも送信されませんが、ISO 7816仕様で定義されています。キャラクタTB2は、スマートカードが必要とするプログラミング電圧を決めるPI2を伝達します。キャラクタTB2が存在する場合、キャラクタTB1の中のPI1の値よりも優先されます。


TC2キャラクタ


キャラクタTC2は、基本的なEMVのATRレスポンス中ではT=0またはT=1のいずれのプロトコルでも送信されませんが、ISO 7816仕様で定義されています。TC2が存在する場合、プロトコルタイプT=0に固有です。TC2は、スマートカードが送信する任意のキャラクタのスタートビットの立上りエッジと カードまたは端末が送信した直前のキャラクタのスタートビットの立上りエッジとの最大間隔を決定する、作業待ち時間整数(WI)を伝達します。作業待ち時間の値は、次式で与えられます。

Work Waiting Time = 960 × D ×WI

ここで、Dはビットレート調節係数です(前述のTA1の説明を参照)。

TC2がATRシーケンスに含まれていない場合、WI = 0x0Aというデフォルト値を使用するものと見なされます。


TD2キャラクタ


TD2キャラクタは、TD1キャラクタと同一の機能を備えています。詳しくは、前述のTD1の説明を参照してください。表3のプロトコルT=1では、TD2が存在して0x31という値が格納されています。この値は、TA3とTB3が存在し、TC3とTD3は存在せず、プロトコルタイプがT=1になることを示しています。


TA3キャラクタ


TA3キャラクタは、スマートカードの情報フィールドサイズ整数(IFSI)を伝達します。IFSIは、そのカードで受信可能な情報フィールド(INF)ブロックの最大長である、スマートカードの情報フィールドサイズを決定します。フィールドサイズには、0x01~0xFEの範囲の任意の値を指定することができます。0x0と0xFFの2つの値は、将来使用するために予約されています。基本的なATRでT=1プロトコルを使用する場合、TA3の値は0x10~0xFEの範囲になり、16~254バイトの範囲のIFSCを示します。ATRがTA3を含んでいない場合、端末はデフォルト値の0x20であると見なします。


TB3キャラクタ


TB3キャラクタは、キャラクタ待ち時間(CWT)とブロック待ち時間(BWT)の計算に使用する、キャラクタ待ち時間整数(CWI)とブロック待ち時間整数(BWI)の値を示します。TB3の下位ニブル(b1~b4)がCWIの値を示し、上位ニブル(b5~b8)がBWIの値を示します。T=1プロトコルの基本的なATRの場合、TB3キャラクタは下位ニブルが0~5の範囲(CWI = 0~5)、上位ニブルが0~4の範囲(BWI = 0~4)になります。


TC3キャラクタ


キャラクタTC3は、基本的なEMVのATRレスポンス中ではT=0またはT=1のいずれのプロトコルでも送信されませんが、ISO 7816仕様で定義されています。TC3が存在する場合は、使用するブロック誤り検出のタイプを示します。TC3が存在しない場合は、デフォルトの水平冗長検査(LRC)がブロック誤りのチェックに使用されます。


TCKキャラクタ


TCKキャラクタは、チェックキャラクタであり、ATRで送信されるデータの完全性の検証を可能にします。T0からTCKまで(両端含む)のすべてのバイトの排他的ORがゼロになる限り、TCKはどのような値にもなります。TCKは、T=0では使用されませんが、他のすべての場合にATRで返されます。


ATRのまとめ


端末がATRシーケンスの最後のキャラクタを受信して、必要なパラメータがカードから端末に転送された後、インタフェースパラメータの調整が必要であればDS8007に対して変更を行います。その後で、さらなる通信を開始することができます。

アプリケーションプロトコルデータユニット(APDU)

前述のように、カードセッションにおける次の段階は、トランザクションの実行です。トランザクション中に実施される具体的な操作は、カードとアカウントの種類(クレジット、デビットなど)およびユーザのリクエスト内容によって異なります。具体的な操作がどのようなものであっても、トランザクションは端末からスマートカードにコマンドを発行することによって達成されます。スマートカードは要求された操作を実施し、必要に応じて結果を通知します。カードの操作には、メモリ内の1つの位置を読み取るような単純なものから、暗号化操作の実行のような複雑なものまであります。どのような操作でも、端末とカードの間の通信は、アプリケーションプロトコルデータユニット(APDU)を使用して行われます。

アプリケーションを実行するためには、スマートカードと端末が情報を交換する必要があります。この情報の共有は、コマンド/レスポンス型のデータ交換によって達成されます。端末がコマンドを作成してスマートカードに送信し、スマートカードがコマンドを解釈してレスポンスを送信します。このコマンド/レスポンスのメッセージペアは、アプリケーションプロトコルデータユニット(APDU)と呼ばれます。端末が送信する特定のコマンドメッセージ(C-APDU)に対して、カードから特定のレスポンスメッセージ(R-APDU)が返されます。これらのメッセージを、APDUコマンド/レスポンスペアと呼びます。この2種類のメッセージのフォーマットはEMV仕様で詳細に示されており、それらのフォーマットについて以下で説明します。


C-APDUのフォーマット


すべてのコマンドAPDUは、端末が発行します。これらは、4バイトの必須ヘッダと、それに続くオプションの可変長の本体で構成され、本体にデータを格納することができます。C-APDUに含まれるデータのバイト数がコマンドバイトLcで指定され、端末がカードのレスポンスで受け取る予定のバイト数がコマンドバイトLeで指定されます。C-APDUのフォーマットを表4に、各キャラクタの説明を表5に示します。

表4. コマンドAPDUの構造
CLA INS P1 P2 Lc  Data Le
←必須ヘッダ→
 ←条件による本体→
表5. コマンドAPDUの内容説明
コード 説明 長さ
CLA 命令クラス 1
INS 命令コード 1
P1 命令パラメータ1 1
P2 命令パラメータ2 1
Lc コマンドのデータフィールドに含まれるバイト数 0または1
Data コマンドで送信されるデータバイト列(= Lc) 可変長
Le レスポンスのデータフィールドに含まれる予定の最大バイト数 0または1

コマンドAPDUの最初のバイトは命令クラスと定義されており、CLAと呼ばれます。このバイトは、0xFFを除く任意の8ビット値を取ることができます。しかし現時点では、上位ニブルが0および8の値だけが使用されています。上位ニブルの値が0のものは業界間共通のコマンドと定義されており、値が8のものはEMV仕様に固有です。

コマンドAPDUの第2のバイトは命令コードであり、INSと呼ばれます。このバイトは、最下位ビットが0で、上位ニブルが6と9のいずれでもない場合にのみ有効です。

必須ヘッダのP1とP2の2バイトには、特定のコマンド用のパラメータが格納され、任意の値を取ることができます。これらのパラメータバイトを使用しない場合は、値を0x00にする必要があります。


R-APDU


端末からAPDUコマンドを受信して解釈した後、スマートカードはレスポンスを返します。仕様で定義されているように、このレスポンスはオプションの可変長の本体と、それに続く2バイトの必須トレーラで構成されます。このフォーマットを表6に、APDUレスポンスの内容を表7に示します。

表6. APDUカードレスポンスのフォーマット
Data SW1 SW2
←本体→ ←トレーラ→
表7. APDUコマンドレスポンスの内容
コード 説明 長さ
Data APDUレスポンスで受信されるデータバイト列 可変長(= Lr)
SW1 コマンド処理ステータス 1
SW2 コマンド処理修飾子 1

予想されるカードのレスポンスの長さは、APDUコマンドのLeコード部分として送信されます。レスポンスの実際の長さはLrと呼ばれます。カードはLrの値を送信しませんが、アプリケーションに必要であれば端末側で計算することができます。

コマンドが正常に終了した場合、スマートカードはSW1の値として0x90を、SW2の値として0x00を返します。それ以外のレスポンスは、エラーまたはウォーニングが発生したことを示します2

サンプルコード

このアプリケーションの付属ソフトウェアが、ダウンロード可能ファイルan4029_sw.zipに収録されています。このファイルには、実行形式のHEXファイル(ds8007.hex)を生成するために必要なすべてのC (main.c、ds8007.c、LCD_Funct.c)およびアセンブリ言語(Startup.a51)のソースコードが含まれています。コードのコンパイルとリンクには、Keil PK51プロフェッショナルデベロッパツールキットおよびµVision®統合開発環境(IDE)を使用しました。µVisionのプロジェクトファイル(ds8007.Uv2)も.zipファイルに含まれています。.HEXファイルのロードと実行は、マキシムから入手可能なDS8007の評価(EV)キットに含まれるDS8007スマートカードインタフェースボード上で行いました。このサンプルソフトウェアは、通電、ATR、APDU、および電源断の各操作を含む、完全なスマートカードセッションを実装しています。ダム端末に接続すると、ボードとソフトウェアによって約38,400baudのRS-232シリアル出力が生成されます。この出力を、次の図4に示します。このソフトウェアの詳しい説明はこのアプリケーションノートの範囲を超えますが、提供されるソースコードをもとに、DS5002セキュアマイクロプロセッサとDS8007マルチプロトコルデュアルスマートカードインタフェースチップを使用して、完全なスマートカードインタフェースを開発することが可能です。

図4. ソフトウェアの出力

図4. ソフトウェアの出力

サンプルソフトウェアのテストには、Advanced Card Systems (ACS)社製のマイクロコントローラベースのスマートカードを使用しました。このカードはマイクロコントローラベースのデバイスであり、ACS Smart Card Operating Systems Version 1 (ACOS1)と呼ばれる組込みオペレーティングシステムの機能を実行します。このカードの特徴は、次の通りです。

  • アプリケーションデータ用の8kBのEEPROMメモリ
  • ISO 7816-3準拠、T=0プロトコル
  • DESおよびMAC機能
  • 乱数ベースのセッションキー
  • カード所有者が交換可能なPIN
  • 相互認証のためのキーペア

ACOS1のドキュメントによると、このカードはリセットへの応答として19バイトのデータを返します。図4から分かるように、T0で返された値は0xBEです。上位ニブル(0xB)は、TSに加えてTA1、TB1、TD1がATRに含まれることを示しています。低位ニブルには0xEが格納されており、ATRレスポンスに14バイトのヒストリカルバイトが含まれることを示します(前述のキャラクタT0の説明を参照)。したがって、カードからのATRには合計19バイトが含まれます。

このサンプルソフトウェアでは、単一のADPUとしてセッション開始コマンドが実行されます。このコマンドのフォーマットは次の通りです。

CLA INS P1 P2 P3
0x80 0x84  0x00 0x00   0x08

セッション開始コマンドに対するレスポンスのフォーマットは、次の通りです。

Data SW1 SW2
乱数(カードからの8バイト) ステータス ステータス 

図4に示したソフトウェアの出力は、カードから返された乱数が0xCB、0xC4、0xBD、0xD5、0xA4、0x7E、0x36、および0x3Fだったことを示しています。また、返されたステータスが、コマンドの正常終了を示す0x90、0x00だったことも分かります。

結論

DS8007は、マイクロコントローラとスマートカードのインタフェースに伴う負担を軽減するミクストシグナル周辺デバイスです。DS8007は、2枚の独立したスマートカードとの物理的インタフェースに必要なすべての電気信号を提供します。専用の内蔵シーケンサによる自動的なカードのアクティベーションとディアクティベーションの制御に加えて、データ通信用のISO UARTも備えています。チャージポンプと電圧レギュレータによって、DS8007は2.7V~6.0Vの電源電圧で動作するとともに、同時に2枚の独立したスマートカード用の電源電圧を生成することができます。後者については、それぞれ1.8V、3.0V、または5Vに設定可能です。マイクロコントローラとの通信は、非多重構成によるデータ伝送または多重構成によるデータとアドレスの伝送を行う標準的な並列8ビットバスによって提供されます。提供されるソフトウェアは、DS5002セキュアマイクロプロセッサおよびDS8007をスマートカードインタフェースに使用して、完全なカードセッションを実装したものです。スマートカードからATRで返されたキャラクタは、ボードのシリアルポートから38400baudで出力され、カードに対して「セッション開始」コマンドAPDUが送信されます。結果の乱数もシリアルポートから出力されます。

最新メディア 20

Subtitle
さらに詳しく
myAnalogに追加

myAnalog のリソース セクション、既存のプロジェクト、または新しいプロジェクトに記事を追加します。

新規プロジェクトを作成