(57)【要約】【課題】パッチコードが実装されないときに，パッチコードの実行を管理する情報が記憶されるパッチエントリの容量を小さくすることのできるＩＣカードを提供する。【解決手段】ＩＣカード１であって，ＲＯＭ１１に実装された関数２０を変更するためのパッチコード４の有無を示す１ビットのフラグ３０が，関数２０の数だけ用意され，パッチコード４がＥＥＰＲＯＭ１３に実装された場合，パッチコード４によって変更される関数２０に対応するフラグ３０をＯｎにすると共に，パッチコード４へのジャンプ先アドレス３１が記述されるパッチエントリ３が，ＩＣカード１のＥＥＰＲＯＭ１３に設けられ，ＩＣカード１は，関数２０を実行するときに，パッチエントリ３を参照し，実行する関数２０に対応するパッチエントリ３のフラグ３０がＯｎの場合，フラグ３０に対応するジャンプ先アドレス３１を取得し，ジャンプ先アドレス３１を利用してパッチコード４を実行させる。【選択図】図３
2010113549.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリである第１のメモリと電気的に書換え可能な不揮発性メモリである第２のメモリを有するＩＣカードであって，前記第１のメモリに実装された関数を変更するためのパッチコードの有無を示し，アドレスを表記するビット数よりも小さいビットで構成されるフラグが，前記関数の数だけ用意され，前記パッチコードが前記第２のメモリに実装された場合，前記パッチコードによって変更される前記関数に対応する前記フラグをＯｎにすると共に，前記パッチコードへのジャンプ先アドレスが記述されるパッチエントリが前記第２のメモリに設けられ，前記ＩＣカードは，前記関数を実行するときに，前記パッチエントリを参照し，実行する前記関数に対応する前記パッチエントリの前記フラグがＯｎの場合，該フラグに対応する前記ジャンプ先アドレスを取得し，該ジャンプ先アドレスを利用して前記パッチコードを実行させることを特徴とするＩＣカード。
【請求項２】
請求項１に記載のＩＣカードであって，前記フラグは１ビットで構成されていることを特徴とするＩＣカード。
【請求項３】
不揮発性メモリである第１のメモリと電気的に書換え可能な不揮発性メモリである第２のメモリを有するＩＣカードにおいて，前記第１のメモリに実装された関数を変更するためのパッチコードを実行させる方法であって，前記パッチコードの有無を示し，アドレスを表記するビット数よりも小さいビットで構成されるフラグが前記関数の数だけ用意され，前記パッチコードが前記第２のメモリに実装された場合，前記パッチコードによって変更される前記関数に対応する前記フラグをＯｎにすると共に，前記パッチコードへのジャンプ先アドレスが記述されるパッチエントリを前記第２のメモリに設けておき，前記関数を実行するときに，前記パッチエントリを参照し，実行する前記関数に対応する前記パッチエントリの前記フラグがＯｎの場合，該フラグに対応する前記ジャンプ先アドレスを取得し，該ジャンプ先アドレスを利用して前記パッチコードを実行させることを特徴とするパッチコードの実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，半導体集積回路（以下，ＩＣチップ）が実装された任意のサイズのカードであるＩＣカードに関し，更に詳しくは，ＩＣカードの不揮発性メモリに記憶されたプログラムを変更するためのパッチコードを実行するための技術に関する。
【背景技術】
【０００２】
ＩＣカードとは，半導体集積回路（以下，ＩＣチップ）が実装された任意のサイズのカードで，金融分野や交通分野などで幅広く利用されている。
【０００３】
現在，ＩＣカード発行後においても，アプリケーションの追加／削除が可能なプラットフォーム型オペレーティングシステム（OS: Operating System）が実装されたマルチアプリケーションＩＣカードが主流になりつつあるが，ある特定の用途に機能が特化したネイティブＩＣカードは安価に製造できるため，以前として根強い要求がある。
【０００４】
マルチアプリケーションＩＣカードにおいては，プラットフォーム型ＯＳのプログラムコードが読み出し可能な不揮発性メモリ（ROM: Read-Only Memory）に実装され，ユーザに必要なアプリケーションとデータが共に該電気的に書換え可能な不揮発性メモリ（ここでは，ＥＥＰＲＯＭ）にロードされる。
【０００５】
これに対して，ネイティブＩＣカードにおいては， ファイルシステム・データ通信などＩＣカードが動作するために最低限必要なＯＳ機能に加え，ある特定の用途に特化したアプリケーション機能を実現するためプログラムコードがＲＯＭに実装され，該ＯＳ機能や該アプリケーション機能が利用するデータがＥＥＰＲＯＭに記憶される。
【０００６】
このように，ネイティブＩＣカードにおいては，ＯＳ機能やアプリケーション機能を実現するためのプログラムコードがＲＯＭに実装されるため，ＯＳ機能やアプリケーション機能の不具合や変更に備えて，ネイティブＩＣカードには，ＲＯＭに実装されたプログラムコードの一部を変更するためのパッチコードをＥＥＰＲＯＭに実装する機能が備えられる（例えば，特許文献１）。
【０００７】
パッチコードを実行させる一つの手法として，ネイティブＩＣカードのＲＯＭに実装されたプログラムコードの関数毎に，該関数のパッチコードへのジャンプ先アドレスが少なくとも記述されたパッチエントリをＥＥＰＲＯＭに設け，該関数には，該関数のパッチコードへのジャンプ先アドレスへジャンプするＪｕｍｐ命令を埋め込む手法が用いられている。
【０００８】
パッチコードへのジャンプ先アドレスへジャンプするＪｕｍｐ命令をＲＯＭの関数に埋め込む場合，ネイティブＩＣカードのＲＯＭに実装されたプログラムコードの関数を変更しない場合は，該関数に対応するジャンプ先アドレスをダミー関数（例えば，ＮＯＰのみの関数）のアドレスに設定し，該関数を変更する場合のみ，該関数に対応するジャンプ先アドレスを該関数のパッチコードのアドレスに設定することで，該関数を変更する場合は，該関数のパッチコードが実行される。
【０００９】
【特許文献１】特許第３８９９２２３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら，ネイティブＩＣカードのＥＥＰＲＯＭに記憶するパッチエントリに，ＲＯＭに実装されているプログラムコードの関数すべてに対するジャンプ先アドレスを設けると，パッチコードを実装しない場合であってもパッチエントリ自体の容量が大きくなってしまう問題がある。
【００１１】
例えば，ネイティブＩＣカードのＲＯＭに実装されているプログラムコードの関数の数が５００個で、ジャンプ先アドレスが４バイトの場合、全ての関数のジャンプ先アドレスをパッチエントリに用意すると、パッチエントリだけで２キロバイト（500×4バイト）の容量が必要となる。ネイティブＩＣカードに実装される安価なＩＣチップの場合、ＥＥＰＲＯＭの容量は８キロバイト程度のものも多く、パッチエントリのみで前記容量を消費するのは非常に無駄が大きい。
【００１２】
そこで，本発明は，ネイティブＩＣカードのＲＯＭに実装されているプログラムコードの関数を変更するパッチコードが実装されないときに，該ネイティブＩＣカードのＥＥＰＲＯＭに設けられ，パッチコードの実行を管理する情報が記憶されるパッチエントリの容量を小さくすることのできるＩＣカード及びパッチコードの動作方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決する第１の発明は，不揮発性メモリである第１のメモリと電気的に書換え可能な不揮発性メモリである第２のメモリを有するＩＣカードであって，前記第１のメモリに実装された関数を変更するためのパッチコードの有無を示し，アドレスを表記するビット数よりも小さいビットで構成されるフラグが，前記関数の数だけ用意され，前記パッチコードが前記第２のメモリに実装された場合，前記パッチコードによって変更される前記関数に対応する前記フラグをＯｎにすると共に，前記パッチコードへのジャンプ先アドレスが記述されるパッチエントリが前記第２のメモリに設けられ，前記ＩＣカードは，前記関数を実行するときに，前記パッチエントリを参照し，実行する前記関数に対応する前記パッチエントリの前記フラグがＯｎの場合，該フラグに対応する前記ジャンプ先アドレスを取得し，該ジャンプ先アドレスを利用して前記パッチコードを実行させることを特徴とするＩＣカードである。
【００１４】
更に，第２の発明は，第１の発明に記載のＩＣカードであって，前記フラグは１ビットで構成されていることを特徴とするＩＣカードである。
【００１５】
更に，第２の発明は，不揮発性メモリである第１のメモリと電気的に書換え可能な不揮発性メモリである第２のメモリを有するＩＣカードにおいて，前記第１のメモリに実装された関数を変更するためのパッチコードを実行させる方法であって，前記パッチコードの有無を示し，アドレスを表記するビット数よりも小さいビットで構成されるフラグが前記関数の数だけ用意され，前記パッチコードが前記第２のメモリに実装された場合，前記パッチコードによって変更される前記関数に対応する前記フラグをＯｎにすると共に，前記パッチコードへのジャンプ先アドレスが記述されるパッチエントリを前記第２のメモリに設けておき，前記関数を実行するときに，前記パッチエントリを参照し，実行する前記関数に対応する前記パッチエントリの前記フラグがＯｎの場合，該フラグに対応する前記ジャンプ先アドレスを取得し，該ジャンプ先アドレスを利用して前記パッチコードを実行させることを特徴とするパッチコードの実行方法である。
【発明の効果】
【００１６】
このように，本発明によれば，ＲＯＭのように不揮発性メモリに実装された関数を変更するためのパッチコードの有無を示すフラグを，アドレスを表記するビット数よりも小さいビットで構成することで，ＥＥＰＲＯＭのように電気的に書換え可能なメモリに設けられ，該フラグが記憶されるパッチエントリの容量を従来よりも小さくすることができる。
【発明を実施するための最良の形態】
【００１７】
ここから，本発明に係わるＩＣカードの最良の実施形態について，図を参照しながら詳細に説明する。
【００１８】
図１は，本実施形態に係わるＩＣカード１の外観を説明する図である。図１で図示したＩＣカード１は接触型ＩＣカードで，ＩＣカード１にはＩＣモジュール１ａがエンベットされ，ＩＣモジュール１ａの裏面には，ＩＣチップ１０が樹脂１ｂでモールドされている。
【００１９】
図２は，ＩＣチップ１０の回路ブロック図で，ＩＣチップ１０は，プログラムコードに含まれる命令を解釈実行する演算装置であるＣＰＵ（Central Processing Unit）１１，読み出し専用のメモリであるＲＯＭ（Read−Only Memory）１２，ＣＰＵ１１が利用するメインメモリであるＲＡＭ（Random Access Memory）１３，電気的に書換え可能な不揮発性メモリであるＥＥＰＲＯＭ（Erasable Programmable ROM）１３，暗号処理などの特定の演算機能に特化した副演算装置であるＣｏ−Processor１４，図外のリーダライタとデータ通信するための回路であるＵＡＲＴ１５を備えている。
【００２０】
図３は，本実施形態におけるＩＣチップ１０のメモリの内容を説明する図で，図３（ａ）はＲＯＭ１２の内容を説明する図で，図３（ｂ）はＥＥＰＲＯＭ１３を説明する図である。
【００２１】
図３（ａ）に図示したように，ネイティブＩＣカード１のＲＯＭ１２には，ファイル管理やデータ通信などネイティブＩＣカード１が動作するためのＯＳ機能に加え，ネイティブＩＣカード１が利用されるシステムに特化したアプリケーション機能を備えたネイティブＯＳ２のプログラムコードが実装され，本実施形態において，ネイティブＯＳ２には合計ｎ個の関数２０が含まれ，それぞれの関数２０には，ＥＥＰＲＯＭ１３に記憶されたパッチエントリ４を用いて，パッチコード４を呼び出すためのパッチ呼出コード２１が含まれる。
【００２２】
なお，ネイティブＯＳ２に含まれる合計ｎ個の関数２０それぞれを区別するとき，図３（ａ）に左から記載されている順番を関数２０の後に「＿」を付与して表記する。この規則に従えば，例えば，図３（ａ）において１番左に記載されている関数２０は関数２０＿１と表記される。
【００２３】
また，図３（ｂ）に図示したように，ネイティブＩＣカード１のＥＥＰＲＯＭ１３には，ネイティブＩＣカード１のＯＳ機能を実現するためのプログラムコードが利用するＯＳデータ１３０，アプリケーション機能を実現するためのプログラムコードが利用するアプリケーションデータ１３１に加え，ＲＯＭ１２に実装された関数２０のパッチコードとして，関数２０＿３及び関数２０＿ｎのパッチコード４と，パッチコード４が用意されていないときに動作するダミー関数４ａと，パッチコード４を動作させるために必要なデータが記憶されたパッチエントリ３が記憶される。
【００２４】
更に，図３（ｂ）に図示したように，パッチエントリ３には，関数２０のパッチコード４の有無を示し，アドレスを表記するビット数よりも小さいビット（本実施形態では１ビット）で構成されるパッチフラグ３０が，ＲＯＭ１２に実装される関数２０の数（ここでは，ｎ個）だけ用意され，パッチフラグ３０の後に，Ｏｎであるパッチフラグ３０の数だけ，ＥＥＰＲＯＭ１３に実装されたパッチコード４へのジャンプ先アドレス３１が記述される。
【００２５】
このように，関数２０のパッチコード４の有無を示すパッチフラグ３０を，アドレスを表記するビット数よりも小さいビット（本実施形態では１ビット）で構成することで，パッチコード４をＥＥＰＲＯＭ１３に一つも実装しないとき，ＥＥＰＲＯＭ１３に記憶されるパッチエントリ３の容量を小さくできる。
【００２６】
従来の技術では，パッチコード４をＥＥＰＲＯＭ１３に実装しないときであっても，ダミー関数４ａへのアドレス（４バイト）をＲＯＭ１２に実装されている関数２０の数だけパッチエントリに記憶しなければならず，すべてのアドレスを記憶するために４×ｎバイトの容量を必要としていた。
【００２７】
これに対して，関数２０のパッチコード４の有無を示すパッチフラグ３０を，アドレスを表記するビット数よりも小さいビットで構成することで，パッチコード４をＥＥＰＲＯＭ１３に一つも実装しないとき，すべてのパッチフラグ３０を記憶するための容量を４×ｎバイト未満になる。
【００２８】
なお，本実施形態のように，１ビットでパッチフラグ３０を構成すると，パッチコード４をＥＥＰＲＯＭ１３に一つも実装しないとき，すべてのパッチフラグ３０を記憶するための容量はｎビット（従来技術の１／３２の容量）になり，パッチエントリ３の容量を最小にすることができる。
【００２９】
関数２０のパッチコード４の有無を示す１ビットのパッチフラグ３０は，左から順に，関数２０＿１から関数２０＿ｎに対応している。図３（ｂ）では，関数２０＿３及び関数２０＿ｎの２つのパッチコード４がＥＥＰＲＯＭ１３に実装されているため，左から３番目とｎ番目のパッチフラグ３０がＯｎで，それ以外のパッチフラグ３０はＯｆｆである。
【００３０】
図４は，パッチコード４及びダミー関数４ａを説明する図で、図４（ａ）はパッチコード４を説明する図で，図４（ｂ）はダミー関数４ａを説明する図である。
【００３１】
関数２０が呼び出された直後に，パッチコード４或いはダミー関数４ａが実行され，図４（ａ）に図示したように，関数２０を変更するときにＥＥＰＲＯＭ１３に実装されるパッチコード４には，関数２０が変更されたプログラムコードに加え，呼び出された関数２０の次に実行される関数２０の先頭アドレスへジャンプするためのＪｕｍｐ命令が記述される。よって，パッチコード４が実行された後は，パッチコード４に対応する関数２０の次に実行される関数２０が実行されることになる。
【００３２】
また，図４（ｂ）に図示したように，関数２０を変更する必要がないときに動作するダミー関数４ａは，ＮＯＰ命令などの後に，呼び出された関数２０の先頭アドレスへジャンプするためのＪｕｍｐ命令が記述される。よって，ダミー関数４ａが実行された後は，呼び出された関数２０が実行されることになる。
【００３３】
ここから，関数２０に含まれるパッチ呼出コード２１がパッチコード４を呼び出す動作について説明する。図５は，パッチ呼出コード２１がパッチコード４を呼び出す動作手順を示したフロー図である。
【００３４】
ネイティブＩＣカード１のＲＯＭ２に実装されたネイティブＯＳ２のプログラムコードがＣＰＵ１１で解釈実行されることで，ネイティブＯＳ２に含まれる関数２０の一つが呼び出されると（Ｓ１），呼び出された関数２０に記述されたパッチ呼出コード２１が解釈実行開始される。
【００３５】
関数２０に記述されたパッチ呼出コード２１には，ＥＥＰＲＯＭ１３に記憶されたパッチエントリ３の開始アドレスと，該パッチ呼出コード２１が読み取るパッチフラグ３０を示す位置データとして，該開始アドレスからの相対アドレスが記述され，該パッチ呼出コード２１は解釈実行開始されると，該開始アドレスと該相対アドレスで一意に決定されるＥＥＰＲＯＭ１３のアドレスから，該関数に対応するパッチフラグ３０の値を読み取る（Ｓ２）。
【００３６】
パッチ呼出コード２１は関数に対応するパッチフラグ３０の値をパンチエントリ３から読み取ると，読み取ったパッチフラグ３０の値によって処理を分岐させる（Ｓ３）。
【００３７】
パッチエントリ３から読み取ったパッチフラグ３０がＯｎの場合，パッチ呼出コード２１は，該パッチフラグ３０に対応するジャンプ先アドレス３１をパッチエントリ３から取得し，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数にパッチエントリ３から取得した該ジャンプ先アドレス３１を代入する。
【００３８】
パッチ呼出コードが該パッチフラグ３０に対応するジャンプ先アドレス３１をパッチエントリ３から取得することは，例えば，該開始アドレスから該相対アドレスまでの間に，Ｏｎになっているパッチフラグ３０の数をカウントし，パッチエントリ３に記述されたジャンプ先アドレスの中から，ｍ番目（ｍはカウントした数）に記述されたジャンプ先アドレス３１を取得することでなされる。
【００３９】
また，パッチエントリ３から読み取ったパッチフラグ３０がＯｆｆの場合，パッチ呼出コード２１は，ダミー関数の先頭アドレスを，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数に代入する（Ｓ５）。
【００４０】
例えば，図４のＳ１で呼び出された関数２０が，図３（ａ）の関数２０＿２である場合，図３（ｂ）に従えば，関数２０＿２に対応するパッチフラグ３０はＯｆｆであるため，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数にダミー関数の先頭アドレスを代入する。なお，ダミー関数４ａの先頭アドレスは，関数２０に埋め込まれていてもよく，或いは，ＥＥＰＲＯＭ１３のＯＳデータ１３０に記憶されていてもよい。
【００４１】
パッチコード４は，図３のＳ４で，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数に，パッチエントリ３のジャンプ先アドレス３１を代入，或いは，図３のＳ５で，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数に，ダミー関数４ａの先頭アドレスを代入した後，該Ｊｕｍｐ命令を実行することで，該変数に代入されたジャンプ先アドレスから開始されるプログラムコードを実行し，この手順を終了する。
【００４２】
上述したように，図４のＳ４で，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数に，パッチエントリ３から取得したジャンプ先アドレス３１を代入する場合，図４のＳ６で実行されるプログラムコードは，図４のＳ１で呼び出された関数２０を変更するためのパッチコード４になる。
【００４３】
図４のＳ５で，次の処理に飛ぶためのＪｕｍｐ命令のジャンプ先を示す変数に，ダミー関数４ａの先頭アドレスを代入した場合，図４のＳ６実行されるプログラムコードは，ダミー関数４ａで，ダミー関数４ａが実行された後，図４のＳ１で呼び出された関数２０が実行される。
【図面の簡単な説明】
【００４４】
【図１】本実施形態に係わるＩＣカードの外観を説明する図。
【図２】ＩＣチップの回路ブロック図。
【図３】ＩＣチップのメモリの内容を説明する図。
【図４】パッチコード及びダミー関数を説明する図。
【図５】パッチコードを呼び出す動作手順を示したフロー図。
【符号の説明】
【００４５】
１  ＩＣカード
１０  ＩＣチップ
１１  ＲＯＭ
１３  ＥＥＰＲＯＭ
２  ネイティブＯＳ
２０  ネイティブＯＳに含まれる関数
２１  パッチ呼出コード
３  パッチエントリ
３０  パッチフラグ
３１  パッチコードへのジャンプ先アドレス
４  パッチコード
４ａ  ダミー関数
【図１】
2010113549.tif 000003
【図２】
2010113549.tif 000004
【図３】
2010113549.tif 000005
【図４】
2010113549.tif 000006
【図５】
2010113549.tif 000007