(57)【要約】【課題】  効率的にかつ確実に第三者による侵入を防ぐことのできる仕組みを提供する。【解決手段】  プログラムをプロセス単位で実行するマイクロプロセッサ１０であって、第１プロセスに続いて実行される第２プロセスのプロセス識別情報と、第２プロセスの認証情報とを対応付けて保持する第１保持手段１６０と、外部からアクセス不能であって、第２プロセスの第１保持手段１６０のエントリ情報と第２プロセスの認証情報とを、第１プロセスの実行時に取得し、対応付けて保持する第２保持手段１９０と、切替命令が発行された場合に、第１保持手段１６０が保持する第２プロセスの認証情報と、第２保持手段１９０が保持する第２プロセスの認証情報とを比較し、認証情報が一致した場合に第２プロセスへの実行の切り替えを許可する切替許可手段１２０とを備えた。【選択図】        図４
2005196257.tif 000002
【特許請求の範囲】
【請求項１】
プログラムをプロセス単位で実行するマイクロプロセッサであって、
第１プロセスに続いて実行される第２プロセスを識別するプロセス識別情報と、前記第２プロセスの認証に利用する認証情報とを外部から取得する第１取得手段と、
前記第１取得手段が取得した前記プロセス識別情報と前記認証情報とを対応付けて保持する第１保持手段と、
前記第２プロセスの前記プロセス識別情報が保持されている前記第１保持手段のエントリを識別するエントリ情報と前記第２プロセスの前記認証情報とを、第１プロセスの実行時に前記第１保持手段から取得する第２取得手段と、
外部からアクセス不能であって、前記第２取得手段が取得した前記エントリ情報と前記認証情報とを対応付けて保持する第２保持手段と、
前記第１プロセスから前記第２プロセスへの切替命令が発行された場合に、前記第１保持手段が保持する前記第２プロセスの前記認証情報と、前記第２保持手段が保持する第２プロセスの前記認証情報とを比較し、比較の結果２つの前記認証情報が一致した場合に、前記第２プロセスへの実行の切り替えを許可する切替許可手段と
を備えたことを特徴とするマイクロプロセッサ。
【請求項２】
前記プログラムは暗号化されており、前記認証情報は、前記プロセスを含む暗号化された前記プログラムの復号化のための暗号鍵であって、
前記切替許可手段が第２プロセスへの切り替えを許可した場合に、前記暗号鍵によって前記第２プロセスとして実行される、暗号化された前記プログラムを復号化するプログラム復号化手段と、
前記プログラム復号化手段によって復号化された前記プログラムを前記第２プロセスとして実行する実行手段と
をさらに備えたことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記暗号鍵に演算を施し前記検証子を生成する演算手段と、
前記前記切替許可手段が前記第２プロセスへの切り替えを許可した場合に、前記演算手段によって生成された前記検証子を復号化する検証子復号化手段と
をさらに備え、
前記プログラム復号化手段は、前記検証子復号化手段による復号化によって得られた前記暗号鍵を利用して前記プログラムを復号化することを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
前記第１プロセスにより確保される第１レジスタと、
前記切替命令が発行されたときに、前記第１保持手段に保持された前記第２プロセスの前記エントリと、前記第２プロセスの前記認証情報とを前記第１レジスタに設定する設定手段と
をさらに備え、
前記比較手段は、前記第１レジスタに設定された前記認証情報と、前記第２保持手段が保持する前記認証情報とを比較することを特徴とする請求項１から３のいずれか一項に記載のマイクロプロセッサ。
【請求項５】
前記第１レジスタは、
前記エントリと前記認証情報とを保持する第２プロセス特殊レジスタと、
前記第１プロセスの実行に関連する情報を保持する汎用レジスタと
を含み、
前記レジスタ設定手段は、前記第２プロセス特殊レジスタに前記エントリおよび前記認証情報を設定し、
前記比較手段は、前記第２プロセス特殊レジスタが保持する前記認証情報と前記第２保持手段が保持する前記認証情報とを比較することを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項６】
前記第２プロセス実行時に、前記第１プロセスにより確保された前記第１レジスタが保持する情報を退避させる退避手段と、
前記退避手段によって退避された前記情報を保持するレジスタバッファと
をさらに備えたことを特徴とする請求項４または５に記載のマイクロプロセッサ。
【請求項７】
前記第２プロセスにより確保される第２レジスタと、
前記レジスタバッファに退避された情報を、前記第２レジスタに複写する複写手段と
をさらに備えたことを特徴とする請求項６に記載のマイクロプロセッサ。
【請求項８】
前記第１レジスタは、
前記第１プロセスの前記認証情報を保持する第１プロセス特殊レジスタをさらに含み、
前記第２プロセスにより確保される第２レジスタと、
前記切替許可手段が前記第２プロセスへの切り替えを許可した場合に、前記第１プロセスにより確保される前記第１プロセス特殊レジスタが保持する第１プロセスの前記認証情報を前記第２レジスタに複写する複写手段と
をさらに備え、
前記比較手段は、前記複写手段によって前記第２レジスタに複写された前記第１プロセスの前記認証情報と、前記第２保持手段が保持する前記第１プロセスの前記認証情報とを比較し、
前記切替許可手段は、前記比較の結果２つの前記認証情報が一致した場合に、前記第１プロセスへの切り替えを許可することを特徴とする５から７のいずれか一項に記載のマイクロプロセッサ。
【請求項９】
前記第２レジスタは、
前記第１プロセスの前記エントリ情報および前記第１プロセスの前記認証情報を保持する第１プロセス特殊レジスタと、
前記第２プロセスの実行に関連する情報を保持する汎用レジスタと
を含み、
前記比較手段は、前記第１プロセス特殊レジスタが保持する前記認証情報と、前記第２保持手段が保持する前記認証情報とを比較することを特徴とする請求項８に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを実行するマイクロプロセッサに関するものである。
【背景技術】
【０００２】
近年では、オープンシステムが普及してきている。オープンシステムにおいては、パーソナルコンピュータ（ＰＣ）などの一般ユーザ向けコンピュータのハードウェアやオペレーティングシステム（ＯＳ）のソースコードが開示されている。そして、エンドユーザは、オペレーティングプログラムを変更、改良することができる。これにより、エンドユーザは、所望のプログラムを得ることができる。
【０００３】
その一方で、アプリケーションプログラムが扱う情報の著作権や、プログラム自体の著作権を保護する必要がある。このためには、プログラムの秘密を守る仕組み、すなわちプログラムの改変を防止する仕組みが必要となる。アプリケーションプログラムに対する攻撃としては、ＯＳのプログラムを改変して、アプリケーションプログラムを攻撃することが想定される。従って、ＯＳに対してアプリケーションプログラムに対する攻撃を防ぐための処理を施すだけでは、第三者の侵入を防ぐことは困難である。このため、プログラムの秘密を守ることのできるハードウェアが必要である。一般に、ＯＳを改変することに比べてハードウェアを改変することはエンドユーザにとって極めて困難だからである。
【０００４】
このような特徴を備えたハードウェア、特にマイクロプロセッサとして、耐タンパプロセッサが既に提案されている（特許文献１，非特許文献１）。このようなプロセッサは、マルチタスク環境でプログラムと当該プログラムにおいて利用される情報とを暗号化する機能を備えている。これにより、プログラムと情報が第三者に漏洩したり、プログラム等が改変されるのを防止している。
【０００５】
【特許文献１】特開２００３−１０８４４２号公報
【非特許文献１】リー他著  “コピー及び耐タンパソフトウェアに対するアークテクチャ−支援”,コンピュータアーキテクチャーニュース、２８（５）、ｐ.１６８
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来システムを管理するＯＳが信頼できない環境においては、耐タンパプロセッサのみでは、悪意の第三者がＯＳのプログラムを改変して、アプリケーションプログラムを攻撃するのを防止することができないという問題があった。
【０００７】
本発明は、上記に鑑みてなされたものであって、効率的にかつ確実に第三者による侵入を防ぐことのできる仕組みを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、プログラムをプロセス単位で実行するマイクロプロセッサであって、第１プロセスに続いて実行される第２プロセスを識別するプロセス識別情報と、前記第２プロセスの認証に利用する認証情報とを外部から取得する第１取得手段と前記第１取得手段が取得した前記プロセス識別情報と前記認証情報とを対応付けて保持する第１保持手段と、前記第２プロセスの前記プロセス識別情報が保持されている前記第１保持手段のエントリを識別するエントリ情報と前記第２プロセスの前記認証情報とを、第１プロセスの実行時に前記第１保持手段から取得する第２取得手段と、外部からアクセス不能であって、前記第２取得手段が取得した前記エントリ情報と前記認証情報とを対応付けて保持する第２保持手段と、前記第１プロセスから前記第２プロセスへの切替命令が発行された場合に、前記第１保持手段が保持する前記第２プロセスの前記認証情報と、前記第２保持手段が保持する第２プロセスの前記認証情報とを比較し、比較の結果２つの前記認証情報が一致した場合に、前記第２プロセスへの実行の切り替えを許可する切替許可手段とを備えたことを特徴とする。
【発明の効果】
【０００９】
本発明にかかるマイクロプロセッサの第２保持手段は、外部からの侵入が不可能である。第２保持手段に保持されている情報は改変されない。従って、仮に第１保持手段に保持されている情報が改変されても、第２保持手段に保持されている情報は改変されていないので、両者を比較することにより、改変の有無が判断できる。すなわち、本発明にかかるマイクロプロセッサは、第２プロセスへの切り替え命令が発行されたときに、第１保持手段および第２保持手段がそれぞれ保持する認証情報を比較し、両者が一致した場合にのみプロセスの切り替えを許可することにより、悪意の第三者がＯＳを介して侵入するのを防止することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
以下に、本発明にかかるマイクロプロセッサの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１１】
図１は、本実施の形態にかかるターゲットシステム全体を示す図である。ターゲットシステム１０は、プロセッサ１００と、外部メモリ２００と、ハードディスク（ＨＤＤ）などの２次記憶装置３００と、これらを接続するシステムバス４００とを主に備えている。そして、これらの協働により、各ソフトウェアベンダ５００ａ，５００ｂ，・・・５００ｚから暗号化されたプログラムを取得し、これを復号化した後に実行する。
【００１２】
本実施の形態にかかるターゲットシステム１０は、ターゲットシステムユーザによる攻撃を防止することができる。ここで、ターゲットシステムユーザとは、ターゲットシステム１０に対して悪意でプログラムを改変するなどの攻撃を行うユーザのことである。以下、ターゲットシステム１０におけるターゲットシステムユーザによる攻撃を防止するための処理等について説明する。
【００１３】
図２は、第１ソフトウェアベンダ５００ａの機能構成を示すブロック図である。５００ａは、プログラム暗号化部５１０と、鍵暗号化部５２０とを有している。
【００１４】
プログラム暗号化部５１０は、平文プログラム（Ｐｎ）（ｎ＝１，２，・・・）を保護するためのプログラム鍵（Ｋｘｎ）（ｎ＝１，２，・・・）を選択する。そして、所定の共通鍵暗号アルゴリズムにより暗号化して、暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）を作成する。ここで、平文プログラム（Ｐｎ）は、ターゲットシステム１０に送信され、ターゲットシステム１０において実行されるプログラムである。
【００１５】
鍵暗号化部５２０は、プログラム鍵（Ｋｘｎ）を所定のアルゴリズムにより公開鍵（Ｋｐ）で暗号化して配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）を作成する。ここで、公開鍵（Ｋｐ）は、ターゲットシステム１０により公開されているターゲットシステム１０に固有の公開鍵である。
【００１６】
プログラム暗号化部５１０によって暗号化された後の暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）と、鍵暗号化部５２０によって暗号化された後の暗号化済プログラム鍵、すなわち配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）がターゲットシステム１０に送られる。なお、以下暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）および配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）の組み合わせをプログラムｎと称する。
【００１７】
なお、第２ソフトウェアベンダ５００ｂ〜第ｎソフトウェアベンダ５００ｎの機能構成等は、図２を参照しつつ説明した第１ソフトウェアベンダ５００ａの機能構成等と同様である。
【００１８】
図３は、ターゲットシステム１０の詳細な構成を示している。ターゲットシステム１０のプロセッサ１００は、プロセッサコア１２０と、キャッシュコントローラ１４０と、バスインターフェースユニット（ＢＩＵ）１６０と、公開鍵処理部１７０とを有している。
【００１９】
また、外部メモリ２００は、オペレーティングシステム（ＯＳ）２１０と、プログラム保持部２２０とを有している。
【００２０】
ＯＳ２１０は、ターゲットシステム１０全体を管理する。ＯＳ２１０は、複数のアプリケーションプログラム（以下単に「プログラム」と称す）を動的に外部メモリ２００に読み込む。そして、各プログラムを管理する。プログラム保持部２２０は送付元となる各ソフトウェアベンダにおいて暗号化されたプログラムおよび各プログラムに対応する配布鍵を保持する。
【００２１】
外部メモリ２００および２次記憶装置３００の内容はターゲットシステムのユーザが自由に読み出すことができる。また、書き換えることもできる。これらの機能は、プログラムの秘密保護の観点からは問題となる。しかし、マルチタスク環境で、ユーザの目的に応じてシステムの資源を適切に配分管理するためには不可欠の機能である。従って、悪意の第三者からの攻撃を防止するため、これらの読み出しおよび書き換えを制限するのは適切ではない。本実施の形態のプロセッサは、プログラムのベンダとターゲットシステムユーザとの間に立って秘密保護と資源の配分管理を行う、いわば信頼できる第３者として機能する。ＬＳＩとして実装されたプロセッサを改造して、本来守られている秘密情報を取り出したり、秘密保護の仕組みを変更することは一般のユーザにとっては事実上不可能といってよく、またプロセッサを偽造するにも高度な技術が必要である。よってプロセッサがプログラムのベンダとターゲットシステムユーザの両方からの信頼を受けるものとすることは妥当な仮定である。
【００２２】
ターゲットシステム１０は、ソフトウェアベンダ５００から配布鍵（Ｅｐ（Ｋｐ）[Ｋｘｎ]）および暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）を取得すると、２次記憶装置３００に蓄積する。そして、プログラム実行時に配布鍵（Ｅｐ（Ｋｐ）[Ｋｘｎ]）および暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）をプログラム保持部２２０に読み込む。
【００２３】
公開鍵処理部１７０は、プロセッサ秘密鍵（Ｋｓ）を利用して、プログラム保持部２２０が保持している配布鍵（Ｅｐ（Ｋｐ）[Ｋｘｎ]）を復号化する。これにより、プログラム鍵（Ｋｘｎ）を得る。ここで、プロセッサ秘密鍵（Ｋｓ）は、プロセッサ公開鍵（Ｋｐ）に対応する秘密鍵である。
【００２４】
ＢＩＵ１６０は、外部との入出力を行うインターフェースであって、プロセッサ１００と外部との情報の授受は、すべてＢＩＵ１６０を介して行われる。ＢＩＵ１６０は、また公開鍵処理部１７０において得られたプログラム鍵（Ｋｘｎ）を利用して、暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）を復号化する。これにより、平文プログラム（Ｐｎ）が得られる。プロセッサコア１２０が平文プログラム（Ｐｎ）を実行する際には、キャッシュコントローラ１４０は、平文プログラム（Ｐｎ）およびプログラム鍵（Ｋｘｎ）を保持する。
【００２５】
上述のように、プログラムに含まれる暗号化済プログラム（Ｅｓ（Ｋｓ）[Ｐｎ]）および配布鍵（Ｅｐ（Ｋｐ）[Ｋｘｎ]）を復号化するには、それぞれプログラム鍵（Ｋｘｎ）およびプロセッサ公開鍵（Ｋｐ）が必要である。従って、プログラムが外部メモリ２００や２次記憶装置３００に保持されていても、ターゲットシステムユーザがプログラム鍵（Ｋｘｎ）およびプロセッサ公開鍵（Ｋｐ）の値を知らない場合には、ターゲットシステムユーザによってこれらのプログラムが改変等されることはない。すなわち、プログラムは安全である。なお、本実施の形態においては、プログラム鍵（Ｋｘｎ）および平文プログラム（Ｐｎ）の内容は、プロセッサコア１２０の仕様に定められたユーザからの操作を除いては、外部から直接読み出すことはできない。
【００２６】
ＢＩＵ１６０による復号化によって得られた平文プログラム（Ｐｎ）は、キャッシュコントローラ１４０が有するキャッシュメモリに読み込まれる。復号化とキャッシュメモリへの読み込みは、所定のキャッシュアルゴリズムによるプログラムの実行に従って、部分的に行われる。すなわち、平文プログラム（Ｐｎ）全体が一度にキャッシュメモリに読み込まれなくともよい。また、キャッシュメモリに読み込まれたプログラムは既に復号されている。従って、プロセッサコア１２０は、暗号化されていないプログラムと同様に、当該プログラムを実行することができる。
【００２７】
以上のように、復号化後のプログラム鍵（Ｋｘｎ）および平文プログラム（Ｐｎ）を扱う部分は、プロセッサ１００の内部に限定される。すなわち、ＯＳ２１０が復号化後のプログラム鍵（Ｋｘｎ）および平文プログラム（Ｐｎ）を扱う場合はない。このため、ＯＳ２１０がプログラム鍵（Ｋｘｎ）または平文プログラム（Ｐｎ）に対して不適切な処理を施すことによる悪意の第三者による侵入を防止することができる。
【００２８】
以下、このようなプロセッサ１００の構成および処理について説明する。本実施の形態のプロセッサ１００は、マルチタスクのコンピュータシステムにおいて、マルチベンダのプログラムに対してプログラムを秘密にするための安全性を備えた耐タンパプロセッサである。耐タンパプロセッサとは、マルチタスクＯＳの管理下において、プロセッサハードウェアによりマルチベンダのプログラムを保護することができるプロセッサである。具体的には、ＯＳが信用できないことを前提として、プロセッサパッケージ単体のハードウェア機能で完結するプログラムの秘密保護機能を提供する。
【００２９】
耐タンパプロセッサハードウェアは、従来ＯＳが管理していたプロセス情報の一部を直接管理する。また、プログラム自身の暗号処理をハードウェアが処理する。この点は、耐タンパプロセッサハードウェアと通常のプロセッサハードウェアとの大きな違いである。また、耐タンパプロセッサはマルチタスク環境をサポートするため、複数のＥＣＵを擬似並行的に実行できる。ここで、ＥＣＵとは、耐タンパプロセッサハードウェアが管理するプロセス、すなわち実行制御ユニットのことである。
【００３０】
図４は、プロセッサ１００の詳細な構成を示すブロック図である。公開鍵処理部１７０は、プロセッサ秘密鍵保持部１７２と、配布鍵復号化部１７４と、ハッシュ計算部１７６とを有している。配布鍵復号化部１７４は、プロセッサ秘密鍵保持部１７２が保持しているプロセッサ秘密鍵（Ｋｓ）を利用して、システムバス４００を介して受け取った配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）を復号化し、プログラム鍵（Ｋｘｎ）を得る。ハッシュ計算部１７６は、システムバス４００を介して受け取った配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）に対して所定のアルゴリズムを施し、配布鍵検証子（Ｈｘｎ）を生成する。配布鍵復号化部１７４によって得られたプログラム鍵（Ｋｘｎ）およびハッシュ計算部１７６によって得られた配布鍵検証子（Ｈｘｎ）は、後述の共通鍵テーブル１６２に登録される。なお、本実施の形態においては、配布鍵検証子（Ｈｘｎ）は、後述のプログラムの認証に利用される。
【００３１】
ここで、図５を参照しつつ、配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）と配布鍵検証子（Ｈｘｎ）の関係について説明する。配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）は、プログラム鍵６０２およびプログラム長６０４などの配布鍵構成要素６００をプロセッサ公開鍵（Ｋｐ）で暗号化したデータである。また、配布鍵検証子（Ｈｘｎ）は、配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）を所定のアルゴリズムに基づいて計算したハッシュ値である。所定のアルゴリズムとしては、例えば、ＳＨＡ−２５６などがある。
【００３２】
例えば、ＲＳＡ２０４８のアルゴリズムを使用した場合、配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）は２０４８ビットのデータ量を有する。これに対し、ＳＨＡ−２５６を用いると、配布鍵検証子（Ｈｘｎ）は配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）のデータ量の１／８のデータ量になる。このように、ハッシュ値を利用することにより、プロセッサ内部のテーブル量やメモリ容量を削減することができる。
【００３３】
なお、本実施の形態においては、データ量を削減する観点から、配布鍵検証子を利用することとしたが、他の例としては、配布鍵検証子を利用するのにかえて、配布鍵そのものを利用してもよい。
【００３４】
また、後述のように、ターゲットシステム１０のプロセッサ１００において呼出元であるプログラムが呼出先であるプログラムを認証する場合には、配布鍵検証子の真正性が必要とされる。そこで、呼出先プログラムの配布鍵検証子に、配布鍵検証子の真正性を確認するための情報としてプログラムベンダによる証明書（ＣｅｒｔＨ）をさらに付与する。これにより、呼出元であるプログラムは、上記証明書を検証することにより、呼出先であるプログラムを認証するための配布鍵検証子の真正性を確認できる。
【００３５】
再び説明を図４に戻す。ＢＩＵ１６０は、共通鍵テーブル１６２と、セレクタ１６４と、暗号／復号処理部１６６とを有している。共通鍵テーブル１６２は、複数のエントリ領域を有しプロセッサ１００が実行するプロセスに対するプログラム鍵などの共通鍵をエントリ領域に保持する。暗号／復号処理部１６６は、共通鍵によりプロセスを暗号化または復号化する。セレクタ１６４は、共通鍵テーブル１６２に読み込まれた共通鍵のうちから所定の共通鍵を抽出する。
【００３６】
図６は、共通鍵テーブル１６２のデータ構成を模式的に示している。共通鍵テーブル１６２は、Ｕ０〜Ｕｍまでのｍ＋１個のエントリを有する。各エントリにＥＣＵが登録される。ここで、ＥＣＵとは、耐タンパプロセッサが管理するプロセスのことである。プロセッサ１００は、ＥＣＵを１単位として処理を実行する。また、ＥＣＵＩＤとは、プロセッサ１００がＥＣＵを一意に識別するための識別情報である。
【００３７】
各エントリは、それぞれプログラム鍵フィールドと、プログラム長フィールドと、配布鍵検証子フィールドと、データ鍵フィールドとを有している。
【００３８】
プログラム鍵フィールドには、対応するプログラムのプログラム鍵（Ｋｘｎ）が格納されている。プログラム長フィールドには、対応するプログラムのプログラム長（Ｌｘ）が格納されている。配布鍵検証子フィールドには、プログラム鍵に対応する配布鍵から生成された配布鍵検証子（Ｈｘｎ）が格納されている。データ鍵フィールドには、データ鍵（Ｋｄｎ）が格納されている。ここで、データ鍵とは、データの暗号化および復号化に利用される暗号鍵のことである。
【００３９】
なお、本実施の形態にかかるＢＩＵは、本発明にかかる第１取得手段および第１保持手段を構成する。
【００４０】
再び、説明を図４に戻す。キャッシュコントローラ１４０は、データキャッシュメモリ１４２と命令キャッシュメモリ１４４と、各メモリを制御するキャッシュメモリ制御部１４６とを有している。
【００４１】
図７は、データキャッシュメモリ１４２のメモリマップを模式的に示している。データキャッシュメモリ１４２は、キャッシュライン１４２０ａ〜１４２０ｎを有している。また、各キャッシュラインは、タグフィールドとデータフィールドを有している。さらに、タグフィールドは、制御ビットフィールドと、ＥＣＵＩＤフィールドとアドレスフィールドとを有している。ＥＣＵＩＤフィールドは、ＥＣＵＩＤを保持する。アドレスフィールドは、ＥＣＵのアドレスを保持する。
【００４２】
制御ビットフィールドは、有効フィールドと、ダーティフィールドと、共有フィールドとを有している。有効フィールドは、各キャッシュラインの有効/無効（バリッド／インバリッド）を示す情報を保持する。ダーティフィールドは、キャッシュ内容が外部メモリ２００の内容から更新されている場合に、外部メモリ２００において対応する更新がなされているか否か、すなわち外部メモリ２００における更新の有無(ダーティ/クリーン)を示す情報を保持する。共有フィールドは、キャッシュラインを他のプロセッサと共有しているか否か(シェアド／エクスクルーシブ)を示す情報を保持する。
【００４３】
再び、説明を図４に戻す。プロセッサ１００のプロセッサコア１２０は、汎用レジスタ１２１と、データ暗号化属性レジスタ１２２と、呼出元保持レジスタ１２３と、呼出先指定レジスタ１２４と、切替許可判定部１２５と、カレントＥＣＵＩＤ保持部１２６とを有している。図８−１〜図８−４に各レジスタのデータ構成を模式的に示している。図８−１は、汎用レジスタ１２１のデータ構成を示している。図８−２は、データ暗号化属性レジスタ１２２のデータ構成を示している。図８−３は、呼出元保持レジスタ１２３のデータ構成を示している。図８−４は、呼出先指定レジスタ１２４のデータ構成を示している。
【００４４】
汎用レジスタ１２１には、プロセッサコア１２０において現在時実行中のプロセスのＥＣＵＩＤが設定されている。データ暗号化属性レジスタ１２２には、処理対象となるプログラムの暗号化に関連する値が設定されている。呼出元保持レジスタ１２３には、呼出元であるプログラム等に関連する情報が設定されている。
【００４５】
呼出先指定レジスタ１２４には、呼出元であるプログラム等から呼び出される呼出先のプログラム等に関連する情報が設定されている。切替許可判定部１２５は、呼出元と呼出先の間の実行の切り替えを許可するか否かを判定する。カレントＥＣＵＩＤ保持部１２６には、現在実行中のＥＣＵのＥＣＵＩＤが設定されている。
【００４６】
プロセッサ１００は、さらにセキュアコンテキストスイッチ部１８０を有している。セキュアコンテキストスイッチ部１８０は、レジスタ値コピー部１８２と、コンテキストバッファ部１８４とを有している。レジスタ値コピー部１８２はプロセッサコア１２０の各レジスタの値をコンテキストバッファ部１８４にコピーする。より具体的には、レジスタ値コピー部１８２は、一のプログラムの実行中に割り込みが発生し実行が中断される場合、中断時におけるプロセッサコア１２０の各レジスタの情報をコンテキストバッファ部１８４に保存する。
【００４７】
なお、本実施の形態にかかるセキュアコンテキストスイッチ部１８０は、本発明にかかる退避手段および複写手段を構成する。
【００４８】
プロセッサ１００は、さらにＥＣＵ管理部１９０を有している。ＥＣＵ管理部１９０は、ＥＣＵ管理テーブル１９２を有している。ＥＣＵ管理部１９０は、プロセッサコア１２０が実行すべきＥＣＵのＥＣＵＩＤをＥＣＵ管理テーブル１９２に登録する。ＥＣＵ管理テーブル１９２は、複数のエントリ領域を有している。図９は、ＥＣＵ管理テーブル１９２のデータ構成を模式的に示している。ＥＣＵ管理テーブル１９２の各エントリ領域は、ＥＣＵ状態フィールド１９２０と、プログラム開始アドレスフィールド１９２２と、プログラム長フィールド１９２４と、検証子フィールド１９２６とを有している。
【００４９】
ＥＣＵ状態フィールド１９２０には、ＥＣＵの実行状態を示す情報が設定されている。プログラム開始アドレスフィールド１９２２には、ＥＣＵのプログラムの開始アドレスが設定されている。プログラム長フィールド１９２４には、ＥＣＵのプログラム長が設定されている。検証子フィールド１９２６には、ＥＣＵに対応する配布鍵の配布鍵検証子が設定されている。
【００５０】
なお、本実施の形態にかかるＥＣＵ管理部１９０は、本発明にかかる第２取得手段および第２保持手段を構成する。
【００５１】
次に、本実施の形態のプロセッサにおけるソフトウェアモジュール間の認証処理について説明する。ここでは、一例として、図１０を参照しつつプログラムＡからライブラリＢを呼び出すときの認証処理について説明する。プログラムＡは、プロセスとして実行されるプログラムである。なお、ライブラリＢはプログラムＡのプロセスとメモリ空間全体を共有する。図１０ではＯＳ，プログラムＡ，ライブラリＢが並行して実行されるようにかかれているが、ある時点においてプロセッサコアが実行するプログラムはただ一つであり、それぞれのプログラムは擬似並列的に動作している。以下の説明ではあるプログラムから別のプログラムへの切り替えを制御を移すと記述する。
【００５２】
まず、ＯＳ２１０は、プログラムＡをＥＣＵ管理テーブル１９２に登録する(ステップＳ１００)。具体的には、まず共通鍵テーブル１６２からプログラムＡを登録するＥＣＵＩＤを決定する。そして、決定したＥＣＵＩＤにプログラムＡの配布鍵、配布鍵検証子等を登録する。そして、決定したＥＣＵＩＤとプログラムＡの配布鍵（Ｅｐ（Ｋｐ）（ＫｘＡ））をパラメータとして配布鍵登録命令を発行する。次に、ＥＣＵ管理部１９０は、ＥＣＵ管理テーブル１９２から空きのエントリを選択し、配布鍵登録命令に基づいて、プログラムＡをＥＣＵ管理テーブル１９２の空きエントリに登録する。すなわち、プログラムＡの配布鍵検証子等を登録する。次に、ＯＳ２１０は、プログラムＡへ制御を移し、プログラムＡの実行が開始される (ステップＳ１０２)。
【００５３】
ここで、ステップＳ１００において、ＯＳ２１０からの指示によりプロセッサ１００が行う登録処理について詳述する。図１１は、ステップＳ１００において、プロセッサ１００が行う配布鍵登録処理を示すフローチャートである。プロセッサ１００のハッシュ計算部１７６は、ＯＳ２１０により配布鍵登録命令が発行されると、プログラムＡの配布鍵（Ｅｐ（Ｋｐ）（ＫｘＡ））のハッシュ値、すなわち配布鍵検証子（ＨｘＡ）を算出する(ステップＳ１００２)。次に、プロセッサ１００の配布鍵復号化部１７４は、配布鍵（Ｅｐ（Ｋｐ）（ＫｘＡ））をプロセッサ秘密鍵（Ｋｓ）により復号化して、プログラム鍵（ＫｘＡ）およびプログラム長（ＬｘＡ）を取得する(ステップＳ１００４)。
【００５４】
そして、プロセッサ１００のＥＣＵ管理部１９０は、ＥＣＵ管理テーブル１９２のうち指定されたＥＣＵＩＤのエントリに、先に取得したプログラム鍵（ＫｘＡ）、プログラム長（ＬｘＡ）、および配布鍵検証子（ＨｘＡ）を書き込む。ここで、ＥＣＵＩＤは、配布鍵登録命令のパラメータとして指定されている。
【００５５】
再び、説明を図１０に戻す。プログラムＡの登録が完了すると、プログラムＡの実行が開始される(ステップＳ１１０)。次に、プログラムＡは、共有メモリ領域を確保する(ステップＳ１１２)。次に、呼び出し先であるライブラリＢの配布鍵検証子を取得する(ステップＳ１１４)。ここで、ライブラリＢの配布鍵検証子の取得は、本実施の形態にかかる実行切替命令の取得に相当する。さらに、ライブラリＢの配布鍵検証子の真正性を証明書に基づいて検証する。そして、ライブラリＢの登録およびロードをＯＳ２１０に要求する(ステップＳ１１６)。
【００５６】
ＯＳ２１０は、要求を受けると、ライブラリＢをＥＣＵ管理テーブル１９２に登録する(ステップＳ１２０)。このときの、プロセッサ１００の処理は、図１１を参照しつつ説明したプログラムＡを登録するときの処理と同様である。具体的には、まず、共通鍵テーブル１６２からライブラリＢを登録するＥＣＵＩＤを決定する。そして、決定したＥＣＵＩＤにライブラリＢの配布鍵、配布鍵検証子等を登録する。そして、決定したＥＣＵＩＤとライブラリＢの配布鍵（Ｅｐ（Ｋｐ）（ＫｘＢ））をパラメータとして配布鍵登録命令を発行する。そして、ＥＣＵ管理部１９０は、ＥＣＵ管理テーブル１９２から空きのエントリを選択し、配布鍵登録命令に基づいてライブラリＢをＥＣＵ管理テーブル１９２の空きのエントリに登録する。すなわち、ライブラリＢの配布鍵検証子等を登録する。
【００５７】
次に、ＯＳ２１０は、ライブラリＢのプログラムロード操作を行う。また、ロードアドレスに関連するリロケーション操作を行う。そして、ライブラリＢを読み出し可能な状態にした後、ライブラリＢの登録が完了した旨を示す登録完了通知をプログラムＡに送り、制御はプログラムＡに移される(ステップＳ１２２)。プログラムＡは、登録完了通知により、ＯＳ２１０から呼出先であるライブラリＢのＥＣＵＩＤを取得する。
【００５８】
次に、プログラムＡは、共有メモリ領域のアドレス領域および暗号鍵をデータ暗号化属性レジスタ１２２に設定する(ステップＳ１３０)。また、汎用レジスタ１２１および共有メモリ領域にライブラリＢを呼び出すための呼出パラメータを格納する(ステップＳ１３２)。さらに、呼出先指定レジスタ１２４に、ＢＩＵ１６０の共通鍵テーブル１６２に登録されているライブラリＢのＥＣＵＩＤおよび配布鍵検証子を設定する(ステップＳ１３４)。次に、ＥＣＵ呼出命令を発行する(ステップＳ１４０)。そして、プロセッサ１００によりＥＣＵ呼出命令が実行される。
【００５９】
図１２は、プロセッサ１００による呼出命令実行処理を示すフローチャートである。プロセッサ１００はまず、呼出先指定レジスタ１２４からそれぞれ呼出先ＥＣＵＩＤ１２４１および呼出先配布鍵検証子１２４２を取得する(ステップＳ１４０２)。
【００６０】
なお、プログラムＡによる呼出命令が発行されたときには、呼出先指定レジスタ１２４には、共通鍵テーブル１６２から取得した、ライブラリＢのＥＣＵＩＤおよび配布鍵検証子が設定されている。
【００６１】
次に、呼出先指定レジスタ１２４から取得した呼出先ＥＣＵＩＤに対応して、ＥＣＵ管理テーブル１９２に登録されている配布鍵検証子を取得する(ステップＳ１４０４)。次に、呼出先指定レジスタ１２４から取得した呼出先配布鍵検証子１２４２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とを比較する(ステップＳ１４０６)。
【００６２】
呼出先指定レジスタ１２４から取得した呼出先配布鍵検証子１２４２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とが一致した場合には(ステップＳ１４０６，Ｙｅｓ)、切替許可判定部１２５は、プログラムＡからライブラリＢへの切り替えを許可し、呼出先であるライブラリＢの実行に移行する。
【００６３】
すなわち、まず、セキュアコンテキストスイッチ部１８０は、呼出元であるプログラムＡに関するレジスタ値をコンテキストバッファ部１８４に退避させる(ステップＳ１４０８)。具体的には、汎用レジスタ１２１、データ暗号化属性レジスタ１２２、呼出元保持レジスタ１２３に設定されているレジスタ値をコンテキストバッファ部１８４に退避させる。以降、各レジスタは、ライブラリＢにより使用される。
【００６４】
次に、呼出先指定レジスタ１２４が初期化される(ステップＳｑ１４１０)。次に、コンテキストバッファ部１８４が保持している呼出元であるプログラムＡのレジスタ値のうち、ローカル変数用のデータ暗号化属性レジスタ１２２４〜１２２６に設定されていたレジスタ値以外のレジスタ値が、呼出先であるライブラリＢのレジスタにコピーされる(ステップＳ１４１２)。
【００６５】
他の例としては、プロセッサコア１２０は、レジスタセットを２つ有してもよい。この場合には、２つのレジスタセットを利用することにより、上記処理を効率化することができる。このように、ライブラリＢのレジスタ値とプログラムＡのレジスタ値の入れ替えを行えばよく、このためのレジスタセットの個数、およびレジスタセットへの設定処理は本実施の形態に限定されるものではない。
【００６６】
次に、呼出元保持レジスタ１２３に呼出元であるプログラムＡのＥＣＵＩＤおよび配布鍵検証子を設定する(ステップＳ１４１４)。次に、呼出先指定レジスタ１２４に呼出先であるライブラリＢの値を設定する(ステップＳ１４１６)。次に、呼出先ＥＣＵの開始アドレスを実行させる(ステップＳ１４１８)。以上で、呼び出し命令実行処理が完了する。
【００６７】
一方、ステップＳ１４０６において、呼出先指定レジスタ１２４から取得した呼出先配布鍵検証子１２４２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とが一致しない場合には(ステップＳ１４０６，Ｎｏ)、呼出元であるプログラムＡのレジスタ値がコンテキストバッファ部１８４に退避される(ステップＳ１４３０)。次に、呼出先配布鍵検証子エラーが発生し、制御がＯＳ２１０に移る(ステップＳ１４３２)。以上で、呼び出し命令実行処理が完了する。
【００６８】
以上のように、呼び出し命令実行処理においては、呼出元であるプログラムＡから呼出先であるライブラリＢが呼び出されるときに、呼出先であるライブラリＢの認証が行われる。従って、悪意の第三者がＯＳ２１０による処理を利用して、ライブラリＢ以外のプログラム等を誤って実行させるのを避けることができる。
【００６９】
悪意の第三者がＯＳ２１０による処理を利用して攻撃する場合としては、以下の例が考えられる。すなわち、プログラムＡがライブラリＢの登録を依頼するときに、ＯＳ２１０が、ライブラリＢにかえてライブラリＢ以外のプログラムの登録を依頼する。この場合には、ライブラリＢ以外のプログラムが呼び出されてしまう。
【００７０】
また、一旦ライブラリＢが正しく登録され、プログラムＡに割り当てられたＥＣＵＩＤを通知した場合であっても、プログラムＡがライブラリＢを呼び出す前に、ＯＳ２１０が割り込みによりプログラムＡの実行を中断し、プログラムＡに通知した共通鍵テーブル１６２のＥＣＵＩＤに別のプログラムを登録することが可能である。この場合にも、ライブラリＢ以外のプログラムが呼び出されてしまう。
【００７１】
以上の攻撃を防ぐためには、呼び出し先がライブラリＢであるとの認証に成功した場合にのみ呼出先であるライブラリＢの実行を許可する必要がある。また、呼出先がライブラリＢであることの確認は、プログラムＡがライブラリＢを呼び出すときに行う必要がある。
【００７２】
上述のように、本実施の形態にかかる呼び出し命令実行処理においては、ライブラリＢを呼び出すときに、単に呼び出し先ＥＣＵＩＤを指定するだけでなく、配布鍵検証子に基づいて呼出先がライブラリＢであることの認証を行い、認証に成功した場合にのみライブラリＢの実行を開始させている。したがって、悪意の第三者によるＯＳ２１０を利用した攻撃を防ぐことができる。
【００７３】
また、本実施の形態にかかる呼び出し命令実行処理においては、呼出先のプログラムの配布鍵検証子を予め呼出先指定レジスタ１２４にセットしておき、呼出命令の発行時にＥＣＵ管理テーブル１９２に登録されている配布鍵検証子と呼出先指定レジスタ１２４にセットされている配布鍵検証子とを照合することにより呼出先のプログラムを認証している。呼出先指定レジスタ１２４にセットされた配布鍵検証子とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子との比較は、きわめて単純なハードウェアによって実現することができる。従って、ハードウェアの規模を小さくすることができる。また、呼出命令の実行におけるオーバヘッドを少なくすることができる。
【００７４】
また、本実施の形態においては、ローカル変数用レジスタ値以外の呼出元のレジスタ値を呼出元から呼出先にコピーしている。すなわち、呼び出しのためのパラメータを外部メモリに保存することなく、呼出元から呼出先に受け渡されている。従って、外部メモリの入出力および暗号処理にかかる処理オーバヘッドを削減することができる。さらに、外部メモリにおいてパラメータがすり替えられる、いわゆるリプレイアタックの可能性を排除することができる。
【００７５】
また、汎用レジスタ１２１に保存できない大きなサイズのパラメータは、データ暗号化属性レジスタ１２２のＥＳレジスタ１２２１〜１２２３によって暗号化属性が指定された共有メモリ領域に保存することができる。これにより、大きなパラメータの受け渡しが可能になる。共有メモリ受け渡しのための暗号鍵を、呼出元から呼出先へデータ暗号化属性レジスタの設定として直接受け渡すことにより、パラメータの受け渡しを簡便に行うことができる。
【００７６】
また、呼出先のライブラリに開示したくない情報は、ＥＬレジスタ１２２４〜１２２６によって暗号化属性が指定された呼出元のローカルのメモリ領域に保持しておくことが望ましい。ＥＬレジスタ１２２４〜１２２６の値は、呼出先にコピーされず、呼出先からの秘匿が可能だからである。
【００７７】
再び説明を図１０に戻す。ステップＳ１４０によりライブラリＢの認証に成功すると、ライブラリＢの実行が開始される。図１３は、このときのライブラリＢにかかる処理を示すフローチャートである。
【００７８】
まず、各レジスタおよび共有メモリから処理パラメータを取得する(ステップＳ２００)。次に、プログラムＡから要求された処理が実行される(ステップＳ２０２)。次に、処理結果が所定のレジスタおよび共有メモリに書き込まれる(ステップＳ２０４)。次に、復帰命令が発行される(ステップＳ２０６)。以上で、ライブラリＢにかかる処理が完了する。なお、ライブラリＢにかかる処理においては、呼出先の共有ライブラリは毎回所定の開始アドレスから実行を開始することとし、前回終了時のコンテキストは引き継がない。
【００７９】
再び説明を図１０に戻す。ライブラリＢにおける実行が完了すると、プログラムＡへの復帰命令が発行され、ライブラリＢからプログラムＡに処理結果が通知される(ステップＳ１６０)。復帰先は、呼び出し時に呼出元保持レジスタ１２３設定されている。なお、ライブラリＢから呼出元保持レジスタ１２３のレジスタ値を読み出すことができるが、呼出元保持レジスタ１２３の値を書き換えることは禁止されている。
【００８０】
ライブラリＢは、呼び出し元であるプログラムＡの配布鍵の配布鍵検証子について、図１２において説明した、呼出先であるライブラリＢの配布鍵検証子の認証処理と同様の処理を行う。その結果プログラムＡの認証に成功した場合には、プログラムＡへの復帰処理が続行される。
【００８１】
一方、プログラムＡの認証に成功しなかった場合には、プログラムＡへの復帰処理を中断し、ＯＳ２１０に対して終了のシステムコールを発行し、処理を中断する。
【００８２】
以下、図１４を参照しつつ、このときのプロセッサ１００の処理について説明する。まず、復帰命令を発行したＥＣＵの呼出元保持レジスタ１２３からそれぞれ呼出元ＥＣＵＩＤ１２３１および呼出元配布鍵検証子１２３２を取得する(ステップＳ１６０２)。次に、ＥＣＵ管理テーブル１９２の呼出元ＥＣＵＩＤにより指定されているエントリに登録されている配布鍵検証子を取得する(ステップＳ１６０４)。次に、呼出元保持レジスタ１２３から取得した呼出元配布鍵検証子１２３２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とを比較する(ステップＳ１６０６)。
【００８３】
呼出元保持レジスタ１２３から取得した呼出元配布鍵検証子１２３２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とが一致した場合には(ステップＳ１６０６，Ｙｅｓ)、コンテキストバッファ部１８４に保持されているレジスタ情報から呼出先レジスタの配布鍵検証子を取得する(ステップＳ１６０８)。
【００８４】
次に、これまで実行中だったＥＣＵに対応する配布鍵検証子と、コンテキストバッファ部１８４から取得した呼出先配布鍵検証子を比較する(ステップＳ１６１０)。
【００８５】
実行中だったＥＣＵの配布鍵検証子と、復帰先のコンテキストから取得した配布鍵検証子とが一致した場合、すなわちライブラリＢの認証に成功した場合には(ステップＳ１６１０，Ｙｅｓ)、後述の切替処理に移行する。
【００８６】
切替処理においては、セキュアコンテキストスイッチ部１８０は、まず実行中であった呼出先であるライブラリＢに関するレジスタ値をコンテキストバッファ部１８４に退避させる(ステップＳ１６１２)。具体的には、汎用レジスタ１２１、データ暗号化属性レジスタ１２２、および呼出先指定レジスタ１２４のレジスタ値を退避させる。以降、レジスタは復帰先であるプログラムＡにより使用される。
【００８７】
次に、コンテキストバッファ部１８４が保持していた復帰先のＥＣＵのレジスタ値を復帰させ(ステップＳ１６１４)、コンテキストバッファ１８４が保持していた呼出先であるライブラリＢのレジスタ値のうち、汎用レジスタ１２１のＲ２〜Ｒ１５のレジスタ値、およびローカル変数用のデータ暗号化属性レジスタ１２２４〜１２２６のレジスタ値を除く各レジスタ値が、呼出先であるライブラリＢのレジスタにコピーされる(ステップＳ１６１６)。このように、復帰の際には、呼出元であるプログラムＡの実行環境を不必要に壊すのを避けるため、汎用レジスタ１２１のレジスタ値のうちＲ０およびＲ１のレジスタ値のみをコピーする。
【００８８】
次に、カレントＥＣＵＩＤ保持部１２６に復帰先であるプログラムＡのＥＣＵＩＤを設定し(ステップＳ１６１８)、コンテキストバッファ部１８４から復帰したＰＣに制御を移行して、プログラムＡの実行が再開される(ステップＳ１６２０)。以上で、切替処理が完了する。
【００８９】
一方、ステップＳ１６０６において、呼出元保持レジスタ１２３から取得した呼出元配布鍵検証子１２３２とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とが一致しなかった場合(ステップＳ１６０６，Ｎｏ)、およびステップＳ１６１０において、実行中だったＥＣＵの配布鍵検証子と、コンテキストバッファ部１８４から取得した配布鍵検証子とが一致なかった場合には(ステップＳ１６１０，Ｎｏ)、呼出先であるライブラリＢのレジスタ値がコンテキストバッファ部１８４に退避される(ステップＳ１６３０)。次に、復帰先配布鍵検証子エラーが発生する(ステップＳ１６３２)。この処理は、呼出命令に対する処理において、呼出先配布鍵検証子とＥＣＵ管理テーブル１９２に登録されている配布鍵検証子とが一致しない場合の処理と同様である。
【００９０】
このように、ライブラリＢの配布鍵検証子の認証に成功した場合にのみ、プログラムＡは、ライブラリＢから処理結果を受け取るので、プログラムＡが本来意図していた呼出先であるライブラリＢ以外のプログラムから処理結果を受け取る可能性を排除することができる。
【００９１】
なお、本実施の形態においては、プログラムＡにかかるステップＳ１３２からステップＳ１６０までの処理は１回で完了するが、他の例としては、かかる処理をループ処理として複数回実行することとしてもよい。
【００９２】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【００９３】
そうした変更例としては、本実施の形態においては、プログラムＡがライブラリＢを呼び出す場合の処理について説明したが、さらにライブラリＢが他のライブラリＣを呼び出す、いわゆるネスト呼び出しを行う場合であっても、同様の認証処理が行われる。
【００９４】
すなわち、ライブラリＢは、呼出先であるライブラリＣのＥＣＵＩＤおよび配布鍵検証子を呼出先レジスタに設定し、呼出命令を発行する。ライブラリＢの実行環境では、呼出元レジスタ値はプログラムＡのものである。したがって、ライブラリＢの呼び出し元レジスタ値は、他のレジスタ値とともにコンテキストバッファ部１８４に退避される。そして、ライブラリＣの実行環境では、ライブラリＢのＥＣＵＩＤと配布鍵検証子が呼出元レジスタに設定される。そして、ライブラリＣからの復帰命令が発行されると、ライブラリＢのレジスタ値がコンテキストバッファ部１８４から復帰し、呼出元レジスタ値もプログラムＡのものとなる。
【００９５】
このように、ライブラリＢが復帰命令を発行すると呼出元のプログラムＡに復帰する。以上の処理によりネスト処理が可能である。
【００９６】
このように、呼出元のＥＣＵＩＤおよび呼出元の配布鍵検証子を保持するレジスタと、呼出先のＥＣＵＩＤおよび呼出先の配布鍵検証子を保持するレジスタとがそれぞれ別個独立に設けられ、呼出元から呼出先への切り替えの際には、呼出元のＥＣＵＩＤおよび配布鍵検証子は、いずれもコンテキストバッファ１８４に退避される。このように、コンテキストバッファ１８４に保持されるので、呼出元の情報を安全に保持することができる。また、呼出先から呼出元への復帰の際には、呼出元のレジスタ値も復帰させることができる。従って、変更例にかかるような多重呼出においても、安全にデータの受け渡しをすることができる。
【産業上の利用可能性】
【００９７】
以上のように、本発明にかかるマイクロプロセッサは、プロセスの切り替え処理に有用であり、特に、第三者の侵入を防ぐ処理に適している。
【図面の簡単な説明】
【００９８】
【図１】本実施の形態にかかるターゲットシステム全体を示す図である。
【図２】第１ソフトウェアベンダ５００ａの機能構成を示すブロック図である。
【図３】ターゲットシステム１０の詳細な構成を示す図である。
【図４】プロセッサ１００の詳細な構成を示すブロック図である。
【図５】配布鍵（Ｅｐ（Ｋｐ）[ｋｘｎ]）と配布鍵検証子（Ｈｘｎ）の関係について説明するための図である。
【図６】共通鍵テーブル１６２のデータ構成を模式的に示す図である。
【図７】データキャッシュメモリ１４２のメモリマップを模式的に示す図である。
【図８−１】汎用レジスタ１２１のデータ構成を示す図である。
【図８−２】データ暗号化属性レジスタ１２２のデータ構成を示す図である。
【図８−３】呼出元保持レジスタ１２３のデータ構成を示す図である。
【図８−４】呼出先指定レジスタ１２４のデータ構成を示す図である。
【図９】ＥＣＵ管理テーブル１９２のデータ構成を模式的に示す図である。
【図１０】プログラムＡからライブラリＢを呼び出すときの認証処理について説明するための図である。
【図１１】図１０に示すステップＳ１００において、プロセッサ１００が行う配布鍵登録処理を示すフローチャートである。
【図１２】図１０に示すステップＳ１４０において、プロセッサ１００が行うプロセッサ１００による呼出命令実行処理を示すフローチャートである。
【図１３】図１０に示すステップＳ１４０においてライブラリＢの認証に成功した場合のライブラリＢの処理を示すフローチャートである。
【図１４】図１０に示すステップＳ１６０におけるプロセッサ１００の処理を示すフローチャートである。
【符号の説明】
【００９９】
１０  ターゲットシステム
１００  プロセッサ
１２０  プロセッサコア
１２１  汎用レジスタ
１２２  データ暗号化属性レジスタ
１２３  呼出元保持レジスタ
１２４  呼出先指定レジスタ
１２５  切替許可判定部
１２６  保持部
１４０  キャッシュコントローラ
１４２  データキャッシュメモリ
１４４  命令キャッシュメモリ
１４６  キャッシュメモリ制御部
１６２  共通鍵テーブル
１６４  セレクタ
１６６  復号処理部
１７０  公開鍵処理部
１７２  プロセッサ秘密鍵保持部
１７４  配布鍵復号化部
１７６  ハッシュ計算部
１８０  セキュアコンテキストスイッチ部
１８２  レジスタ値コピー部
１８４  コンテキストバッファ部
１９０  ＥＣＵ管理部
１９２  ＥＣＵ管理テーブル
２００  外部メモリ
２２０  プログラム保持部
３００  ２次記憶装置
４００  システムバス
５００  ソフトウェアベンダ
５１０  プログラム暗号化部
５２０  鍵暗号化部
６００  配布鍵構成要素
【図１】
2005196257.tif 000003
【図２】
2005196257.tif 000004
【図３】
2005196257.tif 000005
【図４】
2005196257.tif 000006
【図５】
2005196257.tif 000007
【図６】
2005196257.tif 000008
【図７】
2005196257.tif 000009
【図８−１】
2005196257.tif 000010
【図８−２】
2005196257.tif 000011
【図８−３】
2005196257.tif 000012
【図８−４】
2005196257.tif 000013
【図９】
2005196257.tif 000014
【図１０】
2005196257.tif 000015
【図１１】
2005196257.tif 000016
【図１２】
2005196257.tif 000017
【図１３】
2005196257.tif 000018
【図１４】
2005196257.tif 000019