(57)【要約】【課題】暗号化プログラムの秘匿性を確保しつつ、容易にデバッグできるようにする。【解決手段】命令キャッシュメモリ１３０には、命令コード保持部１３１と、セキュリティビット部１３２ｃを有するタグ保持部１３２とが設けられている。セキュリティビット部１３２ｃは、主記憶メモリ１６０に記憶された暗号化命令コードが復号化されて命令コード保持部１３１に保持された場合にはセットされ、Ｉ／ＯバスＳ１２０ｉｏｂを介して命令コード保持部１３１にアクセスした場合に、ＯＲ回路１３６によって全てのビットの値が０のデータが出力される。一方、非暗号化命令コードが保持された場合、および所定の認証処理が成功した場合にはセキュリティビット部１３２ｃはクリアされ、そのままＩ／ＯバスＳ１２０ｉｏｂに出力させてデバッグ等することができる。【選択図】図２
2005251022.tif 000002
【特許請求の範囲】
【請求項１】
命令コードによって示される命令を実行する演算処理部と、
メインメモリに保持された暗号化命令コードを復号化して復号化命令コードを出力する復号化部と、
上記復号化命令コードを保持し、上記演算処理部、および直接または間接にプロセッサの外部から参照可能なバスに出力するキャッシュメモリと、
上記キャッシュメモリの保持内容を上記バスへ出力することの許否を制御する命令コード出力制御部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
請求項１のプロセッサであって、さらに、
上記キャッシュメモリの保持内容の上記バスへの出力許可または出力禁止を示すセキュリティ情報を保持するセキュリティ情報保持部と、
上記復号化命令コードが上記キャッシュメモリに保持された場合に、出力禁止を示すセキュリティ情報を上記セキュリティ情報保持部に保持させる一方、
上記メインメモリに保持された非暗号化命令コードが上記キャッシュメモリに保持された場合に、出力許可を示すセキュリティ情報を上記セキュリティ情報保持部に保持させるセキュリティ情報設定部と、
を備えたことを特徴とするプロセッサ。
【請求項３】
請求項２のプロセッサであって、
上記セキュリティ情報設定部は、さらに、
上記バスを介して上記キャッシュメモリへの書き込みがなされた場合に、出力許可を示すセキュリティ情報を上記セキュリティ情報保持部に保持させるように構成されていることを特徴とするプロセッサ。
【請求項４】
請求項２のプロセッサであって、
さらに、上記暗号化命令コードと非暗号化命令コードとを上記メインメモリにおける格納領域に応じて判別する暗号化判別部を備え、
上記復号化部は、上記暗号化判別部による判別結果に応じて復号化を行うとともに、
上記セキュリティ情報設定部は、上記暗号化判別部による判別結果に応じて、上記セキュリティ情報を設定するように構成されていることを特徴とするプロセッサ。
【請求項５】
請求項１および請求項２のうちの何れか１項のプロセッサであって、
上記命令コード出力制御部は、上記キャッシュメモリの保持内容の上記バスへの出力を禁止する場合に、上記キャッシュメモリに、あらかじめ設定された特定のデータ、またはランダムに決定されたデータを上記バスに出力させるように構成されていることを特徴とするプロセッサ。
【請求項６】
請求項１および請求項２のうちの何れか１項のプロセッサであって、
さらに、ユーザを認証する認証部を備え、
上記命令コード出力制御部は、上記認証部の認証結果に応じて、上記キャッシュメモリの保持内容を上記バスへ出力することの許否を制御するように構成されていることを特徴とするプロセッサ。
【請求項７】
請求項６のプロセッサであって、
上記認証部が、上記メインメモリに保持された所定の一連の暗号化命令コードに対応して上記認証を行うように構成されていることを特徴とするプロセッサ。
【請求項８】
請求項７のプロセッサであって、
上記認証部が、上記所定の一連の暗号化命令コードに対応して保持された認証情報と、プロセッサの外部から入力された認証情報とに基づいて、ユーザを認証するように構成されていることを特徴とするプロセッサ。
【請求項９】
請求項８のプロセッサであって、
上記復号化命令コードによる暗号化命令コードの復号化に用いられる復号鍵が、上記認証情報として用いられるように構成されていることを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部メモリ等に暗号化されて保持された命令コードを復号化して実行するプロセッサに関し、特に、復号化された命令コードをキャッシュメモリに保持させることによって、上記命令コードの実行を高速に行うことができるプロセッサに関するものである。このようなプロセッサは、例えば、音楽配信や映像配信等のネットワークサービスを受けるための機器などに適用される。
【背景技術】
【０００２】
近年、ＭＰＥＧ（Moving Picture Image Coding Experts Group ）等の、映像データや音声データのディジタル圧縮技術の向上と、ネットワークインフラストラクチャの発展とに伴って、ディジタル化された映像や音楽などのコンテンツをネットワークを介して配信するサービスが広まりつつある。このような配信サービスにおいては、ディジタル化されたコンテンツが高品質なまま複製可能なことから、コンテンツの著作権保護が重要となる。そこで、通常、コンテンツのデータを暗号化して配信し、認証を受けたユーザだけが復号化されたコンテンツを入手できるようにする手法が用いられている。
【０００３】
上記復号化をユーザ端末等で行う場合、専用ハードウェアを用いる方法と、ソフトウェアを用いる方法とがある。専用ハードウェアを用いる方法は、復号化アルゴリズムに従った処理を行う復号化回路をＬＳＩに内蔵することによって、復号化アルゴリズム等の秘匿性を高めるものである。一方、ソフトウェアを用いる方法は、復号化プログラムの実行によって復号化を行うもので、この方法によれば、復号化アルゴリズムの変更等が容易になる。すなわち、近年のコンテンツに応じて必要とされる暗号強度の多様化やプロセッサの能力向上等に伴って、復号化（暗号化）アルゴリズムの複雑化や多様化が求められつつあるが、ソフトウェアを用いる方法の場合には、復号化アルゴリズムの変更等を柔軟に行うことができる。ところが、上記ソフトウェアを用いる方法では、デバッガ等のソフトウェア開発環境を利用して復号化プログラムが解析、変更されたりすることによって、不正にコンテンツが復号化されたり、復号化処理等のノウハウが知徳されたりするおそれがある。
【０００４】
そこで、復号化プログラム自体も暗号化し、その暗号化された復号化プログラムをプロセッサが読み込んだ際に、プロセッサ内部で（ハードウェアによって）復号化して実行することにより、復号化アルゴリズム等の柔軟性を損なうことなく、秘匿性を高める技術が知られている。また、さらに、一旦復号化された復号化プログラムをプロセッサ内に設けられたキャッシュメモリ（内蔵メモリ）に保持させておくことにより、復号化プログラムの復号化による処理能力の低下を防止する技術が知られている（例えば、特許文献１、２参照）。
【特許文献１】特開平９−２５９０４４号公報
【特許文献２】特開２００１−２３０７７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のプロセッサは、上記のようにプロセッサ内部で復号化されたプログラムがキャッシュメモリに保持される場合、キャッシュメモリの保持内容が、Ｉ／Ｏ（input/output）バス等を介して読み出され解析されてしまったりするおそれがあるという問題点を有していた。すなわち、一般に、デバッグ装置やデバッグプログラムを用いて、キャッシュメモリに対して任意に（キャッシュメモリ本来の機能としてＣＰＵやメインメモリ等との間で読み書きされる以外に）データを読み書きする機能は、プログラムのデバッグやキャッシュメモリのテストをするために実際上不可欠な機能である。そこで、暗号化されたプログラムが通常の実行動作としてプロセッサに読み込まれ、復号化されてキャッシュメモリに保持された時点で、デバッグプログラムなどを用いてキャッシュメモリ内の復号化されたプログラムを読み出せば、アセンブル命令ニーモニックやＣ言語ソース等の状態で表示させることなどが可能となってしまう。
【０００６】
なお、上記のようなＩ／Ｏバス等を介したキャッシュメモリへのアクセスができないようにすれば、プログラムの秘匿性を確保することはできるが、ＬＳＩの開発時点でのキャッシュメモリのテストやプログラムの開発時点でのデバッグが不可能または困難になってしまう。
【０００７】
本発明は、上記の点に鑑み、暗号化されたプログラムの実行を高速に行わせることができるとともに、キャッシュメモリのテストやプログラムのデバッグを容易に可能にしつつ、プログラムの秘匿性を確保できるようにすることを目的としているる。
【課題を解決するための手段】
【０００８】
上記の課題を解決するため、請求項１の発明は、プロセッサであって、
命令コードによって示される命令を実行する演算処理部と、
メインメモリに保持された暗号化命令コードを復号化して復号化命令コードを出力する復号化部と、
上記復号化命令コードを保持し、上記演算処理部、および直接または間接にプロセッサの外部から参照可能なバスに出力するキャッシュメモリと、
上記キャッシュメモリの保持内容を上記バスへ出力することの許否を制御する命令コード出力制御部と、
を備えたことを特徴とする。
【０００９】
これにより、キャッシュメモリの保持内容が上記バスへ出力されるのを禁止することによって、例えばデバッグプログラムやデバッグ装置を用い、上記バスを介してキャッシュメモリにアクセスすることによる復号化命令コードの不正な解析等を防止できる一方、上記出力を許可することによって、復号化命令コードのデバッグ等が容易に可能なる。
【００１０】
また、請求項２の発明は、
請求項１のプロセッサであって、さらに、
上記キャッシュメモリの保持内容の上記バスへの出力許可または出力禁止を示すセキュリティ情報を保持するセキュリティ情報保持部と、
上記復号化命令コードが上記キャッシュメモリに保持された場合に、出力禁止を示すセキュリティ情報を上記セキュリティ情報保持部に保持させる一方、
上記メインメモリに保持された非暗号化命令コードが上記キャッシュメモリに保持された場合に、出力許可を示すセキュリティ情報を上記セキュリティ情報保持部に保持させるセキュリティ情報設定部と、
を備えたことを特徴とする。
【００１１】
これにより、復号化命令コードの不正な解析等を防止できる一方、非暗号化命令コードについては、デバッグ等が容易にできるようになる。
【００１２】
また、請求項３の発明は、
請求項２のプロセッサであって、
上記セキュリティ情報設定部は、さらに、
上記バスを介して上記キャッシュメモリへの書き込みがなされた場合に、出力許可を示すセキュリティ情報を上記セキュリティ情報保持部に保持させるように構成されていることを特徴とする。
【００１３】
これにより、出力許可を示すセキュリティ情報を上記セキュリティ情報保持部に保持させることが容易にできるので、セキュリティ情報保持部の保持動作を検査することができる。そして、そのような出力許可状態にできるのは、上記バスを介してキャッシュメモリへの書き込みがなされた場合（書き込み前に復号化命令コードが保持されていたとしても、その復号化命令コードが上書きされた場合）であり、キャッシュメモリに復号化命令コードが保持されたままで出力許可状態にすることはできないので、復号化命令コードの秘匿性は確保される。
【００１４】
また、請求項４の発明は、
請求項２のプロセッサであって、
さらに、上記暗号化命令コードと非暗号化命令コードとを上記メインメモリにおける格納領域に応じて判別する暗号化判別部を備え、
上記復号化部は、上記暗号化判別部による判別結果に応じて復号化を行うとともに、
上記セキュリティ情報設定部は、上記暗号化判別部による判別結果に応じて、上記セキュリティ情報を設定するように構成されていることを特徴とする。
【００１５】
これにより、アドレス比較などによって暗号化命令コードと非暗号化命令コードとの判別を容易に行うことができ、暗号化の有無に応じたセキュリティ情報の設定を容易に行うことができる。
【００１６】
また、請求項５の発明は、
請求項１および請求項２のうちの何れか１項のプロセッサであって、
上記命令コード出力制御部は、上記キャッシュメモリの保持内容の上記バスへの出力を禁止する場合に、上記キャッシュメモリに、あらかじめ設定された特定のデータ、またはランダムに決定されたデータを上記バスに出力させるように構成されていることを特徴とする。
【００１７】
これにより、キャッシュメモリの保持内容の出力が禁止される場合に、実際に出力されるデータが通常の命令コードと区別しにくいようにして、不正な解析をより困難にすることができる。
【００１８】
また、請求項６の発明は、
請求項１および請求項２のうちの何れか１項のプロセッサであって、
さらに、ユーザを認証する認証部を備え、
上記命令コード出力制御部は、上記認証部の認証結果に応じて、上記キャッシュメモリの保持内容を上記バスへ出力することの許否を制御するように構成されていることを特徴とする。
【００１９】
これにより、復号化命令コードであっても、特定のユーザ（プログラマやオペレータ等）に対しては、認証結果に基づき上記バスへの出力を許可するようにして、復号化命令コードのデバッグ等ができるようにすることが可能になる。
【００２０】
また、請求項７の発明は、
請求項６のプロセッサであって、
上記認証部が、上記メインメモリに保持された所定の一連の暗号化命令コードに対応して上記認証を行うように構成されていることを特徴とする。
【００２１】
これにより、上記のような認証結果に基づく出力許可をプログラムモジュール等ごとに管理することなどができる。
【００２２】
また、請求項８の発明は、
請求項７のプロセッサであって、
上記認証部が、上記所定の一連の暗号化命令コードに対応して上記メインメモリに保持された認証情報と、プロセッサの外部から入力された認証情報とに基づいて、ユーザを認証するように構成されていることを特徴とする。
【００２３】
また、請求項９の発明は、
請求項８のプロセッサであって、
上記復号化命令コードによる暗号化命令コードの復号化に用いられる復号鍵が、上記認証情報として用いられるように構成されていることを特徴とする。
【００２４】
これらにより、複数のプログラムモジュール等と、複数のユーザとの種々の組み合わせなどに応じて上記出力許可を柔軟に管理することができる。
【発明の効果】
【００２５】
本発明によれば、プログラムの秘匿性を容易に確保することができ、かつ、暗号化されたプログラムの実行を高速に行わせることができるとともに、キャッシュメモリのテストやプログラムのデバッグを容易に可能にすることができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施形態を図面に基づいて詳細に説明する。
【００２７】
《プロセッサ１１０の概略構成》
プロセッサ１１０には、ＣＰＵ１２０と、命令キャッシュメモリ１３０と、命令復号化回路１４０と、アドレスデコーダ１５０とが設けられている。ＣＰＵ１２０と命令キャッシュメモリ１３０とは、例えばそれぞれ３２ビットのＣＰＵアドレスバスＳ１２０ａおよびＣＰＵデータバスＳ１２０ｄを介して接続されている。命令キャッシュメモリ１３０と命令復号化回路１４０とは、命令キャッシュアドレスバスＳ１３０ａおよび命令キャッシュデータバスＳ１３０ｄを介して接続され、さらに、後述するＳビットセット信号が、命令復号化回路１４０からＳビットセット信号線Ｓ１３０ｓを介して命令キャッシュメモリ１３０に入力されるようになっている。また、命令復号化回路１４０は、メモリアドレスバスＳ１６０ａおよびメモリデータバスＳ１６０ｄを介して、プロセッサ１１０の外部に設けられた主記憶メモリ１６０に接続されている。（なお、例えば上記メモリアドレスバスＳ１６０ａとして１２８ビットのバスを用い、例えば４ワード＝１６バイト分の命令コードが同時にアクセスされるようにしてもよい。）
上記ＣＰＵ１２０は、命令キャッシュメモリ１３０にフェッチする命令コードのアドレスを出力し、これに応じて命令キャッシュメモリ１３０から入力される命令コードの命令を実行するようになっている。
【００２８】
上記命令キャッシュメモリ１３０は、ＣＰＵ１２０から入力されたアドレスに対応する命令コードを内部に保持している場合には、その命令コードを出力する一方、保持していない場合には、入力されたアドレスを命令復号化回路１４０に出力し、命令復号化回路１４０から入力される命令コードを、ＣＰＵ１２０に出力するとともに、内部に保持するようになっている。
【００２９】
上記命令復号化回路１４０は、命令キャッシュメモリ１３０から入力されたアドレスを主記憶メモリ１６０に出力し、主記憶メモリ１６０から読み出される暗号化された命令コードを復号化して命令キャッシュメモリ１３０に出力するようになっている。（ただし、読み出された命令コードが暗号化されていない場合は、そのまま命令キャッシュメモリ１３０に出力する。）
また、上記命令キャッシュメモリ１３０および命令復号化回路１４０は、Ｉ／ＯアドレスバスＳ１２０ｉｏａ、Ｉ／ＯライトデータバスＳ１２０ｉｏｗ、Ｉ／ＯリードデータバスＳ１２０ｉｏｒ、およびＩ／Ｏライトコマンド信号線Ｓ１２０ｉｏｗｃから成るＩ／ＯバスＳ１２０ｉｏｂを介してＣＰＵ１２０に接続されるとともに、命令キャッシュ選択信号線Ｓ１５０ｃまたは命令復号回路選択信号線Ｓ１５０ｓを介してアドレスデコーダ１５０に接続され、ＣＰＵ１２０によるＩ／Ｏ入出力命令の実行等によって、命令キャッシュメモリ１３０および命令復号化回路１４０内部の図示しないレジスタ等にアクセス（所望の値を保持させたり、保持されている値を読み出したり）できるようになっている。すなわち、プロセッサ１１０の外部から直接的、または間接的に、Ｉ／ＯバスＳ１２０ｉｏｂを介して命令キャッシュメモリ１３０等のレジスタなどに対して読み書きをすることができる。
【００３０】
《命令キャッシュメモリ１３０の詳細な構成》
命令キャッシュメモリ１３０は、例えば図２に示すように、命令コード保持部１３１、タグ保持部１３２、セキュリティビット生成回路１３３、ＡＮＤ回路１３４、セレクタ１３５、ＯＲ回路１３６、セレクタ１３７、デコーダ１３８、および３ステートバッファ１３９を備えて構成されている。
【００３１】
命令コード保持部１３１は、それぞれ１ワード（４バイト）のデータを保持するワード０メモリ１３１ａ〜ワード３メモリ１３１ｄを有し、主記憶メモリ１６０における連続したアドレスの領域に格納されている４ワード分の命令コードを保持するようになっている。
【００３２】
タグ保持部１３２は、命令コード保持部１３１に保持されているデータ（命令コード）の主記憶メモリ１６０上のアドレスの上位２８ビット（４ワード分に共通）を保持するアドレスタグ部１３２ａ、命令コード保持部１３１に有効なデータが保持されていることを示すバリッドビット部１３２ｂ、および命令コード保持部１３１に保持されているデータが、Ｉ／ＯリードデータバスＳ１２０ｉｏｒを介した読み出しが許可されているかどうか（復号化されたものかどうか）を示すセキュリティビット部１３２ｃを有している。
【００３３】
セキュリティビット生成回路１３３は、ＣＰＵ１２０から出力されるＩ／Ｏライト信号およびＩ／Ｏアドレス信号と、命令復号化回路１４０から出力されるＳビットセット信号とに基づいて、セキュリティビット部１３２ｃに保持させるセキュリティビットの値を生成するものである。
【００３４】
ＡＮＤ回路１３４は、アドレスデコーダ１５０から命令キャッシュ選択信号が出力されるとともにＣＰＵ１２０からＩ／Ｏライト信号が出力されると、そのＩ／Ｏライト信号を命令コード保持部１３１、およびタグ保持部１３２に出力し、命令コード保持部１３１またはタグ保持部１３２への書き込みを行わせるようになっている。その際、命令コード保持部１３１、およびタグ保持部１３２のアドレスタグ部１３２ａとバリッドビット部１３２ｂとには、Ｉ／ＯライトデータバスＳ１２０ｉｏｗを介して入力されるＩ／Ｏライトデータが書き込まれる一方、タグ保持部１３２のセキュリティビット部１３２ｃには、セキュリティビット生成回路１３３から出力される値が書き込まれる。また、ＡＮＤ回路１３４から出力されるＩ／Ｏライト信号は、さらにセキュリティビット生成回路１３３にも入力され、後述するように命令コード保持部１３１にＩ／ＯライトデータバスＳ１２０ｉｏｗを介したデータの書き込みがなされたかどうかが監視されるようになっている。
【００３５】
セレクタ１３５は、Ｉ／ＯアドレスバスＳ１２０ｉｏａを介して入力されるＩ／Ｏアドレスに応じて、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄの何れかから出力された命令コードを選択するようになっている。
【００３６】
ＯＲ回路１３６は、セキュリティビット部１３２ｃに保持されているセキュリティビットがセットされている場合には、全てのビットの値が１のデータを出力することにより、命令コード保持部１３１から出力される命令コードをマスクし、Ｉ／ＯリードデータバスＳ１２０ｉｏｒに出力させないようになっている。
【００３７】
セレクタ１３７は、命令コード保持部１３１およびタグ保持部１３２の何れか一方の出力を選択するようになっている。
【００３８】
デコーダ１３８は、ＣＰＵ１２０から出力されるＩ／Ｏアドレスの下位ビットをデコードして、上記セレクタ１３５・１３７による選択を制御するようになっている。
【００３９】
３ステートバッファ１３９は、アドレスデコーダ１５０から命令キャッシュ選択信号が入力された場合に、上記セレクタ１３７によって選択されたデータをＩ／ＯリードデータバスＳ１２０ｉｏｒに出力するようになっている。（ここで、上記のようにＩ／ＯライトデータバスＳ１２０ｉｏｗとＩ／ＯリードデータバスＳ１２０ｉｏｒとを分けずに共通のリードライトバスを設ける場合には、上記命令キャッシュ選択信号に加えて、さらにＩ／Ｏリード信号またはＩ／Ｏライト信号の反転信号等が入力された場合にだけ、Ｉ／ＯリードデータバスＳ１２０ｉｏｒにデータが出力されるようにしてもよい。）
なお、実際には、命令キャッシュメモリ１３０には、さらに、通常のキャッシュ動作をするための構成要素、すなわち、ＣＰＵ１２０から出力されるアドレスに対応する命令コードが命令コード保持部１３１に保持されている場合にはその命令コードをＣＰＵ１２０に出力する一方、保持されていない場合には、上記アドレスを命令復号化回路１４０に出力して、主記憶メモリ１６０から読み出された（暗号化されている場合にはさらに復号化された）命令コードをＣＰＵ１２０に出力するとともに命令コード保持部１３１に保持するための構成要素を備えているが、この点に関しては通常のキャッシュメモリと同じであるため説明を省略し、主として、テスト操作（デバッグ等）のためのＩ／ＯバスＳ１２０ｉｏｂを介した命令コード等の入出力について説明する。また、命令キャッシュメモリ１３０は、実際には通常複数設けられ、４ワードのデータの組を複数組保持させ得るようになっているが、ここでは説明の簡単化のため、主に１つだけ設けられているとして説明する。
【００４０】
《命令復号化回路１４０の詳細な構成》
命令復号化回路１４０は、例えば図３に示すように、復号化ロジック１４０ａと、復号化・キャッシュアクセス制御ロジック１４０ｂとを備えている。復号化ロジック１４０ａは、主記憶メモリ１６０から読み出された命令コードが暗号化されている場合には、復号化して命令キャッシュメモリ１３０に出力する一方、暗号化されていない場合には、読み出された命令コードをそのまま出力するようになっている。復号化・キャッシュアクセス制御ロジック１４０ｂは、上記復号化ロジック１４０ａの制御、すなわち、後に詳述するように、命令キャッシュメモリ１３０から入力されるアドレスに基づいて上記主記憶メモリ１６０から読み出された命令コードが暗号化されているかどうかを判別し、復号化ロジック１４０ａに復号化させるかどうかを制御するようになっている。
【００４１】
上記復号化ロジック１４０ａ、および復号化・キャッシュアクセス制御ロジック１４０ｂは、それぞれ、Ｉ／ＯバスＳ１２０ｉｏｂおよび命令復号回路選択信号線Ｓ１５０ｓを介してＣＰＵ１２０およびアドレスデコーダ１５０と接続され、デバッグ等のために、図示しないレジスタにＣＰＵ１２０からアクセスできるようになっている。
【００４２】
《命令復号化回路１４０の復号化・キャッシュアクセス制御ロジック１４０ｂの詳細な構成》
上記復号化・キャッシュアクセス制御ロジック１４０ｂは、より詳しくは、例えば図４に示すように、アドレステーブル１４１、アドレス比較ロジック１４２、ＡＮＤ回路１４３、認証用プログラムＩＤ部１４４、認証鍵部１４５、認証ロジック１４６、ＯＲ回路１４７、セレクタ１４８、３ステートバッファ１４９、およびライトアドレスデコーダ１７１を備えて構成されている。
【００４３】
アドレステーブル１４１は、上限アドレス部１４１ａ、下限アドレス部１４１ｂ、プログラムＩＤ部１４１ｃ、復号鍵部１４１ｄ、およびセキュリティ制御ビット部１４１ｅを有している。（なお、このアドレステーブル１４１は、実際には複数のプログラムモジュールなどに対応させて複数設けることが好ましいが、ここでは説明の簡単化のために１つだけ設けられているとして説明する。）
上記アドレステーブル１４１の上限アドレス部１４１ａ、および下限アドレス部１４１ｂは、それぞれ、主記憶メモリ１６０における命令コードが暗号化されて記憶されている領域の上下限アドレスを保持するようになっている。また、アドレステーブル１４１のプログラムＩＤ部１４１ｃ、および復号鍵部１４１ｄは、それぞれ、上記領域に記憶されている暗号化された命令コード（群）と対応して主記憶メモリ１６０に記憶された（またはＲＯＭやハードディスクなどに記憶され、プログラムが主記憶メモリ１６０にロードされる際に読み出さるなどした）、上記命令コードを示す識別子と、これを復号化するための復号鍵とを保持するようになっている。さらに、セキュリティ制御ビット部１４１ｅは、認証ロジック１４６による認証結果、すなわち、命令キャッシュメモリ１３０の命令コード保持部１３１に保持された復号化された命令コードがＩ／ＯバスＳ１２０ｉｏｂを介して読み出されることを禁止するかどうかを示す情報を保持するようになっている。
【００４４】
アドレス比較ロジック１４２は、命令キャッシュメモリ１３０から出力されるアドレスを上記アドレス部１４１ａ・１４１ｂに保持されているそれぞれのアドレスと比較して、上限と下限との間にあれば、復号化ロジック１４０ａに復号イネーブル信号を出力するようになっている。
【００４５】
また、ＡＮＤ回路１４３は、セキュリティ制御ビット部１４１ｅがセットされている場合には、上記復号イネーブル信号に基づいて、Ｓビットセット信号を命令キャッシュメモリ１３０に出力することによって、復号化されて命令コード保持部１３１に保持された命令コードがＩ／ＯバスＳ１２０ｉｏｂを介して読み出されるのを防止するようになっている。
【００４６】
認証用プログラムＩＤ部１４４、および認証鍵部１４５は、ユーザ（プログラマやオペレータ等）によりＩ／ＯライトデータバスＳ１２０ｉｏｗを介して入力された、そのユーザがアクセスを許可される命令コードを示す識別子、およびユーザの認証をするための認証鍵を保持するようになっている。
【００４７】
認証ロジック１４６は、上記アドレステーブル１４１のプログラムＩＤ部１４１ｃおよび復号鍵部１４１ｄと、認証用プログラムＩＤ部１４４と、認証鍵部１４５とに保持されたデータに基づいてユーザの認証を行うようになっている。すなわち、認証用プログラムＩＤ部１４４とプログラムＩＤ部１４１ｃとに保持された識別子が一致した場合に、認証鍵部１４５と復号鍵部１４１ｄとに保持された値に基づいて認証処理を行い、認証が成功した場合、その際、またはその後、アドレス部１４１ａ・１４１ｂに上下限アドレスが書き込まれる際などに、セキュリティ制御ビット部１４１ｅをクリアするようになっている。これによって、前記ＡＮＤ回路１４３からのＳビットセット信号の出力が抑制され（０の値が出力され）、その後に該当するアドレス範囲のデータがキャッシュに書き込まれる際に、命令キャッシュメモリ１３０のセキュリティビット部１３２ｃがリセットされて、命令コード保持部１３１に保持された復号化された命令コードをＩ／ＯバスＳ１２０ｉｏｂを介して読み出すことができるようになる。上記認証の具体的な方法は特に限定されないが、例えば、命令コードと対応して主記憶メモリ１６０等から読み出され、復号鍵部１４１ｄに保持された復号鍵を、ユーザがデバッグプログラム等によって認証鍵部１４５に保持させた認証鍵で認証することによって行われる。また、例えば公開鍵と同様の原理を用いて、復号鍵部１４１ｄに保持される復号鍵を認証鍵として用い、ユーザが認証鍵部１４５に保持させた認証データ（認証が成功したことを示す所定のデータを秘密鍵で変換処理したものなど）を上記復号鍵により認証処理することによって行われるようにするなどしてもよい。
【００４８】
ＯＲ回路１４７は、セキュリティ制御ビット部１４１ｅがセットされている場合には、全てのビットの値が１のデータを出力することにより、復号鍵部１４１ｄから出力される復号鍵をマスクし、Ｉ／ＯリードデータバスＳ１２０ｉｏｒに出力させないようになっている。
【００４９】
セレクタ１４８は、Ｉ／ＯアドレスバスＳ１２０ｉｏａを介して入力されるＩ／Ｏアドレスに応じて、上記ＯＲ回路１４７から出力されるデータや、復号化・キャッシュアクセス制御ロジック１４０ｂ内の各レジスタ等に保持されている値を択一的に選択するようになっている。
【００５０】
また、３ステートバッファ１４９は、アドレスデコーダ１５０から出力される命令復号回路選択信号に応じて、セレクタ１４８によって選択されたデータをＩ／ＯリードデータバスＳ１２０ｉｏｒに出力するようになっている。
【００５１】
ライトアドレスデコーダ１７１は、ＣＰＵ１２０から出力されるＩ／ＯアドレスおよびＩ／Ｏライト信号と、アドレスデコーダ１５０から出力される命令復号化回路選択信号とに基づいて書き込み信号を出力し、上記アドレステーブル１４１、認証用プログラムＩＤ部１４４、および認証鍵部１４５への書き込みを行わせるようになっている。その際、アドレステーブル１４１のセキュリティ制御ビット部１４１ｅには認証ロジック１４６から出力される値が書き込まれる一方、その他の部分には、Ｉ／ＯライトデータバスＳ１２０ｉｏｗを介して入力されるＩ／Ｏライトデータが書き込まれる。
【００５２】
《前提となる動作》
上記のように構成されたプロセッサ１１０では、暗号化された命令コードが適切に復号化されるためには、復号化・キャッシュアクセス制御ロジック１４０ｂのアドレステーブル１４１におけるアドレス部１４１ａ・１４１ｂに、主記憶メモリ１６０における暗号化された命令コードが記憶されている領域の上下限アドレスが設定されるとともに、復号鍵部１４１ｄに復号鍵が設定される必要がある。この設定は、特に限定されないが、例えばオペレーティングシステムが、一連の命令コードからなるプログラム（プログラムモジュール）の実行を開始するのに先立って、そのプログラムと対応づけて主記憶メモリ１６０等に記憶された上下限アドレスおよび復号鍵を読み込み、Ｉ／Ｏ出力命令によりアドレス部１４１ａ・１４１ｂおよび復号鍵部１４１ｄに書き込むことによって行われる。また、その際には同様に、後述するデバッグ等のための、プログラムと対応した識別子がプログラムＩＤ部１４１ｃに設定される。
【００５３】
《通常のキャッシュ動作》
主記憶メモリ１６０に記憶されているプログラムが実行される際には、ＣＰＵ１２０からフェッチする命令コードのアドレス（フェッチアドレス）が出力され、命令キャッシュメモリ１３０は、上記フェッチアドレスの上位２８ビットがタグ保持部１３２のアドレスタグ部１３２ａに保持されたタグと一致するかどうか（命令コードが命令コード保持部１３１に保持されているかどうか）を判定する。命令コードが保持されている場合には、フェッチアドレスの下位４ビット（正確には下位から３、４ビット目の２ビット）に応じて、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄのうちの何れかに保持されている命令コードをＣＰＵ１２０に出力する。一方、命令コードが保持されていない場合には、命令キャッシュメモリ１３０は上記フェッチアドレスを命令復号化回路１４０に出力する。
【００５４】
命令復号化回路１４０は、上記フェッチアドレスを含む連続する４ワード分のアドレスを主記憶メモリ１６０に順次出力して、主記憶メモリ１６０に記憶されている命令コードを読み出す（なお、暗号化の単位が４ワード分よりも大きい場合には、その単位の分だけ読み出すようにすればよい。）。その際、フェッチアドレスがアドレス部１４１ａ・１４１ｂに保持された上下限アドレスの範囲内にある場合（主記憶メモリ１６０に記憶されている命令コードが暗号化されている場合）には、アドレス比較ロジック１４２が復号イネーブル信号を出力する（アサートする）。この復号イネーブル信号に応じて、復号化ロジック１４０ａは主記憶メモリ１６０から読み出された暗号化された命令コードを復号化・キャッシュアクセス制御ロジック１４０ｂの復号鍵部１４１ｄに保持された復号鍵により復号化して命令キャッシュメモリ１３０に出力する。また、このとき、プロセッサ１１０のリセット時にセキュリティ制御ビット部１４１ｅがセットされた後に後述する認証が成功していなければ（セキュリティ制御ビット部１４１ｅがクリアされていなければ）、上記復号イネーブル信号に基づいて、ＡＮＤ回路１４３から命令キャッシュメモリ１３０にＳビットセット信号が出力される。一方、フェッチアドレスがアドレス部１４１ａ・１４１ｂに保持された上下限アドレスの範囲内にない場合（主記憶メモリ１６０に記憶されている命令コードが暗号化されていない場合）には、アドレス比較ロジック１４２は復号イネーブル信号を出力せず（アサートせず）、復号化ロジック１４０ａは主記憶メモリ１６０から読み出された暗号化されていない命令コードをそのまま命令キャッシュメモリ１３０に出力する。また、このときには、ＡＮＤ回路１４３も、Ｓビットセット信号を出力しない。
【００５５】
命令キャッシュメモリ１３０は、命令復号化回路１４０から入力された４ワード分の命令コードのうち、ＣＰＵ１２０から入力されたフェッチアドレスの命令コードをＣＰＵ１２０に出力するとともに、上記４ワード分の命令コードを命令コード保持部１３１に保持させる。また、タグ保持部１３２におけるアドレスタグ部１３２ａ、およびバリッドビット部１３２ｂの設定も行われる。すなわち、フェッチアドレスの上位２８ビットがアドレスタグ部１３２ａに保持されるとともに、バリッドビット部１３２ｂがセットされる。そこで、再度同じ命令コード（または一連の４ワード内の命令コード）のフェッチアドレスがＣＰＵ１２０から出力された場合には、前記のように、実際に主記憶メモリ１６０がアクセスされることなく、命令コード保持部１３１に保持された命令コードがＣＰＵ１２０に出力されて命令の実行が高速に行われる。特に、主記憶メモリ１６０に暗号化されて記憶されていた命令コードは、復号化ロジック１４０ａによる復号化が再度行われることもないので、一層高速な命令の実行が行われる。
【００５６】
また、上記タグ保持部１３２におけるアドレスタグ部１３２ａ、およびバリッドビット部１３２ｂの設定が行われる際には、セキュリティビット部１３２ｃの設定も行われる。すなわち、セキュリティビット部１３２ｃは、主記憶メモリ１６０から読み出された命令コードが暗号化されている場合には、命令復号化回路１４０から出力されるＳビットセット信号に応じてセットされる一方、暗号化されていない場合には、復号化・キャッシュアクセス制御ロジック１４０ｂからＳビットセット信号が出力されないことによってクリアされる。
【００５７】
《非暗号化命令コードのデバッグ時の動作》
上記のような主記憶メモリ１６０に記憶されている命令コードが命令コード保持部１３１に保持されるキャッシュ動作は、デバッグプログラムなどを用いて、主記憶メモリ１６０に記憶されている一連の命令コードから成るプログラム（デバッグ対象プログラム）を実行させた場合にも同様に行われる。そこで、デバッグプログラムの機能を用いたステップ実行やブレイクポイントを設定した実行によって、デバッグ対象プログラムの実行を中断させ、デバッグプログラムなどによってＩ／Ｏ入力命令を実行させることにより、命令コード保持部１３１に保持されている命令コードを読み出して確認したりすることができる。
【００５８】
より詳しくは、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄの何れかを示すＩ／Ｏアドレスを指定して、Ｉ／Ｏ入力命令を実行させると、ＣＰＵ１２０は、上記Ｉ／ＯアドレスをＩ／ＯアドレスバスＳ１２０ｉｏａに出力し、これに応じて、アドレスデコーダ１５０は、命令キャッシュ選択信号を出力する。そこで、命令キャッシュメモリ１３０のデコーダ１３８は、上記Ｉ／Ｏアドレスの下位ビットをデコードして、セレクタ１３５・１３７に選択信号を出力し、セレクタ１３５はワード０メモリ１３１ａ〜ワード３メモリ１３１ｄのうちの何れかからの出力を選択し、セレクタ１３７はＯＲ回路１３６の出力を選択する。ここで、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄに保持されている命令コードが復号化されたものでない場合には、前記のようにタグ保持部１３２のセキュリティビット部１３２ｃはクリアされているので、ＯＲ回路１３６からはセレクタ１３５から出力された命令コードがそのまま出力される。また、３ステートバッファ１３９は、アドレスデコーダ１５０から出力された命令キャッシュ選択信号に応じてセレクタ１３７から出力された命令コードをＩ／ＯリードデータバスＳ１２０ｉｏｒに出力する。
【００５９】
そこで、ＣＰＵ１２０がＩ／ＯリードデータバスＳ１２０ｉｏｒに出力された命令コードを取り込むことにより、続く命令の実行によって、上記命令コードをユーザが参照可能な形で提示させることができる。
【００６０】
《暗号化命令コードのデバッグ時の動作》
主記憶メモリ１６０に記憶されている命令コードが暗号化されている場合、前記のように、命令復号化回路１４０によって復号化された命令コードは、暗号化されていない命令コードと同じように命令コード保持部１３１に保持されるが、その際に復号化・キャッシュアクセス制御ロジック１４０ｂから出力されるＳビットセット信号に応じてタグ保持部１３２のセキュリティビット部１３２ｃがセットされるので、ＯＲ回路１３６からは全てのビットの値が１のデータが出力される。そこで、上記暗号化されていない命令コードの場合と同じようにＩ／Ｏ入力命令をＣＰＵ１２０に実行させたとしても、Ｉ／ＯリードデータバスＳ１２０ｉｏｒには常に全てのビットの値が１のデータが出力される。したがって、デバッグプログラムなどを用いたとしても、命令コードの秘匿性が確保される。
【００６１】
ただし、暗号化された命令コードから成るプログラム自体のデバッグをする場合など、命令コード保持部１３１に保持された復号化された命令コードを参照する必要がある場合には、復号化・キャッシュアクセス制御ロジック１４０ｂの認証用プログラムＩＤ部１４４および認証鍵部１４５に適切な識別子および認証鍵を設定することによって、参照することが可能になる。
【００６２】
すなわち、前記のように、暗号化された命令コードの上下限アドレスがアドレス部１４１ａ・１４１ｂに設定されるのに併せて、上記命令コードに対応して主記憶メモリ１６０等に記憶されたプログラムの識別子と復号鍵とがプログラムＩＤ部１４１ｃおよび復号鍵部１４１ｄに設定された状態で、ユーザによって上記識別子および復号鍵に対応する識別子および認証鍵がＩ／ＯライトデータバスＳ１２０ｉｏｗを介して認証用プログラムＩＤ部１４４および認証鍵部１４５に設定されると、認証ロジック１４６は、上記各設定値に基づいて、ユーザが命令コード保持部１３１に保持された命令コードを参照する権限を有しているかどうかの認証を行う。この認証が成功すると、認証ロジック１４６は、セキュリティ制御ビット部１４１ｅをクリアし、ＡＮＤ回路１４３からは、アドレス比較ロジック１４２によるアドレス比較結果に係わらず（命令コードの暗号化の有無に係わらず）、Ｓビットセット信号が出力されなくなる。
【００６３】
そこで、命令キャッシュメモリ１３０のセキュリティビット生成回路１３３は、０の値を保持し、主記憶メモリ１６０から命令コードが読み出されてアドレスタグ部１３２ａやバリッドビット部１３２ｂにアドレス等が保持される際に、セキュリティビット部１３２ｃがクリアされる。したがって、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄに保持されている命令コードが復号化されたものであっても、その命令コードはＯＲ回路１３６からそのまま出力され、ＣＰＵ１２０がＩ／Ｏ入力命令によって取り込むことができるので、デバッグ作業等を容易に行うことができる。
【００６４】
《タグ保持部１３２および命令コード保持部１３１の検査時の動作》
命令キャッシュメモリ１３０におけるタグ保持部１３２のセキュリティビット部１３２ｃに保持されるセキュリティビットは、上記のように、主記憶メモリ１６０に記憶されている命令コードの暗号化の有無に応じて自動的に設定され、ＣＰＵ１２０のＩ／Ｏ出力命令で任意に設定することができないことによって、命令コード保持部１３１に保持された命令コードの不正な読み出しが防止されるようになっているが、一方、プロセッサ１１０の製造時などにセキュリティビット部１３２ｃや命令コード保持部１３１が入力された値を適切に保持するかどうかを検査するためには、セキュリティビット部１３２ｃに任意の値を設定し得るようにする必要がある。
【００６５】
そこで、セキュリティビット生成回路１３３がＩ／ＯバスＳ１２０ｉｏｂを介した命令コード保持部１３１への書き込みを監視し、命令コード保持部１３１に保持された復号化された命令コードがＩ／Ｏ出力命令によって書き換えられた場合に、セキュリティビット部１３２ｃがクリアされるようにすることにより、復号化された命令コードの秘匿性を損なうことなく、セキュリティビット部１３２ｃおよび命令コード保持部１３１の動作を容易に検査することができる。
【００６６】
具体的には、例えば、セキュリティビット生成回路１３３は、図５に示すような内部状態の遷移に応じて、セキュリティビット部１３２ｃに設定するための値を保持し、出力する。
【００６７】
（Ｓ１０００）  すなわち、セキュリティビット生成回路１３３は、プロセッサ１１０がリセットされた後、まずセキュリティビット部１３２ｃをセットするための値として１を保持する。（なお、この場合でも、非暗号化命令コードが主記憶メモリ１６０から読み出されて命令コード保持部１３１に保持される場合には、前記のように命令復号化回路１４０からＳビットセット信号が出力されないことに応じて０の値が保持され、セキュリティビット部１３２ｃはリセットされる。）
（Ｓ１００１）  その後、ＣＰＵ１２０の命令サイクルごとに、Ｉ／ＯバスＳ１２０ｉｏｂを介してワード０メモリ１３１ａへの書き込みをするＩ／Ｏ出力命令が実行されたかどうかを監視し、そのような命令が実行された場合には（Ｓ１００２）の状態に遷移する一方、他の命令が実行された場合には（Ｓ１０００）の実行に戻る。より詳しくは、ＣＰＵ１２０から出力されるＩ／Ｏアドレスの上位ビットに基づいてアドレスデコーダ１５０から命令キャッシュ選択信号が出力されるとともに、ＣＰＵ１２０からＩ／Ｏライト信号が出力され、かつ、Ｉ／Ｏアドレスの下位ビットによってワード０メモリ１３１ａを選択することが示された場合には、次にワード１メモリ１３１ｂへの書き込みを監視する状態（Ｓ１００２）になる。一方、他の命令が実行された場合には、常に（Ｓ１０００）の実行に戻り、セキュリティビット生成回路１３３に１の値を保持させる。そこで、その後にセキュリティビット部１３２ｃへの書き込みを指示するＩ／Ｏ出力命令が実行されたとしても、セキュリティビット部１３２ｃに書き込まれる値は１なので、命令コード保持部１３１に保持された命令コードがＩ／ＯリードデータバスＳ１２０ｉｏｒを介して読み出されることは確実に防止される。
【００６８】
（Ｓ１００２〜Ｓ１００４）  以下、同様にして、ＣＰＵ１２０の命令サイクルごとに、ワード１メモリ１３１ｂ〜ワード３メモリ１３１ｄへの書き込みが順次連続して行われたかどうかを監視する。すなわち、ワード１メモリ１３１ｂ〜ワード３メモリ１３１ｄへの書き込みをするＩ／Ｏ出力命令が連続して実行された場合にだけ、（Ｓ１００５）の状態に遷移する一方、他の命令が実行された場合には、（Ｓ１０００）の実行に戻る。
【００６９】
（Ｓ１００５）  上記のようにして全てのワード０メモリ１３１ａ〜ワード３メモリ１３１ｄへのＩ／ＯバスＳ１２０ｉｏｂを介した書き込みが行われた場合に、セキュリティビット生成回路１３３はセキュリティビット部１３２ｃに設定するための値として０を保持する。
【００７０】
（Ｓ１００６）  次に、セキュリティビット部１３２ｃ（タグ保持部１３２）への書き込みをするＩ／Ｏ出力命令が実行されるか、または他の命令が実行されると（つまり何らかの命令が実行されると）、その後に（Ｓ１０００）の実行に戻って、以下、同様の動作、状態遷移が繰り返される。すなわち、命令コード保持部１３１に復号化された命令コードが保持されていた場合でも、それらの命令コードを全てＩ／Ｏ出力命令によって上書きした後にセキュリティビット部１３２ｃへの書き込みを行うことによって、セキュリティビット部１３２ｃをクリアすることができる。そこで、Ｉ／Ｏ入力命令を実行してセキュリティビット部１３２ｃ（タグ保持部１３２）に保持されている値をＩ／ＯリードデータバスＳ１２０ｉｏｒを介して読み出すことによって、正常にクリアされたかどうかを確認することができる。また、このとき、セキュリティビット部１３２ｃはクリアされているので、命令コード保持部１３１の保持内容を読み出すことができ、命令コード保持部１３１に真に書き込まれた通りの内容が保持されているかどうかを確認することができる。しかも、上記保持内容は上記Ｉ／Ｏ出力命令によって書き込まれたものなので、その書き込み前に復号化されて保持されていた命令コードが読み出されることはない。したがって、主記憶メモリ１６０に暗号化されて記憶されている命令コードの秘匿性を損なうことなく、セキュリティビット部１３２ｃや命令コード保持部１３１の動作を容易に検査することができる。
【００７１】
ここで、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄへの書き込みは命令コード保持部１３１およびタグ保持部１３２の検査のために意図的に行うものなので、書き込み順序が上記のように固定されていることは特に検査の作業性に影響を与えるものではない。一方、書き込み順序が固定されることによって、セキュリティビット生成回路１３３の状態遷移が単純化され、構成の簡素化が容易になる。もっとも、暗号化された命令コードの不正取得を防止しつつセキュリティビット部１３２ｃの動作を容易に検証できるようにするためには、必ずしも書き込み順序が固定されている必要はなく、例えば各ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄごとにＩ／Ｏ出力命令による書き込みがなされたことを示すフラグを設け、書き込み順序に係わらず全てのワード０メモリ１３１ａ〜ワード３メモリ１３１ｄに書き込みが行われた場合にセキュリティビット部１３２ｃがリセットされるようにしてもよい。また、ワード０メモリ１３１ａ〜ワード３メモリ１３１ｄへの書き込みが連続して行われた場合に限らず、他の命令が実行された場合でも、命令コード保持部１３１に復号化された命令コードが保持されなければ、（Ｓ１０００）を実行せずにセキュリティビット部１３２ｃがリセットされるようにしてもよい。すなわち、少なくともワード０メモリ１３１ａ〜ワード３メモリ１３１ｄのうちの何れかに復号化された命令コードが保持されている場合にセキュリティビット部１３２ｃがリセットされないようにされればよい。
【００７２】
《セキュリティ制御ビット部１４１ｅおよび復号鍵部１４１ｄの検査時の動作》
上記セキュリティビット部１３２ｃと同様に、命令復号化回路１４０の復号化・キャッシュアクセス制御ロジック１４０ｂにおけるセキュリティ制御ビット部１４１ｅに保持される値は、認証ロジック１４６による認証結果に応じて自動的に設定され、ＣＰＵ１２０のＩ／Ｏ出力命令で任意に設定することはできない。しかし、復号鍵部１４１ｄに任意の検査用の復号鍵を設定し、認証鍵部１４５に上記復号鍵に対応した検査用の認証鍵を設定すれば（必要に応じてさらにプログラムＩＤ部１４１ｃおよび認証用プログラムＩＤ部１４４に検査用のプログラムＩＤを設定すれば）、認証を成功させてセキュリティ制御ビット部１４１ｅをクリアすることができる。したがって、例えば、セキュリティ制御ビット部１４１ｅに保持されている値をＩ／ＯリードデータバスＳ１２０ｉｏｒを介して読み出して、実際にクリアされているかどうかを確認することにより、セキュリティ制御ビット部１４１ｅを検査することができる（なお、以下に説明するようにセキュリティビット部１３２ｃがリセットされるかどうかによって間接的に検査することも可能である。）。
【００７３】
上記のようにしてセキュリティ制御ビット部１４１ｅをクリアした場合、暗号化命令コードが主記憶メモリ１６０から読み出されて命令コード保持部１３１に保持される場合には、前記のようにセキュリティビット部１３２ｃがリセットされるので、命令コード保持部１３１の保持内容はＩ／ＯリードデータバスＳ１２０ｉｏｒを介して読み出せるようになる。ところが、この場合に復号鍵部１４１ｄに設定されているのは上記のように検査用の復号鍵であり、命令コード保持部１３１の保持内容は適切に復号化されたものではないため、やはり、暗号化された命令コードの秘匿性が損なわれることはない。
【００７４】
また、セキュリティ制御ビット部１４１ｅがクリアされると、復号鍵部１４１ｄの保持内容をＩ／ＯリードデータバスＳ１２０ｉｏｒを介して読み出すことができるため、復号鍵部１４１ｄの動作を検査することも容易にできる。一方、セキュリティ制御ビット部１４１ｅがセットされている場合には、命令キャッシュメモリ１３０の場合と同じように、ＯＲ回路１４７を介して全てのビットの値が１のデータが出力されるので、復号鍵部１４１ｄに保持された復号鍵を読み出すことはできない。したがって、復号鍵が他人に知られにくいようにすることが容易にできる。もっとも、復号鍵が知られたとしても復号化ロジック１４０ａによる復号化方式が判らなければ、主記憶メモリ１６０に記憶されている暗号化された命令コードを復号化することはできないので、必ずしも暗号化された命令コードの秘匿化が損なわれるわけではない。その意味では、ＯＲ回路１４７は必ずしも設けなくてもよい。逆に、より復号鍵が他人に知られにくいようにするためには、オペレーティングシステム等における復号鍵部１４１ｄに復号鍵を設定するプログラムモジュール自体も暗号化されたものとするなどしてもよい。
【００７５】
なお、上記の例では命令キャッシュメモリ１３０を例に挙げて説明したが、必ずしも命令コードに専用のものでなくてもよい。例えばデータ用と兼用のキャッシュメモリの場合であっても、命令コードがロード命令やムーブ命令等によりＣＰＵデータバスＳ１２０ｄを介してＣＰＵ１２０の汎用レジスタに転送される際など（すなわち、命令レジスタへの転送と異なり、何らかの形で転送された内容を外部から参照可能な転送が行われる場合）には、上記Ｉ／ＯバスＳ１２０ｉｏｂを介した転送と同様のマスク制御等がなされるようになっていればよい。
【００７６】
また、上記の例では、便宜上、命令キャッシュメモリ１３０が１つだけ設けられている例を示したが、複数（例えば１０２４個）設けられて４ワード分の命令コードが複数組保持され得るように構成する場合でも、上記のようにセキュリティビット部１３２ｃにより、命令コード保持部１３１に保持された復号化された命令コードの読み出しの許否を制御することによって、暗号化された命令コードの秘匿性を確保しつつ、デバッグ作業を容易に行えるようにすることができる。その場合、セキュリティビット生成回路１３３は各命令キャッシュメモリ１３０ごとに設けず、共通に１つだけ設けるようにすれば回路規模を低減することができる。すなわち、各命令キャッシュメモリ１３０における命令コード保持部１３１への新たな命令コードの保持とセキュリティビット部１３２ｃへのセキュリティビットの保持とは対応して行われるため、何れかの命令キャッシュメモリ１３０に命令コードが保持される際に、その命令コードについてセキュリティビット生成回路１３３に保持された値が他の命令キャッシュメモリ１３０のセキュリティビット部１３２ｃに書き込まれることはないので、セキュリティビット生成回路１３３は、上記新たに保持される命令コードに対応したセキュリティビットを出力するだけでよい。ただし、セキュリティビット部１３２ｃの検査のために行われる、セキュリティビット生成回路１３３による命令コード保持部１３１への書き込みの監視は、各命令キャッシュメモリ１３０を区別して行う必要があるが、そのためには、例えば、セキュリティビット生成回路１３３の状態遷移（図５のＳ１００１〜Ｓ１００４）に関して、何れの命令キャッシュメモリ１３０の命令コード保持部１３１に書き込みがなされたかを示すＩ／Ｏアドレスを保持し、同一の命令キャッシュメモリ１３０の命令コード保持部１３１に対して連続した書き込みがなされたときに、セキュリティビット部１３２ｃがリセットされるようにすればよい。
【００７７】
また、上記の例では命令コード保持部１３１に保持された命令コードのＩ／Ｏ入力命令による読み出しを抑制するために、セレクタ１３５の出力をＯＲ回路１３６によってマスクする例を示したが、これに限らず、例えばＡＮＤ回路を用いるとともにセキュリティビット部１３２ｃに逆論理の値を保持させて、読み出しが許可されていない場合には全てのビットの値が０のデータが出力されるようにするなどしてもよい。さらに、セレクタを用いて、セレクタ１３５の出力または所定の（あらかじめ定められた固定のまたは規則的もしくはランダムに変化する）値が出力されるようにしてもよい。特に、読み出しが許可されていない場合に、命令コードとして意味のある値が出力されるようにすれば、復号化されて保持されている命令コードとの区別がしにくくなるので、不正な解析をより困難にすることができる。
【００７８】
また、命令復号化回路１４０のアドレステーブル１４１は複数設けてもよく、この場合には、暗号化された複数のプログラムモジュール等が主記憶メモリ１６０の不連続な領域に記憶されている場合に、各プログラムジュール等ごとに、適切に復号化するとともに、復号化された命令コードの秘匿性を確保したりデバッグを可能にしたりすることができる。また、上記のように復号化された命令コードのデバッグを許可するための認証に際してプログラムＩＤを用いることによって、複数のプログラムモジュール等に対して個別にデバッグの許否を設定することができるが、これに限らず、単一のプログラムモジュール等に対してだけ、または複数のプログラムモジュール等に対して一括してデバッグの許否を設定する場合には、必ずしもプログラムＩＤを用いなくてもよい。また、認証鍵部１４５等も複数設けて、同時に複数のプログラムモジュール等についてデバッグできるようにしてもよい。これらによって、プログラムモジュール単位での秘匿性保護ができるので、近年のソフトウエアの大規模化に伴ってソフトウエア開発者が他社からライセンスを受けたソフトウエアと組み合わせてシステム開発を行うことなどが容易にできるようになる。
【００７９】
また、命令コード保持部１３１等に対するＩ／ＯバスＳ１２０ｉｏｂを介したデータの読み書きはＣＰＵ１２０で実行されるデバッグプログラムのＩ／Ｏ入出力命令によって行われるとして説明したが、これに限らず、例えばＩ／ＯバスＳ１２０ｉｏｂやJTAG（Joint Test Action Group）端子等を介してプロセッサ１１０の外部に接続されたデバッグ装置を用いるなどして行う場合でも、復号化された命令コードの秘匿性を確保しつつ、デバッグ作業を容易に行えるなどの効果は同じである。
【００８０】
また、上記ＣＰＵ１２０、命令キャッシュメモリ１３０、および命令復号化回路１４０等は、１チップの半導体として形成されていることがＣＰＵデータバスＳ１２０ｄ等にプローブを当てて信号を解析されることなどの防止が容易である点で好ましいが、これに限らず、例えばこれらの構成要素を攻撃対抗容器（Tamper Resistant Module）で保護するなどしてもよい。
【産業上の利用可能性】
【００８１】
本発明にかかるプロセッサは、プログラムの秘匿性を容易に確保することができ、かつ、暗号化されたプログラムの実行を高速に行わせることができるとともに、キャッシュメモリのテストやプログラムのデバッグを容易に可能にすることができ、外部メモリ等に暗号化されて保持された命令コードを復号化して実行するプロセッサ、特に、復号化された命令コードをキャッシュメモリに保持させることによって、上記命令コードの実行を高速に行うことができる、例えば、音楽配信や映像配信等のネットワークサービスを受けるための機器などに適用されるプロセッサ等として有用である。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施形態のプロセッサ１１０の構成を示すブロック図である。
【図２】同、命令キャッシュメモリ１３０の詳細な構成を示すブロック図である。
【図３】同、命令復号化回路１４０の詳細な構成を示すブロック図である。
【図４】同、命令復号化回路１４０における復号化・キャッシュアクセス制御ロジック１４０ｂの詳細な構成を示すブロック図である。
【図５】同、命令キャッシュメモリ１３０のセキュリティビット生成回路１３３の状態遷移を示す説明図である。
【符号の説明】
【００８３】
１１０      プロセッサ
１２０      ＣＰＵ
１３０      命令キャッシュメモリ
１３１      命令コード保持部
１３１ａ〜１３１ｄ  ワード０メモリ〜ワード３メモリ
１３２      タグ保持部
１３２ａ    アドレスタグ部
１３２ｂ    バリッドビット部
１３２ｃ    セキュリティビット部
１３３      セキュリティビット生成回路
１３４      ＡＮＤ回路
１３５      セレクタ
１３６      ＯＲ回路
１３７      セレクタ
１３８      デコーダ
１３９      ３ステートバッファ
１４０      命令復号化回路
１４０ａ    復号化ロジック
１４０ｂ    復号化・キャッシュアクセス制御ロジック
１４１      アドレステーブル
１４１ａ    上限アドレス部
１４１ｂ    下限アドレス部
１４１ｃ    プログラムＩＤ部
１４１ｄ    復号鍵部
１４１ｅ    セキュリティ制御ビット部
１４２      アドレス比較ロジック
１４３      ＡＮＤ回路
１４４      認証用プログラムＩＤ部
１４５      認証鍵部
１４６      認証ロジック
１４７      ＯＲ回路
１４８      セレクタ
１４９      ３ステートバッファ
１５０      アドレスデコーダ
１６０      主記憶メモリ
１７１      ライトアドレスデコーダ
Ｓ１２０ａ    ＣＰＵアドレスバス
Ｓ１２０ｄ    ＣＰＵデータバス
Ｓ１２０ｉｏａ      Ｉ／Ｏアドレスバス
Ｓ１２０ｉｏｂ      Ｉ／Ｏバス
Ｓ１２０ｉｏｒ      Ｉ／Ｏリードデータバス
Ｓ１２０ｉｏｗ      Ｉ／Ｏライトデータバス
Ｓ１２０ｉｏｗｃ    Ｉ／Ｏライトコマンド信号線
Ｓ１３０ａ    命令キャッシュアドレスバス
Ｓ１３０ｄ    命令キャッシュデータバス
Ｓ１３０ｓ    Ｓビットセット信号線
Ｓ１５０ｃ    命令キャッシュ選択信号線
Ｓ１５０ｓ    命令復号回路選択信号線
Ｓ１６０ａ    メモリアドレスバス
Ｓ１６０ｄ    メモリデータバス
【図１】
2005251022.tif 000003
【図２】
2005251022.tif 000004
【図３】
2005251022.tif 000005
【図４】
2005251022.tif 000006
【図５】
2005251022.tif 000007