(57)【要約】【課題】ＩＣカードのプログラムを修正する場合は、利用者もしくは第三者がプログラムコードを参照されたり、また不当なプログラムコードに書き換えられることがないよう、膨大な枚数で発行されるＩＣカードを全て回収し、ＩＣカードに格納されているＩＣカードプログラムを全て修正しなければならなかった。【解決手段】プログラム修正情報を復号化する手段と修正情報の履歴情報を管理する手段をＩＣカードに持つことで、ＩＣカードの回収作業や管理をせずにＩＣカードプログラムを修正することが出来る。またプログラムコードを検証する手段と、ＩＣカードの実行を制御して、ＩＣカードを使用できなくする手段をＩＣカードに設けることで、プログラムコードの不当な改ざんを検出し、ＩＣカードの不正利用を防止することができる。【選択図】  図１
2004185348.tif 000002
【特許請求の範囲】
【請求項１】
再書込み不可能な不揮発メモリと，再書込み可能な不揮発メモリと、前記再書込み不可能な不揮発メモリと前記再書込み可能な不揮発メモリとをアクセスするＣＰＵと、外部装置から提供されるコマンドデータに応じたプログラムコードに分岐するプログラム実行部と、暗号化されたデータを暗号化および復号化する暗号制御部と、前記外部装置とデータをやりとりするためのデータ送受信部と、前記外部装置から受信したプログラム修正情報に含まれたプログラムコードを格納するためのプログラム修正情報格納領域と、前記プログラム修正情報を格納するプログラム修正情報格納制御部とを備えるＩＣカードにおけるプログラムの修正方法において、
前記外部装置から提供されるプログラムコードと履歴情報とを含むデータより構成される暗号化されたプログラム修正情報を受信し、前記履歴情報に基づいてプログラムコードを記憶するか否かを決定することを特徴とするプログラム修正方法。
【請求項２】
前記プログラム修正情報を検証するための検証情報と、該検証情報によってプログラム修正情報格納領域に格納してあるプログラムコードの正当性を検証し、不当なプログラム修正情報が格納されている場合に、該ＩＣカードを使用できなくすることを特徴とする請求項１記載のプログラム修正方法。
【請求項３】
前記履歴は、前記プログラムの修正履歴であることを特徴とする請求項１記載のプログラム修正方法。
【請求項４】
再書込み不可能な不揮発メモリと，再書込み可能な不揮発メモリと、前記再書込み不可能な不揮発メモリと前記再書込み可能な不揮発メモリとをアクセスするＣＰＵと、外部装置から提供されるコマンドデータに応じたプログラムコードに分岐するプログラム実行部と、暗号化されたデータを暗号化および復号化する暗号制御部と、前記外部装置とデータをやりとりするためのデータ送受信部と、前記外部装置から受信したプログラム修正情報に含まれたプログラムコードを格納するためのプログラム修正情報格納領域と、前記プログラム修正情報を格納するプログラム修正情報格納制御部とを備えるＩＣカードにおいて、
前記外部装置から提供されるプログラムコードと履歴情報とを含むデータより構成される暗号化されたプログラム修正情報を受信する手段と、前記履歴情報に基づいてプログラムコードを記憶するか否かを決定する手段とを備えたことを特徴とするＩＣカード。
【請求項５】
前記プログラム修正情報を検証するための検証情報と、該検証情報によってプログラム修正情報格納領域に格納してあるプログラムコードの正当性を検証する手段と、不当なプログラム修正情報が格納されている場合に、該ＩＣカードを使用できなくする手段とを備えたことを特徴とする請求項４記載のＩＣカード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＩＣカードなどの過般可能な記憶媒体に格納されたプログラムの修正技術に関する。
【０００２】
【従来の技術】
ＩＣカードはメモリカードなどのデータを書き込むだけの媒体ではなく、ＣＰＵを備えておりメモリに格納してあるプログラムコードを実行することが出来る。ＩＣカード内で実行するプログラム（ＩＣカードプログラム）はＩＣカードに備わっているメモリ、特にＲＯＭなどの書き込み不可能な不揮発メモリに格納することが一般的である。また特開平０７−２１０６４２号に開示されているようなＥＥＰＲＯＭなどの書き込み可能な不揮発メモリに、必要なプログラムコードを格納する方法もある。
【０００３】
【特許文献１】
特開平０７−２１０６４２号
【０００４】
【発明が解決しようとする課題】
ＩＣカードプログラムに誤りがあった場合は、プログラムコードを変更する必要があるために、何万、何十万枚という単位で発行されたＩＣカードを回収する必要があった。複数のアプリケーションプログラムを搭載できるＩＣカードの場合、動的にアプリケーションプログラムをローディングしたり、削除したりすることが可能なものがあるため、アプリケーションプログラムを削除した後、修正したアプリケーションプログラムを再度ローディングすることが可能である。しかし、ＲＯＭに格納されているＩＣカードプログラムは、一度ＲＯＭにプログラムコードを格納してしまうと、後でプログラムコードを変更することが出来ないため、ＩＣカードを再発行しなければならなかった。
【０００５】
また従来技術で説明したように、必要なプログラムコードをＥＥＰＲＯＭなどの書込み可能な不揮発メモリに格納することが考えられるが、上記従来技術でも秘匿性を持ったＩＣカードプログラムを修正する場合は、プログラムコードをカード利用者を含む第三者に対して修正したプログラムコードを参照できないようにしなければならず、ＩＣカードを回収しなければならなかった。
【０００６】
本発明の第一の目的は、利用者からＩＣカードを回収せずに、修正が必要なＩＣカードプログラムを自動的に修正することにある。またＩＣカードプログラムの誤りが何度も発見されると、その都度修正内容が更新されることが考えられるので、せっかく修正した内容を古い修正内容で上書きされないようにする手段も必要となる。
【０００７】
本発明の第二の目的は、万が一にもＩＣカードプログラムが不当なプログラムコードに書き換えられた場合、不当なプログラムコードを実行しないようにすることである。
【０００８】
【課題を解決するための手段】
前記第一の目的を達成するために、プログラム修正情報を復号化する機能と、修正したプログラムコードを格納する機能と、ＩＣカードプログラムを修正した履歴を管理する情報と、必要なプログラム修正情報を履歴情報より判断する機能をＩＣカード内に設けるようにした。
【０００９】
前記第二の目的を達成するために、修正したプログラムコードの正当性を検証する機能と、万が一不当なプログラムコードに書き換えられた場合にＩＣカードを停止させる機能を設けるようにした。
【００１０】
【発明の実施の形態】
一般的にＩＣカードはＩＣチップを搭載しており、ＩＣカード用のＩＣチップは通常ＣＰＵと３種類のメモリで構成されている。このメモリは通常、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの書き換え不可能な不揮発メモリと、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの書き換え可能な不揮発メモリと、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの書き換え可能な揮発メモリで構成されていることは公知のものである。また、ＩＣカードは通常ＩＣカードリーダ／ライタと呼ばれる装置を介して携帯端末、パーソナルコンピュータ（ＰＣ）等の外部装置とコマンドおよびコマンド応答という方法で情報のやり取りをすることも公知のものである。また、コマンドによってカードに渡されるデータをコマンドデータといい、カードがコマンド処理結果として渡すコマンドの応答としては、応答データと応答コードがあることも公知のものである。
【００１１】
以下、本発明の実施形態の例を図面を用いて詳細に説明する。
【００１２】
図１は本発明の構成図である。ＩＣカード（０１００）は、ＲＯＭ（０１０４）とＥＥＰＲＯＭ（０１０２）を備えており、ＩＣカード（０１００）と外部装置（０１２０）は、それぞれデータ送受信部（０１１８）とＩＣカードインタフェース部（１３２）とで情報のやりとりを行う。またＩＣカード（０１００）は、暗号化されたデータを復号化するための暗号制御部（０１１６）と、暗号化されたプログラム修正情報（０１１２）を復号化したデータをプログラム修正情報格納領域（０１２２）に格納するためのプログラム修正情報格納制御部（０１１４）と、受信したコマンドデータに対応したプログラムコード群（０１２８）へ分岐するためのジャンプテーブル（０１３０）とを備えており、プログラムコード群（０１２８）を実行する場合、プログラム実行部（１３４）がジャンプテーブル（０１３０）を参照して適切なプログラムコードへ分岐する。また図２に示すように、復号化されたプログラム修正情報（０１２６）は、履歴情報（１３６）と、修正用のプログラムコード（１４０）と、修正用のジャンプテーブル（１３８）とを含むデータで構成されている。また修正用のプログラムコード（１４０）を格納するためのプログラム修正情報格納領域（０１２２）は、履歴情報（０１０６）と、ジャンプテーブル（０１３０）と共にＥＥＰＲＯＭ（０１０２）に格納される。
【００１３】
以下、請求項１における実施例１を図面を用いて説明する。
【００１４】
図２は、プログラム修正情報（０１２６）の具体例である。プログラム修正情報（０１２６）の構成は、前述の通りである。またプログラム修正情報（０１２６）は暗号化されており、利用者および第三者への情報の漏洩を防止する。更に認証のための認証データ（０１２４）を追加し、該データの認証を行うようにしておくとよい。
【００１５】
図３は、実施例１における制御フローである。外部装置（０１２０）のＩＣカードインタフェース部（１３２）からＩＣカード（０１００）にあるデータ送受信部（０１１８）へ暗号化されたプログラム修正情報（０１１２）が送信される。暗号化されたプログラム修正情報（０１１２）の受信する契機について特に制限はないが、外部装置（０１２０）とＩＣカード（０１００）との通信が確立した時点、すなわちＩＣカード（０１００）に電力が供給された後、ＩＣカード（０１００）から最初の応答を外部装置（０１２０）が受信した直後が望ましい。通信が確立した後、ＩＣカード（０１００）がコマンドデータを受信すると、プログラム実行部（１３４）によってプログラム修正情報格納制御部（０１１４）が呼び出され、暗号化されたプログラム修正情報（０１１２）が、暗号制御部（０１１６）によって復号化される。プログラム修正情報格納制御部（０１１４）では、修正用の履歴情報（１３６）と、ＩＣカード（０１００）に格納されている履歴情報（０１０６）とを比較し、修正用の履歴情報（１３６）の方が新しい場合は、修正用のプログラムコード（１４０）をプログラム修正情報格納領域（０１２２）に格納する。また履歴情報（０１０６）およびジャンプテーブル（０１３０）も修正用の履歴情報（１３６）と修正用のジャンプテーブル（１３８）にそれぞれ更新する。このとき外部装置（０１２０）に対して、修正用のプログラムコード（１４０）を格納したことを示す応答コードを応答するようにする。また修正用の履歴情報（１３６）の方が古い、または同じである場合は、修正用のプログラムコード（１４０）はプログラム修正情報格納領域（０１２２）には格納せず、履歴情報（０１０６）およびジャンプテーブル（０１３０）も更新しないようにする。このときも、外部装置（０１２０）に対しては、修正用のプログラムコード（１４０）を格納しないことを示す応答コードを応答するようにする。
【００１６】
図４は、実施例１におけるプログラム実行部（１３４）を示すフローチャートである。まず、暗号化されたプログラム修正情報（０１１２）を受信するためのコマンドデータであるかどうかを判定する（０６００）。暗号化されたプログラム修正情報（０１１２）を受信した場合は、プログラム修正情報格納制御部（０１１４）へ分岐する（０６０２）。他のコマンドデータの場合は、コマンドデータを元に、ジャンプテーブル（０１３０）から実行すべきプログラムコードのアドレスを求め（０３００）、求めたアドレスへ分岐する（０３０２）。
【００１７】
図５は実施例１におけるプログラム修正情報格納制御部（０１１４）のフローチャートである。まず暗号制御部（０１１６）で暗号化されたプログラム修正情報（０１１２）を復号化する（０７００）。データの復号化が完了したら、認証データ（０１２４）による認証を行う（０７０２）。認証データ（０１２４）が正しければ、修正用の履歴情報（１３６）とＩＣカード（０１００）内に格納されている履歴情報（０１０６）を比較する（０７０４）。修正用の履歴情報（１３６）が、既に格納されている履歴情報（０１０６）より新しければ、プログラム修正情報格納領域（０１２２）に修正用のプログラムコード（１４０）を格納し（０７０６）、ジャンプコード（０１３０）および履歴情報（０１０６）を更新する（０７０８、０７１０）。それぞれのデータを更新した後は、復号化されたプログラム修正情報（０１２６）をプログラム修正情報格納領域（０１２２）に格納したことを示す応答コードを送信する（０７１２）。もし修正用の履歴情報（１３６）が、既に格納されている履歴情報（０１０６）より古いか、または同じであれば、復号化されたプログラム修正情報（０１２６）は格納せずに、復号化されたプログラム修正情報（０１２６）が不要であることを示す応答コードを送信する（０７１４）。また認証データ（０１２４）が一致しない場合は、認証データ（０１２４）が不正であることを示す応答コードを返すようにする（０７１６）。
【００１８】
なお本実施例の場合、プログラム修正情報格納制御部（０１１４）については、本発明によるプログラム修正方法の対象としていない。これは万が一にも、プログラム修正情報格納制御部（０１１４）が悪意のあるプログラムコードに書き換えられることを防止するためである。
【００１９】
以下、実施例１の他の実施例である実施例２を図面を用いて詳細に説明する。
【００２０】
図６は、実施例２におけるプログラム修正情報格納制御部（０１１４）のフローチャートである。図５との違いは、認証データ（０１２４）が不一致となった回数をカウントする認証不一致カウンタと、その上限値とを設けた点である。すなわち上限値を設けておくことで、アタッカーからの攻撃の繰り返しに対する防衛を実現している。
【００２１】
まず、認証不一致カウンタとその上限値を比較する（８０４）。認証不一致カウンタが上限値に達した場合は、暗号化されたプログラム修正情報（０１１２）は復号化せずに、認証不一致カウンタが上限値に達したことを示す応答コードを返す（０８０６）。上限値に達していない場合は、図５と同様、データを復号化し（０７００）、認証データ（０１２４）を確認する（０７０２）。認証データ（０１２４）が正しい場合、後の処理は図５で説明した通りである。認証データ（０１２４）が正しくない場合は、認証不一致カウンタを更新し（０８０２）、認証データ（０１２４）が不一致であることを示す応答コードを返す（０７１６）。
【００２２】
以下、さらに他の実施例である実施例３を詳細に説明する。
【００２３】
図７は、本発明の構成図である。図１との違いは、プログラム修正情報格納領域（０１２２）に格納された修正後のプログラムコード（０１０８）を検証するためのプログラム検証部（０９００）と、カードの実行を制御するカード実行制御部（０９０２）がＩＣカード（０１００）に、また外部装置（０１２０）から受信するコマンドデータとして暗号化された検証情報（０９０４）が追加された点である。なお、ＩＣカード（０１００）はオフラインで使用されることもあるが、ＩＣカード（０１００）の利用者は最終的にはオンラインによる決算を必要とするので、検証情報（０９０４）をＩＣカード（０１００）に送信する外部装置（０１２０）は、ＩＣカード（０１００）の発行元が提供しているホストコンピュータ、もしくは該ホストコンピュータとオンラインで接続されるなど、検証情報（０９０４）の提供元が信頼できる状態であることが前提となる。
【００２４】
図８は、実施例３における検証情報（０９０４）の一例である。検証情報（０９０４）は、修正用の履歴情報（１３６）と、認証データ（０１２４）と、検証データ（１０００）とで構成されている。検証データ（１０００）は、修正用のジャンプテーブル（１３８）と修正用のプログラムコード（１４０）より、任意のアルゴリズムで一意的に求められるデータである。検証データ（１０００）の例としては、ハッシュコードなどが挙げられる。
【００２５】
図９は、実施例３におけるプログラム実行部（１３４）を示すフローチャートである。図４との違いは、コマンドの振り分けに先立って、カードの実行が可能かどうかを判定する（１２００）。この判定は、カードを実行できないようにすることを意味するインジケータを設けておき、インジケータが任意の値に設定されているか否かで判定する。実行できない場合はカードの実行を停止する処理（１２０６）と、検証情報（０９０４）を受信するためのコマンドデータであるかどうかを判断し（１２０２）、プログラム検証部（０９００）に分岐する処理（１２０４）が追加された点である。プログラム検証部（０９００）についても、悪意のあるプログラムコードに書き換えられることを防止する必要があるため、本発明におけるプログラム修正方法の対象としないようにする。
【００２６】
図１０は、実施例３におけるプログラム検証部（０９００）のフローチャートである。プログラム検証部（０９００）では、暗号制御部（０１１６）へ制御を依頼し、検証情報（０９０４）を復号化する（１１００）。復号化が完了した後、認証データ（０１２４）が正しいかどうかを判定する（１１０２）。認証データ（０１２４）が不一致であった場合は、不一致であることを示す応答コードを返す（１１１６）。更に実施例２のように、認証不一致カウンタの更新処理および判定処理を設ければ、アタッカーに対する防衛手段となる。認証データ（０１２４）が正しい場合は、既に格納されている履歴情報（０１０６）と、検証用の履歴情報（９０６）とを比較する（１１０４）。検証用の履歴情報（９０６）と格納されている履歴情報（０１０６）が一致した場合は、ＩＣカード（０１００）内に格納されているジャンプテーブル（０１３０）とプログラム修正情報格納領域（０１２２）に格納されている修正後のプログラムコード（０１０８）を入力として、検証データ（１０００）を求めるためのアルゴリズムで検証用のデータを求め（１１０６）、求めた値と検証データ（１０００）とを比較する（１１０８）。検証データ（１０００）と、前記処理（１１０６）で求めた検証用のデータが一致すれば、修正後のプログラムコード（０１０８）は正しいことが証明されるため、検証結果が正しいことを示す応答コードを送信する（１１１０）。検証データ（１０００）と前記処理（１１０６）で求めた検証用のデータが不一致であった場合は、カード実行制御部（０９０２）に分岐する（１１１２）。カード実行制御部（０９０２）は、図９で説明したカードを実行できないようにすることを意味するインジケータを設定し、カードを停止させる。カードの停止方法はＩＣカード（０１００）の仕様に依存するため、省略する。
【００２７】
なお、カード実行制御部（０９０２）では検証情報（０９０４）が不一致であった場合、直ちにＩＣカードを停止させる方法もあるが、検証情報（０９０４）が不一致であったことを示す応答コードを返すようにしておけば、応答コードを受信した外部装置（０１２０）で不正なプログラムコードが格納されていることを認識できるため、外部装置（０１２０）からカードの管理元へ不正なプログラムコードが格納されていることを通知出来る。
【００２８】
以下、さらに他の実施例である実施例４を詳細に説明する。
【００２９】
図１１は、実施例４のプログラム検証部（０９００）を示すフローチャートである。図１０との違いは、履歴情報（１３６）とＩＣカード（０１００）内の履歴情報（０１０６）が不一致であった場合の取り扱いである。実施例３の場合であれば、検証用の履歴情報（９０６）が一致する検証情報（０９０４）を受信するまで、外部装置（０１２０）から検証情報（０９０４）を何回でも送信しなければならないが、本実施例によればＩＣカード（０１００）内の履歴情報（０１０６）を暗号化し（１５００）、履歴情報応答データ（１６００）として返すようにしているので、暗号化された履歴情報（０１０６）を外部装置（０１２０）へ返すことで（１５０２）、外部装置（０１２０）では適切な検証情報（０９０４）を認識することが出来るようになり、何度も検証情報（０９０４）を送受信する必要がなくなる。また本実施例では、ＩＣカード（０１００）が不当なプログラムコードに改ざんされる事を想定し、ＩＣカード（０１００）の停止用データを設けている。ＩＣカード（０１００）の停止用データとしては、あらかじめ修正用の履歴情報（１３６）として使用しないユニークな値を割り当てておく。そしてＩＣカード（０１００）の停止用データかどうかを判定し（１５０４）、停止用データであれば、カード実行制御部（０９０２）に制御を渡してＩＣカード（０１００）を停止させる。停止用データでなければ、図１０と同様に検証データを求めてプログラムを検証する。
【００３０】
図１２は、実施例４における履歴情報応答データ（１６００）の一例である。履歴情報応答データ（１６００）は、履歴情報（０１０６）と認証データ（０１２４）を含み、認証データ（０１２４）で正当なＩＣカード（０１００）で作成されたものであることを識別することが出来る。
【００３１】
以上より、修正後のプログラムコードなど秘匿性の高い情報はカード内でしか参照できないようになるため、ＩＣカードを回収しなくても、プログラムコードが安全に修正できるようになるという効果がある。
【００３２】
また、ＩＣカード自身で必要な修正情報であるかどうかを判断できるため、ＩＣカードプログラムが古いプログラムコードに戻るなどの操作上の失敗を防止する効果がある。
【００３３】
また、個々のＩＣカードの修正の履歴を管理する必要がなくなるため、ＩＣカードの履歴情報の管理に必要なスペースや情報の管理に要する費用を削減する効果がある。
【００３４】
また、プログラムコードの正当性を検証することで、不当なプログラムコードの書き換えによるカードの改ざんを検出し、更にはカードの不正利用を防止する効果がある。
【００３５】
【発明の効果】
本発明によれば、修正後のプログラムコードなど秘匿性の高い情報はカード内でしか参照できないようになるため、ＩＣカードを回収しなくても、プログラムコードが安全に修正できるようになる。
【図面の簡単な説明】
【図１】本発明の構成図である。
【図２】プログラム修正情報の具体例である。
【図３】実施例１の制御フローである。
【図４】実施例１におけるプログラム実行部を示すフローチャートである。
【図５】実施例１におけるプログラム修正情報格納制御部を示すフローチャートである。
【図６】実施例２におけるプログラム修正情報格納制御部を示すフローチャートである。
【図７】請求項２における本発明の構成図
【図８】検証情報の具体例
【図９】実施例３におけるプログラム実行部を示すフローチャート
【図１０】実施例３におけるプログラム検証部のフローチャート
【図１１】実施例４におけるプログラム検証部のフローチャート
【図１２】履歴情報応答データの具体例
【符号の説明】
０１００‥ＩＣカード
０１０２‥ＥＥＰＲＯＭ
０１０４‥ＲＯＭ
０１０６‥履歴情報
０１０８‥修正後のプログラムコード
０１１２‥暗号化されたプログラム修正情報
０１１４‥プログラム修正情報格納制御部
０１１６‥暗号制御部
０１１８‥データ送受信部
０１２０‥外部装置
０１２２‥プログラム修正情報格納領域
０１２４‥認証データ
０１２６‥復号化されたプログラム修正情報
０１２８‥プログラムコード群
０１３０‥ジャンプテーブル
１３２‥ＩＣカードインタフェース部
１３４‥プログラム実行部
１３６‥修正用の履歴情報
１３８‥修正用のジャンプテーブル
１４０‥修正用のプログラムコード
０９００‥プログラム検証部
０９０２‥カード実行制御部
０９０４‥検証情報
９０６‥検証用の履歴情報
１０００‥検証データ
１６００‥履歴情報応答データ
【図１】
2004185348.tif 000003
【図２】
2004185348.tif 000004
【図３】
2004185348.tif 000005
【図４】
2004185348.tif 000006
【図５】
2004185348.tif 000007
【図６】
2004185348.tif 000008
【図７】
2004185348.tif 000009
【図８】
2004185348.tif 000010
【図９】
2004185348.tif 000011
【図１０】
2004185348.tif 000012
【図１１】
2004185348.tif 000013
【図１２】
2004185348.tif 000014