スマートカード:入門書

スマートカードは、最近Web、昨年4月のJavaOneカンファレンス(テクノロジーを扱った4つのセッション)、大規模なネットワークニュースステーション、およびCNNで多くの話題を呼んでいます。この記事では、実際のスマートカードの例を使用してスマートカードに命を吹き込みます。ここで紹介する手法を使用すると、スマートカード対応のJavaアプリケーションの構築を開始できます。

2種類のスマートカードに焦点を当てます。メモリスマートカード。オプションのセキュリティを備えた極小のリムーバブル読み取り/書き込みディスクと見なすことができます。そしてプロセッサカードの入出力ポートを有する小型コンピュータと見なすことができます。今後の記事では、プロセッサカードについてさらに詳しく説明します。

記事の要点として、スマートカードにデータを読み書きするための簡単なプロトタイプを開発します。すべての処方箋のリストを保持し、保険、処方計画、およびその他の有用な情報を追跡する薬の処方箋カードについて説明します。後の記事では、処方箋カードのアイデアについて詳しく説明します。

スマートカードでこのシリーズ全体で繰り返し発生するテーマは、不正なプラグインやActiveXコンポーネントなどが個人や企業の情報にアクセスするのを防ぐためのセキュリティフレームワークの必要性であることに気付くでしょう。この目的のために、この記事に含まれているスマートカードのデータの読み取りと書き込みの方法のデモンストレーションは、永続的で安全な(そしてポータブルな)ストレージを提供します。

スマートカードとは何ですか?

スマートカードは、「頭脳」が付いた「クレジットカード」と考えることができます。頭脳は、小さな組み込みコンピュータチップです。このカードコンピュータは、タスクを実行して情報を保存するようにプログラムできますが、頭脳が少ないことに注意してください。つまり、スマートカードの能力はデスクトップコンピュータにはるかに及ばないということです。

スマートカードは現在、電話、輸送、銀行、ヘルスケアのトランザクションで使用されており、まもなく(あなたのような開発者のおかげで)インターネットアプリケーションで使用されるようになります。スマートカードはすでに日本とヨーロッパで広く使用されており、米国でも人気が高まっています。実際、この国のスマートカード業界では最近3つの重要なイベントが発生しています。

PC / SC

マイクロソフトと他のいくつかの企業は、パーソナルコンピュータ用のWin32ベースのプラットフォームからスマートカードと通信するためのスマートカードアプリケーションインターフェイスであるPC / SCを導入しました。PC / SCは現在、Win32ベース以外のシステムをサポートしておらず、サポートしない可能性があります。これについては、後で詳しく説明します。

OpenCardフレームワーク

OpenCardは、NC、POS、デスクトップ、ラップトップ、セットトップなどでスマートカードアプリケーションの相互運用性を提供するオープンスタンダードです。OpenCardは、100%純粋なJavaスマートカードアプリケーションを提供することを約束します。スマートカードアプリケーションは、外部デバイスと通信したり、クライアント上のライブラリを使用したりするため、純粋ではないことがよくあります。(補足として、OpenCardがなくても100%純粋なアプリケーションが存在する可能性がありますが、OpenCardがなければ、開発者はスマートカードへの自家製インターフェイスを使用します。)OpenCardは、Win32上の既存のデバイスを使用するためのPC / SCへのインターフェイスも開発者に提供します。 platfroms。

JavaCard

JavaCardはSchlumbergerによって導入され、最近JavaSoftによって標準として提出されました。Schlumbergerは現在市場に出ている唯一のJavaCardを持っており、同社は最初のJavaCardライセンシーです。全体的なスマートカード標準を設定する可能性のあるスマートカードであるJavaCardは、標準のクラスとAPIで構成されており、Javaアプレットを標準のISO7816準拠のカードで直接実行できます。JavaCardは、さまざまなアプリケーションの安全でチップに依存しない実行を可能にします。

注意:

この記事ではスマートカードに焦点を当てていますが、これらの種類のデバイスに限定されないことに注意することが重要です。個人的には、ダラスセミコンダクター製の「Ibuttons」デバイスが好きです。クレジットカードのように小さくて持ち運びができますが、とても便利です。どうして?カードを探すために財布を掘り出す必要はありません。 Ibuttonsはすぐそこにあります。はい、それはリングです!

