(57)【要約】【課題】処理対象となる情報が第三者から不正に読み出されるのを防止しつつ、必要に応じて当該情報に対する処理を施すことができるマイクロプロセッサを提供する。【解決手段】プロセッサコア１１０を備えたマイクロプロセッサ１００であって、プロセッサコア１１０が利用すべき情報を外部から取得する情報取得手段１３４と、情報取得手段１３０が取得した情報が暗号化された暗号化情報である場合に、当該暗号化情報を復号鍵を利用して復号化し、平文情報を得る復号化手段１３４と、復号化手段１３４が暗号化情報を復号化するときに利用する暗号復号鍵に基づいて、情報取得手段１３４が取得した情報に対する処理を制御する制御手段１４２とを備えたことを特徴とする。【選択図】        図２
2006042289.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサコアを備えたマイクロプロセッサであって、
前記プロセッサコアが利用すべき情報を外部から取得する情報取得手段と、
前記情報取得手段が取得した情報が暗号化された暗号化情報である場合に、当該暗号化情報を暗号復号鍵を利用して復号化し、平文情報を得る復号化手段と、
前記復号化手段が前記暗号化情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記情報取得手段が取得した前記情報に対する処理を制御する制御手段と
を備えたことを特徴とするマイクロプロセッサ。
【請求項２】
前記情報取得手段は、前記情報を製品として提供するときに利用すべき暗号復号鍵である製品鍵で暗号化された製品鍵暗号化情報を取得し、
前記制御手段は、前記製品鍵暗号化情報に対する処理を制限することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記情報取得手段は、前記情報を開発するときに利用すべき暗号復号鍵である開発鍵で暗号化された開発鍵暗号化情報を取得し、
前記制御手段は前記開発鍵暗号化情報に対する処理を許可することを特徴とする請求項１または２に記載のマイクロプロセッサ。
【請求項４】
前記情報を開発するときに利用すべき暗号復号鍵である開発鍵を生成する開発鍵生成手段をさらに備え、
前記制御手段は、前記開発鍵生成手段によって生成された前記開発鍵で暗号化された前記開発鍵暗号化情報に対する処理を許可することを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記開発鍵生成手段は、前記製品鍵と同一の値を示す開発鍵を生成し、
前記制御手段は、前記開発鍵生成手段によって生成された前記開発鍵で暗号化された前記開発鍵暗号化情報に対する処理を許可することを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項６】
前記復号化手段が復号化を行うときに利用する暗号復号鍵であって前記情報を製品として提供するときに利用すべき暗号復号鍵である製品鍵と、前記情報を開発するときに利用すべき暗号復号鍵である開発鍵とを保持する暗号復号鍵保持手段、
前記暗号復号鍵保持手段が保持している前記暗号復号鍵を識別する鍵識別情報と、前記暗号復号鍵が前記開発鍵であるか前記製品鍵であるかを示す鍵種情報とを対応付けて保持する鍵種テーブルと
をさらに備え、
前記制御手段は、前記鍵種テーブルにおいて、前記復号化手段が利用した前記暗号復号鍵に対応付けられている鍵種情報を特定し、特定した鍵種情報に基づいて、前記情報取得手段が取得した前記情報に対する処理を制御することを特徴とする請求項１から５のいずれか一項に記載のマイクロプロセッサ。
【請求項７】
前記復号化手段が復号化を行うときに利用すべき前記暗号復号鍵の指定を受け付ける暗号復号鍵指定手段をさらに備え、
前記復号化手段は、前記復号鍵指定手段によって指定された前記暗号復号鍵を利用して前記復号化を行い、
前記制御手段は、前記復号鍵指定手段によって指定された前記暗号復号鍵に基づいて、前記情報取得手段が取得した前記情報に対する処理を制御することを特徴とする請求項１から６のいずれか一項に記載のマイクロプロセッサ。
【請求項８】
前記情報取得手段は、前記暗号化情報と共に、前記復号化手段が復号化処理において利用すべき前記暗号復号鍵を取得し、
前記復号化手段は、前記情報取得手段が取得した前記暗号復号鍵を利用して復号化を行い、
前記制御手段は、前記情報取得手段が取得した前記暗号復号鍵に基づいて、前記情報取得手段が取得した前記情報に対する処理を制御することを特徴とする請求項１か６のいずれか一項に記載のマイクロプロセッサ。
【請求項９】
前記復号化手段が復号化によって得た前記平文情報を保持する平文情報保持手段と、
前記平文情報保持手段に保持されている前記平文情報へのアクセス要求を取得するアクセス要求取得手段と、
前記アクセス要求取得手段が取得した前記アクセス要求の要求種別を特定する要求種別特定手段と
をさらに備え、
前記制御手段は、前記プロセッサコアが実行すべき前記平文情報を、前記要求種別特定手段が特定した前記要求種別、および前記復号手段が前記復号化情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記平文情報へのアクセスを制御することを特徴とする請求項１から８のいずれか一項に記載のマイクロプロセッサ。
【請求項１０】
前記制御手段は、前記要求種別特定手段が特定した前記要求種別が、予め登録されている登録要求種別以外の要求種別である場合に、前記平文情報へのアクセスを制限することを特徴とする請求項９に記載のマイクロプロセッサ。
【請求項１１】
前記制御手段は、前記要求種別特定手段が特定した前記要求種別が予め登録されている登録要求種別以外の要求種別であって、かつ前記平文情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記平文情報へのアクセスを制御することを特徴とする請求項１０に記載のマイクロプロセッサ。
【請求項１２】
前記制御手段は、前記要求種別および前記暗号復号鍵に基づいて、前記平文情報へのアクセスを禁止することを特徴とする請求項１から１１のいずれか一項に記載のマイクロプロセッサ。
【請求項１３】
前記制御手段は、前記要求種別および前記暗号復号鍵に基づいて、前記要求種別へ前記平文情報を出力するか、前記平文情報を暗号化した暗号化情報を出力するかを決定することを特徴とする請求項１から１１のいずれか一項に記載のマイクロプロセッサ。
【請求項１４】
前記制御手段は、前記要求種別および前記保護属性に基づいて、前記平文情報への上書きを制限することを特徴とする請求項１から１１のいずれか一項に記載のマイクロプロセッサ。
【請求項１５】
前記平文情報保持手段は、内部メモリに設けられており、
前記登録要求種別として、前記プロセッサコアによる命令フェッチが登録されており、
前記アクセス制御手段は、前記要求種別特定手段が特定した前記要求種別が前記プロセッサコアによる命令フェッチ以外である場合にアクセスを制限することを特徴とする請求項９に記載のマイクロプロセッサ。
【請求項１６】
前記制御手段は、前記要求種別および前記暗号復号鍵に基づいて、前記プロセッサコアが実行している前記平文情報へのアクセスを制限することを特徴とする請求項９に記載のマイクロプロセッサ。
【請求項１７】
前記制御手段は、前記暗号復号鍵に基づいて、前記情報取得手段が取得した前記情報に対する暗号化および復号化を制御することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項１８】
前記情報取得手段が取得した情報を保持するキャッシュメモリをさらに備え、
前記制御手段は、前記情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記キャッシュメモリが保持する前記情報の読み出しを制御することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項１９】
前記情報取得手段が取得した情報を前記プロセッサコアが実行しているときに、前記プロセッサコアが実行している前記情報の退避および復帰を管理するセキュアコンテキストスイッチ手段をさらに備え、
前記制御手段は、前記情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記コンテキストスイッチ手段における情報の退避および復帰を制御することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項２０】
公開鍵を利用して暗号化された配布鍵を取得する配布鍵取得手段と、
前記配布鍵取得手段が取得した前記配布鍵を前記公開鍵を利用して復号化して前記暗号復号鍵を得る鍵復号化手段と
をさらに備え、
前記制御手段は、前記鍵復号化手段が前記暗号復号鍵を得たときに利用した前記公開鍵に基づいて前記情報に対する処理を制御することを特徴とする請求項１に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサコアを備えたマイクロプロセッサに関するものである。
【背景技術】
【０００２】
近年、マイクロプロセッサ内部にデバッガインタフェースを内蔵し、それとデバッガを接続することによって、プロセッサ内部の状態を解析して、ソフトウェア開発時のデバッグを容易にする方法が知られている。
【０００３】
この方法を利用することにより、デバッガからプロセッサに内蔵されたデバッガインタフェースを経由して、プロセッサ内部のレジスタやメモリ等のリソースにアクセスすることができる。また、プロセッサで動作しているプログラムのステップ実行をすることができるなどの利点がある。
【０００４】
しかし、デバッガインタフェースを内蔵することにより、ソフトウェア開発者がプログラムの動作を検証しやすくなる一方で、他のソフトウェア開発者やユーザがソフトウェアを解析しやすくなるといった問題がある。
【０００５】
例えば、開発したソフトウェアに機密情報が含まれる場合には、ソフトウェアユーザが、当該ソフトウェアを解析するのを防ぐ必要がある。さらに、他のソフトウェア開発者による解析も防ぐ必要がある。
【０００６】
そのための技術として、復号化の際に選択した鍵に基づいて、デバッグ機能を禁止する方法や、プロセッサ内部のメモリに格納された保護対象のプログラムがデバッグ対象として選択された場合に、デバッグ機能の動作を禁止する方法が提案されている（例えば、「特許文献１」参照）。
【０００７】
【特許文献１】特開２００２−２４４７５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、所定のプログラム等に対するデバッグを禁止した場合には、当該プログラム等のデバッグを全く行うことができず不便である。また、よりデバッグ機能の有効無効をより適切に制御することにより、デバッグ機能を向上させることが望まれている。
【０００９】
本発明は、上記に鑑みてなされたものであって、より適切にデバッガ機能を制御することにより、処理対象となる情報を保護することのできるマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、プロセッサコアを備えたマイクロプロセッサであって、前記プロセッサコアが利用すべき情報を外部から取得する情報取得手段と、前記情報取得手段が取得した情報が暗号化された暗号化情報である場合に、当該暗号化情報を暗号復号鍵を利用して復号化し、平文情報を得る復号化手段と、前記復号化手段が前記暗号化情報を復号化するときに利用する前記暗号復号鍵に基づいて、前記情報取得手段が取得した前記情報に対する処理を制御する制御手段とを備えたことを特徴とする。
【発明の効果】
【００１１】
本発明にかかるマイクロプロセッサは、プロセッサコアが利用すべき情報が暗号化された暗号化情報である場合に、復号化手段が当該暗号化情報を暗号復号鍵を利用して復号化し、平文情報を得る。そして、制御手段は、復号手段が前記暗号化情報を復号化するときに利用した暗号復号鍵に基づいて、情報に対する処理を制御するので、処理対象となる情報が第三者から不正に読み出されるのを防止しつつ、必要に応じて当該情報に対する処理を施すことができるという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明にかかるマイクロプロセッサの実施の形態を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１３】
（実施の形態１）
図１は、本実施の形態にかかるプログラム開発システム４の全体を示す図である。プログラム開発システム４は、プロセッサ開発ベンダ１と、ソフトウェアベンダ２と、ユーザ端末３とを備えている。プロセッサ開発ベンダ１は、ソフトウェアベンダ２およびユーザ端末３にマイクロプロセッサ１００を販売する。
【００１４】
さらに、プロセッサ開発ベンダ１は、ソフトウェアベンダ２がデバッグ時に用いる開発鍵７００と、第１製品鍵７１１と、第２製品鍵７１２と、第３製品鍵７１３とを準備する。これらの鍵はあらかじめマイクロプロセッサ１００に内蔵されている。
【００１５】
ここで、開発鍵とは、ソフトウェアベンダ２がプログラム等を開発するときに利用する暗号復号鍵である。また、製品鍵とは、ソフトウェアベンダ２が開発したソフトウェアを外部に提供するときに利用する暗号復号鍵である。本実施の形態においては、開発鍵と製品鍵とを別個に準備し、同一のプログラムから開発鍵で暗号化した開発鍵暗号化プログラムと製品鍵で暗号化した製品鍵暗号化プログラムとを得る。
【００１６】
そして、ソフトウェアベンダ２に対して、開発鍵と、所定の製品鍵と、それらに対応する鍵ＩＤを通知する。本実施の形態においては、開発鍵７００と第１製品鍵７１１と、対応する鍵ＩＤ １，２を通知する。
【００１７】
いずれの鍵を通知するかは、プロセッサ開発ベンダ１とソフトウェアベンダ２との契約により決定してもよい。具体的には、所定のソフトウェアベンダに対して、第１製品鍵７１１と対応する鍵ＩＤ２を通知し、他のソフトウェアベンダに対して、第２製品鍵７１２と対応する鍵ＩＤ３を通知することとしてもよい。
【００１８】
このように、ソフトウェアベンダごとに異なる製品鍵を通知することにより、あるソフトウェアベンダが開発したソフトウェアを他のソフトウェアベンダが解析することを防ぐことができる。
【００１９】
また、開発鍵および製品鍵の数は本実施の形態に限定されるものではない。複数の開発鍵を準備してもよい。また、製品鍵は１つであってもよい。
【００２０】
ソフトウェアベンダ２は、システム１０を備えている。システム１０は、主にマイクロプロセッサ１００と外部メモリ２００とを備えている。ソフトウェアベンダ２は、プロセッサ開発ベンダ１から取得した開発鍵７００と第１製品鍵７１１とを保持している。
【００２１】
ソフトウェアベンダ２は、ソフトウェアを開発する際に、デバッガ５００を接続することにより、開発中のソフトウェアのデバッグを行う。このとき、プロセッサ開発ベンダ１
から取得した開発鍵７００でソフトウェアの暗号化および復号化を行う。
ソフトウェアベンダ２は、ソフトウェアを製品として出荷するとき、第一製品鍵７１１に対応するＩＤ２と、第一製品鍵７１１で暗号化したプログラムをユーザ端末３に提供する。
【００２２】
ユーザ端末３は、ソフトウェアベンダ２が提供するＩＤ２を設定することにより、第一製品鍵７１１で暗号化されたプログラムを実行することが出来る。なお、ユーザ端末３の構成は、ソフトウェアベンダ２の構成と同様である。
【００２３】
図２は、ソフトウェアベンダ２のシステム１０の全体構成を示すブロック図である。システム１０は、マイクロプロセッサ１００と、外部メモリ２００と、ユーザインターフェース３００と、外部バス４００と、デバッガ５００とを備えている。
【００２４】
マイクロプロセッサ１００は、プロセッサコア１１０と、バスインターフェースユニット（ＢＩＵ）１３０と、デバッガインタフェース１４０と、デバッガアクセス制御部１４２とを備えている。ＢＩＵ１３０は、鍵ＩＤレジスタ１３２と、鍵テーブル１３３と、暗号復号器１３４と、保護属性付与部１３５とを有している。
【００２５】
外部メモリ２００は、プロセッサコア１１０の実行対象となるプログラムを保持している。なお、外部メモリ２００は、平文プログラム、開発鍵暗号化プログラム、または第１製品鍵暗号化プログラムを保持している。
【００２６】
ここで、平文プログラムとは、暗号化の施されていないプログラムである。また、開発鍵暗号化プログラムとは、開発鍵７００で暗号化されたプログラムである。第１製品鍵暗号化プログラムとは、第１製品鍵７１１で暗号化されたプログラムである。
【００２７】
ＢＩＵ１３０は、外部バス４００を介して外部メモリ２００から平文プログラム、開発鍵暗号化プログラム、または第１製品鍵暗号化プログラムを取得する。ＢＩＵ１３０は、暗号化プログラムを取得した場合には、暗号化プログラムを復号化し、平文プログラムとしてプロセッサコア１１０に送る。また、平文プログラムを取得した場合には、そのままプロセッサコア１１０に送る。プロセッサコア１１０は、ＢＩＵ１３０から取得した平文プログラムを実行する。デバッガインタフェース１４０は、外部でデバッガ５００に接続されている。デバッガアクセス制御部１４２は、デバッガ５００からのアクセスを制御する。
【００２８】
ＢＩＵ１３０は、鍵ＩＤレジスタ１３２と、鍵テーブル１３３と、暗号復号器１３４と、保護属性付与部１３５とを有している。
【００２９】
鍵ＩＤレジスタ１３２には、外部メモリ２００から読み出したプログラムを復号化するときに利用する暗号復号鍵を識別する鍵ＩＤが設定される。ここで、鍵ＩＤの値は、ユーザインターフェース３００を介し、ユーザによって設定される。また、外部メモリ２００から読み出すプログラムが暗号化されていない平文プログラムである場合には、鍵ＩＤレジスタ１３２に「０」が設定される。
【００３０】
ここで、本実施の形態にかかるユーザインターフェース３００は、特許請求の範囲に記載の暗号復号鍵指定手段に相当する。
【００３１】
鍵テーブル１３３は、鍵ＩＤと暗号復号鍵とを対応付けて保持している。図３は、鍵テーブル１３３のデータ構成を模式的に示している。鍵テーブル１３３は、暗号復号化に利用する暗号復号鍵を識別する鍵ＩＤと、暗号復号鍵とを対応付けて保持している。本実施
の形態における鍵テーブル１３３は、開発鍵７００と、第１製品鍵７１１と、第２製品鍵７１２と、第３製品鍵７１３とを保持している。そして、開発鍵７００は、鍵ＩＤ「１」に対応付けられている。鍵テーブル１３３を利用することにより、鍵ＩＤレジスタ１３２に設定された鍵ＩＤに対応する暗号復号鍵を特定することができる。
【００３２】
ここで、本実施の形態にかかる鍵テーブル１３３は、特許請求の範囲に記載の暗号復号鍵保持手段および鍵種テーブルに対応する。
【００３３】
なお、鍵テーブル１３３に保持される鍵ＩＤは「０」以外の値である。これにより、鍵ＩＤレジスタ１３２に設定されている値が「０」か否かによって、対象となるプログラムが平文プログラムか否かを特定することができる。
【００３４】
鍵ＩＤレジスタ１３２に「０」以外が設定されている場合には、外部メモリ２００から取得したプログラムは暗号化された暗号化プログラムであるので、暗号復号器１３４は、鍵テーブル１３３を利用して鍵ＩＤレジスタ１３２に設定された鍵ＩＤに対応する暗号復号鍵を特定する。そして、特定した暗号復号鍵を利用して、暗号化プログラムを復号化して、平文プログラムを得る。暗号復号器１３４はまた、鍵ＩＤレジスタ１３２に「０」がセットされている場合には、平文プログラムであるので復号化を行わない。
【００３５】
保護属性付与部１３５は、外部メモリ２００から取得したプログラムの保護属性を付与する。図４は、保護属性付与部１３５が保護属性を付与するときに利用する保護属性決定テーブル１３６を示している。
【００３６】
図４に示すように保護属性付与部１３５は、鍵ＩＤレジスタ１３２に「０」がセットされている場合は、対応するプログラムに対して非保護を示す保護属性「０」を付与する。鍵ＩＤレジスタ１３２に「１」がセットされている場合は、同様に対応する平文プログラムに対して非保護を示す保護属性「０」を付与する。また、「０」でも「１」でもない値がセットされている場合には、対応する平文プログラムに対して保護を示す保護属性「１」を付与する。
【００３７】
すなわち、製品鍵暗号化プログラムに対して保護を示す保護属性を付与し、暗号化されていない平文プログラムおよび開発鍵復号化プログラムに対して、非保護を示す保護属性を付与する。このように、製品鍵復号化プログラムのみに対して、保護を示す保護属性を付与することができる。
【００３８】
デバッガアクセス制御部１４２は、デバッガインタフェース１４０からプログラムへのアクセスを、保護属性に基づいて制御する。具体的には、デバッガアクセス制御部１４２は、保護を示す保護属性が付与されたプログラムに関する情報へのアクセスを禁止する。
【００３９】
本実施の形態にかかるソフトウェアベンダ２は、同一のプログラムを開発鍵暗号化プログラムおよび製品鍵暗号化プログラムとして保持することができる。そして、開発鍵暗号化プログラムおよび製品鍵暗号化プログラムには、それぞれ非保護および保護を示す保護属性が付与されている。すなわち、デバッガアクセス制御部１４２は、開発鍵暗号化プログラムへのアクセスを許可しつつ、製品鍵暗号化プログラムへのアクセスのみを禁止することができる。これにより、平文、あるいは、開発鍵で暗号化されたプログラムに対してのみ、デバッガ５００はデバッグを行うことができる。
【００４０】
図５は、ソフトウェアベンダ２が開発中のプログラムを外部メモリ２００からマイクロプロセッサ１００に読み込むときの読込処理を示すフローチャートである。まず、ユーザは、プロセッサコア１１０に実行させるべきプログラムを外部メモリ２００に格納する。
そして、プログラム実行前に、ＢＩＵ１３０の鍵ＩＤレジスタ１３２に、鍵ＩＤを設定する(ステップＳ１００，ステップＳ１０２)。ここで、暗号復号鍵の設定は、ユーザインターフェース３００を介してユーザからの指示により行われる。
【００４１】
プロセッサコア１１０は、命令フェッチによりアドレスＸのデータを読み出し要求をＢＩＵ１３０へ送る（ステップＳ１０４）。
【００４２】
ＢＩＵ１３０は外部メモリ２００からアドレスＸに対応するプログラムＥ２[Ｃ(Ｘ)]を読み出す（ステップＳ１０６）。このとき鍵ＩＤレジスタ１３２に設定されている値が「０」以外である場合は(ステップＳ１０８，Ｎｏ)、暗号復号器１３４は、鍵テーブル１３３から得られた暗号復号鍵で読み出した暗号化プログラムＥ２[Ｃ(Ｘ)]に対して復号処理を施し、平文プログラムＣ（Ｘ）を得る（ステップＳ１１０）。このように、鍵ＩＤレジスタ１３２に「０」以外の値が設定されている場合には、対象となるプログラムは暗号化されているので、復号化により平文プログラムを得る。
【００４３】
一方、鍵ＩＤレジスタ１３２に設定されている値が「０」である場合は(ステップＳ１
０８，Ｙｅｓ)、復号化処理を行わず、後述のステップＳ１１２へ進む。このように、鍵
ＩＤレジスタ１３２に「０」が設定されている場合には、対象となるプログラムは、平文であるので、復号化は行う必要がない。
【００４４】
一方、保護属性付与部１３５は、鍵ＩＤレジスタ１３２の値に基づいて、内部メモリ１２０に保持させるべき平文プログラムに保護属性を付与する（ステップＳ１１２）。
【００４５】
具体的には、保護属性付与部１３５は、鍵ＩＤレジスタ１３２に設定されている値が「０」である場合、すなわち対象が平文プログラムである場合には、非保護を示す保護属性「０」を付与する。また、鍵ＩＤレジスタ１３２に設定されている値が「１」である場合、すなわち対象が開発鍵暗号化プログラムとして取得したプログラムである場合には、同様に、非保護を示す保護属性「０」を付与する。また、鍵ＩＤレジスタ１３２に設定されている値が「０」でも「１」でもない場合、すなわち対象が製品鍵暗号化プログラムである場合には、保護を示す保護属性「１」を付与する。
【００４６】
次に、暗号復号器１３４は平文プログラムをプロセッサコア１１０に送る（ステップＳ１１４）。以上の処理により、プロセッサコア１１０がプログラムを実行可能な状態となる。
【００４７】
具体的には、ソフトウェアベンダは、デバッグ機能を利用する製品開発時には、まずデバッグ専用の開発鍵７００で暗号化した開発鍵暗号化プログラムを格納する。一方、プログラムの出荷時など製品開発時以外のときは、第１製品鍵７１１で暗号化した製品鍵暗号化プログラムを格納する。
【００４８】
開発鍵暗号化プログラムの場合には、鍵ＩＤレジスタ１３２に鍵ＩＤ「１」を設定するので(ステップＳ１０２)、暗号復号器１３４は、開発鍵暗号化プログラムを復号化して平文プログラムを得る(ステップＳ１０８，Ｎｏ、ステップＳ１１０)。また、保護属性付与部１３５は、平文プログラムに非保護を示す保護属性を付与する。
【００４９】
第１製品鍵暗号化プログラムの場合には、鍵ＩＤレジスタ１３２に鍵ＩＤ「２」を設定する(ステップＳ１０２)。この場合も、暗号復号器１３４は、第１製品鍵暗号化プログラムを復号化して平文プログラムを得る(ステップＳ１０８，Ｎｏ、ステップＳ１１０)。また、保護属性付与部１３５は、平文プログラムに保護を示す保護属性を付与する(ステッ
プＳ１１２)。
【００５０】
図６は、図５を参照しつつ説明した処理によってプロセッサコア１１０に送られた平文プログラムをデバッガ５００が読み出す場合の読出処理を説明するためのフローチャートである。
【００５１】
デバッガ５００は、デバッガインタフェース１４０を介してデバッガアクセス制御部１４２に対し、プロセッサコア１１０に保持されているレジスタ情報の読出要求を送る。デバッガアクセス制御部１４２は、デバッガインタフェース１４０を介してデバッガ５００からの読出要求を取得すると（ステップＳ２００）、保護属性付与部１３５から読出要求にかかるプログラムの保護属性を取得する。
【００５２】
当該プログラムに非保護を示す保護属性が付与されている場合には(ステップＳ２０２
，Ｎｏ)、デバッガアクセス制御部１４２は、プロセッサコア１１０に対してレジスタ情
報の読出要求を出力する(ステップＳ２０４)。そして、デバッガアクセス制御部１４２は、読出要求に対する返信としてプロセッサコア１１０からレジスタ情報を取得する(ステ
ップＳ２０６)。次に、デバッガアクセス制御部１４２は、プロセッサコア１１０から取
得したプログラムをデバッガインタフェース１４０を介してデバッガ５００に提供する(
ステップＳ２０８)。
【００５３】
一方、ステップＳ２０２において、読出要求にかかるプログラムに保護を示す保護属性が付与されている場合には(ステップＳ２０２，Ｙｅｓ)、デバッガ５００からの要求を無効化する(ステップＳ２１０)。以上で、読出処理が完了する。
【００５４】
なお、他の例としては、デバッガ５００からの要求を無効化するのにかえて、デバッガ５００に対してエラーを出力してもよい。
【００５５】
また、他の例としては、暗号化した状態でプログラムを提供することとしてもよい。具体的には、開発鍵暗号化プログラムには、非保護を示す保護属性が付与されているので(
ステップＳ２０２，Ｎｏ)、デバッガアクセス制御部１４２はレジスタ情報の読み出しを
許可し、デバッガ５００に平文のレジスタ値を出力する (ステップＳ２０４〜ステップＳ２０８)。一方、第１製品鍵暗号化プログラムには、保護を示す保護属性が付与されてい
るので(ステップＳ２０２，Ｙｅｓ)、デバッガアクセス制御部１４２は、レジスタ情報を読み出し、第１製品鍵で暗号化した後、デバッガ５００に暗号化したレジスタ情報を出力する 。
【００５６】
このように、デバッガアクセス制御部１４２は、保護を示す保護属性が付与されたプログラムが利用するレジスタ情報をデバッガ５００に読み出すのを禁止するので、第三者が、デバッガ５００を利用して不正に平文プログラムの解析を防止することができる。
【００５７】
また、開発鍵で暗号化された開発鍵暗号化プログラムはデバッガ５００に解析されることを前提として準備されたプログラムである。開発鍵暗号化プログラムには非保護を示す保護属性が付与されおり、デバッガ５００は、開発鍵暗号化プログラムを取得することができる。
【００５８】
したがって、同一のプログラムにかかる第１製品鍵暗号化プログラムへのデバッガ５００からの解析を禁止する一方で、開発鍵暗号化プログラムへのデバッガ５００からの解析を許可することにより、デバッガ５００によるプログラムの解析を制限することなく、デバッガ５００を利用して第三者が不正にプログラムを解析するのを防止することができる。
【００５９】
さらに、ソフトウェアベンダ２が開発したプログラムは暗号化した状態で出荷する場合が多い。そこで、プログラム開発時においても、暗号化プログラムを対象とするのが望ましい。これにより、復号処理における遅延等を考慮した開発を行うことができるからである。
【００６０】
本実施の形態にかかるソフトウェアベンダ２は、第１製品鍵暗号化プログラムを利用してソフトウェアを開発することができるので、復号処理における遅延等を考慮した開発を行うことができる。
【００６１】
次に、ユーザ端末３における処理について説明する。ユーザ端末３における処理は図５および図６を参照しつつ説明したソフトウェアベンダ２の処理と同様である。
【００６２】
以下、ユーザ端末３がソフトウェアベンダ２から取得したプログラムをマイクロプロセッサ１００に読み込む読込処理について具体的に説明する。
【００６３】
まず、ソフトウェアベンダ２において開発されたプログラムを第１製品鍵７１１で暗号化された第１製品鍵暗号化プログラムとしてソフトウェアベンダ２から取得する。そして、第１製品鍵暗号化プログラムを外部メモリ２００に格納する。
【００６４】
第１製品鍵暗号化プログラム実行前に、ＢＩＵ１３０の鍵ＩＤレジスタ１３２に鍵ＩＤを設定する(ステップＳ１００，Ｓ１０２)。ソフトウェアベンダ２から取得したプログラムは第１製品鍵７１１で暗号化された第１製品鍵暗号化プログラムである。したがって、暗号復号器１３４は、第１製品鍵暗号化プログラムを復号化し、平文プログラムを得る(
ステップＳ１０８，Ｎｏ、ステップＳ１１０)。次に、ステップＳ１１２において、保護
属性付与部１３５は、平文プログラムに対して保護を示す保護属性を付与する。
【００６５】
なお、これ以外のユーザ端末３のプログラムを取得したときの処理は、図５を参照しつつ説明したソフトウェアベンダ２の処理と同様である。
【００６６】
次に、図６を参照しつつユーザ端末３のデバッガ５００が実行中のプログラムのレジスタ情報を読み出す場合の読出処理について説明する。
【００６７】
デバッガアクセス制御部１４２は、デバッガインタフェース１４０を介してデバッガ５００からの読出要求を取得すると(ステップＳ２００)、保護属性付与部１３５から読出要求にかかるプログラムの保護属性を取得する。ここで、読出要求にかかるプログラムは第１製品鍵暗号化プログラムであって、保護を示す保護属性が付与されているので(ステッ
プＳ２０２，Ｙｅｓ)、ステップＳ２１０に進む。すなわち、デバッガ５００からの要求
は無効化される。
【００６８】
このように、ユーザ端末３には、第１製品鍵７１１で暗号化された第１製品鍵暗号化プログラムが提供されるので、ユーザ端末３においてデバッガ５００を利用して不正にプログラムが解析されるのを防止することができる。
【００６９】
本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【００７０】
そうした第１の変更例としては、実施の形態１にかかるソフトウェアベンダ２およびユーザ端末３が保持する開発鍵７００および第１製品鍵７１１は、プロセッサ開発ベンダ１が発行したものであったが、開発鍵７００の値はソフトウェアベンダ２およびユーザ端末３のユーザが変更してもよい。この場合、ユーザは、ユーザインターフェース３００を介
して、任意の開発鍵を設定する。また、この場合、開発鍵用の鍵テーブルと、製品鍵用の鍵テーブルとをそれぞれ別個に設けてもよい。
【００７１】
ここで、本変更例にかかるユーザインターフェース３００は、特許請求の範囲に記載の開発鍵生成手段に相当する。
【００７２】
これにより、暗号化プログラムを復号化する際に生じる遅延が暗号復号鍵の値によって異なった場合でも、開発者は、自由に暗号復号鍵の値を設定できるので、遅延によるバグの解析をより正確に行うことができる。
【００７３】
また、製品鍵と同一の鍵値を設定することもできる。このように、製品鍵と同一の鍵値を設定することにより、プログラムを製品として出荷する場合と同一の条件でソフトウェア開発を行うことができる。
製品鍵と同一の鍵値を設定しても、ユーザ３等が保持するプロセッサ内部の製品鍵は同一の鍵とならないようにすることにより、同一の鍵値を設定することによるセキュリティ上の問題は発生しない。
【００７４】
第２の変更例としては、実施の形態１においては、保護属性付与部１３５がプログラムに対して保護属性として「０」または「１」を付与したが、プログラムの保護属性が特定できればよく、そのための処理はこれに限定されるものではない。例えば、保護属性として、鍵ＩＤレジスタ１３２に設定される値を利用してもよい。この場合には、デバッガアクセス制御部１４２は鍵ＩＤの値から保護属性を特定する処理を行う。また、他の例としては、暗号復号鍵の値を保護属性として利用してもよい。
【００７５】
第３の変更例としては、実施の形態１においては、デバッガアクセス制御部１４２は、プロセッサコア１１０とは別に独立して設けられていたが、これにかえてデバッガアクセス制御部１４２をプロセッサコア１１０に設けてもよい。
【００７６】
（実施の形態２）
図７は、実施の形態２にかかるソフトウェアベンダ２のシステム１０を示している。実施の形態２にかかるソフトウェアベンダ２のシステム１０は、ＤＭＡコントローラ６００と、内部メモリ１２０と、プロセッサコア１１０と、デバッガインタフェース１４０とを備えている。
【００７７】
デバッガインタフェース１４０は、外部でデバッガ５００に接続されている。そして、デバッガ５００からの要求に対して、プロセッサコア１１０、内部メモリ１２０、ＤＭＡコントローラ６００等へ要求を振り分ける。また、各部からの要求に対応した実行結果を受け取ると、実行結果をデバッガ５００に返す。
【００７８】
ＤＭＡコントローラ６００は、鍵ＩＤレジスタ１３２と、鍵テーブル１３３と、暗号復号器１３４と、保護属性付与部１３５を有している。ここで、ＤＭＡコントローラ６００の各部の機能構成は、実施の形態１にかかるＢＩＵ１３０の各部の機能構成と同様である。すなわち、ＤＭＡコントローラ６００の鍵テーブル１３３は、開発鍵７００と、第１製品鍵７１１と、第２製品鍵７１２と、第３製品鍵７１３とを保持している。
【００７９】
また、暗号復号器１３４は、復号化した平文プログラムを内部メモリ１２０に保持させる。保護属性付与部１３５は、平文プログラムに付与した保護属性を内部メモリ１２０に保持させる。そして、プロセッサコア１１０は、内部メモリ１２０に保持されている平文プログラムを読み出して実行する。
【００８０】
内部メモリ１２０は、プログラムを保持する命令メモリ部１２１と、データを保持するデータメモリ部１２５とを有している。さらに、命令メモリ部１２１は、保護属性メモリ１２２と、命令メモリ１２３と、命令メモリアクセス制御部１２４とを有している。
【００８１】
命令メモリ１２３は、暗号復号器１３４から取得した平文プログラムを保持する。保護属性メモリ１２２は、命令メモリ１２３に保持されている平文プログラムに対して付与された保護属性を保持する。命令メモリアクセス制御部１２４は、外部から命令メモリ１２３へのアクセスを制御する。
【００８２】
図８は、命令メモリアクセス制御部１２４のアクセス制御のルールを模式的に示している。図８に示すように、プロセッサコア１１０による命令フェッチであって、かつ要求されているプログラムに保護を示す保護属性が付与されている場合には、アクセスを許可する。また、プロセッサコア１１０による命令フェッチ以外のアクセス要求であって、かつ要求されているプログラムに保護を示す保護属性が付与されている場合には、アクセスを制限する。すなわち、エラーを出力する。また、要求されているプログラムに非保護を示す保護属性が付与されている場合には、要求種別に関わらずアクセスを制限する。
【００８３】
このように、特定の要求種別以外の要求種別からのアクセスを制限することにより、第三者が不正に平文プログラムを読み出すのを防止することができる。
【００８４】
また、保護を示す保護属性が付与されたプログラムへのアクセスを制限することにより、製品鍵で暗号化されたプログラムが不正に読み出されるのを防止することができる。
【００８５】
図９は、ソフトウェアベンダ２が開発中のプログラムを外部メモリ２００から取得するときの処理を示すフローチャートである。まず、ユーザは、プロセッサコア１１０に実行させるべきプログラムを外部メモリ２００に格納する。ここで、プログラムを外部メモリ２００上のアドレスＸ〜Ｙに格納するとする。
【００８６】
また、プログラム実行前に、ＤＭＡコントローラ６００の鍵ＩＤレジスタ１３２に、鍵ＩＤを設定する(ステップＳ１００，ステップＳ１０２)。ここで、暗号復号鍵の設定は、ユーザインターフェース３００を介してユーザからの指示により行われる。
【００８７】
プロセッサコア１１０は、ＤＭＡ転送要求をＤＭＡコントローラ６００へ送る（ステップＳ１０４）。ここで、ＤＭＡ転送要求は、外部メモリ２００上のアドレスＸ〜Ｙのデータを内部メモリに転送することを要求する情報である。
【００８８】
ＤＭＡコントローラ６００は外部メモリ２００からアドレスＸ〜Ｙに対応するプログラムＥ２[Ｃ(Ｘ〜Ｙ)]を読み出す（ステップＳ１０６）。以下、ステップＳ１０８からステップＳ１１２までの処理は、実施の形態１にかかるソフトウェアベンダ２におけるステップＳ１０８からステップＳ１１２までの処理と同様である。
【００８９】
ステップＳ１１２において保護属性が付与されると、暗号復号器１３４は、平文プログラムを内部メモリ１２０に送る（ステップＳ１５０）。さらに、保護属性付与部１３５は、平文プログラムに付与された保護属性を内部メモリ１２０に送る（ステップＳ１５２）。
【００９０】
内部メモリ１２０は、ＤＭＡコントローラ６００から送られてきた復号結果である、平文プログラムＣ(Ｘ〜Ｙ)を命令メモリ１２３に保持させる（ステップＳ１５４）。また、内部メモリ１２０は、保護属性を保護属性メモリ１２２に保持させる（ステップＳ１５６）。
【００９１】
そして、ＤＭＡコントローラ６００から内部メモリ１２０への平文プログラムの転送が完了すると、プロセッサコア１１０に対して、ＤＭＡ転送が完了したことを通知する（ステップＳ１５８）。以上の処理により、内部メモリ１２０にプログラムが保存され、プロセッサコア１１０がプログラムを実行可能な状態となる。
【００９２】
次に、プロセッサコア１１０は、命令フェッチにより、プログラムの読み出しを要求する(ステップＳ１６０)。内部メモリ１２０は、読出要求を取得すると、要求されたプログラムをプロセッサコア１１０に出力する(ステップＳ１６２)。
【００９３】
対象が開発鍵暗号化プログラムである場合には、ソフトウェアベンダは、鍵ＩＤレジスタ１３２に鍵ＩＤ「１」を設定する(ステップＳ１０２)。したがって、暗号復号器１３４は、復号化処理を行い平文プログラムを得る(ステップＳ１０８，Ｎｏ、ステップＳ１１
０)。そして、保護属性付与部１３５は、平文プログラムに非保護を示す保護属性を付与
する。
【００９４】
一方、対象が第１製品鍵暗号化プログラムである場合には、ソフトウェアベンダは、鍵ＩＤレジスタ１３２に鍵ＩＤ「２」を設定する(ステップＳ１０２)。この場合も、暗号復号器１３４は復号化処理を行い、平文プログラムを得る(ステップＳ１０８，Ｎｏ、ステ
ップＳ１１０)。そして、保護属性付与部１３５は、平文プログラムに保護を示す保護属
性を付与する(ステップＳ１１２)。
【００９５】
図１０は、図８を参照しつつ説明した処理によって内部メモリ１２０に保持されたプログラムを読み出す場合の読出処理を説明するためのフローチャートである。内部メモリ１２０の命令メモリアクセス制御部１２４は、命令メモリ１２３に保存されているプログラムの読み出しを示す読出要求を取得すると（ステップＳ２００）、読出要求を出力した要求種別がプロセッサコア１１０による命令フェッチか否かを特定する。具体的には、例えば、物理的な配線によって要求種別を特定してもよい。要求種別がプロセッサコア１１０による命令フェッチである場合には(ステップＳ２０２，Ｙｅｓ)、命令メモリアクセス制御部１２４は、命令メモリ１２３に保存されている平文プログラムをプロセッサコア１１０に出力する（ステップＳ２１２）。
【００９６】
要求種別がプロセッサコア１１０による命令フェッチ以外である場合には(ステップＳ
２０２，Ｎｏ)、暗号復号器１３４は、要求されている平文プログラムの保護属性を特定
する(ステップＳ２０４)。要求されている平文プログラムに保護を示す保護属性が付与されている場合には(ステップＳ２０６，Ｙｅｓ)、エラーを出力する(ステップＳ２１０)。一方、要求されている平文プログラムに非保護を示す保護属性が付与されている場合には(ステップＳ２０６，Ｎｏ)、平文プログラムを出力する(ステップＳ２１２)。以上で読出処理が完了する。
【００９７】
ここで、プロセッサコア１１０が命令フェッチによって内部メモリ１２０の読出要求を行った場合について具体的に説明する。内部メモリ１２０にある命令メモリアクセス制御部１２４は、コアからの命令フェッチ要求であると判断すると、図８を参照しつつ説明したルールにしたがい、命令メモリ１２３から読み出した平文プログラムＣ(Ｘ〜Ｙ)をプロセッサコア１１０に送る(ステップＳ２０２，Ｙｅｓ、ステップＳ２１２)。そして、プロセッサコア１１０は、取得した平文プログラムを実行する。
【００９８】
要求種別がプロセッサコア１１０による命令フェッチ以外であって(ステップＳ２０２
，Ｎｏ)、かつ保護属性が非保護を示す「０」である場合には、（ステップＳ２０６，Ｎ
ｏ)、平文プログラムを出力する(ステップＳ２１２)。
【００９９】
要求種別がプロセッサコア１１０による命令フェッチ以外であって(ステップＳ２０２
，Ｎｏ)、かつ保護属性が保護を示す「１」である場合には(ステップＳ２０６，Ｙｅｓ)
、エラーを出力する(ステップＳ２１０)。
【０１００】
対象が開発鍵暗号化プログラムである場合には、非保護を示す保護属性が付与されているので(ステップＳ２０２，Ｎｏ)、命令メモリアクセス制御部１２４は開発鍵暗号化プログラムを復号化して得た平文プログラムへのアクセスを許可する(ステップＳ２０４〜ス
テップＳ２０８)。
【０１０１】
一方、対象が第１製品鍵暗号化プログラムである場合には、保護を示す保護属性が付与されているので(ステップＳ２０２，Ｙｅｓ)、命令メモリアクセス制御部１２４は、要求を無効化する(ステップＳ２１０)。
【０１０２】
このように、内部メモリ１２０の命令メモリアクセス制御部１２４は、プロセッサコア１１０による命令フェッチ以外の要求種別に対しては、保護を示す保護属性が付与された平文プログラムの読み出しを禁止することができる。すなわち、製品鍵暗号化プログラムの読み出しを禁止することができる。
【０１０３】
一方で、開発鍵暗号化プログラムには、非保護を示す保護属性が付与されているので、デバッガ５００は、開発鍵暗号化プログラムを取得することができる。したがって開発鍵暗号化プログラムを利用してプログラムの開発を行うことができる。
【０１０４】
このように、製品鍵暗号化プログラムと開発鍵暗号化プログラムとをそれぞれ準備したことにより、プログラムの開発を制限することなく、第三者が当該プログラムを不正に読み出すのを防止することができる。
【０１０５】
デバッガ５００によってソフトウェアを解析する方法の１つとして、デバッガ５００からデバッガインタフェース１４０を介して内部メモリ１２０に保持されている平文プログラムの読出要求を行う方法が考えられる。
【０１０６】
しかしこの場合、要求種別がプロセッサコア１１０による命令フェッチ以外であることから、図１０において説明した読出処理にしたがい、保護を示す保護属性が付与された平文プログラムの読み出しを制限する。すなわち、命令メモリアクセス制御部１２４は、デバッガインタフェース１４０に対してエラーを出力する。したがって、デバッガ５００を介して平文プログラムが読み出されるのを防止することができる。
【０１０７】
また他の方法としては、ＤＭＡコントローラ６００を介して第三者が不正に平文プログラムを読み出す方法が考えられる。例えば、デバッガ５００が、ＤＭＡコントローラ６００に対して、ＤＭＡ転送要求を行うことにより実現できる。このＤＭＡ転送要求は、内部メモリ１２０に保持されているプログラムを、内部メモリ１２０内の領域から外部メモリ２００の適当な領域への転送要求である。
【０１０８】
この場合、ＤＭＡコントローラ６００は、デバッガ５００からのＤＭＡ転送要求に対し、内部メモリ１２０に対して転送要求を行う。具体的には、内部メモリ１２０の命令メモリ１２３から外部メモリ２００への転送要求を行う。
【０１０９】
しかしこの場合、要求種別がプロセッサコア１１０による命令フェッチ以外であることから、図１０において説明した読出処理に従い、保護を示す保護属性が付与されたプログ
ラムの読み出しを制限する。すなわち、エラーを出力する。
【０１１０】
このように、デバッガ５００は、デバッガインタフェース１４０を介したアクセスだけでなく、ＤＭＡコントローラ６００を介してアクセスすることができる。しかし、この場合であっても、第三者に不正にプログラムが読み出されるのを防止することができる。
【０１１１】
図１１は、命令メモリ１２３に既に平文プログラムが保持された状態で新たに平文プログラムの書き込み、すなわち上書きが指示された場合の書込処理を示すフローチャートである。
【０１１２】
内部メモリ１２０は、書込要求を取得すると（ステップＳ３００）、既に保持されている平文プログラムに付与された保護属性を特定する(ステップＳ３０２)。平文プログラムに保護を示す保護属性「１」が付与されている場合には（ステップＳ３０４，Ｙｅｓ）、既にプログラムが保持されている命令メモリ１２３の内容を総てクリアする（ステップＳ３０６）。次に、書込要求が示すプログラムを命令メモリ１２３に書き込む（ステップＳ３０８）。
【０１１３】
一方、平文プログラムに非保護を示す保護属性「０」が付与されている場合には(ステ
ップＳ３０４，Ｎｏ)、ステップＳ３０８に進む。すなわち、命令メモリ１２３の内容を
クリアすることなく、新たな平文プログラムを命令メモリ１２３に書き込む(ステップＳ
３０８)。以上で、書込処理が完了する。なお、ステップＳ３０８における書込処理は、
図９を参照しつつ説明したプログラムを取得した場合の処理と同様である。
【０１１４】
プログラムが既に書き込まれた状態で、プログラムの上書きを許可した場合には、既にプログラムが格納されている領域へのアクセスが可能となるため、既に保持されているプログラムを読み出すことが可能である。これを利用して、第三者が不正に平文プログラムを読み出すことが考えられる。
【０１１５】
しかし、図１１を参照しつつ説明したように、保護を示す保護属性が付与されたプログラムが既に保持されている場合には、命令メモリ１２３にプログラムを書き込む処理が開始する前に、命令メモリ１２３に既に保持されているプログラムを総てクリアし、その後で新たな平文プログラムを書き込むので、既に保持されているプログラムが不正に読み出されるのを防ぐことができる。製品鍵暗号化プログラムには保護を示す保護属性が付与されているので、製品鍵暗号化プログラムが不正に読み出されるのを防ぐことができる。
【０１１６】
なお、これ以外のソフトウェアベンダ２の構成および処理は、実施の形態１にかかるソフトウェアベンダ２の構成および処理と同様である。また、実施の形態２にかかるユーザ端末３の構成および処理は、実施の形態２にかかるソフトウェアベンダ２の構成および処理と同様である。
【０１１７】
図１０を参照しつつ、ユーザ端末３において、デバッガ５００がプログラムを読み出す場合の処理について説明する。デバッガインタフェース１４０がデバッガ５００からの読出要求を取得し(ステップＳ２００)、命令メモリアクセス制御部１２４は、プログラムの保護属性を特定する。ユーザ端末３の命令メモリ１２３に保持されているプログラムは第１製品鍵暗号化プログラムである。当該プログラムには、保護を示す保護属性が付与されている。したがって、要求種別にかかわらずステップＳ２１０に進み、エラーを出力する。
【０１１８】
本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【０１１９】
そうした第１の変更例としては、命令メモリ１２３は、複数の平文プログラムを同時に保持し、平文プログラム単位でアクセスを制限してもよい。図１２は、この場合の保護属性メモリ１２２のデータ構成を模式的に示している。図１２に示すように保護属性メモリ１２２は、平文プログラムを識別するプログラムＩＤと保護属性とを対応付けて保持している。ここでプログラムＩＤとは、ある平文のプログラムが格納されているアドレス範囲を示す識別子である。これにより、プログラム単位でアクセスを制限することができる。
【０１２０】
そして、第１の変更例においては、命令メモリアクセス制御部１２４は、保護属性メモリ１２２における対応関係に基づいて、各平文プログラムが保持されている領域単位で命令メモリ１２３へのアクセスを制限する。
【０１２１】
例えば、プログラムＩＤ「０００１」に対応する領域に対する読出要求を取得したとする。図１２に示すようにプログラムＩＤ「０００１」で識別される平文プログラムには保護を示す保護属性が付与されている。そこで、命令メモリ１２３は、プログラムＩＤ「０００１」で識別される平文プログラムへのアクセスを制限する。一方、プログラムＩＤ「０００２」で識別される保護プログラムへのアクセスは許可する。
【０１２２】
具体的には、プログラムＩＤ「０００１」の読出要求を取得した場合には、プログラムＩＤ「０００１」で識別される平文プログラムには、保護を示す保護属性が付与されているので、図１０に示す読出処理にしたがい、平文プログラムを出力するか、エラーを出力するかを決定する。
【０１２３】
一方、プログラムＩＤ「０００２」の読出要求を取得した場合には、プログラムＩＤ「０００２」で識別される平文プログラムには、非保護を示す保護属性が付与されているので、図１０に示す読出処理にしたがい、エラーを出力する。
【０１２４】
またプログラムＩＤ「０００１」の書込要求を取得した場合には、プログラムＩＤ「０００１」で識別される平文プログラムには、保護を示す保護属性が付与されているので、図１１に示す書込処理にしたがい、平文プログラムが既に保持されている領域に新たにプログラムを書き込む前に、既に保持されている平文プログラムをクリアする。
【０１２５】
一方、プログラムＩＤ「０００２」の書込要求を取得した場合には、プログラムＩＤ「０００２」で識別される平文プログラムには、非保護を示す保護属性が付与されているので、図１１に示す書込処理にしたがい、既に保持されている平文プログラムをクリアせずに、平文プログラムが既に保持されている領域に新たにプログラムを書き込む。
【０１２６】
このように、保護を示す保護属性を付与された平文プログラムと、非保護を示す保護属性を付与された平文プログラムとを同時に保持している場合であっても、保護を示す保護属性が付与された平文プログラムへのアクセスのみを制限することができるので、所定の平文プログラムが第三者に不正に読み出されるのを防止することができる。
【０１２７】
第２の変更例としては、第１の変更例においては、保護属性メモリ１２２は、プログラムＩＤと保護属性とを対応付けて保持していたが、これにかえて保護属性メモリ１２２は、命令メモリ１２３におけるバンク位置と保護属性とを対応付けて保持してもよい。
【０１２８】
図１３は、この場合の保護属性メモリ１２２のデータ構成を模式的に示している。図１３に示すように、保護属性メモリ１２２は、命令メモリ１２３におけるバンク位置と各バンク位置に保持されている平文プログラムに付与された保護属性とを対応付けて保持している。第２の変更例においては、命令メモリアクセス制御部１２４は、バンク位置と保護
属性との対応関係に基づいて各プログラムが保持されている領域単位で命令メモリ１２３へのアクセスを制御する。
【０１２９】
例えば、バンク１と保護を示す保護属性とが対応付けられており、かつバンク１にプログラムＩＤ「０００１」で識別される平文プログラムが保持されている場合には、プログラムＩＤ「０００１」で識別される平文プログラムへのアクセスを制限する。また、バンク２にプログラムＩＤ「０００２」で識別される平文プログラムが保持されている場合には、プログラムＩＤ「０００２」で識別される平文プログラムへのアクセスを制限する。
【０１３０】
このように、第２の変更例によれば、命令メモリ１２３が複数のプログラムを同時に保持している場合であっても、バンク単位で、第三者が平文プログラムを不正に読み出すのを防止することができる。
【０１３１】
第３の変更例としては、実施の形態２においては、プログラムに対するアクセス制御について説明したが、これにかえてデータに対するアクセス制御を行ってもよい。図１４は、第３の変更例にかかるシステム１０の全体構成を示す図である。データメモリ部１２５は、命令メモリ部１２１と同様に、保護属性メモリ１２６と、データメモリ１２７と、データメモリアクセス制御部１２８とを有する。
【０１３２】
なお、保護属性メモリ１２６の構成および処理は、保護属性メモリ１２２の構成および処理と同様である。また、データメモリ１２７の構成および処理は、命令メモリ１２３の構成および処理と同様である。また、データメモリアクセス制御部１２８の構成および処理は、命令メモリアクセス制御部１２４の構成および処理と同様である。
【０１３３】
また、他の例としては、プログラムに対するアクセス制御とデータに対するアクセス制御とをともに行ってもよい。このように、アクセス制御の対象は、実施の形態に限定されるものではない。
【０１３４】
第４の変更例としては、第３の変更例のようにデータに対するアクセス制御を行う場合、図１１に示すように書き込み処理においては、データに付与された保護属性に基づいて、データを書き込む前に既に保持されているデータをクリアするか否かを決定したが、他の例としては、保護属性に加えて、要求元に応じてデータをクリアするか否かを決定してもよい。
【０１３５】
図１５は、第４の変更例にかかる書込処理を示すフローチャートである。図１５に示すように、第４の変更例にかかる書込処理においては、取得した書込要求の要求種別がプロセッサコアからの書き込み要求である場合には(ステップＳ３２０，Ｙｅｓ)、ステップＳ３０８へ進む。すなわち、要求種別がプロセッサコア１１０からの書き込み要求である場合にはクリア処理を行わずに新たな平文プログラムの書き込みを行う。
【０１３６】
このように、要求種別に基づいてアクセスを制御することにより、他の要求種別からのアクセスを制御することなく、所定の要求種別からのアクセスのみを効率的に制御することができる。
【０１３７】
第５の変更例としては、実施の形態２においては、保護を示す保護属性が付与された平文プログラムに対する読出要求を取得した場合のアクセス制御として、読み出しを禁止することとしたが、これにかえて、暗号化した状態でプログラムを提供することとしてもよい。これにより、アクセス制御を行う場合には、プログラムが平文の状態で読み出されることがないので、第三者が不正に平文プログラムを読み出すのを防止することができる。
【０１３８】
第６の変更例としては、実施の形態２においては、既に平文プログラムが保持されている領域にプログラムを上書きする場合には、プログラムの保護属性に応じて上書き処理の前に既に保持されているプログラムをクリアするか否かを決定したが、さらにユーザからの指示によって、プログラムをクリアするか否かを決定してもよい。
【０１３９】
具体的には、既に保持されている平文プログラムに対するアクセス制御を行う場合には、ユーザインターフェース３００を介してユーザから既に保持されている平文プログラムをクリアする旨の指示を受け付けた場合にのみ平文プログラムをクリアし、これ以外の場合にはエラーを出力してもよい。これにより、ユーザがクリアをしない限り書き込みが出来ず、平文プログラムを保護できる。
【０１４０】
第７の変更例としては、実施の形態２においては、ＤＭＡコントローラ６００が保護属性付与部１３５を有していたが、これにかえて内部メモリ１２０が保護属性付与部１３５を有してもよい。この場合、ＤＭＡコントローラ６００は、鍵ＩＤレジスタ１３２に保持されている鍵ＩＤを内部メモリ１２０に出力する。そして、内部メモリ１２０において、保護属性付与部１３５は、鍵ＩＤレジスタ１３２から取得した鍵ＩＤに基づいて保護属性を付与する。そして、保護属性付与部１３５は、付与した保護属性を保護属性メモリ１２２に保持させる。
【０１４１】
（実施の形態３）
図１６は、実施の形態３にかかるユーザ端末３の全体構成を示すブロック図である。ユーザ端末３は、マイクロプロセッサ１００と、外部メモリ２００と、ユーザインターフェース３００と、外部バス４００と、デバッガ５００とを備えている。
また、マイクロプロセッサ１００は、プロセッサコア１１０と、デバッガインタフェース１４０と、公開鍵処理部１７０と、ＢＩＵ６０２と、キャッシュコントローラ１８０と、セキュアコンテキストスイッチ部１９０とを有している。
【０１４２】
公開鍵処理部１７０は、秘密鍵テーブル１７２と、配布鍵復号化部１７４とを有している。図１７は、秘密鍵テーブル１７２のデータ構成を模式的に示す図である。秘密鍵テーブル１７２は、秘密鍵と公開鍵とを対応付けて複数保持している。さらに、公開鍵を識別する公開鍵ＩＤを公開鍵に対応付けて保持している。
【０１４３】
本実施の形態においては、公開鍵ＩＤ「１」に対応付けて開発用公開鍵と開発用秘密鍵とを保持している。また、公開鍵ＩＤ「２」に対応付けて製品用公開鍵と製品用秘密鍵とを保持している。
【０１４４】
また、配布鍵復号化部１７４は、ユーザからの指示にしたがい秘密鍵テーブル１７２に保持されている秘密鍵を利用して、配布鍵を復号化し、共通鍵を得る。なお、ユーザ端末３は、配布鍵として公開鍵を取得する。
これ以降、開発用公開鍵で暗号化された配布鍵を開発用配布鍵、製品用公開鍵で暗号化された配布鍵を製品用配布鍵とする。また、開発用配布鍵に含まれる共通鍵で暗号化されたプログラムを開発鍵暗号化プログラム、製品用配布鍵に含まれる共通鍵で暗号化されたプログラムを製品鍵暗号化プログラムとする。
【０１４５】
ＢＩＵ６０２は、共通鍵テーブル１３９と、公開鍵ＩＤ特定部１３７と、保護属性付与部１３５と、暗号復号器１３４とを有している。
【０１４６】
図１８は、共通鍵テーブル１３９のデータ構成を模式的に示す図である。共通鍵テーブル１３９は、タスクＩＤと、公開鍵ＩＤと、共通鍵とを対応付けて保持している。ここで、タスクＩＤは、公開鍵処理部１７０から通知される。
【０１４７】
暗号復号器１３４は、公開鍵処理部１７０からタスクＩＤの指定を受けると共通鍵テーブル１３９において、指定されたタスクＩＤに対応付けられている共通鍵を利用して暗号化プログラムを復号化し、平文プログラムを得る。暗号復号器１３４は、平文プログラムをキャッシュコントローラ１８０に出力する。
【０１４８】
公開鍵ＩＤ特定部１３７は、公開鍵処理部１７０からタスクＩＤの指定を受けると保護属性付与部１３５において、指定されたタスクＩＤに対応付けられている公開鍵ＩＤを特定する。
【０１４９】
保護属性付与部１３５は、公開鍵ＩＤ特定部１３７が特定した公開鍵ＩＤに基づいて保護属性を付与する。具体的には、平文プログラムに対しては、非保護を示す保護属性「０」を付与する。また、開発用公開鍵ＩＤに対応するプログラムに対しても、非保護を示す保護属性「０」を付与する。製品用公開鍵ＩＤに対応するプログラムに対しては、保護を示す保護属性「１」を付与する。保護属性付与部１３５は、保護属性をキャッシュコントローラ１８０に出力する。
【０１５０】
キャッシュコントローラ１８０は、命令キャッシュ１８２と、命令キャッシュアクセス制御部１８４と、データキャッシュ１８６と、データキャッシュアクセス制御部１８８とを有している。
【０１５１】
図１９は、命令キャッシュ１８２のデータ構成を模式的に示している。命令キャッシュ１８２は、アドレスタグ、プログラム、保護属性を保持する領域を有している。命令キャッシュアクセス制御部１８４は、外部から命令キャッシュ１８２へのアクセスを制御する。すなわち、命令キャッシュ１８２に保持されているプログラムの読み出しおよび書き込みを制御する。
【０１５２】
プロセッサコア１１０は、カレントタスクＩＤレジスタ１１２と、汎用レジスタ１１４とを有している。カレントタスクＩＤレジスタ１１２は、実行中のタスクのタスクＩＤを保持する。汎用レジスタ１１４は、実行中のプログラムを保持する。
【０１５３】
セキュアコンテキストスイッチ部１９０は、コンテキストを保持するためのコンテキストバッファ１９２とプロセッサコア１１０とコンテキストバッファ１９２の間の制御を行うコンテキスト制御部１９４を有している。コンテキスト制御部１９４は、割り込みが発行されたとき、プロセッサコア１１０の汎用レジスタ１１４の内容を読み出して、コンテキストバッファ１９２に書き込み、汎用レジスタ１１４の内容をクリアする。また、タスクを再開するための命令が発行されたとき、コンテキストバッファ１９２に保存されたコンテキストを汎用レジスタ１１４に復帰させる。
【０１５４】
図２０は、命令キャッシュアクセス制御部１８４におけるアクセス制御のルールを模式的に示している。保護属性が非保護を示す場合、すなわち平文プログラムとして外部メモリ２００から取得したプログラムまたは開発鍵暗号化プログラムとして外部メモリ２００から取得したプログラムである場合には、当該プログラムへのアクセスを許可する。また、プロセッサコア１１０による命令フェッチであって、かつ保護属性が保護を示す場合、すなわち製品鍵暗号化プログラムとして外部メモリ２００から取得したプログラムである場合には、当該プログラムへのアクセスを許可する。
【０１５５】
一方、プロセッサコア１１０による命令フェッチ以外であって、かつ保護属性が保護を示す場合には、当該プログラムへのアクセスを制限する。すなわち、エラーを出力する。
【０１５６】
図２１は、実施の形態３にかかるソフトウェアベンダ２において、ソフトウェア開発時にデバッグを行う場合の処理を示すフローチャートである。デバッグを行う場合、保護したいプログラムＰを予め独自の共通鍵Ｋｘで暗号化し、開発鍵暗号化プログラムＥ（Ｋｘ，Ｐ）を得る。そして、Ｋｘなどを含むＫを開発用公開鍵Ｋｐ１でプログラムＰを暗号化し、開発用配布鍵Ｅ（Ｋｐ１，Ｋ）を得る。そして、開発鍵暗号化プログラムＥ（Ｋｘ，Ｐ）を外部メモリ２００に保持させる。また、開発用配布鍵Ｅ(Ｋｐ１，Ｋ)を外部メモリ２００に保持させる。ここで、Ｅ(Ｘ，Ｙ)とは、鍵ＸでデータＹを暗号化して得られるデータを示している。
【０１５７】
ソフトウェアベンダ２は、作成したプログラムＥ（Ｋｘ，Ｐ）と開発用配布鍵Ｅ(Ｋｐ
１，Ｋ)とを外部メモリ２００に格納する。そして、適当なタスクＩＤと開発用公開鍵の
公開鍵ＩＤとを指定して鍵登録命令を発行する(ステップＳ４００)。
【０１５８】
このとき、プロセッサコア１１０は、さらに公開鍵処理部１７０に対し鍵登録命令を発行する(ステップＳ４０２)。公開鍵処理部１７０は、秘密鍵テーブル１７２において鍵登録命令に示された鍵公開ＩＤに対応付けられている秘密鍵を特定する(ステップＳ４０４)。そして、配布鍵復号化部１７４は、秘密鍵で開発用配布鍵Ｅ(Ｋｐ１，Ｋ)を復号化して、共通鍵Ｋｘを得る(ステップＳ４０６)。なお、開発用配布鍵Ｅ(Ｋｐ１，Ｋ)は、外部メモリ２００より取得する。このように、本実施の形態においては、開発用配布鍵Ｅ(Ｋｐ
１，Ｋ)として共通鍵を外部メモリ２００から取得する。
【０１５９】
次に、公開鍵処理部１７０は、共通鍵Ｋｘと、タスクＩＤと、公開鍵ＩＤとを合わせてＢＩＵ６０２に通知する(ステップＳ４０８)。
【０１６０】
ＢＩＵ６０２は、通知された情報を共通鍵テーブル１３９に登録する(ステップＳ４１
０)。そして、プロセッサコア１１０に対して登録完了を通知する(ステップＳ４１２)。
【０１６１】
プロセッサコア１１０は、キャッシュコントローラ１８０に対し、カレントタスクＩＤと、プログラムの開始番地を指定してプログラムの開始命令を発行することによりプログラムの実行を開始する。プログラム開始命令においては、例えば、カレントタスクＩＤ「３」、プログラムの開始番地「Ｘ１」と指定する。
【０１６２】
プロセッサコア１１０は、プログラム開始命令を発行した後、指定されたカレントタスクＩＤをカレントタスクＩＤレジスタ１１２に保持させる。そして、キャッシュコントローラ１８０に対し、タスクＩＤおよび読み出し開始番地を指定してプログラムの読出要求を送る(ステップＳ４１４)。
【０１６３】
読出要求において指定されたプログラムが命令キャッシュ１８２に保持されていない場合には(ステップＳ４１６，Ｎｏ)、キャッシュコントローラ１８０は、ＢＩＵ１３０に対しプログラムの読出要求を送る(ステップＳ４１８)。ここで、ＢＩＵ６０２に送る読出要求には、対象がプログラムであることを示すフラグ、タスクＩＤ、および開始番地が含まれている。
【０１６４】
ＢＩＵ６０２は、キャッシュコントローラ１８０からの読出要求により、外部メモリ２００から開始番地にあるプログラムを読み出す(ステップＳ４２０)。さらに、暗号復号器１３４は、共通鍵テーブル１３９からタスクＩＤに対応する共通鍵Ｋｘを選択し、外部メモリ２００から読み出したプログラムを復号化する(ステップＳ４２２)。
【０１６５】
次に、暗号復号器１３４は、復号化したプログラムをキャッシュコントローラ１８０に出力する(ステップＳ４２４)。公開鍵ＩＤ特定部１３７は、タスクＩＤから公開鍵ＩＤを
特定する。保護属性付与部１３５は、公開鍵ＩＤ特定部１３７が特定した公開鍵ＩＤから復号化したプログラムに対して保護属性を付与する。そして、付与した保護属性をキャッシュコントローラ１８０に出力する(ステップＳ４２６)。
【０１６６】
キャッシュコントローラ１８０は、ＢＩＵ６０２から取得したプログラム、および保護属性を命令キャッシュ１８２に保持する(ステップＳ４２８)。次に、キャッシュコントローラ１８０は、プログラムをプロセッサコア１１０に出力する(ステップＳ４３０)。
【０１６７】
なお、ステップＳ４１６において、キャッシュコントローラ１８０の命令キャッシュ１８２に読出要求において指定されたプログラムが保持されている場合には(ステップＳ４
１６，Ｙｅｓ)、ステップＳ４３０に進む。以上で、プログラムを読み出す場合の処理が
完了する。
【０１６８】
図２２は、プログラムの読出要求を取得した場合のキャッシュコントローラ１８０の読出処理を示すフローチャートである。命令キャッシュ１８２の命令キャッシュアクセス制御部１８４は、命令キャッシュ１８２に保存されているプログラムの読み出しを示す読出要求を取得すると（ステップＳ５００）、要求種別がプロセッサコア１１０による命令フェッチか否かを特定する。具体的には、例えば、物理的な配線によって要求種別を特定してもよい。要求種別がプロセッサコア１１０による命令フェッチである場合には(ステッ
プＳ５０１，Ｙｅｓ)、命令キャッシュアクセス制御部１８４は、命令キャッシュ１８２
に保存されている平文プログラムをプロセッサコア１１０に出力する（ステップＳ５０６）。要求種別がプロセッサコア１１０による命令フェッチ以外である場合には(ステップ
Ｓ５０１，Ｎｏ)、命令キャッシュ１８２に保持されているプログラムの保護属性を特定
する(ステップＳ５０２)。保護を示す保護属性が付与されている場合には(ステップＳ５
０４、Ｙｅｓ)、エラーを出力する(ステップＳ５１０)。
【０１６９】
一方、非保護を示す保護属性が付与されている場合には(ステップＳ５０４，Ｎｏ)、命令キャッシュ１８２に保持されているプログラムを提供する(ステップＳ５０６)。以上で、キャッシュコントローラ１８０の読出処理が完了する。
【０１７０】
対象が開発鍵暗号化プログラムである場合には、非保護を示す保護属性が付与されている。したがって、キャッシュコントローラ１８０は、デバッガ５００から当該プログラムの読出要求を取得すると、当該プログラムをデバッガ５００に提供する(ステップＳ５０
４，Ｎｏ、ステップＳ５０６)。
【０１７１】
一方、対象が製品鍵暗号化プログラムである場合には、保護を示す保護属性が付与されている。したがって、キャッシュコントローラ１８０は、デバッガ５００から当該プログラムの読出要求を取得すると、エラーを出力する(ステップＳ５０４，Ｙｅｓ、ステップ
Ｓ５１０)。
【０１７２】
このように、開発用公開鍵と製品用公開鍵に異なる公開鍵ＩＤを付与し、公開鍵ＩＤの値に基づいて保護属性を付与することにより、製品鍵暗号化プログラムのみ解析を制限することができる。
【０１７３】
実施の形態３にかかる第１の変更例としては、本実施の形態においては、命令キャッシュ１８２に保持されるプログラムについてのアクセスを制御したが、同様にデータキャッシュ１８６に保持されるデータについてのアクセスを制御してもよい。なお、この場合のデータキャッシュ１８６およびデータキャッシュアクセス制御部１８８における処理は、それぞれ命令キャッシュ１８２および命令キャッシュアクセス制御部１８４の処理と同様である。
【０１７４】
（実施の形態４）
次に実施の形態４にかかるユーザ端末３について説明する。実施の形態４にかかるユーザ端末３の構成は、実施の形態３にかかるユーザ端末３の構成と同様である。
【０１７５】
実施の形態４にかかるユーザ端末３は、外部メモリ２００から複数の種類の情報を読み出す。そして、情報の種類に応じて、当該情報を復号化するか否かを決定する。この点で、他の実施の形態にかかるユーザ端末３と異なっている。
【０１７６】
図２３は、実施の形態４にかかるユーザ端末３の全体構成を示すブロック図である。実施の形態４にかかるユーザ端末３のＢＩＵ６０４は、実施の形態３にかかるＢＩＵ６０２の構成に加えて暗号復号要求生成部１３８をさらに有している。暗号復号要求生成部１３８は、暗号復号器１３４による暗号化および復号化を行うか否かを暗号復号器１３４に対して要求する。
【０１７７】
図２４は、暗号復号要求生成部１３８が暗号化および復号化するか否かを決定するためのルールを模式的に示している。例えば、公開鍵ＩＤが「０」で、対象となる情報がプログラムである場合には、スルー要求を生成する。すなわち、公開鍵ＩＤ「０」で識別される公開鍵で暗号化されたプログラムに対しては、暗号復号器１３４は、暗号化および復号化を行わない。また、公開鍵ＩＤが「２」で、対象となる情報がプログラムである場合には、暗号復号要求を生成する。すなわち、公開鍵ＩＤ「２」で識別される公開鍵で暗号化されたプログラムに対しては、暗号復号器１３４は、暗号化および復号化を行う。
【０１７８】
このように、タスクＩＤに対応付けられている公開鍵ＩＤおよび対象となる情報の種類に基づいて、暗号復号器１３４の処理を制御することができる。具体的には、暗号復号器１３４における暗号化処理及び復号化処理を行うか否かを決定することができる。
【０１７９】
図２５は、実施の形態４にかかるユーザ端末３におけるプロセッサコア１１０への情報の読込処理を示すフローチャートである。なお、鍵を登録するとき処理は、図２１を参照しつつ説明した実施の形態３にかかるソフトウェアベンダ２が鍵を登録するときの処理と同様である。
【０１８０】
鍵が登録され後に、プロセッサコア１１０は、キャッシュコントローラ１８０に対し情報の読出要求を出力する(ステップS６００)。キャッシュコントローラ１８０は、情報読
出要求を取得すると、情報読出要求によって要求されている情報を保持しているか否かを確認する。要求されている情報を保持していない場合には(ステップS６０２，Ｙｅｓ)、
キャッシュコントローラ１８０は、ＢＩＵ６０４に対して情報読出要求を出力する(ステ
ップＳ６０４)。
【０１８１】
次に、ＢＩＵ６０４は、外部メモリ２００に対して情報読出要求を出力し、外部メモリ２００から要求されている情報を取得する(ステップＳ６０６)。次に、ＢＩＵ６０４の暗号復号要求生成部１３８は、図２４を参照しつつ説明したルールにしたがい、暗号復号器１３４に対して出力する要求を生成する(ステップＳ６０８)。
【０１８２】
暗号復号要求生成部１３８が復号要求を生成し、復号要求を暗号復号器１３４に出力した場合には(ステップＳ６１０，Ｙｅｓ)、暗号復号器１３４は、外部メモリ２００から取得した情報を復号化する(ステップＳ６１２)。そして、復号化した情報をキャッシュコントローラ１８０に出力する(ステップＳ６１４)。
【０１８３】
一方、暗号復号要求生成部１３８がスルー要求を生成し、スルー要求を暗号復号器１３
４に出力した場合には(ステップＳ６１０，Ｎｏ)、暗号復号器１３４は、外部メモリ２００から取得した情報を復号化せずにキャッシュコントローラ１８０に出力する(ステップ
Ｓ６１４)。
【０１８４】
キャッシュコントローラ１８０は、ＢＩＵ６０４から取得した情報を命令キャッシュ１８２またはデータキャッシュ１８６に保持させる(ステップＳ６１６)。キャッシュコントローラ１８０は、さらにＢＩＵ６０４から取得した情報をプロセッサコア１１０に出力する(ステップＳ６１８)。以上で、プロセッサコア１１０への読込処理が完了する。
【０１８５】
図２６は、プロセッサコア１１０が出力する情報読出要求において、タスクＩＤ「３」、開始アドレス「Ｘ１」が指定されている場合の処理について説明する。なお、読出要求の対象となる情報は、プログラムである。
【０１８６】
この場合、プロセッサコア１１０は、プログラム開始命令が発行されると、カレントタスクＩＤレジスタ１１２に入力されたタスクＩＤを保持し、キャッシュコントローラ１８０に対して、上述の情報読出要求を出力する(ステップＳ６００)。
【０１８７】
キャッシュコントローラ１８０は、命令キャッシュ１８２に有効で、かつ該当するプログラムが保持されていないため(ステップＳ６０２，Ｎｏ)、ＢＩＵ６０４に対して対象がプログラムであることを示すフラグと、タスクＩＤ「３」と、開始アドレス「Ｘ１」とを含む情報読出要求を出力する(ステップＳ６０４)。ＢＩＵ６０４は、開始アドレス「Ｘ１」を含む情報読出要求を外部メモリ２００に出力することにより、外部メモリ２００から要求対象のプログラムＣ（Ｘ１）を取得する(ステップＳ０６０６)。
【０１８８】
公開鍵ＩＤ特定部１３７は、タスクＩＤ「３」と共通鍵テーブル１３９から公開鍵ＩＤ「１」を特定する。暗号復号要求生成部１３８は、公開鍵ＩＤ特定部１３７が特定した公開鍵ＩＤ「１」から、図２４を参照しつつ説明したルールにしたがい暗号復号器１３４に出力すべき要求を生成する。ここで、公開鍵ＩＤ「１」であり、対象とする情報はプログラムであるので、図２４に示すルールにしたがいスルー要求を生成する(ステップＳ６０
８)。
【０１８９】
暗号復号器１３４は、暗号復号要求生成部１３８からスルー要求を取得すると、外部メモリ２００から取得したプログラムに対する復号処理を行わずに(ステップＳ６１０，Ｎ
ｏ)、プログラムＣ（Ｘ１）と、タスクＩＤ「３」とをキャッシュコントローラ１８０に
出力する(ステップＳ６１４)。そして、キャッシュコントローラ１８０は、命令キャッシュ１８２に外部メモリ２００から読み出したプログラムＣ（Ｘ１）と、タスクＩＤ「３」とを保持させ、プロセッサコア１１０にプログラムＣ（Ｘ１）を出力する(ステップＳ６
１６)。以上で、タスクＩＤ「３」、開始アドレス「Ｘ１」が指定されている場合の処理
が完了する。
【０１９０】
図２７は、プロセッサコア１１０が出力する情報読出要求において、タスク「３」、開始アドレス「Ｙ１」が指定されている場合の処理について説明する。なお、読出要求の対象となる情報は、データである。
【０１９１】
この場合、プロセッサコア１１０は、キャッシュコントローラ１８０に対して情報読出要求を出力する(ステップＳ６００)。キャッシュコントローラ１８０は、命令キャッシュ１８２に有効で、かつ該当するデータがないため(ステップＳ６０２，Ｎｏ)、ＢＩＵ６０４に対して対象がデータであることを示すフラグと、タスクＩＤ「３」と、開始アドレス「Ｙ１」とを含む情報読出要求を出力する(ステップＳ６０４)。
【０１９２】
ＢＩＵ６０４は、アドレス「Ｙ１」を含む情報読出要求を外部メモリ２００に出力することにより、外部メモリ２００から要求対象のデータＣ（Ｙ１）を取得する(ステップＳ
０６０６)。
【０１９３】
公開鍵ＩＤ特定部１３７は、タスクＩＤ「３」と共通鍵テーブルから公開鍵ＩＤ「１」を特定する。暗号復号要求生成部１３８はまた、公開鍵ＩＤ特定部１３７が特定した公開鍵ＩＤ「１」から、図２４を参照しつつ説明したルールにしたがい暗号復号器１３４に出力すべき要求を生成する。ここで、公開鍵ＩＤ「１」であり、対象とする情報はデータであるので、図２４に示すルールにしたがい復号要求を生成する(ステップＳ６０８)。
【０１９４】
暗号復号器１３４は、暗号復号要求生成部１３８から復号要求を取得すると(ステップ
Ｓ６１０，Ｙｅｓ)、外部メモリ２００から取得したプログラムに対する復号処理を行う(ステップＳ６１２)。そして、データＣ（Ｙ１）と、タスクＩＤ「３」とをキャッシュコ
ントローラ１８０に出力する(ステップＳ６１４)。
【０１９５】
そして、キャッシュコントローラ１８０は、命令キャッシュ１８２に外部メモリ２００から読み出したデータＣ（Ｙ１）と、タスクＩＤ「３」とを保持させ、プロセッサコア１１０にデータＣ（Ｙ１）を出力する(ステップＳ６１６)。以上で、タスクＩＤ「３」、開始アドレス「Ｙ１」が指定されている場合の処理が完了する。
【０１９６】
このように、実施の形態４にかかるユーザ端末３は、公開鍵ＩＤおよび情報の種類に基づいて、当該情報に対する暗号化および復号化を行うか否かを決定することができる。
【０１９７】
例えば、暗号機能を利用することによって生じる暗号遅延を最小限にして、低コストの処理能力でソフトウェアを動作させるためには、プログラムのみを暗号復号対象とし、データおよびコンテキストは平文として扱うのが望ましい。このような場合に、本実施の形態にかかるユーザ端末３においては、上記処理によってプログラムに対してのみ暗号化および復号化を行うことができる。
【０１９８】
なお、実施の形態４にかかるユーザ端末３のこれ以外の構成および処理は、実施の形態３にかかるユーザ端末３の構成および処理と同様である。
【０１９９】
実施の形態４にかかるユーザ端末３の第１の変更例としては、本実施の形態においては、公開鍵ＩＤに基づいて暗号復号処理を行うか否かを決定したが、これにかえて公開鍵ＩＤに基づいてセキュアコンテキストスイッチ部１９０における機能を制御してもよい。具体的には、コンテキストをコンテキストバッファ１９２に保持するか否かを制御してもよい。また、コンテキストバッファ１９２に保持されているコンテキストをプロセッサコア１１０に復帰させるか否かを制御してもよい。
【０２００】
第２の変更例としては、公開鍵ＩＤに基づいてキャッシュコントローラ１８０の機能を制御してもよい。具体的には、キャッシュコントローラ１８０へのプログラムやデータのアクセス制御にタスクＩＤを用いるか否かを制御してもよい。
【図面の簡単な説明】
【０２０１】
【図１】実施の形態１にかかるプログラム開発システム４の全体を示す図である。
【図２】ソフトウェアベンダ２のシステム１０の全体構成を示すブロック図である。
【図３】鍵テーブル１３３のデータ構成を模式的に示す図である。
【図４】保護属性付与部１３５が保護属性を付与するときに利用する保護属性決定テーブル１３６を示す図である。
【図５】ソフトウェアベンダ２が開発中のプログラムを外部メモリ２００からマイクロプロセッサ１００に読み込むときの読込処理を示すフローチャートである。
【図６】図５を参照しつつ説明した処理によってプロセッサコア１１０に送られた平文プログラムをデバッガ５００が読み出す場合の読出処理を説明するためのフローチャートである。
【図７】実施の形態２にかかるソフトウェアベンダ２のシステム１０を示す図である。
【図８】命令メモリアクセス制御部１２４のアクセス制御のルールを模式的に示す図である。
【図９】ソフトウェアベンダ２が開発中のプログラムを外部メモリ２００から取得するときの処理を示すフローチャートである。
【図１０】図５を参照しつつ説明した処理によって内部メモリ１２０に保持されたプログラムを読み出す場合の読出処理を説明するためのフローチャートである。
【図１１】命令メモリ１２３に既に平文プログラムが保持された状態で新たに平文プログラムの書き込み、すなわち上書きが指示された場合の書込処理を示すフローチャートである。
【図１２】実施の形態２の第１の変更例にかかる保護属性メモリ１２２のデータ構成を模式的に示す図である。
【図１３】実施の形態２の第２の変更例にかかる保護属性メモリ１２２のデータ構成を模式的に示す図である。
【図１４】実施の形態２の第３の変更例にかかるシステム１０の全体構成を示す図である。
【図１５】実施の形態２の第４の変更例にかかる書込処理を示すフローチャートである。
【図１６】実施の形態３にかかるユーザ端末３の全体構成を示すブロック図である。
【図１７】秘密鍵テーブル１７２のデータ構成を模式的に示す図である。
【図１８】共通鍵テーブル１３９のデータ構成を模式的に示す図である。
【図１９】命令キャッシュ１８２のデータ構成を模式的に示す図である。
【図２０】命令キャッシュアクセス制御部１８４におけるアクセス制御のルールを模式的に示す図である。
【図２１】実施の形態３にかかるソフトウェアベンダ２において、ソフトウェア開発時にデバッグを行う場合の処理を示すフローチャートである。
【図２２】プログラムの読出要求を取得した場合のキャッシュコントローラ１８０の読出処理を示すフローチャートである。
【図２３】図２３は、実施の形態４にかかるユーザ端末３の全体構成を示すブロック図である。
【図２４】暗号復号要求生成部１３８が暗号化および復号化するか否かを決定するためのルールを模式的に示す図である。
【図２５】実施の形態４にかかるユーザ端末３におけるプロセッサコア１１０への情報の読込処理を示すフローチャートである。
【図２６】プロセッサコア１１０が出力する情報読出要求において、タスクＩＤ「３」、開始アドレス「Ｘ１」が指定されている場合の処理について説明するためのフローチャートである。
【図２７】プロセッサコア１１０が出力する情報読出要求において、タスク「３」、開始アドレス「Ｙ１」が指定されている場合の処理について説明するためのフローチャートである。
【符号の説明】
【０２０２】
１  プロセッサ開発ベンダ
２  ソフトウェアベンダ
３  ユーザ端末
４  プログラム開発システム
１０  システム
１００  マイクロプロセッサ
１１０  プロセッサコア
１１２  カレントタスクＩＤレジスタ
１１４  汎用レジスタ
１２０  内部メモリ
１２１  命令メモリ部
１２２  保護属性メモリ
１２３  命令メモリ
１２４  命令メモリアクセス制御部
１２５  データメモリ部
１２６  保護属性メモリ
１２７  データメモリ
１２８  データメモリアクセス制御部
１３０，６０２，６０４  ＢＩＵ
１３１  コントローラ
１３２  鍵ＩＤレジスタ
１３３  鍵テーブル
１３４  暗号復号器
１３５  保護属性付与部
１３６  保護属性決定テーブル
１３７  公開鍵ＩＤ特定部
１３８  暗号復号要求生成部
１３９  共通鍵テーブル
１４０  デバッガインタフェース
１４２  デバッガアクセス制御部
１７０  公開鍵処理部
１７２  秘密鍵テーブル
１７４  配布鍵復号化部
１８０  キャッシュコントローラ
１８２  命令キャッシュ
１８４  命令キャッシュアクセス制御部
１８６  データキャッシュ
１８８  データキャッシュアクセス制御部
１９０  セキュアコンテキストスイッチ部
１９２  コンテキストバッファ
１９４  コンテキスト制御部
２００  外部メモリ
３００  ユーザインターフェース
４００  外部バス
５００  デバッガ
６００  ＤＭＡコントローラ
【図１】
2006042289.tif 000003
【図２】
2006042289.tif 000004
【図３】
2006042289.tif 000005
【図４】
2006042289.tif 000006
【図５】
2006042289.tif 000007
【図６】
2006042289.tif 000008
【図７】
2006042289.tif 000009
【図８】
2006042289.tif 000010
【図９】
2006042289.tif 000011
【図１０】
2006042289.tif 000012
【図１１】
2006042289.tif 000013
【図１２】
2006042289.tif 000014
【図１３】
2006042289.tif 000015
【図１４】
2006042289.tif 000016
【図１５】
2006042289.tif 000017
【図１６】
2006042289.tif 000018
【図１７】
2006042289.tif 000019
【図１８】
2006042289.tif 000020
【図１９】
2006042289.tif 000021
【図２０】
2006042289.tif 000022
【図２１】
2006042289.tif 000023
【図２２】
2006042289.tif 000024
【図２３】
2006042289.tif 000025
【図２４】
2006042289.tif 000026
【図２５】
2006042289.tif 000027
【図２６】
2006042289.tif 000028
【図２７】
2006042289.tif 000029