(57)【要約】【課題】暗号化された割り込みサービスルーチンをコンピュータにおいて実行できるようにする。【解決手段】一実施形態において、コンピュータ（１）は、第１の割り込みの発生に応答して、第１の割り込みサービスルーチンに分岐するための割り込み擬似命令（ＩＰＩ）を制御ユニット（１４）から命令処理ユニット（１１）に投入するよう構成されている。割り込み擬似命令（ＩＰＩ）は、第１の割り込みに対応する第１の復号鍵識別子に関連付けられる。さらに、コンピュータ（１）は、命令処理ユニット（１１）における割り込み擬似命令（ＩＰＩ）の実行に基づいて第１の復号鍵識別子に対応する復号鍵を復号回路（５０）に設定するとともに、暗号化された第１の割り込みサービスルーチンを復号回路（５０）において復号化するよう構成されている。【選択図】図１
2014119953.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードして実行する命令処理ユニット、
第１の割り込みの発生に応答して、第１の割り込みサービスルーチンに分岐するための割り込み擬似命令を前記命令処理ユニットに投入する制御ユニット、前記割り込み擬似命令は前記第１の割り込みに対応する第１の復号鍵識別子に関連付けられている、及び
前記命令処理ユニットにおける前記割り込み擬似命令の実行に基づいて前記第１の復号鍵識別子に対応する復号鍵を設定するとともに、暗号化された第１の割り込みサービスルーチンを前記復号鍵を用いて復号化する復号回路、
を備えるコンピュータ。
【請求項２】
前記命令処理ユニットは、前記割り込み擬似命令を実行することによって、前記第１の復号鍵識別子を示す信号を前記復号回路に供給するとともに、前記第１の割り込みサービスルーチンに分岐する、請求項１に記載のコンピュータ。
【請求項３】
複数の割り込み要因に対応する複数の復号鍵識別子を規定したレジストリをさらに備え、
前記制御ユニットは、前記第１の割り込みに対応する前記第１の復号鍵識別子を前記レジストリから取得する、
請求項１又は２に記載のコンピュータ。
【請求項４】
複数の割り込みベクタに対応する複数の復号鍵識別子を規定した割り込みベクタテーブルをさらに備え、
前記割り込みベクタテーブルは、前記第１の割り込みの発生時に、前記第１の割り込みに対応する第１の割り込みベクタ及び前記第１の復号鍵識別子を前記制御ユニットに供給する、
請求項１又は２に記載のコンピュータ。
【請求項５】
前記第１の割り込みベクタは、ベクタアドレス、前記ベクタアドレスを求めるためのオフセット、又は前記ベクタアドレスを求めるためのベクタ番号を示し、
前記ベクタアドレスは、前記第１の割り込みサービスルーチンの開始アドレス又は前記第１の割り込みサービスルーチンへの分岐命令のアドレスである、請求項４に記載のコンピュータ。
【請求項６】
前記第１の割り込みの発生時に、割り込み要求及び前記第１の復号鍵識別子を前記制御ユニットに供給する割り込みコントローラをさらに備える、請求項１又は２に記載のコンピュータ。
【請求項７】
前記割り込みコントローラは、複数の割り込み要因に対応する複数の復号鍵識別子を定めた１又は複数のレジスタを備える、請求項６に記載のコンピュータ。
【請求項８】
前記割り込み擬似命令は、さらに、前記第１の割り込みに対応する第１の割り込みベクタに関連付けられる、請求項１又は２に記載のコンピュータ。
【請求項９】
前記割り込み擬似命令は、前記第１の復号鍵識別子に対応する復号鍵の前記復号回路への設定を引き起こす命令を含む、請求項１又は２に記載のコンピュータ。
【請求項１０】
前記割り込み擬似命令は、前記第１の割り込みサービスルーチンの開始アドレス又は前記第１の割り込みサービスルーチンへの分岐命令のアドレスへのジャンプを引き起こす命令を含む、請求項１又は２に記載のコンピュータ。
【請求項１１】
前記命令処理ユニットは、前記第１の割り込みの発生に応じて、前記命令処理ユニットで実行されていたプログラムコードに関するコンテクストを退避するよう構成され、
前記コンテクストは、前記プログラムコードの復号化に適用される第２の復号鍵識別子を含む、請求項１又は２に記載のコンピュータ。
【請求項１２】
暗号化されたプログラムコードの復号化のために前記復号回路に適用されている第３の復号鍵識別子又は前記第３の復号鍵識別子に対応する復号鍵を、トレース対象プログラムコードに関連付けられた第４の復号鍵識別子又は前記第４の復号鍵識別子に対応する復号鍵と比較する比較回路と、
前記第３の復号鍵識別子及び前記第４の復号鍵識別子が一致すること、又は前記第３及び第４の復号鍵識別子に対応付けられた復号鍵同士が一致することを条件として、前記命令処理ユニットの命令実行状況を示すトレースデータを出力する出力回路と、
をさらに備える、
請求項１又は２に記載のコンピュータ。
【請求項１３】
前記復号回路は、それぞれ異なる復号鍵識別子に関連付けられた複数の復号鍵を格納した鍵格納部を備える、請求項１又は２に記載のコンピュータ。
【請求項１４】
前記復号回路によって復号化された前記第１の割り込みサービスルーチンを一時的に格納し、前記第１の割り込みサービスルーチンを前記命令処理ユニットに供給するキャッシュメモリをさらに備える、請求項１又は２に記載のコンピュータ。
【請求項１５】
コンピュータにおける割り込みサービスルーチンの実行方法であって、
第１の割り込みの発生に応答して、第１の割り込みサービスルーチンに分岐するための割り込み擬似命令を制御ユニットから命令処理ユニットに投入することを備え、
前記割り込み擬似命令は、第１の復号鍵識別子に対応する復号鍵の復号回路への設定を引き起こす命令を含む、
方法。
【請求項１６】
前記割り込み擬似命令は、前記第１の割り込みサービスルーチンの開始アドレス又は前記第１の割り込みサービスルーチンへの分岐命令のアドレスへのジャンプを引き起こす命令を含む、請求項１又は２に記載の方法。
【請求項１７】
前記第１の割り込みの発生時に、前記第１の割り込みに対応する第１の割り込みベクタ及び前記第１の復号鍵識別子を割り込みベクタテーブルから前記制御ユニットに供給することをさらに備える、請求項１５又は１６に記載の方法。
【請求項１８】
前記第１の割り込みの発生時に、割り込み要求及び前記第１の復号鍵識別子を割り込みコントローラから前記制御ユニットに供給することをさらに備える、請求項１５又は１６に記載の方法。
【請求項１９】
前記第１の割り込みの発生に応じて、前記命令処理ユニットで実行されていたプログラムコードに関するコンテクストを退避することをさらに備え、
前記コンテクストは、前記プログラムコードの復号化に適用される第２の復号鍵識別子を含む、
請求項１５又は１６に記載の方法。
【請求項２０】
前記命令処理ユニットにおける前記割り込み擬似命令の実行に基づいて、前記第１の復号鍵識別子に対応する復号鍵を復号回路に設定すること、
前記命令処理ユニットにおける前記割り込み擬似命令の実行に基づいて、前記第１の割り込みサービスルーチンに分岐すること、
暗号化された第１の割り込みサービスルーチンを前記復号鍵を用いて前記復号回路において復号化すること、及び
前記第１の割り込みサービスルーチンを前記命令処理ユニットにおいて実行すること、
をさらに備える、請求項１５又は１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータに関し、例えば、暗号化されたプログラムコードを復号化して実行するコンピュータに好適に利用できるものである。
【背景技術】
【０００２】
特許文献１〜３は、暗号化されたプログラムコード（命令ルーチン）を復号化して実行するコンピュータを開示している。例えば、特許文献１に開示されたコンピュータは、暗号化されたプログラムコードを外部メモリからリードし、プロセッサにより指定された鍵識別子に対応する復号鍵を用いて暗号化されたプログラムコードを復号化し、復号化されたプログラムコードをキャッシュメモリに格納する。そして、プロセッサは、復号化されたプログラムコードをキャッシュメモリからリードして実行する。
【０００３】
また、特許文献１では、プログラムコードは、非耐タンパ状態から耐タンパ状態に移行するための明示的な命令を含む。コンピュータは、当該命令を実行することで、非耐タンパ状態から耐タンパ状態に移行する。当該命令は、暗号化されたプログラムコードを格納したメモリブロックの先頭アドレスと、復号鍵のアドレスを指定する。
【０００４】
さらに、特許文献１に開示されたコンピュータは、ハードウェ割り込みの発生時に耐タンパ状態から非耐タンパ状態に移行することを記載している。つまり、特許文献１に開示されたコンピュータは、割り込みサービスルーチン（割り込みハンドラ）を非耐タンパ状態で実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−５１８１９号公報
【特許文献２】特開２００９−３０１５６５号公報
【特許文献３】特開２００９−２７８４９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１のコンピュータは、ハードウェア割り込みの発生時に、割り込みサービスルーチン（割り込みハンドラ）を非耐タンパ状態で実行する。従って、コンピュータに供給するために不揮発性メモリ（例えば、マスクＲＯＭ（Read Only Memory）、プログラマブルＲＯＭ、フラッシュメモリ、又はハードディスクドライブ）に格納された割り込みサービスルーチンは暗号化されていない。しかしながら、コンピュータの様々な利用シナリオを想定した場合、暗号化された割り込みサービスルーチンを利用できることが好ましい。特許文献１〜３に開示されたコンピュータは、暗号化された割り込みサービスルーチンをコンピュータにおいて実行することができないという課題を有する。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施形態において、コンピュータは、第１の割り込みの発生に応答して、第１の割り込みサービスルーチンに分岐するための割り込み擬似命令を制御ユニットから命令処理ユニットに投入するよう構成されている。前記割り込み擬似命令は、前記第１の割り込みに対応する第１の復号鍵識別子に関連付けられる。さらに、前記コンピュータは、前記命令処理ユニットにおける前記割り込み擬似命令の実行に基づいて前記第１の復号鍵識別子に対応する復号鍵を復号回路に設定するとともに、暗号化された第１の割り込みサービスルーチンを前記復号回路において復号化するよう構成されている。
【発明の効果】
【０００８】
上述した実施形態は、暗号化された割り込みサービスルーチンをコンピュータにおいて実行することができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係るコンピュータの第１の構成例を示すブロック図である。
【図２】図１に示された割り込みベクタテーブルの構成例を示すブロック図である。
【図３】第１の実施形態に係る割り込みサービスルーチンの実行方法の一例を示すフローチャートである。
【図４】第１の実施形態に係るコンピュータの第２の構成例を示すブロック図である。
【図５】図４に示された割り込みコントローラの構成例を示すブロック図である。
【図６】第２の実施形態に係るコンピュータの構成例を示すブロック図である。
【図７】第２の実施形態に係るトレースデータの出力制御方法の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下では、具体的な実施形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１１】
＜第１の実施形態＞
本実施形態に係るコンピュータ１は、第１の割り込みの発生に応答して、第１の割り込みサービスルーチン（ＩＳＲ：Interrupt Service Routine）に分岐するための割り込み擬似命令（ＩＰＩ：Interrupt Pseudo Instruction）を制御ロジック１４から命令処理ユニット１１に投入するよう構成されている。一例において、ＩＰＩは、第１の割り込みに対応する第１の復号鍵識別子（例えば、鍵番号ＫＮ）に関連付けられる。言い換えると、ＩＰＩは、第１の復号鍵識別子に対応する復号鍵の復号回路５０への設定を引き起こす命令を含む。復号回路５０は、命令処理ユニット１１におけるＩＰＩの実行に基づいて第１の復号鍵識別子に対応する復号鍵を設定する。これにより、第１のＩＳＲに分岐した命令処理ユニット１１は、ＩＳＲを実行することができる。つまり、コンピュータ１は、暗号化されているＩＳＲを復号化した後に実行することができる。
【００１２】
なお、ＣＰＵ（Central Processing Unit）１０は、複数の割り込み要因（例えば複数の周辺デバイスからの複数の割り込み）を扱うために複数のＩＳＲを実行する。一例において、複数のＩＳＲは、互いに異なる暗号鍵によって暗号化され、互いに異なる復号鍵による復号化を必要とする。したがって、制御ロジック１４は、割り込み要因（又は割り込みベクタ）に対応する復号鍵（復号鍵識別子）を特定してもよい。具体的には、コンピュータ１は、複数の割り込み要因（又は割り込みベクタ）に対応する複数の復号鍵識別子を規定したレジストリを有してもよい。なお、当該レジストリは、ＣＰＵ１０に配置されてもよいし、割り込みベクタテーブル２１に配置されてもよいし、割り込みコントローラ２０に配置されてもよい。制御ロジック１４は、発生した割り込みに対応する復号鍵（復号鍵識別子）を当該レジストリに基づいて特定すればよい。このようなアーキテクチャによれば、異なる復号鍵を必要とする複数のＩＳＲをコンピュータ１において実行することができる。
【００１３】
本実施形態に係るコンピュータ１は、例えば、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、又はＳｏＣ（System on Chip）である。コンピュータ１は、１つのＩＣチップのみで構成されてもよいし、複数のＩＣチップにより構成されてもよい。以下では、本実施形態に係るコンピュータ１の構成及び動作の具体例について説明する。
【００１４】
図１は、コンピュータ１の第１の構成例を示すブロック図である。ＣＰＵ１０は、命令処理ユニット１１を含む。命令処理ユニット１１は、命令をフェッチし、命令をデコードし、そして命令を実行する。命令処理ユニット１１は、典型的には、命令パイプラインである。図１の構成例は、命令処理ユニット１１は、命令フェッチユニット１１０、命令デコードユニット１１１、命令実行ユニット１１２、及びライトバックユニット１１３を含む。
【００１５】
命令フェッチユニット１１０は、メモリ４０に格納されているプログラムコードを、キャッシュメモリ３０及びバスコントローラ１３を介してフェッチする。命令デコードユニット１１１は、フェッチされた命令をデコードし、実行するべき演算種類（例えば、加減算、乗算、除算、又は論理演算）を決定し、必要な制御信号を生成する。命令実行ユニット１１２は、デコードされた命令に従って、ＣＰＵ１０の内部状態を変更する。すなわち、命令実行ユニット１１２は、複数の実行ユニット（例えば、ＡＬＵ（Arithmetic Logic Unit）、乗算器、バレルシフタ、及びロード／ストアユニット）を有し、デコードされた命令に従った演算を実行する。ライトバックユニット１１３は、命令実行ユニット１１２の出力データをレジスタファイル１２の汎用レジスタ（ＧＰＲ：General Purpose Register）に書き込む。
【００１６】
さらに、ＣＰＵ１０は、制御ロジック１４、退避レジスタ１５を含む。制御ロジック１４は、ハードウェア割り込みを検出し、命令処理ユニット１１による割り込みサービスルーチン（割り込みハンドラ）の実行を制御する。退避レジスタ１５は、割り込みサービスルーチンに分岐する際に退避されるプログラムカウンタ（ＰＣ）１６０、プログラムステータスワード（ＰＳＷ）レジスタ１６１、及び鍵番号（ＫＮ）レジスタ１６２を含む制御レジスタの値を保持する。なお、鍵番号（ＫＮ）レジスタ１６２は、ＣＰＵ１０において実行されているプログラムコードに適用される復号鍵番号を示す。
【００１７】
割り込みコントローラ２０は、１又は複数の周辺デバイスからの複数の割り込み（ＩＮＴ１、ＩＮＴ２、・・・）を受信し、複数の割り込みが同時に発生している場合はこれらの優先順位を判定し、割り込み要求信号（ＩＮＴＲ）及び割り込み要因番号（ＩＮＴＮＯ）を出力する。ＩＮＴＲは割り込みの発生を示す。割り込み要因番号（ＩＮＴＮＯ）は、優先順位に基づいて選択された割り込み要因を示す番号である。図１の例では、割り込み要求信号（ＩＮＴＲ）はＣＰＵ１０の制御ロジック１４に送られ、割り込み要因番号（ＩＮＴＮＯ）は割り込みベクタテーブル（ＩＶＴ：Interrupt Vector Table）２１に送られる。
【００１８】
図１に示された割り込みベクタテーブル２１は、複数の割り込みベクタに対応する複数の復号鍵識別子を規定している。割り込みベクタテーブル２１は、割り込み番号信号（ＩＮＴＮＯ）を割り込みコントローラ２０から受信し、割り込み番号信号（ＩＮＴＮＯ）に示された割り込み番号に関連付けられている割り込みベクタ（ＩＮＴＶ）及び復号鍵番号（ＫＮ）を制御ロジック１４に送る。ここで、割り込みベクタ（ＩＮＴＶ）は、例えば、ベクタアドレスを示してもよい。ベクタアドレスは、ＩＳＲの開始アドレス、又はＩＳＲへの分岐命令が置かれたアドレスである。また、割り込みベクタ（ＩＮＴＶ）は、ベクタアドレスを求めるためのオフセット、又はベクタアドレスを求めるためのベクタ番号を示してもよい。また、鍵番号（ＫＮ）は、復号鍵を特定するための鍵識別子の一例に過ぎない。つまり、割り込みベクタテーブル２１は、鍵番号（ＫＮ）とは異なる他のコードを鍵識別子として格納してもよい。
【００１９】
ＣＰＵ１０の制御ロジック１４は、割り込み要求信号（ＩＮＴＲ）を受信すると、割り込みアクノリッジ信号（ＩＮＴＡ）を割り込みコントローラ２０に送る。制御ロジック１４は、割り込みベクタテーブル２１から割り込みベクタ（ＩＮＴＶ）及び復号鍵番号（ＫＮ）を受信し、割り込み擬似命令（ＩＰＩ）を生成する。そして、制御ロジック１４は、ＩＰＩを命令処理ユニット１１（具体的には命令実行ユニット１１２）に投入する。ＩＰＩは、割り込みベクタ及び復号鍵番号に関連付けられている。ＩＰＩは、割り込みベクタ及び復号鍵番号示す即値を含んでもよいし、割り込みベクタ及び復号鍵番号が格納されたレジスタを示してもよい。また、ＩＰＩは、複数の命令を含んでもよい。例えば、ＩＰＩは、以下の命令を含んでもよい。
・退避レジスタ１５の書き換え命令；
・第１の復号鍵識別子に対応する復号鍵の復号回路５０への設定を引き起こす命令；及び
・割り込みベクタに基づくアドレス（つまり、ＩＳＲの開始アドレス又はＩＳＲへの分岐命令のアドレス）へのジャンプを引き起こす命令。
【００２０】
命令実行ユニット１１２は、ＩＰＩを受信した場合に、実行中の命令を中断し、プログラムカウンタ（ＰＣ）１６０、プログラムステータスワード（ＰＳＷ）レジスタ１６１、及び鍵番号（ＫＮ）レジスタ１６２を含む制御レジスタの値を退避レジスタ１５に退避する。そして、命令実行ユニット１１２は、鍵設定要求信号（ＫＮＲＥＱ）、及びＩＰＩによって示された鍵番号（ＫＮ）を復号回路５０に送る。さらに、命令実行ユニット１１２は、ＩＰＩによって示された割り込みベクタからフェッチターゲットのアドレス（ＦＡＤＳ）を生成する。このアドレス（ＦＡＤＳ）は、ＩＳＲの開始アドレス又はＩＳＲへの分岐命令が置かれたアドレスを示す。命令実行ユニット１１２は、生成したアドレス（ＦＡＤＳ）をＰＣ１６０にセットし、アドレス（ＦＡＤＳ）及びフェッチ要求（ＦＲＥＱ）を命令フェッチユニット１１０に送る。命令フェッチユニット１１０は、フェッチ要求をキャッシュメモリ３０に送る。これにより、命令処理ユニット１１は、ＩＳＲに分岐し、ＩＳＲを実行する。
【００２１】
キャッシュメモリ３０は、ライン単位（例えば、１６バイト又は３２バイト）でメモリ４０から命令をリードし、リードした命令を一時的に格納する。キャッシュメモリ３０は、メモリ４０からリードしたデータをキャッシュしてもよい。キャッシュメモリ３０は、例えば、ＳＲＡＭ（Static Random Access Memory）である。メモリ４０は、例えば、ＳＲＡＭ（つまり、セカンダリキャッシュ）、ＤＲＡＭ（Dynamic Random Access Memory）、マスクＲＯＭ、プログラマブルＲＯＭ、又はフラッシュメモリである。
【００２２】
本実施形態では、命令処理ユニット１１において実行される複数のプログラムコード（命令ルーチン）の少なくとも一部（１又は複数のＩＳＲを含む）は、暗号化された状態でメモリ４０に格納されている。したがって、図１の構成例は、復号回路５０を有する。復号回路５０は、メモリ４０から読み出される暗号化されたプログラムコードを復号化し、キャッシュメモリ３０に格納する。復号回路５０においてプログラムコードの復号化に使用される復号鍵は、ＣＰＵ１０によって指定される。具体的には、復号回路５０は、デコーダ５１及び鍵格納ユニット５２を有する。鍵格納ユニット５２は、それぞれ異なる復号鍵番号（例えば、ＫＮ１、ＫＮ２、・・・）に関連付けられた複数の復号鍵（例えば、ＫＥＹ１、ＫＥＹ２、・・・）を格納している。鍵格納ユニット５２は、鍵設定要求信号（ＫＮＲＥＱ）、及び復号鍵番号（ＫＮ）をＣＰＵ１０（命令処理ユニット１１）から受信し、ＣＰＵ１０より指定された復号鍵番号に対応する復号鍵をデコーダ５１に設定する。
【００２３】
図２は、割り込みベクタテーブル２１の構成例を示している。図２の例では、割り込み要因番号（ＩＮＴＮＯ）、割り込みベクタ（ＩＮＴＶ）、及び復号鍵番号（ＫＮ）が関連付けて格納されている。図２の割り込みベクタ（ＩＮＴＶ）は、ベクタ番号を示している。例えば、ＩＮＴＮＯ＝０の割り込み要因に、ＩＮＴＶ＝６４、ＫＮ＝１が関連付けられている。ＩＮＴＮＯ＝１の割り込み要因にＩＮＴＶ＝６５、ＫＮ＝３が関連付けられている。また、ＩＮＴＮＯ＝２の割り込み要因にＩＮＴＶ＝６６、ＫＮ＝１０が関連付けられている。
【００２４】
図３は、ＣＰＵ１０における割り込みサービスルーチンの実行方法の一例を示すフローチャートである。ステップＳ１１では、制御ロジック１４は、割り込み要求信号（ＩＮＴＱ）を割り込みコントローラ２０から受信する。ステップＳ１２では、制御ロジック１４は、割り込み要求信号（ＩＮＴＱ）の受信に反応して、割り込みベクタ（ＩＮＴＶ）及び復号鍵番号（ＫＮ）を割り込みベクタテーブル２１から取得する。既に述べたように、この復号鍵番号（ＫＮ）は、割り込みベクタ（ＩＮＴＶ）によって特定されるＩＳＲの復号化に使用されるべき復号鍵を特定する。ステップＳ１３では、制御ロジック１４は、割り込み擬似命令（ＩＰＩ）を生成する。ＩＰＩは、割り込みベクタ（ＩＮＴＶ）及び復号鍵番号（ＫＮ）に関連付けられている。ステップＳ１４では、制御ロジック１４は、生成したＩＰＩを命令処理ユニット１１（命令実行ユニット１１２）に投入する。
【００２５】
ＩＰＩを受信した命令実行ユニット１１２は、ステップＳ１５において、実行中の命令を中断し、中断した命令に関するコンテクスト（ＰＣ１６０、ＰＳＷ１６１、ＫＮ１６２）を退避レジスタ１５に退避する。ステップＳ１６では、命令実行ユニット１１２は、ＩＳＲの復号化に適用される復号鍵を復号回路５０に設定する。具体的には、既に述べたように、命令実行ユニット１１２は、ＩＰＩによって指示された鍵番号（ＫＮ）と鍵設定要求信号（ＫＮＲＥＱ）を復号回路５０に送る。
【００２６】
ステップＳ１７では、命令処理ユニット１１は、ＩＳＲに分岐し、ＩＳＲを実行する。命令フェッチユニット１１０によってキャッシュメモリ３０からフェッチされるＩＳＲの命令は、復号回路５０によってデコードされている。したがって、ＣＰＵ１０は、暗号化された状態でメモリ４０に格納されているＩＳＲを実行することができる。
【００２７】
なお、ＩＳＲの処理が完了すると、ＣＰＵ１０は、中断した命令に復帰する。図１の構成例では、中断した命令のＰＣ及びＰＳＷに加えて、中断した命令（中断したプログラムコード）に適用される復号鍵の番号を退避レジスタ１５に退避している。したがって、ＣＰＵ１０は、復号鍵番号を含むコンテクストをＰＣ１６０、ＰＳＷレジスタ１６１、ＫＮレジスタ１６２に戻し、中断した命令に復帰する。これにより、コンピュータ１は、中断したプログラムコードの復号化を復号回路５０において再開することができ、中断したプログラムコードのＣＰＵ１０における実行を継続することができる。
【００２８】
続いて以下では、コンピュータ１の他の構成例について説明する。図４は、コンピュータ１の第２の構成例を示すブロック図である。図４の構成例では、割り込みコントローラ２００が、複数の割り込み要因（又は複数のＩＳＲ）に対応する複数の復号鍵番号を管理する。そして、割り込みコントローラ２００は、割り込みの発生時に、割り込み要求（ＩＮＴＲ）及び復号鍵番号（ＫＮ）を制御ロジック１４に供給する。例えば、割り込みコントローラ２００は、複数の割り込み要因に対応する複数の復号鍵番号を定めた１又は複数のレジスタを有してもよい。図４に示された割り込みベクタテーブル２１０は、割り込み番号（ＩＮＴＮＯ）と割り込みベクタ（ＩＮＴＶ）を関連付けて保持すればよい。
【００２９】
図５は、割り込みコントローラ２００の構成例を示している。割り込みコントローラ２００は、複数の割り込み要因レジスタ２０１を有する。各割り込み要因レジスタ２０１は、対応する割り込み（ＩＮＴ０、ＩＮＴ１など）の有無をフラグ、割り込みの優先度（ＰＲＩ）、及び鍵番号（ＫＮ）を格納する。つまり、図５の構成例では、各割り込み要因レジスタ２０１は、各割り込み要因に対応する鍵番号の設定値を保持している。要因選択回路２０２は、フラグを参照して発生している割り込みを検知し、優先度（ＰＲＩ）に基づいてＣＰＵ１０に通知する割り込み要因を選択する。そして、要因選択回路２０２は、割り込み要求信号（ＩＮＴＲ）、並びに選択した割り込み要因に対応する割り込み番号（ＩＮＴＮＯ）及び鍵番号（ＫＮ）を出力する。
【００３０】
＜第２の実施形態＞
本実施形態では、第１の実施形態に係るコンピュータ１の変形例について説明する。図６は、本実施形態に係るコンピュータ２の構成例を示すブロック図である。本実施の形態に係るコンピュータ２は、比較回路６１及びトレース出力回路６２を有する。比較回路６１は、暗号化されたプログラムコードの復号化のために復号回路５０（デコーダ５１）に適用されている復号鍵番号を、トレース対象プログラムコードに関連付けられた復号鍵番号と比較するよう構成されている。トレース出力回路６２は、２つの鍵番号が比較回路６１において一致することを条件として、命令処理ユニット１１の命令実行状況を示すトレースデータを出力するよう構成されている。トレース対象プログラムコードに関連付けられた復号鍵番号は、トレース用鍵番号レジスタ６０にセットされる。
【００３１】
レジスタ６０への鍵番号の書き込みは、例えば、デバッグツール（不図示）から行えばよい。デバッグツールは、利用者を認証し、利用者の認証に成功したことを条件として当該利用者に対応付けられた復号鍵番号をトレース用鍵番号レジスタ６０にセットしてもよい。
【００３２】
図７は、本実施形態に係るトレースデータの出力制御方法の一例を示すフローチャートである。ステップＳ２１では、コンピュータ１は、認証された復号鍵番号をトレース用鍵番号レジスタ６０に設定する。ステップＳ２２及び２３では、比較回路６１は、実行中のプログラムコードの復号化のために用いられる復号鍵の鍵番号（つまり、ＫＮレジスタ１６２の値）を、認証された鍵番号（つまり、トレース用鍵番号レジスタ６０の値）と比較し、これら２つの鍵番号が一致するかを判定する。２つの鍵番号が一致する場合（ステップＳ２３でＹＥＳ）、ＣＰＵ１０はトレース出力回路６２からのトレースデータの出力を許可する（ステップＳ２４）。一方、２つの鍵番号が一致しない場合（ステップＳ２３でＮＯ）、ＣＰＵ１０はトレースデータの出力を禁止する（ステップＳ２５）。
【００３３】
一般的なＣＰＵはデバッグ機能を有しており、命令の実行状況およびアクセスデータを示すトレースデータを出力できるよう構成されている。仮に、暗号化した状態でメモリ４０に格納されているプログラムコード（例えば、ユーザープログラム、割り込みサービスルーチン）の実行状況を誰でもトレースすることができるとすれば、これらのプログラムコードの耐タンパ性が低下する。本実施形態のコンピュータ２は、実行中のプログラムコードに適用されている復号鍵の識別子（鍵番号）がトレース対象プログラムコードに関連付けられた復号鍵識別子（鍵番号）と一致することを条件として、トレースデータの出力を許可する。したがって、暗号化した状態でメモリ４０に格納されているプログラムコードの耐タンパ性の低下を防止できる。
【００３４】
なお、本実施形態において、比較回路６１は、復号鍵識別子（例えば、鍵番号）の比較ではなく、復号鍵自体を比較するように構成されてもよい。すなわち、比較回路６１は、復号回路５０（デコーダ５１）に適用されている復号鍵を、トレース対象のプログラムコードの復号化のために用いられる復号鍵と比較してもよい。トレース出力回路６２は、２つの復号鍵が比較回路６１において一致することを条件として、命令処理ユニット１１の命令実行状況を示すトレースデータを出力すればよい。
【００３５】
＜その他の実施形態＞
図１、図４、及び図６に示したコンピュータ１及び２の構成例は一例に過ぎない。例えば、あるアーキテクチャでは、割り込み擬似命令を生成する制御ロジック１４は割り込みコントローラ２０に配置されてもよい。
【００３６】
また、他のアーキテクチャでは、制御ロジック１４又は割り込みコントローラ２０（２００）は、割り込み信号に基づいて割り込みベクタを生成するロジック回路を有してもよい。つまり、割り込みベクタテーブル２１（２１０）は明示的に存在しなくてもよい。この場合、ＣＰＵ１０又は割り込みコントローラ２０（２００）は、複数の割り込み要因に対応する複数の復号鍵識別子を規定したレジストリ（例えば、レジスタ、ＲＯＭ上のテーブル）を有していればよい。
【００３７】
さらに、上述した実施形態は本件発明者により得られた技術思想の適用に関する例に過ぎない。すなわち、当該技術思想は、上述した実施形態のみに限定されるものではなく、種々の変更が可能であることは勿論である。
【００３８】
例えば、本件発明者等により得られた技術思想は、以下に示す実施形態Ａ１〜Ａ７、並びにＢ１〜Ｂ７を含む。
【００３９】
（実施形態Ａ１）
命令をデコードして実行するＣＰＵ（Central Processing Unit）、
第１の割り込みの発生に応答して、第１の復号鍵識別子を前記ＣＰＵに供給する割り込みコントローラ、及び
前記ＣＰＵから前記第１の復号鍵識別子を受信し、暗号化された第１の割り込みサービスルーチンを前記第１の復号鍵識別子に対応する復号鍵を用いて復号化する復号回路、
を備えるコンピュータ。
（実施形態Ａ２）
前記割り込みコントローラは、複数の割り込み要因に対応する複数の復号鍵識別子を定めた１又は複数のレジスタを備える、実施形態Ａ１に記載のコンピュータ。
（実施形態Ａ３）
前記ＣＰＵは、
命令をデコードして実行する命令処理ユニットと、
前記第１の割り込みに基づく前記割り込みコントローラからの割り込み要求に応答して、前記第１の割り込みサービスルーチンに分岐するよう前記命令処理ユニットを制御する制御ユニットと、
を備える、実施形態Ａ１又はＡ２に記載のコンピュータ。
（実施形態Ａ４）
前記制御ユニットによる前記命令処理ユニットの制御は、前記第１の割り込みサービスルーチンに分岐するための割り込み擬似命令を前記命令処理ユニットに投球することを含む、実施形態Ａ３に記載のコンピュータ。
（実施形態Ａ５）
前記割り込み擬似命令は、前記割り込み擬似命令は前記第１の復号鍵識別子に関連付けられている、実施形態Ａ４に記載のコンピュータ。
（実施形態Ａ６）
前記命令処理ユニットは、前記割り込み擬似命令を実行することによって、前記第１の復号鍵識別子を示す信号を前記復号回路に供給するとともに、前記第１の割り込みサービスルーチンに分岐する、実施形態Ａ４に記載のコンピュータ。
（実施形態Ａ７）
前記命令処理ユニットは、前記復号回路において復号化された前記第１の割り込みサービスルーチンを実行する、実施形態Ａ１又はＡ２に記載のコンピュータ。
【００４０】
（実施形態Ｂ１）
命令をデコードして実行するＣＰＵ（Central Processing Unit）、
複数の割り込み要因に対応する複数の復号鍵識別子を規定し、第１の割り込みの発生時に前記第１の割り込みに対応する第１の復号鍵識別子を前記ＣＰＵに供給するレジストリ、及び
前記ＣＰＵから前記第１の復号鍵識別子を受信し、暗号化された第１の割り込みサービスルーチンを前記第１の復号鍵識別子に対応する復号鍵を用いて復号化する復号回路、
を備えるコンピュータ。
（実施形態Ｂ２）
前記レジストリは、割り込みベクタテーブルである、実施形態Ｂ２に記載のコンピュータ。
（実施形態Ｂ３）
前記ＣＰＵは、
命令をデコードして実行する命令処理ユニットと、
前記第１の割り込みの発生時に前記第１の割り込みサービスルーチンに分岐するよう前記命令処理ユニットを制御する制御ユニットと、
を備える、実施形態Ｂ１又はＢ２に記載のコンピュータ。
（実施形態Ｂ４）
前記制御ユニットによる前記命令処理ユニットの制御は、前記第１の割り込みサービスルーチンに分岐するための割り込み擬似命令を前記命令処理ユニットに投球することを含む、実施形態Ｂ３に記載のコンピュータ。
（実施形態Ｂ５）
前記割り込み擬似命令は前記第１の復号鍵識別子に関連付けられている、実施形態Ｂ４に記載のコンピュータ。
（実施形態Ｂ６）
前記命令処理ユニットは、前記割り込み擬似命令を実行することによって、前記第１の復号鍵識別子を示す信号を前記復号回路に供給するとともに、前記第１の割り込みサービスルーチンに分岐する、実施形態Ｂ４に記載のコンピュータ。
（実施形態Ｂ７）
前記命令処理ユニットは、前記復号回路において復号化された前記第１の割り込みサービスルーチンを実行する、実施形態Ｂ１又はＢ２に記載のコンピュータ。
【符号の説明】
【００４１】
１、２  コンピュータ
１０  ＣＰＵ（Central Processing Unit）
１１  命令処理ユニット
２０、２００  割り込みコントローラ
２１、２１０  割り込みベクタテーブル
３０  キャッシュメモリ
４０  メモリ
５０  復号回路
６０  トレース用鍵番号レジスタ
６１  比較回路
６２  トレース出力回路
２０１  割り込み要因レジスタ
ＩＳＲ  割り込みサービスルーチン
ＩＰＩ  割り込み擬似命令
ＫＮ  鍵番号
【図１】
2014119953.tif 000003
【図２】
2014119953.tif 000004
【図３】
2014119953.tif 000005
【図４】
2014119953.tif 000006
【図５】
2014119953.tif 000007
【図６】
2014119953.tif 000008
【図７】
2014119953.tif 000009