一方で非接触型スマートカードのバージョンが存在しません(これについての詳細は下記を参照)、私はのiButtonは、デバイスの機能・宝石の種類は非常に有益なことができると思います。Ibuttonの詳細については、「リソース」セクションを参照してください。ちなみに、Java Commerce Teamは、昨年8月にニューヨークで開催されたJava Internet Business Expo(JIBE)で「JavaRing」のデモを行いました。これについては、フォーチュン誌の記事で読むことができます(ここでも、「リソース」セクションを参照してください)。

なぜスマートカードを使用するのですか?

スマートカードを使用する利点は何ですか?さて、スマートカード:

  • 磁気ストライプカードよりも信頼性が高い
  • 現在、磁気ストライプカードの100倍の情報を保存できます
  • マグストライプよりも改ざんが難しい
  • 使い捨てまたは再利用可能
  • 幅広い業界で複数の機能を実行できます
  • 電話、携帯情報端末(PDA)、PCなどのポータブル電子機器と互換性があります
  • 絶えず進化しています(結局のところ、それはコンピュータチップを組み込んでいます)

スマートカードの種類

前述のように、この記事では、メモリとプロセスの2種類のスマートカードに焦点を当てます。全部で、5種類のスマートカードがあります。

  1. メモリカード
  2. プロセッサカード
  3. 電子財布カード
  4. セキュリティカード
  5. JavaCard

スマートカードは、ディスプレイデバイスまたはネットワークにアクセスするために他のデバイスと通信する必要がある個人用ハードウェアです。カードは、一般にと呼ばれるリーダーに接続できます。

カード端末

、またはRF無線周波数を使用して動作できます。

スマートカードは、次の2つの形式のいずれかでリーダーまたはレシーバーと通信できます(これら2つの用語の詳細については、以下のリーダーに関するセクションを参照してください)。

スマートカードへの接触-リーダーがカードの前面にある小さな金のチップに接触すると、接続が確立されます。

非接触型スマートカード-アンテナを介して通信できるため、カードを手で挿入したり取り外したりする必要がありません。非接触型カードを使用すると、受信機に近づくだけで、カードとの通信が開始されます。非接触型カードは、カードの挿入/取り外しが実用的でない場合や速度が重要な場合に使用できます。

一部のメーカーは、接触モードと非接触モードの両方で機能するカードを製造しています。

スマートカードアプリを構築するための開発環境を作成する

スマートカードアプリケーションを開発するには、いくつかのものが必要です。つまり、スマートカードリーダー。リーダーと通信するためのソフトウェア、およびリーダーに接続されているカードと通信するためのいくつかのソフトウェア。そしてもちろん、スマートカードとスマートカードハードウェア。

スマートカードリーダー

スマートカードと通信したり、スマートカード対応のアプリケーションを開発したりするには、リーダーが必要です。リーダーは、アプリケーションがカードとの間でコマンドを送受信するためのパスを提供します。市場には多くの種類のリーダーがあり、最も普及しているのはシリアルPCCard、およびキーボードモデルです。(キーボードモデルはあちこちに現れます。1998年6月までに大手PCメーカーから直接入手できるようになる予定です。)

この記事では、シリアルリーダーを使用してデバイスをサポートします。シリアルリーダーは、コンピューターのシリアルポートに接続します。提供されているコードはPCCardリーダーもサポートしていることに注意してください。ほとんどのラップトップには、PCCardスロットが組み込まれています。

各メーカーは、読者と話すための異なるプロトコルを提供しています。リーダーと通信できるようになると、スマートカードと通信するためのプロトコルが1つあります。スマートカードとの通信はAPDU形式に基づいています。(APDU形式については以下で説明します。)独自のリーダーの購入については、「参考文献」セクションの「Gemplusスマートカードリーダー」の見出しを参照してください。

リーダーと通信するためのソフトウェア

この記事に含まれているスマートカードの例には、いくつかのオブジェクト指向クラスが必要です。これらは:

  • 7816プロトコルと通信するためのISOコマンドクラス
  • 読者とコミュニケーションをとるためのクラス
  • データをメーカー固有の形式に変換するためのクラス
  • アプリケーションが設計された目的でカードをテストおよび使用するためのアプリケーション

スマートカードとスマートカードハードウェア

記事の冒頭で述べたように、ここでスマートカードアプリケーションを開発するには、スマートカードハードウェアといくつかのスマートカードが必要です。スマートカード開発キットは、GemplusやSchlumbergerなどの多くの企業から購入できます。

すでにリーダーをお持ちの方は、後で説明するインターフェイスクラスの実装を提供することでリーダーを使用できるはずです。前述のように、カードと通信する前に、リーダーと通信できる必要があります。カードがたくさんあるのと同じように、リーダーもたくさんあります。

