(57)【要約】【課題】  ＩＣカード発行システムがＩＣカードに書き込まれたデータの正当性を検証できるデータの正当性検証方法を提供する。【解決手段】  ＩＣカードはＩＣカード発行システムからの要求に対して、メモリに書込んだすべてのデータに基いて演算した認証コード＿Ｃを送信する（Ｓ１３０）。ＩＣカード発行システムは、前記ＩＣカードに送信したすべての書込みデータに基づいて、ＩＣカードと同じ演算式を用いて認証コード＿Ｐを演算する（Ｓ１４０）。ＩＣカード発行システムは前記認証コード＿Ｃと認証コード＿Ｐを比較することで（Ｓ１５０）、ＩＣカードに書込まれたデータの正当性を検証する。【選択図】      図５
2005258968.tif 000002
【特許請求の範囲】
【請求項１】
外部装置から送信した書込みデータの認証コードを要求する認証コード要求コマンドを、外部装置からＩＣカードに送信するステップと、
前記ＩＣカードがメモリに書込んだデータに基く第１の認証コードを演算し、前記外部装置に前記第１の認証コードを送信するステップと、
前記外部装置がＩＣカードに送信した書込みデータに基づく第２の認証コードを演算するステップと、前記外部装置が前記第１の認証コードと前記第２の認証コードを比較するステップとからなることを特徴とするＩＣカードに書込まれたデータの正当性検証方法。
【請求項２】
請求項１に記載のデータの正当性検証方法において、
前記認証コード要求コマンドはＩＣカードにデータを書き込む最終のコマンドであることを特徴とするＩＣカードに書込まれたデータの正当性検証方法。
【請求項３】
ＩＣカードに搭載されるＩＣカード用プログラムであって、
外部装置から送信される認証コード要求コマンドを受信するステップと、
メモリに書込んだデータに基づく認証コードを演算するステップと、
前記認証コードを前記外部装置に送信するステップを順に実行する手順を少なくとも含むことを特徴とするＩＣカード用プログラム。
【請求項４】
請求項３に記載のＩＣカード用プログラムであって、
前記認証コード要求コマンドはＩＣカードにデータを書き込む最終のコマンドであることを特徴とするＩＣカード用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クレジットカードサイズのプラスチックカードに半導体集積回路（以下、ＩＣチップと記す）を埋め込んだＩＣカードおよびＩＣカードに搭載するプログラムに関し、更に詳しくはＩＣカードに書込んだデータの正当性を検証する技術に関する。
【背景技術】
【０００２】
ＩＣカードとは、クレジットカードサイズのプラスチックカードにＩＣチップを埋め込み、前記ＩＣチップのメモリにデータを記録するカードである。近年ＩＣカードはキャッシュカード、クレジットカードまたは電子マネーなどに幅広く応用されている。
【０００３】
前記ＩＣチップのメモリには、ＩＣカード発行処理時に初期データ（場合によってはプログラム）が書込まれる。前記メモリに誤ったデータもしくは不正なデータが書込まれると、運用時にトラブルが発生するため、誤ったデータもしくは不正なデータの書込みを防止すべく、ＩＣカード発行処理時においては、ＩＣカードに送信する書込みデータにＭＡＣ（MAC：Message Authentication Code）と呼ばれる認証コードを付加することが多い。
【０００４】
ＭＡＣとは、ＩＣカードに書込むデータを引数としてある関数ｆｘ（）から演算され、前記書込むデータと一意に対応する値である。前記関数ｆｘ（）としては、暗号関数やハッシュ関数が利用される。ＭＡＣが付加された書込みデータをＩＣカードが受信すると、ＩＣカードは受信した書込みデータを引数として、前記ＭＡＣを生成したときと同じ関数ｆｘ（）を用いてＩＣカード内部でＭＡＣを演算し、前記書込みデータに付加されたＭＡＣとＩＣカード内部で演算したＭＡＣを比較する。ＭＡＣの値が一致していれば、受信した書込みデータは信用できると判断し、ＩＣカードは受信した書込みデータをメモリに書き込む。他人の出願に係る特許文献１においては、１つの書込みデータに異なる２つのＭＡＣを付加することで、より安全にＩＣカードにデータを書き込むことができる方法を開示している。
【特許文献１】特表平１１−５０６５６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ＩＣカード発行処理に書込まれるデータのデータサイズは、アプリケーションの種類によっても異なるが、通常、数キロバイトから数十キロバイトである。ＩＣカードが一度に受信できるデータサイズには限界があるため、ＩＣカードは上述のようなデータサイズの大きいデータを一度に受信することはできない。数キロバイトから数十キロバイトにも及ぶようなデータサイズのデータを書き込む際は、前記データサイズより小さいデータサイズのデータ（以下、データブロックと記す）に分割し、複数のデータブロックをＩＣカードに送信することで、データサイズの大きいデータをＩＣカードのメモリに書き込む。
【０００６】
しなしながら、前述の従来の技術では、ＩＣカードは、受信した書込みデータをＭＡＣを用いて検証できるが、ＩＣカードに書込みデータを送信する側は、ＩＣカードに書き込まれたデータの正当性を検証することはできない問題があった。
【０００７】
例えば、ＩＣカードにデータサイズの大きいデータを複数のデータブロックに分けて送信する場合は、前記データブロックを送信する毎にＭＡＣが付加され、ＩＣカードは前記ＭＡＣの正当性が正しければ受信したデータブロックをメモリに書込む。このため、ＩＣカードに送信される複数のデータブロックの内、一つのデータブロックが欠落（ＩＣカードが受信しないことを意味する）しても、ＩＣカードに書込みデータを送信する側は前記データブロックの欠落を確認することはできない問題が生じていた。
【０００８】
上述の問題を鑑みて、本発明は、ＩＣカード発行システム等のＩＣカードに書込みデータを送信する外部装置が、ＩＣカードに書込まれたデータの正当性を検証し、書込みデータの欠落や書込みデータの改竄を検知できるＩＣカードの書込みデータ検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前述の問題を解決するために第１の課題解決手段は、ＩＣカードに書込まれたデータの正当性検証方法であって、外部装置から送信した書込みデータの認証コードを要求する認証コード要求コマンドを、外部装置からＩＣカードに送信するステップと、前記ＩＣカードがメモリに書込んだデータに基く第１の認証コードを演算し、前記外部装置に前記第１の認証コードを送信するステップと、前記外部装置がＩＣカードに送信した書込みデータに基づく第２の認証コードを演算するステップと、前記外部装置が前記第１の認証コードと前記第２の認証コードを比較するステップとからなることを特徴とするＩＣカードに書込まれたデータの正当性検証方法である。
【００１０】
第１の課題解決手段によれば、外部装置がＩＣカードに書込まれたデータに基づく第１の認証コードをＩＣカードから取得し、ＩＣカードに送信した書込みデータに基づく第２の認証コードと比較することで、外部装置はＩＣカードに書込まれたデータの正当性を検証できる。例えば、前述のデータブロックの欠落が生じると、前記第１の認証コードと前記第２の認証コードが一致しないため、前記外部装置はデータブロックの欠落等によってＩＣカードに書込まれたデータが正当でないことを知ることができる。
【００１１】
更に第２の課題解決手段は、第１の課題解決手段に記載のデータの正当性検証方法において、前記認証コード要求コマンドはＩＣカードにデータを書き込む最終のコマンドであることを特徴とするＩＣカードに書込まれたデータの正当性検証方法である。第２の課題解決手段によれば、前記認証コード要求コマンドをデータを書き込む最終のコマンドとすることで、前記外部装置は前記第１の認証コードを取得するために、特別なコマンドをＩＣカードに送信する必要は無くなる。
【００１２】
更に第３の課題解決手段は、ＩＣカードに搭載されるＩＣカード用プログラムであって、外部装置から送信される認証コード要求コマンドを受信するステップと、メモリに書込んだデータに基づく認証コードを演算するステップと、前記認証コードを前記外部装置に送信するステップを順に実行する手順を少なくとも含むことを特徴とするＩＣカード用プログラムである。ＩＣカードが第３の課題解決手段のＩＣカード用プログラムを実装することで、第１の課題解決手段、第２の課題解決手段が実現できる。
【００１３】
更に第４の課題解決手段は、前記認証コード要求コマンドはＩＣカードにデータを書き込む最終のコマンドであることを特徴とする第３の課題解決手段に記載のＩＣカード用プログラムである。第４の課題解決手段のＩＣカード用プログラムを実装することで、第２の課題解決手段が実現できる。
【発明の効果】
【００１４】
これまで述べたように、本発明のＩＣカードに書込まれたデータの正当性検証方法およびＩＣカード用プログラムを用いれば、外部装置はＩＣカードから取得する前記第１の認証コードと外部装置が演算する前記第２の認証コードから、ＩＣカードに書込まれたデータの正当性を検証できる。外部装置がＩＣカードに書込まれたデータの正当性を検証できることは、前述のデータブロックの欠落を検知できるばかりではなく、ＩＣカードに送信した書込みデータの改竄も検知することができる。
【発明を実施するための最良の形態】
【００１５】
〔本発明の第１の実施の形態〕
ＩＣカードに搭載されたアプリケーションの発行処理、すなわちアプリケーションが使用する初期データをＩＣチップが具備するメモリに書き込む処理に、本発明を適用した実施の形態について、以下に図を参照にしながら詳細に説明する。まず初めに発行システムおよびアプリケーションについてそれぞれ説明し、つづいて発行処理時にＩＣカードに書込まれたデータの正当性検証方法の手順について説明し、そして前記正当性検証方法に必要なＩＣカード用プログラムの動作手順について説明する。
【００１６】
＜発行システムおよびアプリケーションの説明＞
図１はＩＣカード発行システム１００の概略図である。ＩＣカード発行システム１００は、ＩＣカード２００とデータ通信し、ＩＣカード２００の書換え可能なメモリにデータを書き込む外部装置である。ＩＣカード発行システム１００は、ＩＣカード２００に書込むデータを記憶する記憶装置１１０、ＩＣカード２００に書込むデータからＩＣカード２００に送信するＡＰＤＵ（APDU：Application Protocol Data Unit）を生成するＡＰＤＵ生成装置１２０、およびＩＣカード２００とデータ通信しデータの読み書きを行なうリーダライタ１３０を少なくとも備えている。
【００１７】
図２は、ＩＣカード２００に埋め込まれるＩＣチップ２１０の構成図である。ＩＣチップ２１０には、演算機能およびＩＣチップ２１０が具備するデバイスを制御する機能を備えた中央演算装置２１１（CPU：Central Processing Unit、以下ＣＰＵと記す）、読み出し専用メモリ２１２（RO：Read Only Memory、以下ROMと記す）、書換え可能なメモリとしてＥＥＰＲＯＭ２１３（EEPROM：Electrically Erasable Programmable Read-Only Memoryの略）、揮発性メモリとしてランダムアクセスメモリ２１４（RAM：Random Access Memory、以下ＲＡＭと記す）、およびリーダライタ１３０とデータ通信するためのＩ／Ｏ回路２１５を少なくとも備なえている。本発明は、ＩＣチップ２１０の仕様をなんら限定するものではなく、ＩＣカード２００の用途に適した仕様のＩＣチップ２１０を選択することができる。例えばＲＯＭ２１２およびＥＥＰＲＯＭ２１３の容量については限定しないし、書換え可能なメモリは強誘電体メモリまたはフラッシュメモリ等のＥＥＰＲＯＭ以外のメモリであっても構わない。またＩＣチップ２１０は乱数を生成する回路、暗号演算回路等の図示していない他のデバイスを備えていても構わない。
【００１８】
図３は、ＡＰＤＵ生成装置１２０によって生成されるデータ書込みコマンドＡＰＤＵおよび前記コマンドに対応するレスポンスＡＰＤＵの構造を示した図である。ここで前記データ書込みコマンドとは、ＥＥＰＲＯＭに所定のデータを書き込むために、ＩＣカード発行システム１００がＩＣカード２００に送信するコマンドである。前記レスポンスＡＰＤＵとは、ＩＣカード２００が前記データ書込みコマンドを受信・処理した後、ＩＣカード２００がＩＣカード発行システムに返信するレスポンスである。
【００１９】
図３（ａ）はデータ書込みコマンドＡＰＤＵ３００の説明図である。データ書込みＡＰＤＵ３００は、コマンドコード３０１、コマンドパラメータ３０２およびデータフィールド３０３から構成されている。ＣＰＵ２１１はコマンドコード３０１から処理内容（本実施の形態ではデータ書込み処理）を識別し、詳細な実行条件をコマンドパラメータ３０２から判断する。ＥＥＰＲＯＭ２１３に書込まれるデータは、データフィールド３０３に格納される。
【００２０】
図３（ｂ）はレスポンスＡＰＤＵ３１０の説明図である。レスポンスＡＰＤＵ３１０は、レスポンスデータ３１１およびレスポンスコード３１２から構成される。レスポンスデータ３１１は、ＩＣカード２００がＩＣカード発行システム１００に送信するデータで、送信するデータが無ければレスポンスデータ３１１は無くてもよい。レスポンスコード３１２は、データ書込み処理の成功／失敗を示すコードで、ＩＣカード発行システム１００はレスポンスコード３１２から、データ書込みコマンドＡＰＤＵで送信したデータが正常に書込まれたことを認識できる。
【００２１】
図４はＩＣカードに搭載されるアプリケーション４００を説明するための図である。アプリケーション４００は、ＣＰＵ２１１に対する命令を記述したアプリケーションコード４１０と、アプリケーションコード４１０が使用するアプリケーションデータ４２０から構成される。
【００２２】
アプリケーションコード４１０はＥＥＰＲＯＭ２１３にデータを書き込む処理を実行するコードを少なくとも含み、本発明のＩＣカード用プログラムもアプリケーションコード４１０に含まれる。アプリケーションコード４１０は、通常、マルチアプリケーション型ＩＣカードの場合は書換え可能なメモリに実装され、専用型ＩＣカード（Ｎａｔｉｖｅ型ＩＣカード）の場合はＲＯＭに実装される。本発明のＩＣカードに書込んだデータの正当性検証方法は、ＩＣカードに搭載されるプログラムによって実現されるため、プログラムが実行できれば、アプリケーションコード３１０が実装されるメモリの種別は問わない。
【００２３】
アプリケーションデータ４２０は、アプリケーションコード４１０が使用するデータで、ＩＣカード一枚ごとに異なる。マルチアプリケーション型ＩＣカードおよび専用型ＩＣカードともに、アプリケーションデータ４２０は書換え可能なメモリ（本実施の形態ではＥＥＰＲＯＭ２１３）に記録される。アプリケーションデータ４２０のデータサイズは、アプリケーション４００の種類によって異なるが数キロバイトから数十キロバイトにも及ぶ。
【００２４】
アプリケーション４００は、外部装置（ＩＣカード発行システム１００）からデータ書込みコマンドＡＰＤＵを受信すると、受信したデータ書込みコマンドＡＰＤＵに含まれるコマンドコードをアプリケーションコード４１０が解釈し、前記コマンドコードに対応した処理（データ書込み処理）を実行する。ＩＣチップ２１０が具備しているＩ／Ｏ回路２１５は一度に数キロバイトにも及ぶデータ（例えば電子証明証等）を受信することができないので、発行処理時にデータサイズの大きいデータをＥＥＰＲＯＭ２１３に書き込む際は、ＩＣカード発行システム１００はデータサイズの大きいデータをＩ／Ｏ回路２１５が一度に受信できるデータ（データブロック）に分割し、複数のデータ書込みコマンドＡＰＤＵにわけてＩＣカード２００に送信する。
【００２５】
ＩＣカード製造会社またはＩＣカード発行会社に備えれているＩＣカード発行システムを用いて発行する場合は、ＩＣカードに送信されるコマンドＡＰＤＵが欠落することはまずないが、インターネット経由でＩＣカードを発行する場合は、ＩＣカードに送信するコマンドＡＰＤＵが欠落することがある。ここで、コマンドＡＰＤＵが欠落するとは、複数にわけて送信されるコマンドＡＰＤＵの少なくとも一つのコマンドＡＰＤＵをＩＣチップが受信しないことを意味する。コマンドＡＰＤＵが欠落したまま、ＩＣカードにデータが書込まれると、運用時にＩＣカードの動作不良が生じる。
【００２６】
そこで、本発明は、ＩＣカード発行システム１００がＩＣカードに書込まれたデータの正当性を検証することで、前述のコマンドＡＰＤＵの欠落等の異常をＩＣカード発行システムが検知できることを目的としている。
【００２７】
＜アプリケーション発行手順の詳細な説明＞
ここから、アプリケーション４００の発行処理、すなわちアプリケーションデータ４２０をＥＥＰＲＯＭ２１３に書き込む処理を例にとり、本発明のＩＣカードに書込まれたデータの正当性検証方法を図を参照しながら詳細に説明する。図５はＩＣカードに書込まれたデータの正当性検証方法の動作手順を示した図、図６はＩＣカードに書込まれたデータの正当性検証方法の動作手順の説明を補足するための図である。
【００２８】
図６（ａ）はアプリケーションの発行処理前の状態を示した図である。図６（ａ）に示すごとく、ＩＣカード発行システム１００が具備する記憶装置１１０にはアプリケーションデータ４２１が記憶され、アプリケーションデータ４２１はデータブロック１からデータブロック５までの５つのデータブロック４２２に分割され、それぞれのデータブロック４２２がＩＣカード２００に送信される。ＩＣチップ２１０が具備するＥＥＰＲＯＭ２１３には、アプリケーションデータ４２１が書込まれるたの領域であるアプリケーションデータ領域４２３が設定され、アプリケーションデータ領域４２３にはデータは書き込まれていない。
【００２９】
本発明のデータの正当性検証方法の最初のステップ（Ｓ１００）は、ＡＰＤＵ生成装置１２０がデータ書込みコマンドＡＰＤＵを生成するステップである。一つのデータ書込みコマンドＡＰＤＵのデータフィールドには、一つのデータブロック４２２が格納されてＩＣカード２００に送信される。ＩＣカード２００に送信するデータブロックが最終ブロックの場合は、送信するデータブロックが最終のデータブロックであることを意味するデータ書込みコマンドＡＰＤＵを送信する。例えば、図３において、送信するデータブロックが最終データブロックでない場合はコマンドパラメータ３０２を「００ｈ」（ｈは１６進表記を意味する）に設定し、送信するデータブロックが最終データブロックの場合はコマンドパラメータ３０２を「８０ｈ」に設定する。ＩＣカード２００は受信したデータ書込みコマンドＡＰＤＵ３００に含まれるコマンドパラメータ３０２から、送信されたデータブロックが最終ブロックであることを判断する。
【００３０】
次のステップ（Ｓ１１０）は、ＩＣカード発行システム１００がＩＣカード２００にステップＳ１００で生成したデータ書込みコマンドＡＰＤＵを送信するステップである。ＩＣカード発行システム１００は前記生成したデータ書込みコマンドＡＰＤＵを送信した後、ＩＣカード２００からデータ書込みコマンドＡＰＤＵに対応するレスポンスＡＰＤＵを受信する。
【００３１】
次のステップ（Ｓ１２０）は、ＩＣカード発行システム１００が最終データブロックが送信済であることを確認するステップである。最終データブロックが送信済ならばステップＳ１３０へ進み、最終データブロックが送信済でなければステップＳ１００に戻る。ＩＣカード発行システム１００はステップＳ１００からステップＳ１２０までのステップを繰り返すことで、すべてのデータブロック４２２をＩＣカード２００に送信することができる。図６（ｂ）は、５つのデータブロック４２２すべてがアプリケーションデータ領域４２３に書込まれた後の図である。
【００３２】
次のステップ（Ｓ１３０）は、ＩＣカード発行システム１００がＩＣカード２００に認証コード要求コマンドを送信するステップである。ＩＣカード２００は前記認証コード要求コマンドを受信すると、アプリケーションデータ領域４２３に書き込んだ５つのデータブロックから第１の認証コードである認証コード＿Ｃを演算する。認証コード＿Ｃの演算に使用する関数ｆｘ（）は、書込んだデータを引数として値が一意に定まる関数ｆｘ（）であればどのような関数ｆｘ（）を用いてもよい。認証コードを演算する関数ｆｘ（）としては、ＤＥＳ（DES：Data Encryption Standard）等の暗号関数、加算関数またはハッシュ関数を用いればよい。ＩＣカード２００は定めれた関数ｆｘ（）で認証コード＿Ｃを演算すると、演算した認証コード＿ＣをＩＣカード発行システム１００に送信し、ＩＣカード発行システム１００はＩＣカード２００が演算した認証コード＿Ｃを得る。
【００３３】
図６（ｃ）は、認証コード＿Ｃの演算を説明するための図である。ＩＣカード２００はアプリケーションデータ領域４２３に書込んだ５つのデータブロックすべてを引数として、関数ｆｘ（）からＩＣカードの認証コード＿Ｃ５００を演算する。すなわち、認証コード＿Ｃ５００はｆｘ（データブロック１、データブロック２、データブロック３、データブロック４、データブロック５）の値である。演算した認証コード＿Ｃ５００はＩＣカード発行システムに送信される。
【００３４】
次のステップ（Ｓ１４０）は、ＩＣカード発行システム１００がＩＣカード２００に送信したすべてのデータブロックからＩＣカード２００と同じ関数ｆｘ（）を用いて第２の認証コードである認証コード＿Ｐを演算するステップである。
【００３５】
次のステップ（Ｓ１５０）は、ＩＣカード発行システムが、ステップＳ１３０でＩＣカード２００から受信した認証コード＿ＣとステップＳ１４０で演算した認証コード＿Ｐを比較するステップである。
【００３６】
図６（ｄ）は、ＩＣカード発行システム１００が認証コード＿Ｐを用いてＩＣカードに書込まれたデータの正当性検証を説明するための図である。ＩＣカード発行システム１００はＩＣカードに送信した５つのデータブロックすべてを引数として、関数ｆｘ（）からＩＣカード発行システム１００の認証コード＿Ｐ５０１を演算する。演算した認証コード＿Ｐ５０１は認証コード＿Ｃ５００と比較される。それぞれの認証コードが一致すれば、ＩＣカード２００にはすべてのデータが正常に書込まれたと判断でき、一致しなければＩＣカード２００に書込まれデータには異常があると判断できる。例えば、図６においてＩＣカード２００がデータブロック３を受信できなかった場合は、ＩＣカード２００が演算した認証コード＿Ｃはｆｘ（データブロック１、データブロック２、データブロック４、データブロック５）の値となり、ＩＣカード発行システム１００が演算する認証コード＿Ｐ５０１とは異なる値になるため、ＩＣカード発行システム１００はＩＣカード２００に書込まれたデータに異常があることがわかる。ステップＳ１５０の処理を実行後、本発明のデータの正当性検証方法は終了する。
【００３７】
＜ＩＣカードに実装されるプログラムの動作手順＞
次にＩＣカード２００に実装するプログラムの動作手順について、図を参照しながら説明する。図７は前記プログラムの動作手順の流れ図である。なお前述のように、本プログラムはアプリケーションコード４１０に含まれる。
【００３８】
最初のステップ（Ｓ２００）は、ＩＣカード２００がデータ書込みコマンドＡＰＤＵを受信するステップである。データ書込みコマンドＡＰＤＵを受信すると、データ書込みコマンドＡＰＤＵからコマンドコード、コマンドパラメータならびにアプリケーションデータ領域４２３に書込むデータブロック４２２を抽出する。
【００３９】
次のステップ（Ｓ２１０）は、前記コマンドコードで示さる処理すわなちデータ書込み処理を実行するステップである。少なくともアプリケーションコード４１０はデータを書込み開始するアドレスを所持しており、データブロック４２２をアプリケーションデータ領域４２３に書込んだ後、前記データを書込み開始するアドレスを更新する。
【００４０】
次のステップ（Ｓ２２０）は、前記データ書込みコマンドＡＰＤＵに対するレスポンスＡＰＤＵを送信するステップである。前記レスポンスＡＰＤＵのレスポンスコードにはデータ書込み処理の正常終了／異常終了を示すコードが含まれる。
【００４１】
次のステップ（Ｓ２３０）は、ステップＳ２００で受信したデータ書込みコマンドＡＰＤＵが最終データブロックのデータ書き込みコマンドであるか確認するステップである。前記確認は、受信したデータ書込みコマンドＡＰＤＵに含まれるコマンドパラメータ３０２から判断する。最終データブロックの場合はＳ２４０へ進み、最終データブロックでない場合はステップＳ２００へ戻る。アプリケーションコード３１０は、ステップＳ２００からステップＳ２３０を繰り返すことで、複数のデータブロックを受信し、アプリケーションデータ４２１すべてをアプリケーションデータ領域４２３に書き込むことができる。
【００４２】
次のステップは（Ｓ２４０）は、認証コード要求コマンドを受信するステップである。
【００４３】
次のステップは（Ｓ２５０）は、認証コード＿Ｃを演算し、演算した認証コード＿Ｃをレスポンスデータに格納したレスポンスＡＰＤＵをＩＣカード発行システム１００に返信するステップである。認証コード＿Ｃの演算に関してはすでに上述している。ステップＳ２５０を実行後、本発明のＩＣカード用プログラムの処理は終了する。
【００４４】
これまで述べたように、本発明のＩＣカードに書込まれたデータの正当性検証方法はおよびＩＣカード用プログラムを用いれば、ＩＣカードから取得する認証コード＿ＣとＩＣカード発行システムが演算する認証コード＿Ｐから、ＩＣカード発行システム１００はＩＣカードに書込まれたデータの正当性を検証できることは明らかである。
【００４５】
〔第２、第３の実施の形態〕
ここから、これまで述べた第１の実施の形態以外の、他の実施の形態について説明を加える。
【００４６】
第２の実施の形態は、ＩＣカード２００は受信したデータ書込みコマンドＡＰＤＵが最終データブロックを書き込むコマンドであった場合、最終データブロックをＥＥＰＲＯＭに書込んだ後、自動的に認証コード＿Ｃを演算し、演算した認証コード＿ＣをレスポンスＡＰＤＵのレスポンスデータに格納し送信することを特徴とする実施の形態である。第２の実施の形態においては、ＩＣカード発行システム１００は、認証コード要求コマンドをＩＣカードに送信しなくとも、ＩＣカード２００から認証コード＿Ｃを得ることができる。
【００４７】
図８は第２の実施の形態のデータ正当性検証方法の手順を示した図、図９は第２の実施の形態のＩＣカード用プログラムの手順を示した図である。図８においては、図５のステップＳ１３０がステップＳ１３１に変更されている。すなわち図５においては、認証コード＿Ｃを得るために、ＩＣカード発行システム１００はＩＣカード２００に認証コード要求コマンドを送信したが、図８においては、ＩＣカード発行システム１００は最終データブロックのデータ書込みコマンドＡＰＤＵに対するレスポンスＡＰＤＵから認証コード＿Ｃを取得する。
【００４８】
また図９に示したＩＣカード用プログラムの最初のステップＳ２０１そして次のステップＳ２１１はそれぞれ、図７のステップＳ２００、ステップ２１０と同じ処理である。次のステップＳ２２１は、アプリケーションデータ領域４２３に書き込んだデータブロックが最終データブロックであるか確認するステップである。最終データブロックでない場合は、ステップＳ２３１に進みレスポンスＡＰＤＵを送信した後、ステップＳ２０１へ戻る。最終データブロックの場合はステップＳ２４１に進む。ステップＳ２４１においては認証コード＿Ｃを演算し、ステップＳ２４１の次のステップＳ２５１にて演算した認証コード＿Ｃを含むレスポンスＡＰＤＵを送信する。
【００４９】
また第３の実施の形態は、データ書込みコマンドＡＰＤＵにＭＡＣを付加した実施の形態である。図１０は、データ書き込みコマンドＡＰＤＵにＭＡＣが付加されたときのＩＣカードのプログラムの動作手順を示した図である。図１０においては、図５に加えてステップＳ２０２が追加されている。ステップＳ２０２においては、ステップＳ２００で受信したデータ書込みコマンドＡＰＤＵのデータフィールドに含まれるデータブロックとＭＡＣを照合し、ＭＡＣが正しければステップＳ２１０へ進み、ＭＡＣが正しくなければデータ書込み処理を終了する。なおＭＡＣの演算には、認証コードと同じ関数を使用してもよく、異なる関数を使用してもよい。なお第３の実施の形態の説明においては、ＩＣカードに書込まれたデータの正当性検証方法の手順は省略するが、第１の実施の形態の説明および第３の実施の形態の説明から、容易に第３の実施の形態のデータの正当性検証方法の手順は明らかになる。
【００５０】
加えてこれまで述べた実施の形態においてはアプリケーションデータをＥＥＰＲＯＭに書込む実施の形態について述べてきたが、マルチアプリケーションＯＳがアプリケーションをＥＥＰＲＯＭに書き込む発行処理についても本発明を適用することができる。この場合はこれまで述べたＩＣカード用プログラムはアプリケーションコードではなく、マルチアプリケーションＯＳに組み込まれる。
【図面の簡単な説明】
【００５１】
【図１】ＩＣカード発行システムの説明図。
【図２】ＩＣチップの構造図。
【図３】コマンドＡＰＤＵとレスポンスＡＰＤＵの説明図。
【図４】アプリケーションの構造図。
【図５】第１の実施の形態のデータの正当性検証方法の動作手順を示した図。
【図６】第１の実施の形態のデータの正当性検証方法の説明を補足するための図。
【図７】第１の実施の形態のＩＣカード用プログラムの動作手順を示した図。
【図８】第２の実施の形態のデータの正当性検証方法の動作手順を示した図。
【図９】第２の実施の形態のＩＣカード用プログラムの動作手順を示した図。
【図１０】第３の実施の形態のＩＣカード用プログラムの動作手順を示した図。
【符号の説明】
【００５２】
１００  ＩＣカード発行システム
２００  ＩＣカード
２１０  ＩＣチップ
３００  コマンドＡＰＤＵ
３１０  レスポンスＡＰＤＵ
４００  アプリケーション
４１０  アプリケーションコード
４２０  アプリケーションデータ
４２２  データブロック
４２３  ＥＥＰＲＯＭ内のアプリケーションデータ領域
【図１】
2005258968.tif 000003
【図２】
2005258968.tif 000004
【図３】
2005258968.tif 000005
【図４】
2005258968.tif 000006
【図５】
2005258968.tif 000007
【図６】
2005258968.tif 000008
【図７】
2005258968.tif 000009
【図８】
2005258968.tif 000010
【図９】
2005258968.tif 000011
【図１０】
2005258968.tif 000012