(57)【要約】【課題】複数の製品ごとに固有のＯＳ機能を１つのＩＣチップで利用できるようにし、なおかつセキュリティを向上させることが可能なＩＣチップ及びプログラム暗号化方法を提供する。【解決手段】ＩＣチップは、複数のＯＳプログラムの中の所定のＯＳプログラムを暗号化する暗号コマンドを受信すると、受信された暗号コマンドにより指定された識別子に対応するセクションのアドレスに対応付けられた鍵データに基づいて、当該アドレスが示す領域に記憶されたＯＳプログラムを暗号化する。【選択図】図３
2015148877.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な複数の処理機能のそれぞれを担う複数の制御プログラムを記憶する不揮発性メモリを備えるＩＣチップであって、
前記不揮発性メモリには、前記処理機能を担う前記制御プログラムを記憶する領域を示す領域情報と、当該制御プログラムを暗号化するための鍵データとを、前記複数の制御プログラムごとに対応付けたテーブルが記憶されており、
前記ＩＣチップは、
前記複数の制御プログラムの中の所定の制御プログラムを暗号化する暗号コマンドを外部装置から受信する受信手段と、
前記受信された暗号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを暗号化する暗号化手段と、
を備えることを特徴とするＩＣチップ。
【請求項２】
前記テーブルにおける前記領域情報のそれぞれには、それぞれの前記領域に格納された前記制御プログラムが暗号化されているか否かを示すフラグが対応付けられており、
前記ＩＣチップは、
前記暗号化手段により前記制御プログラムが暗号化された場合には、当該暗号化された制御プログラムに対応する前記フラグを、前記制御プログラムが暗号化されていることを示すように変更する変更手段と、
前記アプリケーションから前記ＡＰＩの呼び出しがあった場合には、当該ＡＰＩに対応する前記制御プログラムを記憶する領域を示す領域情報に対応付けられた前記フラグを参照し、当該フラグが前記制御プログラムが暗号化されていることを示すか否かを判定する判定手段と、
前記判定手段により暗号化されていることを示すと判定された場合、エラー処理を行うエラー処理手段と、
を備えることを特徴とする請求項１に記載のＩＣチップ。
【請求項３】
前記テーブルにおける前記領域情報のそれぞれには、それぞれの前記領域に格納された前記制御プログラムが暗号化されているか否かを示すフラグが対応付けられており、
前記ＩＣチップは、
前記暗号化手段により前記制御プログラムが暗号化された場合には、当該暗号化された制御プログラムに対応する前記フラグを、前記制御プログラムが暗号化されていることを示すように変更する変更手段と、
前記アプリケーションから前記ＡＰＩの呼び出しがあった場合には、当該ＡＰＩに対応する前記制御プログラムを記憶する領域を示す領域情報に対応付けられた前記フラグを参照し、当該フラグが前記制御プログラムが暗号化されていることを示すか否かを判定する判定手段と、
前記判定手段により暗号化されていることを示さないと判定された場合、前記ＡＰＩに対応する前記制御プログラムを実行するプログラム実行手段と、
を備えることを特徴とする請求項１に記載のＩＣチップ。
【請求項４】
前記受信手段は、前記暗号化された前記所定の制御プログラムを復号する復号コマンドを外部装置から受信し、
前記受信された復号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを復号する復号手段と、
を備えることを特徴とする請求項１乃至３の何れか一項に記載のＩＣチップ。
【請求項５】
アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な複数の処理機能のそれぞれを担う複数の制御プログラムを記憶する不揮発性メモリを備えるＩＣチップにおけるプログラム暗号化方法であって、
前記不揮発性メモリには、前記処理機能を担う前記制御プログラムを記憶する領域を示す領域情報と、当該制御プログラムを暗号化するための鍵データとを、前記複数の制御プログラムごとに対応付けたテーブルが記憶されており、
前記プログラム暗号化方法は、
前記複数の制御プログラムの中の所定の制御プログラムを暗号化する暗号コマンドを外部装置から受信する受信ステップと、
前記受信された暗号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを暗号化する暗号化ステップと、
を含むことを特徴とするプログラム暗号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な複数の処理機能のそれぞれを担う複数の制御プログラムを記憶する不揮発性メモリを備えるＩＣチップ等の技術に関する。
【背景技術】
【０００２】
近年のＩＣカードでは、過去の製品と比べて安価で容量の大きいメモリを搭載したものが増えてきた。そのため、機能を実現するためのプログラム量も過去の製品に比べて大量に格納することが可能となっている。ＩＣカードベンダーは、顧客から要求される機能を実現するために、アプリケーションを作成し、ＩＣカードに格納することになる。このようなアプリケーションの中には、セキュリティを重視する例えばクレジット機能を持つアプリケーション等がある。このようなアプリケーションをＩＣカードに格納して利用可能にさせるためには、対象のブランドの認定を取得したり、セキュリティ評価機関に耐タンパ性（セキュリティの強度）を評価してもらう必要がある。このような評価等は、ＩＣカードの製品ごとに実施されていることが多いため、その費用も、製品数だけ多くなるという問題がある。このため、可能な限り、汎用的な製品を１つ作成し、１回の認定や評価を通した上で、様々な製品に展開できるような仕組みにすることが望まれる。そのためには、様々な製品の機能差分を吸収する仕組みが必要になる。
【０００３】
このような機能差分を吸収する仕組みとして、一般的には、製品ごとに機能をJava （登録商標）で記述されるアプリケーションで作成することにより、ＩＣカードの仕様(Global Platform)にあるINSTALL、DELETEといったコマンドで追加、消去する方法がある。しかしながら、機能差分がアプリケーションによって吸収できる範囲であれば問題ないが、ＯＳ（Operating System）に機能差分があった場合に問題となる。例えば、製品特有の暗号機能や認証機能を使うといったＯＳの機能を使用する場合である。暗号機能や認証機能は、ハードウェアのコプロセッサを制御する場合が多く、ＯＳからJava （登録商標）で記述されるアプリケーションに対してＡＰＩを提供する必要がある。ＯＳに機能差分があった場合の解決策として、例えば、Ａ製品とＢ製品両方のＡＰＩをＩＣカードに搭載することが考えられる。しかしながら、例えば、Ｂ製品の提供者がＢ製品のＡＰＩを、Ａ製品上でＡ製品のアプリケーション開発者側に公開したくない場合がある。Ｂ製品にも同様のことが言える。このような場合、例えば特許文献１に開示されるように、権限によりＡＰＩを使い分けることが考えられる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３８８０３８４号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示されるような権限は、例えば、セキュリティアタックによって不正に取得されてしまうことが想定される。そのため、上述した問題を解決する上で、ＡＰＩの権限管理だけでは十分ではない。
【０００６】
本発明は、このような点に鑑みてなされたものであり、複数の製品ごとに固有のＯＳ機能を１つのＩＣチップで利用できるようにし、なおかつセキュリティを向上させることが可能なＩＣチップ及びプログラム暗号化方法を提供することを課題とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明は、アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な複数の処理機能のそれぞれを担う複数の制御プログラムを記憶する不揮発性メモリを備えるＩＣチップであって、前記不揮発性メモリには、前記処理機能を担う前記制御プログラムを記憶する領域を示す領域情報と、当該制御プログラムを暗号化するための鍵データとを、前記複数の制御プログラムごとに対応付けたテーブルが記憶されており、前記ＩＣチップは、前記複数の制御プログラムの中の所定の制御プログラムを暗号化する暗号コマンドを外部装置から受信する受信手段と、前記受信された暗号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを暗号化する暗号化手段と、を備えることを特徴とする。
【０００８】
請求項２に記載の発明は、請求項１に記載のＩＣチップにおいて、前記テーブルにおける前記領域情報のそれぞれには、それぞれの前記領域に格納された前記制御プログラムが暗号化されているか否かを示すフラグが対応付けられており、前記ＩＣチップは、前記暗号化手段により前記制御プログラムが暗号化された場合には、当該暗号化された制御プログラムに対応する前記フラグを、前記制御プログラムが暗号化されていることを示すように変更する変更手段と、前記アプリケーションから前記ＡＰＩの呼び出しがあった場合には、当該ＡＰＩに対応する前記制御プログラムを記憶する領域を示す領域情報に対応付けられた前記フラグを参照し、当該フラグが前記制御プログラムが暗号化されていることを示すか否かを判定する判定手段と、前記判定手段により暗号化されていることを示すと判定された場合、エラー処理を行うエラー処理手段と、を備えることを特徴とする。
【０００９】
請求項３に記載の発明は、請求項１に記載のＩＣチップにおいて、前記テーブルにおける前記領域情報のそれぞれには、それぞれの前記領域に格納された前記制御プログラムが暗号化されているか否かを示すフラグが対応付けられており、前記ＩＣチップは、前記暗号化手段により前記制御プログラムが暗号化された場合には、当該暗号化された制御プログラムに対応する前記フラグを、前記制御プログラムが暗号化されていることを示すように変更する変更手段と、前記アプリケーションから前記ＡＰＩの呼び出しがあった場合には、当該ＡＰＩに対応する前記制御プログラムを記憶する領域を示す領域情報に対応付けられた前記フラグを参照し、当該フラグが前記制御プログラムが暗号化されていることを示すか否かを判定する判定手段と、前記判定手段により暗号化されていることを示さないと判定された場合、前記ＡＰＩに対応する前記制御プログラムを実行するプログラム実行手段と、を備えることを特徴とする。
【００１０】
請求項４に記載の発明は、請求項１乃至３の何れか一項に記載のＩＣチップにおいて、前記受信手段は、前記暗号化された前記所定の制御プログラムを復号する復号コマンドを外部装置から受信し、前記受信された復号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを復号する復号手段と、を備えることを特徴とする。
【００１１】
請求項５に記載の発明は、アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な複数の処理機能のそれぞれを担う複数の制御プログラムを記憶する不揮発性メモリを備えるＩＣチップにおけるプログラム暗号化方法であって、前記不揮発性メモリには、前記処理機能を担う前記制御プログラムを記憶する領域を示す領域情報と、当該制御プログラムを暗号化するための鍵データとを、前記複数の制御プログラムごとに対応付けたテーブルが記憶されており、前記プログラム暗号化方法は、前記複数の制御プログラムの中の所定の制御プログラムを暗号化する暗号コマンドを外部装置から受信する受信ステップと、前記受信された暗号コマンドにより指定された識別情報に対応する前記領域情報に対応付けられた前記鍵データに基づいて、当該領域情報が示す領域に記憶された前記制御プログラムを暗号化する暗号化ステップと、を含むことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、複数の製品ごとに固有のＯＳ機能を１つのＩＣチップで利用できるようにし、なおかつセキュリティを向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】ＩＣカード１の概要構成例を示す図である。
【図２】（Ａ）は、不揮発性メモリ１３に設けられたプログラム領域の一例を示す図である。（Ｂ）は、鍵データテーブルの一例を示す図である。
【図３】コード暗号コマンドを受信したときのＣＰＵ１０の処理例を示すフローチャートである。
【図４】（Ａ）は、ＩＣカード１の発行処理後に、一般のコマンドを受信したときのＣＰＵ１０の処理例を示すフローチャートである。（Ｂ）は、動作中のアプリケーションからＡＰＩの呼び出しがあった場合のＣＰＵ１０の処理例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００１５】
先ず、図１を参照して、本実施形態に係るＩＣカード１の構成及び機能概要について説明する。図１は、ＩＣカード１の概要構成例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップ１ａは通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１６】
ＩＣカード１には、図１に示すように、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、コンピュータとしてのＣＰＵ（Central Processing Unit）１０、ＲＡＭ（Random Access Memory）１１、ＲＯＭ（Read Only Memory）１２、不揮発性メモリ１３、及びＩ／Ｏ回路１４を備えて構成される。なお、Ｉ／Ｏ回路１４は、外部装置２とのインターフェイスを担う。ＩＣカード１が接触ＩＣカードの場合、Ｉ／Ｏ回路１４には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部装置２とのデータ通信を行う端子である。外部装置２の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末２には通信機器の機能を担うコントローラが該当する。ＩＣカード発行機は、ＩＣカード１の発行処理を行う装置である。なお、本明細書で「発行」とは、ＩＣカードが製品として顧客（例えば、クレジットカード会社等）に提供されるにあたって、例えばＩＣカード発行会社がＩＣカードのＩＣチップに所定の情報（プログラムやデータなど）を書き込むことを意味する。なお、ＩＣカード１が非接触ＩＣカードの場合、Ｉ／Ｏ回路１４には、アンテナ及び変復調回路等が設けられる。
【００１７】
ＣＰＵ１０は、ＲＯＭ１２または不揮発性メモリ１３に記憶されるプログラムを実行する演算装置である。ＣＰＵ１０は、本発明における受信手段、暗号化手段、変更手段、判定手段、エラー処理手段、プログラム実行手段、及び復号手段として機能する。ＲＯＭ１２は、ＩＣチップ１ａに設けられない場合もある。不揮発性メモリ１３には、例えばフラッシュメモリが適用される。なお、不揮発性メモリ１３は、「Electrically Erasable Programmable Read-Only Memory」であっても構わない。不揮発性メモリ１３には、複数（２種類以上）のＯＳ（Operating System）プログラムを格納するプログラム領域と、セキュリティデータ等の各種データを格納するデータ領域とが設けられる。ＯＳプログラムは、制御プログラムの一例である。なお、不揮発性メモリ１３には、暗号化プログラムが予め記憶される。
【００１８】
図２（Ａ）は、不揮発性メモリ１３に設けられたプログラム領域の一例を示す図である。図２（Ａ）に示すプログラム領域では、複数のＯＳプログラムを保持する複数（２種類以上）のセクションに分かれている。それぞれのセクションには、図２（Ａ）に示すように、Ａ〜Ｃ製品で共通のＯＳプログラム、Ａ製品特有の処理機能を担うＯＳプログラム（以下、「Ａ製品用ＯＳプログラム」という）、Ｂ製品特有の処理機能を担うＯＳプログラム（以下、「Ｂ製品用ＯＳプログラム」という）、及びＣ製品特有の処理機能を担うＯＳプログラム（以下、「Ｃ製品用ＯＳプログラム」という）のいずれかが保持されている。ここで、処理機能とは、例えばJava（登録商標）等が提供する基本的な処理機能（例えば、暗号機能や認証機能）である。なお、Ａ製品用ＯＳプログラムを保持するセクションをＡセクション、Ｂ製品用ＯＳプログラムを保持するセクションをＢセクション、Ｃ製品用ＯＳプログラムを保持するセクションをＣセクションという。
【００１９】
Ａ製品用ＯＳプログラム、Ｂ製品用ＯＳプログラム、及びＣ製品用ＯＳプログラムは、それぞれ、アプリケーションからＡＰＩ（Application Programming Interface）を介して利用可能な処理機能を担う。アプリケーションは、Java（登録商標）等の特定のプログラムミング言語で作成されるアプリケーションプログラムである。このアプリケーションは、ＩＣカード１の発行処理時、又は顧客に提供された後に不揮発性メモリ１３に記憶される。Ａ製品用ＯＳプログラム、Ｂ製品用ＯＳプログラム、及びＣ製品用ＯＳプログラムのそれぞれに対応するＡＰＩは、それぞれの処理機能へのインターフェイスであり、アプリケーションにより呼び出される。
【００２０】
また、不揮発性メモリ１３に設けられたデータ領域には、鍵データテーブルが記憶される。図２（Ｂ）は、鍵データテーブルの一例を示す図である。鍵データテーブルは、図２（Ｂ）に示すように、セクションの識別子（識別情報）と、セクションのアドレスと、鍵データと、フラグとを、セクションごとに対応付けて保持する。セクションの識別子は、レコード（テーブルの列）のインデックスであってもよい。セクションのアドレスは、対応するＯＳプログラムを記憶する領域を示す。鍵データは、対応するＯＳプログラム（言い換えれば、当該ＯＳプログラムを保持するセクション）を暗号化したり、暗号化されたＯＳプログラムを復号するためのデータである。フラグは、対応するＯＳプログラムが暗号化されているか否かを示す。なお、図２（Ｂ）に示すように、データ領域に記憶された鍵データテーブルの末尾には、当該鍵データテーブルのＣＲＣ（Cyclic Redundancy Check）が記憶される。
【００２１】
以上のＩＣチップ１ａの構成において、ＣＰＵ１０は、複数のＯＳプログラムの中の所定のＯＳプログラムを暗号化する暗号コマンド（以下、「コード暗号コマンド」という）をＩＣカード発行機から受信すると、受信されたコード暗号コマンドにより指定された識別子に対応するセクションのアドレスに対応付けられた鍵データに基づいて、当該アドレスが示す領域に記憶されたＯＳプログラムを暗号化する暗号化処理を行うようになっている。
【００２２】
ここで、図３を参照して、コード暗号コマンドを受信したときのＣＰＵ１０の処理について説明する。図３は、コード暗号コマンドを受信したときのＣＰＵ１０の処理例を示すフローチャートである。なお、本実施形態においては、コード暗号コマンドは、ＩＣカード１の発行処理時に使用されることを想定している。そのため、ＩＣカード１の不揮発性メモリ１３には、ＩＣカード１が、少なくとも、発行状態かそれ以外の状態かの２種類以上のライフサイクルを管理する状態変数が保持されている。
【００２３】
図３において、ＣＰＵ１０は、ＩＣカード発行機からＩＣチップ１ａへ送信されたコード暗号コマンド（例えばＢ製品用ＯＳプログラムに対するコード暗号コマンド）を受信すると、上記状態変数を参照してＩＣカード１の発行フェーズであるか否かを判定する（ステップＳ１）。つまり、ＩＣカード１のライフサイクルが発行フェーズであるか否かが判定される。ＩＣカード１の発行フェーズでないと判定された場合（ステップＳ１：ＮＯ）、ステップＳ２へ進む。ステップＳ２では、ＣＰＵ１０は、エラー処理を行う。このエラー処理では、ＩＣカード発行機へエラー信号が返信される。
【００２４】
一方、ＩＣカード１の発行フェーズであると判定された場合（ステップＳ１：ＹＥＳ）、ステップＳ３へ進む。ステップＳ３では、ＣＰＵ１０は、ステップＳ１で受信されたコード暗号コマンドから識別子を取得する。次いで、ＣＰＵ１０は、ステップＳ３で取得された識別子（つまり、コード暗号コマンドにより指定された識別子）を基に、当該識別子に対応するセクションのアドレスに対応付けられた鍵データ（対象セクション用の鍵データ）を鍵データテーブルから取得する（ステップＳ４）。
【００２５】
次いで、ＣＰＵ１０は、ステップＳ４で取得された鍵データに基づいて、当該識別子に対応するアドレスが示すセクションに記憶されたＯＳプログラム（例えば、Ｂ製品用ＯＳプログラム）を暗号化プログラムにしたがって暗号化（言い換えれば、対象セクションを暗号化）する（ステップＳ５）。次いで、ＣＰＵ１０は、暗号化されたＯＳプログラムが記憶された領域を示すアドレスに対応付けられたフラグ（鍵データテーブルで保持されたフラグ）を「０」から「１」に変更（対象セクション用のフラグを有効に設定）する（ステップＳ６）。つまり、ＯＳプログラムが暗号化された場合には、ＣＰＵ１０は、当該暗号化されたＯＳプログラムに対応するフラグを、当該ＯＳプログラムが暗号化されていることを示すように変更する。次いで、ＣＰＵ１０は、鍵データテーブルの末尾に記憶されたＣＲＣ（テーブル全体のＣＲＣ）を更新し（ステップＳ７）、図３に示す処理を終了する。なお、上記処理により例えばＢ製品用ＯＳプログラムが暗号化された後、Ｃ製品用ＯＳプログラムを暗号化する場合には、ＩＣカード発行機から、Ｃ製品用ＯＳプログラムに対するコード暗号コマンドをＩＣチップ１ａへ送信すればよい。
【００２６】
以上の処理により一部のＯＳプログラムだけを暗号化することで当該ＯＳプログラムをＩＣカード１の発行処理後に非公開とすることができる。また、暗号化されたＯＳプログラムは、暗号化した鍵データにより復号することができるので、後に、例えばＡ製品においてもＢ製品用ＯＳプログラムを利用する状況となった場合であっても、適切に対応することができる。この場合、ＣＰＵ１０は、図３に示すように暗号化された所定のＯＳプログラムを復号する復号コマンド（以下、「コード復号コマンド」という）を外部装置２から受信すると、受信されたコード復号コマンドにより指定された識別子に対応するセクションのアドレスに対応付けられた鍵データに基づいて、当該アドレスが示す領域に記憶されたＯＳプログラムを復号する復号処理を行うようになっている。より具体的には、ＣＰＵ１０は、コード復号コマンドを受信すると、受信したコード復号コマンドから識別子を取得する。次いで、ＣＰＵ１０は、取得した識別子を基に、当該識別子に対応するセクションのアドレスに対応付けられた鍵データを鍵データテーブルから取得する。次いで、ＣＰＵ１０は、取得した鍵データに基づいて、当該識別子に対応するアドレスが示すセクションに記憶されたＯＳプログラムを復号プログラムにしたがって復号（言い換えれば、対象セクションを復号）する。次いで、ＣＰＵ１０は、復号されたＯＳプログラムが記憶された領域を示すアドレスに対応付けられたフラグ（鍵データテーブルで保持されたフラグ）を「１」から「０」に変更（対象セクション用のフラグを無効に設定）する。つまり、ＯＳプログラムが復号された場合には、ＣＰＵ１０は、当該復号されたＯＳプログラムに対応するフラグを、当該ＯＳプログラムが復号されていることを示すように変更する。なお、コード暗号コマンドと、コード復号コマンドとは、１機能、１コマンドとして分けても良いし、同一コマンドにて、暗号と復号とを切り分ける識別情報によって処理を変えても良い。
【００２７】
次に、図４（Ａ）を参照して、ＩＣカード１の発行処理後に、一般のコマンドを受信したときのＣＰＵ１０の処理について説明する。図４（Ａ）は、ＩＣカード１の発行処理後に、一般のコマンドを受信したときのＣＰＵ１０の処理例を示すフローチャートである。このコマンドは、APDU(Application Protocol Data Unit)として送信される。APDUとして送信されるコマンドのヘッダは、CLA、INS、P1、P2という合計4バイトの情報で形成される。CLA、INSは、主にコマンドの種別等に使われる。本実施形態において、例えば、セクションの識別子はP1に保持される。また、暗号と復号とを同一コマンドで実行させる場合、暗号と復号とを切り分ける識別情報がP2に保持される。
【００２８】
図４（Ａ）において、ＣＰＵ１０は、外部装置２からＩＣチップ１ａへ送信されたコマンドを受信すると、当該コマンドが、ＡＰＩが提供される所定のアプリケーション（例えば、Java Application）に向けられたものか、それ以外（例えば、Native Application）に向けれたものかを判定する（ステップＳ１０）。ここで、Java Applicationとは、Java（登録商標）コードで記述され、JavaＶＭ（仮想マシン）等により当該Javaコードをネイティブコードに変換して実行する仕組みを持ったアプリケーションである。一方、Native Applicationとは、直接ネイティブコードで記述されたアプリケーションである。コマンドが、例えば、Java Applicationに向けられたものでないと判定された場合（ステップＳ１０：ＮＯ）、ＣＰＵ１０は、当該コマンドを、例えば、Native Applicationへ配送する（ステップＳ１１）。一方、コマンドが、例えば、Java Applicationに向けられたものであると判定された場合（ステップＳ１０：ＹＥＳ）、ステップＳ１２へ進む。
【００２９】
ステップＳ１２では、ＣＰＵ１０は、例えば、Java Applicationはリセット直後の初回起動であるか否かを判定する。リセット直後の初回起動であると判定された場合（ステップＳ１２：ＹＥＳ）、ステップＳ１３へ進む。一方、リセット直後の初回起動でないと判定された場合（ステップＳ１２：ＮＯ）、ステップＳ１４へ進む。ステップＳ１３では、ＣＰＵ１０は、不揮発性メモリ１３に記憶された鍵データテーブルのＣＲＣが正常であるか否かを判定する。つまり、ＣＰＵ１０は、不揮発性メモリ１３に記憶されたＣＲＣと、このとき算出したＣＲＣとが一致すれば、ＣＲＣが正常であると判定し（ステップＳ１３：ＹＥＳ）、ステップＳ１４へ進む。ステップＳ１４では、ＣＰＵ１０は、共通のＯＳプログラム（例えば、Java ＯＳ）を実行してJava Applicationを動作させる。一方、ＣＲＣが正常でないと判定された場合（ステップＳ１３：ＮＯ）、ステップＳ１５へ進む。ステップＳ１５では、ＣＰＵ１０は、エラー処理を行う。このエラー処理では、外部装置２へエラー信号が返信される。
【００３０】
次に、図４（Ｂ）を参照して、動作中のアプリケーションからＡＰＩの呼び出しがあった場合のＣＰＵ１０の処理について説明する。図４（Ｂ）は、動作中のアプリケーションからＡＰＩの呼び出しがあった場合のＣＰＵ１０の処理例を示すフローチャートである。
【００３１】
図４（Ｂ）において、動作中のアプリケーションからＡＰＩの呼び出しがあった場合、ＣＰＵ１０は、当該ＡＰＩに対応するＯＳプログラムを記憶する領域（セクション）を示すアドレスに対応付けられたフラグ（対象セクションのフラグを取得）を鍵データテーブルから取得する（ステップＳ２０）。次いで、ＣＰＵ１０は、ステップＳ２０で取得したフラグを参照し、当該フラグが有効であるか否かを判定する（ステップＳ２１）。当該フラグが有効でない（０）と判定された（つまり、暗号化されていないことを示すと判定された）場合（ステップＳ２１：ＮＯ）、ＣＰＵ１０は、当該ＡＰＩに対応するＯＳプログラム（例えば、Ａ製品用ＯＳプログラム）へジャンプして実行する（ステップＳ２２）。一方、当該フラグが有効である（１）と判定された（つまり、暗号化されていることを示すと判定された）場合（ステップＳ２１：ＹＥＳ）、ＣＰＵ１０は、エラー処理を行う（ステップＳ２３）。このエラー処理では、外部装置２へエラー信号が返信される。
【００３２】
以上説明したように、上記実施形態によれば、ＩＣチップ１ａは、複数のＯＳプログラムの中の所定のＯＳプログラムを暗号化するコード暗号コマンドを受信した場合、当該コード暗号コマンドにより指定された識別子に対応するセクションのアドレスに対応付けられた鍵データに基づいて、当該アドレスが示す領域に記憶されたＯＳプログラムを暗号化するように構成したので、複数の製品ごとに固有のＯＳ機能を１つのＩＣチップで利用できるようにし、なおかつセキュリティを向上させることができる。また、鍵データテーブルを不揮発性メモリ１３に記憶させＩＣチップ１ａ内で管理するように構成したので、鍵データテーブルを外部で管理する場合と比べて、例えば会社間で鍵データをどのように受け渡すかの問題が生じることを回避することができる。また、携帯端末（移動機）等に挿入されているＵＩＭといったＩＣカードであれば、ＯＴＡ（Over-The-Air）の機能を使うことによって、コマンドを無線通信でＩＣカードに送信することで、市場に出回ってしまったカードでも、所定のＯＳプログラムを暗号化または復号することができる。つまり、市場のＩＣカードを回収することなく、会社間の契約状況といったことを市場のＵＩＭに反映することができる。なお、ＯＴＡとは、ＯＴＡサーバと携帯端末が無線通信を利用することで、携帯端末を介し、ＯＴＡサーバから送られたコマンドを携帯端末に差し込まれたＩＣカードに送信する仕組みである。例えば、ＯＴＡを使って、すでに市場に出回っているＩＣカードの特定の情報を書き換えるような事に使われる。
【００３３】
また、上記実施形態によれば、ＩＣチップ１ａは、ＯＳプログラムが暗号化された場合には、当該暗号化されたＯＳプログラムに対応するフラグを変更（有効設定）し、その後に、アプリケーションからＡＰＩの呼び出しがあった場合には、当該ＡＰＩに対応するＯＳプログラムを記憶するセクションに対応付けられたフラグを参照して当該フラグがＯＳプログラムが暗号化されていることを示すか否かを判定するように構成したので、例えばセキュリティアタックによって不正にＡＰＩが呼び出された場合であっても、ＡＰＩに対応するＯＳプログラムにジャンプすることを回避することができる。また、例えばセキュリティアタックによって、上記フラグが改ざんされた場合においても、ＯＳプログラムは暗号化されているため、使用することができない。そのため、セキュリティを、より一層向上させることができる。
【符号の説明】
【００３４】
１  ＩＣカード
２  外部装置
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＡＭ
１２  ＲＯＭ
１３  不揮発性メモリ
１４  Ｉ／Ｏ回路
【図１】
2015148877.tif 000003
【図２】
2015148877.tif 000004
【図３】
2015148877.tif 000005
【図４】
2015148877.tif 000006