重要なスマートカード標準

スマートカードアプリケーション開発パズルの重要な部分は、標準プロトコルです。基本的に、アプリケーションはリーダーと通信し、リーダーは標準プロトコル(この場合はInternational Standards Organisation(ISO)7816プロトコル)を使用してスマートカードと通信します。

他の新しいテクノロジと同様に、スマートカードには非常に多くの標準があるため、落胆して圧倒される可能性があります。以下の標準の基本的な理解を達成することで、スマートカードの使用の基本的なことを無視していないという自信を持ってアプリケーションを開発することができます。ただし、一部のシステムでは、特別な標準が機能します。標準全体を「水平」標準と「垂直」標準に分けました。水平標準はすべてのアプリケーションで使用できますが、垂直標準はシステムに固有です。

水平基準

  • ISO7816-スマートカードへの最下位レベルのインターフェイスについて説明しています。カードリーダーとカードの間でデータバイトが転送されるのはこのレベルです。

  • PC / SC -Win3.1 / Win95 / NTマシンに接続されたスマートカードと通信するための標準。

  • OCF -Java環境からスマートカードと通信するためのすべてのJavaインターフェイス。(まもなくOCFにより、開発者はOCFに書き込み、翻訳を実行できるようになるため、PC / SCに書き込む必要はなくなります。)

  • JavaCard -JavaCardとそれがサポートするものについて説明します。

垂直基準

  • Mondex-スマートカードのみを使用するデジタル現金。Mondexのアプローチでは、カードの外に現金を置くことはできません。

  • VisaCash-サーバー上のカードを追跡するデビットカード。

  • プロトン-E-cashの別の形式。

  • MPCOS-EMV--独自のタイプの通貨またはトークンを実装できる汎用カード。

このような小さなプラスチック片は、多くのドキュメントを読む必要があり、開発者の側に多くの知識を要求する可能性があることにいつも驚いています!

スマートカードにはこのような高度な専門知識が必要であるため、開発者は、販売先の市場の水平標準を使用して垂直標準を実装するBeans対応製品を提供する市場があります。これは、OpenCardなどの水平標準のさまざまな組み合わせを使用するBeanを開発し、他の業界標準のコマースまたは他のアプリケーションを使用して特定のアプリケーションを実装できることを意味します。

Javaアプレットまたはアプリケーションからのスマートカードとの通信

すべてのハードウェアを接続するために何が必要かを知っています。次に、アプリケーションからリーダーにコマンドを送信できるようにするいくつかのAPIの使用方法を理解する必要があります。 (次に、リーダーはカードと通信し、それによってデータをカードに送信する前の仲介者として機能します。)スマートカードリーダーは、金の接点を小刻みに動かしてデータを転送します。カードはデータを処理してリーダーに返し、リーダーはデータをアプリケーションに返します。では、これらすべてのバイトがアプリケーションからカードに移動するとき、これらはどこにあるのでしょうか。

上記のように、アプリケーションはリーダーと通信し、リーダーは上記の標準を使用してスマートカードと通信します。基本的に、スマートカード技術が発展するにつれて、スマートカード規格がISOによって提案されました。カードと通信するためのプロトコルだけでなく、標準で定義された機械的および電気的特性。関連するISOドキュメントへのポインタは、「リソース」セクションにリストされています。残念ながら、ISOグループはリーダーと通信するための標準を提供できませんでした。したがって、コマンドをカードに送信するには、まずカードがサポートするコマンドを見つけ、このコマンドをISOコマンドパケットでラップしてから、この新しいコマンドを問題のリーダーに必要なラッパーでラップする必要があります。ここで提供されるサンプルアプリケーションは、このすべての階層化を実行します。

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

スマートカードとの交換の基本単位はAPDUパケットです。アプリケーション層から送信されるコマンドメッセージ、およびカードからアプリケーション層に返される応答メッセージは、アプリケーションプロトコルデータユニット(APDU)と呼ばれます。カードとリーダーとの通信はAPDUで行われます。APDUは、カードからの完全な命令または完全な応答を含むデータパケットと見なすことができます。この機能を提供するために、APDUには、7816仕様ファミリに属する​​多数のISOドキュメントで定義されている明確に定義された構造があります。

APDUは、次のフィールドで構成されています。

コマンドAPDUフォーマット

CLA INS P1 P2 Lc データ

応答APDUフォーマット

データ SW1 SW2

以下は、APDUを転送するために提供されるクラスとクラスの機能の一部です。