(57)【要約】【課題】情報処理装置の汎用性を損なうことなく、プログラムについての必要な機密性を確保する。【解決手段】情報処理装置１は、他のプログラム２１による呼び出しが制限されているアクセス制限領域２８に記憶された処理プログラム２４を含む、複数のプログラムを記憶可能な記憶部１２〜１４と、記憶部１２〜１４からプログラムを読み込んで実行する実行部１１と、実行部１１と記憶部１２〜１４とを接続するバス１６と、バス１６を監視し、実行部１１による記憶部１２〜１４へのアクセスを制御するバスアクセス制御部１５とを有する。記憶部１２〜１４は、アクセス制限領域２８外に、処理プログラム２４を呼び出す呼出しプログラム２３を記憶する。バスアクセス制御部１５は、呼出しプログラム２３の実行により実行部１１がバス１６を通じて記憶部１２〜１４のアクセス制限領域２８にアクセスする場合に、当該アクセス制限領域２８へのアクセスを許可し、それ以外の場合にアクセスを禁止する。【選択図】図１
2011150457.tif 000002
【特許請求の範囲】
【請求項１】
他のプログラムによる呼び出しが制限されているアクセス制限領域に記憶された処理プログラムを含む、複数のプログラムを記憶可能な記憶部と、
前記記憶部からプログラムを読み込んで実行する実行部と、
前記実行部と前記記憶部とを接続するバスと、
前記バスを監視し、前記実行部による前記記憶部へのアクセスを制御するバスアクセス制御部と
を有し、
前記記憶部は、
前記アクセス制限領域外に、前記処理プログラムを呼び出す呼出しプログラムを記憶し、
前記バスアクセス制御部は、
前記呼出しプログラムの実行により前記実行部が前記バスを通じて前記記憶部の前記アクセス制限領域にアクセスする場合に、当該アクセス制限領域へのアクセスを許可し、
前記呼出しプログラム以外のプログラムの実行により前記実行部が前記バスを通じて前記記憶部の前記アクセス制限領域にアクセスする場合に、当該アクセス制限領域へのアクセスを禁止する
情報処理装置。
【請求項２】
前記記憶部は、
アクセス制限領域外に、前記他のプログラムを記憶し、
前記呼出しプログラムは、
前記実行部による前記他のプログラムの実行に基づいて前記実行部に読み込まれて実行され、前記処理プログラムを前記実行部に読み込ませて実行させる
請求項１記載の情報処理装置。
【請求項３】
前記呼出しプログラムは、
前記処理プログラムを前記実行部に読み込ませる前に、前記実行部による他のプログラムの実行を禁止する
請求項１または２記載の情報処理装置。
【請求項４】
前記処理プログラムは、
当該処理プログラムの一連の処理の最後に、前記呼出しプログラムを前記実行部に実行させ、
前記呼出しプログラムは、
前記処理プログラムの呼び出しに基づいて、前記実行部による他のプログラムの実行を許可する
請求項３記載の情報処理装置。
【請求項５】
前記記憶部は、
前記バスに接続され、プロテクト信号が解除されている場合にアクセス可能な制限メモリを有し、当該制限メモリに前記アクセス制限領域が設けられ、
前記バスアクセス制御部は、
前記制限メモリへ前記プロテクト信号を出力し、
前記バス上の信号に基づいて、前記呼出しプログラムを実行する前記実行部による所定のアクセスを検出した場合に、前記プロテクト信号を解除する
請求項１から４のいずれか一項記載の情報処理装置。
【請求項６】
前記バスアクセス制御部は、
前記バスを通じた前記実行部による第１アドレスへのアクセスを検出した場合に、有効信号を生成し、
前記有効信号が生成されている状態で、前記バスを通じた前記実行部による第２アドレスへのアクセスを検出した場合に、前記プロテクト信号を解除する
請求項５記載の情報処理装置。
【請求項７】
前記第１アドレスは、
前記呼出しプログラムの格納先アドレスであり、
前記バスアクセス制御部は、
前記第１アドレスへのアクセスとして、前記第１アドレスからの読出しアクセスを検出する
請求項６記載の情報処理装置。
【請求項８】
前記記憶部は、前記実行部により書き換えることができない読出専用メモリを有し、
前記呼出しプログラムは、前記読出専用メモリに記憶されている
請求項１から７のいずれか一項記載の情報処理装置。
【請求項９】
前記記憶部、前記実行部、前記バス、および前記バスアクセス制御部は、１個の集積回路装置に組み込まれている
請求項１から８のいずれか一項記載の情報処理装置。
【請求項１０】
前記バスアクセス制御部に対して、前記実行部と共通するクロック信号を出力する発振部を有し、
前記バスは、
データバス、アドレスバス、および当該バスのアクセス状態を示すプロテクション情報用の信号線を有し、
前記バスアクセス制御部は、
前記クロック信号、前記アドレスバスのアドレス信号および前記プロテクション情報の信号が入力され、前記呼出しプログラムの格納先アドレスからの読出しアクセスを検出した場合に、前記クロック信号と同期して前記有効信号を出力するアクセス判定回路と、
前記クロック信号、前記アドレスバスのアドレス信号および前記有効信号が入力され、前記プロテクト信号を出力するプロテクトレジスタ回路と
を有し、
前記プロテクトレジスタ回路は、
前記有効信号が入力されている期間において前記第２アドレスへのアクセスを検出した場合に、前記クロック信号と同期して前記プロテクト信号を解除する
請求項５記載の情報処理装置。
【請求項１１】
他のプログラムによる呼び出しが制限されているアクセス制限領域に記憶された処理プログラムを含む、複数のプログラムを記憶可能な記憶部と、前記記憶部からプログラムを読み込んで実行する実行部とがバスにより接続された情報処理装置でのメモリアクセス制御方法であって、
前記バス上で、前記呼出しプログラムの実行による前記実行部のアクセスを検出するステップと、
前記バス上で前記アクセス制限領域に対する実行部のアクセスを検出した場合に、直前に前記呼出しプログラムの実行によるアクセスがあったか否かに応じて、前記アクセス制限領域へのアクセスを許可または禁止に制御するステップと
を備えるメモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機密性が要求されるプログラムを利用可能な情報処理装置およびメモリアクセス制御方法に関する。
【背景技術】
【０００２】
情報処理装置では、たとえば暗号化プログラムなどの、機密性が要求されるプログラム（以下、秘密プログラムという。）を利用することがある。
そして、一般的な情報処理装置に用いられるＣＰＵは、プログラムの機密度を判断しない。
よって、秘密プログラムと、機密性が要求されない一般のプログラムとを同一の情報処理装置に混在させた場合、情報処理装置のＣＰＵは、一般プログラムの実行により、たとえば秘密プログラムを読み込んだり、書き換えたりできる。
すなわち、プログラムの機密度を判断しない汎用的なＣＰＵが情報処理装置に用いられている場合、一般プログラムは、何の制限を受けることなく秘密プログラムに簡単にアクセス可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−２２８４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
秘密プログラムの目的外利用を避けて秘密プログラムの機密性を確保するためには、情報処理装置のＣＰＵに、たとえば、プログラムの機密性を判断させ、その機密性の判断結果に応じた処理を実行させることが考えられる。
しかしながら、プログラムの機密性をＣＰＵのプログラム処理により判断する場合、ＣＰＵは、たとえばプログラムを実行する度にプログラムの機密性を判断する必要がある。
その結果、ＣＰＵの処理負荷が増加し、情報処理装置は、それを補うために情報処理能力が高く、汎用性に劣る高価なＣＰＵを使用する必要が生じる。
この他にも例えば、ＣＰＵを改良して、各プログラムの機密性をハードウェアにより判断することも考えられる（特許文献１）。
しかしながら、機密性を判断するようにハードウェアが改良されたＣＰＵは、汎用品ではなく、特殊で高価なものになる。
【０００５】
このように情報処理装置では、情報処理装置の汎用性を損なうことなく、プログラムについての必要な機密性を確保することが求められている。
【課題を解決するための手段】
【０００６】
本発明の第１の観点の情報処理装置は、他のプログラムによる呼び出しが制限されているアクセス制限領域に記憶された処理プログラムを含む、複数のプログラムを記憶可能な記憶部と、記憶部からプログラムを読み込んで実行する実行部と、実行部と記憶部とを接続するバスと、バスを監視し、実行部による記憶部へのアクセスを制御するバスアクセス制御部とを有する。そして、記憶部は、アクセス制限領域外に、処理プログラムを呼び出す呼出しプログラムを記憶し、バスアクセス制御部は、呼出しプログラムの実行により実行部がバスを通じて記憶部のアクセス制限領域にアクセスする場合に、当該アクセス制限領域へのアクセスを許可し、呼出しプログラム以外のプログラムの実行により実行部がバスを通じて記憶部のアクセス制限領域にアクセスする場合に、当該アクセス制限領域へのアクセスを禁止する。
【０００７】
第１の態様では、実行部は、呼出しプログラムを実行する場合にバスを通じて記憶部のアクセス制限領域にアクセスでき、それ以外のプログラムを実行する場合にはバスを通じて記憶部のアクセス制限領域にアクセスできない。
よって、第１の態様では、機密性が要求される処理プログラムをアクセス制限領域に記憶させることにより、当該処理プログラムに対して一般プログラムから直接的にアクセスできないようにすることができる。
その結果、第１の態様では、実行部がプログラムの機密性を判断することなく、機密性が要求される処理プログラムに対するアクセスを制限できる。
【０００８】
本発明の第２の観点のメモリアクセス制御方法は、他のプログラムによる呼び出しが制限されているアクセス制限領域に記憶された処理プログラムを含む、複数のプログラムを記憶可能な記憶部と、記憶部からプログラムを読み込んで実行する実行部とがバスにより接続された情報処理装置でのメモリアクセス制御方法である。そして、このメモリアクセス制御方法では、バス上で、呼出しプログラムの実行による実行部のアクセスを検出するステップと、バス上でアクセス制限領域に対する実行部のアクセスを検出した場合に、直前に呼出しプログラムの実行によるアクセスがあったか否かに応じて、アクセス制限領域へのアクセスを許可または禁止に制御するステップとを備える。
【発明の効果】
【０００９】
本発明では、情報処理装置の汎用性を低下させることなく、プログラムについての必要な機密性を確保できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明の実施形態に係る情報処理装置の概略ブロック図である。
【図２】図２は、図１のＣＰＵがアクセス可能な記憶領域のアドレスマップである。
【図３】図３は、図１のＣＰＵバス、メモリ制御回路、機密メモリおよびその周辺部の詳細なブロック図である。
【図４】図４は、図３のアクセス判定回路およびプロテクトレジスタ回路の一例の詳細なブロック図である。
【図５】図５は、ＣＰＵによる機密プログラムの実行プロセスの一例を示すシーケンスチャートである。
【図６】図６は、秘密プログラムを読み込むまでのＣＰＵバスなどの状態の一例を示すタイミングチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に関連付けて説明する。
説明は以下の順に行う。
１．情報処理装置の構成
２．アドレスマップ
３．メモリ制御回路などの詳細な説明
４．秘密プログラムの実行シーケンス
５．秘密プログラム実行までのタイミングチャート
【００１２】
［情報処理装置の構成］
図１は、本発明の実施形態に係る情報処理装置１の概略ブロック図である。
図１には、情報処理装置１のＣＰＵバス・アーキテクチャ・システムが図示されている。
【００１３】
図１の情報処理装置１は、１チップの集積回路装置２と、集積回路装置２に接続された発振部３とを有する。
集積回路装置２は、ＣＰＵ１１、通常メモリ１２、許可メモリ１３、機密メモリ１４、メモリ制御回路１５、およびＣＰＵバス１６を有する。
発振部３は、クロック信号を出力する。
集積回路装置２のＣＰＵ１１、メモリ制御回路１５などは、このクロック信号に同期して動作する。
【００１４】
ＣＰＵバス１６は、ＣＰＵ１１、通常メモリ１２、許可メモリ１３、機密メモリ１４およびメモリ制御回路１５を接続する。
【００１５】
ＣＰＵ１１は、たとえば１クロック毎に命令を実行するＲＩＳＣ（Reduced Instruction Set Computer）コアである。なお、ＣＰＵ１１は、ＣＩＳＣ（Complex Instruction Set Computer）コアであってもよい。
ＣＰＵ１１は、たとえば情報処理装置１のＣＰＵバス１６の利用を管理するバスマスタとして機能する。
ＣＰＵ１１は、ＣＰＵバス１６を使用して、通常メモリ１２、許可メモリ１３、機密メモリ１４またはメモリ制御回路１５にアクセスする。ＣＰＵ１１によるメモリアクセスには、リードアクセスと、ライトアクセスとがある。また、リードアクセスには、プログラムを読み込むオペコードフェッチと、データを読み込むデータフェッチとがある。
ＣＰＵ１１は、通常メモリ１２、許可メモリ１３または機密メモリ１４からプログラムを読み込んで実行する。
これにより、ＣＰＵ１１は、情報処理装置１の制御部として機能する。
【００１６】
また、ＣＰＵ１１は、ＣＰＵ１１によるプログラムの実行を管理する。
ＣＰＵ１１は、たとえば実行状態、実行待ち状態、待ち状態とによりプログラムの実行を管理する。
ＣＰＵ１１が読み込むプログラムには、他のプログラムの読出し処理、データの読み込み、加工、保存処理などの命令（コマンド）が記述される。ＣＰＵ１１は、これらの処理を記述したプログラムデータをメモリから読み込んで実行する。その結果、ＣＰＵ１１は、新たなデータやプログラムをメモリから読み込んで実行したり、生成したデータをメモリに書き込んだりする。
たとえば、実行中のプログラムに他のプログラムの呼び出し処理が記述されている場合、ＣＰＵ１１は、その処理の実行によりメモリにリードアクセス（オペコードフェッチ）し、他のプログラムを読み込む。また、ＣＰＵ１１は、実行中のプログラムを待ち状態または実行待ち状態としてその処理を中断した後、新たに読み込んだ他のプログラムを実行する。また、新たに読み込んだ当該他のプログラムの実行を終えると、ＣＰＵ１１は、実行待ち状態に制御した中断中のプログラムの実行を再開する。
【００１７】
また、ＣＰＵ１１は、ＣＰＵ１１の割り込みなどのイベントを管理する。
割り込みイベントには、ソフトウェアによる割り込みイベントと、ハードウェアによる割り込みイベントとがある。
割り込みイベントが発生すると、ＣＰＵ１１は、そのイベント待ち状態であったプログラムを実行または実行待ち状態とする。実行待ち状態のプログラムの優先順位が実行中のプログラムより高い場合、ＣＰＵ１１は、実行中のプログラムを実行待ち状態とし、優先順位が高い実行待ち状態のプログラムを実行する。
【００１８】
通常メモリ１２は、たとえばフラッシュメモリなどの不揮発性の半導体メモリである。ＣＰＵ１１は、ＣＰＵバス１６を通じて通常メモリ１２にアクセスする。
そして、通常メモリ１２は、たとえば一般プログラム２１と、一般データ２２とを記憶する。
一般プログラム２１は、たとえば暗号を利用するアプリケーションプログラムなどである。暗号を利用するアプリケーションプログラムとしては、たとえば通信アプリケーションプログラムなどがある。
一般データ２２は、一般プログラム２１が利用するデータである。通信アプリケーションプログラムが利用する一般データ２２には、たとえば通信先の識別情報のデータなどである。
【００１９】
機密メモリ１４、通常メモリ１２は、たとえばフラッシュメモリなどの不揮発性の半導体メモリである。ＣＰＵ１１は、ＣＰＵバス１６を通じて機密メモリ１４にアクセスする。
機密メモリ１４は、たとえば秘密プログラム２４と、秘密データ２５とを記憶する。
秘密プログラム２４は、たとえば通信データの暗号処理プログラム、復号処理プログラムなどである。
秘密データ２５は、たとえば暗号処理プログラムが通信データの暗号化に使用する暗号キーなどである。
そして、秘密プログラム２４および秘密データ２５は、一般プログラム２１や一般データ２２と異なり、たとえば一般ユーザ、アプリケーションプログラムの開発者などにその内容を知られたくない。
すなわち、秘密プログラム２４および秘密データ２５は、一般プログラム２１および一般データ２２と比べて高い秘匿性が要求される。
【００２０】
許可メモリ１３は、たとえばＣＰＵ１１により書き換えできないＲＯＭである。ＣＰＵ１１は、ＣＰＵバス１６を通じて許可メモリ１３にアクセスする。
許可メモリ１３は、たとえば許可プログラム２３を記憶する。
許可プログラム２３は、一般プログラム２１により呼び出され、秘密プログラム２４を呼び出すプログラムである。
【００２１】
［アドレスマップ］
図２は、図１のＣＰＵ１１がアクセス可能な記憶領域のアドレスマップである。
図２には、０ｘ００００（１６進数の００００。以下同様。）から０ｘＦＦＦＦまでのアドレスが図示されている。
【００２２】
そして、０ｘ１０００から０ｘ２０００までのアドレス範囲は、許可メモリ１３に割り当てられている。
以下、この許可メモリ１３に割り当てられたアドレス範囲を第１アドレス範囲２６という。
許可メモリ１３は、許可プログラム２３を記憶するＲＯＭなどである。
よって、ＣＰＵ１１は、０ｘ１０００から０ｘ２０００までのアドレス範囲についてはリードアクセスのみが有効となる。
【００２３】
また、０ｘ３０００から０ｘ４０００までのアドレス範囲は、メモリ制御回路１５のプロテクトレジスタ６９に割り当てられている。
以下、このメモリ制御回路１５に割り当てられたアドレス範囲を第２アドレス範囲２７という。
【００２４】
また、０ｘ５０００から０ｘ７０００までのアドレス範囲は、機密メモリ１４に割り当てられている。
この機密メモリ１４のアドレス範囲が、メモリアクセスが制限される機密メモリ領域２８となる。
機密メモリ１４は、秘密プログラム２４、秘密データ２５を記憶する不揮発性メモリである。よって、ＣＰＵ１１は、基本的には、機密メモリ１４にライトアクセスすることで、秘密プログラム２４、秘密データ２５を上書きすることが可能である。
【００２５】
上述した以外のアドレス範囲は、通常メモリ１２に割り当てられている。
通常メモリ１２は、一般プログラム２１などを記憶する。ＣＰＵ１１は、通常メモリ１２にアクセスすることで、一般プログラム２１、一般データ２２などを読み込んだり、上書きしたりできる。
【００２６】
ＣＰＵ１１は、基本的には、機密メモリ１４にライトアクセスすることで、秘密プログラム２４、秘密データ２５を上書きできる。
また、ＣＰＵ１１は、基本的には、機密メモリ１４にリードアクセスすることで、秘密プログラム２４、秘密データ２５を読み込むことが可能である。
しかしながら、上述したように、秘密プログラム２４などには、一般プログラム２１などと比べて高い秘匿性が要求される。
秘密プログラム２４の提供者は、秘密プログラム２４を集積回路装置２において利用することは許可するけれども、秘密プログラム２４の内容を読み取ったり、改変したりする目的外利用は許可したくない。
このため、本実施形態では、ＣＰＵ１１と独立して動作し、ＣＰＵバス１６を監視するメモリ制御回路１５を設けている。
【００２７】
また、本実施形態では、図２に示すように、一般プログラム２１は、許可メモリ１３から許可プログラム２３を読み込み、この許可プログラム２３の実行によりプロテクトレジスタ６９の値を変更し、機密メモリ１４へのアクセスを可能にする。
また、本実施形態では、許可プログラム２３の実行開始から実行終了までの期間は、ＣＰＵ１１での割り込みを一切禁止する。
【００２８】
［メモリ制御回路などの詳細な説明］
図３は、図１のＣＰＵバス１６、メモリ制御回路１５、機密メモリ１４およびその周辺部の詳細なブロック図である。
【００２９】
ＣＰＵバス１６は、図３に示すように、アドレスバス３１、データバス３２、制御バス３３を有する。
アドレスバス３１は、複数本のアドレス信号線を有する。
データバス３２は、複数本のデータ信号線を有する。
制御バス３３は、たとえばライトイネーブル信号線ＷＥ、オペコードの出力信号線Opecodeなどを有する。
ライトイネーブル信号線ＷＥは、ＣＰＵ１１がメモリにデータを書込む場合にＣＰＵ１１によりハイレベルに制御され、ＣＰＵ１１がメモリからデータを読み出す場合にＣＰＵ１１によりローレベルに制御される信号線である。
オペコードは、ＣＰＵ１１が実行する処理の内容がオペコードフェッチであることを示す信号線である。ＣＰＵ１１は、オペコードの出力信号線Opecodeに、実行中のオペコードを示す信号を出力する。
たとえばＣＰＵ１１がメモリからプログラムを読み出す場合、ＣＰＵ１１は、オペコードの出力信号線Opecodeにオペコードフェッチに対応したハイレベルの信号を出力する。
メモリに対してデータアクセスをする場合、ＣＰＵ１１は、オペコードの出力信号線Opecodeにデータアクセスに対応したローレベルの信号を出力する。
【００３０】
メモリ制御回路１５は、ＣＰＵバス１６と、機密メモリ１４とに接続される。
そして、メモリ制御回路１５は、ＣＰＵバス１６の検出状態に基づいて、ＣＰＵ１１による機密メモリ１４へのアクセス可否を制御する。
メモリ制御回路１５は、アクセス可否を制御するためのプロテクト信号を機密メモリ１４へ出力する。
メモリ制御回路１５は、アクセス判定回路４１、第１アドレス範囲レジスタ４２、プロテクトレジスタ回路４３、および第２アドレス範囲レジスタ４４を有する。
【００３１】
第１アドレス範囲レジスタ４２は、許可メモリ１３に割り当てられた第１アドレス範囲２６（０ｘ１０００から０ｘ２０００）を記憶する。
【００３２】
アクセス判定回路４１は、アドレスバス３１、制御バス３３、第１アドレス範囲レジスタ４２に接続される。
アクセス判定回路４１には、アドレスバス３１のアドレス信号と、制御バス３３のプロテクション情報信号が入力される。プロテクション情報信号としては、たとえばライトイネーブル信号、オペコードの出力信号を用いる。
そして、アクセス判定回路４１は、クロック信号が入力される度に、これらの信号に基づいて、ＣＰＵ１１が許可メモリ１３にアクセスしたか否かを判定し、判定信号を出力する。
【００３３】
第２アドレス範囲レジスタ４４は、メモリ制御回路１５に割り当てられた第２アドレス範囲２７（０ｘ３０００から０ｘ４０００）を記憶する。
【００３４】
プロテクトレジスタ回路４３は、データバス３２、アドレスバス３１、アクセス判定回路４１、第２アドレス範囲レジスタ４４に接続される。
プロテクトレジスタ回路４３には、アドレスバス３１のアドレス信号と、データバス３２のデータ信号、アクセス判定回路４１の判定信号が入力される。
そして、プロテクトレジスタ回路４３は、クロック信号が入力される度に、これらの信号に基づいて所定の正常なアクセスであるか否かを判断し、所定の正常なアクセスである場合には、プロテクトレジスタ６９の値を、データ信号に対応する値へ更新する。
プロテクトレジスタ回路４３は、プロテクトレジスタ６９の値に応じたプロテクト信号を出力する。
【００３５】
このようにプロテクトレジスタ回路４３の値およびプロテクト信号は、アクセス判定回路４１が判定信号を出力することにより許可した場合だけ変更可能になる。
また、アクセス判定回路４１は、ＣＰＵバス１６を監視し、直前のオペコードフェッチ時のアドレス・バスの値が許可プログラム２３を格納する許可メモリ１３の領域の値であった場合のみ、プロテクトレジスタ回路４３への書き込みを可能にする。
【００３６】
機密メモリ１４は、たとえばアドレスデコーダ５１と、不揮発性の半導体メモリ５２とを有する。
【００３７】
アドレスデコーダ５１には、アドレスバス３１と、プロテクトレジスタ回路４３とが接続される。
アドレスデコーダ５１は、プロテクト信号が機密メモリ１４へのアクセス許可に対応するレベルである場合、アドレスバス３１のアドレス信号に基づいて自分宛てのアドレス（０ｘ５０００から０ｘ７０００）であるか否かを判断する。
アドレスデコーダ５１は、判断結果を示すチップセレクト信号を出力する。
【００３８】
機密メモリ１４の半導体メモリ５２には、アドレスデコーダ５１と、ＣＰＵバス１６とが接続される。
機密メモリ１４の半導体メモリ５２は、アドレスデコーダ５１からチップセレクト信号が入力された場合、アドレスバス３１のアドレス信号に基づいてアクセス先を特定する。また、半導体メモリ５２は、制御バス３３のライトイネーブル信号に応じて、アクセス先のデータをデータバス３２に入出力する。
【００３９】
図４は、アクセス判定回路４１およびプロテクトレジスタ回路４３の一例の詳細なブロック図である。
アクセス判定回路４１は、第１アンド回路６１、第１アドレスコンパレータ６２、第１セレクタ６３、第２アンド回路６４、第１Ｄフリップフロップ回路６５を有する。
プロテクトレジスタ回路４３は、第２アドレスコンパレータ６６、第３アンド回路６７、第２セレクタ６８、プロテクトレジスタ６９を有する。
プロテクトレジスタ６９は、プロテクト信号を出力する。
【００４０】
アクセス判定回路４１の第１アンド回路６１には、ライトイネーブル信号線ＷＥと、オペコードの出力信号線Opecodeとが接続される。ライトイネーブル信号は、第１アンド回路６１に反転入力される。
そして、第１アンド回路６１は、ライトイネーブル信号がローレベルであり、かつ、オペコードの出力信号がハイレベル（オペコードフェッチ）である場合、ハイレベルの第１アンド信号を出力する。
それ以外の場合は、第１アンド回路６１は、ローレベルの第１アンド信号を出力する。
【００４１】
第１アドレスコンパレータ６２には、第１アドレス範囲レジスタ４２と、アドレスバス３１とが接続される。
そして、第１アドレスコンパレータ６２は、アドレスバス３１に第１アドレス範囲２６（０ｘ１０００から０ｘ２０００）のアドレス信号が出力されている場合、ハイレベルの第１アドレス信号を出力する。
それ以外の場合は、第１アドレスコンパレータ６２は、ローレベルの第１アドレス信号を出力する。
【００４２】
第１セレクタ６３には、第１アンド回路６１、第１アドレスコンパレータ６２、第１Ｄフリップフロップ回路６５が接続される。
そして、第１セレクタ６３は、第１アンド信号がハイレベルの場合、第１アドレス信号を選択して出力する。
第１アンド信号がローレベルの場合、第１セレクタ６３は、第１Ｄフリップフロップ回路６５の第１フリップフロップ信号を選択して出力する。
【００４３】
第２アンド回路６４には、第１セレクタ６３と、第３アンド回路６７とが接続される。第３アンド回路６７が出力する第３アンド信号は、第２アンド回路６４に反転入力される。
そして、第２アンド回路６４は、第３アンド信号がローレベルであり、かつ、第３アンド信号がハイレベルである場合、ハイレベルの第２アンド信号を出力する。
それ以外の場合は、第２アンド回路６４は、ローレベルの第２アンド信号を出力する。
【００４４】
第１Ｄフリップフロップ回路６５には、第２アンド回路６４が接続される。
そして、第１Ｄフリップフロップ回路６５は、クロック信号が入力される度に、第２アンド信号をラッチした第１Ｄフリップフロップ信号を出力する。
【００４５】
よって、アクセス判定回路４１は、ＣＰＵ１１が許可メモリ１３にリードアクセス（オペコードフェッチ）するクロックサイクルにおいてハイレベルの第１Ｄフリップフロップ信号（WriteValid）を出力する。
それ以外の場合には、アクセス判定回路４１は、ローレベルの第１Ｄフリップフロップ信号を出力する。
すなわち、たとえば許可メモリ１３から許可プログラム２３の命令コードをフェッチする場合には、ＣＰＵバス１６上のオペコードの出力信号がＨｉｇｈになり、ライトイネーブル信号がＬｏｗとなる。
このときのＣＰＵバス１６上のアドレスバス３１の値が許可プログラム２３を格納する許可メモリ１３のアドレス範囲（０ｘ１０００から０ｘ２０００）であるので、第１Ｄフリップフロップ信号（WriteValid）は、Ｈｉｇｈとなる。
【００４６】
プロテクトレジスタ回路４３の第２アドレスコンパレータ６６には、第２アドレス範囲レジスタ４４と、アドレスバス３１とが接続される。
そして、第２アドレスコンパレータ６６は、アドレスバス３１に第２アドレス範囲２７（０ｘ３０００から０ｘ４０００）のアドレス信号が出力されている場合、ハイレベルの第２アドレス信号を出力する。
それ以外の場合は、第２アドレスコンパレータ６６は、ローレベルの第２アドレス信号を出力する。
【００４７】
第３アンド回路６７には、第２アドレスコンパレータ６６、ライトイネーブル信号線ＷＥ、第１Ｄフリップフロップ回路６５が接続される。
そして、第３アンド回路６７は、第１Ｄフリップフロップ信号がハイレベルであり、かつ、第２アドレス信号およびライトイネーブル信号がハイレベルである場合、ハイレベルの第３アンド信号を出力する。
それ以外の場合は、第３アンド回路６７は、ローレベルの第３アンド信号を出力する。
【００４８】
第２セレクタ６８には、第３アンド回路６７と、データバス３２と、プロテクトレジスタ６９とが接続される。
そして、第２セレクタ６８は、第３アンド信号がハイレベルの場合、データ信号を選択して出力する。
第３アンド信号がローレベルの場合、第２セレクタ６８は、プロテクト信号を選択して出力する。
【００４９】
プロテクトレジスタ６９は、複数の第２Ｄフリップフロップ回路を有する。
複数の第２Ｄフリップフロップ回路には、第２セレクタ６８が接続される。
そして、第２Ｄフリップフロップ回路は、クロック信号が入力される度に、第２セレクタ６８により選択された信号をラッチする。
プロテクトレジスタ６９は、複数の第２Ｄフリップフロップ回路に基づくプロテクト信号を出力する。
【００５０】
プロテクト信号は、たとえば複数の第２Ｄフリップフロップ回路のすべてのラッチ信号がハイレベルである場合にハイレベルとなり、それ以外の場合にローレベルとなる。
よって、プロテクトレジスタ回路４３は、ＣＰＵ１１が許可メモリ１３にリードアクセス（オペコードフェッチ）した次のクロックサイクルにおいてプロテクトレジスタ６９へのアクセスを実行すると、データバス３２のデータをプロテクトレジスタ６９に書き込む。また、プロテクトレジスタ回路４３は、ハイレベルのプロテクト信号を出力する。
それ以外の場合には、プロテクトレジスタ回路４３は、ローレベルのプロテクト信号を出力する。
すなわち、たとえば許可メモリ１３から許可プログラム２３が読み込まれた次のクロックサイクルにおいて、プロテクトレジスタ６９への書き込みが実行されると、書込みデータは、プロテクトレジスタ６９に反映される。
【００５１】
なお、プロテクトレジスタ６９がＨｉｇｈの場合のみ、メモリ制御回路１５は、秘密プログラム２４を格納する機密メモリ１４へのアクセスを許可するハイレベルのプロテクト信号を出力する。
また、プロテクトレジスタ６９がＬｏｗの場合、メモリ制御回路１５は、機密メモリ１４へのアクセスを禁止するローレベルのプロテクト信号を出力する。
また、第３アンド回路６７の第３アンド信号が第２アンド回路６４に反転入力されているため、プロテクトレジスタ６９への書き込みがなされた次のサイクルでは、第１Ｄフリップフロップ信号（WriteValid）は、自動的にローレベルにクリアされる。
【００５２】
以上の構成により、プロテクトレジスタ６９へ書き込みアクセス直前のＣＰＵバス１６へのアクセスは、必ず許可プログラム２３を格納する許可メモリ１３のアドレスからの命令コードフェッチとなる。
【００５３】
［秘密プログラムの実行シーケンス］
図５は、以上のハードウェア構成を前提としたＣＰＵ１１による機密プログラムの実行プロセスの一例を示すシーケンスチャートである。
図５には、ＣＰＵ１１により読み込んで実行されるプログラムとして、一般プログラム２１、許可プログラム２３、秘密プログラム２４が図示されている。
また、図５において時間は、上から下に流れている。
また、以下の説明では、図５の各ステップは、クロック信号の１クロックサイクル毎に実行されるものとして説明する。
【００５４】
なお、情報処理装置１の起動時に、プロテクトレジスタ６９には、初期値として、プロテクトを有効（ローレベル）とする値が書き込まれるものとする。
プロテクトが有効である場合、ＣＰＵ１１がＣＰＵバス１６を通じて機密メモリ１４にリードアクセスしても、機密メモリ１４は、有効なプログラムやデータをデータバス３２へ出力しない。
また、ＣＰＵ１１がＣＰＵバス１６を通じて機密メモリ１４にライトアクセスしても、機密メモリ１４は、データバス３２のデータをメモリに格納保存しない。
これにより、機密メモリ１４の秘密プログラム２４および秘密データ２５は、読み出されず且つ保護される。
【００５５】
図５において、一般プログラム２１を実行するＣＰＵ１１は、一般プログラム２１に記述された許可プログラム２３へのジャンプ処理を読み込んで実行する（ステップＳＴ１）。
ＣＰＵ１１は、一般プログラム２１をリターンイベント待ち状態とする。
その後、ＣＰＵ１１は、ジャンプコードの記述に基づいて許可プログラム２３の格納先アドレスを特定し、特定した格納先アドレスから許可プログラム２３を読み込む。
ＣＰＵ１１は、ＣＰＵバス１６を通じて許可メモリ１３にリードアクセス（オペコードフェッチ）する。
【００５６】
許可メモリ１３から許可プログラム２３を読み込むと、ＣＰＵ１１は、許可プログラム２３を実行する。
許可プログラム２３の実行において、ＣＰＵ１１は、まず、割り込みハンドラをディセーブルにする（ステップＳＴ２）。
これにより、ＣＰＵ１１は、割り込みハンドラがイネーブルにされるまで、他のプログラムなどを実行する割り込みイベントが発生しても、他のプログラムによる割り込み処理を実行せず、実行中のプログラムを継続して実行し続ける。
【００５７】
次に、ＣＰＵ１１は、ＣＰＵバス１６を通じて許可メモリ１３から許可プログラム２３の続きを読み込み、プロテクト解除処理を実行する（ステップＳＴ３）。
具体的には、ＣＰＵ１１は、ＣＰＵバス１６を通じてプロテクトレジスタ６９にライトアクセスし、プロテクト信号を無効（ハイレベル）とするためのデータをプロテクトレジスタ６９に書き込む。
ここで、ＣＰＵ１１がＣＰＵバス１６を通じて許可メモリ１３から許可プログラム２３の続きを読み込むことにより、アクセス判定回路４１は、ハイレベルの第１Ｄフリップフロップ信号（WriteValid）を出力している。
よって、プロテクトレジスタ回路４３は、データバス３２のデータ信号をラッチする。
プロテクトレジスタ６９にはデータ信号が書き込まれ、プロテクトレジスタ回路４３は、ハイレベル（無効）のプロテクト信号を出力する。
【００５８】
次に、ＣＰＵ１１は、ＣＰＵバス１６を通じて許可メモリ１３から許可プログラム２３の続きを読み込み、秘密プログラム２４へのジャンプ処理を実行する（ステップＳＴ４）。
ＣＰＵ１１は、許可プログラム２３をリターンイベント待ち状態とする。
その後、ＣＰＵ１１は、ジャンプコードの記述に基づいて秘密プログラム２４の格納先アドレスを特定し、特定した格納先アドレスから秘密プログラム２４を読み込む。
ＣＰＵ１１は、ＣＰＵバス１６を通じて機密メモリ１４にリードアクセス（オペコードフェッチ）する。
【００５９】
秘密プログラム２４を読み込んだＣＰＵ１１は、秘密プログラム２４の処理を実行する（ステップＳＴ５）。
たとえばＣＰＵ１１は、機密メモリ１４に格納された暗号キーを読み込んで、所定のデータを暗号化することができる。
そして、秘密プログラム２４による所定の処理が完了し、ＣＰＵ１１は、秘密プログラム２４の最後に記述されたジャンプコマンド（リターンコマンド）を機密メモリ１４から読み込んで実行する（ステップＳＴ６）。
ＣＰＵ１１は、秘密プログラム２４の実行を終了する。
その後、ＣＰＵ１１は、許可プログラム２３の実行を再開する。
【００６０】
許可プログラム２３の実行を再開したＣＰＵ１１は、ＣＰＵバス１６を通じて許可プログラム２３の次のコマンド（ジャンプコマンドの次のコマンド）を読み込み、実行する。
ＣＰＵ１１は、まず、プロテクト設定処理を実行する（ステップＳＴ７）。
具体的には、ＣＰＵ１１は、ＣＰＵバス１６を通じてプロテクトレジスタ６９にライトアクセスし、プロテクト信号を有効（ローレベル）とするためのデータをプロテクトレジスタ６９に書き込む。
【００６１】
次に、ＣＰＵ１１は、割り込みハンドラをイネーブルにする（ステップＳＴ８）。
これにより、ＣＰＵ１１は、割り込みイベントが発生すると、他のプログラムによる割り込み処理を実行することが可能になる。
【００６２】
次に、ＣＰＵ１１は、許可プログラム２３の最後に記述されたジャンプコマンド（リターンコマンド）を許可メモリ１３から読み込んで実行する（ステップＳＴ９）。
ＣＰＵ１１は、許可プログラム２３の実行を終了する。その後、ＣＰＵ１１は、一般プログラム２１の実行を再開する。
【００６３】
一般プログラム２１の実行を再開したＣＰＵ１１は、ＣＰＵバス１６を通じて一般プログラム２１の次のコマンド（ジャンプコマンドの次のコマンド）を読み込み、実行する（ステップＳＴ１０）。
これにより、ＣＰＵ１１は、通常処理に復帰する。
【００６４】
このように、ＣＰＵ１１は、一般プログラム２１から許可プログラム２３を呼び出す。
また、ＣＰＵ１１は、許可プログラム２３から機密プログラムを呼び出す。
そして、機密プログラムの実行中には、ＣＰＵ１１は、許可プログラム２３の実行により割り込みハンドラをディセーブルとし、機密メモリ１４へのアクセスのプロテクトを解除した状態とする。
【００６５】
［秘密プログラム実行までのタイミングチャート］
図６は、秘密プログラム２４を読み込むまでのＣＰＵバス１６などの状態の一例を示すタイミングチャートである。
図６（Ａ）は、アドレスバス３１のアドレス信号である。図６（Ｂ）は、オペコードの出力信号線Opecodeのオペコードの出力信号である。図６（Ｃ）は、ライトイネーブル信号線ＷＥのライトイネーブル信号である。図６（Ｄ）は、アクセス判定回路４１が出力する第１Ｄフリップフロップ信号（WriteValid）である。図６（Ｅ）は、データバス３２のデータ信号である。図６（Ｆ）は、プロテクトレジスタ回路４３のプロテクト信号である。図６（Ｇ）は、機密メモリ１４によるデータバス３２への入出力信号である。
【００６６】
そして、図６のタイミングＴ１において、ＣＰＵ１１は、許可プログラム２３を読み込むために、アドレスバス３１に許可メモリ１３の第１アドレスを出力し、オペコードの出力信号をハイレベルとし、かつ、ライトイネーブル信号をローレベルとする。
このタイミングＴ１において、たとえば許可プログラム２３の命令（コマンド）がフェッチされる。
【００６７】
許可プログラム２３の命令（コマンド）が許可メモリ１３からフェッチされることにより、アクセス判定回路４１は、タイミングＴ２において、ハイレベルの第１Ｄフリップフロップ信号（WriteValid）を出力する。
なお、第１Ｄフリップフロップ信号（WriteValid）は、プロテクト信号がハイレベルとなるタイミングＴ４において自動的にローレベルにクリアされる。
【００６８】
また、タイミングＴ３において、ＣＰＵ１１は、プロテクトレジスタ６９へプロテクト信号をハイレベルとするためのデータを書込むために、アドレスバス３１にプロテクトレジスタ６９の第２アドレスを出力し、データバス３２へ書込みデータを出力する。
これにより、プロテクトレジスタ回路４３は、プロテクトレジスタ６９を更新し、タイミングＴ４から、ハイレベルのプロテクト信号を出力する。
また、秘密プログラム２４を格納する機密メモリ１４へのアクセスが許可される。
【００６９】
タイミングＴ４以降に、ＣＰＵ１１は、ＣＰＵバス１６を通じて機密メモリ１４にリードアクセス（オペコードフェッチ）する。
タイミングＴ４からハイレベルのプロテクト信号が出力されているので、機密メモリ１４は、データバス３２へ秘密プログラム２４等を出力する。
【００７０】
このようにプロテクト信号がハイレベルである場合、機密メモリ１４は、データバス３２へ有効な秘密プログラム２４、秘密データ２５を入出力する。
また、例えばタイミングＴ１からＴ４に示すように、プロテクト信号がローレベルである場合、機密メモリ１４は、データバス３２へ無意味なデータを入出力する。
【００７１】
なお、ＣＰＵ１１が機密メモリ１４にアクセス可能となるタイミングＴ４の以前に、図５に示すように割り込みハンドラがディセーブルとされている。
よって、タイミングＴ５以降において割り込みハンドラ等によって通常メモリ１２に格納されている一般プログラム２１へのジャンプが発生したとしても、ＣＰＵ１１は、その割り込みは割り込みハンドラがイネーブルとなるまで無視される。
また、ＣＰＵ１１が機密メモリ１４にアクセス可能な期間においては、ＣＰＵ１１は、一般プログラム２１を実行しない。
これにより一般プログラム２１を実行するＣＰＵ１１は、機密メモリ１４にアクセスすることができなくなる。
【００７２】
以上のように、本実施形態では、一般プログラム２１を実行するＣＰＵ１１が機密メモリ１４にアクセスすることができない。
つまり、本実施形態では、情報処理装置１のＣＰＵ１１などの汎用性を損なうことなく、秘密プログラム２４についての必要な機密性を確保できる。
【００７３】
また、本実施形態では、秘密プログラム２４を使用したい場合は、許可プログラム２３を中継する必要がある。
仮に一般プログラム２１が秘密プログラム２４を直接コールしたとしても、有効な秘密プログラム２４にアクセスすることはできず、無意味なデータを読み出してしまう。
【００７４】
また、本実施形態では、許可プログラム２３へのアクセス監視は、許可プログラム２３を格納する許可メモリ１３のアドレスから判断する。
そして、ＣＰＵバス１６を監視し、直前のオペコードフェッチアクセスが許可プログラム２３のアドレスであった場合のみ、メモリ制御装置のプロテクトレジスタ６９への書き込みを可能にする。
そのため、許可プログラム２３以外の一般プログラム２１にプロテクトレジスタ６９の設定に関するプログラムが記述されていても、秘密プログラム２４を格納する機密メモリ１４のプロテクトを解除することはできない。
【００７５】
これに加えて、本実施形態では、許可プログラム２３の中身は公開された状態に実装されるが、アドレスマップ、及び許可プログラム２３の書き換えはハードウェア的に不可とされている。
その結果、本実施形態では、許可プログラム２３を介した一般プログラム２１から秘密プログラム２４への呼び出しのセキュリティレベルを落とさずに、機密性の高い秘密プログラム２４を一般プログラム２１と同一システムに混在させることができる。
【００７６】
また、本実施形態では、許可プログラム２３から最初に読み出す秘密プログラム２４以外は、プロテクトレジスタ６９が保護するアドレス内に自由に配置することができる。また、許可メモリ１３以外は、ＲＡＭによる実装が可能であるため、自由度の高い設計ができる。
【００７７】
また、本実施形態では、秘密プログラム２４の開示を許可されていない開発者は、秘密プログラム２４を使用することは可能だが、中身を読み出すことができない。
このため、秘密プログラム２４を読み出す一般プログラム２１の開発を、秘密プログラム２４の開示を許可されている開発者以外でも行うことができる。
また、本実施形態では、秘密プログラム２４の開示を許可されていない開発者に対して、秘密プログラム２４のインターフェースを提供することが可能になる。
【００７８】
これに対して、一般的な情報処理装置１では、機密性の低い一般プログラム２１と機密性の高い秘密プログラム２４とを混在させる場合、一般的なＣＰＵ１１では機密性の高／低を区別することができない。
このため、機密性の低い一般プログラム２１から機密性の高い秘密プログラム２４へ簡単にアクセスできるという問題が生じる。
このような事態を防止するためには、一般的な情報処理装置１では、秘密プログラム２４ではない一般プログラム２１までも秘密プログラム２４として扱う必要がある。あるいは、機密性の高／低に応じて複数のＣＰＵ１１を用意する必要がある。
これらの場合には、いずれも、システムの汎用性が低下し、システムを構築するためのコストが高くなってしまう。
【００７９】
以上の実施形態は、本発明の好適な実施形態の例であるが、本発明は、これに限定されるものではなく、発明の要旨を逸脱しない範囲において種々の変形または変更が可能である。
【００８０】
たとえば上記実施形態では、ＣＰＵ１１、通常メモリ１２、許可メモリ１３、機密メモリ１４、およびメモリ制御回路１５は、同じＣＰＵバス１６に接続されている。
この他にも例えば、ＣＰＵ１１は第１バスに接続され、通常メモリ１２などの記憶部は第２バスに接続され、情報処理装置１は第１バスと第２バスとが接続されるブリッジ回路を有してもよい。
この場合、メモリ制御回路１５は、第１バスを監視しても、第２バスを監視してもよい。
【００８１】
上記実施形態では、メモリ制御回路１５は、許可プログラム２３の格納先アドレスへの読出しアクセスに基づいて有効信号（WriteValid）を生成している。
この他にも例えば、メモリ制御回路１５は、許可プログラム２３の格納先アドレスへの書込みアクセスに基づいて有効信号（WriteValid）を生成してもよい。
さらに他にも例えば、メモリ制御回路１５は、許可プログラム２３が、秘密プログラム２４を呼び出す前にアクセスする所定のアドレスへのアクセスに基づいて有効信号を生成してもよい。
ただし、許可プログラム２３の格納先アドレスへのアクセスに基づいて有効信号を生成する方が、他のプログラムのなりすましを予防するために最も優れている。
また、メモリ制御回路１５は、複数のアドレスに対するアクセスに基づいて有効信号を生成してもよい。
また、メモリ制御回路１５は、複数のアドレスに対する所定の手順でのアクセスに基づいて有効信号を生成してもよい。
【００８２】
上記実施形態では、許可プログラム２３は、ＣＰＵ１１により書き換えできないＲＯＭに記憶されている。
この他にも例えば、許可プログラム２３は、ＣＰＵ１１により書き換え可能なメモリに記憶されていてもよい。
ただし、この場合には、許可プログラム２３を暗号化するなどしてメモリに記憶させるのが望ましい。
【００８３】
上記実施形態では、ＣＰＵ１１、通常メモリ１２、許可メモリ１３、機密メモリ１４、およびメモリ制御回路１５は、ＣＰＵバス１６とともに１チップの集積回路装置（集積回路装置）に組み込まれている。
この他にも例えば、ＣＰＵ１１、通常メモリ１２、許可メモリ１３、機密メモリ１４、およびメモリ制御回路１５は、別々の集積回路装置２に組み込まれてもよい。
【符号の説明】
【００８４】
１…情報処理装置、２…集積回路装置、３…発振部、１１…ＣＰＵ（実行部）、１２…通常メモリ（記憶部）、１３…許可メモリ（記憶部、読出専用メモリ）、１４…機密メモリ（記憶部、制限メモリ）、１５…メモリ制御回路（バスアクセス制御部）、１６…ＣＰＵバス（バス）、２１…一般プログラム（他のプログラム）、２３…許可プログラム（呼出しプログラム）、２４…秘密プログラム（処理プログラム）、２６…第１アドレス範囲、２７…第２アドレス範囲、２８…アクセス制限領域、３１…アドレスバス、３２…データバス、３３…制御バス（プロテクション情報用の信号線）、４１…アクセス判定回路、４３…プロテクトレジスタ回路
【図１】
2011150457.tif 000003
【図２】
2011150457.tif 000004
【図３】
2011150457.tif 000005
【図４】
2011150457.tif 000006
【図５】
2011150457.tif 000007
【図６】
2011150457.tif 000008