(57)【特許請求の範囲】
【請求項１】
ＣＰＵとメモリとを有し、メモリ内に格納されたアプリケーションプログラムをＣＰＵによって実行させることにより、種々の処理を行うＩＣカードにおいて、
所定の暗号化手順に基づいて暗号化されたアプリケーションプログラムを格納するための暗号化プログラム格納部と、
前記暗号化手順に対応した復号化手順を格納するための復号化手順格納部と、
前記復号化手順によって復号化されたアプリケーションプログラムを格納するための復号化プログラム格納部と、
をメモリ上に設け、
外部装置から前記アプリケーションプログラムに関する実行指示が与えられるまでは、前記アプリケーションプログラムを暗号化した状態で前記暗号化プログラム格納部に格納しておき、
前記実行指示が与えられた場合は、前記復号化手順に基づいて復号化を行い、復号化されたアプリケーションプログラムを前記復号化プログラム格納部に格納し、この復号化されたアプリケーションプログラムを実行した後、この復号化されたアプリケーションプログラムを前記復号化プログラム格納部から消去する処理を行う機能を有することを特徴とするＩＣカード。
【請求項２】
請求項１に記載のＩＣカードにおいて、
アプリケーションプログラムを、その一部分のみを暗号化した状態で、暗号化プログラム格納部に格納しておくことを特徴とするＩＣカード。
【請求項３】
請求項１に記載のＩＣカードにおいて、
アプリケーションプログラムを複数のブロックに分割し、それぞれ異なる複数の暗号化手順に基づいて個々のブロックを暗号化し、暗号化した各ブロックを暗号化プログラム格納部に格納しておくようにし、
前記複数の暗号化手順のそれぞれに対応した復号化手順を復号化手順格納部に格納しておき、
アプリケーションプログラムの復号化を行う際には、各ブロックごとにそれぞれ対応した復号化手順を用いた復号化を行うことを特徴とするＩＣカード。
【請求項４】
請求項１〜３のいずれかに記載のＩＣカードにおいて、
複数のアプリケーションプログラムをそれぞれ暗号化して暗号化プログラム格納部に格納しておくようにし、
外部装置から特定のアプリケーションプログラムを選択する指示が与えられた場合に、この選択されたアプリケーションプログラムについての復号化を行うようにしたことを特徴とするＩＣカード。
【請求項５】
請求項４に記載のＩＣカードにおいて、
選択されたアプリケーションプログラムの実行が終了した場合に、復号化プログラム格納部に格納されている前記選択されたアプリケーションプログラムについての復号化プログラムを消去する処理を行うことを特徴とするＩＣカード。
【請求項６】
請求項１〜３のいずれかに記載のＩＣカードにおいて、
外部装置から特定のアプリケーションプログラムについての特定のコマンドが与えられた場合に、前記特定のアプリケーションプログラムのうち、少なくとも前記特定のコマンドの実行に必要な部分についての復号化を行うようにすることを特徴とするＩＣカード。
【請求項７】
請求項６に記載のＩＣカードにおいて、
外部装置から与えられた特定のコマンドの実行が終了するたびに、復号化プログラム格納部内に格納されている復号化プログラムを消去する処理を行うことを特徴とするＩＣカード。
【請求項８】
請求項１〜７のいずれかに記載のＩＣカードにおいて、
復号化手順として、外部から与えられたキーを利用して復号化を行う手順を用いることを特徴とするＩＣカード。
【請求項９】
請求項１〜８のいずれかに記載のＩＣカードにおいて、
復号化プログラム格納部を、電源を遮断すると記憶内容が失われる揮発性メモリ内に設けたことを特徴とするＩＣカード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＩＣカードに関し、特に、ＣＰＵとメモリとを有し、メモリ内に格納されたアプリケーションプログラムをＣＰＵによって実行させることにより、種々の処理を行うＩＣカードに関する。
【０００２】
【従来の技術】
キャッシュカードやクレジットカードとして利用されてきた磁気カードに代わって、光カードやＩＣカードが普及し始めている。特に、ＣＰＵを内蔵したＩＣカードは、高度なセキュリティを確保することができるため、高額な商取引にも利用することができる利点を有する。
【０００３】
現在、一般に利用されているＣＰＵを有するＩＣカードには、メモリとして、ＲＯＭ，ＥＥＰＲＯＭ，ＲＡＭが内蔵されている。通常、ＲＯＭには、ＣＰＵに実行させるべき基本的なプログラムが格納され、ＥＥＰＲＯＭには、ユーザデータや種々のアプリケーションプログラムが格納され、ＲＡＭはＣＰＵの作業領域として利用される。ＥＥＰＲＯＭは書換可能なメモリであるため、ここにユーザごとに必要なデータやアプリケーションプログラムを格納することができる。
【０００４】
ＩＣカードにデータやプログラムを書き込んだり、これらを読み出したりする際には、いわゆるリーダライタ装置と呼ばれる外部装置が用いられる。この外部装置とＩＣカードとの間では、物理的な伝送線を介してまたは非接触な伝送路を介して、相互にデータやプログラムの伝送が行われる。通常、外部装置からＩＣカードへの情報伝送は、コマンドという形式で与えられ、種々の指示やデータは、このコマンドの中の一情報としてＩＣカード側へと伝えられる。これに対して、ＩＣカードから外部装置への情報伝送は、レスポンスという形式で与えられ、処理結果やデータは、このレスポンスの中の一情報として外部装置側へと伝えられる。
【０００５】
【発明が解決しようとする課題】
上述したように、ＩＣカードを一般の商取引に利用する場合、セキュリティの確保が重大な課題となる。ＣＰＵ内蔵型の一般的なＩＣカードでは、外部装置からＩＣカード内のメモリをアクセスする際に、必ず内蔵ＣＰＵを介してアクセスするような構成を採ることにより、データアクセスに関するセキュリティをかなり高めることができる。そこで、通常は、外部装置からＩＣカードにアクセスする際に、種々の暗証コードなどの照合を条件とするような設定がなされ、照合に失敗すると、内蔵ＣＰＵによってアクセスは拒絶される。また、外部装置とＩＣカードとの間で情報伝送をする際に、信号伝送路上でのセキュリティを確保するために、伝送情報を暗号化するなどの手段も講じられている。
【０００６】
しかしながら、これらのセキュリティ対策は、外部からＩＣカードに対してソフトウエア的にアクセスする際のセキュリティを確保する対策であり、ＩＣカード自身のハードウエア的なセキュリティに関する対策ではない。これまで、ＩＣカード自身は、ハードウエア的には十分なセキュリティが確保されている、との考え方が一般的であった。これは、ＩＣカード内の情報を、ハードウエア的に外部に読み出すことはほとんど不可能である、という見地に立った考え方である。ところが、ＩＣカードが高額な商取引に利用されるようになると、ハードウエア的なセキュリティに関しても万全を期する必要がある。たとえば、ＩＣカードを物理的に分解し、内蔵メモリを機械的に切断し、その切断面を解析すれば、メモリ内のビットパターンを認識することは不可能ではない。したがって、高額な商取引に利用されるＩＣカードの場合、従来のセキュリティ対策だけでは必ずしも万全とは言えない。
【０００７】
そこで本発明は、より万全なセキュリティを確保することが可能なＩＣカードを提供することを目的とする。
【０００８】
【課題を解決するための手段】
(1)   本発明の第１の態様は、ＣＰＵとメモリとを有し、メモリ内に格納されたアプリケーションプログラムをＣＰＵによって実行させることにより、種々の処理を行うＩＣカードにおいて、
所定の暗号化手順に基づいて暗号化されたアプリケーションプログラムを格納するための暗号化プログラム格納部と、
この暗号化手順に対応した復号化手順を格納するための復号化手順格納部と、
この復号化手順によって復号化されたアプリケーションプログラムを格納するための復号化プログラム格納部と、
をメモリ上に設け、
外部装置からアプリケーションプログラムに関する実行指示が与えられるまでは、アプリケーションプログラムを暗号化した状態で暗号化プログラム格納部に格納しておき、
実行指示が与えられた場合は、格納されている復号化手順に基づいて復号化を行い、復号化されたアプリケーションプログラムを復号化プログラム格納部に格納し、この復号化されたアプリケーションプログラムを実行した後、この復号化されたアプリケーションプログラムを復号化プログラム格納部から消去する処理を行うようにしたものである。
【０００９】
(2)   本発明の第２の態様は、上述の第１の態様に係るＩＣカードにおいて、
アプリケーションプログラムを、その一部分のみを暗号化した状態で、暗号化プログラム格納部に格納しておくようにしたものである。
【００１０】
(3)   本発明の第３の態様は、上述の第１の態様に係るＩＣカードにおいて、
アプリケーションプログラムを複数のブロックに分割し、それぞれ異なる複数の暗号化手順に基づいて個々のブロックを暗号化し、暗号化した各ブロックを暗号化プログラム格納部に格納しておくようにし、
複数の暗号化手順のそれぞれに対応した復号化手順を復号化手順格納部に格納しておき、
アプリケーションプログラムの復号化を行う際には、各ブロックごとにそれぞれ対応した復号化手順を用いた復号化を行うようにしたものである。
【００１１】
(4)   本発明の第４の態様は、上述の第１〜第３の態様に係るＩＣカードにおいて、
複数のアプリケーションプログラムをそれぞれ暗号化して暗号化プログラム格納部に格納しておくようにし、
外部装置から特定のアプリケーションプログラムを選択する指示が与えられた場合に、この選択されたアプリケーションプログラムについての復号化を行うようにしたものである。
【００１２】
(5)   本発明の第５の態様は、上述の第４の態様に係るＩＣカードにおいて、
選択されたアプリケーションプログラムの実行が終了した場合に、復号化プログラム格納部に格納されている選択アプリケーションプログラムについての復号化プログラムを消去する処理を行うようにしたものである。
【００１３】
(6)   本発明の第６の態様は、上述の第１〜第３の態様に係るＩＣカードにおいて、
外部装置から特定のアプリケーションプログラムについての特定のコマンドが与えられた場合に、この特定のアプリケーションプログラムのうち、少なくとも与えられた特定のコマンドの実行に必要な部分についての復号化を行うようにしたものである。
【００１４】
(7)   本発明の第７の態様は、上述の第６の態様に係るＩＣカードにおいて、
外部装置から与えられた特定のコマンドの実行が終了するたびに、復号化プログラム格納部内に格納されている復号化プログラムを消去する処理を行うようにしたものである。
【００１５】
(8)   本発明の第８の態様は、上述の第１〜第７の態様に係るＩＣカードにおいて、
復号化手順として、外部から与えられたキーを利用して復号化を行う手順を用いるようにしたものである。
【００１６】
(9)   本発明の第９の態様は、上述の第１〜第８の態様に係るＩＣカードにおいて、
復号化プログラム格納部を、電源を遮断すると記憶内容が失われる揮発性メモリ内に設けるようにしたものである。
【００１７】
【発明の実施の形態】
以下、本発明を図示する実施形態に基づいて説明する。図１は、一般的なＩＣカード１０と、外部装置（リーダライタ装置）２０との間で、情報の伝送を行っている状態を示すブロック図である。この例では、ＩＣカード１０は、種々の演算処理機能をもったＣＰＵ１１と、外部装置２０に対する情報の送受を行うＩ／Ｏインターフェイス１２と、ＲＯＭ１３，ＥＥＰＲＯＭ１４，ＲＡＭ１５なるメモリとを備えている。ＲＯＭ１３は書換不能な不揮発性メモリであり、ＣＰＵ１１は、このＲＯＭ１３内に格納されている基本プログラムに基づいて所定の処理を実行する。ＥＥＰＲＯＭ１４は、書換可能な不揮発性メモリであり、ユーザデータや種々のアプリケーションプログラムが格納される。ＲＡＭ１５は、ＣＰＵ１１が種々の処理を実行する際の作業領域として利用される書換可能な揮発性メモリである。
【００１８】
ＩＣカード１０と外部装置２０とは、物理的な信号線による接続、赤外線による接続、電磁気を利用した非接触型接続、などの方法によって互いに接続され、情報の送受が行われる。外部装置２０からＩＣカード１０へは、コマンドという形式で情報が送信される。送信されたこのコマンドは、Ｉ／Ｏインターフェイス１２を介してＣＰＵ１１に与えられる。逆に、ＩＣカード１０から外部装置２０へは、与えられたコマンドに対するレスポンスという形式で情報が送信される。このレスポンスは、ＣＰＵ１１からＩ／Ｏインターフェイス１２を介して、外部装置２０へと送信される。既に述べたように、外部装置２０からＩＣカード１０に対してソフトウエア的にアクセスを行う際のセキュリティ対策については、従来から様々な手法が提案されている。図示のとおり、すべてのメモリへのアクセスは、ＣＰＵ１１を介して行われることになり、外部装置２０からＩＣカード１０内のメモリへの直接アクセスは、行うことはできない。
【００１９】
しかしながら、ＩＣカード１０内の各メモリに対して、ハードウエア的にアクセスすることは可能である。ＩＣカード１０に対する電源供給は、通常、外部装置２０側から行われるため、ＩＣカード１０と外部装置２０との接続を解除すると、ＩＣカード１０への電源供給は遮断される。これにより、揮発性メモリであるＲＡＭ１５内のデータは失われることになる。ところが、ＲＯＭ１３およびＥＥＰＲＯＭ１４は、電源供給遮断後にも記憶内容が温存される不揮発性メモリであるため、ハードウエア的なアクセスにより、記憶内容が外部に読み出される可能性がある。たとえば、不正な手段で入手したＩＣカード１０を物理的に分解し、内蔵されていたＲＯＭ１３をスライスして、その断面を観察すれば、記憶されていたビットパターンを抽出することは不可能ではない。また、ＥＥＰＲＯＭ１４についても、各部の静電容量などを細かく測定すれば、やはり記憶されていたビットパターンを抽出することは不可能ではない。
【００２０】
このような不正な手段によるメモリ内容の読み出し行為が行われた場合、特に重大な問題が生じるのは、内蔵されていたアプリケーションプログラムが解析されてしまうことである。もちろん、ユーザデータが読み出されて解析された場合も、問題が生じることになるが、ユーザデータは一個人に関する情報であるのに対し、アプリケーションプログラムは、多数のＩＣカードに共通して利用されているプログラムであり、その内容が解析されると、今度は、ソフトウエア的な不正行為を助長することになる。
【００２１】
本発明の主眼は、このようなハードウエア的な不正行為により、ＲＯＭ１３やＥＥＰＲＯＭ１４内に格納されていたアプリケーションプログラムが解析されるのを未然に防ぐことにある。そのために、本発明に係るＩＣカードは、次の３つの特徴を備えている。
▲１▼アプリケーションプログラムは、暗号化された状態でＲＯＭ１３あるいはＥＥＰＲＯＭ１４内に格納される。
▲２▼暗号化されたアプリケーションプログラムを復号化するための手順が、ＲＯＭ１３あるいはＥＥＰＲＯＭ１４に格納されており、アプリケーション実行時には、これをＩＣカード内で復号化して利用する。
▲３▼アプリケーションの実行終了後には、復号化されたアプリケーションプログラムを消去する。
【００２２】
このような３つの特徴により、不正な手段で、ＩＣカード内部のアプリケーションプログラムが解析されるという事態を未然に防ぐことができる。すなわち、特徴▲１▼により、ＲＯＭ１３あるいはＥＥＰＲＯＭ１４内のアプリケーションプログラムは暗号化された状態で格納されるため、不正行為により、ハードウエア的にビットパターンが読み出されたとしても、直ちにアプリケーションプログラムを解析することはできない。また、特徴▲２▼により、正当な行為として、アプリケーションプログラムを実行させる必要がある場合には、ＩＣカード内部で復号化が行われ、アプリケーションプログラムは復号化された状態で実行されるため、正当利用する限りは、何ら支障は生じない。更に、特徴▲３▼により、アプリケーションの実行が終了したら、実行に用いた復号化アプリケーションプログラムは消去されるため、やはり不正行為により、ハードウエア的にビットパターンが読み出されたとしても、直ちにアプリケーションプログラムを解析することはできない。
【００２３】
なお、実用上は、１つのアプリケーションプログラムを複数のブロックに分割し、それぞれ異なる複数の暗号化手順に基づいて個々のブロックを暗号化し、暗号化した各ブロックをＲＯＭ１３あるいはＥＥＰＲＯＭ１４内に格納するのが好ましい。このような方法によれば、同一のアプリケーションプログラムでありながら、その部分ごとに異なる暗号化手順が用いられるため、万一、不正な手段によりビットパターンが読み出されたとしても、用いられた暗号化手順を推測することがより困難になり、アプリケーションプログラムの解析をより困難にすることができるためである。もちろん、このように各ブロックごとに異なる暗号化手順を用いて暗号化した場合、この複数の暗号化手順のそれぞれに対応した復号化手順をＩＣカード内部に用意する必要があり、アプリケーションプログラムの復号化を行う際には、各ブロックごとにそれぞれ対応した復号化手順を用いた復号化を行うようにする必要がある。
【００２４】
図２は、このようなブロックごとの暗号化の方法を示す概念図である。実際には、この暗号化の手順は、ＩＣカード１０の外部で行われる。ここでは、１つのアプリケーションプログラム３０を暗号化する方法を示す。まず、アプリケーションプログラム３０を複数のブロックに分割する。図示の例では、第１のブロック３１と第２のブロック３２との２つのブロックに分割しているが、もちろん、３つ以上のブロックに分割してもかまわない。こうして、ブロックごとの分割が完了したら、個々のブロックごとに暗号化を行うことになるが、このとき、各ブロックごとに異なる暗号化手順を用いるようにする。図示の例では、第１のブロック３１に対しては、暗号化手順Ａに基づく暗号化が行われて第１の暗号化ブロック４１が得られ、第２のブロック３２に対しては、暗号化手順Ｂに基づく暗号化が行われて第２の暗号化ブロック４２が得られることになる。
【００２５】
ここに示す実施形態では、各暗号化ブロックに、それぞれ暗号化手順情報と長さ情報を付加するようにしている。暗号化手順情報は、どの暗号化手順に基づいて暗号化が行われたかを示す情報であり、長さ情報は暗号化ブロックの長さ（たとえば、バイト数）を示す情報である。図示の例では、第１の暗号化ブロック４１に、暗号化手順情報Ｒａ（暗号化手順Ａに基づく暗号化が行われたことを示す情報）と、長さ情報Ｌ１１（第１の暗号化ブロック４１の長さを示す情報）とを付加することにより、第１の登録用暗号化ブロック５１を形成し、同様に、第２の暗号化ブロック４２に、暗号化手順情報Ｒｂ（暗号化手順Ｂに基づく暗号化が行われたことを示す情報）と、長さ情報Ｌ１２（第２の暗号化ブロック４２の長さを示す情報）とを付加することにより、第２の登録用暗号化ブロック５２を形成している。ここで付加された暗号化手順情報Ｒａ，Ｒｂは、後に復号化を行う際に、どの復号化手順を用いて復号化処理を行うべきかを選択するために利用される。
【００２６】
こうして、第１および第２の登録用暗号化ブロック５１，５２が作成されたら、これを外部装置２０からＩＣカード１０へと伝送し、ＩＣカード１０内のＥＥＰＲＯＭ１４内に登録する処理が行われる。以上は、１つのアプリケーションプログラム３０を、ＥＥＰＲＯＭ１４内に登録するための手順であるが、この実施形態では、ＥＥＰＲＯＭ１４内に複数のアプリケーションプログラムが同様の手順で登録された場合を考えることにする。
【００２７】
図３は、本発明の一実施形態に係るＩＣカードにおけるメモリ内の情報格納状態を示すブロック図である。上述したように、このＩＣカードには、ＲＯＭ１３、ＥＥＰＲＯＭ１４、ＲＡＭ１５が内蔵されており、いずれのメモリも内蔵ＣＰＵ１１によってアクセスされる。
【００２８】
ここに示す例では、ＥＥＰＲＯＭ１４は、上述した暗号化手順に基づいて暗号化されたアプリケーションプログラムを格納するための暗号化プログラム格納部として機能する。図では、ＥＥＰＲＯＭ１４内に、暗号化された第１のアプリケーションプログラムおよび第２のアプリケーションプログラムが格納された状態が示されている。第１のアプリケーションプログラムは、図２に示されている第１および第２の登録用暗号化ブロック５１，５２から構成されており、第２のアプリケーションプログラムは、同様に、第１および第２の登録用暗号化ブロック６１，６２から構成されている。ここで、Ｒａ，Ｒｂ，Ｒｃは、どの暗号化手順に基づく暗号化が行われたかを示す暗号化手順情報であり、それぞれ暗号化手順Ａ，Ｂ，Ｃに基づく暗号化が行われたことを示している。また、Ｌ１１，Ｌ１２，Ｌ２１，Ｌ２２は、各暗号化ブロックの長さを示す長さ情報である。
【００２９】
また、ＲＯＭ１３は、各暗号化手順に対応した復号化手順を格納するための復号化手順格納部として機能する。図には、３種類の復号化手順ＡＡ，ＢＢ，ＣＣが格納された状態が示されているが、これらの復号化手順はそれぞれ暗号化手順Ａ，Ｂ，Ｃに対応した復号化手順となっている。たとえば、暗号化手順Ａに基づいて暗号化されたブロックは、復号化手順ＡＡによって復号化が可能になる。したがって、図示の例の場合、ＥＥＰＲＯＭ１４内に登録されたブロック５１，５２，６１，６２は、ＲＯＭ１３内に用意されているいずれかの復号化手順に基づいて復号化が可能である。逆に言えば、ＥＥＰＲＯＭ１４内に登録するアプリケーションプログラムは、ＲＯＭ１３内に用意されているいずれかの復号化手順に対応した暗号化手順で暗号化する必要がある。
【００３０】
一方、ＲＡＭ１５は、ＲＯＭ１３内に用意された復号化手順によって復号化されたアプリケーションプログラムを格納するための復号化プログラム格納部として機能する。すなわち、ＣＰＵ１１は、ＥＥＰＲＯＭ１４内のブロックについての復号化を行う場合、復号化されたコードを逐次ＲＡＭ１５内に展開する処理を行うことになる。図示の例では、ＲＡＭ１５内に、復号化された第１のアプリケーションプログラムが展開されている状態が示されている。この復号化されたプログラムは、第１のブロック３１と第２のブロック３２とから構成されており、これらのブロック３１，３２は、図２に示すアプリケーションプログラム３０を構成するブロックである。
【００３１】
図３には、ＲＡＭ１５内に復号化された第１のアプリケーションプログラムが格納された状態が示されているが、実際には、外部装置２０からこの第１のアプリケーションプログラムに関する実行指示が与えられるまでは、この第１のアプリケーションプログラムは、暗号化された状態でＥＥＰＲＯＭ１４（暗号化プログラム格納部）に格納されている。もちろん、ＣＰＵ１１は、暗号化された状態のアプリケーションプログラムをそのまま実行することはできない。そこで、特定のアプリケーションを実行する必要が生じた場合は、ＣＰＵ１１は、ＥＥＰＲＯＭ１４内のこの特定のアプリケーションを、復号化してＲＡＭ１５内に展開する処理を実行する。たとえば、第１のアプリケーションプログラムを実行する必要が生じた場合、ＣＰＵ１１は、ＥＥＰＲＯＭ１４内の第１の登録用暗号化ブロック５１と第２の登録用暗号化ブロック５２とに対する復号化処理を行い、その結果を、ＲＡＭ１５内に展開する処理を行うことになる。たとえば、第１の登録用暗号化ブロック５１の復号化を行う際には、暗号化手順情報Ｒａによって、このブロックが暗号化手順Ａに基づいて暗号化されたことを認識し、これに対応した復号化手順ＡＡ（ＲＯＭ１３内に用意されている）を利用して復号化処理を行うことになる。図３は、このような復号化処理が行われた後の状態を示している。ＣＰＵ１１は、このようにしてＲＡＭ１５上に得られた第１のアプリケーションプログラム（復号化された状態のもの）を用いてこれを実行する。
【００３２】
こうして、第１のアプリケーションプログラムの実行が完了すると、ＣＰＵ１１は、ＲＡＭ１５内に展開された第１のアプリケーションプログラム（すなわち、第１のブロック３１および第２のブロック３２）を消去する処理（たとえば、００などの任意のデータを上書きする処理）を行う。結局、第１のアプリケーションプログラムは、実行に必要な期間だけ、復号化された状態でＲＡＭ１５内に滞在していたことになり、実行完了後には、ＩＣカード１０内には、復号化状態の第１のアプリケーションプログラムは存在しないことになる。従って、不正なハードウエア的アクセスによって、復号化状態のアプリケーションプログラムが外部へと読み出される可能性は極めて低くなる。
【００３３】
なお、図３に示す例では、復号化手順をＲＯＭ１３内に格納するようにしているが、復号化手順はＥＥＰＲＯＭ１４内に格納するようにしてもかまわない。この場合は、必要な復号化手順をその都度、ＥＥＰＲＯＭ１４内に書き込んで利用することができるようになる。また、図３に示す例では、暗号化されたアプリケーションプログラムを、ＥＥＰＲＯＭ１４内に書き込んで利用するようにしているが、暗号化されたアプリケーションプログラムは、予めＲＯＭ１３内に用意しておいてもよい。更に、図３に示す例では、復号化したアプリケーションプログラムを展開するメモリとして、ＲＡＭ１５を用いているが、ＥＥＰＲＯＭ１４上に復号化したアプリケーションプログラムを展開するようにしてもよい。ただ、実用上は、ＲＡＭ１５を復号化プログラム格納部として利用するのが好ましい。その理由は、ＥＥＰＲＯＭ１４が、電源の遮断後にも記憶内容が保持される不揮発性メモリであるのに対し、ＲＡＭ１５は、電源を遮断すると記憶内容が失われる揮発性メモリであるためである。たとえば、不正行為者が、ＩＣカード１０を外部装置２０に接続した状態で何らかの操作を行っている最中に、強制的に両者の接続を切断するような行為を行った場合、ＲＡＭ１５内のデータは失われるが、ＥＥＰＲＯＭ１４内のデータはそのまま残ることになる。したがって、ＥＥＰＲＯＭ１４を復号化プログラム格納部として利用した場合は、復号化された状態のアプリケーションプログラムが、消去されずにそのままＥＥＰＲＯＭ１４内に残る危険性が生じることになる。
【００３４】
図４は、本発明に係るＩＣカード１０で行われる処理手順の一例を示す流れ図である。このような処理手順自身は、ＲＯＭ１３内に予め用意されており、ＣＰＵ１１によって実行されることになる。まず、ステップＳ１において、コマンド受信が行われる。前述したように、このＩＣカード１０に対する外部装置２０側からの指示は、すべてコマンドの形式で与えられる。そこで、まず、Ｉ／Ｏインターフェイスを介して、外部装置２０側から与えられたコマンドが受信される。この実施形態では、こうして与えられるコマンドは、３つのタイプに分けられる。すなわち、アプリケーション選択コマンド、アプリケーション終了コマンド、一般コマンドの３タイプである。アプリケーション選択コマンドは、ＥＥＰＲＯＭ１４内に登録されている複数のアプリケーションプログラム（いずれも暗号化された状態で格納されている）のうちの特定の１つを、実行対象として選択する指示を与えるためのコマンドであり、アプリケーション終了コマンドは、現在選択されているアプリケーションプログラムの実行を終了する指示を与えるためのコマンドである。実際には、アプリケーションが既に選択されている状態において、新たなアプリケーションを選択するコマンドを与えると、新アプリケーションが選択されるとともに、旧アプリケーションの選択は解除されて終了することになる。したがって、このようなコマンドは、アプリケーション選択コマンドとアプリケーション終了コマンドとの双方を兼ねたコマンドということになるが、ここでは説明の便宜上、両コマンドが別々のコマンドとして与えられる場合の例を示してある。また、一般コマンドは、現在選択されているアプリケーションプログラムに対する種々のコマンドであり、その内容は、各アプリケーションプログラムによってそれぞれ定まっている。
【００３５】
ＩＣカード１０に所定のアプリケーションプログラムを実行させるためには、通常、外部装置２０側から次のような手順でコマンドを送信すればよい。まず、アプリケーション選択コマンドを送信し、特定のアプリケーションプログラムを選択させる。続いて、この選択されたアプリケーションプログラムに対応した種々の一般コマンドを順次送信し、選択されたアプリケーションプログラムによって所望の処理を行わせる。最後に、アプリケーション終了コマンドを送信し、現在実行中のアプリケーションプログラムの選択を解除する（実際には、前述したように、新たなアプリケーションを選択するコマンドが、旧アプリケーションの終了コマンドを兼ねたコマンドとして用いられることが多い）。以上のような順番で、外部装置２０からＩＣカード１０へとコマンドが与えられる、という前提で、図４の流れ図を見てみよう。
【００３６】
まず、ステップＳ１において受信されたコマンドは、ステップＳ２において、アプリケーション選択コマンドであるか否かが判断され、ステップＳ３において、アプリケーション終了コマンドであるか否かが判断される。そのいずれでもない場合には、一般コマンド（特定のアプリケーションプログラムに対するコマンド）と判断され、ステップＳ４において、アプリケーションが選択済か否かが判断される。ここで、アプリケーションが選択済みではない場合は、ステップＳ５において、エラーがセットされ、ステップＳ６において、このセットされたエラーがレスポンスとして外部装置２０側へ伝送されることになる。このエラーは、アプリケーションプログラムの選択が行われていない状態において、特定のアプリケーションプログラムに対するコマンドが与えられたことを意味する。
【００３７】
さて、受信したコマンドが、アプリケーション選択コマンドであった場合は、ステップＳ２からステップＳ７へと進み、アプリケーションの選択処理が行われる。すなわち、いずれかのアプリケーションプログラムが選択状態となる（具体的には、たとえば、選択されたアプリケーションプログラムを示すフラグがＲＡＭ１５上に記録される）。続いて、ステップＳ８において、選択されたアプリケーションプログラムの復号化が行われる。復号化されたアプリケーションプログラムは、ＲＡＭ１５内に展開されることになり、ステップＳ６において、アプリケーションの選択手続が完了した旨のレスポンスが送信される。
【００３８】
一方、受信したコマンドが、アプリケーション終了コマンドであった場合は、ステップＳ３からステップＳ９へと進み（新たなアプリケーションを選択するコマンドが、旧アプリケーションの終了コマンドを兼ねる場合は、ステップＳ８からステップＳ９へと進めばよい）、現在選択されているアプリケーションプログラムの選択解除処理が行われる（具体的には、たとえば、選択されたアプリケーションプログラムを示すＲＡＭ１５上のフラグを消す）。続いて、ステップＳ１０において、終了したアプリケーションプログラムの消去が行われる。すなわち、ＲＡＭ１５内に展開されていた復号化されたアプリケーションプログラムが消去される。そして、ステップＳ６において、アプリケーションの終了手続が完了した旨のレスポンスが送信される。
【００３９】
また、受信したコマンドが、一般コマンドであり、その時点でいずれかのアプリケーションプログラムが選択済みの状態であった場合には、ステップＳ４からステップＳ１１へと進み、与えられた一般コマンドが、選択済みアプリケーションプログラムの対応コマンドであるか否かが判断される。対応コマンドでなかった場合には、ステップＳ５においてエラーがセットされ、ステップＳ６において、このエラーがレスポンスとして送信される。対応コマンドであった場合には、ステップＳ１２へと進み、ＲＡＭ１５内に展開されている復号化されたアプリケーションプログラム（現在選択中のアプリケーションプログラム）により、与えられたコマンドが実行され、その結果が、ステップＳ６においてレスポンスとして送信されることになる。
【００４０】
結局、この図４の流れ図に示す手順によれば、外部装置２０から、特定のアプリケーションプログラムを選択する指示が与えられた場合に、この選択されたアプリケーションプログラムが復号化されてＲＡＭ１５内に展開され、この選択されたアプリケーションプログラムの実行が終了した場合に、ＲＡＭ１５内に格納されている復号化プログラムが消去されることになる。そして、選択されたアプリケーションプログラムの実行中は、ＲＡＭ１５内に展開されている復号化されたアプリケーションプログラムによって、一般コマンドが実行されることになる。
【００４１】
ところで、図４に示す手順では、アプリケーションプログラムは選択された段階でその全体が復号化され、また、アプリケーションプログラムの終了を待って、復号化されたプログラム全体が消去されるようにしているが、必ずしも全体を復号化し、全体を消去するという手順を採る必要はなく、部分ごとに復号化し、部分ごとに消去するという手順を採ってもかまわない。たとえば、外部装置２０から特定のアプリケーションプログラムについての特定のコマンドが与えられた場合に、この特定のアプリケーションプログラムのうち、少なくとも与えられた特定のコマンドの実行に必要な部分についての復号化を行うようにし、この特定のコマンドの実行が終了するたびに、復号化されたプログラムを消去するようにしてもよい。通常、アプリケーションプログラムには、多数のコマンドが定義されており、１つ１つのコマンドの実行には、当該アプリケーションプログラムの中の一部分のルーチンのみが使用される。したがって、与えられたコマンドの実行に必要なルーチンの部分のみをその都度復号化して利用するという手法を採れば、無用な復号化処理を行う必要はなくなる。また、ＲＡＭ１５内に展開される復号化プログラムも、実行に必要なルーチンの部分のみとなるため、アプリケーションプログラム全体が外部に読み出される可能性を更に低減させることが可能になる。
【００４２】
以上、本発明を図示する実施形態に基づいて述べたが、本発明はこれらの実施形態に限定されるものではなく、この他にも種々の態様で実施可能である。たとえば、上述の実施形態では、アプリケーションプログラム全体を暗号化して、ＩＣカード内に登録するようにしているが、アプリケーションプログラムの暗号化は必ずしも全体に対して行う必要はなく、セキュリティ上、特に必要な一部分のみを暗号化し、残りの部分は暗号化しない状態でＩＣカード内に登録するようにしてもかまわない。
【００４３】
また、本発明を実施する上では、ＩＣカード内に復号化手順を用意する必要があるが、この復号化手順が不正な手段によって外部に読み出される可能性もある。したがって、よりセキュリティを向上させるためには、暗号化および復号化に所定のキーを利用するような手法を採るのが好ましい。この場合、復号化手順を実施するためには、外部からＩＣカードに対してキーを与える必要があるため、たとえ不正な手段によって、ＩＣカード内部の復号化手順が読み出されたとしても、この復号化手順を用いて、直ちに復号化を行うことはできないため、安全性が向上することになる。なお、復号化に必要なキーは、たとえば、アプリケーション選択コマンドとともに、外部装置２０側からＩＣカード１０へと与えるようにすればよい。
【００４４】
【発明の効果】
以上のとおり本発明に係るＩＣカードによれば、アプリケーションプログラムを暗号化した状態でＩＣカード内に格納し、必要なときにだけこれを復号化して利用し、利用後に復号化プログラムを消去するようにしたため、より万全なセキュリティを確保することが可能になる。
【図面の簡単な説明】
【図１】一般的なＩＣカード１０と、外部装置（リーダライタ装置）２０との間で、情報の伝送を行っている状態を示すブロック図である。
【図２】本発明で用いるブロックごとの暗号化の方法を示す概念図である。
【図３】本発明の一実施形態に係るＩＣカードにおけるメモリ内の情報格納状態を示すブロック図である。
【図４】本発明に係るＩＣカードで行われる処理手順の一例を示す流れ図である。
【符号の説明】
１０…ＩＣカード
１１…ＣＰＵ
１２…Ｉ／Ｏインターフェイス
１３…ＲＯＭ
１４…ＥＥＰＲＯＭ
１５…ＲＡＭ
２０…外部装置
３０…アプリケーションプログラム
３１…第１のブロック
３２…第２のブロック
４１…第１の暗号化ブロック
４２…第２の暗号化ブロック
５１…第１の登録用暗号化ブロック
５２…第２の登録用暗号化ブロック
６１…第１の登録用暗号化ブロック
６２…第２の登録用暗号化ブロック
Ａ，Ｂ…暗号化手順
ＡＡ，ＢＢ，ＣＣ…復号化手順
Ｌ１１，Ｌ１２，Ｌ２１，Ｌ２２…ブロックの長さ情報
Ｒａ，Ｒｂ，Ｒｃ…ブロックの暗号化手順情報
【図１】
0004080079.tif 000002
【図２】
0004080079.tif 000003
【図３】
0004080079.tif 000004
【図４】
0004080079.tif 000005