以下、本発明を図示する実施形態に基づいて説明する。
<<< §1. ICカードに対する従来の一般的な通信形態 >>>
本発明は、外部装置との間で暗号通信を行う機能を有する情報処理装置への利用に適した発明であり、特に、ICカードからなる情報処理装置への利用に適した技術に関する。そこで、ここでは、まず、ICカードに対する従来の一般的な通信形態を簡単に説明しておく。
図1は、一般的なスマートフォン10,SIMカード11,外部サーバ20の間の情報通信の態様を示すブロック図である。通常、スマートフォン10は、内部にSIMカード11を装着した状態で利用され、必要に応じて、外部サーバ20と所定の通信路(インターネットや電話回線)を介して交信することになる。ここで、SIMカード11(UIMカードとも呼ばれる)は、Java Card(商標)やGlobalPlatform (登録商標)など、事実上の標準となっている国際的な仕様に準拠したICカードであり、外部装置との交信は、当該外部装置から与えられるコマンドと、これに対する応答(レスポンス)という形式で行われる。
SIMカード11に着目すると、スマートフォン10も外部サーバ20も、いずれも外部装置ということになり、これら外部装置との間の交信は、所定の通信路を介して行われる。図1には、スマートフォン10と外部サーバ20との間の通信路しか示されていないが、実際には、SIMカード11とスマートフォン10との間やSIMカード11と外部サーバ20との間にも通信路が形成される。そして、SIMカード11に対して、これらの通信路を介してコマンドおよびレスポンスのやりとりが行われることになる。
図2は、図1に示すSIMカード11と、スマートフォン10もしくは外部サーバ20と、の間で暗号通信を行うためのプログラム構成の一例を示すブロック図であり、情報処理装置100と外部装置200との間に通信路を開設して相互に交信を行う例が示されている。上述したとおり、本発明は、ICカードに適用するのに特に適した技術であるので、ここでは、情報処理装置100がスマートフォン10に装着されたSIMカード11であり、外部装置200が当該スマートフォン10(もしくは、外部サーバ20でもよい)である場合について、以下の説明を行うことにする。
SIMカード11をはじめとするICカードには、通常、複数のアプリケーションプログラムが組み込まれる。図2の情報処理装置100(SIMカード11)には、2組の一般アプリケーションプログラムAP1,AP2が組み込まれた状態が示されている。また、ICカードには、通常、少なくとも1組の管理プログラムSD(Security Domain プログラム)が組み込まれている。この管理プログラムSDは、分類上はアプリケーションプログラムの一種であるが、OSプログラムと協働して、ICカード全体の動作や、管理下にある他のアプリケーションプログラムを管理する役割を果たす。そこで、本願では、情報処理装置100(SIMカード11)に組み込まれるアプリケーションプログラムのうち、Security Domain プログラムを「管理プログラム」と呼び、それ以外のアプリケーションプログラムを「一般アプリケーションプログラム(略称:一般アプリ)」と呼ぶことにする。
後に詳述するように、管理プログラムSDには、管理下となるアプリケーションプログラムについてのロード機能、インストール機能、削除機能、発行データの書込機能(たとえば、暗号鍵の書込機能)、暗号通信路開設機能などの諸機能が備わっている。図2に示す管理プログラムSDには、暗号通信路開設ルーチンR1および鍵テーブルT1が組み込まれているが、これは暗号通信路開設機能を実現するための要素である。ICカードからなる情報処理装置100の場合、通常、「SCP:Secure Channel Protocol」と呼ばれる所定の暗号化プロトコルに基づいて、外部装置200との間にセキュアな暗号通信路を開設して暗号通信が行われる。このような機能を実現するため、管理プログラムSD内には、暗号通信路開設ルーチンR1と鍵テーブルT1とが組み込まれている。
一方、外部装置200側にも、これに応じた暗号通信を行う機能をもったアプリケーションプログラムAP3が用意されており、暗号通信路開設ルーチンR2と鍵テーブルT2とが組み込まれている。たとえば、外部装置200がスマートフォン10の場合、アプリケーションプログラムAP3は、このスマートフォン10にインストールされたアプリケーションプログラムの1つである。
情報処理装置100側の暗号通信路開設ルーチンR1と、外部装置200側の暗号通信路開設ルーチンR2は、両装置間にセキュアな暗号通信路を開設し、同一の暗号化プロトコルに基づいた暗号通信を行うためのルーチンであり、鍵テーブルT1と鍵テーブルT2には、同一の暗号鍵が収容されている。したがって、図示の例の場合、管理プログラムSDとアプリケーションプログラムAP3とによって、情報処理装置100と外部装置200との間に、同一の暗号鍵を用いた同一の暗号化プロトコルに基づく暗号通信を行うための暗号通信路が開設されることになる。
ICカードに対する暗号通信に利用される暗号化プロトコルとしては、SCP01,SCP02などのプロトコルが古くから利用されてきている。ただ、これらのプロトコルで用いられている「Triple-DES」という暗号アルゴリズムには危殆化の問題が指摘されており、近年は、AES(Advanced Encryption Standard)なる規格に基づく暗号アルゴリズムを利用したSCP03なるプロトコルも、GlobalPlatform (登録商標)に準拠した仕様として普及し始めている。また、3GPP/ETSIなどの標準化団体を中心に策定されたSCP80,SCP81などのプロトコルの利用も普及してきている。
また、ICカードに組み込まれる管理プログラムSD用の鍵テーブルTとしては、図3に例示するような鍵空間を用いる仕様が一般化している。図示の鍵テーブルTは、縦方向にキーバージョン番号(key version number)、横方向にキーID(key ID)を定義した二次元マトリックスによって構成されており、キーバージョン番号については、0x01〜0x7Fの範囲内のアドレス空間が割り当てられ、キーIDについては、0x00〜0x7Fの範囲内のアドレス空間が割り当てられている(アドレス先頭の0xは、以下の数値が16進数であることを示す)。
個々の暗号鍵は、この鍵テーブルTのいずれかのセルに格納されることになり、キーバージョン番号とキーIDとの組み合わせにより特定される。たとえば、キーバージョン番号「0x01」とキーID「0x01」との組み合わせにより、暗号鍵KeyAが特定されることになる。図には、個々の暗号鍵の格納例として、KeyA〜KeyRが特定のセルに格納された状態が示されている。もちろん、暗号鍵はすべてのセルに格納する必要はなく、必要な暗号鍵が所定のセルに格納されていれば足りる。
ある1つの暗号化プロトコルでは、ある1つのキーバージョン番号が指定され、当該キーバージョン番号をもったセルに格納されている1つもしくは複数の暗号鍵を利用した暗号化処理もしくは復号処理が実行される。図示の例の場合、キーバージョン番号「0x01」,「0x20」,「0x21」,「0x22」,「0x7E」,「0x7F」の各行に何らかの暗号鍵が格納されている状態が示されている。また、図示の例の場合、いずれのキーバージョン番号についても、キーID「0x01」,「0x02」,「0x03」の3箇所のセルにそれぞれ暗号鍵が格納されている。
これは、いずれのキーバージョン番号も、3つの異なる暗号鍵を用いる暗号化プロトコル(たとえば、上述したSCP01,SCP02,SCP03など)に対応したものになっているためである。たとえば、キーバージョン番号「0x20」が指定された場合、キーID「0x01」,「0x02」,「0x03」の各セルに格納されている3つの暗号鍵KeyD,KeyE,KeyFが暗号化処理もしくは復号処理に利用されることになる。別言すれば、特定の暗号化プロトコルに基づく暗号化処理もしくは復号処理には、同一のキーバージョン番号をもつ1つもしくは複数の暗号鍵が利用されることになる。もちろん、合計5個の暗号鍵を必要とする暗号化プロトコルのためには、同一のキーバージョン番号をもつ5個のセルにそれぞれ暗号鍵を用意することになる。
一方、図4(a) は、図3に示す鍵テーブルTの個々のセルに格納されている暗号鍵KeyA〜KeyRの一般的なデータ構造を示す図である。図示された暗号鍵Keyのデータ構造は、上述したICカードについての国際的な標準仕様として定められた暗号鍵Keyの標準フォーマットを示すものであり、先頭から順に、種別情報(key type)A,鍵長(key length)L,鍵値データ(key value)Vを並べたものになっている。ここで、種別情報(key type)Aは、「AES」,「DES」,「RSA」など、当該暗号鍵Keyを用いることを想定している暗号化プロトコルが採用する暗号アルゴリズムの種別を含む情報であり、鍵長(key length)Lは、後続する鍵値データ(key value)Vのデータ長(byte)を示す情報であり、最後の鍵値データ(key value)Vは、暗号化演算に用いられる鍵値データそのものである。
また、図4(b) は、暗号通信路開設コマンドCMDのデータ構造の概要を示す図である。実際のコマンドは、ISOなどの規格(たとえば、ISO7816-4)に準拠した、より複雑なデータ構造を有するものになるが、便宜上、図4(b) には、説明に必要な情報のみを抽出した概念的なデータ構造を示すことにする。図示の例は、上述した暗号化プロトコルSCP01,SCP02,SCP03を採用する場合に用いられている暗号通信路の開設コマンドを示しており、暗号通信路の開設を指示する文字列「INITIALIZE UPDATE」なるコマンド文字列情報(実際には、コマンド「INITIALIZE UPDATE」を意味するインストラクションバイト情報であるが、以下、便宜上、「INITIALIZE UPDATE」なる文字列として説明する)と、特定の暗号鍵の格納場所を示す格納場所指定情報(実際には、特定のキーバージョン番号)と、所定の乱数とによって構成されている。
たとえば、図3に示す鍵テーブルTに格納されている3つの暗号鍵KeyD,KeyE,KeyFを用いた暗号通信路を開設する場合には、文字列「INITIALIZE UPDATE」に「0x20」なるキーバージョン番号を後続させ、更にその後ろに所定の乱数を後続させた暗号通信路開設コマンドCMDがICカードに与えられる。この暗号通信路開設コマンドCMDの最後に付加される乱数は、外部装置がICカードを正規の交信相手であることを認証するために利用される。別言すれば、暗号通信路開設コマンドCMDは、ICカードに対して、暗号通信路の開設処理を実行する指示コマンドとしての役割とともに、所定の乱数に応じた認証コードを返信するよう求める認証コマンドとしての役割も果たす。
図5は、図2に示すSIMカード11(情報処理装置100)に組み込まれた管理プログラムSDと、スマートフォン10(外部装置200)に組み込まれたアプリケーションプログラムAP3と、の間でやりとりされる種々のコマンドおよびこれに対する応答の具体例を示すダイアグラムである。ステップS1〜S6に示すとおり、いずれもスマートフォン10側からSIMカード11側に所定のコマンドを送信し、当該コマンドに対する応答(レスポンス)をSIMカード11側からスマートフォン10側へと返信する、という形態で、両者間の情報のやりとりが行われる。この例の場合、ステップS1〜S4までの情報のやりとりは、暗号化されていない通常の通信路を介して行われるが、ステップS5,S6の情報のやりとりは、管理プログラムSDによって開設された暗号通信路を介して行われる。
まず、ステップS1は、スマートフォン10側からSIMカード11側に「SELECTコマンド」を送信するプロセスである。この「SELECTコマンド」は、「アプリケーション選択コマンド」と呼ぶべきコマンドであり、特定のチャネル番号を指定して、SIMカード11側の特定のアプリケーションプログラム(この場合は、管理プログラムSD)を選択するコマンドである。SIMカード11側では、当該チャネル番号と当該管理プログラムSDとが対応づけられ、以後、同じチャネル番号をもつコマンドが与えられると、当該管理プログラムSDによって処理されることになる。「SELECTコマンド」が正常に受理されると、SIMカード11側からスマートフォン10側に応答が返される。
続く、ステップS2は、「GET DATAコマンド」を送信するプロセスである。なお、ステップS2以降のコマンドには、ステップS1と同じチャネル番号が付与されており、SIMカード11側では、管理プログラムSDによって処理される。この「GET DATAコマンド」は、管理プログラムSDの「データの読出機能」に基づいて、所定のデータをSIMカード11側からスマートフォン10側に読み出すためのコマンドであり、読出対象となるデータを特定する情報が付加されている。管理プログラムSDは、当該コマンドに応じて、SIMカード11内のメモリから指定されたデータを読出し、これを当該コマンドに対する応答としてスマートフォン10側へと返信する。
GlobalPlatform (登録商標)の仕様では、SDプログラムが「データの読出機能」を実行する場合は、暗号通信路を介した情報のやりとりが必須にはなっていない。図5のステップS2のプロセスは、暗号通信路の開設前に暗号通信路を介すことなく情報の読み出しが可能なデータの読出処理が行われた例を示すものである。
続く、ステップS3,S4は、暗号通信路の開設準備を行うプロセスである。まず、ステップS3では、「INITIALIZE UPDATEコマンド」の送信が行われる。このコマンドは、図4(b) に示すデータ構造をもつ「暗号通信路開設コマンド」であり、前述したとおり、「INITIALIZE UPDATE」なるコマンド文字列情報に、キーバージョン番号および乱数を付加した形態をもつ。このコマンドは、スマートフォン10(外部装置200)が、SIMカード11(情報処理装置100)を正規の交信相手として認証するための認証コマンドとしての役割も果たす。
すなわち、「INITIALIZE UPDATEコマンド」を受信したSIMカード11内の管理プログラムSDは、鍵テーブルT1から、指定されたキーバージョン番号に対応する暗号鍵を取り出し、暗号化処理の準備を行うとともに、与えられた乱数に対して所定のアルゴリズムに基づく演算を施し、演算結果を当該コマンドに対する応答として返信する。一方、スマートフォン10内のアプリケーションプログラムAP3は、返信されてきた演算結果が、与えた乱数に対する正しい演算結果であるか否かを検証し、正しい演算結果であった場合に、現在交信中のSIMカード11を正規の交信相手と認証する。
続くステップS4では、「EXTERNAL AUTHENTICATEコマンド」の送信が行われる。このコマンドは、「外部認証コマンド」であり、SIMカード11(情報処理装置100)がスマートフォン10(外部装置200)を正規の交信相手として認証するための認証コマンドである。スマートフォン10は、ステップS3の応答により返信されてきたデータに対して所定のアルゴリズムに基づく演算を施し、演算結果を「EXTERNAL AUTHENTICATE」なるコマンド文字列情報に付加してSIMカード11に送信する。SIMカード11(管理プログラムSD)は、「EXTERNAL AUTHENTICATEコマンド」によって送信されてきた演算結果が、正しい演算結果であるか否かを検証し、正しい演算結果であった場合に、現在交信中のスマートフォン10を正規の交信相手と認証する。
このステップS3,S4による相互認証の具体的なプロセスは、一般に利用されている公知の技術であるため、ここでは詳しい説明は省略する。こうして、SIMカード11とスマートフォン10との間での相互認証が完了すると、両者間に暗号通信路が開設される。図の破線より下に示されたステップS5以降のコマンドは、この暗号通信路を介して与えられることになる。すなわち、ステップS5以降のコマンドの実質的な内容部分は、所定の暗号化プロトコルに基づいて暗号化され、「SCP:Secure Channel Protocol」により保護されたコマンドとして送信される。
なお、現行の規格では、暗号通信路の開設時(「EXTERNAL AUTHENTICATEコマンド」の処理時)に、SCPについてレベルを設定することが可能である。具体的には、「レベル1:コマンド改竄検知用のチェックコード付与」と「レベル2:コマンド改竄検知用のチェックコード付与+コマンドデータフィールドの暗号化」などが定められており、ステップS5以降にやりとりされるコマンドには、開設時に設定されたレベルが適用されることになる。このようなSCPレベルの設定を行った場合、レベル2の設定が行われたときにのみ、ステップS5以降のコマンドのデータフィールドに対して暗号化が行われることになる。なお、ステップS5,S6の例では、コマンドに対する応答については、SCPによる保護を行わず、平文のまま通常の通信路を介して返信するようにしているが、必要があれば、これらの応答についても、暗号通信路を介して返信するようにしてもよい。
<<< §2. 管理プログラムのセキュリティ強度と階層構造 >>>
上述の§1では、情報処理装置100に組み込まれた管理プログラムSDによって、外部装置200との間に暗号通信路を開設して両者間で暗号通信を行うための手順を簡単に説明した。ここでは、この管理プログラムSDによって開設される暗号通信路にセキュリティ強度の相違がある点と、情報処理装置100に複数の管理プログラムSDが階層構造をもって組み込まれる点について説明する。
図6は、現在、ICカードに関する仕様として定められている暗号通信路開設コマンドCMDのデータ構造を示す図である。§1で述べた例の場合、暗号通信路開設コマンドCMDのデータ構造は、図6(a) に示すように、先頭から順に、「コマンド文字列情報」、「格納場所指定情報」、「乱数」を並べたものになり、具体的には、図6(b) に示すように、「INITIALIZE UPDATE」なる文字列を先頭に、「キーバージョン暗号」と「乱数」が後続する書式になる。
前述したように、先頭の「コマンド文字列情報(INITIALIZE UPDATE)」は、当該コマンドが暗号通信路を開設するコマンドであることを示すための文字列である。続く「格納場所指定情報」は、暗号通信路の開設に用いる特定の暗号鍵を指定するための暗号鍵指定情報であり、図3に示すような鍵テーブルTを用いて暗号鍵を格納する場合は「キーバージョン番号」によって構成される。最後の「乱数」は、前述したとおり、スマートフォン10がSIMカード11を正規の交信相手として認証するために利用されるデータである。
図6(a) ,(b) に例示する暗号通信路開設コマンドCMDのデータ構造は、GlobalPlatform (登録商標)や3GPP/ETSIなどの国際的な仕様において、暗号化プロトコルSCP01,SCP02,SCP03として定められているものである。当該仕様には、この他にもいくつかの暗号化プロトコルの仕様が定められており、暗号通信路開設コマンドCMDのデータ構造は、各仕様に応じてそれぞれ異なるデータ構造を有する。たとえば、暗号化プロトコルSCP80については、図6(c) に示すように、「ENVELOPE」なる文字列を先頭におく暗号通信路開設コマンドCMDが定義されており、暗号化プロトコルSCP10については、図6(d) に示すように、「MANAGE SECURITY ENVIRONMENT」なる文字列を先頭におく暗号通信路開設コマンドCMDが定義されている。前述したとおり、これら各コマンドCMDのデータ構造は、説明の便宜上、一部の情報のみを抽出した概念的なデータ構造であり、実際のデータ構造それ自体を示すものではない。
図7は、各暗号化プロトコルに用いられるコマンド文字列情報と暗号アルゴリズムの種別情報との対応関係を示す表である。ここで、表の各欄に示すSCP01,SCP02,SCP03,SCP10,SCP80,SCP81などの文字列は、個々の暗号化プロトコルを特定する情報(本願では、SCP種別と呼ぶ)である。また、表の縦見出しは、各暗号化プロトコルが用いる暗号アルゴリズムの種別を示し、表の横見出しは、各暗号化プロトコルに用いられるコマンド文字列情報を示している。なお、この表における「SCPxx」は、現時点では、GlobalPlatform (登録商標)による仕様化はなされていないが、今後、策定される可能性のある暗号化プロトコルを示している。
このように、現時点において、多数の暗号化プロトコルが定められており、今後も、新たな暗号化プロトコルが追加策定されてゆくものと予想される。また、各暗号化プロトコルが用いる暗号アルゴリズムも多様化してゆくものと予想される。ここで重要な点は、個々の暗号化プロトコルによって、セキュリティ強度に差が生じる点である。たとえば、暗号アルゴリズムに関しては、Triple-DESよりもAESの方が、理論的にセキュリティ強度が高いとされているため、図7に示す例の場合、暗号化プロトコルSCP01,SCP02よりも、SCP03の方がセキュリティ強度が高くなる。
また、同じ暗号アルゴリズムを採用していたとしても、暗号化プロトコルの仕様によってセキュリティ強度に差が生じる。たとえば、図7に示す例の場合、暗号化プロトコルSCP01とSCP02は、いずれもTriple-DESを暗号アルゴリズムとして用いているが、暗号化プロトコルSCP02の方がSCP01よりもセキュリティ強度が高いとされている。
§1で述べたように、一般的なICカードには、少なくとも1組の管理プログラムSD(Security Domain プログラム)が組み込まれており、外部装置との間の暗号通信路は、この管理プログラムSDによって開設される。管理プログラムSDは、図7の表に示されているような多様な暗号化プロトコルのうちの任意の1つもしくは複数をサポートするように構成されている。したがって、同一の情報処理装置100内に複数の管理プログラムSDが組み込まれている場合、個々の管理プログラムSDごとに、それぞれ採用する暗号化プロトコルが異なることも少なくない。たとえば、第1の管理プログラムSDは暗号化プロトコルSCP81のみを採用しているが、第2の管理プログラムSDは暗号化プロトコルSCP01,SCP02の双方を採用している、といった具合である。
当然、どの暗号化プロトコルを採用するかによって、管理プログラムSDによって開設される暗号通信路のセキュリティ強度に差が生じることになる。もちろん、外部装置200側のアプリケーションプログラムAP3は、情報処理装置100内の特定の管理プログラムSDに対して暗号通信路の開設を要求して通信を行うので、たとえ、セキュリティ強度の低い暗号通信路を介して情報のやりとりが行われることになったとしても、当該アプリケーションプログラムAP3は、それを承知の上で、当該特定の管理プログラムSDを指定しているのであるから、それ自体が重大な問題になるわけではない。
図8(a) は、SIMカード11(情報処理装置100)内に構築されるアプリケーションプログラムの階層構造を示す図である。この図において、階層構造の最上位に配置されているISD(Issuer Security Domain)は、発行者SDと呼ばれる管理プログラムであり、このSIMカード11の工場出荷時に書込まれるプログラムである。図示の例の場合、このISDの下位にSSD1,SSD2,AP01,AP02なるプログラムが配置されており、更に、SSD1の下位にAP11,AP12が配置され、SSD2の下位にSSD3,AP21,AP22,AP23が配置され、更に、SSD3の下位にAP31,AP32が配置されている。
この図8(a) にブロックで示されている各プログラムは、いずれもSIMカード11(情報処理装置100)内に組み込まれているアプリケーションプログラムである。ここで、SSD1,SSD2,SSD3(Supplemental Security Domain)は、ISDと同様に管理プログラムであるが、ISDが、工場出荷時に書込まれる最上位の管理プログラムであるのに対して、SSD1,SSD2,SSD3は、ISDもしくは別なSSDの下位に配置されるプログラムになる。
前述したように、管理プログラムも、アプリケーションプログラムの1つであることに変わりはないが、階層構造上、自己の下位に別なアプリケーションプログラム(一般アプリケーションプログラムであってもよいし、別な管理プログラムであってもよい)を配置して管理下におくことができる。したがって、図示の例の場合、管理プログラムSSD1の下位には、2組の一般アプリケーションプログラムAP11,AP12が配置されているだけであるが、管理プログラムSSD2の下位には、1組の別な管理プログラムSSD3と3組の一般アプリケーションプログラムAP21,AP22,AP23が配置され、更に、管理プログラムSSD3の下位には、2組の一般アプリケーションプログラムAP31,AP32が配置されている。
管理プログラムSDには、SIMカード11(情報処理装置100)全体を管理する機能と、下位のアプリケーションプログラムを管理する機能とが備わっている。具体的には、一般的なSDプログラムには、次のような機能が用意されている。これらの機能の一覧表は、図8(b) にも掲載されている。
<機能1>ICカードのライフサイクル管理
<機能2>アプリケーションプログラムのライフサイクル管理
<機能3>アプリケーションインスタンスのライフサイクル管理
<機能4>アプリケーションプログラムのロード
<機能5>アプリケーションインスタンスの生成(インストール)
<機能6>アプリケーションプログラムやインスタンスの削除
<機能7>アプリケーション向け発行データの書込み
<機能8>データの読出し
<機能9>セキュアな通信路の確保
もっとも、上記9つの機能は、必ずしもすべての管理プログラムSDに備わっているものではない。通常、最上位階層のISDは、すべての機能を備えているが、下位階層におかれるSSDについては、いくつかの機能が制限される場合もある。たとえば、上記機能1「ICカードのライフサイクル管理」は、通常、ISDにのみ備わっている。また、上記機能のいくつかは、自己の下位階層に配置されているアプリケーションプログラム(自己の管理下にあるアプリケーションプログラム)のために提供する機能である。
以下、上記9つの機能のうち、本発明に関連するいくつかの機能について簡単に説明しておく。まず、管理プログラムSDが、自己の管理下にアプリケーションプログラムを組み込んで、動作可能となるようにするには、上記機能4により、アプリケーションプログラムをロードし、続いて、上記機能5により、アプリケーションプログラムのインスタンスを生成し、更に、上記機能7により、アプリケーション向け発行データの書込みを行うことになる。
より具体的に説明すれば、機能4「アプリケーションプログラムのロード」の処理は、外部装置から与えられるロードコマンドに応じて、アプリケーションプログラムのパッケージをメモリ上に格納する処理である。また、機能5「アプリケーションプログラムのインスタンスの生成」の処理は、いわゆるインストール処理であり、外部装置から与えられるインストールコマンドに応じて、ロード済みのアプリケーションプログラムのパッケージをメモリ上に展開し、アプリケーションインスタンスを生成する処理である。アプリケーションプログラムの実行は、このインスタンス化されたプログラムコードを実行する処理ということになる。
そして、機能7「アプリケーション向け発行データの書込み」の処理は、当該アプリケーションプログラムの実行に必要なデータ(発行データ)をメモリ上に格納する処理である。たとえば、クレジット決済機能をもったアプリケーションプログラムの場合、プログラムを実行可能にするためには、クレジットカード番号やユーザの個人情報などを発行データとして書き込む処理を行う必要がある。また、管理プログラムSDの場合、プログラムを実行可能にするためには、暗号通信路の開設に必要な鍵情報を発行データとして書き込む処理(鍵テーブルTへの暗号鍵の書込処理)を行う必要がある。
最後の機能9「セキュアな通信路の確保」の処理は、§1で述べたように、「SCP:Secure Channel Protocol」と呼ばれる所定の暗号化プロトコルに基づいて、外部装置200との間にセキュアな暗号通信路を開設して暗号通信を行う機能である。このような機能を実現するため、図2に示すように、管理プログラムSD内には、暗号通信路開設ルーチンR1と鍵テーブルT1とが組み込まれている。暗号通信路開設ルーチンR1は、上記機能5「アプリケーションプログラムのインスタンスの生成」によって組み込まれることになり、鍵テーブルT1の内容は、上記機能7「アプリケーション向け発行データの書込み」によって書込まれることになる。
なお、GlobalPlatform (登録商標)の仕様では、管理プログラムSDが前述した「機能1〜機能7」を行う場合は、暗号通信路(機能9によって開設されたセキュアな通信路)を介して情報のやりとりを実行することが必須とされているが、「機能8:データの読出し」については暗号通信路の開設は必須にはなっていない。図5のステップS2のプロセスは、暗号通信路の開設前に暗号通信路を介すことなく情報のやり取りが可能なデータの読出処理が行われた例を示すものである。これに対して、機能4(ロード機能),機能5(インストール機能),機能7(発行機能)等の処理を実行させるためのコマンドは、図5のステップS5,S6のように、SCPにより保護されたコマンドとして、暗号化された状態で送信されることになる。
図9は、工場出荷時の情報処理装置100(SIMカード11)と外部装置200(スマートフォン10または外部サーバ20)との間の情報通信の態様の一例を示すブロック図である。図示の例の場合、情報処理装置100には、工場出荷時において、OSプログラムと、ISD(発行者SD:最上位階層の管理プログラム)と、2組のアプリケーションプログラムAP01,AP02とが格納され、動作可能な状態になっている。ここで、管理プログラムISDには、暗号通信路開設ルーチンR00と鍵テーブルT00とが組み込まれており、これを利用して、所定の暗号化プロトコルに基づく暗号通信路の開設を行うことが可能である。
ここでは、説明の便宜上、図9に示すような外部装置200(スマートフォン10または外部サーバ20)を用意した場合を考えてみよう。この外部装置200に用意されているアプリケーションプログラムAP(ISD)は、情報処理装置100内の管理プログラムISDとの間に暗号通信路を開設するためのプログラムであり、管理プログラムISDと同様に暗号通信路開設ルーチンR00と鍵テーブルT00とが組み込まれている。一方、図示の外部装置200には、アプリケーションプログラムAP(SSD1)も用意されている。このプログラムAP(SSD1)は、情報処理装置100内に後で組み込まれる管理プログラムSSD1との間に暗号通信路を開設するためのプログラムであり、暗号通信路開設ルーチンR10と鍵テーブルT10とが組み込まれている。
ここで、図9に示す工場出荷時の情報処理装置100には、管理プログラムISDは組み込まれているが、管理プログラムSSD1はまだ組み込まれていない。すなわち、この図9に示す情報処理装置100の階層構造は、図8の階層構造図におけるISD,AP01,AP02のブロックのみが存在している状態ということができる。図8の階層構造図は、図9に示す情報処理装置100を入手した利用者が、様々なアプリケーションプログラムを組み込む作業を行った後の状態ということになる。
図10は、利用開始時の情報処理装置100(SIMカード11)と外部装置200(スマートフォン10または外部サーバ20)との間の情報通信の態様の一例を示すブロック図である。図10に示す情報処理装置100には、新たに管理プログラムSSD1が格納され、動作可能な状態になっている。図示の管理プログラムSSD1には、暗号通信路開設ルーチンR10と鍵テーブルT10とが組み込まれており、これを利用して、外部装置200側に用意されているアプリケーションプログラムAP(SSD1)との間に暗号通信路を開設して暗号通信を行うことが可能である。
なお、GlobalPlatform (登録商標)の仕様では、SIMカード11内に複数の管理プログラムSDを組み込む際には、各管理プログラムSDが利用する鍵テーブルTはそれぞれ別個のテーブルとして格納される。したがって、図10に示す例の場合、鍵テーブルT00と鍵テーブルT10とは別個の独立した鍵テーブルになっている。
もっとも、本発明を実施する上では、必ずしも各管理プログラムSDが利用する鍵テーブルTを別個のテーブルとする必要はなく、たとえば、図3に示すような共通の鍵テーブルTを設けておき、鍵テーブルT00,T10は、この鍵テーブルTの一部の領域として構成してもかまわない。たとえば、鍵テーブルT00はキーバージョン「0x20」の行の領域によって構成し、鍵テーブルT10は、キーバージョン「0x21」の行の領域によって構成した場合、鍵テーブルT00に記録されている暗号鍵は、KeyD,KeyE,KeyF、鍵テーブルT10に記録されている暗号鍵は、KeyG,KeyH,KeyIということになる。
情報処理装置100を、図9に示す状態から図10に示す状態にもってゆくには、図8(a) に示す管理プログラムISDの下位階層、すなわち、管理プログラムISDの管理下に、新たな管理プログラムSSD1を組み込む処理を行う必要がある。そのためには、まず、外部装置200から情報処理装置100の管理プログラムISDに対して、暗号通信路開設コマンドを与え、管理プログラムISDの機能9「セキュアな通信路の確保」の処理によって両装置間に暗号通信路を開設した上で、この暗号通信路を介して、次のようなコマンドを与える作業を行えばよい。
まず、外部装置200から情報処理装置100の管理プログラムISDに対して、ロードコマンドを与え、管理プログラムISDによる機能4「アプリケーションプログラムのロード」の処理を実行させる。この処理により、新たな管理プログラムSSD1を構成するプログラムパッケージのバイナリデータが情報処理装置100内のメモリに格納される。このプログラムパッケージは、インストール前のプログラムであり、CPUがそのまま実行可能な状態にはなっていない。
続いて、外部装置200から情報処理装置100の管理プログラムISDに対して、インストールコマンドを与え、管理プログラムISDによる機能5「アプリケーションプログラムのインスタンスの生成」の処理を実行させる。この処理により、メモリに格納されていたプログラムパッケージがメモリ上に展開され、管理プログラムSSD1を構成するアプリケーションインスタンスが生成される。このアプリケーションインスタンスは、CPUによって実行可能なルーチンではあるが、管理プログラムSSD1としての動作を行うには、まだ、発行データ(この場合、暗号鍵)が不足している。別言すれば、この時点では、図10のSSD1のブロック内に描かれている暗号通信路開設ルーチンR10はアプリケーションインスタンスとしてメモリ上に格納された状態になっているが、鍵テーブルT10(の内容となる暗号鍵)は、まだメモリ上に格納されていない。
そこで最後に、外部装置200から情報処理装置100の管理プログラムISDに対して、発行データの書込コマンドを与え、管理プログラムISDによる機能7「アプリケーション向け発行データの書込み」の処理(鍵書込処理)を実行させる。この処理により、管理プログラムSSD1の動作に必要な発行データ(暗号鍵)がメモリに書込まれる。すなわち、図10に示す鍵テーブルT10の内容となる暗号鍵が発行データとしてメモリに書込まれることになる。これにより、新たな管理プログラムSSD1が、管理プログラムISDの管理下に、動作可能な状態で組み込まれたことになる。したがって、管理プログラムSSD1は、必要に応じて、暗号通信路開設ルーチンR10および鍵テーブルT10を用いて、機能9「セキュアな通信路の確保」の処理を実行することができる。
図8(a) の階層構造図に示されている管理プログラムSSD2も、同様の手順によって、管理プログラムISDの管理下に動作可能な状態で組み込まれる。そして今度は、管理プログラムSSD1に暗号通信路を開設させた上で、同様の手順によって、その管理下にアプリケーションプログラムAP11,AP12を動作可能な状態で組み込むことができる。また、管理プログラムSSD2に暗号通信路を開設させた上で、同様の手順によって、その管理下にアプリケーションプログラムAP21〜AP23および管理プログラムSSD3を動作可能な状態で組み込むことができる。更に、管理プログラムSSD3に暗号通信路を開設させた上で、その管理下にアプリケーションプログラムAP31,AP32を動作可能な状態で組み込むことができる。
このような手順が行われることに留意すると、結局、ある1つの管理プログラムを指定して、その管理下に別なアプリケーションプログラムを組み込む処理を行う場合、当該指定管理プログラムの機能9「セキュアな通信路の確保」を利用して暗号通信路を開設し、当該暗号通信路を介して、当該指定管理プログラムに、機能4「アプリケーションプログラムのロード」,機能5「アプリケーションプログラムのインスタンスの生成(インストール)」,機能7「アプリケーション向け発行データの書込み」の処理を行わせるためのコマンドが与えられることになる。要するに、ある管理プログラムの下位階層に、新たなアプリケーションプログラムを組み込む場合、当該管理プログラムが開設した暗号通信路を介して、新たなアプリケーションプログラムのためのロード処理、インストール処理、発行処理を指示するコマンドが与えられることになる。
<<< §3. ICカードに与える具体的なコマンド >>>
図11は、GlobalPlatform (登録商標)の仕様に準拠したICカードに与える具体的なコマンドの書式例を示す図である。もちろん、ICカード用のコマンドには、この他にも様々なコマンドが用いられるが、図11(a) 〜(h) に示すコマンドは、§1,§2の説明で用いたコマンドおよび§4以降で述べる具体的な実施形態に関連したコマンドである。以下、これら各コマンドの書式および当該コマンドに応じてICカード側で実行される処理内容について簡単に説明を行う。なお、図11に示す各コマンド書式のデータ構造は、図6に示すコマンド書式のデータ構造と同様に、一部の情報のみを抽出した概念的なデータ構造であり、実際のデータ構造それ自体を示すものではない。
<3−1. アプリケーション選択コマンド>
まず、図11(a) に示す「アプリケーション選択コマンド」について説明する。このコマンドは、図5のダイアグラムのステップS1で説明したコマンドであり、特定のチャネル番号を指定して、情報処理装置100側の特定のアプリケーションプログラムを選択するコマンドである。図示のとおり、「SELECT (#n)+アプリ名」というデータ構造を有し、チャネル番号#nを指定して、「アプリ名」で特定されるアプリケーションプログラムを選択する指示である。
チャネル番号#nは、外部装置200から情報処理装置100に対してコマンドを与える際に、当該コマンドがどのアプリケーションプログラム宛のコマンドであるかを識別させるために用いられる。情報処理装置100には、複数のアプリケーションプログラムが格納されているため、外部装置から与えるコマンドのそれぞれにチャネル番号#nを付加して識別できるようにする必要がある。「アプリケーション選択コマンド」は、特定のアプリケーションプログラムに特定のチャネル番号#nを対応づけるための初期設定を行う役割を果たす。
たとえば、「SELECT (#3)+ISD」というアプリケーション選択コマンドを情報処理装置100に与えると、管理プログラムISDがチャネル番号#3に対応づけられる。具体的には、当該コマンドを受信した情報処理装置100内のOSプログラムが、管理プログラムISDがチャネル番号#3に対応づけられた旨の記録を行うことになる。以後、チャネル番号#3が付与されたコマンドは、すべて管理プログラムISD宛のコマンドとして取り扱われ、管理プログラムISDによって実行されることになる。
<3−2. アプリケーションロードコマンド>
次に、図11(b) に示す「アプリケーションロードコマンド」について説明する。このコマンドは、図8(b) に示すSDプログラムの機能4を実行させるためのコマンドであり、特定の管理プログラムSDの管理下に、新たなアプリケーションプログラムを組み込む際の最初のステップとして実行されるコマンドである。実際には、図示のとおり、2つのコマンドによって構成される。
第1段階のロードコマンドは、「INSTALL for load (#n)+パッケージ名」というデータ構造を有し、チャネル番号#nを指定して、「パッケージ名」で特定されるパッケージをロードする旨の指示を伝えるコマンドになる。第2段階のロードコマンドは、「LOAD (#n)+バイナリデータ」というデータ構造を有し、チャネル番号#nを指定して、後続するバイナリデータのパッケージを、メモリにそのまま格納する旨の指示を伝えるコマンドになる。
ここでは、上位管理プログラムISDの管理下に、新たに下位管理プログラムSSD1を組み込む場合の手順を例にとって、この「アプリケーションロードコマンド」を説明してみる。なお、説明の便宜上、上述した「SELECT (#3)+ISD」というアプリケーション選択コマンドによって、既に、管理プログラムISDがチャネル番号#3に対応づけられているものとしよう。この場合、第1段階のロードコマンドとしては「INSTALL for load (#3)+PackSSD1」のようなコマンドを与え、第2段階のロードコマンドとしては「LOAD (#3)+バイナリデータ」のようなコマンドを与えることになる。
上記2段階からなるアプリケーションロードコマンドには、いずれもチャネル番号「#3」が付与されたコマンドなので、「#3」への対応づけがなされている上位管理プログラムISDによって処理されることになる。上位管理プログラムISDは、第2段階のロードコマンドに含まれていた「バイナリデータ」の部分をそのままメモリの所定箇所に格納し、当該「バイナリデータ」が「PackSSD1」なるパッケージ名であるかの確認を行う。ここで、「バイナリデータ」の実体は、新たに組み込まれる下位管理プログラムSSD1用のプログラムデータである。
<3−3. アプリケーションプログラムのインストールコマンド>
続いて、図11(c) に示す「アプリケーションプログラムのインストールコマンド」について説明する。このコマンドは、図8(b) に示すSDプログラムの機能5を実行させるためのコマンドであり、特定の管理プログラムSDの管理下に、新たなアプリケーションプログラムを組み込む際の第2のステップとして実行されるコマンドである。
ここで言うアプリケーションプログラムのインストールとは、アプリケーションのロードによってメモリ上に格納された状態になっているアプリケーションプログラムのパッケージを、メモリ上にアプリケーションインスタンスとして展開し、CPUが実行できる状態にする処理である。別言すれば、アプリケーションプログラムのインストールとは、既にロードされているパッケージをメモリ上に展開して、アプリケーションインスタンスを生成する処理ということになる。
このアプリケーションプログラムのインストールコマンドは、図示のとおり、「INSTALL for install (#n)+パッケージ名+アプリ名+パラメータ」というデータ構造を有し、チャネル番号#nを指定して、「パッケージ名」で特定されるパッケージを展開して、アプリケーションインスタンスを生成し、当該アプリケーションインスタンスに「アプリ名」で指定される名称を付与する旨の指示を伝えるコマンドになる。なお、GlobalPlatform の仕様に準拠したインストールコマンドでは、「パッケージ名」の後に「クラス名」なるデータを配置し、当該「クラス名」で特定されるアプリケーションインスタンスが生成されることになるが、本願では便宜上、「クラス名」の説明については省略する。
なお、このインストールコマンドに付随する「パラメータ」の部分には、機能指定情報が含まれている。この機能指定情報は、インストール対象となるアプリケーションプログラムが実行可能な処理機能を指定する情報であり、インストール後、当該アプリケーションプログラムは、この機能指定情報で指定された所定の処理機能を実行することが可能になる。別言すれば、この機能指定情報で指定されなかった処理機能については、実行することができなくなる。これは、機能指定情報で指定されなかった処理機能については、インストール時に実行制限がかけられるためである。
アプリケーションロードコマンドによってロードされた「バイナリデータ」には、元来、様々な処理機能を実行するためのプログラムルーチンが含まれており、インストールされたアプリケーションプログラム自体は、様々な処理機能を有している。ただ、インストール処理が完了した時点では、これらの処理機能のうち、機能指定情報で指定された機能だけが実行可能な状態になる。このように、指定機能だけが実行可能となるようにするのは、セキュリティ上の配慮のためである。すなわち、インストール対象となるアプリケーションプログラムに与えるべき権限に応じて、必要な処理機能だけが実行可能となるようなインストール処理が行われることになる。
前述したコマンド書式例(b) についての説明では、上位管理プログラムISDの管理下に、新たに下位管理プログラムSSD1を組み込む場合を例にとって、「INSTALL for load (#3)+PackSSD1」および「LOAD (#3)+バイナリデータ」なるアプリケーションロードコマンドにより、情報処理装置100のメモリ内に、「PackSSD1」なるパッケージをロードする手順を述べた。ここでは、その続きとして、「INSTALL for install (#3)+PackSSD1+SSD1+パラメータ」のようなアプリケーションプログラムのインストールコマンドが与えられた場合の具体的な処理を説明する。このコマンドにもチャネル番号「#3」が付与されているため、「#3」に対応づけられた上位管理プログラムISDによって処理される。
そこで、管理プログラムISDは、図8(b) に示すSDプログラムの機能5により、「PackSSD1」なるパッケージ名で既にロードされているアプリケーションプログラムパッケージをメモリ上に展開してアプリケーションインスタンスを作成するインストール処理を実行する。こうしてインストールされた新たなアプリケーションプログラムには、指定されたアプリ名「SSD1」が付与され、階層構造上、管理プログラムISDの管理下におかれることになる。
GlobalPlatform (登録商標)の仕様では、このインストールの処理を行う際に、「パラメータ」内の機能指定情報によって指定された特定の暗号化プロトコルを利用した暗号通信路開設機能が設定されることになる。通常、パッケージとしてロードされた状態の管理プログラムには、複数の暗号化プロトコルに基づく暗号通信路開設ルーチンが含まれているが、インストール時には、上記「パラメータ」内の機能指定情報による指定を行うことにより、特定の暗号化プロトコルのみが選択され、選択された暗号化プロトコルに関連する処理機能だけが実行可能となる状態でインストールされることになる。なお、後述するように、機能指定情報では、暗号通信路開設機能以外にも様々な処理機能が指摘でき、このような様々な処理機能も、必要に応じて、実行可能な状態でインストールされる。
たとえば、「PackSSD1」なるパッケージには、暗号化プロトコル「SCP01(Triple-DES)」と「SCP02(Triple-DES)」との2通りについての暗号通信路開設ルーチンが含まれていたものとしよう。この場合、アプリケーションプログラムのインストールコマンドのパラメータ(機能指定情報)において、「SCP01(Triple-DES)」を指定すれば、「SCP01(Triple-DES)」用の暗号通信路開設ルーチンがインストールされ、以後、当該管理プログラムSSD1は、暗号化プロトコル「SCP01(Triple-DES)」を用いて暗号通信路の開設を行うことになる。一方、パラメータ(機能指定情報)において、「SCP02(Triple-DES)」を指定すれば、「SCP02(Triple-DES)」用の暗号通信路開設ルーチンがインストールされ、以後、当該管理プログラムSSD1は、暗号化プロトコル「SCP02(Triple-DES)」を用いて暗号通信路の開設を行うことになる。
<3−4. アプリケーション向け発行データの書込コマンド>
ここでは、図11(d) に示す「アプリケーション向け発行データの書込コマンド」について説明する。このコマンドは、図8(b) に示すSDプログラムの機能7を実行させるためのコマンドであり、所定のアプリケーションプログラムのために、発行データを書き込むためのコマンドである。
既に述べたとおり、管理プログラムを含めて、多くのアプリケーションプログラムは、インストールしただけでは正常な動作を行うことができず、実行に必要なデータ(発行データ)をメモリ上に格納する発行処理を行う必要がある。たとえば、クレジット決済機能をもったアプリケーションプログラムの場合、プログラムを実行可能にするためには、クレジットカード番号やユーザの個人情報などを発行データとして書き込む発行処理を行う必要がある。同様に、管理プログラムSDの場合は、プログラムを実行可能にするためには、暗号通信路の開設に必要な暗号鍵を発行データとして書き込む発行処理を行う必要がある。
図11(d) には、このような発行データの書込みを行うための2通りの書込コマンドが示されている。書込コマンドその1は、発行データを書き込むための汎用の書込コマンドであり、「STORE DATA (#n)+発行データ」というデータ構造を有し、チャネル番号#nを指定して、「発行データ」の部分のデータを発行データとして書き込む旨の指示を伝えるコマンドになる。このコマンドは、管理プログラムのみならず、一般アプリケーションプログラムに対しても与えることができる汎用コマンドである。上述したように、クレジット決済機能をもったアプリケーションプログラムに対して与えれば、「発行データ」としてクレジットカード番号、ユーザの個人情報や決済処理に用いる鍵データなどを書き込むことができる。また、管理プログラムSDに対して与えれば、「発行データ」として暗号通信路の開設に必要な鍵データなどを書き込むことができる。図3に例示した鍵テーブルTの内容も、「発行データ」として書き込むことができる。
一方、書込コマンドその2は、鍵データ(暗号鍵)を書き込むための専用の書込コマンドであり、「PUT KEY (#n)+鍵データ」というデータ構造を有し、チャネル番号#nを指定して、「鍵データ」の部分のデータを図3に例示した鍵テーブルT(インストール時に空の格納場所のみが用意されている)に書き込む旨の指示を伝えるコマンドになる。図3に例示した鍵テーブルTの内容は、上述した書込コマンドその1によって発行データとして書き込むこともできるし、書込コマンドその2によって鍵データとして書き込むこともできる。
前述したコマンド書式例(b) および(c) の説明では、上位管理プログラムISDの管理下に、新たに下位管理プログラムSSD1を組み込む場合を例にとって、管理プログラムSSD1をロードし、インストールする段階までを説明した。こうしてインストールされた管理プログラムSSD1には、鍵テーブルT用の格納場所が確保されているものの、その中身は空のままであり、鍵データの書込みを行わない限り、暗号通信路の開設を行うことはできない。そこで、下位管理プログラムSSD1の組込処理の最終段階として、発行データの書込コマンドを与えて鍵データを鍵テーブルTに書き込む必要がある。
書込コマンドその1を用いて鍵データの書込みを行う場合は、「STORE DATA (#n)+鍵データ」なる発行データの書込コマンドを与えればよい(鍵データが発行データになる)。後に詳述するが、このコマンドにおけるチャネル番号「#n」は、上位管理プログラムISDを指定する番号でもよいし、下位管理プログラムSSD1を指定する番号でもよい。すなわち、後に説明する「(h) 発行データ書込対象指定コマンド」によって予め書込対象を指定しておくことにより、当該コマンドを実行する管理プログラムは、与えられた書込データを指定された書込対象についての鍵データとして書き込むことができる。したがって、上例の場合、鍵データは、下位管理プログラムSSD1用の鍵データとして書き込むことができる。
一方、書込コマンドその2を用いて鍵データの書込みを行う場合は、「PUT KEY (#n)+鍵データ」なる発行データの書込コマンドを与えればよい。このコマンドは、当該コマンドを受信した管理プログラム自身に、自分が使用する鍵データの書込処理を実行させるためのコマンドである。したがって、上例の場合、このコマンドにおけるチャネル番号「#n」は、下位管理プログラムSSD1を指定する番号になり、鍵データは、下位管理プログラムSSD1用の鍵データとして書込まれる。
書込コマンドその1の一般書式は、「STORE DATA (#n)+発行データ」なる形式を採っているが、GlobalPlatform (登録商標)の仕様によると、発行データとして鍵データを用いる場合には、発行データの部分に所定の指定子を用いて鍵データであることを明示する規則になっている。したがって、発行データの部分を鍵データとする「STORE DATA (#n)+鍵データ」なる形式の書込コマンドを受信した場合、当該書込コマンドが鍵データの書込コマンドであることを認識することができる。一方、書込コマンドその2は、鍵データの書込専用のコマンドであるから、当該書込コマンドを受信した時点で、鍵データの書込コマンドであることを認識することができる。
なお、図3に示すような二次元マトリックスのセルの集合体からなる鍵テーブルTに鍵データを書き込む場合は、格納位置となるセルを特定する必要がある。個々のセルは、キーバージョン番号とキーIDとによって特定されるが、キーIDについては、たとえば図示の例のように、「0x01となるセルを先頭として順番に格納する」というような格納ルールを定めておけば、キーバージョン番号を特定するだけで鍵データの書込位置を特定することができる。この場合、書込コマンドには、書込位置を指定する書込場所指定情報として、キーバージョン番号を特定する情報を含ませておけばよい。
<3−5. 暗号通信路開設コマンド>
続いて、図11(e) に示す「暗号通信路開設コマンド」について説明する。このコマンドは、図8(b) に示すSDプログラムの機能9を実行させるためのコマンドであり、特定の管理プログラムSDに対して、暗号通信路を開設させるためのコマンドである。この暗号通信路開設コマンドについては、既に、図5のダイアグラムのステップS3で説明を行い、その書式については、既に、図6を参照して説明したとおりである。
すなわち、この暗号通信路開設コマンドは、図示のとおり、「INITIALIZE UPDATE (#n)+パラメータ」というデータ構造を有し、チャネル番号#nで指定される管理プログラムSDに対して、暗号通信路を開設する指示を与えるとともに、外部装置200が、情報処理装置100を正規の交信相手として認証するために用いるレスポンスを要求するコマンドである。
前述したとおり、この暗号通信路開設コマンドには、パラメータとして、キーバージョン番号および乱数が付加されている。管理プログラムSDは、図3に示す鍵テーブルTからコマンドに付加されているキーバージョン番号で特定される暗号鍵を取り出し、取り出した暗号鍵と所定の暗号化アルゴリズムを用いて、外部装置200との間に暗号通信路を開設する処理を行い、更に、コマンドに付加されている乱数に対して所定のアルゴリズムに基づく演算を施し、演算結果を当該コマンドに対するレスポンスとして返信する。
<3−6. 外部認証コマンド>
続いて、図11(f) に示す「外部認証コマンド」について説明する。このコマンドは、チャネル番号#nで指定される管理プログラムSDが、現在通信を行っている外部装置200を正規の交信相手として認証するためのコマンドであり、既に、図5のダイアグラムのステップS4で説明を行ったものである。
§3−5で述べたとおり、暗号通信路開設コマンド「INITIALIZE UPDATE (#n)+パラメータ」は、暗号通信路を開設する指示を与えるとともに、外部装置200が、情報処理装置100を正規の交信相手として認証するために用いるレスポンスを要求するコマンドである。外部装置200は、当該レスポンスが正当なものであれば、情報処理装置100を正規の交信相手と判断する。
ここで説明する外部認証コマンドは、図示のとおり、「EXTERNAL AUTHENTICATE (#n)+ホスト認証コード」というデータ構造を有し、チャネル番号#nを指定して、外部装置200を正規の交信相手として認証するためのホスト認証コードが付加されている。情報処理装置100は、当該ホスト認証コードが正当なものであれば、外部装置200を正規の交信相手と判断する。
このように、外部認証コマンド「EXTERNAL AUTHENTICATE (#n)+ホスト認証コード」は、暗号通信路開設コマンド「INITIALIZE UPDATE (#n)+パラメータ」に続いて与えられるコマンドであり、両者によって、情報処理装置100と外部装置200との間に相互認証が行われることになる。
<3−7. 管理プログラム変更コマンド>
次に、図11(g) に示す「管理プログラム変更コマンド」について説明する。このコマンドは、管理プログラムの階層構造を変更するために用いられるコマンドである。図8(a) には、アプリケーションプログラムの階層構造の一例を示したが、管理プログラム変更コマンドを用いると、このような階層構造の変更を行うことができる。
この管理プログラム変更コマンドは、図11(g) に示すとおり、「INSTALL for extradition (#n)+新管理プログラム名+移動対象アプリ名」というデータ構造を有し、チャネル番号#nによって特定の管理プログラムSDを指定して、当該管理プログラムSDに対して、現時点で自己の管理下にある移動対象となるアプリケーションプログラムを、新たな管理プログラムの管理下に移動させる旨の指示を伝えるコマンドになる。
たとえば、図8(a) に示す階層構造において、管理プログラムSSD3を管理プログラムSSD2の管理下から、管理プログラムSSD1の管理下へと移動させる場合を考えてみる。この場合、現在の上位管理プログラムSSD2に対して、「INSTALL for extradition (#n)+SSD1+SSD3」という管理プログラム変更コマンドを与えることになる。その結果、現在の上位管理プログラムSSD2は、移動対象となる下位管理プログラムSSD3を、移動先となる新たな上位管理プログラムSSD1の管理下へ移動させる処理を実行する。このとき、管理プログラムSSD3の更に下層の一般アプリケーションプログラムAP31,AP32も一緒に移動する。
このような移動は、管理プログラムSSD1について、ロード機能やインストール機能が制限されていた場合に行われることが多い。この場合、管理プログラムSSD1は、自己の下位に管理プログラムSSD3を直接インストールすることができないので、とりあえず、インストール機能を有する管理プログラムSSD2が自己の下位にインストールし、これを管理プログラムSSD1の下位に移動した後で発行データ(暗号データ)を書き込む、という手順を踏むことになる。すなわち、管理プログラムSSD3についての発行データの書込処理は、移動先である管理プログラムSSD1が開設した暗号通信路を介して行うことになる。
結局、この管理プログラム変更コマンドの実体は、インストールコマンドと同様に、上位の管理プログラムの管理下に下位の管理プログラムを配置するためのコマンドということになる。そこで、本願における「インストールコマンド」には、§3−3で述べたアプリケーションプログラムのインストールコマンド(コマンド(c) )だけでなく、ここで述べた管理プログラム変更コマンド(コマンド(g) )も含まれるものとする。
<3−8. 発行データ書込対象指定コマンド>
最後に、図11(h) に示す「発行データ書込対象指定コマンド」について説明する。§3−4では、「発行データの書込コマンドその1」についての説明を行ったが、ここで述べる「発行データ書込対象指定コマンド」は、「発行データの書込コマンドその1」を与える前に、予め発行データの書込対象を指定しておくためのコマンドである。
この発行データ書込対象指定コマンドは、図11(h) に示すとおり、「INSTALL for personalization (#n)+発行対象アプリ名」というデータ構造を有し、チャネル番号#nによって特定の管理プログラムSDを指定して、当該管理プログラムSDに対して、「発行対象アプリ名」として指定されたアプリケーションプログラムを発行データの書込対象として指定するコマンドになる。
ここでも、上位管理プログラムISDの管理下に、新たに下位管理プログラムSSD1を組み込む場合を例にとって以下の説明を行うことにする。前述したとおり、上位管理プログラムISDの下位階層に管理プログラムSSD1をロードし、インストールする段階までが完了すれば、あとは最終段階として、下位管理プログラムSSD1について鍵データの書込みを行うだけである。このとき、図11(d) に示す書込コマンドその1を用いて鍵データの書込みを行うには、下位管理プログラムSSD1に対して「STORE DATA (#n)+鍵データ」なる発行データの書込コマンドを与え、下位管理プログラムSSD1に鍵データの書込処理を実行させる必要がある。
ところが、発行データ書込対象指定コマンドを用いれば、上位管理プログラムISDに対して「STORE DATA (#n)+鍵データ」なる発行データの書込コマンドを与えつつ、実際には、当該書込コマンドを下位管理プログラムSSD1に引き渡し、下位管理プログラムSSD1に実行させることが可能になる。そのためには、上位管理プログラムISDに対して「STORE DATA (#n)+鍵データ」なる発行データの書込コマンドを与える前に、上位管理プログラムISDに対して「INSTALL for personalization (#n)+SSD1」という発行データ書込対象指定コマンドを与えておくようにし、後続する発行データの書込コマンドについての鍵データの書込対象が下位管理プログラムSSD1である旨の指定を行っておけばよい。
<<< §4. 本発明が解決すべき課題 >>>
以上、§1〜§3において、GlobalPlatform (登録商標)の仕様に準拠した一般的なICカードの基本構成および管理プログラムの基本機能についての説明を行った。これらの説明を踏まえて、ここでは、本発明が解決すべき課題を具体的に述べておく。
図12は、本発明に係る情報処理装置100の基本構成と、外部装置200との間の情報通信の態様を示すブロック図である。ここでも、§1〜§3における説明と同様に、情報処理装置100が、スマートフォン10に装着されたSIMカード11であり、外部装置200が、当該スマートフォン10または外部サーバ20である場合を想定して、以下の説明を行うことにする。
情報処理装置100は、外部装置200との間で暗号通信を行う機能を有しており、図示のとおり、情報格納部110およびプログラム実行部120を備えている。この実施例の場合、情報格納部110は、不揮発性メモリによって構成され、プログラムおよび当該プログラムが利用するデータを格納する役割を果たす。より具体的には、情報格納部110は、プログラムを格納するためのプログラム格納部111と、データを格納するためのデータ格納部112と、を含んでいる。
一方、プログラム実行部120は、情報格納部110に格納されているプログラムを実行する役割を果たす。より具体的には、プログラム実行部120は、CPUおよび必要に応じてRAMなどの作業用メモリを備えており、データ格納部112に格納されているデータを利用して、プログラム格納部111に格納されているプログラムを実行する。プログラム実行部120と外部装置200との間には通信路が設けられている。プログラム実行部120は、この通信路を介して外部装置200から与えられたコマンドを実行し、その結果をレスポンスとして外部装置200に返すことになる。
図示のとおり、情報格納部110には、様々なプログラムやデータが格納されている。まず、プログラム格納部111には、OSプログラムおよびアプリケーションプログラムが格納されている。§1で述べたとおり、アプリケーションプログラムは、管理プログラムと一般アプリケーションプログラムとによって構成され、図示の例の場合、2組の管理プログラムISD,SSD1と、2組の一般アプリケーションプログラムAP01,AP02が格納されている状態が示されている。ここで、管理プログラムISDおよびSSD1の間には、図8(a) の階層構造図に示されているように、相互に上下関係が定義されている。
なお、図12に示す実施例では、プログラム格納部111に、アプリケーションプログラムとして、2組の管理プログラムと2組の一般アプリケーションプログラムとが格納されている例が示されているが、本発明に係る情報処理装置では、必ずしも複数の管理プログラムと複数の一般アプリケーションプログラムとが格納されている必要はなく、少なくとも1つの管理プログラム(図示の例の場合は、管理プログラムISD)が格納されている状態であれば、本発明を実施することが可能である。
ここで、管理プログラムISD,SSD1は、既に述べたとおり、自己を上位階層、別なアプリケーションプログラム(一般アプリケーションプログラムであるか、管理プログラムであるかを問わない)を下位階層として、下位階層のアプリケーションプログラムを自己の管理下におくプログラムであり、自己もしくは自己の管理下にあるアプリケーションプログラムのために、所定の暗号化プロトコルおよび所定の暗号鍵を用いて、外部装置200との間に暗号通信路を開設する暗号通信路開設機能を有し、外部装置200から与えられる暗号通信路開設コマンドに基づいて当該機能が実行される。
また、管理プログラムISD,SSD1は、いずれも自己の管理下に新たなアプリケーションプログラム(一般アプリケーションプログラムであるか、管理プログラムであるかを問わない)を組み込む機能も有している。具体的には、§2で説明したとおり、新たなアプリケーションプログラムのためのロード処理、インストール処理、発行処理を実行することになる。
一方、データ格納部112には、OSプログラムや各アプリケーションプログラムが利用するデータも格納されている。図には、プログラム格納部111に格納されている各プログラムに対応して、それぞれOS用データ、ISD用データ、SSD1用データ、AP01用データ、AP02用データが格納されている状態が示されている。各プログラムは、対応する各データを利用して実行されることになる。前述したとおり、管理プログラムは、図3に示すような鍵テーブルTを必要とするが、図示の例の場合、管理プログラムISD用の鍵テーブルT(ISD)はISD用データの一部として格納され、管理プログラムSSD1用の鍵テーブルT(SSD1)はSSD1用データの一部として格納される。
もっとも、この図12のブロック図に示されている構成自体は、これまで述べてきた従来の情報処理装置の構成と全く同じである。本発明に係る情報処理装置100の特徴は、管理プログラムISDもしくはSSD1に、新たに付加的な処理機能を設けた点にある。この処理機能は、ISD用データもしくはSSD1用データの一部として格納される鍵テーブルについて、常に必要最小限の暗号鍵のみが格納された状態を維持し、その記憶容量を節約するとともに、セキュリティ上の問題を低減させるという特有の作用効果を奏する。
§2で述べたとおり、管理プログラムISD(Issuer Security Domain)は、工場出荷時に書込まれる最上位の管理プログラムであり、情報処理装置100が出荷された時点で既に書き込まれている必須のプログラムである。もちろん、OSプログラムも同様である。一方、管理プログラムISDの下位階層に組み込まれる管理プログラムSSD(Supplemental Security Domain)は、通常、情報処理装置100が工場から出荷された後に、必要に応じて組み込まれる付随的なプログラムである。
したがって、図12に示されている管理プログラムSSD1は、この情報処理装置100の工場出荷後に新たに組み込まれたアプリケーションプログラムであり、当該管理プログラムSSD1の組込処理は、§2で述べたとおり、上位の管理プログラムISDによって実行されることになる。すなわち、管理プログラムISDに、図11(b) に示すアプリケーションロードコマンドを与えることにより、管理プログラムSSD1となるべきプログラムパッケージをロードするロード処理を実行させ、管理プログラムISDに、図11(c) に示すインストールコマンドを与えることにより、ロードしたパッケージを展開するインストール処理を実行させ、最後に、管理プログラムISDに、図11(d) に示す書込コマンドを与えることにより、インストールされた管理プログラムSSD1が利用する暗号鍵を書き込む鍵書込処理を実行させることになる。なお、§3で述べたように、この鍵書込処理については、インストールされたばかりの管理プログラムSSD1自身に実行させることも可能であるが、以下に示す基本的実施形態では、管理プログラムISDによって鍵書込処理が実行される例を述べることにする。
ここで、暗号鍵の格納は、次の準備段階および書込段階の2段階に分けて行われる。準備段階は、インストール時(図11(c) のインストールコマンドが与えらえた時)に実行される処理であり、データ格納部112内のSSD1用データの一部として、鍵テーブルT(SSD1)を用意する処理である。もっとも、この準備段階で用意される鍵テーブルT(SSD1)は、空の格納場所から構成される仮想的なテーブルであり、暗号鍵の実データが記録されるわけではない。別言すれば、インストール時に行われる準備段階では、論理的な鍵空間上に暗号鍵を格納するための鍵テーブルが用意されるだけであり、この段階では、メモリの記憶容量が無駄に消費されることはない。
一方、書込段階は、鍵書込時(図11(d) の書込コマンドが与えらえた時)に実行される処理であり、準備段階で用意された鍵テーブルT(SSD1)の所定の格納場所に、実際の鍵データ(暗号鍵)を書き込む処理である。すなわち、論理空間上に構築されていた鍵テーブルT(SSD1)の所定箇所に対応するメモリ上の実空間上に、暗号鍵のデータが実際に書き込まれることになる。したがって、この書込段階を実行すると、暗号鍵の実データに相当する記憶容量が消費されることになる。このため、本来は必要のない暗号鍵が書込段階で実際に書き込まれることになると、メモリが無駄に消費されることになる。
スマートフォンやICカードなどの携帯型の小型情報処理装置の場合、内蔵するメモリの記憶容量が小さいため、できるだけ無駄を省き、必要最小限の暗号鍵のみが格納された状態を保つことが重要である。特に、ICカード用のメモリでは、一般的なUSBメモリ等に比べて、高度なセキュリティを要求されることが多いため、セキュリティがより堅固な高価なメモリが用いられることが多い。したがって、大容量のメモリを内蔵することは、コストダウンを図る上で困難であり、運用上、記憶容量の節約が強く求められる。更に、特願2015−168868号明細書などには、複数の暗号化プロトコルを切り替えて利用する技術なども開示されており、このような技術を利用するようになると、鍵テーブルTに格納すべき暗号鍵の数はより増加することが予想され、鍵空間の効率的な利用が益々重要になってくる。
また、不要な暗号鍵が格納されていると、万一、外部に漏洩した場合には、セキュリティ上の問題も生じる。すなわち、たとえ特定の情報処理装置100にとっては不要な暗号鍵であったとしても、外部に漏洩した場合は、外部装置200や別な情報処理装置も含めたシステム全体のセキュリティを脅かす要因になる。したがって、不要な暗号鍵を鍵テーブルT(SSD1)に格納しておくことは、セキュリティ上、決して好ましくはない。
もちろん、不要な暗号鍵をわざわざ書き込む必要はないので、通常であれば、鍵テーブルT(SSD1)には、必要な暗号鍵のみが書き込まれるはずである。しかしながら、実際には、本来は必要のない暗号鍵について、上記書込処理が実行され、鍵テーブルT(SSD1)に書き込まれてしまうことも少なくない。これは、書込処理が、外部装置200から与えられる書込コマンド(図11(d) )に基づいて一義的に実行される処理であるためである。
別言すれば、従来の管理プログラムISDは、外部装置200から特定の暗号鍵の書込コマンドが与えられると、下位にインストールした管理プログラムSSD1にとって当該特定の暗号鍵が必要であろうがなかろうが、当該書込コマンドを忠実に実行し、当該特定の暗号鍵を鍵テーブルT(SSD1)の指定箇所に書き込む処理を実行する。もちろん、外部装置200側で十分な吟味を行い、インストールした管理プログラムSSD1にとって必要な暗号鍵のみを厳選して書込コマンドを与えるようにすれば問題は生じないが、外部装置200側に用意されるアプリケーションプログラム(管理プログラムSSD1を情報処理装置100内に新たに組み込む処理を行うためのプログラム)がそのような配慮を行わない粗雑なプログラムであった場合、不要な暗号鍵が書き込まれてしまうことは避けられない。
特に、スマートフォンやICカードなどの情報処理装置は、社会生活を営むのに欠かせない物品として広く普及しており、大手企業から中小企業に至るまで、様々な事業者から様々なアプリケーションプログラムが提供されている。このため、外部装置200側に用意されるアプリケーションプログラムも種々雑多であり、情報処理装置100側にインストールされるアプリケーションプログラムに必要な暗号鍵のみを書き込むような適切な書込コマンドを送信するような配慮がなされていないことも少なくない。
前述したように、図11(c) に示すインストールコマンドにはパラメータが付随しており、このパラメータには機能指定情報が含まれている。そして、このインストールコマンド(管理プログラムSSD1をインストールするコマンド)を受信した管理プログラムISDは、インストール対象となる管理プログラムSSD1のプログラムをメモリ上に展開する際に、機能指定情報で指定された処理機能(たとえば、SCP種別「SCP02」で示される暗号化プロトコルを用いた暗号通信路開設機能)だけが実行可能となるような処置を施す。この場合、後続して与えられる書込コマンドでは、本来であれば、「SCP02」が利用する暗号鍵のみを書き込む指示を与えるべきであるが、外部装置200側に用意されるアプリケーションプログラムが粗雑なプログラムであると、そのような細かな配慮を行うことなしに、常に、すべての暗号鍵についての書込コマンドをそれぞれ送信する処理が行われるケースも少なくない。
たとえば、図7に示されている複数のSCP種別のいずれが指定されても対応できるようにするには、これら個々のSCP種別が利用するすべての暗号鍵が順次書き込まれるように、複数の書込コマンドを順番に送信する仕様を採用すればよい。この場合、インストールコマンドの機能指定情報で指定した内容を吟味する手間を省いた安易なプログラムルーチンからなる粗雑なアプリケーションプログラムを外部装置200側に用意しておけば足りる。実際、そのような粗雑なアプリケーションプログラムであっても、動作上、支障が生じることはない。また、そのような安易な意図ではないにせよ、何らかのバグによって、不要な暗号鍵の書込処理を指示する書込コマンドが送信されてしまうケースもあり得る。
このように、外部装置200側に粗雑なアプリケーションプログラムが用意されていると、インストール対象となる管理プログラムSSD1については不要な暗号鍵が鍵テーブルT(SSD1)に書き込まれてしまうことになる。上述したとおり、鍵テーブルTに暗号鍵の実データが書き込まれると、当該実データに相当する記憶容量が実際に消費されてしまうことになる。このような問題は、インストール対象となるアプリケーションプログラムが管理プログラムである場合だけでなく、一般アプリである場合にも生じる。すなわち、何らかの暗号鍵を利用した処理機能を有するアプリケーションプログラムは、管理プログラムのみではなく、一般アプリにも存在する。これは、暗号鍵は、暗号通信路の開設に利用されるだけでなく、データの改竄をチェックする検証処理、トークンを用いた検証処理、暗号化されたプログラムの復号処理など、様々な処理に利用されるためである。
GlobalPlatform (登録商標)の仕様では、図11(c) に示すインストールコマンドのパラメータの部分に、図13に示すように、「特権パラメータ(privilege)」と「SCP種別パラメータ」とを含ませることが定められている。これらのパラメータは、いずれも、本願にいう「機能指定情報」であり、管理プログラムがインストール処理を実行する際には、インストール対象となるアプリケーションプログラムについて、この機能指定情報によって指定された指定機能が実行可能となるような処理が施される。
ここで、「SCP種別パラメータ」は、インストール対象となるアプリケーションプログラムが管理プログラム(すなわち、暗号通信路開設機能を有するプログラム)である場合に付加されるパラメータであり、当該インストール対象となる管理プログラムが、インストール後にサポートする暗号化プロトコルを特定する情報になる。具体的には、現在のところ、図7に例示するような種々の暗号化プロトコル(SCP種別)が一般に利用されているが、図13に示すSCP種別パラメータとして、たとえば、「SCP02」を指定した場合、インストール対象となる管理プログラムは、インストール後に、SCP種別「SCP02」で特定される暗号化プロトコルのみをサポートすることになる。
これに対して、「特権パラメータ(privilege)」は、インストール対象となるアプリケーションプログラムについて、様々な機能指定を行うためのパラメータであり、GlobalPlatform (登録商標)により、図14に示すような細かな仕様が定められている。具体的には、この「特権パラメータ(privilege)」は、全3バイト(24ビット)によって構成されており、図14(a) の表の各行に示されているビットパターン#0〜#20について、図14(b) に示すような特権が定義されている。ここで、図14(a) の表の各欄において、「1」は当該ビットが「1」であることを示し、「0」は当該ビットが「0」であることを示し、「−」は当該ビットの値が不問であることを示している。なお、ビットパターン#20は、将来の機能拡張のために予約されているパターンであり、表の各欄において、「X」は当該ビットが「0」であることを示している。
たとえば、1バイト目のビットb8が「1」になるビットパターン#0は、インストール対象となるアプリケーションプログラムが管理プログラム(Security Domain プログラム)であることを示している。したがって、「特権パラメータ(privilege)」の1バイト目のビットb8が「1」の場合、インストールコマンドのパラメータには、図13に示すように、「特権パラメータ(privilege)」だけでなく「SCP種別パラメータ」も付随することになる。
同様に、1バイト目のビットb7が「1」,ビットb1が「0」になるビットパターン#1は、インストール対象となるアプリケーションプログラムが「DAP Verification」の処理機能を有していることを示しており、1バイト目のビットb7が「1」,ビットb1が「1」になるビットパターン#7は、インストール対象となるアプリケーションプログラムが「Mandated DAP Verification」の処理機能を有していることを示している。ビットパターン#1,#7の1バイト目のビットb8が「1」になっているのは、これらの処理機能が管理プログラムに対してのみ与えられる機能であるためである。
各ビットパターンの多くのビットは「−」になっているため、実際には、複数のビットパターンを組み合わせた指定が可能である。たとえば、「11100000 00100000 010000000」なる「特権パラメータ(privilege)」は、インストール対象となるアプリケーションプログラムが、管理プログラムであり(#0)、「DAP Verification」(#1)、「Delegated Management」(#2)、「Token Verification」(#10)、「Ciphered Load File Data Block」(#17)の各処理機能が与えられることを示している。
図14(b) は、この「特権パラメータ(privilege)」の各ビットパターン#0〜#20のそれぞれに対応する特権名とその概要(意味)を示す表である。ここで、特権名の欄が太枠で示されている特権は、暗号鍵を利用した処理機能が与えられることを示している。したがって、これら太枠で示されている特権が機能指定情報として指定されていた場合、インストール処理に続いて、暗号鍵の書込処理が行われることになる。
各特権で与えられる個々の処理機能は、GlobalPlatform (登録商標)の仕様で定められている公知の機能であるため、ここでは詳しい説明は省略するが、たとえば、「DAP Verification」(#1)は、暗号鍵を用いてデータの改竄をチェックする検証処理機能を指し、「Token Verification」(#10)は、トークンを用いた検証処理機能を指し、「Ciphered Load File Data Block」(#17)は、暗号化されたプログラムの復号処理機能を指す。「特権パラメータ(privilege)」によって指定された処理機能は、インストール後に、利用可能な処理機能ということになる。
結局、図13に示す機能指定情報は、図14に示す種々の特権のうちのどれを与えるか(どの処理機能が実行可能となるようなインストールを行うか)を指定する情報(特権パラメータ(privilege))であるとともに、インストール対象が管理プログラムであった場合には、更に、図7に示す種々のSCP種別のうちのどの種別をサポートさせるか(どの暗号化プロトコルに基づく暗号通信路開設機能が実行可能となるようなインストールを行うか)を指定する情報(SCP種別パラメータ)ということになる。そして、インストール処理完了後は、「特権パラメータ(privilege)」で指定された暗号鍵を利用した処理機能(図14(b) に太枠で示されている処理機能)および「SCP種別パラメータ」で指定された暗号通信路開設機能において利用する暗号鍵を書き込むための鍵書込処理を実行する必要がある。
結局、インストール処理後の鍵書込処理によって書き込むべき暗号鍵には、暗号通信路開設機能に利用する暗号鍵だけでなく、特権パラメータ(privilege)によって指定されたいくつかの処理機能に利用する暗号鍵も含まれることになる。したがって、本来であれば、外部装置200側に用意されるアプリケーションプログラムは、インストールコマンドに含まれている特権パラメータ(privilege)およびSCP種別パラメータの内容を吟味して、必要な暗号鍵のみを書き込むための書込コマンドを送信すべきであるが、上述したとおり、粗雑なプログラムの場合、そのような細かな配慮を行うことなしに、あらゆる処理機能に必要な暗号鍵を、とりあえずすべて書き込んでしまうという杜撰な方法を採用するケースも少なくない。
このため、実際には、利用されることのない無駄な暗号鍵が多数格納されることになり、貴重な記憶容量の無駄遣いが行われるとともに、セキュリティを低下させる問題も発生することになる。本発明は、このような問題を解決するための新たな手段を提案するものである。以下、その具体的な手法を、第1の実施形態(§5)および第2の実施形態(§6)について詳述する。
<<< §5. 本発明の第1の実施形態 >>>
まず、本発明の第1の実施形態について詳述する。
<5.1 第1の実施形態に係る情報処理装置の構成>
本発明の第1の実施形態に係る情報処理装置100は、図12に示すとおり、外部装置200との間で暗号通信を行う機能を有しており、プログラムおよび当該プログラムが利用するデータを格納する情報格納部110と、この情報格納部110に格納されているプログラムを実行するプログラム実行部120とを備えている。そして、情報格納部110には、少なくとも1つの管理プログラムが格納されている。図12には、2組の管理プログラムISD,SSD1が格納された状態が示されているが、ここでは、説明の便宜上、上位管理プログラムISDのみが格納されていたものとしよう。
既に述べたとおり、管理プログラムISDは、外部装置200から与えられるロードコマンド(図11(b) )に応じて、それぞれ暗号鍵を利用する複数の処理機能を有するアプリケーションプログラムのパッケージをロードして、情報格納部110に格納するプログラムロード処理を実行する機能を有している。ここでは、ロード対象となるアプリケーションプログラムが、下位階層の管理プログラムSSD1であった場合を考えてみる。この場合、管理プログラムSSD1の元になるパッケージがロードされることになる。
また、管理プログラムISDは、外部装置200から与えられるインストールコマンド(図11(c) )に応じて、プログラムロード処理によってロードされたパッケージを情報格納部110に展開して、当該アプリケーションプログラム(管理プログラムSSD1)をインストールするインストール処理を実行する機能を有している。すなわち、ロード済みのアプリケーションプログラムのパッケージを展開して、アプリケーションインスタンスを生成する処理が行われる。インストールされたアプリケーションプログラムの実行は、このインスタンス化されたプログラムコードを実行する処理ということになる。
このとき、図13に示すようなインストールコマンドのパラメータに含まれている機能指定情報によって指定された指定機能だけが実行可能となるようなインスタンス化が行われる。たとえば、機能指定情報を構成する「特権パラメータ(privilege)」によって「Token Verification」なる処理機能が指定され、「SCP種別パラメータ」によって「SCP02」が指定されていた場合、「Token Verification」なる処理機能に必要なルーチンと、「SCP02」に対応する暗号化プロトコルを用いた暗号通信路開設に必要なルーチンとが実行可能となるようなインスタンス化が行われる。GlobalPlatform (登録商標)の仕様では、指定されていない処理機能は、実行不能な状態になる。
すなわち、管理プログラムISDがインストール処理を実行する際には、インストールされたアプリケーションプログラム(管理プログラムSSD1)について、暗号鍵を利用する複数の処理機能のうち、インストールコマンドに含まれている機能指定情報によって指定された指定機能(上例の場合、「Token Verification」なる処理機能と「SCP02」に対応する暗号化プロトコルを用いた暗号通信路開設機能)だけが実行可能となるような処理が行われる。
なお、管理プログラムISDは、特定のアプリケーションプログラムについてのインストール処理を実行する際に、必要に応じて、当該アプリケーションプログラムのために、情報格納部110の論理的な鍵空間上に暗号鍵を格納するための鍵テーブルTを構築する処理を行うことができる。上例の場合、インストール対象となるアプリケーションプログラムは、管理プログラムSSD1であるから、鍵テーブルT(SSD1)を構築する処理が行われる。前述したとおり、ここで構築される鍵空間は、論理的な空間であるので、たとえ図3に示すような二次元マトリックス状の鍵空間であっても、実メモリが無駄に消費されることはない。
続いて、鍵書込処理が実行される。管理プログラムISDは、外部装置200から与えられる鍵書込コマンド(図11(d) )に応じて、インストールされたアプリケーションプログラム(管理プログラムSSD1)が利用する暗号鍵を情報格納部110に格納する鍵書込処理を実行する機能を有している。この鍵書込処理では、論理空間上に構築された鍵テーブルT(SSD1)の所定箇所に対応するメモリ上の実空間上に、暗号鍵のデータの書き込みが行われることになるので、実メモリの記憶容量が実際に消費されることになる。もっとも、「どのような暗号鍵を鍵テーブルT(SSD1)上のどの格納場所に書き込むか」という指示は、外部装置200から与えられる鍵書込コマンドの指示に従うことになる。
鍵書込コマンドとしては、図11(d) に示すように、暗号鍵の実データを発行データとして与える汎用の「書込コマンドその1」を利用してもよいし、暗号鍵の実データを鍵データとして与える鍵書込専用の「書込コマンドその2」を利用してもよい。この場合、鍵書込処理は、管理プログラムISDではなく、管理プログラムSSD1自身によって実行される。GlobalPlatform (登録商標)の仕様では、鍵データの書込みは、図3に示すような2次元マトリックス状の鍵テーブルTの行単位で行われる。
ここに示す実施例の場合、鍵テーブルTは、キーバージョン番号とキーIDとの組み合わせによって1つのセルを特定することができる二次元マトリックス状のセルの集合体であるが、外部装置200から与えられる鍵書込コマンドには、書込場所指定情報としてキーバージョン番号が含まれており(図11(d) では省略されている)、管理プログラムISDは、鍵書込コマンドを受信すると、このキーバージョン番号に基づいて暗号鍵の格納場所を特定し、図11(d) に示す書込コマンドに、発行データもしくは鍵データとして含まれていた暗号鍵の実データを、特定された格納場所に書き込む処理を行う。
このように、「どの暗号鍵を鍵テーブルTのどの欄に書き込むか」という内容は、専ら、外部装置200から与えられる鍵書込コマンドによって指示されることになる。したがって、§4で述べたように、外部装置200側に用意されたアプリケーションプログラムが杜撰な指示を行う粗雑なプログラムであった場合、本来は利用されることのない無駄な暗号鍵が書き込まれ、貴重な記憶容量の無駄遣いが行われるとともに、セキュリティを低下させるという問題が発生する。
たとえば、上例のように、管理プログラムSSD1について、「Token Verification」なる処理機能と「SCP02」なる暗号化プロトコルを用いた暗号通信路開設機能だけが実行可能となるようなインストール処理が行われた場合、これに後続する鍵書込処理では、これらの機能に必要な暗号鍵のみの書込みを行うのが好ましいが、実際には前述したとおり、不要な暗号鍵の書込みを指示する書込コマンドが与えられる場合も少なくない。
<5.2 第1の実施形態の基本概念>
本発明の第1の実施形態の基本概念は、上例のような状況において、管理プログラムISDもしくは管理プログラムSSD1が、外部装置200から鍵書込コマンド(図11(d) )を受信した場合でも、受信した書込コマンドが、不要な暗号鍵の書込みを指示するコマンドであった場合には、これを拒絶して実行しないようにする、という点にある。すなわち、本発明の第1の実施形態に係る管理プログラムは、鍵書込処理を実行する前に、当該鍵書込処理によって格納される暗号鍵を利用する処理機能が実行可能な機能であるか否かを判定し、実行可能な機能であった場合には、当該鍵書込処理を実行するが、実行可能な機能でなかった場合には、当該鍵書込処理を拒絶することになる。
GlobalPlatform (登録商標)の仕様では、上述したとおり、鍵テーブルTへの暗号鍵の書込みは行単位で行われ、外部装置200から与えられる鍵書込コマンドには、ある1つのキーバージョン番号を指定する書込場所指定情報と、当該キーバージョン番号に対応する行に書き込むべき暗号鍵の実データが含まれている。そこで、上例の場合、ある1つのキーバージョン番号を指定した鍵書込コマンドが与えられた場合、管理プログラムISDは、当該キーバージョン番号に対応する行に格納すべき暗号鍵の要否を判定し、不要な暗号鍵であった場合には、当該鍵書込コマンドを拒絶する処理を行うことになる。別言すれば、外部装置200から与えられる鍵書込コマンドのうち、必要な暗号鍵の書込みを指示するコマンドのみが実行され、不要な暗号鍵の書込みを指示するコマンドは拒絶される。
鍵書込コマンドによって書込が指示された暗号鍵について、要不要の判定を行うためには、管理プログラムISDが、特定のアプリケーションプログラムについてのインストール処理を実行する際に、当該アプリケーションプログラムが実行可能な機能を特定する情報を含む実行可能リストを作成し、これを情報格納部110に格納する処理を行うようにすればよい。そうすれば、鍵書込処理を実行する前に、この実行可能リストを参照することにより、判定対象となる処理機能が実行可能な機能であるか否かを判断することができる。
たとえば、上例の場合のように、管理プログラムSSD1について、「Token Verification」なる処理機能と「SCP02」なる暗号化プロトコルを用いた暗号通信路開設機能だけが実行可能となるようなインストール処理が行われた場合、この2つの処理機能を特定する情報を含む実行可能リストを作成し、これをISD用データもしくはSSD1用データの一部としてデータ格納部112に格納しておけばよい。そうすれば、鍵書込処理を実行する前に、この実行可能リストを参照すれば、どの処理機能が実行可能かを確認することができる。
もっとも、通常、鍵書込コマンドには、「どの暗号鍵をどこに書き込むか」という情報は含まれているものの、「当該暗号鍵がどの処理機能に用いられるか」という情報は含まれていない。たとえば、GlobalPlatform (登録商標)の仕様では、鍵書込コマンド(図11(d) )には、暗号鍵の実データとキーバージョン番号とが含まれているため、鍵テーブルT上の書込場所は認識できるが、書込対象となる暗号鍵がどの処理機能に用いられるかという点については認識することはできない。
そこで、ここで述べる実施形態では、暗号鍵を利用する特定の処理機能と当該暗号鍵を格納するための鍵テーブル上の格納場所とを対応づける対応情報を作成し、これを情報格納部110に格納しておく。そうすれば、管理プログラムが、鍵書込コマンドを受信したときには、この対応情報を参照することにより、受信した鍵書込コマンドに含まれている書込場所指定情報によって指定されている格納場所に対応づけられている特定の処理機能を判定対象と認識し、当該判定対象が実行可能な機能であった場合には、受信した鍵書込コマンドを実行し、実行可能な機能でなかった場合には、受信した鍵書込コマンドを拒絶することができる。
<5.3 第1の実施形態の具体的な内容>
上述した対応情報を作成するには、予め、暗号鍵を用いるあらゆる処理機能について、それぞれ特定の格納場所を対応づけておけばよい。図15は、このような対応づけを示す格納場所一覧テーブルGの具体的な一例を示す図である。この格納場所一覧テーブルGには、合計11組の機能のそれぞれについて、特定のキーバージョン番号の範囲が対応づけられている。ここで、前半の5組の機能は、図13に示す「特権パラメータ(privilege)」によって指定される処理機能であり、図14(b) に太枠で囲って示した#1,#7,#10,#16,#17の特権に対応する処理機能(暗号鍵を必要とする処理機能)である。一方、後半の6組の機能は、図13に示す「SCP種別パラメータ」によって指定される処理機能であり、図7の表に記載された個々のSCP種別に対応する暗号化プロトコルを用いた暗号通信路開設機能に相当する。
このような格納場所一覧テーブルGを予め定めておき、情報処理装置100側と外部装置200側とで共用する情報にすれば、暗号鍵を用いる任意の処理機能に関しては、それぞれ特定のキーバージョン番号が自動的に割り当てられることになる。したがって、たとえば、外部装置200から情報処理装置100に対して、「DAP Verification」という処理機能に利用される暗号鍵を書き込む鍵書込コマンドを送信する場合には、書込場所指定情報として、必ず「0x10〜0x1F」の範囲内のキーバージョン番号を指定することが暗黙の了解事項になる。実際、GlobalPlatform (登録商標)の仕様では、このような格納場所一覧テーブルGが定められている(なお、図15に示すテーブルGは、説明の便宜を考慮して作成したテーブルであり、GlobalPlatform (登録商標)の仕様に基づくテーブルではない)。
この図15に示すような格納場所一覧テーブルGを情報処理装置100側に用意しておけば、実行可能な特定の処理機能と当該処理機能に用いる暗号鍵を格納する格納場所とを対応づける対応情報を作成することができる。ここでは、このような対応情報を示すテーブルを機能テーブルFと呼ぶことにする。
図16は、管理プログラムSSD1のインストール時に作成された機能テーブルF(SSD1)の一例であり、当該管理プログラムSSD1が、インストール後に、「Token Verification」なる処理機能(トークンを用いた検証処理)と「SCP02」なる処理機能(暗号化プロトコル「SCP02」を用いた暗号通信路開設処理機能)とを実行可能であることが示されている。また、「Token Verification」なる処理機能に利用する暗号鍵の格納場所が、キーバージョン番号「0x30〜0x3F」の範囲であることが示され、「SCP02」なる処理機能に利用する暗号鍵の格納場所が、キーバージョン番号「0x70〜0x7F」の範囲であることが示されている。
この図16に示す機能テーブルF(SSD1)は、これまで述べてきた例のように、上位管理プログラムISDが、その下位階層に管理プログラムSSD1を組み込む過程で作成される。具体的には、管理プログラムISDに対して、新たに管理プログラムSSD1をインストールするためのインストールコマンド(図11(c) )が与えられ、それに付随するパラメータ(機能指定情報)として、「Token Verification」を示す「特権パラメータ(privilege)」および「SCP02」なる「SCP種別パラメータ」が含まれていた場合に、管理プログラムISDによって、図16に示す機能テーブルF(SSD1)が作成され、ISD用データの一部としてデータ格納部112に格納される。
要するに、図16に示す機能テーブルF(SSD1)は、特定のアプリケーションプログラム(管理プログラムSSD1)が実行可能な機能を特定する情報を含む実行可能リストと言うことができ、暗号鍵を利用する特定の処理機能と当該暗号鍵を格納するための鍵テーブル上の格納場所とを対応づける対応情報と言うこともできる。
この機能テーブルF(SSD1)の「機能」欄の「Token Verification」および「SCP02」なる情報は、インストールコマンドに付随するパラメータ(機能指定情報)から入手することができる。一方、「キーバージョン番号」欄の「0x30〜0x3F」および「0x70〜0x7F」なる情報は、図15に示す格納場所一覧テーブルGを参照することにより入手することができる。
したがって、管理プログラムISDによるインストールコマンドの実行後には、図17に示すように、ISD用データとしては、上位管理プログラムISD自身が利用する鍵テーブルT(ISD)と、下位階層に組み込んだ管理プログラムSSD1についての機能テーブルF(SSD1)とが格納された状態になり、SSD1用データとしては、下位管理プログラムSSD1自身が利用する鍵テーブルT(SSD1)が格納された状態になる。もっとも、この時点では、鍵テーブルT(SSD1)は、論理的な鍵空間上に構築された仮想のテーブルであり、暗号鍵の実データは格納されていない。
そこで、続いて、外部装置200から、鍵テーブルT(SSD1)に暗号鍵の実データを書き込むための鍵書込コマンドが与えられることになる。管理プログラムISDは、この鍵書込コマンドを受信したときに、当該鍵書込コマンドに含まれている書込場所指定情報によって指定されている格納場所が、機能テーブルF(SSD1)に含まれているか否かを判定し、含まれていた場合には、当該鍵書込コマンドを実行し、含まれていなかった場合には、当該鍵書込コマンドを拒絶することができる。
たとえば、鍵書込コマンドに書込場所指定情報として含まれているキーバージョン番号が、「0x30〜0x3F」および「0x70〜0x7F」の範囲内にある場合は、当該鍵書込コマンドは、インストールされた管理プログラムSSD1が実行可能な「Token Verification」もしくは「SCP02」なる処理機能に用いられる暗号鍵についての鍵書込コマンドであると判断することができるので、当該鍵書込コマンドを実行して暗号鍵の書込みを行うことになる。一方、鍵書込コマンドに書込場所指定情報として含まれているキーバージョン番号が、上記範囲外であった場合には、インストールされた管理プログラムSSD1が実行可能な処理機能に用いられる暗号鍵についての鍵書込コマンドではない、と判断することができるので、当該鍵書込コマンドは拒絶される。この場合、鍵書込コマンドに対して、エラーのレスポンスが返されることになる。
結局、ここで述べた第1の実施形態を実施する上では、まず、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際に、この格納場所一覧テーブルGを参照することにより、当該アプリケーションプログラム(SSDI)が実行可能な機能と、当該機能に利用される暗号鍵の格納場所と、をそれぞれ対応づける機能テーブルF(SSD1)を作成し、これをデータ格納部112に格納するようにする。図16は、このような機能テーブルF(SSD1)の一例であり、図17には、この機能テーブルF(SSD1)を、ISD用データとしてデータ格納部112に格納した例が示されている。なお、鍵書込処理を下位管理プログラムSSD1自身に実行させる場合には、機能テーブルF(SSD1)をSSD1用データとして格納しておけばよい。
続いて、管理プログラムISDが、鍵書込コマンドを受信したときには、この機能テーブルF(SSD1)を参照することにより、受信した鍵書込コマンドに含まれている書込場所指定情報(キーバージョン番号)によって指定されている格納場所が、当該機能テーブルF(SSD1)に含まれているか否かを判定し、含まれていた場合には、当該鍵書込コマンドを実行し、含まれていなかった場合には、当該鍵書込コマンドを拒絶する処理を行えばよい。
<5.4 第1の実施形態の変形例>
ここでは、これまで述べてきた第1の実施形態について、いくつかの変形例を述べておく。第1の変形例は、図16に示す機能テーブルF(SSD1)の代わりに、図18(a) に示す機能テーブルF′(SSD1)を用いる例である。図16に示す機能テーブルF(SSD1)が、インストール処理後に管理プログラムSSD1が実行可能になる処理機能と、当該処理機能に用いる暗号鍵の格納場所と、の対応関係を示すテーブルであるのに対して、図18(a) に示す機能テーブルF′(SSD1)は、単に、インストール処理後に管理プログラムSSD1が実行可能になる処理機能を列挙したテーブルになっている。
この第1の変形例を実施する上では、やはり、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際には、図18(a) に示す例のように、当該アプリケーションプログラム(SSDI)が実行可能な機能を列挙した機能テーブルF′(SSD1)を作成し、これをデータ格納部112に格納するようにする。
続いて、管理プログラムISDが、鍵書込コマンドを受信したときには、受信した鍵書込コマンドに含まれている書込場所指定情報(キーバージョン番号)によって指定されている格納場所が、図18(a) に示す機能テーブルF′(SSD1)に列挙されている実行可能な機能に対して、図15に示す格納場所一覧テーブルGにおいて対応づけられている格納場所であるか否かを判定し、肯定的な判定結果が得られた場合には、当該鍵書込コマンドを実行し、否定的な判定結果が得られた場合には、当該鍵書込コマンドを拒絶する処理を行えばよい。
たとえば、鍵書込コマンドに書込場所指定情報として含まれているキーバージョン番号が「0x30」であった場合を考えてみよう。ここで、図18(a) に示す機能テーブルF′(SSD1)に列挙されている実行可能な処理機能は、「Token Verification」および「SCP02」であるから、図15に示す格納場所一覧テーブルGを参照すれば、キーバージョン番号「0x30」なる格納場所は、実行可能な処理機能「Token Verification」および「SCP02」に対応づけられている格納場所になる。したがって、この場合、肯定的な判定結果が得られ、当該鍵書込コマンドは実行されることになる。
第2の変形例は、図16に示す機能テーブルF(SSD1)の代わりに、図18(b) に示す機能テーブルF''(SSD1)を用いる例である。図16に示す機能テーブルF(SSD1)が、インストール処理後に管理プログラムSSD1が実行可能になる処理機能と、当該処理機能に用いる暗号鍵の格納場所と、の対応関係を示すテーブルであるのに対して、図18(b) に示す機能テーブルF''(SSD1)は、インストール処理後に管理プログラムSSD1が実行可能になる処理機能に利用される暗号鍵の格納場所を列挙したテーブルになっている。
この第2の変形例を実施する上では、やはり、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際には、図15に示す格納場所一覧テーブルGを参照することにより、図18(b) に示す例のように、当該アプリケーションプログラム(SSDI)が実行可能な機能に利用される暗号鍵の格納場所を列挙した機能テーブルF''(SSD1)を作成し、これをデータ格納部112に格納するようにする。
続いて、管理プログラムISDが、鍵書込コマンドを受信したときには、図18(b) に示す機能テーブルF''(SSD1)を参照することにより、受信した鍵書込コマンドに含まれている書込場所指定情報(キーバージョン番号)によって指定されている格納場所が、当該機能テーブルF''(SSD1)に含まれているか否かを判定し、含まれていた場合には、当該鍵書込コマンドを実行し、含まれていなかった場合には、当該鍵書込コマンドを拒絶する処理を行えばよい。
たとえば、鍵書込コマンドに書込場所指定情報として含まれているキーバージョン番号が「0x30」であった場合は、「0x30」は、図18(b) に示す機能テーブルF''(SSD1)に含まれている。したがって、この場合、当該鍵書込コマンドは実行されることになる。
なお、これまで述べてきた実施例は、上位管理プログラムISDが、その管理下にインストールした下位管理プログラムSSD1のために、鍵書込コマンドを実行して暗号鍵の書込処理を実行する例であるが、鍵書込コマンドの実行は、その実行可否の判断も含めて、下位管理プログラムSSD1自身が実行することも可能である。すなわち、§3で述べたとおり、図11(d) に示す書込コマンドその1「STORE DATA (#n)+発行データ」を実行する際には、事前に、図11(h) に示す発行データ書込対象指定コマンド「INSTALL for personalization (#n)+発行対象アプリ名」を実行しておくことにより、発行データの書込対象を指定することができる。
したがって、下位管理プログラムSSD1のための発行データ(暗号鍵)の書込処理は、上位管理プログラムISDによって行うこともできるし、下位管理プログラムSSD1自身によって行うこともできる。また、図11(d) に示す書込コマンドその2「PUT KEY (#n)+鍵データ」は、任意の管理プログラムに対して、自分自身が利用する暗号鍵の書込処理を自分自身で実行させるコマンドである。したがって、この書込コマンドその2が与えられた場合には、下位管理プログラムSSD1自身によって、鍵書込コマンドの実行が行われることになる。
<5.5 第1の実施形態における処理手順>
最後に、第1の実施形態において、ある管理プログラムが自己の管理下に、新たなアプリケーションプログラムを組み込む場合の処理手順を、図19の流れ図を参照して簡単に説明しておく。
まず、ステップS11において、外部装置200から与えられたアプリケーションロードコマンド(第1段階)の受信が行われ、ステップS12において、当該コマンドが実行される。この処理は、プログラムロード処理の第1段階に相当する。続いて、ステップS13において、外部装置200から与えられたアプリケーションロードコマンド(第2段階)の受信が行われ、ステップS14において、当該コマンドが実行される。この処理は、プログラムロード処理の第2段階に相当する。このようなプログラムロード処理は、図11(b) に示すコマンドの処理として、既に述べたとおりである。
次に、ステップS15において、外部装置200から与えられたアプリケーションプログラムのインストールコマンドの受信が行われ、ステップS16において、当該コマンドが実行される。この処理は、ステップS14までの処理でロードされたアプリケーションプログラムのバイナリデータをメモリ上に展開してインスタンス化するインストール処理に相当する。このとき、前述したように、機能テーブルF(SSD1),F′(SSD1),F''(SSD1)などを作成する処理が行われる。このようなインストール処理は、図11(c) に示すコマンドの処理として、既に述べたとおりである。
そして、ステップS17において、外部装置200から与えられた、暗号鍵の書込みを目的とするアプリケーション向け発行データの書込コマンド(鍵書込コマンド)の受信が行われる。本発明の第1の実施形態では、受信した鍵書込コマンドを実行する前に、ステップS18,S19における判定処理が行われる。すなわち、ステップS18において、ステップS16で作成した機能テーブルが参照され、ステップS19において、受信した鍵書込コマンドによる書込対象となる暗号鍵を利用する処理機能が実行可能な機能であるか否かの判定が行われる。機能テーブルを利用した具体的な判定方法は、これまで述べたとおりである。
ステップS19における判定により肯定的な結果が得られた場合には、ステップS20において、受信した鍵書込コマンドの実行が行われ、暗号鍵の書込みがなされる。この場合、外部装置200に対しては、鍵書込コマンドの正常終了を示すレスポンスが返される。一方、ステップS19における判定により否定的な結果が得られた場合には、ステップS21において、受信した鍵書込コマンドは拒絶され、暗号鍵の書込みは行われない。この場合、外部装置200に対しては、鍵書込コマンドに対するエラーレスポンスが返される。
<<< §6. 本発明の第2の実施形態 >>>
続いて、本発明の第2の実施形態について詳述する。
<6.1 第2の実施形態の基本概念>
本発明の第2の実施形態に係る情報処理装置の基本構成は、§5で述べた第1の実施形態に係る情報処理装置100の基本構成と同様であり、図12のブロック図に示すとおりである。第1の実施形態は、情報処理装置100に、新たなアプリケーションプログラムを組み込む際に、不要な暗号鍵の書込みが行われないようにする、という基本概念に基づくものであり、具体的には、実行不能な処理機能に用いられる暗号鍵についての鍵書込コマンドが与えられた場合には当該コマンドを拒絶する、という方法を採用するものである。
これに対して、ここで述べる第2の実施形態は、既にインストール済みの既存のアプリケーションプログラムについて、後に、実行可能な処理機能の変更が行われる場合を想定したものであり、その基本概念は、そのような機能変更によって実行可能から実行不能に変更された処理機能があった場合には、実行不能に変更された処理機能に利用される暗号鍵を削除する、というものである。
たとえば、前述の§5では、第1の実施形態として、上位管理プログラムISDが、新たなアプリケーションプログラムとして、下位管理プログラムSSD1を組み込む実施例を述べた。この実施例の場合、インストールコマンドのパラメータに含まれる機能指定情報によって、「Token Verification」および「SCP02」という2つの処理機能が指定されていたため、図16に示すような機能テーブルF(SSD1)が作成される。そして、下位管理プログラムSSD1は、「Token Verification」なる処理機能と「SCP02」なる処理機能とが実行可能になるような形態でインストールされることになる。
もっとも、アプリケーションロードコマンドによって情報処理装置100内にロードされた下位管理プログラムSSD1のプログラムパッケージには、上記2つの処理機能だけでなく、図14(b) に特権として示されている様々な処理機能や、図7にSCP種別として示されている様々な暗号化プロトコルに対応した暗号通信路開設機能を実行するためのプログラムルーチンが含まれている。上例の場合、インストールされた下位管理プログラムSSD1は、「Token Verification」および「SCP02」という2つの処理機能のみしか実行できなくなるが、これは、上位管理プログラムISDによるインストール処理によって、指定されなかった処理機能についての実行を制限する設定が行われるためである。
たとえば、インストール処理によって管理プログラムSSD1をメモリ上に展開してインスタンス化する際に、個々の処理機能についての実行可否を示すフラグを設定し(インストールコマンドのパラメータに含まれる機能指定情報によって指定された処理機能についてのみ実行可能のフラグを設定する)、実行不能のフラグを設定されている処理機能については実行を制限するようにしておけば、上記運用を行うことができる。
したがって、実際には、アプリケーションプログラムをインストールした後においても、必要があれば、個々の処理機能について実行可能/実行不能の状態を変更することができる。すなわち、インストール時には実行不能に設定されていた処理機能を後で実行可能に変更したり、逆に、インストール時には実行可能に設定されていた処理機能を後で実行不能に変更したりすることができる。前者の場合は、該当する処理機能のフラグを実行不能から実行可能に変更すればよく、後者の場合は、該当する処理機能のフラグを実行可能から実行不能に変更すればよい。
このような機能変更を可能にするためには、予め、実行可能機能変更処理コマンドを用意しておき、管理プログラムが、当該実行可能機能変更処理コマンドに応じて、個々の処理機能についての実行可能/実行不能の状態(上記フラグの状態)を変更できるようにしておけばよい。したがって、ここで述べる第2の実施形態に係る情報処理装置における管理プログラムには、外部装置から与えられる実行可能機能変更処理コマンドに応じて、既にインストール済みのアプリケーションプログラムが実行可能な処理機能を変更する実行可能機能変更処理を実行する機能が備わっている必要がある。
第2の実施形態の特徴は、このように、既にインストール済みの既存のアプリケーションプログラムについての実行可能機能変更処理が行われた際に、実行可能から実行不能に変更された処理機能があった場合には、実行不能に変更された処理機能に利用される暗号鍵を削除する鍵削除処理を行う点にある。この鍵削除処理により、もはや不要になった暗号鍵がそのまま格納され続ける事態を避けることができる。したがって、第1の実施形態と同様に、必要最小限の暗号鍵のみが格納された状態を維持し、暗号鍵の格納場所の記憶容量を節約するとともに、セキュリティ上の問題を低減させる、という格別な効果が得られる。
<6.2 第2の実施形態の具体的な内容>
続いて、この第2の実施形態を、より具体的な事例について説明する。たとえば、§5で述べた例の場合、上位管理プログラムISDが実行したインストール処理により新たにインストールされた下位管理プログラムSSD1は、「Token Verification」および「SCP02」という2つの処理機能が実行可能な状態に設定されており、図16に示すような機能テーブルF(SSD1)が作成されている。この状態において、たとえば「SCP03」なる処理機能を実行可能にするには、上位管理プログラムISDに対して、前述した実行可能機能変更処理コマンドを与えることにより、機能変更処理を実行させればよい。具体的には、管理プログラムISDは、下位管理プログラムSSD1のインストール時に「実行不能」に設定した「SCP03」なる処理機能についてのフラグを「実行可能」に変更する処理を行えばよい。
もちろん、その際には、図16に示す機能テーブルF(SSD1)に対して、機能「SCP03」およびキーバージョン番号「0x80〜0x8F」を追加する処理を行うようにするのが好ましい。そうすれば、実行可能機能変更処理コマンドに後続して与えられる鍵書込コマンドを実行する際に、前述した第1の実施形態と同様の判定を行うことができ、不要な暗号鍵の書込みを阻止することができる。
このように、これまで「実行不能」だった処理機能を「実行可能」に変更するにあたっては、前述した第1の実施形態により、無駄な暗号鍵が書き込まれることを防止できる。しかしながら、これまで「実行可能」だった処理機能を「実行不能」に変更するにあたっては、前述した第1の実施形態では、十分な対応ができない。たとえば、上例において、これまで実行可能に設定されていた「Token Verification」という処理機能を実行不能に変更する実行可能機能変更処理コマンドが与えられた場合を考えてみる。このような実行可能機能変更処理コマンドを受信した管理プログラムISDは、下位管理プログラムSSD1のインストール時に「実行可能」に設定した「Token Verification」なる処理機能についてのフラグを「実行不能」に変更する処理を行うことになる。
もちろん、その際には、図16に示す機能テーブルF(SSD1)に収録されている機能「Token Verification」およびキーバージョン番号「0x30〜0x3F」を削除する処理を行うようにするのが好ましい。そうすれば、以後、鍵書込コマンドが与えられた場合に、正しい判定を行うことができ、機能「Token Verification」に利用される暗号鍵の書込みを阻止することができる。
ただ、鍵テーブルT上には、まだ、機能「Token Verification」に利用される暗号鍵がそのまま残っており、もはや不要になった機能「Token Verification」用の暗号鍵がそのまま格納された状態になっている。このような事態にも対応できるように、ここで述べる第2の実施形態では、上位管理プログラムISDが下位管理プログラムSSD1について実行可能機能変更処理を実行したときに、当該変更処理によって実行可能から実行不能に変更された処理機能があった場合には、実行不能に変更された処理機能に利用される暗号鍵を、情報格納部から削除する鍵削除処理を併せて実行するようにしている。
要するに、管理プログラムは、実行可能機能変更処理を実行する際には、実行可能リスト(機能テーブルF)に対する書き換えを行い、この実行可能リスト(機能テーブルF)から削除されることになった処理機能に利用される暗号鍵を、情報格納部から削除する鍵削除処理を実行することになる。この鍵削除処理は、鍵テーブルTを構成するメモリ上の実空間上に書き込まれていた暗号鍵のデータを削除し、メモリ上の実空間を開放する処理ということになるので、メモリ上の利用可能記憶容量は実際に増加する。
なお、鍵削除処理を実行する際に、鍵テーブルT上のどの格納場所のデータを削除するかは、個々の処理機能と鍵テーブル上の個々の格納場所とを対応づける対応情報を参照して決めればよい。第1の実施形態の説明で述べたとおり、管理プログラムは、特定のアプリケーションプログラムについてのインストール処理を実行する際に、暗号鍵を利用する特定の処理機能と当該暗号鍵を格納するための鍵テーブル上の格納場所とを対応づける対応情報(たとえば、図16に示す機能テーブルF)を作成し、これを情報格納部に格納する処理を行う。そこで、管理プログラムが、実行可能機能変更処理を実行する際には、この対応情報を参照して、実行可能から実行不能に変更された処理機能に対応づけられていた格納場所を特定し、特定された格納場所に格納されていた暗号鍵を削除する鍵削除処理を実行すればよい。
ここで述べる実施例の場合、鍵テーブルTは、キーバージョン番号とキーIDとの組み合わせによって1つのセルを特定することができる二次元マトリックス状のセルの集合体からなるが、暗号鍵の書込みは、この鍵テーブルTの行単位で行われるため、管理プログラムは、キーバージョン番号に基づいて、書込対象もしくは削除対象となる暗号鍵の格納場所を特定することができる。したがって、たとえば、図16に示すような機能テーブルF(SSD1)が作成されている状態において、機能「Token Verification」を実行可能から実行不能に変更する機能変更処理が行われた場合、キーバージョン番号「0x30〜0x3F」の範囲内に格納されていた暗号鍵はすべて不要になったものと判断し、これらの暗号鍵をすべて削除する鍵削除処理を実行すればよい。
結局、ここで述べた第2の実施形態を実施する上では、まず、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際に、この格納場所一覧テーブルGを参照することにより、当該アプリケーションプログラム(SSDI)が実行可能な機能と、当該機能に利用される暗号鍵の格納場所と、をそれぞれ対応づける機能テーブルF(SSD1)を作成し、これをデータ格納部112に格納するようにする。図16は、このような機能テーブルF(SSD1)の一例であり、図17には、この機能テーブルF(SSD1)を、ISD用データとしてデータ格納部112に格納した例が示されている。
続いて、管理プログラムISDが、実行可能機能変更処理コマンドを受信したときには、この機能テーブルF(SSD1)に対する書き換えを行い、機能テーブルF(SSD1)から削除されることになった処理機能に対応づけられていた格納場所を特定し、特定された格納場所に格納されていた暗号鍵を削除する鍵削除処理を実行するようにすればよい。
もちろん、この第2の実施形態についても、図16に示す機能テーブルF(SSD1)の代わりに、図18(a) に示す機能テーブルF′(SSD1)を用いる第1の変形例を実施することが可能である。この第1の変形例を実施する上では、やはり、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際には、図18(a) に示す例のように、当該アプリケーションプログラム(SSDI)が実行可能な機能を列挙した機能テーブルF′(SSD1)を作成し、これをデータ格納部112に格納するようにする。
続いて、管理プログラムISDが、実行可能機能変更処理コマンドを受信したときには、図18(a) に示す機能テーブルF′(SSD1)に対する書き換えを行い、図15に示す格納場所一覧テーブルGを参照することにより、機能テーブルF′(SSD1)から削除されることになった処理機能に対応づけられていた格納場所を特定し、特定された格納場所に格納されていた暗号鍵を削除する鍵削除処理を行えばよい。
たとえば、図18(a) に示す機能テーブルF′(SSD1)から処理機能「Token Verification」が削除されることになった場合、図15に示す格納場所一覧テーブルGを参照すれば、「Token Verification」に対応づけられた格納場所がキーバージョン番号「0x30〜0x3F」に相当することがわかるので、鍵テーブルTにおいて、キーバージョン番号「0x30〜0x3F」の範囲内に格納されていた暗号鍵をすべて削除する鍵削除処理が実行される。
もちろん、この第2の実施形態について、図16に示す機能テーブルF(SSD1)の代わりに、図18(b) に示す機能テーブルF''(SSD1)を用いる第2の変形例を実施することも可能である。図18(b) に示す機能テーブルF''(SSD1)は、インストール処理後に管理プログラムSSD1が実行可能になる処理機能に利用される暗号鍵の格納場所を列挙したテーブルになっている。
この第2の変形例を実施する上では、やはり、データ格納部112に、図15に示すような格納場所一覧テーブルGを格納しておくようにする。この格納場所一覧テーブルGは、暗号鍵を利用する様々な処理機能と、これらの各機能に利用される暗号鍵の格納場所と、を対応づける対応情報のテーブルであり、外部装置200側にも同じ対応情報が共有される。
そして、管理プログラムISDが、特定のアプリケーションプログラム(たとえば、下位管理プログラムSSD1)についてのインストール処理を実行する際には、図15に示す格納場所一覧テーブルGを参照することにより、図18(b) に示す例のように、当該アプリケーションプログラム(SSDI)が実行可能な機能に利用される暗号鍵の格納場所を列挙した機能テーブルF''(SSD1)を作成し、これをデータ格納部112に格納するようにする。
続いて、管理プログラムISDが、実行可能機能変更処理コマンドを受信したときには、図15に示す格納場所一覧テーブルGを参照することにより、図18(b) に示す機能テーブルF''(SSD1)に対する書き換えを行う。そして、機能テーブルF''(SSD1)から削除されることになった格納場所を特定し、特定された格納場所に格納されていた暗号鍵を削除する鍵削除処理を行えばよい。
たとえば、処理機能「Token Verification」について、実行可能から実行不能に変更する実行可能機能変更処理コマンドが与えられた場合、図15に示す格納場所一覧テーブルGを参照することにより、「Token Verification」に対応づけられた格納場所がキーバージョン番号「0x30〜0x3F」に相当することがわかるので、図18(b) に示す機能テーブルF''(SSD1)からキーバージョン番号「0x30〜0x3F」を削除する書き換えが行われる。一方、鍵テーブルTについては、上記削除されたキーバージョン番号「0x30〜0x3F」の範囲内に格納されていた暗号鍵をすべて削除する鍵削除処理が実行される。
<6.3 第2の実施形態における処理手順>
最後に、第2の実施形態において、ある管理プログラムに対して、既に自己の管理下に組み込まれている既存のアプリケーションプログラムについての実行可能機能を変更するための実行可能機能変更処理コマンドが与えられた場合、当該管理プログラムによって実行される処理手順を、図20の流れ図を参照して簡単に説明しておく。
まず、ステップS31において、外部装置200から与えられた実行可能機能変更処理コマンドの受信が行われ、ステップS32において、当該コマンドに基づく機能変更処理が実行される。ここで行われる機能変更処理には、これまで実行不能であった処理機能を実行可能にする処理と、これまで実行可能であった処理機能を実行不能にする処理と、の2通りの形態がある。前述の実施例の場合、このような機能変更処理は、フラグの状態を切り替える処理によって行うことができる。なお、このとき、必要に応じて、機能テーブルの書換処理が実行される。
続いて、ステップS33において、上記機能変更処理によって実行不能になった機能があるか否かが判定され、実行不能になった機能がある場合には、ステップS34の鍵削除処理が実行される。この処理は、既に述べたとおり、実行不能に変更された処理機能に利用される暗号鍵を、情報格納部(鍵テーブルT)から削除する処理である。
そして、ステップS35において、新たな暗号鍵の書込みが必要か否かが判定され、必要な場合には、図19に示すステップS17へ移行し、鍵書込処理が実行される。具体的には、ステップS32の機能変更処理において、実行不能から実行可能に変更された処理機能があり、当該処理機能が暗号鍵を必要とするものであった場合に、新たな暗号鍵の書込必要と判定され、ステップS17以降の処理が実行されることになる。このステップS17以降の処理内容は、既に第1の実施形態として説明したとおりであり、不要な暗号鍵の書込みは阻止される。