(57)【特許請求の範囲】
【請求項１】
プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置であって、
通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止手段と、
通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出手段と、
前記呼出命令が検出されると、通常モードから保護モードに切り替える切替手段と、
保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断手段と、
保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御手段と
を備えることを特徴とするデータ処理装置。
【請求項２】
前記アクセス禁止手段は、
メモリと、
プロセス毎の前記メモリ内でアクセスを許可する領域を示す管理情報を、保護モードにおいてのみ書き換え可能に保持する保持部と、
通常モードで動作するプロセスを、前記管理情報に従って前記メモリにアクセスさせるアクセス制限部と、
を含み、
前記制御手段は、前記判断手段により使用権限があると判定された場合に、第２プロセスの管理情報に、前記メモリ上で前記対象データが保持されている領域へのアクセスを許可する情報を追加する
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記保持部が保持する前記管理情報は、前記メモリ中のアドレスと、アドレスに対応する鍵とを対応付けた情報を一以上含み、
前記アクセス制限部は、
前記メモリのアドレスを含む前記メモリへのアクセス要求を取得する取得部と、
前記アクセス要求に含まれるアドレスが、前記管理情報に含まれるか否かを判定するアドレス判定部と、
含まれると判定された場合に、前記アクセス要求が書込要求であれば、書き込むデータを前記アドレスに対応する鍵で暗号化して前記アドレスで示される領域に書込み、前記アクセス要求が読出要求であった場合には、前記メモリの前記アドレスから読み出したデータを、前記アドレスに対応する鍵を用いて復号して出力するアクセス実行部と
を含むことを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記データは、プロセスのコードである
ことを特徴とする請求項２に記載のデータ処理装置。
【請求項５】
各プロセスには、個別のプロセス識別子が割り当てられ、
前記保持部が保持する前記管理情報は、前記メモリ中のアドレスと、前記アドレスへのアクセスが許可されているプロセスを示すプロセス識別子とを対応付けた情報を一以上含み、
前記アクセス制限部は、
前記メモリのアドレスを含む前記メモリへのアクセス要求を取得する取得部と、
アクセス要求に含まれるアドレスと、アクセス要求したプロセスに割り当てられたプロセス識別子とを対応付けた情報が、前記管理情報に含まれるか否かを判定するアドレス判定部と、
含まれると判定された場合に、アクセス要求したプロセスを、前記メモリの前記アドレスにアクセスさせるアクセス実行部と
を含むことを特徴とする請求項２に記載のデータ処理装置。
【請求項６】
前記データには、一以上のデータ処理方法それぞれについて実行を許可するか否かを示すセキュリティ要件情報が割り当てられ、
プロセスそれぞれには、一以上のデータ処理方法それぞれを実行可能か否かを示す機能情報が割り当てられ、
前記呼出命令は、一以上のデータ処理方法のいずれかを示す処理特定情報を含み、
前記判断手段は、前記セキュリティ要件情報が前記処理特定情報により示されるデータ処理方法の実行を許可しておりかつ第２プロセスの機能情報が、前記処理特定情報により示されるデータ処理方法の実行が可能であることを示す場合に、前記使用権限があると決定する
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項７】
前記切替手段は、前記通常モードから前記保護モードへと切り替える場合に、前記通常モードで動作しているプロセスのコンテキストを前記メモリに退避し、
前記保護モードから前記通常モードへと切り替える場合に、次に前記通常モードで動作するプロセスのコンテキストを前記メモリから復帰させる
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項８】
前記第１プロセス及び前記第２プロセスは、それぞれが動作している間に割り込み又は例外が発生した場合に、その割り込み又は例外を処理する割込処理又は例外処理を含み、
前記データ処理装置は、さらに、
割り込み又は例外が発生した場合に、実行されるべき処理を示すベクタテーブルを、保護モードにおいてのみ書き換え可能に保持するベクタテーブル保持手段と、
動作するプロセスが、前記第１プロセスから前記第２プロセスへと切り替わる前に、保護モードにおいて前記ベクタテーブルを、前記通常モードにおいて割り込み又は例外が発生した際に第２プロセスの割込処理又は例外処理を実行するよう書き換えるベクタテーブル書換手段と
を含むことを特徴とする請求項７記載のデータ処理装置。
【請求項９】
前記判断手段は、さらに、
プロセスから前記メモリにおける領域の使用要求を受け付ける使用要求受付部と、
使用要求されたアドレスが、既に使用されているか否かを判定する使用判定部と、
使用されていなかった場合に、使用要求したプロセスの、前記アドレスに格納を要望するデータについての使用権限の有無を判定する権限判定部と、
前記権限判定部により使用権限があると判定された場合に、使用要求したプロセスの管理情報に、前記アドレスで示される領域へのアクセスを許可する情報を登録する管理情報登録部と
を含むことを特徴とする請求項１に記載のデータ処理装置。
【請求項１０】
前記管理情報登録部は、前記権限判定部により使用権限があると判定された場合に、鍵を生成し、前記アクセスを許可する情報として、前記アドレスと生成した鍵とを対応付けた情報の組を使用要求した前記プロセスの管理情報に追加する
ことを特徴とする請求項９に記載のデータ処理装置。
【請求項１１】
前記データ処理装置は、さらに、
前記プロセスに係るデバッグを行うデバッグ手段を含み、
前記切替手段は、さらに、前記通常モードに切り替える場合に、前記デバッグ手段を有効化し、前記保護モードに切り替える場合に、前記デバッグ手段を無効化する
ことを特徴とする請求項１記載のデータ処理装置。
【請求項１２】
プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置に用いられるデータ処理方法であって、
通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止ステップと、
通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出ステップと、
前記呼出命令が検出されると、通常モードから保護モードに切り替える切替ステップと、
保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断ステップと、
保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御ステップと
を含むことを特徴とするデータ処理方法。
【請求項１３】
プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置に用いられるコンピュータプログラムであって、
通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止ステップと、
通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出ステップと、
前記呼出命令が検出されると、通常モードから保護モードに切り替える切替ステップと、
保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断ステップと、
保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御ステップと
をコンピュータに実行させることを特徴とするコンピュータプログラム。
【請求項１４】
プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作する集積回路であって、
通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止手段と、
通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出手段と、
前記呼出命令が検出されると、通常モードから保護モードに切り替える切替手段と、
保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断手段と、
保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御手段と
を備えることを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数プロセスの連携動作により保護データを処理するデータ処理装置に関し、特に、保護データに対する不正処理を防ぐ技術に関する。
【背景技術】
【０００２】
近年、音楽や映画などのコンテンツを再生するコンテンツ再生装置など多くのデジタル家電に、著作権保護のためのデータの暗号化、復号の機能（特許文献１〜３，非特許文献１〜２参照）や、販売後における新機能の追加及びバグ修正などのためのプログラム更新機能などが実装されてきている。
【特許文献１】特開平２−１５５０３４号公報
【特許文献２】特開平４−１０２９２０号公報
【特許文献３】特開２００１−３１８７８７号公報
【非特許文献１】Ｌｉｅ，  Ｄ．，  Ｔｈｅｋｋａｔｈ，  Ｃ．Ａ．，  Ｍｉｔｃｈｅｌｌ，  Ｍ．，  Ｌｉｎｃｏｌｎ，  Ｐ．，  Ｂｏｎｅｈ，  Ｄ．，  Ｍｉｔｃｈｅｌｌ，  Ｊ．Ｃ．  ａｎｄ  Ｈｏｒｏｗｉｔｚ，  Ｍ．:  Ａｒｃｈｉｔｅｃｈｔｕｒａｌ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｃｏｐｙ  ａｎｄ  Ｔａｍｐｅｒ  Ｒｅｓｉｓｔａｎｔ  Ｓｏｆｔｗａｒｅ，  Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ９ｔｈ  Ｉｎｔｅ'ｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ａｒｃｈｉｔｅｃｔｕｒａｌ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅｓ  ａｎｄ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍｓ  （ＡＳＰＬＯＳ−ＩＸ），  ｐａｇｅｓ  １６９−１７７，  Ｎｏｖｅｍｂｅｒ  ２０００．
【非特許文献２】Ｅ．  Ｓｕｈ，  Ｄ．  Ｃｌａｒｋｅ，  Ｂ．  Ｇａｓｓｅｎｄ，  Ｍ．  ｖａｎ  Ｄｉｊｋ，  ａｎｄ  Ｓ．  Ｄｅｖａｄａｓ．  Ｔｈｅ  ＡＥＧＩＳ  ｐｒｏｃｅｓｓｏｒ  ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  ｔａｍｐｅｒｅｖｉｄｅｎｔ  ａｎｄ  ｔａｍｐｅｒ  ｒｅｓｉｓｔａｎｔ  ｐｒｏｃｅｓｓｉｎｇ．  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ＬＣＳ−ＴＭ４６１，  Ｍａｓｓａｃｈｕｓｅｔｔｓ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｔｅｃｈｎｏｌｏｇｙ，  Ｆｅｂｒｕａｒｙ  ２００３．
【発明の開示】
【発明が解決しようとする課題】
【０００３】
前述の暗号化、復号などデータに対する処理はプログラム自身の管理下で行っており、前記データが他のプログラムにより漏洩させられることはない。
しかしながら、暗号化データを復号する復号プログラムと、復号後のデータを再生するプレーヤプログラムとの間でデータを連携処理するような場合には、当該データを複数のプログラムから使用できるようにする必要があるので、前述の更新機能を悪用されて不正なプログラムが導入されると、当該不正なプログラムによって前記データが漏洩されてしまうという問題が生じうる。
【０００４】
上記問題に鑑み、本発明は、各プログラムが取り扱うデータを連携処理するような場合にも、当該データの漏洩を防ぐことができるデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明は、プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置であって、通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止手段と、通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出手段と、前記呼出命令が検出されると、通常モードから保護モードに切り替える切替手段と、保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断手段と、保護モードにおいて、前記第２プロセスが使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御手段とを備える。
【発明の効果】
【０００６】
本発明のデータ処理装置は、上述の構成を備えることにより、第１プロセスが、第２プロセス以外のプロセスに知られないよう第２プロセスにデータを受け渡すことができ、通常モードで動作する他のプロセスによってデータが漏洩されるのを防ぐことができる。
また、上述の構成を備えることにより、第２のプログラムが更新されて機能が変更され、処理対象データの使用権限を失った場合においても前記判断手段がそれを検知し、前記制御手段で情報漏洩を防止できる。
【０００７】
また、前記アクセス禁止手段は、メモリと、プロセス毎の前記メモリ内でアクセスを許可する領域を示す管理情報を、保護モードにおいてのみ書き換え可能に保持する保持部と、通常モードで動作するプロセスを、前記管理情報に従って前記メモリにアクセスさせるアクセス制限部とを含み、前記制御手段は、前記判断手段により使用権限があると判定された場合に、第２プロセスの管理情報に、前記メモリ上で前記対象データが保持されている領域へのアクセスを許可する情報を追加することとしてもよい。
【０００８】
この構成によれば、前記管理情報の書き換えを保護モードである場合に制限するので、通常モードで動作する他のプロセスにより、前記管理情報をデータの漏洩が可能なよう不正に書き換えられるのを防ぐことができる。
また、前記保持部が保持する前記管理情報は、前記メモリ中のアドレスと、アドレスに対応する鍵とを対応づけた情報を一以上含み、前記アクセス制限部は、前記メモリのアドレスを含む前記メモリへのアクセス要求を取得する取得部と、前記アクセス要求に含まれるアドレスが、前記管理情報に含まれるか否かを判定するアドレス判定部と、含まれると判定された場合に、前記アクセス要求が書込要求であれば、書き込むデータを前記アドレスに対応する鍵で暗号化して前記アドレスで示される領域に書込み、前記アクセス要求が読出要求であった場合には、前記メモリの前記アドレスから読み出したデータを、前記アドレスに対応する鍵を用いて復号して出力するアクセス実行部とを含むこととしてもよい。
【０００９】
この構成によれば、プロセス毎に定められているアドレス毎の鍵で前記メモリにデータを暗号して記録し、暗号して記録されたデータを復号して読み出すので、他のプロセスによって、前記データが適切に使用されるのを防ぐことができる。
ここで、メモリへのアクセス要求には、前記メモリからデータを読み出す読出要求や、前記メモリへのデータの書込要求の他、使用を要望する前記メモリの領域の使用許可要求や、他のプロセスが使用許可されているメモリの領域を、自プロセスでも使用するための共有設定要求などが含まれるものとする。
【００１０】
また、前記データは、プロセスのコードであることとしてもよい。
この構成によれば、プロセスのコードが、漏洩するのを防ぐことができる。
また、各プロセスには、個別のプロセス識別子が割り当てられ、前記保持部が保持する前記管理情報は、前記メモリ中のアドレスと、前記アドレスへのアクセスが許可されているプロセス識別子とを対応付けた情報を一以上含み、前記アクセス制限部は、前記メモリのアドレスを含む前記メモリへのアクセス要求を取得する取得部と、アクセス要求に含まれるアドレスと、アクセス要求したプロセスに割り当てられたプロセス識別子とを対応付けた情報が、前記管理情報に含まれるか否かを判定するアドレス判定部と、含まれると判定された場合に、アクセス要求したプロセスを、前記メモリの前記アドレスにアクセスさせるアクセス実行部とを含むこととしてもよい。
【００１１】
この構成によれば、メモリへのアクセス要求があっても、前記メモリの前記アドレスへのアクセスを、前記管理情報に含まれるアクセス要求されたアドレスに対応するプロセス識別子で示されるプロセスのみに制限するので、他のプロセスにより前記データが漏洩されるのを防ぐことができる。
また、前記データには、一以上のデータ処理方法それぞれについて実行を許可するか否かを示すセキュリティ要件情報が割り当てられ、プロセスそれぞれには、一以上のデータ処理方法それぞれを実行可能か否かを示す機能情報が割り当てられ、前記呼出命令は、一以上のデータ処理方法のいずれかを示す処理特定情報を含み、前記判断手段は、前記セキュリティ要件情報が前記処理特定情報により示されるデータ処理方法の実行を許可しておりかつ第２プロセスの機能情報が、前記処理特定情報により示されるデータ処理方法の実行が可能であることを示す場合に、前記使用権限があると決定することとしてもよい。
【００１２】
この構成によれば、前記データ連携が要求されているデータを、当該データに割り当てられたセキュリティ要件情報により許可され、かつ、第２プロセスの機能情報が実行可能であることを示しているデータ処理方法による処理に限定し、データの漏洩の可能性を低減することができる。
また、前記切替手段は、前記通常モードから前記保護モードへと切り替える場合に、前記通常モードで動作しているプロセスのコンテキストを前記メモリに退避し、前記保護モードから前記通常モードへと切り替える場合に、次に前記通常モードで動作するプロセスのコンテキストを前記メモリから復帰させることとしてもよい。
【００１３】
この構成によれば、コンテキストの退避、復帰の処理実行を、保護モードである場合に限定できるので、通常モードで動作するプロセスによって、コンテキストに対し不正な操作がされ、データが漏洩されるのを防ぐことができる。
また、前記第１プロセス及び前記第２プロセスは、それぞれが動作している間に割り込み又は例外が発生した場合に、その割り込み又は例外を処理する割込処理又は例外処理を含み、前記データ処理装置は、さらに、割り込み又は例外が発生した場合に、実行されるべき処理を示すベクタテーブルを、保護モードにおいてのみ書き換え可能に保持するベクタテーブル保持手段と、動作するプロセスが、前記第１プロセスから前記第２プロセスへと切り替わる前に、保護モードにおいて前記ベクタテーブルを、前記通常モードにおいて割り込み又は例外が発生した際に第２プロセスの割込処理又は例外処理を実行するよう書き換えるベクタテーブル書換手段とを含むこととしてもよい。
【００１４】
この構成によれば、ベクタテーブルの変更を、保護モードである場合に限定できるので、通常モードで動作するプロセスによって、ベクタテーブルに対し不正な書換操作がされることにより、不正なプロセスが実行され、データが漏洩されるのを防ぐことができる。
また、前記判断手段は、さらに、プロセスから前記メモリにおける領域の使用要求を受け付ける使用要求受付部と、使用要求されたアドレスが、既に使用されているか否かを判定する使用判定部と、使用されていなかった場合に、使用要求したプロセスの、前記アドレスに格納を要望するデータについての使用権限の有無を判定する権限判定部と、前記権限判定部により使用権限があると判定された場合に、使用要求したプロセスの管理情報に、前記アドレスで示される領域へのアクセスを許可する情報を登録する管理情報登録部とを含むこととしてもよい。
【００１５】
この構成によれば、プロセスからの要求に従い、使用を要求したプロセスのみが、要求したメモリの領域を使用できるように、管理情報を生成し、他のプロセスによって、前記領域に記憶されるデータが漏洩されるのを防ぐことができる。
また、前記管理情報登録部は、前記権限判定部により使用権限があると判定された場合に、鍵を生成し、前記アクセスを許可する情報として、前記アドレスと生成した鍵とを対応付けた情報を使用要求した前記プロセスの管理情報に追加することとしてもよい。
【００１６】
この構成によれば、要求されるごと毎に生成する鍵を、管理情報に追加することができる。
アドレス毎に異なる鍵を用いることなどとすれば、同じ鍵を用いる頻度が少なくなり鍵が解読される確率を低下させることができる。
また、前記データ処理装置は、さらに、前記プロセスに係るデバッグを行うデバッグ手段を含み、前記切替手段は、さらに、前記通常モードに切り替える場合に、前記デバッグ手段を有効化し、前記保護モードに切り替える場合に、前記デバッグ手段を無効化することとしてもよい。
【００１７】
この構成によれば、保護モードにおけるデバッグを禁止し、保護モードにおける処理内容を、解析されるのを防ぐことができる。
本発明のデータ処理方法は、プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置に用いられるデータ処理方法であって、通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止ステップと、通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出ステップと、前記呼出命令が検出されると、通常モードから保護モードに切り替える切替ステップと、保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断ステップと、保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御ステップとを含む。
【００１８】
本発明のコンピュータプログラムは、プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作するデータ処理装置に用いられるコンピュータプログラムであって、通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止ステップと、通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出ステップと、前記呼出命令が検出されると、通常モードから保護モードに切り替える切替ステップと、保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断ステップと、保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御ステップとを含む。
【００１９】
この構成によれば、第１プロセスが、第２プロセス以外のプロセスに知られないよう第２プロセスにデータを受け渡すことができ、通常モードで動作する他のプロセスによってデータが漏洩されるのを防ぐことができる。
また、上述の構成を備えることにより、第２のプログラムが更新されて機能が変更され、処理対象データの使用権限を失った場合においても前記判断ステップによりそれを検知し、前記制御ステップによって情報漏洩を防止できる。
【００２０】
本発明の集積回路は、プログラムに従って動作するプロセッサを備え、前記プログラムの実行単位であるプロセスが動作する通常モードと前記プロセスの動作が抑制される保護モードを切り替えて動作する集積回路であって、通常モードにおいて、第１プロセスの処理対象データに対して、前記第１プロセスによるアクセスを許可し、他のプロセスによるアクセスを禁止するアクセス禁止手段と、通常モードにおいて、前記第１プロセスから、第２プロセスの呼び出しを指示する呼出命令を検出する検出手段と、前記呼出命令が検出されると、通常モードから保護モードに切り替える切替手段と、保護モードにおいて、前記第２プロセスが、前記処理対象データについての使用権限を有しているか否かを判断する判断手段と、保護モードにおいて、前記第２プロセスが前記使用権限を有していると判断される場合に、前記アクセス禁止手段に対して、前記第２プロセスが前記通常モードにおいて、前記処理対象データに対しアクセスすることが許可されるように制御する制御手段とを備える。
【００２１】
この構成によれば、第１プロセスが、第２プロセス以外のプロセスに知られないよう第２プロセスにデータを受け渡すことができ、通常モードで動作する他のプロセスによってデータが漏洩されるのを防ぐことができる。
また、上述の構成を備えることにより、第２のプログラムが更新されて機能が変更され、処理対象データの使用権限を失った場合においても前記判断手段がそれを検知し、前記制御手段で情報漏洩を防止できる。
【発明を実施するための最良の形態】
【００２２】
＜第１実施形態＞
＜１．概要＞
図１は、プログラム保護装置０１０１の構成の主要な部分を模式的に示した図である。
プログラム保護装置０１０１は、図１に示すように、ＣＰＵ０２０１と、不正動作防止回路０１０５と、蓄積メディア０２１６とを含んで構成される。
【００２３】
ＣＰＵ０２０１は、プログラムを実行するプロセッサである。
不正動作防止回路０１０５は、ＣＰＵ０２０１により実行されるプログラムの不正実行及びプログラム間の不正アクセスを防ぐための機構を備えた回路である。
蓄積メディア０２１６は、ＣＰＵ０２０１により実行されるプログラムが扱う、コンテンツや個人情報などの機密情報である保護対象データ０１０８を、暗号化した状態で記憶している。
【００２４】
ＣＰＵ０２０１上で実行されるプログラムには、一例として図１に示すようにオペレーティングシステム（ＯＳ）０１０４、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７、不正動作防止制御部０１０６等がある。
不正動作防止制御部０１０６は、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７その他の各プログラムとＯＳ０１０４のそれぞれから、メモリ領域の使用要求を取得して使用可否を判定し、使用させる場合には不正動作防止回路０１０５を制御して、要求元のプログラムが要求する態様でのみ、当該メモリ領域の使用をさせる。
【００２５】
オペレーティングシステム（ＯＳ）０１０４は、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７その他のプログラム（図示せず）を動作させる基本ソフトウェアである。
プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７は、任意の処理を実行するアプリケーションプログラムである。本実施形態では、一例として、プログラムＡ０１０２が、コンテンツである保護対象データ０１０８の復号を行うプログラムであり、プログラムＢ０１０３は、コンテンツの再生を行うプレーヤープログラムであり、プログラムＡ０１０２とプログラムＢ０１０３は、コンテンツを処理する際に連携動作するものとする。
【００２６】
プログラムＡ０１０２は、保護対象データ０１０８である暗号化されたコンテンツを復号し、復号済みの当該コンテンツをプログラムＢ０１０３に再生させる。プログラムＡ０１０２は、プログラムＢ０１０３を呼び出すための呼出命令を含んでおり、ＣＰＵ０２０１は前記呼出命令を検出すると、不正動作防止回路０１０５に後述する保護モードを示す状態切替指示を行う。不正動作防止回路０１０５は、前記状態切替指示に基づき、保護モードへと切り替えて、処理を実行する。
前記呼出命令は、コンテンツの出力、コピー、移動、特殊再生、デジタル出力などのデータ処理方法を示す情報を含むものとする。
また、不正動作防止制御部０１０６が前記保護モードにおいて不正動作防止回路０１０５を制御することにより、例えば、プログラムＣ０１０７が、前記コンテンツを不正に使用したり、コンテンツを破壊するようなことを妨げている。
【００２７】
以下、プログラム保護装置０１０１の動作について、詳細に説明する。
＜２．構成＞
＜２．１．ハードウェア構成＞
プログラム保護装置０１０１のハードウェア構成について、図面を用いて説明する。
プログラム保護装置０１０１は、図２に示すように、相互にバス０２１０を介して接続されるＣＰＵ０２０１、不揮発メモリ０２０３、バス暗号回路０２０４、鍵レジスタ０２０５、アクセス制限回路０２０７、状態切替回路０２０８、デバッガＩ／Ｆ０２０９、蓄積メディア０２１６、不揮発メモリ０２２１と、バス暗号回路０２０４に接続するＲＡＭ０２０２と、アクセス制限回路０２０７に接続する保護メモリ０２０６を含んで構成される。
【００２８】
プログラム保護装置０１０１は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＲＯＭには、コンピュータプログラムが記憶されており、前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、プログラム保護装置０１０１は、その機能を達成する。
ＣＰＵ０２０１は、ＲＡＭ０２０２、保護メモリ０２０６上に記憶されるプログラムを実行するマイクロプロセッサである。
【００２９】
状態切替回路０２０８は、ＣＰＵ０２０１から、前記通常モードと前記保護モードとのいずれかを選択的に示す状態切替指示を受けつけて、デバッガＩＦ０２０９、鍵レジスタ０２０５、アクセス制限回路０２０７を、当該状態切替指示に対応するモードに切り替える。
保護モードは、セキュリティの高い特定のプログラムのみが動作するモードであり、通常モードは、その他のプログラムが動作するモードである。
【００３０】
状態切替回路０２０８は、受信した前記状態切替指示が保護モードを示す場合には、デバッガＩ／Ｆ０２０９に対し保護モードを示す状態信号Ａ０２１１を出力してデバッガＩ／Ｆ２０９を無効化し、鍵レジスタ０２０５に対し保護モードを示す状態信号Ｂ０２１７を出力し、アクセス制限回路０２０７に対し保護モードを示す状態信号Ｃ０２１８を出力する。
【００３１】
また、状態切替回路０２０８は、受信した前記状態切替指示が通常モードを示す場合には、デバッガＩ／Ｆ０２０９に対し通常モードを示す状態信号Ａ０２１１を出力し、鍵レジスタ０２０５に対し通常モードを示す状態信号Ｂ０２１７を出力し、アクセス制限回路０２０７に対し通常モードを示す状態信号Ｃ０２１８を出力する。また、状態切替回路０２０８は必要に応じてベクターテーブル０２１９の変更を行う。状態を切り替える動作、ベクタテーブル０２１９の変更については後述する。
【００３２】
なお、状態切替の詳細は発明者らによる出願、特開２００５−１１３３６号公報などに開示されている。
アクセス制限回路０２０７は、バス０２１０と保護メモリ０２０６の接続を制御する回路であり、状態切替回路０２０８から受け取る状態信号Ｃが通常モードを示す場合には、バス０２１０と保護メモリ０２０６との接続を遮断し、保護モードを示す場合には、バス０２１０と保護メモリ０２０６を接続する。よって、通常モードで動作するプログラムは、保護メモリ０２０６内のデータにアクセスすることはできない。
【００３３】
デバッガＩ／Ｆ０２０９は、プログラム保護装置０１０１外のプログラムデバッガを接続可能なインターフェイスであり、ＣＰＵ０２０１と接続されている。
デバッガＩ／Ｆ０２０９は、状態切替回路０２０８から通知される状態信号Ａが、通常モードを示す場合に、前記プログラムデバッガとＣＰＵ０２０１とを接続し、状態信号Ａが保護モードを示す場合に、プログラムデバッガとＣＰＵ０２０１との接続を切断する。
【００３４】
また、状態信号Ａが通常モードを示す場合であっても、デバッガＩ／Ｆ０２０９の設定を変更することにより、プログラムデバッガとＣＰＵ０２０１との接続を強制的に切断状態にすることも可能である。
鍵レジスタ０２０５は、アクセス要求されたアドレスに対応する暗号鍵をバス暗号回路０２０４に出力する回路である。
【００３５】
鍵レジスタ０２０５は、図３に示すように、アドレスと命令用バス暗号鍵との対応を示す命令用鍵情報テーブル０３０５と、アドレスとデータ用バス暗号鍵との対応を示すデータ用鍵情報テーブル０３０６とを保持しており、バス暗号回路０２０４からアドレス信号０３０１を取得して、アドレス信号０３０１が示すアドレスに対応づけられている命令用バス暗号鍵信号０３０２と、データ用バス暗号鍵信号０３０３とをバス暗号回路０２０４に出力する。
【００３６】
ここで、命令用鍵情報テーブル０３０５は、命令用鍵情報Ｔ０３１１、Ｔ０３１２、Ｔ０３１３・・・を含み、各命令用鍵情報は、アドレスと命令用バス暗号鍵との対応を示しており、データ用鍵情報テーブル０３０６は、データ用鍵情報Ｔ０３２１、Ｔ０３２２、Ｔ０３２３・・・を含み、各データ用鍵情報は、アドレスとデータ用バス暗号鍵との対応を示している。
【００３７】
鍵レジスタ０２０５の設定の変更は、状態切替回路０２０８が出力する状態信号Ｂが保護モードを示すときのみ変更可能であり、不正動作防止制御部０１０６によって、バス０２１０を介して通知される設定信号０３０４を用いて変更される。
ＲＡＭ０２０２は、バス暗号回路０２０４と接続されているメモリ装置である。
バス暗号回路０２０４は、鍵レジスタ０２０５から通知される鍵を用いて、当該鍵に対応付けられたメモリアドレスに入出力するコードやデータの暗号化や復号を行う。
【００３８】
これにより、バス０２１０とＲＡＭ０２０２との間でやり取りされるコードやデータは、バス暗号回路０２０４で暗号化及び復号される。
また、バス暗号回路０２０４は、ＣＰＵ０２０１が命令フェッチのためにＲＡＭ０２０２にアクセスしているのか、データアクセスのためにアクセスしているのかを検知し、同一物理アドレスへの命令フェッチの場合には命令用バス暗号鍵を用い、データアクセスの場合にはデータ用バス暗号鍵を用いて、コードやデータの暗号化、復号を行う。
【００３９】
不揮発メモリ０２０３は、ファイルＡ０２１２、ファイルＢ０２１３、ファイルＣ０２１４、ファイルＯＳ０２１５、ＢＩＯＳ０４０５、ファイルＳ０２２０を記憶している。
ここで、前記ファイルのデータ構造について、ファイルＡ０２１２のデータ構造を例に、図５を用いて説明する。
ファイルＡ０２１２は、コード暗号鍵０７１０、プログラムＡ０１０２のコード０７１１、署名Ａ０１１５、機能フラグＡ０１１１を含む。
【００４０】
コード暗号鍵０７１０は、プログラムＡのコード０７１１を暗号化するのに用いた鍵（ＫＣ＿Ａ）である。
コード暗号鍵０７１０は、公開鍵暗号アルゴリズムで暗号化されている。
コード暗号鍵０７１０を暗号化する際に用いられた公開鍵に対応する秘密鍵は、不正動作防止制御部０１０６が保持する。
【００４１】
プログラムＡのコード０７１１には、プログラムＡ０１０２が行う処理が記述されており、ＣＰＵ０２０１によって実行される。
プログラムＡのコード０７１１は、コード暗号鍵０７１０で暗号化されている。
署名Ａ０１１５は、プログラムＡのコード０７１１を暗号化したベンダの署名が格納されている。
【００４２】
署名Ａ０１１５を用いてプログラムＡのコード０７１１の正当性、完全性を検証できる。
機能フラグＡ０１１１は、プログラムＡ０１０２が、機能０７１４、０７１５、０７１６、０７１７、０７１８・・・を備えているか否か示すフラグである。
本実施形態では、機能フラグは、プログラムがファイル出力、コピー、移動、特殊再生、デジタル出力の各機能を備えているかを示すものとする。
【００４３】
機能フラグは、例えば、５ビットのデータであり、各ビットに、ファイル出力機能、コピー機能、移動機能、特殊再生機能、デジタル出力機能が割り当てられる。即ち、ファイル出力と、移動の機能を備える場合の、機能フラグは、２進数表現で１０１００となり、デジタル出力機能のみ備える場合には、２進数表現で００００１となる。プログラムＡ０１０２の機能フラグＡ０１１１は、２進数表現で０００００であり、すべての機能を備えていないことを示している。
【００４４】
ファイルＢ０２１３のデータ構造は図５に示し、ファイルＣ０２１４、ファイルＯＳ０２１５のデータ構造は図６に示している。ファイルＢ０２１３、ファイルＣ０２１４、ファイルＯＳ０２１５は、ファイルＡ０２１２と同様の構成を備えるので、説明は省略する。
ただし、ファイルＣ０２１４の機能フラグＣ０１１３は、ファイル出力機能０７３４を備えることを示し、ファイルＯＳ０２１５の機能フラグＯＳ０１１４はファイル出力機能０７４４、コピー機能０７４５、移動機能０７４６を備えることを示している。
【００４５】
不揮発メモリ０２２１は、例外および割り込みハンドラのアドレスを示すベクタテーブル０２１９を記憶しているメモリ装置である。
プログラム保護装置０１０１において、ＣＰＵ０２０１は、割り込みや例外の発生を検知した場合に、ベクタテーブル０２１９を参照して、次に実行するハンドラの位置を取得する。
【００４６】
ベクタテーブル０２１９に格納されている各種例外および割り込みに対応するハンドラのアドレスは、状態切替回路０２０８のみが変更可能であり、保護モードにおいて動作するソフトウェアのみが、状態切替回路０２０８に対しベクタテーブル０２１９の設定内容の変更を依頼することができる。
蓄積メディア０２１６は、コンテンツや個人情報などの機密情報である保護対象データ０１０８を、暗号化した状態で記憶する。
【００４７】
保護対象データ０１０８は、図４に示すように、データ０７０１、データ暗号鍵０７０２、セキュリティ要件リスト０１０９、署名データ０７０８を含む。
データ０７０１は、保護対象となるデータであり、データ暗号鍵０７０２を用いて暗号化されている。但し、データ０７０１は必ずしも暗号化されている必要はない。
データ暗号鍵０７０２は、公開鍵暗号アルゴリズムで暗号化されており、暗号化する際に用いられた公開鍵に対応する秘密鍵は、不正動作防止制御部０１０６が保持しているので、不正動作防止制御部０１０６のみが復号可能である。
【００４８】
セキュリティ要件リスト０１０９は、セキュリティ要件０７０３、０７０４、０７０５、０７０６、０７０７・・・を含む。
セキュリティ要件リストは、例えば、各ビットがセキュリティ要件を示す５ビットのデータであり、各ビットは、ファイル出力機能、コピー機能、移動機能、特殊再生機能、デジタル出力機能に対応し、ビット値が１の場合にはその機能が可能であることを示し、ビット値が０である場合にはその機能が不可能であることを示す。
【００４９】
ファイル出力と、移動の機能が可能な場合のセキュリティ要件リストは２進数表現で１０１００となり、デジタル出力機能のみ可能な場合は、２進数表現で００００１となる。
ここで、データ０７０１に対するセキュリティ要件０７０３、０７０４、０７０５、０７０６、０７０７は、すべて不可能となっている。
署名データ０７０８は、セキュリティ要件リスト０１０９に対する署名データであり、当該署名データを用いることにより、セキュリティ要件リスト０１０９の正当性を検証することができる。
＜２．２．ソフトウェア構成＞
次に、プログラム保護装置０１０１のソフトウェア構成について、図面を用いて説明する。
【００５０】
プログラム保護装置０１０１のＣＰＵ０２０１上で動作するプログラムは、図７に示すように、ＯＳ用割り込み管理部０４０４を含むオペレーティングシステム（ＯＳ）０１０４、プログラムＡ用割り込み管理部０４０２を含むプログラムＡ０１０２、プログラムＢ用割り込み管理部０４０３を含むプログラムＢ０１０３、プログラムＣ用割り込み管理部０４０６を含むプログラムＣ０１０７、セキュリティカーネル０４０１、不正動作防止制御部０１０６、ＢＩＯＳ０４０５を含んで構成される。
【００５１】
ＢＩＯＳ０４０５は、不揮発メモリ０２０３に記憶されており、プログラム保護装置０１０１における電源投入時などに、通常モードでＣＰＵ０２０１により実行される。
ＢＩＯＳ０４０５は、ハードウェアの基本的な設定を行った後、ＯＳ０１０４をＲＡＭ０２０２にロードする。本実施形態では、ＢＩＯＳ０４０５は、ＯＳ０１０４のみをロードすることとしているが、更にプログラムＡ０１０２、Ｂ０１０３、Ｃ０１０７をロードすることとしてもよい。
【００５２】
ＯＳ０１０４は、一般的なオペレーティングシステムの機能を持つＯＳであり、起動した後に、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７を順に起動する。
また、ＯＳ０１０４に含まれるＯＳ用割り込み管理部０４０４は、ＯＳ０１０４が動作している時に発生する割り込みや例外を処理するハンドラを含む。
【００５３】
プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７は、ＯＳ０１０４上で動作する汎用的な処理を行うプログラムであり、保護対象データ０１０８を取り扱う。
プログラムＡ０１０２に含まれる割り込み管理部０４０２は、プログラムＡ０１０２が動作している時に発生する割り込みや例外を処理するハンドラを含む。
【００５４】
同様に、プログラムＢ０１０３に含まれる割り込み管理部０４０３、プログラムＣ０１０７に含まれる割り込み管理部０４０３は、プログラムＢ０１０３、Ｃ０１０７それぞれが動作している時に発生する割り込みや例外を処理するハンドラを含む。
プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７、ＯＳ０１０４は、通常モードで動作するソフトウェアであり、それぞれＲＡＭ０２０２にロードされ、ＣＰＵ０２０１により実行される。  セキュリティカーネル０４０１は、保護モードにおけるシステム制御を行うソフトウェアであり、保護メモリ０２０６にロードされて、ＣＰＵ０２０１により実行される。
【００５５】
セキュリティカーネル０４０１は、保護モードにおいて発生した割り込み及び例外をハンドリングし、ハンドリングした当該割り込み及び例外に対する処理を実行する。
保護モードにおけるベクタテーブル０２１９の内容は、通常モードから保護モードへの切替直前に、状態切替部０２０６によって、割り込み及び例外発生時にＣＰＵ０２０１がセキュリティカーネル０４０１内のハンドラを実行するよう書き換えられる。
【００５６】
セキュリティカーネル０４０１は、不正動作防止制御部０１０６に制御主体を移す。
不正動作防止制御部０１０６による不正動作防止制御処理が終了すると、セキュリティカーネル０４０１に制御主体が戻り、セキュリティカーネル０４０１は、状態切替回路０２０８に対し、通常モードへの移行のための状態切替依頼を出力する。
不正動作防止制御部０１０６は、不正動作防止回路０１０５を制御してＯＳ０１０４等を含むプログラムの不正動作を防止する。
【００５７】
不正動作防止制御部０１０６は、保護モードで動作するプログラムであり、保護メモリ０２０６にロードされて、ＣＰＵ０２０１により実行される。よって、保護メモリ０２０６にアクセス権限のない、通常モードで動作するプログラムから、セキュリティカーネル０４０１、および不正動作防止制御部０１０６へのアクセスはできない。
不正動作防止制御部０１０６は、前記不正動作防止回路０１０５を制御するためのデータである管理テーブル０１１０を管理している。
（管理テーブル）
ここで、管理テーブル０１１０について、図８、図９を用いて説明する。
【００５８】
管理テーブル０１１０は、プログラムのデータ及びコード領域の保護のための管理データ群であり、図８に示すデータ領域管理情報テーブル群０５０１、コード領域管理情報テーブル群０５０２と、図９に示すセキュリティ要件管理情報テーブルＴ０３１０、プログラム管理情報テーブルＴ０４１０およびカレントプログラム管理テーブル０５０３を含む。
【００５９】
データ領域管理情報テーブル群０５０１、コード領域管理情報テーブル群０５０２、セキュリティ要件管理情報テーブルＴ０３１０、プログラム管理情報テーブルＴ０４１０、カレントプログラム管理テーブル０５０３は、保護メモリ０２０６に記憶される。
プログラム保護装置０１０１に電源が投入された時には、各管理テーブル０１１０の内容は空である。
【００６０】
不正動作防止制御部０１０６は、後述するプログラム登録処理において、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７についてＯＳ０１０４が行う登録要求に従い、コード領域管理情報テーブル群とプログラム管理情報テーブルの内容を登録又は更新する。
不正動作防止制御部０１０６は、後述するデータ領域保護設定処理において、他のプログラムから成される保護設定要求に従ってデータ領域管理情報テーブル群の内容を登録又は更新し、後述するデータ領域共有設定において、他のプログラムから成される共有設定要求に従ってセキュリティ要件管理情報テーブルの内容を登録又は更新する。
（プログラム管理情報テーブルＴ０４１０）
プログラム管理情報テーブルＴ０４１０は、プログラム管理情報Ｔ０４１１、Ｔ０４１２、Ｔ０４１３、Ｔ０４１４・・・を含む。
【００６１】
各プログラム管理情報は、プログラム管理情報識別子、コードアドレス、プログラム識別子、共有プログラム識別子、機能フラグを含む。
プログラム管理情報識別子は、プログラム管理情報を識別するための識別子であり、不正動作防止制御部０１０６が、当該プログラム管理情報を登録する時に、既に使用されている値と重複しない値を割り当てる。
【００６２】
コードアドレスは、各プログラム管理情報が管理対象とするアドレス領域である。
プログラム識別子は、前記アドレス領域にロードされるコードを含むプログラムの識別子であり、予め、各プログラムに対し割り振られている。
共有プログラム識別子は、前記アドレス領域のコードを共有するプログラムの識別子である。
【００６３】
機能フラグは、前記アドレス領域のコードに対し、ファイル出力、コピー、移動、特殊再生、デジタル出力の各機能が許可されているか否かを示すフラグである。
機能フラグは、例えば、５ビットのデータであり、各ビットに、ファイル出力機能、コピー機能、移動機能、特殊再生機能、デジタル出力機能が割り当てられる。
即ち、ファイル出力と、移動とが許可されている場合の、機能フラグは、２進数表現で１０１００となり、デジタル出力機能のみが許可されている場合には、２進数表現で００００１となる。
（コード領域管理情報テーブル群）
コード領域管理情報テーブル群０５０２は、プログラム用コード領域管理情報テーブルＴ０２１０、Ｔ０２２０、Ｔ０２３０・・・を含み、プログラム用コード領域管理情報テーブルは、プログラム毎に生成されたものである。
【００６４】
プログラム識別子がＰ１であるプログラムについて生成されるプログラムＰ１用コード領域管理情報テーブルＴ０２１０は、コード領域管理情報Ｔ０２１１、Ｔ０２１２、Ｔ０２１３・・・を含み、データ領域管理情報は、コード領域識別子、コードアドレス、コード暗号鍵を含む。
コード領域識別子は、コード領域管理情報を識別するための識別子であり、不正動作防止制御部０１０６が、当該コード領域管理情報を生成する時に、既に使用されている値と重複しない値を割り当てる。
【００６５】
コードアドレスは、コード領域管理情報が管理対象とするアドレス領域である。
コード暗号鍵は、前記アドレス領域で示されるメモリ領域に保持されたコードを暗号化、復号するための鍵であり、コードアクセスの際に用いられる。
（データ領域管理情報テーブル群）
データ領域管理情報テーブル群０５０１は、データ領域管理情報テーブルＴ０１１０、Ｔ０１２０、Ｔ０１３０・・・を含む。
【００６６】
データ領域管理情報テーブルは、プログラム毎に生成されたものであり、データ領域識別子、データアドレス、データ暗号鍵を含む。
データ領域識別子は、各データ領域管理情報を識別するための識別子である。
データアドレスは、各データ領域管理情報が管理対象とするアドレス領域である。
データ暗号鍵は、前記アドレス領域で示されるメモリ領域に保持されたデータを暗号化、復号するための鍵であり、データアクセスの際に用いられる。
（セキュリティ要件管理情報テーブル）
セキュリティ要件管理情報テーブルＴ０３１０は、データ領域管理情報テーブル群０５０１に含まれる各データ領域管理情報に対するセキュリティ要件を管理するためのテーブルであり、複数のセキュリティ要件管理情報Ｔ０３１１、Ｔ０３１２、Ｔ０３１３、Ｔ０３１４・・・を含む。
【００６７】
セキュリティ要件管理情報は、セキュリティ要件管理情報識別子、データアドレス、生成プログラム識別子、共有プログラム識別子、セキュリティ要件を含む。
セキュリティ要件管理情報識別子は、セキュリティ要件管理情報を識別するための識別子である。
データアドレスは、セキュリティ領域管理情報が管理対象とするアドレス領域である。
【００６８】
生成プログラム識別子は、物理メモリ上の前記アドレス領域について、最初にデータ設定を行ったプログラムの識別子である。
共有プログラム識別子は、物理メモリ上の前記アドレス領域について、当該メモリ領域を共有するプログラムを識別するための識別子である。
セキュリティ要件は、前記データアドレスにより示される、物理メモリ上の前記アドレス領域に保持されるデータの保護方法を定める。
【００６９】
前記セキュリティ要件は、本実施形態では、機能フラグと同じ構造を持つものとし、例えば、５ビットのデータであり、各ビットに、ファイル出力機能、コピー機能、移動機能、特殊再生機能、デジタル出力機能の実行可否が割り当てられる。
即ち、ファイル出力と、移動とが実行許可されている場合の、機能フラグは、２進数表現で１０１００となり、デジタル出力のみ実行許可されている場合には、２進数表現で００００１となる。
（カレントプログラム管理テーブル０５０３）
カレントプログラム管理テーブル０５０３には、現在動作中のプログラムの識別子が記憶される。
＜３．ソフトウェア動作＞
次に、プログラム保護装置０１０１上で動作するソフトウェアによる処理の流れについて説明する。
【００７０】
まず、ソフトウェア全体の処理フローについて、図２１を用いて説明する。
プログラム保護装置０１０１に対し電源が投入されると、ＢＩＯＳ０４０５が起動する（ステップＳ２０１１）。
ＢＩＯＳ０４０５は、プログラム保護装置０１０１のハードウェアについての基本的な設定を行った後、ＯＳ０１０４をＲＡＭ０２０２にロードする（ステップＳ２０１２）。
【００７１】
ＯＳ０１０４は、不正動作防止制御部０１０６に対し、自プログラムであるＯＳ０１０４についての後述する登録処理を行い（ステップＳ２０２０）、プログラムＡ０１０２についての後述する登録処理を行い（ステップＳ２０２１）、プログラムＢ０１０３についての登録処理を行い（ステップＳ２０２２）、プログラムＣ０１０７についての登録処理を行う（ステップＳ２０２３）。
【００７２】
登録処理が成されると、不正動作防止制御部０１０６は、ＯＳ０１０４、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７からのメモリ保護などの各要求について、処理することが可能となる。
次に、ＯＳ０１０４は、登録処理が成功したプログラムＡ０１０２、Ｂ０１０３、Ｃ０１０７を順に起動する（ステップＳ２０３１）。
【００７３】
ここで、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７が、ＯＳ０１０４上で動作を開始する。
次に、ＯＳ０１０４は、不正動作防止制御部０１０６に対し、自プログラム内で使用するデータ領域の後述する保護設定を行う（ステップＳ２０４０）。
同様に、プログラムＡ０１０２は、不正動作防止制御部０１０６に対し、自プログラム内で使用するデータ領域の後述する保護設定を行い（ステップＳ２０４１）、プログラムＢ０１０３は、不正動作防止制御部０１０６に対し、自プログラムが使用するデータ領域の保護設定を行い（ステップＳ２０４２）、プログラムＣ０１０７は、不正動作防止制御部０１０６に対し、自プログラムが使用するデータ領域の保護設定を行う（ステップＳ２０４３）。
【００７４】
次に、プログラムＡ０１０２は、必要ある場合に、不正動作防止制御部０１０６に対し、他プログラムと使用するデータ領域を共有するための後述するデータ領域共有設定を行う（ステップＳ２０５１）。
同様に、プログラムＢ０１０３は、必要ある場合に、不正動作防止制御部０１０６に対し、他プログラムと使用するデータ領域を共有するためのデータ領域共有設定を行い（ステップＳ２０５２）、プログラムＣ０１０７は、必要ある場合に、不正動作防止制御部０１０６に対し、他プログラムと使用するデータ領域を共有するためのデータ領域共有設定を行う（ステップＳ２０５３）。
【００７５】
これにより、複数のプログラムが、保護されているメモリ領域を共有できるようになる。
以後、ＯＳ０１０４は、必要に応じ、動作させるカレントのプログラムを切り替え（ステップＳ２０６１）、カレントのプログラムは、自プログラムが行うべき処理を実行する（ステップＳ２０６２）。
【００７６】
以下、ステップＳ２０２１におけるプログラム登録処理、ステップＳ２０４１における保護設定処理、ステップ２０５１におけるデータ領域の共有設定処理、ステップＳ２０６１におけるプログラム切替処理について、説明する。
上述のステップＳ２０２０、ステップＳＳ２０２１、ステップＳ２０２２、ステップＳ２０２３、ステップＳ２０４０、ステップＳ２０４１、ステップＳ２０４２、ステップＳ２０４３、ステップＳ２０５１、ステップＳ２０５２、ステップＳ２０５３は、全て、図１０〜１２で示す基本の処理フローに従い実行される。
【００７７】
以下、ステップＳ２０２０〜Ｓ２０２３については、ステップＳ２０２１を例として説明し、ステップＳ２０４０〜Ｓ２０４３については、ステップＳ２０４１を例として説明し、ステップＳ２０５１〜Ｓ２０５３については、ステップＳ２０５１を例として説明する。
また、ステップＳ２０２１〜Ｓ２０５３の各処理の実行は、一度に限らず、必要に応じて随時実行するものとする。
＜３．１．プログラム登録処理＞
図２１におけるステップＳ２０２１は、ＯＳ０１０４が、プログラムＡについての情報を、不正動作防止制御部０１０６に登録する処理である。
【００７８】
図１１、図１２に示したプログラムＸは、当該フローチャートに従い動作するプログラムを示しており、本実施形態では、プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７、ＯＳ０１０４のいずれかである。ここでは、ＯＳ０１０４が、プログラムＸに該当し、ＯＳ用割込み管理部０４０４が、プログラムＸ用割込み管理部に該当し、ＯＳ０１０４が、プログラムＡについての登録を要求するものとする。
【００７９】
プログラムＸは、まず、プログラムＸについて予め指定されている、ＲＡＭ０２０２上のデータ領域に、プログラムＡを登録するための登録要求を書き込む。
前記登録要求には、図５に示した、登録されるプログラムであるプログラムＡのコードを暗号化する際に用いられた鍵（コード暗号化）、プログラムの署名データ、機能フラグが含まれる。さらに、前記登録要求には、プログラムのロードアドレス情報が含まれる。
【００８０】
鍵は公開鍵暗号アルゴリズムによって暗号化されており、鍵の暗号化に用いる公開鍵に対応する秘密鍵は不正動作防止制御部０１０６に格納されている。
秘密鍵は不正動作防止制御部０１０６の外部に漏洩しないよう対策が施される。
プログラムの署名データは、プログラムの正当性、完全性を検証するために用いられる。
【００８１】
プログラムのロードアドレス情報は、登録されるプログラムがロードされているアドレス領域である。
プログラムＸは、プログラムＡの登録要求を要因とするソフトウェア割り込みを発生させ（ステップＳ０８０１）、プログラムＸ用割り込み管理部に制御を移す。
次に、プログラムＸ用割り込み管理部は、プログラムＸが発生させたソフトウェア割込みの要因を調査し、前記登録要求を所定の前記データ領域から読み出し、割り込みの種別を確認する（ステップＳ０８０２）。ここで、プログラムＸ用割込み管理部は、前記割り込みの種別が、プログラムＡについての登録要求を要因とするソフトウェア割り込みであったことを確認する。
【００８２】
次に、プログラムＸ用割込み管理部は、前記登録要求を共有メモリに格納する（ステップＳ０８０３）。
ここで、前記共有メモリは、通常モードと保護モードとの通信に用いる、ＲＡＭ０２０２内の所定のメモリ領域である。
ここで、プログラム保護装置０１０１の動作状態を、通常モードから保護モードへ切り替えるための状態切替動作Ａを実行する。
【００８３】
状態切替動作Ａについては、図１１（ａ）を用いて説明する。
プログラムＸは、ここでは、ＯＳ０１０４である。
プログラムＸ用割り込み管理部は、状態切替回路０２０８に対し、保護モードへの状態切替依頼を行う（ステップＳ１７００）。
状態切替回路０２０８は、ＣＰＵ内の状態を予め定められているＲＡＭ０２０２内のプログラムＸが管理するデータ領域に格納する（ステップＳ１７０１）。
【００８４】
状態切替回路０２０８は、状態切替依頼元であるプログラムＸのコンテキストを、ＲＡＭ０２０２においてプログラムＸが使用するよう予め定められている領域に退避する。
状態切替回路０２０８は、保護モードを示す状態信号Ａ０２１１を出力し、デバッガＩ／Ｆ０２０９を無効化する（ステップＳ１７０２）。
次に、状態切替回路０２０８は、ＣＰＵ内部状態のクリアを行う（ステップＳ１７０３）。
【００８５】
次に、状態切替回路０２０８は、保護モードを示す状態信号Ｂ０２１７を出力し、鍵レジスタ０２０５の設定を変更する（ステップＳ１７０４）。
ここで、鍵レジスタ０２０５は、バス０２１０を介して通知される設定信号０３０４を用いて命令用鍵情報テーブル０３０５とデータ用鍵情報テーブル０３０６を変更できるようにする。
【００８６】
次に、状態切替回路０２０８は、保護モードを示す状態信号Ｃ０２１８を出力し、アクセス制限回路０２０７の設定を変更し（ステップＳ１７０５）、アクセス制限回路０２０７は、バス０２１０から保護メモリ０２０６へのアクセスを開放状態にする。
開放状態とは、バス０２１０から保護メモリ０２０６へのアクセスが許可された状態を示す。
【００８７】
次に、状態切替回路０２０８は、割り込みおよび例外発生時にＣＰＵ０２０１がセキュリティカーネル０４０１内のハンドラを実行するようベクタテーブル０２１９の設定を変更する（ステップＳ１７０６）。
状態切替回路０２０８は、前回保護モードから通常モードに切り替える直前に保護メモリ０２０６に格納していたコンテキストをＣＰＵに復帰させる（ステップＳ１７０７）。
【００８８】
次に、状態切替回路０２０８は、セキュリティカーネル０４０１に制御を移す（ステップＳ１７０８）。プログラム保護装置０１０１は保護モードとなり、状態切替動作Ａは終了する。
次に、セキュリティカーネル０４０１は、不正動作防止制御部０１０６に制御を移す（ステップＳ０８１５）。
【００８９】
次に、不正動作防止制御部０１０６は、共有メモリから前記要求を取得する（ステップＳ０８０６）。ここでは、前記要求は、前記登録要求である。
次に、不正動作防止制御部０１０６は、不正動作防止制御処理（ステップＳ０８０７）を実行する。
ここで、前記要求が前記登録要求である場合の不正動作防止制御処理（ステップＳ０８０７）の詳細について、図１０を用いて説明する。
【００９０】
不正動作防止制御部０１０６は、前記要求がいずれの要求であるかを判定する（ステップＳ６００）。
前記要求が登録要求であるので（ステップＳ６００：登録）、ステップＳ０６１２へと分岐する。
次に、不正動作防止制御部０１０６は、セキュリティ要件管理情報テーブルＴ０３１０とプログラム管理情報テーブルＴ０４１０を用い、プログラムのロードアドレス情報によって示されているコードアドレス領域が、未使用領域であるかどうかを判定する（ステップＳ０６１２）。
【００９１】
未使用領域である場合（ステップＳ０６１２のＹＥＳ）、不正動作防止制御部０１０６は、プログラムの署名と機能フラグの署名の検証を行う（ステップＳ０６１３）。
署名検証結果がＯＫであった場合（ステップＳ０６１３のＹＥＳ）、不正動作防止制御部０１０６は、新規のコード領域管理情報テーブルとデータ領域管理情報テーブルを生成する（ステップＳ０６１４）。
【００９２】
次に、管理テーブルの更新として、プログラム管理情報テーブルＴ０４１０の更新とコード領域管理情報テーブルの更新を行う（ステップＳ０６１５）。
プログラム管理情報テーブルＴ０４１０の更新において、不正動作防止制御部０１０６は、固有のプログラム識別子を生成した後、プログラム管理情報の追加を行う。
コード領域管理情報テーブルの更新において、不正動作防止制御部０１０６は、コード暗号鍵の復号化とコード領域管理情報の追加を行う。
【００９３】
次に、不正動作防止制御部０１０６は、処理結果を生成する。
処理結果は、管理テーブルの更新（ステップＳ０６１５）時に生成したプログラム識別子を含む。コードアドレス領域が未使用領域でなかった場合（ステップＳ０６１２のＮＯ）と署名検証に失敗した場合（ステップＳ０６１３のＮＯ）には、処理に失敗した原因を処理結果に含める。ここで生成した処理結果を、共有メモリに格納する（ステップＳ０８０８）。
【００９４】
次に、不正動作防止制御部０１０６は、セキュリティカーネル０４０１に制御を移す（ステップＳ０８１６）。
ここで、セキュリティカーネル０４０１、状態切替部０２０８、プログラムＸ用割り込み管理部が、状態切替動作Ｂを実行することにより、保護モードから通常モードへ切り替える（ステップＳ０８０９）。
【００９５】
ここで、状態切替動作Ｂについて、図１１（ｂ）を用いて説明する。
ここで、プログラムＸは、前述のように、ＯＳ０１０４である。
セキュリティカーネル０４０１は、状態切替回路０２０８に対し、通常モードを示す状態信号Ｃ０２１８を出力することにより、状態切替を依頼する（ステップＳ１７１０）。
状態切替回路０２０８は、ＣＰＵのコンテキストを保護メモリ０２０６に格納する（ステップＳ０８１７）。
【００９６】
アクセス制限回路０２０７は、状態信号Ｃ０２１８を受け付けて、バス０２１０から保護メモリ０２０６へのアクセスを遮断状態にする。
遮断状態とは、バス０２１０から保護メモリ０２０６へアクセスできない状態を示す。
状態切替回路０２０８は、状態信号Ｂ０２１７を制御し、鍵レジスタ０２０５の設定を変更する（ステップＳ１７１３）。
【００９７】
ここで、鍵レジスタ０２０５は、バス０２１０を介して通知される設定信号０３０４を用いて命令用鍵情報テーブル０３０５とデータ用鍵情報テーブル０３０６を変更できないようにする。
状態切替回路０２０８は、ＣＰＵ内部状態のクリアを行う（ステップＳ１７１４）。
状態切替回路０２０８は、ベクタテーブル０２１９の設定変更を行う（ステップＳ１７１５）。  ここで、状態切替回路０２０８は、割り込みおよび例外発生時にＣＰＵ０２０１がプログラムＸ用割り込み管理部に含まれるハンドラを実行するよう設定する。
【００９８】
ベクタテーブル０２１９は各々の割り込み管理部に含まれるハンドラを実行するよう設定される。どの割り込み管理部に含まれるハンドラを実行するよう設定するかは、不正動作防止制御部０１０６が状態切替回路０２０８に指示することができる。
次に状態切替回路０２０８は、状態信号Ａ０２１１を制御してデバッガＩ／Ｆ０２０９を有効にする（ステップＳ１７１６）。
【００９９】
なお、不正動作防止制御部０１０６が前もって状態切替回路０２０８にデバッガＩ／Ｆ０２０９を有効にしないよう指示している場合、状態切替回路０２０８は、ステップＳ１７１６をスキップし、デバッガＩ／Ｆ０２０９を有効にしない。
ここで、状態切替回路０２０８は、プログラムＸのコンテキストを復帰させ（ステップＳ１７１７）、次に状態切替回路０２０８は、プログラムＸ用割り込み管理部に制御を移し（ステップＳ１７１８）、プログラム保護装置０１０１は通常モードとなり、状態切替動作Ｂは終了する。
【０１００】
次に、プログラムＸ用割り込み管理部は、共有メモリから前記処理結果を取得する（ステップＳ０８１１）。
次に、プログラムＸ用割り込み管理部は、処理結果をプログラムＸが管理するデータ領域に格納（ステップＳ０８１２）した後、ソフトウェア割り込みからリターンする（ステップＳ０８１３）。
＜３．２．データ領域の保護設定処理＞
図２１におけるステップＳ２０４１は、プログラムＡが不正動作防止制御部０１０６に対し、使用するメモリ領域の保護設定を要求する処理である。
【０１０１】
以下、保護設定の処理について、前述のプログラム登録処理と異なる部分を中心に、説明する。
ここでは、プログラムＸは、プログラムＡ０１０２であるものとする。
まず、プログラムＸは、自プログラムについて予め指定されているＲＡＭ０２０２上のデータ領域である共有メモリに、データアドレスとセキュリティ要件とを含むデータ領域保護設定要求を書き込む。
【０１０２】
前記データアドレスは、プログラムＸがデータ領域として使用を要望するメモリ領域の先頭アドレスと末尾アドレスとを含む。
前記セキュリティ要件は、プログラムＸが前記データアドレスに格納するデータに対し設定を要望する保護属性であり、セキュリティ要件リスト０１０９と同様のデータ構造を持つ。例えば、前記セキュリティ要件は、５ビットのデータであり、各ビットに、ファイル出力機能、コピー機能、移動機能、特殊再生機能、デジタル出力機能の実行可否が割り当てられる。なお、前記セキュリティ要件は、セキュリティ要件リスト０１０９である場合もある。
【０１０３】
不正動作防止制御部０１０６は、ステップＳ０８０２において、前記データ領域保護設定要求を取得する。
ステップＳ０８０３〜Ｓ０８０６までは、プログラム登録処理と同様である。
ステップＳ０８０７の詳細である図１０のステップＳ０６００における判定で、不正動作防止制御部０１０６は、前記処理要求が、データ領域の保護設定要求であると判定し（ステップＳ０６００の保護）、ステップＳ０６０２に移行する。
【０１０４】
不正動作防止制御部０１０６は、前記データ領域保護設定要求に含まれるデータアドレスが、セキュリティ要件管理情報テーブルＴ０３１０中のセキュリティ要件管理情報として登録されているか否かを判定し（ステップＳ０６０２）、登録されていなければ、未使用領域であると決定し、登録されていれば、未使用領域でないと決定する。
未使用領域であった場合（ステップＳ０６０２のＹＥＳ）、セキュリティ要件管理情報テーブルＴ０３１０およびデータ領域管理情報テーブル群０５０１を更新する（ステップＳ０６０３）。
【０１０５】
セキュリティ要件管理情報テーブルＴ０３１０の更新において、不正動作防止制御部０１０６は、要求元のプログラムに対応するデータ領域管理情報テーブルに、前記先頭アドレス及び前記末尾アドレスをデータアドレスとした新規セキュリティ要件管理情報を追加する。
また、不正動作防止制御部０１０６は、前記新規セキュリティ要件管理情報におけるデータ暗号鍵には、乱数値を生成して登録する。
【０１０６】
次に、不正動作防止制御部０１０６は、データ領域管理情報テーブルの更新された情報を不正動作防止回路０１０５に設定する（ステップＳ０６０４）。
具体的には、不正動作防止制御部０１０６は、更新された情報の不正動作防止回路０１０５への設定として、前記新規セキュリティ要件管理情報のデータアドレスと、データ暗号鍵との組を、不正動作防止回路０１０５のデータ用鍵情報テーブル０３０６に追加する。
【０１０７】
また、ステップＳ０６０２において、受け取ったデータアドレス領域が既に他のプログラムによって確保されている場合には（ステップＳ０６０２のＮＯ）、不正動作防止制御部０１０６は、管理テーブルの更新（ステップＳ０６０３）、およびデータ領域設定の変更（ステップＳ０６０４）の処理を行わず、ステップＳ０８０８に移行する。
不正動作防止制御部０１０６は、処理結果を共有メモリに格納する（ステップＳ０８０８）。
【０１０８】
処理結果には、正常終了、データアドレス領域が他のプログラムにより確保されている等のエラー要因などを含める。
以降の処理は、前述のプログラム登録処理と同様である。
＜３．３．データ領域共有設定処理＞
図２１におけるステップＳ２０５１は、プログラムＡが不正動作防止制御部０１０６に対し、使用するメモリ領域の共有設定を要求する処理である。
【０１０９】
以下、データ領域共有設定処理について、前述のプログラム登録処理と異なる部分を中心に説明する。なお、プログラムＸは、プログラムＡ０１０２である。
まず、プログラムＸは、自プログラムについて予め指定されているＲＡＭ０２０２上のデータ領域である共有メモリに、データアドレスとセキュリティ要件とを含むデータ領域共有設定要求及び署名Ａ０１１５を書き込む。
【０１１０】
前記データアドレスは、プログラムＸがデータ領域として共有を要望するメモリ領域の先頭アドレスと末尾アドレスとを含み、前記セキュリティ要件は、ファイルＡ０２１２の機能フラグＡ０１１１の情報を含む。
署名Ａ０１１５は、不正動作防止制御部０１０６により、機能フラグＡ０１１１の正当性の確認に用いられる。  不正動作防止制御部０１０６は、ステップＳ０８０２において、前記データ領域共有設定要求を取得する。
【０１１１】
ステップＳ０８０３〜Ｓ０８０６までは、プログラム登録処理と同様である。
ステップＳ０８０７の詳細である図１０のステップＳ０６００における判定で、処理要求が、データ領域の共有設定要求であると判定する（ステップＳ０６００の共有）。
不正動作防止制御部０１０６は、ステップＳ０８０２において、ＲＡＭ０２０２上の共有メモリから前記データ領域共有設定要求を取得し、ステップＳ０６３２において、前記データ領域共有設定要求に含まれるデータアドレスが、セキュリティ要件管理情報テーブルＴ０３１０中のセキュリティ要件管理情報として登録されているか否かを判定し、登録されている場合（ステップＳ０６３２のＹＥＳ）、不正動作防止制御部０１０６は前記データ領域共有設定要求の妥当性判断を行う（ステップＳ０６３３）。
【０１１２】
妥当性判断は、具体的には、共有を要求しているプログラムに対応するプログラム管理情報に含まれる機能フラグが、妥当性判断の対象となっているセキュリティ要件管理情報のセキュリティ要件を満たすかどうかによって判断される。
また、前記セキュリティ要件の正当性についても、前記共有メモリに書き込まれた署名を用いて確認する。
【０１１３】
妥当であると判断した場合（ステップＳ０６３３のＹＥＳ）、不正動作防止制御部０１０６は、セキュリティ要件管理情報テーブルＴ０３１０と要求元のプログラム用のデータ領域管理情報テーブルの更新を行う（ステップＳ０６３４）。
不正動作防止制御部０１０６は、セキュリティ要件管理情報テーブルＴ０３１０の更新において、具体的には、対象となるデータ領域に対応するセキュリティ要件管理情報の共有プログラム識別子に共有を要求しているプログラムの識別子を書き込む。
【０１１４】
要求しているプログラムの識別子は、カレントプログラム管理テーブル０５０３に格納されている識別子を用いる。
また、要求しているプログラムが指定しているセキュリティ要件が、既存のセキュリティ要件より厳しい場合、要求しているプログラムが指定しているセキュリティ要件を、対象となるデータ領域に対応するセキュリティ要件管理情報のセキュリティ要件として追加する。
【０１１５】
ここで、要求しているプログラムが指定しているセキュリティ要件が既存のセキュリティ要件より厳しい場合とは、セキュリティ要件はセキュリティ要件リスト０１０９と同様のデータ構造をしていることから、セキュリティ要件が既存のものより多い場合を指す。
さらに、データ領域管理情報テーブルの更新において、不正動作防止制御部０１０６は、要求元のプログラム用のデータ領域管理情報テーブルにデータ領域管理情報を追加する。
【０１１６】
ここで、追加するデータ領域管理情報のデータアドレスには、要求されたアドレス領域を設定し、データ暗号鍵には、共有対象となるデータ領域の暗／復号に用いている暗号鍵を設定する。
次に、不正動作防止制御部０１０６は、データ保護設定の変更を行う（ステップＳ０６３５）。
【０１１７】
具体的には、不正動作防止制御部０１０６が、ステップＳ０６３４で更新したデータ領域管理情報テーブルの更新内容を不正動作防止回路０１０５に反映し、正常終了を示す処理結果を生成する。
また、ステップＳ０６３２において、登録されていないと判断した場合（ステップＳ０６３２のＮＯ）、および設定が妥当でないと判断した場合（ステップＳ０６３３のＮＯ）、不正動作防止制御部０１０６は、エラーを示す処理結果を生成する。
【０１１８】
次に、不正動作防止制御部０１０６は、生成した処理結果を共有メモリに格納する（ステップＳ０８０８）。
処理結果には、正常終了、データアドレス領域が他のプログラムにより確保されている等のエラー要因などを含める。
以降の処理は、前述のプログラム登録処理と同様である。
＜３．４．プログラム切替処理＞
図２１におけるステップＳ２０６１は、プログラムＡ０１０２が、不正動作防止制御部０１０６に対し、カレントのプログラムを切り替えるよう要求し、その要求に対する処理である。
【０１１９】
以下、プログラム切替処理について、前述のプログラム登録処理と異なる部分を中心に説明する。
なお、プログラムＸは、プログラムＡ０１０２であり、プログラムＢ０１０３への切替を要求するものとする。
まず、プログラムＸは、自プログラムについて予め指定されているＲＡＭ０２０２上のデータ領域である共有メモリに、切替を希望するプログラムの識別子を含む切替要求と、切替を希望するプログラムに対して伝達を希望する引数データとを書き込む。
【０１２０】
プログラムＸ用割り込み管理部は、ステップＳ０８０２において、前記プログラム切替要求を取得する。
ステップＳ０８０３〜Ｓ０８０６までは、プログラム登録処理と同様である。
ステップＳ０８０７の詳細である図１０のステップＳ０６００における判定で、処理要求が、プログラム切替要求であると判定する（ステップＳ０６００の切替）。
【０１２１】
不正動作防止制御部０１０６は、ステップＳ０８０２において、ＲＡＭ０２０２から前記切替要求を取得し、更に、引数データの取得を行う（ステップＳ０６２１）。引数データは、切替元のプログラムから切替先のプログラムへ伝達される情報であり、コマンドなどが含まれる。
不正動作防止制御部０１０６は、取得した引数データを保護メモリ０２０６に格納する。
【０１２２】
ＲＡＭ０２０２における引数データの格納位置は予め決められており、不正動作防止制御部０１０６は予め知っている。
なお、引数データの位置は固定である必要はなく、切替要求に含むこととしてもよい。
次に、不正動作防止制御部０１０６は、カレントプログラム管理テーブルの更新を行う（ステップＳ０６２２）。
【０１２３】
ここで、カレントプログラム管理テーブルの内容を切替先のプログラムの識別子に変更する。
次に、不正動作防止制御部０１０６は、不正動作防止回路０１０５の設定を変更する（ステップＳ０６２３）。
不正動作防止制御部０１０６は、鍵レジスタ０２０５に記憶されている命令用鍵情報テーブルの内容と、データ用鍵情報テーブルの内容を消去し、データ領域管理情報テーブル群０５０１に含まれる切替先のプログラムに対応するデータ領域管理情報テーブル中の各データ領域管理情報に記憶されているデータアドレスと、データ暗号鍵との組を、不正動作防止回路０１０５のデータ用鍵テーブルに書き込む。
【０１２４】
また、コード領域管理情報テーブル群０５０２に含まれる切替先のプログラムに対応するコード領域管理情報テーブル中の各コード領域管理情報に記憶されているコードアドレスと、コード暗号鍵との組を、不正動作防止回路０１０５の命令用鍵情報テーブル０３０５に書き込む。
次に、不正動作防止制御部０１０６は、予め保護メモリ０２０６に格納しておいた引数データを切替先のプログラムが管理するＲＡＭ０２０２に格納する（ステップＳ０６２４）。
【０１２５】
次に、不正動作防止制御部０１０６は、切替先のプログラムへの分岐指示を含む処理結果を生成し、当該処理結果を共有メモリに格納する（ステップＳ０８０８）。
このように、不正動作防止制御部０１０６は、引数データを保護メモリを介して他のプログラムに受け渡すことができる。
そのため、不正動作防止制御部０１０６は、ＯＳ０１０４を含むプログラムから他のプログラムへのデータの受け渡しを依頼された場合、依頼元のプログラムと依頼先のプログラム以外のプログラムへ、そのデータが漏洩しないように受け渡しを行うことが可能となる。
【０１２６】
例えば、プログラムＡ０１０２がプログラムＢ０１０３を関数として呼び出す場合で、プログラムＢ０１０３がプログラムＡ０１０２のデータ領域を共有していない場合において、引数データの受け渡しを安全に行うことができる。
また、プログラムＡ０１０２がＯＳ０１０４のシステムコールを呼び出す場合も同様に引数データの受け渡しを安全に行うことができる。
＜４．全体動作＞
プログラム保護装置０１０１によるプログラムの切替処理（プログラムＡ０１０２からプログラムＢ０１０３への切替処理）を例として、全体動作について、図１３、図１４に示すフローチャートを用いて説明する。
【０１２７】
プログラムＡ０１０２は、保護対象データ０１０８であるコンテンツの復号を行った後、復号されたコンテンツの再生を依頼するために、プログラムＡ０１０２に対し予め決められたデータ領域に、プログラムＢへの引数データを含む処理要求を書き込んで、プログラムＢ０１０３に切り替えるためにソフトウェア割り込みを発生させ、プログラムＡ用割り込み管理部０４０２に制御を移す（ステップＳ０９０１）。
【０１２８】
プログラムＡ用割り込み管理部０４０２は、前記データ領域から前記引数データを取得し、また、割り込みの種別がプログラムＢ０１０３へ切り替えるためのソフトウェア割り込みであったことを確認する（ステップＳ０９０２）。
次に、プログラムＡ用割り込み管理部０４０２は、プログラムＢ０１０３へ切り替える旨の要求と引数データを共有メモリに格納する（ステップＳ０９０３）。
【０１２９】
次に、プログラムＡ用割込み管理部０４０２、状態切替回路０２０８、セキュリティカーネル０４０１は、前述の状態切替動作Ａを実行し、通常モードから保護モードへ切り替える（ステップＳ０９０５）。
次に、ステップＳ０９０５において、制御主体となったセキュリティカーネル０４０１は、不正動作防止制御部０１０６に制御を移す（ステップＳ０９０７）。
【０１３０】
次に、不正動作防止制御部０１０６は、共有メモリから、ステップＳ０９０３で格納された前記要求と前記引数データを取得する（ステップＳ０９０８）。
次に、不正動作防止制御部０１０６は、前記要求がプログラムＢ０１０３への切り替え要求であることから、プログラムの切替処理が必要であることを判断し、前述したプログラムの切替処理０６０２の処理を行う（Ｓ０９０９）。
【０１３１】
不正動作防止制御部０１０６は、切替処理の結果を共有メモリに格納する（ステップＳ０９１０）。
次に、不正動作防止制御部０１０６は、セキュリティカーネルに制御を移す（ステップＳ０９１１）。
ここで、セキュリティカーネル０４０１、状態切替回路０２０８及びＯＳ用割込み管理部０４０４が前述の状態切替動作Ｂを実行し、保護モードから通常モードへ切り替える（ステップＳ０９１３）。また、プログラムの切替にはオペレーティングシステムの処理が必要なので、通常モードに復帰後、ＯＳ用割り込み管理部０４０４に制御を移す。
【０１３２】
次に、ＯＳ用割り込み管理部０４０４は、共有メモリから処理結果を取得し（ステップＳ０９１５）、ＯＳ０１０４に制御を移す（ステップＳ０９１６）。
次にＯＳ０１０４は、プログラムＡ０１０２からプログラムＢ０１０３への切替処理を行う（ステップＳ０９１７）。ここで、ＯＳ０１０４は、プログラムコンテキストの切替などの処理を行う。
【０１３３】
次に、ＯＳ０１０４は、プログラムＢ０１０３への切替を不正動作防止制御部０１０６に依頼するために、ＯＳ用割り込み管理部０４０４に制御を移す（ステップＳ０９１８）。
次に、ＯＳ用割り込み管理部０４０４は、プログラムＢ０１０３への切替要求を共有メモリに格納する（ステップＳ０９１９）。
【０１３４】
ここで、ステップＳ０９２１〜ステップＳ０９２９は、ステップＳ０９０５〜ステップＳ０９１３までと同様の処理であるので、説明を省略する。
ただし、切替先のプログラムはＯＳ０１０４ではなく、プログラムＢ０１０３であるので、プログラムＢ用割り込み管理部０４０３に制御が移る。
次に、プログラムＢ用割り込み管理部０４０３は、共有メモリから処理結果を取得する（ステップＳ０９３１）。
【０１３５】
次にプログラムＢ用割り込み管理部０４０３は、処理結果をプログラムＢ０１０３が管理するデータ領域に格納（ステップＳ０９３２）した後、ソフトウェア割り込みからリターンする（ステップＳ０９３３）。
その後、プログラムＢ０１０３は、データ処理を行う（ステップＳ０９３４）。
＜５．コンテンツ復号処理を例とした補足説明＞
プログラム保護装置０１０１において、暗号化コンテンツである保護対象データ０１０８の復号処理を行うプログラムＡ０１０２と、復号されたコンテンツを再生するプレーヤーであるプログラムＢとが、連係して動作する場合について、データの変化を中心に、図１５〜図２０に示す図を用いて補足説明する。
【０１３６】
また、保護対象データへのアクセス権を保持していないプログラムＣ０１０７が、保護対象データへアクセスした場合の動作についても説明する。
図１６は、プログラム保護装置０１０１動作中のＲＡＭ０２０２の状態を示す。
プログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７、ＯＳ０１０４のコードは、それぞれコード暗号鍵ＫＣ＿Ａ、ＫＣ＿Ｂ、ＫＣ＿Ｃ、ＫＣ＿ＯＳによって暗号化されて不揮発メモリ０２０３に格納されている。
【０１３７】
不揮発メモリ０２０３に格納されているＢＩＯＳ０４０５は、ファイルＡ０２１２、ファイルＢ０２１３、ファイルＣ０２１４、ファイルＯＳ０２１５をＲＡＭ０２０２にロードする。
その結果、プログラムＡ０１０２のコード領域（定数も含まれる）１２０１は、１０００番地から１１００番地にロードされる。
【０１３８】
プログラムＢ０１０３、プログラムＣ０１０７、ＯＳ０１０４も同様に、それぞれ２０００〜２１００、３０００〜３１００、４０００〜４１００番地にロードされる。
また、蓄積メディア０２１６に格納されている保護対象データ０１０８は、８０００〜９０００番地の保護対象データ領域１２１０にロードされる。
なお、保護対象データ０１０８は、必ずしもＢＩＯＳ０４０５がロードする必要はなく、その他のプログラムがロードしてもよい。
【０１３９】
その後、ＢＩＯＳ０４０５は、不正動作防止制御部０１０６にプログラム登録依頼をする。
不正動作防止制御部０１０６は、プログラムの登録処理０６０１に従って、各プログラムを登録する。
その結果、図１７〜図１９に示すように、管理テーブル０１１０内に、データ領域管理情報テーブルＴ０５００、Ｔ０６００、Ｔ０７００、Ｔ０８００、コード領域管理情報テーブルＴ０９００、Ｔ１０００、Ｔ１１００、Ｔ１２００、およびプログラム管理情報テーブルＴ１３００、セキュリティ要件管理情報テーブルＴ１４００が生成される。
【０１４０】
なお、ここではＢＩＯＳ０４０５がプログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７をロード／登録しているが、ＢＩＯＳ０４０５がＯＳ０１０４のみをロード／登録した後、ＯＳ０１０４がプログラムＡ０１０２、プログラムＢ０１０３、プログラムＣ０１０７をロード／登録してもよい。
プログラム登録処理０６０１の管理テーブルの更新（ステップＳ０６１５）で、プログラム管理情報Ｔ１３０１〜Ｔ１３０４がプログラム管理情報テーブルＴ１３００に追加される。
【０１４１】
プログラムＡ０１０２およびプログラムＢ０１０３の機能フラグ０１１１および０１１２において、ファイル出力機能は無しであるので、プログラム管理情報Ｔ１３０１およびＴ１３０２の機能フラグはファイル出力機能無しとなる。
また、プログラムＣ０１０７およびＯＳ０１０４の機能フラグ０１１３および０１１４は、ファイル出力機能は有りであるので、プログラム管理情報Ｔ１３０３およびＴ１３０４の機能フラグはファイル出力機能有りとなる。
【０１４２】
なお、ここではファイル出力機能のみに着目しているが、その他の機能についても同様に扱われる。
プログラム登録処理０６０１の管理テーブルの更新（ステップＳ０６１５）で、プログラムＡ用コード領域管理情報テーブルＴ０９００には、コード領域管理情報Ｔ０９０１とＴ０９０２が追加される。
【０１４３】
コード領域管理情報Ｔ０９０１において、コード領域識別子として“Ａ＿Ｃ０”、コードアドレスとして“１０００〜１０９９”、コード暗号鍵として“ＫＣ＿Ａ”が設定される。
ここで、不正動作防止制御部０１０６は、ファイルＡ０２１２に格納されているコード暗号鍵０７１０を秘密鍵で復号化する。コード領域管理情報Ｔ０９０２において、コード領域識別子として“未定義領域”、コードアドレスとして“定義領域以外”、コード暗号鍵として“ＫＣ＿ＲＡ”が設定される。
【０１４４】
ここで、“定義領域以外”とは、プログラムＡ用コード領域管理情報テーブルＴ０９００に登録されているコード領域管理情報Ｔ０９０２以外のコード領域管理情報で定義されているコードアドレス領域以外の領域を意味し、この領域には、コード暗号鍵としてＫＣ＿ＲＡが用いられる。
ＫＣ＿ＲＡは、不正動作防止制御部０１０６が生成した乱数値である。なお、他のコード領域管理情報テーブルＴ１０００、Ｔ１１００、Ｔ１２００も図１６に示すように、同様に設定される。
【０１４５】
図１５は、プログラム保護装置０１０１の動作を示すフローチャートである。
本フローチャートは、プログラムＡ〜Ｃが連携動作しようとし、プログラムＣがセキュリティ要件違反により停止する場合を示している。
なお、図１５では、各割り込み管理部０４０２、０４０３、０４０４、０４０６の動作は省略している。以下、図１５にしたがってプログラム保護装置０１０１の動作を説明する。
【０１４６】
プログラムＡ０１０２は、プログラムＡのデータ領域１２０２を使用可能にするために不正動作防止制御部０１０６に対しデータ保護設定を依頼する（ステップＳ１１０１）。
ここで、プログラムＡ０１０２は、１５００〜１５９９番地までのデータ領域をプログラムＡ０１０２のみアクセス可能な状態で確保するよう不正動作防止制御部０１０６に依頼をする。
【０１４７】
プログラムＡ０１０２は、ステップＳ０８０１〜ステップＳ０８１３と同様の動作を行い、データ保護設定を行う。
以下、データ保護設定の依頼は同様の動作で行われるものとする。
その結果、プログラムＡ用データ領域管理情報テーブルＴ０５００にデータ領域管理情報Ｔ０５０１が追加されると共に、セキュリティ要件管理情報テーブルＴ１４００にセキュリティ要件管理情報Ｔ１４０１が追加される。
【０１４８】
このとき、不正動作防止制御処理（ステップＳ０８０７）において、不正動作防止制御部０１０６は、データ領域の保護設定処理０６０３を行う。
データ領域管理情報Ｔ０５０１のデータ暗号鍵ＫＤ＿Ａ１は、不正動作防止制御部が生成した乱数値である。
次にプログラムＡ０１０２は、保護対象データ領域１２１０のデータを取り扱えるように設定を行う（ステップＳ１１０２）。
【０１４９】
保護対象データ領域１２１０に格納されている保護対象データ０１０８内のデータ０７０１はデータ暗号鍵０７０２で暗号化されているので、データ０７０１をデータ暗号鍵０７０２で復号化しなければプログラムＡ０１０２はデータ０７０１を使用できない。
ここでは、バス暗号回路０２０４で復号化するものとする。
そこで、プログラムＡ０１０２は、不正動作防止制御部０１０６に対し、データ領域設定要求を行う。
【０１５０】
データ領域設定要求には、保護対象データ領域１２１０のアドレスとセキュリティ要件が含まれる。
ここで、プログラムＡ０１０２は、セキュリティ要件として、保護対象データ０１０８に含まれるセキュリティ要件リスト０１０９を用いるように不正動作防止制御部０１０６に指示する。
【０１５１】
不正動作防止制御部０１０６は、図１２に示す（ステップＳ０８０１）から（ステップＳ０８１３）までの処理を行う。
不正動作防止制御処理（ステップＳ０８０７）において、不正動作防止制御部０１０６は、データ領域保護設定処理０６０３と同様の処理を行う。
ただし、未使用領域であるかどうかを確かめる処理（ステップＳ０６０２）の後、図２０のフローチャートに示す、プログラムＡの機能フラグが保護対象データ０１０８のセキュリティ要件リスト０１０９記載のセキュリティ要件を満たすかどうかの確認を行う処理が追加される。
【０１５２】
もし、セキュリティ要件を満たしていなければ不正動作防止制御処理を終了する。
ここで、セキュリティ要件を満たすかどうかの確認において、不正動作防止制御部０１０６は、まずセキュリティ要件リストの正当性確認を行う（ステップＳ１８０１）。
セキュリティ要件リストが正当でないと判断した場合（ステップＳ１８０１のＮＯ）、不正動作防止制御処理を終了する。
【０１５３】
ここで、不正動作防止制御部０１０６は、署名データ０７０８を用い、セキュリティ要件リスト０１０９の正当性の確認を行う。
次に、不正動作防止制御部０１０６は、セキュリティ要件と機能フラグの比較を行う（ステップＳ１８０２）。
ここで、不正動作防止制御部０１０６は、正当性を確認したセキュリティ要件リスト０１０９とプログラム管理情報Ｔ１３０１に含まれるプログラムＡの機能フラグを比較し、セキュリティ要件を満たしているかどうかの確認、および、セキュリティ要件管理情報テーブルＴ１４００に含まれる生成したプログラムがプログラムＡであるセキュリティ要件管理情報のセキュリティ要件がセキュリティ要件リスト０１０９を満たしているかどうかの確認を行う。
【０１５４】
セキュリティ要件を満たしていないと判断された場合（ステップＳ１８０２のＮＯ）、不正動作防止制御処理を終了する。
セキュリティ要件管理情報テーブルＴ１４００に含まれる他のデータ領域のセキュリティ要件がセキュリティ要件リスト０１０９を満たしているかどうか確認することで、保護対象データ０１０８のセキュリティ要件を満たしていないデータ領域からデータが漏洩することを防止することができる。
【０１５５】
次に、不正動作防止制御部０１０６は、データ暗号鍵０７０２の復号化を行った後（ステップＳ１８０３）、データ領域管理情報テーブルの更新（ステップＳ０６０３）を行う。
ここで、不正動作防止制御部０１０６は、プログラムＡ用データ領域管理情報テーブルＴ０５００にデータ領域管理情報Ｔ０５０２を追加すると共に、セキュリティ要件管理情報テーブルＴ１４００にセキュリティ要件管理情報Ｔ１４０２を追加する。
【０１５６】
データ領域管理情報Ｔ０５０２のデータ暗号鍵には、データ暗号鍵０７０２が格納される。
図１７では、データ暗号鍵０７０２は、“ＫＤ＿Ｓ”と示されている。
次にプログラムＡ０１０２は、１６００〜１６９９番地までのデータ領域をセキュリティ要件リスト０１０９に基づくセキュリティ要件で確保するよう不正動作防止制御部０１０６に依頼をする（ステップＳ１１０３）。
【０１５７】
ここで、セキュリティ要件リスト０１０９には、保護対象データ０１０８はファイル出力禁止である旨の情報が含まれている。
ここで、不正動作防止制御部０１０６は、要求されたセキュリティ要件が、プログラムＡ０１０２が既に生成しているすべてのデータ領域のセキュリティ要件と同等かもしくは厳しいものであるかをセキュリティ要件管理情報テーブルＴ１４００を用いて確認する。
【０１５８】
もし、要求されたセキュリティ要件が、既に生成しているすべてのデータ領域のセキュリティ要件と同等かもしくは厳しいものでなければ、管理情報の追加は行わない。
要求されたセキュリティ要件が、既に生成しているすべてのデータ領域のセキュリティ要件と同等かもしくは厳しいものであると、プログラムＡ用データ領域管理情報テーブルＴ０５００にデータ領域管理情報Ｔ０５０３が追加されると共に、セキュリティ要件管理情報テーブルＴ１４００にセキュリティ要件管理情報Ｔ１４０３が追加される。
【０１５９】
次に、プログラムＡ０１０２は、保護対象データ０１０８を保護対象データ領域１２１０から読み出し、保護対象データ０１０８の処理を行う（ステップＳ１１０５）。
処理結果は、プログラムＡのデータ領域１２０３に格納される。
次に、プログラムＡ０１０２は、プログラムＡ０１０２からプログラムＢ０１０３への切替処理を行う（ステップＳ１１０６）。
【０１６０】
ここで切替処理は、図１３及び図１４のステップＳ０９０１〜ステップＳ０９３３の処理を行う。
切替処理（ステップＳ１１０６）が実行される以前、不正動作防止制御部０１０５には、プログラムＡ用コード領域管理情報テーブルＴ０９００およびプログラムＡ用データ領域管理情報テーブルＴ０５００の情報が設定されている。
【０１６１】
切替処理（ステップＳ１１０６）が実行されると、不正動作防止制御部０１０５には、プログラムＢ用コード領域管理情報テーブルＴ１０００およびプログラムＢ用データ領域管理情報テーブルＴ０６００の情報が設定される。
ここで、動作中のプログラムに合わせた鍵が鍵レジスタに設定されるように、不正動作防止制御部０１０５を構成している鍵レジスタ０２０５の命令用鍵情報テーブル０３０５に各コード領域管理情報テーブルの設定が反映され、データ用鍵情報テーブル０３０６に各データ領域管理情報テーブルの設定が反映される。
【０１６２】
このように、プログラム保護装置０１０１がプログラムＡ０１０２からプログラムＢ０１０３への切替処理（ステップＳ１１０６）を行い、プログラムＡ０１０２がロードされている領域を暗／復号する鍵を変更するので、プログラムＢ０１０３によるプログラムＡ０１０２の不正実行を防止することができる。
例えば、プログラムＢ０１０３の動作中にコード暗号鍵ＫＣ＿Ａで暗号化されてＲＡＭ０２０２に格納されているプログラムＡのコード領域１２０１（１０００〜１０９９番地に配置されている）に分岐する場合、コード領域１２０１のコードはコード暗号鍵ＫＣ＿ＲＢを用いて復号化される。
【０１６３】
鍵ＫＣ＿Ａで暗号化されているコードを鍵ＫＣ＿ＲＢで復号してもコードは正しく復号されないため、正しくＣＰＵ０２０１は実行することができず、プログラムＢ０１０３によるプログラムＡ０１０２の不正実行を防止することができる。
また、同様にプログラムＢ０１０３の動作中にプログラムＡのデータ領域１２０２にアクセスしたとしてもデータ暗号鍵が異なるので、意味のあるデータは取得できない。
【０１６４】
また、プログラム保護装置０１０１がプログラムＡ０１０２からプログラムＢ０１０３への切替処理（ステップＳ１１０６）を行うことで、割り込みおよび例外が発生した場合にはプログラムＢ用割り込み管理部０４０３に含まれるハンドラが実行される。
そのため、割り込みおよび例外によって、プログラムＢ０１０３以外のプログラムに制御を奪われることがない。
【０１６５】
次に、プログラムＢ０１０３は、プログラムＢのデータ領域１２０５を使用可能にするために不正動作防止制御部０１０６に対しデータ保護設定を依頼する（ステップＳ１１０７）。
ここで、プログラムＢ０１０３は、２５００〜２５９９番地までのデータ領域をプログラムＢ０１０３のみアクセス可能な状態で確保するよう不正動作防止制御部０１０６に依頼をする。
【０１６６】
その結果、プログラムＢ用データ領域管理情報テーブルＴ０６００にデータ領域管理情報Ｔ０６０１が追加されると共に、セキュリティ要件管理情報テーブルＴ１４００にセキュリティ要件管理情報Ｔ１４０４が追加される。
次に、プログラムＢ０１０３は、データ領域１２０３をプログラムＡと共有するためにデータ保護設定を行う（ステップＳ１１０８）。
【０１６７】
ここで、プログラムＢ０１０３は、１６００〜１６９９番地までのデータ領域１２０３をファイルへの出力不可を示すセキュリティ要件で確保するよう不正動作防止制御部０１０６に依頼をする。
データ領域１２０３は、既にプログラムＡ０１０２によって確保されているので、データ領域を共有することとなる。
【０１６８】
プログラム保護装置０１０１は、図１２に示すステップＳ０８０１〜ステップＳ０８１３と同様の処理を行う。
ここで、コード・データ保護設定（ステップＳ０８０７）において、不正動作防止制御部０１０６は、図１０に示すデータ領域共有設定処理０６０４を行う。
データ領域共有設定処理０６０４において、不正動作防止制御部０１０６は、要求されているデータ領域がセキュリティ要件管理情報テーブルＴ１４００に存在するかどうかを確かめる（ステップＳ０６３２）。
【０１６９】
不正動作防止制御部０１０６は、セキュリティ要件管理情報Ｔ１４０３の存在を確認できる。
次に不正動作防止制御部０１０６は、プログラムＢのプログラム管理情報Ｔ１３０２に含まれる機能フラグが、要求されているデータ領域のセキュリティ要件管理情報Ｔ１４０３に含まれるセキュリティ要件を満たすかどうかを確かめる。
【０１７０】
ここでは、共有対象のデータ領域１２０３のセキュリティ要件はファイル出力不可であるのに対し、プログラムＢ０１０３の機能フラグはファイル出力不可能であるので、妥当であると判断される。
その結果、セキュリティ要件管理情報Ｔ１４０３に含まれる共有プログラム識別子にプログラムＢの識別子が設定される。
【０１７１】
プログラムＢ０１０３がデータ領域１２０３に要求するセキュリティ要件は、ファイルへの出力不可であり、これは既存のセキュリティ要件と等しいので、セキュリティ要件管理情報Ｔ１４０３のセキュリティ要件は変更しない。
次に管理テーブルの更新（ステップＳ０６３４）が行われ、プログラムＢ用データ領域管理情報テーブルＴ０６００にデータ領域管理情報Ｔ０６０２が追加される。
【０１７２】
データ領域管理情報Ｔ０６０２のデータ暗号鍵は、プログラムＡ用データ領域管理情報Ｔ０５０３と同様の鍵が設定される。
次にデータ保護設定の変更（ステップＳ０６３５）が行われ、鍵レジスタ０２０５の設定が変更される。
その結果、プログラムＢ０１０３からもプログラムＡのデータ領域１２０３の参照が可能となる。
【０１７３】
次に、プログラムＢ０１０３は、データ領域１２０３のデータを用いて処理を行う（ステップＳ１１０９）。
次にプログラム保護装置０１０１は、プログラムＢからＣへの切替処理を行う（ステップＳ１１１０）。
次に、プログラムＣ０１０７は、プログラムＣのデータ領域１２０７を使用可能にするために不正動作防止制御部０１０６に対しデータ保護設定を依頼する（ステップＳ１１１１）。
【０１７４】
ここで、プログラムＣ０１０７は、３５００〜３５９９番地までのデータ領域をプログラムＣのみアクセス可能な状態で確保するよう不正動作防止制御部０１０６に依頼をする。
その結果、プログラムＣ用データ領域管理情報テーブルＴ０７００にデータ領域管理情報Ｔ０７０１が追加されると共に、セキュリティ要件管理情報テーブルＴ１４００にセキュリティ要件管理情報Ｔ１４０５が追加される。
【０１７５】
次に、プログラムＣ０１０７は、データ領域１２０３をプログラムＡ０１０２と共有するためにデータ保護設定を行う（ステップＳ１１１２）。
ここで、プログラムＣ０１０７は、１６００〜１６９９番地までのデータ領域１２０３をファイルへの出力可を示すセキュリティ要件で確保するよう不正動作防止制御部０１０６に依頼をする。
【０１７６】
共有メモリの設定（ステップＳ１１０８）と同様に不正動作防止制御部０１０６は、データ領域共有設定処理０６０４を行う。
共有メモリの設定（ステップＳ１１１２）は、共有メモリの設定（ステップＳ１１０８）と異なり、共有メモリの設定は失敗する。
データ領域共有設定処理０６０４における、要求の妥当性判断（ステップＳ０６３３）で妥当でないと判断されるからである。
【０１７７】
より具体的には、不正動作防止制御部０１０６は、セキュリティ要件管理情報Ｔ１４０３のセキュリティ要件をプログラム管理情報Ｔ１３０３の機能フラグが満たすかどうかの確認を行う。
セキュリティ要件がファイル出力不可であるのに機能フラグが出力可能であるので、不正動作防止制御部０１０６は、データ領域１２０３のセキュリティ要件をプログラムＣが満たしていないと判断し（ステップＳ０６３３のＮＯ）、不正動作防止制御部０１０６は、不正動作防止制御処理を終了する。
＜６．変形例＞
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）  第１実施形態において、コード暗号鍵０７１０等のコード暗号鍵は、公開鍵暗号アルゴリズムで暗号化されているとしていたが、これに限るものではない。
【０１７８】
それぞれのコード暗号鍵を共通鍵暗号方式で暗号化してもよく、この場合、暗号化する際に用いた共通鍵は不正動作防止制御部０１０６が保持する。また、プログラムは必ずしも暗号化する必要はない。その場合、コード暗号鍵０７１０はＮＵＬＬ鍵とする。また、コード暗号鍵０７１０は、プログラムＡのコード０７１１を暗号化する際に用いたアルゴリズム情報を含むことができる。
【０１７９】
また、データ暗号鍵０７０２についても、データ暗号鍵０７０２を共通鍵暗号方式で暗号化してもよく、この場合、暗号化する際に用いた共通鍵は不正動作防止制御部０１０６が保持する。
また、データ０７０１を暗号化しない場合、データ暗号鍵０７０２はＮＵＬＬ鍵とする。
【０１８０】
また、データ暗号鍵０７０２は、データ０７０１を暗号化する際に用いたアルゴリズム情報を含むことができる。
（２）  上述の実施形態では、不正動作防止回路０１０５を用いて、ＲＡＭ０２０２へのアクセスを制限していたが、これに限らず、ＲＡＭ０２０２へのアクセスを、プログラム単位で制限することができる他の回路、方法等を用いてもよい。
【０１８１】
例えば、図２２に示すように、不正動作防止回路０１０５に代えて、不正動作防止回路２１０５を用いてもよい。
不正動作防止回路２１０５は、ＲＡＭ０２０２に記憶させるコード、データに対し暗号化、復号を行うのに代えて、ＲＡＭ０２０２へのアクセスを、プログラムＩＤを用いて制限する。
【０１８２】
不正動作防止回路２１０５は、鍵レジスタに代えてＩＤレジスタ２２０５を備え、バス暗号回路に代えてバス接続許可回路２２０４を備える。
ＩＤレジスタ２２０５は、図２３に示すように、アドレスと命令用バス接続ＩＤとの対応を示す命令用ＩＤ情報テーブル２３０５と、アドレスとデータ用バス接続ＩＤとの対応を示すデータ用ＩＤ情報テーブル２３０６とを保持しており、バス接続許可回路２２０４からアドレス信号２３０１を取得して、アドレス信号２３０１が示すアドレスに対応づけられている命令用バス接続ＩＤ２３０２と、データ用バス接続ＩＤ２３０３とをバス接続許可回路２２０４に出力する。
【０１８３】
ここで、命令用ＩＤ情報テーブル２３０５は、命令用ＩＤ情報Ｔ２３１１、Ｔ２３１２、Ｔ２３１３・・・を含み、各命令用ＩＤ情報は、アドレスと命令用バス接続ＩＤ暗号鍵との対応を示しており、データ用ＩＤ情報テーブル２３０６は、データ用ＩＤ情報Ｔ２３２１、Ｔ２３２２、Ｔ２３２３・・・を含み、各データ用ＩＤ情報は、アドレスとデータ用バス接続ＩＤとの対応を示している。
【０１８４】
この変更に伴い、不正動作防止制御部０１０６が管理する管理テーブル０１１０の内容は、上述の実施形態で説明したものに代えて、不正動作防止回路２１０５に設定するためのＩＤに関する情報とする。
また、ＩＤレジスタ２２０５の設定は、状態切替回路０２０８が出力する状態信号Ｂが保護モードを示すときのみ、バス０２１０により通知される設定信号２３０４を用いて変更することができる。
【０１８５】
ＲＡＭ０２０２は、バス接続許可回路２２０４と接続されているメモリ装置である。
バス接続許可回路２２０４は、ＩＤレジスタ２２０５から通知されるデータ用バス接続ＩＤ、コード用バス接続ＩＤと、現在動作中のプログラム固有のＩＤとを比較し、一致する場合に、当該アドレスで示されるメモリ領域へのアクセスを許可する。前述の現在動作中のプログラム固有のＩＤは、カレントプログラム管理テーブルＴ０５０３に設定されているカレントプログラムの固有のＩＤである。
【０１８６】
これにより、コードやデータが、バス０２１０とＲＡＭ０２０２との間でやり取りされるか否かをバス接続許可回路２２０４により制御することができる。
また、バス接続許可回路２２０４は、ＣＰＵ０２０１上で動作するプログラムが命令フェッチのためにＲＡＭ０２０２にアクセスしているのか、データアクセスのためにアクセスしているのかを検知し、同一物理アドレスへの命令フェッチの場合には命令用バス接続ＩＤを用い、データアクセスの場合にはデータ用バス接続ＩＤを用いる。
【０１８７】
（３）上記の実施形態では、プログラム単位で、コード領域、データ領域、セキュリティ要件、プログラムの管理情報、メモリの共有など情報の管理や、実行単位の切替を行っていたが、これに限らず、プロセス、スレッドなど他の単位毎に行ってもよい。この場合、通常モードや保護モードのそれぞれで連携動作するプロセスやスレッドは、互いに異なるプログラムに含まれるプロセスやスレッドではなく、同一のプログラムの別プロセスや別スレッドであってもよい。  （４）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１８８】
（５）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。これらは個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されても良い。
【０１８９】
ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０１９０】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
（６）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０１９１】
（７）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０１９２】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０１９３】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（８）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
＜７．用語についての補足説明＞
前記データ処理装置は、プログラム保護装置０１０１に相当する。
【０１９４】
前記検出手段は、ＣＰＵ０２０１及び状態切替部０２０８に相当する。
前記アクセス手段は、不正動作防止制御回路０１０５及びＲＡＭ０２０２及び保護メモリ０２０６及びアクセス制限回路０２０７に相当する。
前記切替手段は、状態切替部０２０８に相当する。
前記判定手段は、不正動作防止制御部０１０６に相当する。
【０１９５】
前記制御手段は、不正動作防止制御部０１０６及びセキュリティカーネル０４０１に相当する。
前記メモリは、ＲＡＭ０２０２に相当する。
前記保持部は、鍵レジスタ０２０５に相当する。
前記アクセス制限部は、不正動作防止制御部０１０６及びセキュリティカーネル０４０１及び不正動作防止制御回路０１０５及びＲＡＭ０２０２及び保護メモリ０２０６及びアクセス制限回路０２０７に相当する。
【０１９６】
前記アクセス制限部における前記取得部は、ＲＡＭ０２０２と、不正動作防止回路０２０５と、セキュリティカーネル０４０１と、不正動作防止制御部０１０６に相当する。
前記アドレス判定部は、鍵レジスタ０２０５とバス暗号回路０２０４に相当する。
前記アクセス実行部は、バス暗号回路０２０４に相当する。
前記管理情報追加部は、不正動作防止制御部０１０６に相当する。
【０１９７】
前記ベクタテーブル保持手段は、不揮発メモリ２２１に相当する。
前記ベクタテーブル書換手段は、不正動作防止制御部０１０６に相当する。
前記使用要求受付部は、バス暗号回路０２０４に相当する。
前記使用判定部は、バス暗号回路０２０４に相当する。
前記権限判定部は、不正動作防止制御部０１０６に相当する。
【０１９８】
前記管理情報登録部は、不正動作防止制御部０１０６に相当する。
前記デバッグ手段は、デバッガＩ／Ｆ０２０９に相当する。
前記強制無効化手段は、ＣＰＵ０２０１に相当する。
【産業上の利用可能性】
【０１９９】
本発明のプログラム保護装置は、機能追加、不具合修正などのためにプログラムの更新が可能なデジタル家電などとして使用され、家電製品を扱う業者などにより、生産、使用、販売等される。
【図面の簡単な説明】
【０２００】
【図１】本発明に係るプログラム保護装置の構成の主要部を模式的に示す図である。
【図２】本発明に係るプログラム保護装置のハードウェア構成を示す図である。
【図３】鍵レジスタの構成を示す図である。
【図４】保護対象データの構成を示す図である。
【図５】プログラムを記録するファイルの構成を模式的に示す図である。
【図６】プログラムを記録するファイルの構成を模式的に示す図である。
【図７】プログラム保護装置のソフトウェア構成を示す図である。
【図８】管理テーブルの構成を示す図である。
【図９】管理テーブルの構成を示す図である。
【図１０】不正動作防止制御処理を示すフローチャートである。
【図１１】状態切替動作Ａ及びＢの処理を示すフローチャートである。
【図１２】プログラムＸからの要求に対する不正動作防止制御部の処理を示すフローチャートである。
【図１３】プログラムの全体動作を示すフローチャートである。
【図１４】プログラムの全体動作を示すフローチャートである（図１３の続き）。
【図１５】プログラム保護装置の動作を示すフローチャートである。
【図１６】プログラム保護装置の動作中のＲＡＭの状態を示す。
【図１７】プログラム保護装置の動作中の管理テーブルの状態を示す。
【図１８】プログラム保護装置の動作中の管理テーブルの状態を示す。
【図１９】プログラム保護装置の動作中の管理テーブルの状態を示す。
【図２０】プログラムの機能フラグがセキュリティ要件を満たすか否かを判定する処理を示すフローチャートである。
【図２１】プログラム保護装置におけるプログラムの動作を示すフローチャートである。
【図２２】変形例に係るプログラム保護装置の構成を示すブロック図である。
【図２３】変形例に係るＩＤレジスタの構成を示す図である。
【符号の説明】
【０２０１】
０１０１    プログラム保護装置
０１０２    プログラムＡ
０１０３    プログラムＢ
０１０４    オペレーティングシステム（ＯＳ）
０１０５    不正動作防止回路
０１０６    不正動作防止制御部
０１０７    プログラムＣ
０１０８    保護対象データ
０１０９    セキュリティ要件リスト
０１１０    管理テーブル
０２０１    ＣＰＵ
０２０２    ＲＡＭ
０２０３    不揮発メモリ
０２０４    バス暗号回路
０２０５    鍵レジスタ
０２０６    保護メモリ
０２０７    アクセス制限回路
０２０８    状態切替回路
０２０９    デバッガＩ／Ｆ
０２１０    バス
０２１６    蓄積メディア
０２１９    ベクタテーブル
０２２１    不揮発メモリ
０４０１    セキュリティカーネル
０４０２    プログラムＡ用割り込み管理部
０４０３    プログラムＢ用割り込み管理部
０４０４    ＯＳ用割り込み管理部
０４０５    ＢＩＯＳ
０４０６    プログラムＣ用割り込み管理部
【図１】
0004886682.tif 000002
【図２】
0004886682.tif 000003
【図３】
0004886682.tif 000004
【図４】
0004886682.tif 000005
【図５】
0004886682.tif 000006
【図６】
0004886682.tif 000007
【図７】
0004886682.tif 000008
【図８】
0004886682.tif 000009
【図９】
0004886682.tif 000010
【図１０】
0004886682.tif 000011
【図１１】
0004886682.tif 000012
【図１２】
0004886682.tif 000013
【図１３】
0004886682.tif 000014
【図１４】
0004886682.tif 000015
【図１５】
0004886682.tif 000016
【図１６】
0004886682.tif 000017
【図１７】
0004886682.tif 000018
【図１８】
0004886682.tif 000019
【図１９】
0004886682.tif 000020
【図２０】
0004886682.tif 000021
【図２１】
0004886682.tif 000022
【図２２】
0004886682.tif 000023
【図２３】
0004886682.tif 000024