要約
このアプリケーションノートでは、インタフェースデバイスのDS8007とセキュアマイクロコントローラのDS5002を使用したスマートカードによる支払端末トランザクションの例を示します。DS8007の評価(EV)キットボードと利用可能なCソースコードは、基本的なスマートカードのクレジット、デビット、およびカード初期化機能を実現します。
概要
このアプリケーションノートでは、マルチプロトコルデュアルスマートカードインタフェースチップのDS8007とセキュアマイクロコントローラのDS5002に基づくスマートカード支払処理システムについて説明します。基本的なクレジットおよびデビットトランザクションが、スマートカード初期化機能とともに実現されています。「実業務」の支払処理システムに通常付随するセキュリティ対策を組み込む試みは行われませんでしたが、ここで検証される機能性はこうしたシステムの典型として示されています。
この検証で使用されるハードウェアは、DS8007の評価(EV)キットボードです。このボードは、DS8007デバイスを使用するスマートカードの動作を試験するための簡易な実証済みプラットフォームを提供します。このボードは、セキュアマイクロコントローラのDS5002 (メインプロセッサ)、2行 x 20文字液晶ディスプレイ(LCD)モジュール、および2個のスマートカードソケット(1個はクレジットカードサイズ、1個はSIMサイズ)を備えています。RS-232シリアルインタフェースの信号を伝送するために、1個のDB-9コネクタが装備されています。マキシムのMicrocontroller Tool Kit (MTK)ソフトウェア(ダウンロード)を使用すると、ユーザは、各自のPCをこのRS-232ポートに接続してプログラムおよび/またはデータファイルをダウンロードし、アプリケーションと通信することができます。また、このEVキットボードは、プログラムとデータ情報の格納用の512k x 8バッテリバックアップSRAMも搭載しています。セキュアプロセッサのDS5002は、SRAMをバッテリバックアップするためのパワー検出および制御回路を提供します。
このアプリケーションの開発に使用するソフトウェアツールセットは、Keil社のPK51プロフェッショナルデベロッパツールキットで、µVision3®統合開発環境(IDE)とCX51 ANSI Cコンパイラが含まれています。このPK51パッケージは、アセンブラ、リンカ、シミュレータ、およびデバッガを含む完全な開発環境を提供します。PK51は、MTKソフトウェアを使用して、PCからDS8007のEVキットボードにじかにダウンロード可能なhexファイルを生成します。
アプリケーションの説明
このアプリケーションノートで提供されるトランザクション機能は、アプリケーションノート4036 DS8007の評価キット入門で説明された低レベル機能の上位の追加層として作成されました。
このトランザクション例では、ACOS3スマートカードに対してEMV規格に規定されたように、APDU (アプリケーションプロトコルデータ単位)の送受信を実行して適切に管理します。適切なAPDUを操作して送信してから、送信したAPDUに対して可能な応答を処理することによって、標準的な支払トランザクションとなる各アクションが検証されます。
このアプリケーションのCソースコードは、ダウンロードすることができ、ファイルは AN4120_SW.zipです。上記のアプリケーションノート4036からのコードは、これらのトランザクション例のコアを形成して、基本的なDS8007インタフェース/ドライバ機能、すべてのダイレクトな低レベルスマートカードインタフェース機能を提供します。AN4036のコードは、AN4036_SW.zipファイルの場合と同じウェブアドレスからダウンロードすることもできます。
サンプルトランザクションの詳細
この例には、典型的なトランザクションの機能グループを作成するために、スマートカードの3種類の主要動作が実現されています。
- デビットトランザクション。金額がカードの残高から差し引かれます。
- クレジットトランザクション。金額がカードの残高に加算されます。
- カード初期化トランザクション。カードの残高とトランザクション数が初期値に設定されます。
初期化トランザクション時に、初期残高100.00ドルがカードに格納され、初期化カウントが1に設定されます。例を簡単にするため、クレジットまたはデビットトランザクションのいずれのカードの残高に対しても定額の10.00ドルが加算または差引きされます。
適切な検証を得るために最初に検討すべきことは、DS8007のEVキットボード上のリソースとのユーザインタフェースを作成する方法です。目標は、装置を追加せずに、EVキットボードをスタンドアロンで実行することです。したがって、ボードのRS-232シリアルポートは、ユーザインタフェースとして除外されます。その代わりに、ユーザ入力に利用可能な最も簡便なハードウェアはSW4スイッチです。このスイッチが押された場合、プロセッサのP3.2ポート端子はグランドに接続されます。P3.2端子は、外部割込み入力(INT0)としても動作するマルチファンクションポート端子ですが、このアプリケーションの場合は、ソフトウェアはこの割込みをイネーブルにしません。このため、この端子は通常、プロセッサの端子駆動回路によってハイに接続され、SW4が押された場合に1kΩ抵抗器を通じてローに接続されます。このアプリケーションは、単にこの端子を読み取ることによって、このスイッチの閉状態を検出します。
オンボードLCDモジュールは、ユーザインタフェースの出力デバイスとして機能します。DS8007のEVキットのLCDモジュールは、2行 x 20文字ディスプレイです。このモジュールは、液晶駆動信号を生成して8ビットパラレルインタフェースをプロセッサに供給するために必要なドライバ回路を備えています。このディスプレイは希望する制御と英数字をモジュールに書き込む方式で操作され、モジュールは実際のLCDを管理します。
1つのユーザ入力が与えられると、ソフトウェアは、LCD上に3つの可能なトランザクションを繰り返しユーザに表示します。その後、ソフトウェアは、SW4スイッチが押されたときに表示されたトランザクションを実行します。
スマートカードの詳細
このアプリケーション例で選択されたスマートカードは、香港のACS (Advanced Card Systems Limited)社製のACOS3カードです。このカードは、ACS Smart Card Operating Systemバージョン3 (ACOS3)というオペレーティングシステムを実行する組込みプロセッサを内蔵し、次のような特長を備えています。
- アプリケーションデータ用16kB EEPROMメモリ
- ISO 7816-1/2/3、T = 0プロトコルに準拠
- DES (Digital Encryption Standard)、トリプルDES、およびMessage Authentication Capability (MAC)の機能
- 5つのシークレットコード + 発行体コード
- PIN:カード所有者による変更が可能
- 相互認証用の鍵ペア
- 乱数に基づくセッションキー
- 固定レコード長のリニアファイル
- セキュア支払アプリケーション用のアカウントデータ構造
ACOS3の各機能の詳細については、ACSのウェブサイトを参照してください。このアプリケーションでは、このカードのセキュリティ機能は何も使用されていません。ファイル構造とEEPROMストレージのみが使用されています。
カードメモリストレージ
このトランザクション例では、選択されるカードは、情報ストレージ用の最小容量の不揮発性メモリを搭載している必要があります。このカードには2つの値しか格納されていません。1つは「カウンタ」で、正常に処理されたトランザクション数を格納します。もう1つは「残高」で、これは架空の口座です。カウンタには、1バイトの符号なし値が選択されました。これによって、0~255のトランザクション数を表すことができます。残高には、16ビット整数が選択されました。これによって、-32,768~+32,767の値を表現することができます。この方式では、ユーザが利用可能な残高を超えてカードでデビットする可能性(つまり、負債の作成)が許容されます。このため、この例では、合計3バイトの不揮発性メモリが必要となりました。
ACOS3ファイル構造
ACOS3カードの内蔵16kBのEEPROMメモリは、製造時に内部データメモリ(Internal Data Memory)とユーザデータメモリ(User Data Memory)に区分されます。内部データメモリは、設定データを格納し、通常、オペレーティングシステムによって特定の機能を管理するために使用されます。ユーザデータメモリは、「実業務」のトランザクションアプリケーションの制御の下で、カードの通常使用で操作されるデータを格納します。このサンプルコードでは、内部データメモリのみが使用されるため、これ以降、内部データメモリを中心に説明します。
内部データメモリまたはユーザデータメモリのいずれを使用する場合でも、ACOS3カードのメモリへのアクセスは、データファイルとデータレコードを介して行います。各データファイルは、最大255個までの一定数のデータレコードで構成されます。レコード長は、個々のファイルによって異なりますが、1つのファイル内では常に固定されます。内部データファイルのファイル構造(ファイルサイズ、レコード長など)は、オペレーティングシステムによって定義されており、変更はできません。ただし、ユーザデータメモリの場合、カード発行体がカードのパーソナリゼーションを行うときにファイル構造を決定します。ここでは簡単にするために、任意のユーザデータファイルシステムを実行しないで、このカードの既存の内部データファイルシステムが使用されています。
すべてのファイルへのアクセスは、ACOS3のRead RecordとWrite Recordコマンドから行うことができます。これらのコマンドは、カードに送信され、任意の応答がAPDUの関数(アプリケーションノート4036を参照)から受信されます。各ファイルは、2バイトのファイル識別子によって識別されます。すべての内部データファイルで、識別子の先頭バイトは0xFFに固定されています。内部データファイルのファイル名、ファイル識別子、およびレコード編成は、表1のようになります。
File Name | MCU-ID | Manufacturer | Personalization | Security | User File Management | Account File | Account Security | User File Data Area |
File ID | 0xFF 0x00 | 0xFF 0x01 | 0xFF 0x02 | 0xFF 0x03 | 0xFF 0x04 | 0xFF 0x05 | 0xFF 0x06 | 0xFF 0x07 |
Record Organization | 2 × 8 Bytes | 2 × 8 Bytes | 3 × 4 Bytes | 12 × 8 Bytes | Variable | 8 × 4 Bytes | 4 × 8 Bytes | Variable |
パーソナリゼーションファイル、ファイルID = 0xFF 0x02は、各4バイトの長さの3つのレコードとして配列された12バイトを格納します。1番目のレコードは、カード内に特定オプションを設定する情報を格納します。ただし、レコード2とレコード3は、あらかじめ決められた定義がありません。したがって、これらの2つのレコードは、カード内にこのアプリケーションのカウント値と残高値を保持するために使用されます。単一のレコードには、カウントおよび残高情報に必要な3バイトのデータを保持するために十分なストレージ(4バイト)が含まれていますが、これらの2つの値は、各操作を簡素化して明確にするために別々のレコード内に格納されます。これによって、レコード数を増やすこともできます。カウントは、レコード2の第1バイトに格納され、残高は、レコード3の先頭2バイト、上位バイトファースト(つまり、ビッグエンディアン)に格納されます。
ACOS3コマンド構造
ACOS3カードは13の基本コマンドを持っています。このアプリケーションでは、これらのコマンドのうちの3つが、実行するオペレーションのコアを形成します。これらは、Select File、Read Record、およびWrite Recordの各コマンドです。以下に、各コマンドについて説明します。すべてのACOS3のコマンドは、EMV規格に規定されたAPDU (Application Protocol Data Unit)の書式に従います。APDUの一般書式は、次の各要素で構成されます。
- CLA:コマンドのクラス
- INS:命令コード
- P1:命令パラメータ1
- P2:命令パラメータ2
- Lc(P3):コマンドのデータフィールドに存在するバイト数(オプション)
- Data:コマンドで送信される一連のデータバイト数
- Le:応答のデータフィールドに予測される最大データバイト数(オプション)
Select Fileコマンド
Select Fileコマンドは、ファイルを開き、レコードの読取り/書込みを可能にします。これは、7バイトコマンドで、書式は次のようになります。
CLA | INS | P1 | P2 | P3 | Data 1 | Data 2 |
0x80 | 0xA4 | 0x00 | 0x00 | 0x02 | File ID High (0xFF) | File ID Low (0x02) |
パーソナリゼーションファイル(表1参照)は、このアプリケーションで使用される唯一のファイルで、ファイルIDの0xFF 0x02はこのコマンドの最後の2バイトです。すべてのACOS3コマンドの場合と同様に、このコマンドは、正常に完了した場合0x90 0x00の2バイトステータスを返します。それ以外の戻り値は、実行時のエラーを示します。可能なエラーステータスバイトとそれぞれの意味の完全リストは、上記のACSウェブサイトに掲載されているオンラインのACOS3リファレンスマニュアルを参照してください。
Read Recordコマンド
Read Recordコマンドは、現在選択されているファイルの特定のレコードから指定数のバイトを読み取ります。このコマンドは、5バイトコマンドで、次のような書式を持っています。
CLA | INS | P1 | P2 | P3 |
0x80 | 0xB2 | Record Number (0..N-1) | 0x00 | Length (0x04) |
表に示したように、このコマンドは、2つの可変バイトを持ちます。1バイトは、レコード番号を示し、もう1バイトは指定レコードから読み取られるバイト数(長さ)を示します。このアプリケーションでは、長さが0x04に固定されると毎回すべての4バイトのパーソナリゼーションファイルのレコードが読み取られます。コマンドが正常に完了した場合、6バイトのデータが返されます。これは、レコードに格納されている4バイトの情報と2バイトのステータス情報で構成されます。0x90 0x00以外のステータスバイトの値が返された場合、このコマンドはエラーを発生します。この場合、返されたデータは無視してください。
Write Recordコマンド
Write Recordコマンドは、現在選択されているファイルの指定レコードにデータを書き込みます。これは、可変長コマンドで、書き込まれるバイト数によって長さが決まります。この例では、このコマンドは、4バイトが常に書き込まれ、次のような書式を持っています。
CLA | INS | P1 | P2 | P3 | Data | Data | Data | Data |
0x80 | 0xD2 | Record Number (0..N-1) | 0x00 | Length (0x04) | Byte 1 | Byte 2 | Byte 3 | Byte 4 |
表に示したように、このコマンドは、合計で6バイトを持っています。そのうち、1バイトはレコード番号(0~N-1)を示し、もう1バイトは書き込まれるバイト数(長さ = 0x04)を示し、さらに4データバイトがあります。コマンドが正常に完了した場合、2バイトのステータス情報(正常な完了の場合は0x90 0x00)が返されます。
実行ファイルのロード
DS8007のEVキットボードをロードすると、このスマートカードサンプルトランザクションソフトウェアもセットでロードされます。このソフトウェアの存在を確認するには、ボードに電源を入れてディスプレイを観察してください。最後に「Insert card into large socket below.(カードを下の大きいソケットに挿入してください。)」という2行バナーが表示された(図1)場合、このプログラムはロードされています。このバナーが表示されない場合、このプログラムは、MTKソフトウェアを使用してボードのバッテリバックアップSRAMにロードすることができます。アプリケーションノート4036 (上記参照)には、アプリケーションファイルのロード方法が説明されています。ロードするファイルは、Trans.hexで、上記のftpウェブサイトからダウンロード可能なAN4120_SW.zipファイルに含まれています。
図1. 「カードを挿入してください」バナー
ファイルがロードされてブートストラップローダが切断されると同時に、プロセッサはアプリケーションを実行し始めます。PCにまだ接続している場合は、MTK画面にプログラムのRS-232シリアル出力が表示される場合がありますが、この情報は分析やデバッグ用であるため、無視してください。ユーザは、LCDモジュールに表示された指示に従ってください。シリアル出力の意味を判断するために、必要に応じて、ソースコードを分析することができます。
スマートカードを挿入すると、LCDに、カードの現在のトランザクション数と口座残高の概要が表示されます。その後、ディスプレイは、デビット、クレジット、および初期化の各トランザクションオプションを連続的に繰り返し、約2秒ごとに切り替えます。希望するトランザクションが表示されたら、SW4スイッチを押してこのトランザクションを実行します。画面に、実行したアクションが表示されます。終了メッセージが表示され、ユーザはスマートカードを取り出すように指示されます。この時点で、トランザクションサイクルが繰り返され、カードが再挿入されるのを待機します。
結論
このアプリケーションノートに説明されたシステムは、マルチプロトコルデュアルスマートカードインタフェースチップのDS8007とセキュアマイクロコントローラのDS5002に基づくスマートカード支払処理システムを実現しています。6kBのEEPROMメモリを搭載するACOS3スマートカードが用いられ、この不揮発性メモリに情報を格納するために、カードのRead RecordおよびWrite Recordコマンドを使用します。オンボード2行 x 20文字LCDからフィードバックがユーザに提供されます。クレジットおよびデビットトランザクションがスマートカード初期化機能とともに実現されています。ソースコードファイルは、ダウンロードが可能で、これを基にして実際の業務システムを構築することができます。
{{modalTitle}}
{{modalDescription}}
{{dropdownTitle}}
- {{defaultSelectedText}} {{#each projectNames}}
- {{name}} {{/each}} {{#if newProjectText}}
-
{{newProjectText}}
{{/if}}
{{newProjectTitle}}
{{projectNameErrorText}}