(57)【特許請求の範囲】
【請求項１】
プログラムに従って処理を実行するコア部と、
アドレス登録領域を有し、前記アドレス登録領域に登録されているアドレス範囲に応じて、データに暗号化処理又は復号処理を施す暗号処理部とを有し、
第１のメモリに暗号化されて格納され、且つ格納されている領域を示すアドレス情報が前記アドレス登録領域に登録され、起動時に実行される起動プログラムが、電源投入後に、暗号化された秘匿データが格納されている前記第１のメモリのアドレス範囲を前記アドレス登録領域に登録する処理及び制御プログラムを起動する処理を行い、
前記暗号処理部は、前記起動プログラム及び前記秘匿データを前記コア部に転送する際、前記コア部の実行アドレスが前記アドレス登録領域に登録されているアドレス範囲内である場合、暗号化された前記起動プログラム及び前記秘匿データを復号して転送し、前記コア部の実行アドレスが前記アドレス登録領域に登録されているアドレス範囲内でない場合、暗号化された前記起動プログラム及び前記秘匿データを復号せずに転送することを特徴とするプロセッサ。
【請求項２】
前記秘匿データは、秘匿プログラムと前記秘匿プログラムが用いる鍵情報とを含むことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記アドレス登録領域への前記アドレス範囲の登録及び変更は、前記コア部の実行アドレスが前記アドレス登録領域に登録されるアドレス範囲内である場合に実行されることを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
前記秘匿データに含まれる秘匿プログラムの処理中のデータが格納される第２のメモリを有し、
前記暗号処理部は、前記コア部の実行アドレスが前記アドレス登録領域に登録されるアドレス範囲内である場合には前記第２のメモリへのアクセスを許可し、前記コア部の実行アドレスが前記アドレス登録領域に登録されるアドレス範囲内でない場合には前記第２のメモリへのアクセスを不許可にすることを特徴とする請求項１〜３の何れか１項に記載のプロセッサ。
【請求項５】
前記起動プログラム及び前記秘匿データは、異なる鍵を用いて暗号化されることを特徴とする請求項１〜４の何れか１項に記載のプロセッサ。
【請求項６】
前記暗号処理部は、前記コア部の実行アドレスと前記コア部によりアクセスするアドレスが前記アドレス登録領域に登録されている同じアドレス範囲内である場合、暗号化された前記起動プログラム及び前記秘匿データを復号して転送し、異なるアドレス範囲である場合、暗号化された前記起動プログラム及び前記秘匿データを復号せずに転送することを特徴とする請求項５記載のプロセッサ。
【請求項７】
プロセッサと、
起動時に実行する起動プログラム、及び秘匿データが暗号化されて格納されているメモリとを有し、
前記プロセッサは、
プログラムに従って処理を実行するコア部と、
アドレス登録領域を有し、前記アドレス登録領域に登録されているアドレス範囲に応じて、データに暗号化処理又は復号処理を施す暗号処理部とを有し、
前記メモリに暗号化されて格納され、且つ格納されている領域を示すアドレス情報が前記アドレス登録領域に登録され、起動時に実行される前記起動プログラムが、電源投入後に、前記秘匿データが格納されている前記メモリのアドレス範囲を前記アドレス登録領域に登録する処理及び制御プログラムを起動する処理を行い、
前記暗号処理部は、前記起動プログラム及び前記秘匿データを前記コア部に転送する際、前記コア部の実行アドレスが前記アドレス登録領域に登録されているアドレス範囲内である場合、暗号化された前記起動プログラム及び前記秘匿データを復号して転送し、前記コア部の実行アドレスが前記アドレス登録領域に登録されているアドレス範囲内でない場合、暗号化された前記起動プログラム及び前記秘匿データを復号せずに転送することを特徴とするプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びプロセッサシステムに関する。
【背景技術】
【０００２】
組み込みシステムにおいて、マルウェアによる改竄やなりすまし等の行為が増加している。システムの起動後にメモリ領域をノーマル領域とセキュア領域とに分け、セキュア領域に秘匿プログラムや鍵情報を配置することで、秘匿プログラムや鍵情報のセキュリティを確保する技術がある。しかし、この技術を適用するとハードウェア及びソフトウェアともに複雑になる。また、この技術はシステムの起動後のセキュリティ技術であり、電源投入前の外部ＲＯＭからのデータ読み取り等の物理攻撃に対する対策や安全に起動する仕組み（セキュアブート）等については他の技術を適用する必要がある。
【０００３】
命令コード等を含むデータを暗号化して外部ＲＯＭに格納し、プロセッサが処理を実行する際には、暗号化されたデータを外部ＲＯＭから読み出してプロセッサ内で復号して処理を実行することで、システムのセキュリティを確保する技術が提案されている（例えば、特許文献１参照）。例えば、図１８に一例を示すように、外部ＲＯＭ１８１３に制御プログラム１８０１や秘匿プログラム（暗号処理等）及び鍵情報１８０２をＡＥＳ（Advanced Encryption Standard）暗号方式等の共通鍵暗号方式で暗号化して格納する。
【０００４】
プロセッサ１８１０が制御プログラムや秘匿プログラムの処理を実行する際には、外部ＲＯＭ１８１３から暗号化されたデータ１８１４を読み出し、プロセッサ１８１０内の暗号処理部１８１２で復号処理を行う。そして、暗号処理部１８１２で復号された平文データ１８１５をＣＰＵコア１８１１に供給して処理を実行する。ここで例えば、制御プログラムは秘匿プログラム（暗号化処理や復号処理等）を呼び出し（Ｐ１８０１）、呼び出された秘匿プログラムは鍵情報にアクセスして暗号処理等を行う。また、制御プログラムは、制御プログラムの実行後にネットワークダウンロードしたプログラム等の外部プログラムを必要に応じて呼び出す（Ｐ１８０２）ことがある。
【０００５】
図１８に示したシステムでは、外部ＲＯＭ１８１３に格納するデータ（各種プログラムや鍵情報）には暗号化を施すため、外部ＲＯＭからのデータ読み取り等の物理攻撃に対して有効である。しかし、以下の理由により、プロセッサ１８１０での実行中に、外部ＲＯＭ１８１３のデータが復号されて平文データがＲＡＭ上の外部プログラム１８０３から見えてしまうことがある。
【０００６】
制御プログラムは、起動時に自身をＲＡＭにコピーしＲＡＭ上で実行を行う場合がある。制御プログラムをＲＡＭ上で実行しているときもコピー前の外部ＲＯＭ１８１３はアクセスされるため、プロセッサ１８１０の暗号処理部１８１２は、実行されているアドレスにかかわらず、外部ＲＯＭ１８１３にアクセスした場合には常に復号処理を施すのが一般的である。そのため、外部ＲＯＭ１８１３に格納されている暗号化されたデータ（各種プログラムや鍵情報）をＲＡＭ上のプログラムから読み出す（Ｐ１８０３）と復号された状態（平文）で見えてしまう。
【０００７】
この対策としては、外部プログラムの実行を行う場合に、秘匿プログラムや鍵情報を利用して事前に認証（プログラムの安全性確認）を行う等の方法が考えられる。しかし、外部プログラムは無数にあり、それらのすべてに対して、振舞いを含めて事前に検証しマルウェアが含まれていないことを確認することは困難である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２１０２２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、実装及び開発のコストが増大することを抑制し、容易に起動前から起動後まで秘匿データのセキュリティを確保することができるプロセッサを提供することにある。
【課題を解決するための手段】
【００１０】
プロセッサの一態様は、プログラムに従って処理を実行するコア部と、アドレス登録領域に登録されているアドレス範囲に応じて、データに暗号化処理又は復号処理を施す暗号処理部とを有する。第１のメモリに暗号化されて格納され、且つ格納されている領域を示すアドレス情報がアドレス登録領域に登録され、起動時に実行される起動プログラムが、電源投入後に、暗号化された秘匿データが格納されている第１のメモリのアドレス範囲をアドレス登録領域に登録する処理及び制御プログラムを起動する処理を行う。暗号処理部は、起動プログラム及び秘匿データをコア部に転送する際、コア部の実行アドレスがアドレス登録領域に登録されているアドレス範囲内である場合、復号して起動プログラム及び秘匿データを転送し、コア部の実行アドレスがアドレス登録領域に登録されているアドレス範囲内でない場合、復号せずに起動プログラム及び秘匿データを転送する。
【発明の効果】
【００１１】
開示のプロセッサは、秘匿データを暗号化してメモリに格納し、コア部の実行アドレスがアドレス登録領域に登録されているアドレス範囲内でない場合、復号せずに秘匿データを転送するので秘匿データが漏洩することを防ぐことができる。したがって、実装及び開発のコストが増大することを抑制し、容易に起動前から起動後まで秘匿データのセキュリティを確保することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施形態におけるプロセッサシステムの構成例を示す図である。
【図２】第１の実施形態におけるアドレス登録領域の例を示す図である。
【図３】第１の実施形態におけるアドレス登録処理の例を示すフローチャートである。
【図４】第１の実施形態におけるメモリＡアクセス処理の例を示すフローチャートである。
【図５】第１の実施形態におけるメモリＢアクセス処理の例を示すフローチャートである。
【図６】第１の実施形態におけるプロセッサシステムの動作例を示すフローチャートである。
【図７】第１の実施形態におけるプロセッサシステムの動作を説明する図である。
【図８】第１の実施形態における秘匿プログラム及び鍵情報の更新方法を説明する図である。
【図９】第１の実施形態における秘匿プログラム及び鍵情報の更新処理の例を示すフローチャートである。
【図１０】第１の実施形態における秘匿プログラム及び鍵情報の更新後の動作例を示すフローチャートである。
【図１１】本発明の第２の実施形態におけるプロセッサシステムの構成例を示す図である。
【図１２】第２の実施形態におけるアドレス登録領域の例を示す図である。
【図１３】第２の実施形態におけるアドレス登録処理の例を示すフローチャートである。
【図１４】第２の実施形態における暗号化／復号処理の例を示すフローチャートである。
【図１５】第２の実施形態におけるプロセッサシステムの動作例を示すフローチャートである。
【図１６】第２の実施形態におけるプロセッサシステムの動作を説明する図である。
【図１７】第２の実施形態における秘匿プログラム及び鍵情報の更新方法を説明する図である。
【図１８】従来のプロセッサシステムにおける動作を説明する図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。
【００１４】
（第１の実施形態）
本発明の第１の実施形態について説明する。図１は、第１の実施形態におけるプロセッサシステムの構成例を示す図である。第１の実施形態におけるプロセッサシステムは、ＣＰＵ（Central Processing Unit）コア１１０、暗号処理部１２０、メモリＡ１３０、メモリＢ１４０、及びメモリＣ１５０を有する。
【００１５】
ＣＰＵコア１１０、暗号処理部１２０、及びメモリＣ１５０は、バス１６１によって相互に接続されており、暗号処理部１２０、メモリＡ１３０、及びメモリＢ１４０は、バス１６１とは異なるバス１６２によって相互に接続されている。また、図１に示した例では、ＣＰＵコア１１０、暗号処理部１２０、及びメモリＢ１４０が、１つのチップ（プロセッサチップ）１００に実装されている。ＣＰＵコア１１０は、プログラムの命令コードに従って処理を実行する。
【００１６】
暗号処理部１２０は、メモリＡ１３０に格納されている暗号化されたデータを復号したり、メモリＡ１３０に格納するデータを暗号化したりする機能を有する。本実施形態では、メモリＡ１３０に格納されているデータは、暗号化及び復号に共通の鍵を使用する共通鍵暗号方式におけるＡＥＳ（Advanced Encryption Standard）暗号方式で、すなわちＡＥＳ共通鍵を用いて暗号化されているものとする。
【００１７】
暗号処理部１２０は、鍵やアドレス情報が登録されるメモリ領域であるアドレス登録領域１２１を有する。アドレス登録領域１２１には、図２に一例を示すように、暗号化処理や復号処理に用いるＡＥＳ共通鍵２０１、及びアクセス制限する（秘匿するデータが格納されている）アドレス範囲を示すアドレス情報２０２が登録される。アドレス情報２０２は、アクセス制限するアドレス範囲のアドレス（先頭アドレス）、サイズ、及び有効／無効情報を含む。
【００１８】
後述するように登録番号１の登録用レジスタに登録されるアドレス情報は、システムの起動時に実行される起動プログラムの領域を示すアドレス情報である。したがって、本実施形態では、登録番号１のアドレス情報は、予め登録されている消去不可なアドレス情報であり、常に有効状態とする。登録番号２以降の登録用レジスタに登録されるアドレス情報は、起動プログラムや秘匿プログラム等の実行時に追加登録されるアドレス情報である。登録番号２以降のアドレス情報は、例えば秘匿プログラム及び鍵情報の領域を示すアドレス情報である。なお、アドレス情報２０２として、アクセス制限するアドレス範囲の先頭アドレス、最終アドレス、及び有効／無効情報を含むようにしても良い。
【００１９】
暗号処理部１２０は、ＣＰＵコア１１０が有するプログラムカウンタ（ＰＣ）１１１のＰＣ値（実行アドレス）を監視する機能を有する。また、暗号処理部１２０は、メモリＡ１３０及びメモリＢ１４０に対するアクセスアドレスを監視する機能を有する。暗号処理部１２０は、プログラムカウンタ（ＰＣ）１１１のＰＣ値（実行アドレス）、メモリＡ１３０及びメモリＢ１４０に対するアクセスアドレス、及びアドレス登録領域１２１に登録されているアドレス情報に応じて、データに対する暗号化処理や復号処理を行うか否かを切り替える。
【００２０】
メモリＡ１３０には、ＡＥＳ共通鍵で暗号化された起動プログラム１３１、ＡＥＳ共通鍵で暗号化された制御プログラムなど１３２、及びＡＥＳ共通鍵で暗号化された秘匿プログラム及び鍵情報１３３が格納される。メモリＡ１３０は、例えば外部ＲＯＭ（Read Only Memory）である。外部ＲＯＭとしては、例えばマスクＲＯＭや、ＯＴＲＯＭ（One Time ROM）、ＥＥＰＲＯＭ（Electrically Erasable Programmable ROM）、フラッシュメモリ等のＰＲＯＭ（Programmable ROM）が適用可能である。
【００２１】
メモリＢ１４０は、秘匿プログラムの実行時のワーク領域として使用されるメモリである。メモリＢ１４０は、例えばプロセッサ１００に内蔵されるＲＡＭ（Random Access Memory）である。メモリＣ１５０は、制御プログラムや外部プログラムの実行時のワーク領域として使用されるメモリである。
【００２２】
本実施形態において、起動プログラム、及び制御プログラムから呼び出される秘匿プログラムは、メモリＡでのみ実行を行うものとし、鍵情報は秘匿プログラムから読み出すものとする。また、制御プログラムと秘匿プログラム（暗号処理プログラム等）との間でのデータ入出力は、制御プログラム側のメモリ領域（メモリＣ１５０）を利用する。
【００２３】
制御プログラムは、秘匿プログラムを呼び出す前に入出力領域を確保して入力データを格納した後、秘匿プログラムの処理呼び出し（関数アドレスなど）を行う。秘匿プログラムの呼び出し時には引数（レジスタやスタック等）を利用し、制御プログラムで確保したメモリ領域のアドレスやサイズの情報等を秘匿プログラムに渡す。秘匿プログラムは、入力データや鍵情報にアクセスし、データ内容に応じた処理（暗号処理等）を行った後、制御プログラムで確保した入出力領域に出力データを格納し、制御プログラムの呼び出し元へ戻る。なお、秘匿プログラムの実行中においては、メモリＢ１４０をワークメモリとして利用する。
【００２４】
図３、図４、及び図５を参照して、第１の実施形態における暗号処理部１２０の動作について説明する。図３は、第１の実施形態におけるアドレス登録処理の例を示すフローチャートである。アドレス登録処理は、暗号処理部１２０のアドレス登録領域１２１へのアドレス情報の登録や修正を行う処理である。ＣＰＵコア１１０からアドレス登録領域１２１へのアドレス情報の登録要求があると、ステップＳ３０１にて暗号処理部１２０は、アドレス登録領域１２１を参照して、ＣＰＵコア１１０のプログラムカウンタ１１１が示す現在の実行アドレス（ＰＣ値）が、アドレス登録領域１２１に登録されているアドレス範囲内にあるか否かを判断する。
【００２５】
現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にあると判断した場合（Ｓ３０１のＹＥＳ）、ステップＳ３０２にて、暗号処理部１２０は、アドレス登録領域１２１の登録用レジスタに登録されているアドレス、サイズ、有効／無効情報を読んで、登録要求に応じてアドレス登録領域１２１へのアドレス情報の登録や修正を行う。一方、現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないと判断した場合（Ｓ３０１のＮＯ）、暗号処理部１２０は、登録要求に応じた処理を行わずに処理を終了する。これにより、アドレス登録領域１２１に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードによって、アドレス登録領域１２１の登録情報が変更されることを防止することができる。
【００２６】
図４は、第１の実施形態におけるメモリＡ１３０へのアクセス処理の例を示すフローチャートである。ＣＰＵコア１１０からメモリＡ１３０へのアクセス要求（リードアクセス）があると、ステップＳ４０１にて、暗号処理部１２０は、アドレス登録領域１２１を参照して、アクセス要求によってアクセスするアドレスが、アドレス登録領域１２１に登録されているアドレス範囲内にあるか否かを判断する。アクセスするアドレスが、登録されているアドレス範囲内にあると判断した場合（Ｓ４０１のＹＥＳ）、暗号処理部１２０は、アドレス登録領域１２１を参照して、ＣＰＵコア１１０のプログラムカウンタ１１１が示す現在の実行アドレス（ＰＣ値）が、アドレス登録領域１２１に登録されているアドレス範囲内にあるか否かを判断する。
【００２７】
ステップＳ４０１において、アクセスするアドレスが、登録されているアドレス範囲内にないと判断した場合（Ｓ４０１のＮＯ）、又はステップＳ４０２において、現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にあると判断した場合（Ｓ４０２のＹＥＳ）、ステップＳ４０３にて、暗号処理部１２０は、メモリＡ１３０から読み出されたデータをＡＥＳ共通鍵を用いて復号してＣＰＵコア１１０に転送する。
【００２８】
また、ステップＳ４０２において、現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないと判断した場合（Ｓ４０２のＮＯ）、ステップＳ４０４にて、暗号処理部１２０は、メモリＡ１３０から読み出されたデータに対してＡＥＳ共通鍵を用いた復号処理を施さずにＣＰＵコア１１０に転送する。これにより、アドレス登録領域１２１に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードから、アドレス登録領域１２１に登録されているアドレス範囲内にアクセスがあった場合、暗号化されたデータを返し、復号されたデータを不正に取得されることを防止することができる。
【００２９】
図５は、第１の実施形態におけるメモリＢ１４０へのアクセス処理の例を示すフローチャートである。前述したようにメモリＢ１４０は、秘匿プログラムの実行時のワーク領域として使用されるメモリ領域であり、暗号化されずにデータが記憶されている。ＣＰＵコア１１０からメモリＢ１４０へのアクセス要求（リードアクセス）があると、ステップＳ５０１にて、暗号処理部１２０は、アドレス登録領域１２１を参照して、ＣＰＵコア１１０のプログラムカウンタ１１１が示す現在の実行アドレス（ＰＣ値）が、アドレス登録領域１２１に登録されているアドレス範囲内にあるか否かを判断する。
【００３０】
現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にあると判断した場合（Ｓ５０１のＹＥＳ）、ステップＳ５０２にて、暗号処理部１２０は、メモリＢ１４０から読み出されたデータに対して復号処理を施さずにＣＰＵコア１１０に転送する。一方、現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないと判断した場合（Ｓ５０１のＮＯ）、暗号処理部１２０は、アクセス不可とする（特定値を返す、又は例外処理とする）。これにより、アドレス登録領域１２１に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードから、メモリＢ１４０へのアクセスを防ぐことができる。
【００３１】
次に、第１の実施形態におけるプロセッサシステムでの動作について説明する。まず、第１の実施形態におけるプロセッサシステムで実行するソフトウェアの準備について説明する。プロセッサシステムで実行するソフトウェアの準備は、秘匿プログラム及び鍵情報の作成、起動プログラムの作成、制御プログラムの作成、及びメモリＡ１３０への書き込みデータの作成に分けられる。
【００３２】
秘匿プログラム及び鍵情報の作成では、秘匿プログラムは、制御プログラムから呼び出される処理のアドレス（関数アドレス等）を固定とし、メモリＡ１３０上で実行する形式でオブジェクトを作成する。鍵情報は、メモリＡ１３０での格納アドレスを固定として処理を作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成するようにし、秘匿プログラムの処理中に利用するワークメモリはメモリＢ１４０を利用するようにして作成する。
【００３３】
起動プログラムの作成では、秘匿プログラム及び鍵情報のメモリＡ１３０での格納アドレスとサイズ情報とを予め取得しておく。そして、秘匿プログラム及び鍵情報のメモリＡ１３０での格納アドレスとサイズ情報とを暗号処理部１２０のアドレス登録領域１２１に登録する処理を実装し、メモリＡ１３０上で実行する形式でオブジェクトを作成する。
【００３４】
制御プログラムの作成では、秘匿プログラムの先頭処理アドレス（関数アドレス等）や入出力領域の情報の取得に利用する引数の情報を予め取得しておく。そして、秘匿プログラムを呼び出す場合、入出力領域を確保して入力データを格納し、入出力領域の情報を引数を利用して渡すようにし、アドレス指定（関数アドレス等）で秘匿プログラムを呼び出すようにして制御プログラムを作成する。
【００３５】
メモリＡ１３０への書き込みデータの作成では、秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムについて、暗号処理部１２０に格納されるＡＥＳ共通鍵で暗号化し、それぞれのメモリＡ１３０での格納アドレスとサイズ情報を基に書き込みデータを作成して、メモリＡ１３０へ書き込みを行う。このようにして、秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムの暗号化されたデータをメモリＡ１３０に書き込み、図６に示すような動作が行われる。
【００３６】
図６は、第１の実施形態におけるプロセッサシステムでの秘匿プログラムの実行を含む動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップＳ６０１にて、プロセッサシステムは、起動プログラムを実行する。ステップＳ６０１での起動プログラムの実行では、ＣＰＵコア１１０及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、ＣＰＵコア１１０が、メモリＡ１３０に格納されている秘匿プログラム及び鍵情報のアドレス範囲を、暗号処理部１２０のアドレス登録領域１２１に登録し、制御プログラムを起動する（制御プログラムのアドレスへジャンプする）。
【００３７】
続く、ステップＳ６０２にて、ＣＰＵコア１１０が、制御プログラムを実行する。制御プログラムの実行中には、例えば外部プログラムのダウンロードや外部プログラムの呼び出しなどが行われる。外部プログラムには、例えば制御プログラムの実行後にネットワーク等を介してダウンロードしたプログラムや端末を含む。また、制御プログラムの実行中には、例えば秘匿プログラムの呼び出し（関数アドレス等）が行われる。
【００３８】
秘匿プログラムの呼び出しが行われると、ステップＳ６０３にて、ＣＰＵコア１１０が、秘匿プログラムを実行する。ステップＳ６０３での秘匿プログラムの実行では、例えばＣＰＵコア１１０が、鍵情報にアクセスして暗号処理等を行う。そして、秘匿プログラムの処理が終了すると、制御プログラムに戻る。
【００３９】
以上のように第１の実施形態では、図７に示すようにメモリＡ１３０に起動プログラム７０１、制御プログラム７０２、秘匿プログラム（暗号処理等）及び鍵情報７０３の命令コード等を含むデータをＡＥＳ共通鍵で暗号化して格納する。また、メモリＡ１３０に格納されている起動プログラム７０１、秘匿プログラム（暗号処理等）及び鍵情報７０３のアドレス範囲を暗号処理部１２０に登録する。
【００４０】
プロセッサ１００が、起動プログラム、制御プログラム、秘匿プログラムの処理を実行する際には、メモリＡ１３０から暗号化されたデータ７２１を読み出し、プロセッサ１００内の暗号処理部１２０で復号処理を行う。そして、暗号処理部１２０で復号された平文データ７２２をＣＰＵコア１１０に供給して処理を実行する。
【００４１】
例えば、起動プログラムは、秘匿プログラム（暗号処理等）及び鍵情報７０３のアドレス範囲を暗号処理部１２０に登録し、その後に制御プログラムを起動する。制御プログラムは秘匿プログラム（暗号化処理や復号処理等）を呼び出し（Ｐ７０１）、呼び出された秘匿プログラムは鍵情報にアクセスして暗号処理等を行う。また、制御プログラムは外部プログラムを必要に応じて呼び出す（Ｐ７０２）ことがある。
【００４２】
ここで第１の実施形態では、暗号化されたデータの復号において、暗号処理部１２０は、登録されているアドレス範囲（図７に示す例では起動プログラム７０１、秘匿プログラム（暗号処理等）及び鍵情報７０３のアドレス範囲）に格納されている暗号化されたデータについては、現在の実行アドレス（ＰＣ値）が登録されているアドレス範囲内にある場合には復号処理を施し、登録されているアドレス範囲内にない場合には復号処理を施さない。すなわち、現在の実行アドレス（ＰＣ値）が登録されているアドレス範囲の範囲外である場合、登録されているアドレス範囲に格納されている暗号化されたデータは復号されずに暗号化された状態でＣＰＵコア１１０に転送されることとなる。
【００４３】
このように第１の実施形態では、各種プログラムや鍵情報等のデータをＡＥＳ共通鍵で暗号化してメモリＡ１３０に格納する。したがって、メモリＡ１３０からのデータ読み取り等の物理攻撃が行われても、各種プログラムや鍵情報等のデータが漏洩することがない。
【００４４】
また、暗号処理部１２０に、起動プログラムのアドレス範囲を事前に登録しておくとともに、登録されたアドレス範囲に格納されている起動プログラムや秘匿プログラムによって秘匿プログラムや鍵情報の秘匿データを格納するアドレス範囲を登録する。そして、現在の実行アドレス（ＰＣ値）が登録されているアドレス範囲の範囲外である場合、登録されているアドレス範囲に格納されている暗号化されたデータは復号されずに暗号化された状態でＣＰＵコア１１０に転送する。これにより、外部プログラム７１１が、起動プログラム７０１や秘匿プログラム（暗号処理等）及び鍵情報７０３を読み出そうとした場合（Ｐ７０３）、外部プログラムの実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないため、起動プログラム７０１や秘匿プログラム（暗号処理等）及び鍵情報７０３のデータは暗号化された状態で読み出されるので漏洩することがない。
【００４５】
このようにＣＰＵコア１１０の実行アドレスやアクセスアドレスと登録されているアドレス範囲とを比較する回路等を設けることで、起動前から起動後まで起動プログラム７０１や秘匿プログラム（暗号処理等）及び鍵情報７０３のデータが漏洩することを防ぐことができ、実装及び開発のコストが増大することを抑制し、起動前から起動後まで起動プログラム７０１や秘匿プログラム（暗号処理等）及び鍵情報７０３のデータのセキュリティを確保することが可能となる。なお、制御プログラムに関しては、特に制約はなく、メモリＡ１３０やメモリＣ１５０に自由に配置して動作させることができるので、従来のプログラムとの親和性が高くコストの増大を抑制することができる。
【００４６】
次に、メモリＡ１３０に格納される秘匿プログラム及び鍵情報の更新及び切り替えについて説明する。秘匿プログラム及び鍵情報を更新する場合、更新データの認証を行った後にメモリＡ１３０に書き込む必要がある。本実施形態では、更新データの認証を行う秘匿プログラムがメモリＡ１３０上で実行されるため、同じ領域への書き込みを行うことができない。そこで、本実施形態では、図８に示すように秘匿プログラム及び鍵情報の更新及び切り替えを行う。
【００４７】
図８は、第１の実施形態における秘匿プログラム及び鍵情報の更新方法を説明する図である。図８（Ａ）に示すように、メモリＡ１３０に、起動プログラム８０１、制御プログラム８０２、プログラム切り替え判断／更新処理プログラム８０３、秘匿プログラムＡ及び鍵情報Ａ８０４の命令コード等を含むデータがＡＥＳ共通鍵で暗号化されて格納されている。また、メモリＡ１３０に格納されている起動プログラム８０１、プログラム切り替え判断／更新処理プログラム８０３、秘匿プログラムＡ及び鍵情報Ａ８０４のアドレス範囲が暗号処理部１２０に登録されている。
【００４８】
秘匿プログラムＢ及び鍵情報Ｂ８０６に更新するとき、制御プログラム８０２がプログラム切り替え判断／更新処理プログラム８０３に対して更新依頼を行う（Ｐ８０１）。更新依頼を受けたプログラム切り替え判断／更新処理プログラム８０３は、現在有効な秘匿プログラムＡ８０４を呼び出し、秘匿プログラムＡが鍵情報Ａを使用して更新データ８０６の署名確認を行う（Ｐ８０３）。
【００４９】
その結果、署名が正しければ、秘匿プログラムＢ及び鍵情報Ｂ８０６のデータをＡＥＳ共通鍵で暗号化してメモリＡ１３０のブランク領域８０５Ａに書き込む（Ｐ８０３）。なお、ブランク領域８０５Ａのアドレス範囲については、秘匿プログラムＢ及び鍵情報Ｂ８０６の暗号化されたデータを書き込む前に、起動プログラム又は秘匿プログラムＡによって暗号処理部１２０に登録しておけば良い。
【００５０】
このようにして図８（Ｂ）に示すように、さらに、秘匿プログラムＢ及び鍵情報Ｂ８０５の暗号化されたデータがメモリＡ１３０に格納され、秘匿プログラムＢ及び鍵情報Ｂ８０５のアドレス範囲が暗号処理部１２０に登録された状態での運用時について説明する。制御プログラム８０１から秘匿プログラムの呼び出し（Ｐ８１１）が行われると、プログラム切り替え判断／更新処理プログラム８０３が、メモリＡ１３０に格納されている秘匿プログラム及び鍵情報のいずれが最新のものであるかを判断する。そして、プログラム切り替え判断／更新処理プログラム８０３が、最新であると判断した秘匿プログラムを呼び出し（Ｐ８１２）、秘匿プログラムが実行される。
【００５１】
図９は、第１の実施形態における秘匿プログラム及び鍵情報の更新処理の例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップＳ９０１にて、プロセッサシステムは、起動プログラムを実行する。ステップＳ９０１での起動プログラムの実行では、ＣＰＵコア１１０及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、ＣＰＵコア１１０が、メモリＡ１３０に格納されているプログラム切り替え判断／更新処理プログラム、秘匿プログラム及び鍵情報のアドレス範囲を暗号処理部１２０に登録し、制御プログラムを起動する（制御プログラムのアドレスへジャンプする）。
【００５２】
続く、ステップＳ９０２にて、ＣＰＵコア１１０が、制御プログラムを実行する。制御プログラムの実行において、秘匿プログラム及び鍵情報の更新データを受信して、プログラム切り替え判断／更新処理プログラムの呼び出しを行う。プログラム切り替え判断／更新処理プログラムが呼び出され実行されると、ステップＳ９０３にて、ＣＰＵコア１１０が、どの秘匿プログラムが有効であるかを判断して、有効な秘匿プログラムの呼び出しを行う（本例では、秘匿プログラムＡを呼び出すものとする）。
【００５３】
秘匿プログラムＡの呼び出しが行われると、ステップＳ９０４にて、ＣＰＵコア１１０が、秘匿プログラムＡを実行する。ステップＳ９０４での秘匿プログラムＡの実行では、ＣＰＵコア１１０が、鍵情報Ａにアクセスして更新データの署名確認を行う。その結果、署名が正しければ、メモリＡ１３０に新たな秘匿プログラム及び鍵情報の暗号化されたデータを書き込み、制御プログラムに戻る。
【００５４】
図１０は、第１の実施形態における秘匿プログラム及び鍵情報の更新後の動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップＳ１００１にて、プロセッサシステムは、起動プログラムを実行する。ステップＳ１００１での起動プログラムの実行では、ＣＰＵコア１１０及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、ＣＰＵコア１１０が、メモリＡ１３０に格納されているプログラム切り替え判断／更新処理プログラム、秘匿プログラム及び鍵情報のアドレス範囲を暗号処理部１２０に登録し、制御プログラムを起動する（制御プログラムのアドレスへジャンプする）。
【００５５】
続く、ステップＳ１００２にて、ＣＰＵコア１１０が、制御プログラムを実行する。制御プログラムの実行において、プログラム切り替え判断／更新処理プログラムの呼び出しを行う。プログラム切り替え判断／更新処理プログラムが呼び出され実行されると、ステップＳ１００３にて、ＣＰＵコア１１０が、どの秘匿プログラムが最新（有効）であるかを判断して、最新の秘匿プログラムの呼び出しを行う（本例では、秘匿プログラムＢを呼び出すものとする）。
【００５６】
秘匿プログラムＢの呼び出しが行われると、ステップＳ１００４にて、ＣＰＵコア１１０が、秘匿プログラムＢを実行する。ステップＳ１００４での秘匿プログラムＢの実行では、例えばＣＰＵコア１１０が、鍵情報Ｂにアクセスして暗号処理等を行う。そして、秘匿プログラムＢの処理が終了すると、制御プログラムに戻る。
【００５７】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。図１１は、第２の実施形態におけるプロセッサシステムの構成例を示す図である。第２の実施形態におけるプロセッサシステムは、ＣＰＵコア１１１０、暗号処理部１１２０、メモリＡ１１３０、メモリＢ１１４０、及びデバイス１１５０を有する。暗号処理部１１２０、メモリＡ１１３０、及びメモリＢ１１４０は、バス１１６１によって相互に接続されている。なお、ＣＰＵコア１１１０は、図示しないバスを介して他の機能部等とも接続されている。ＣＰＵコア１１１０は、プログラムの命令コードに従って処理を実行する。
【００５８】
暗号処理部１１２０は、メモリＡ１１３０やメモリＢ１１４０との間で入出力されるデータを暗号化したり復号したりする機能を有する。本実施形態では、メモリＡ１１３０やメモリＢ１１４０に格納されるデータの暗号化処理及び復号処理は、共通鍵暗号方式におけるＡＥＳ暗号方式で行われるものとする。
【００５９】
暗号処理部１１２０は、システム毎に異なるＩＤ情報１１２１を保持するとともに、鍵やアドレス情報が登録されるメモリ領域であるアドレス登録領域１１２２を有する。また、暗号処理部１１２０は、ＲＳＡ（Rivest Shamir Adleman）秘密鍵１１２３及びＲＳＡ公開鍵１１２４を保持する。暗号処理部１１２０に保持されるＲＳＡ秘密鍵１１２３及びＲＳＡ公開鍵１１２４は、システムにおける初回の電源投入時に１度だけ生成されるものであり、暗号処理部１１２０に保持されたＲＳＡ秘密鍵１１２３及びＲＳＡ公開鍵１１２４は消去不可とされる。また、暗号処理部１１２０に保持されたＲＳＡ公開鍵１１２４については、読み込み専用でアクセス可能となっている。
【００６０】
アドレス登録領域１１２２には、図１２に一例を示すように、アクセス制限するアドレス範囲に格納されたデータの暗号化に使用したＡＥＳ共通鍵、鍵長、アドレス範囲のアドレス（先頭アドレス）、サイズ、及び有効／無効情報を含む。図１２に示した例において、登録番号１の登録用レジスタに登録される情報は、起動プログラムに対応する、予め登録されている消去不可な情報である。登録番号３以降の登録用レジスタに登録される情報は、起動プログラムや秘匿プログラム等の実行時に追加登録される情報である。なお、登録番号２に示すように、消去不可な情報を加えて登録しておくようにしても良い。
【００６１】
暗号処理部１１２０は、ＣＰＵコア１１１０が有するプログラムカウンタ（ＰＣ）１１１１のＰＣ値（実行アドレス）を監視する機能を有する。暗号処理部１１２０は、メモリＡ１１３０及びメモリＢ１１４０に対するアクセスアドレスを監視する機能を有する。また、暗号処理部１１２０は、例えばネットワークデバイスやキーボード等の特定のデバイス１１５０へのアクセスの有効／無効を制御する機能を有する。暗号処理部１２０は、プログラムカウンタ（ＰＣ）１１１のＰＣ値（実行アドレス）、ＣＰＵコア１１１０からのアクセスアドレス、及びアドレス登録領域１２１に登録されているアドレス情報に応じて、データに対する暗号化処理や復号処理を行うか否かを切り替えたり、アクセスの有効／無効を制御したりする。
【００６２】
メモリＡ１１３０には、ＡＥＳ共通鍵で暗号化された起動プログラム１１３１、ＡＥＳ共通鍵で暗号化された制御プログラムなど１１３２、及びＡＥＳ共通鍵で暗号化された秘匿プログラム及び鍵情報１１３３が格納される。メモリＡ１１３０は、例えば外部ＲＯＭである。外部ＲＯＭとしては、例えばマスクＲＯＭや、ＯＴＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ等のＰＲＯＭが適用可能である。メモリＢ１１４０は、各プログラムの実行時のワーク領域として使用されるとともに、システムの運用中にＡＥＳ共通鍵で暗号化された秘匿プログラム及び鍵情報１１４１が格納可能となっている。
【００６３】
本実施形態において、制御プログラムと秘匿プログラム（暗号処理プログラム等）との間でのデータ入出力は、メモリＢ１１４０を利用する。制御プログラムは、秘匿プログラムを呼び出す前に入出力領域を確保して入力データを格納した後、秘匿プログラムの処理呼び出し（関数アドレスなど）を行う。秘匿プログラムの呼び出し時には引数（スタックやレジスタ等）を利用し、制御プログラムで確保したメモリ領域のアドレスやサイズの情報等を秘匿プログラムに渡す。秘匿プログラムは、入力データや鍵情報にアクセスし、データ内容に応じた処理（暗号処理等）を行った後、制御プログラムで確保した入出力領域に出力データを格納し、制御プログラムの呼び出し元へ戻る。
【００６４】
図１３及び図１４を参照して、第２の実施形態における暗号処理部１１２０の動作について説明する。図１３は、第２の実施形態におけるアドレス登録処理の例を示すフローチャートである。アドレス登録処理は、暗号処理部１１２０のアドレス登録領域１１２２への情報の登録や修正を行う処理である。ＣＰＵコア１１１０からアドレス登録領域１１２２へのアクセス要求があると、ステップＳ１３０１にて暗号処理部１１２０は、アドレス登録領域１１２２を参照して、ＣＰＵコア１１１０のプログラムカウンタ１１１１が示す現在の実行アドレス（ＰＣ値）が、アドレス登録領域１１２２に登録されているアドレス範囲内にあるか否かを判断する。
【００６５】
現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にあると判断した場合（Ｓ１３０１のＹＥＳ）、ステップＳ１３０２にて、暗号処理部１１２０は、アクセス要求がアドレス登録領域１１２２に登録されている情報の出力要求であるか否かを判断する。登録されている情報の出力要求であると判断した場合（Ｓ１３０２のＹＥＳ）、ステップＳ１３０３にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、登録されている情報（登録番号、ＡＥＳ共通鍵のハッシュ値、鍵長、アドレス、サイズ、有効／無効情報）を出力する。
【００６６】
ステップＳ１３０２での判断の結果、登録されている情報の出力要求ではないと判断した場合（ステップＳ１３０２のＮＯ）、ステップＳ１３０４にて、暗号処理部１１２０は、アクセス要求がＲＳＡ暗号化なしでの新規登録要求であるか否かを判断する。ＲＳＡ暗号化なしでの新規登録要求であると判断した場合（Ｓ１３０４のＹＥＳ）、ステップＳ１３０５にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、新規登録する情報のアドレス範囲と登録されている情報のアドレス範囲とがオーバーラップしないかを判断する。
【００６７】
そして、アドレス範囲がオーバーラップしないと判断した場合（Ｓ１３０５のＹＥＳ）、ステップＳ１３０６にて、暗号処理部１１２０は、登録番号、コピーするＡＥＳ共通鍵の登録番号、鍵長、アドレス、サイズ、有効／無効情報を読み込み、アドレス登録領域１１２２の所定の登録番号にＡＥＳ共通鍵、鍵長、アドレス、サイズ、有効／無効情報を登録する。一方、アドレス範囲がオーバーラップすると判断した場合（Ｓ１３０５のＮＯ）、ステップＳ１３０７にて、暗号処理部１１２０は、エラー情報を出力する。
【００６８】
ステップＳ１３０４での判断の結果、ＲＳＡ暗号化なしでの新規登録要求ではないと判断した場合（ステップＳ１３０４のＮＯ）、ステップＳ１３０８にて、暗号処理部１１２０は、アクセス要求がＲＳＡ暗号化ありでの新規登録要求であるか否かを判断する。ＲＳＡ暗号化ありでの新規登録要求であると判断した場合（Ｓ１３０８のＹＥＳ）、ステップＳ１３０９にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、新規登録する情報のアドレス範囲と登録されている情報のアドレス範囲とがオーバーラップしないかを判断する。
【００６９】
そして、アドレス範囲がオーバーラップしないと判断した場合（Ｓ１３０９のＹＥＳ）、ステップＳ１３１０にて、暗号処理部１１２０は、ＲＳＡ公開鍵で暗号化された登録番号、ＡＥＳ共通鍵、鍵長、アドレス、サイズ、有効／無効情報を読み込んでＲＳＡ秘密鍵で復号し、アドレス登録領域１１２２の所定の登録情報にＡＥＳ共通鍵、鍵長、アドレス、サイズ、有効／無効情報を登録する。一方、アドレス範囲がオーバーラップすると判断した場合（Ｓ１３０９のＮＯ）、ステップＳ１３１１にて、暗号処理部１１２０は、エラー情報を出力する。
【００７０】
ステップＳ１３０８での判断の結果、ＲＳＡ暗号化ありでの新規登録要求ではないと判断した場合（ステップＳ１３０８のＮＯ）、ステップＳ１３１２にて、暗号処理部１１２０は、アクセス要求が登録されている情報の有効化又は無効化の要求であるか否かを判断する。情報の有効化又は無効化の要求であると判断した場合（Ｓ１３１２のＹＥＳ）、ステップＳ１３１３にて、暗号処理部１１２０は、登録番号及び有効化するか又は無効化するかの情報を受け、その登録番号の情報を有効化又は無効化する。これにより、特定の登録番号に対応するＡＥＳ復号機能の有効化、無効化を制御することが可能となる。
【００７１】
ステップＳ１３０１で現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないと判断した場合（Ｓ１３０１のＮＯ）、又はステップＳ１３１２でアクセス要求が登録されている情報の有効化又は無効化の要求ではないと判断した場合、暗号処理部１２０は、要求に応じた処理を行わずに処理を終了する。このように処理を行うことで、アドレス登録領域１２１に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードによって、アドレス登録領域１２１の登録情報が変更されることを防止することができる。
【００７２】
図１４は、第２の実施形態における暗号処理部１１２０の暗号化／復号処理の例を示すフローチャートである。ＣＰＵコア１１１０からのアクセス要求があると、ステップＳ１４０１にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、ＣＰＵコア１１１０のプログラムカウンタ１１１１が示す現在の実行アドレス（ＰＣ値）が、アドレス登録領域１１２２に登録されているアドレス範囲内にあるか否かを判断する。
【００７３】
現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にあると判断した場合（Ｓ１４０１のＹＥＳ）、ステップＳ１４０２にて、暗号処理部１１２０は、アクセス要求が読み込み要求であるか書き込み要求であるかを判断する。読み込み要求であると判断した場合、ステップＳ１４０３にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、読み込み先アドレスが実行アドレスと同一のアドレス範囲内にあるか否かを判断する。
【００７４】
読み込み先アドレスが実行アドレスと同一のアドレス範囲内にあると判断した場合（Ｓ１４０３のＹＥＳ）、ステップＳ１４０４にて、暗号処理部１１２０は、読み込み先アドレスから読み出されたデータを、実行アドレスに対応するＡＥＳ共通鍵を用いて復号してＣＰＵコア１１１０に転送する。なお、ステップＳ１４０４においては、デバイス１１５０のアクセスである場合にはアクセス許可とする。一方、読み込み先アドレスが実行アドレスと同一のアドレス範囲内にないと判断した場合（Ｓ１４０３のＮＯ）、ステップＳ１４０５にて、暗号処理部１１２０は、読み込み先アドレスから読み出されたデータに対してＡＥＳ共通鍵を用いた復号処理を施さずにＣＰＵコア１１１０に転送する。
【００７５】
また、ステップＳ１４０２で書き込み要求であると判断した場合、ステップＳ１４０６にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、書き込み先アドレスが実行アドレスと同一のアドレス範囲内にあるか否かを判断する。
【００７６】
書き込み先アドレスが実行アドレスと同一のアドレス範囲内にあると判断した場合（Ｓ１４０６のＹＥＳ）、ステップＳ１４０７にて、暗号処理部１１２０は、書き込み先アドレスへ書き込むデータを、実行アドレスに対応するＡＥＳ共通鍵を用いて暗号化して書き込みを行う。一方、書き込み先アドレスが実行アドレスと同一のアドレス範囲内にないと判断した場合（Ｓ１４０６のＮＯ）、ステップＳ１４０８にて、暗号処理部１１２０は、書き込み先アドレスへ書き込むデータに対してＡＥＳ共通鍵を用いた暗号化処理を施さずに書き込みを行う。
【００７７】
ステップＳ１４０１において、現在の実行アドレス（ＰＣ値）が、登録されているアドレス範囲内にないと判断した場合（Ｓ１４０１のＮＯ）、ステップＳ１４０９にて、暗号処理部１１２０は、アドレス登録領域１１２２を参照して、読み込み先アドレス又は書き込み先アドレスがアドレス登録領域１１２２に登録されているアドレス範囲内にあるか否かを判断する。読み込み先アドレス又は書き込み先アドレスが、登録されているアドレス範囲内にあると判断した場合（Ｓ１４０９のＹＥＳ）、ステップＳ１４１０にて、暗号処理部１１２０は、データに対する暗号化処理及び復号処理を施さずに転送する。なお、ステップＳ１４１０においては、デバイス１１５０のアクセスである場合にはアクセス不許可とする。読み込み先アドレス又は書き込み先アドレスが、登録されているアドレス範囲内にないと判断した場合（Ｓ１４０９のＮＯ）、何もせずに処理を終了する。
【００７８】
このように処理を行うことで、アドレス登録領域１１２２に登録されているアドレス範囲において、同じアドレス範囲からのアクセスによってのみデータに対する暗号化処理及び復号処理が施されるので、データの漏洩を防止することができる。
【００７９】
次に、第２の実施形態におけるプロセッサシステムでの動作について説明する。まず、第２の実施形態におけるプロセッサシステムで実行するソフトウェアの準備について説明する。プロセッサシステムで実行するソフトウェアの準備は、秘匿プログラム及び鍵情報の作成（メモリＡ１１３０書き込み用）、制御プログラムの作成、起動プログラムの作成、秘匿プログラム及び鍵情報の作成（配信用）、及び新規登録情報の作成（配信用）に分けられる。
【００８０】
秘匿プログラム及び鍵情報の作成（メモリＡ１１３０書き込み用）では、秘匿プログラム及び鍵情報は、制御プログラムから呼び出される処理のアドレス（関数アドレス等）を固定としてオブジェクトを作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成する。そして、暗号処理部１１２０に実装されたＡＥＳ共通鍵（起動プログラムに対応する鍵以外の鍵）で暗号化する。
【００８１】
制御プログラムの作成では、ネットワーク等を介して外部から新規登録情報（配信用）を受け取り、実装されたＩＤ情報と照合し一致した場合に、暗号処理部１１２０のアドレス登録領域１１２２へＲＳＡ暗号化ありで新規登録を行う処理を制御プログラムに実装する。また、ネットワーク等を介して外部から秘匿プログラム及び鍵情報（配信用）を受け取り、実装されたＩＤ情報と照合し一致した場合に、所定のアドレスに配置した後、秘匿プログラムを呼び出す処理を制御プログラムに実装する（処理の実行後に、ハッシュ情報を配信元へ返却する処理を合わせて実装するようにしても良い）。秘匿プログラム及び鍵情報（メモリＡ１１３０書き込み用）の秘匿プログラムを呼び出す処理や、暗号処理部１１２０からＩＤ情報やアドレス登録情報を取得して内部のアプリケーションや外部の配信者に送る処理を制御プログラムに実装する。そして、暗号処理部１１２０に実装されたＡＥＳ共通鍵（起動プログラムに対応する鍵以外の鍵）で暗号化する。
【００８２】
起動プログラムの作成では、秘匿プログラム及び鍵情報（メモリＡ１１３０書き込み用）及び制御プログラムについて、暗号処理部１１２０へＲＳＡ暗号化なしで新規登録を行う処理を起動プログラムに実装する。そして、暗号処理部１１２０に実装された、起動プログラムに対応するＡＥＳ共通鍵で暗号化する。このようにして作成された秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムの暗号化されたデータをメモリＡ１１３０に書き込む。
【００８３】
秘匿プログラム及び鍵情報の作成（配信用）では、秘匿プログラム及び鍵情報は、制御プログラムから呼び出される処理のアドレス（関数アドレス等）を固定としてオブジェクトを作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成する。自身の秘匿プログラム及び鍵情報のハッシュ値を取り、鍵情報で暗号化した上で制御プログラムへ返却する処理を作成する。そして、新規登録用のＡＥＳ共通鍵を生成して暗号化する。
【００８４】
また、新規登録情報の作成（配信用）では、秘匿プログラム及び鍵情報の作成（配信用）で作成したＡＥＳ共通鍵と秘匿プログラムの実行アドレス、サイズ、有効／無効情報を暗号処理部１１２０で作成されたＲＳＡ公開鍵で暗号化する。秘匿プログラム及び鍵情報の作成（配信用）、及び新規登録情報の作成（配信用）で作成されたデータは、作成情報にＩＤ情報（配信者特定情報）を加え、セキュリティ保護されたネットワーク等を介して配信される。
【００８５】
ここで、仮に起動プログラム用のＡＥＳ共通鍵が漏洩した場合、起動プログラムについては解析可能となるが、本実施形態では起動プログラムにＡＥＳ共通鍵を実装しておらず、秘匿プログラムは別のＡＥＳ共通鍵で暗号化しているため解析されることはない。また、秘匿プログラム（メモリＡ１１３０書き込み用）の暗号化に用いたＡＥＳ共通鍵が漏洩した場合、秘匿プログラム（メモリＡ１１３０書き込み用）については解析可能となるが、本実施形態では外部から安全に新規のＡＥＳ共通鍵を登録して別の秘匿プログラムを実行することができるため、ＡＥＳ共通鍵の漏洩に対する対応が可能となる。
【００８６】
図１５は、第２の実施形態におけるプロセッサシステムでの秘匿プログラムの実行を含む動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップＳ１５０１にて、プロセッサシステムは、起動プログラムを実行する。ステップＳ１５０１での起動プログラムの実行では、ＣＰＵコア１１１０及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、ＣＰＵコア１１１０が、メモリＡ１１３０に格納されている秘匿プログラム及び鍵情報について、暗号処理部１１２０のアドレス登録領域１１２２にＲＳＡ暗号化なしで登録し、制御プログラムを起動する。
【００８７】
続く、ステップＳ１５０２にて、ＣＰＵコア１１１０が、制御プログラムを実行する。制御プログラムの実行中には、例えば外部プログラムのダウンロードや外部プログラムの呼び出しや秘匿プログラムの呼び出しなどが行われる。また、制御プログラムの実行中には、例えば外部から新規登録情報を受け取り、実装されたＩＤ情報と照合し一致した場合に、暗号処理部１１２０へＲＳＡ暗号化ありで新規登録を行ったり、外部から秘匿プログラム及び鍵情報を受け取り、実装されたＩＤ情報と照合し一致した場合に、所定のアドレスに配置した後、秘匿プログラムの呼び出しを行ったりする処理を行う。また、暗号処理部１１２０からＩＤ情報やアドレス登録情報を取得して内部のアプリケーションや外部の配信者に送る処理を行う。
【００８８】
制御プログラムの実行において秘匿プログラム（メモリＡ１１３０書き込み用）の呼び出しが行われると、ステップＳ１５０３にて、ＣＰＵコア１１１０が秘匿プログラムを実行し、例えば鍵情報にアクセスして暗号処理等を行う。秘匿プログラム（メモリＡ１１３０書き込み用）の処理が終了すると、制御プログラムに戻る。
【００８９】
また、制御プログラムの実行において秘匿プログラム（配信用）の呼び出しが行われると、ステップＳ１５０４にて、自身の秘匿プログラム及び鍵情報のハッシュ値を取り、鍵情報で暗号化した上で制御プログラムへ返却する。また、ＣＰＵコア１１１０が秘匿プログラムを実行し、例えば鍵情報にアクセスして暗号処理等を行う。秘匿プログラム（配信用）の処理が終了すると、制御プログラムに戻る。
【００９０】
以上のように第２の実施形態において、図７に示した第１の実施形態と同様にメモリＡ１１３０に起動プログラム、制御プログラム、秘匿プログラム（暗号処理等）及び鍵情報の命令コード等を含むデータをＡＥＳ共通鍵で暗号化して格納し、メモリＡ１１３０に格納されている起動プログラム、秘匿プログラム（暗号処理等）及び鍵情報のアドレス範囲を暗号処理部１１２０に登録したとする。この場合には、各種プログラムや鍵情報等のデータをＡＥＳ共通鍵で暗号化してメモリＡ１１３０に格納しているので、メモリＡ１１３０からのデータ読み取り等の物理攻撃が行われても、各種プログラムや鍵情報等のデータが漏洩することがない。また、登録されたアドレス範囲に格納されているデータを、同じアドレス範囲内ではないプログラム等によって読み出そうとした場合、データが暗号化された状態で読み出されて転送されるので漏洩することがない。
【００９１】
また、図１６に示すようにメモリＡ１１３０に起動プログラム１６０１及び制御プログラム１６０２のデータを第１のＡＥＳ共通鍵で暗号化して格納し、秘匿プログラム（暗号処理等）及び鍵情報１６０３のデータを第１のＡＥＳ共通鍵とは異なる第２のＡＥＳ共通鍵で暗号化してメモリＢ１１４０に格納する。そして、プロセッサ１１００が、起動プログラム、制御プログラム、秘匿プログラムの処理を実行する際には、メモリＡ１１３０又はメモリＢ１１４０から暗号化されたデータ１６２１を読み出し、プロセッサ１１００内の暗号処理部１１２０で復号処理を行う。そして、暗号処理部１１２０で復号された平文データ１６２２をＣＰＵコア１１１０に供給して処理を実行する。
【００９２】
例えば、秘匿プログラムをメモリＡ１１３０からメモリＢ１１４０に展開、又はネットワーク等を介してダウンロードしてメモリＢ１１４０に保持し、制御プログラムが秘匿プログラム（暗号化処理や復号処理等）を呼び出し（Ｐ１６０１）、呼び出された秘匿プログラムは鍵情報にアクセスして暗号処理等を行う。また、制御プログラムは外部プログラムを必要に応じて呼び出す（Ｐ１６０２）ことがある。
【００９３】
第２の実施形態では、暗号化されたデータの復号において、暗号処理部１１２０は、登録されているアドレス範囲に格納されている暗号化されたデータについては、現在の実行アドレス（ＰＣ値）が登録されているアドレス範囲内にあり、かつ現在の実行アドレス（ＰＣ値）とアクセス先のアドレスが同じアドレス範囲である場合に暗号化処理や復号処理を施し、そうでない場合には暗号化処理や復号処理を施さない。したがって、外部プログラム１６０４が、秘匿プログラム（暗号処理等）及び鍵情報１６０３を読み出そうとしても（Ｐ１６０３）、データが漏洩することはない。
【００９４】
このようにＣＰＵコア１１１０の実行アドレスやアクセスアドレスと登録されているアドレス範囲とを比較する回路等を設けることで、起動前から起動後まで秘匿プログラム（暗号処理等）及び鍵情報のデータ等が漏洩することを防ぐことができ、実装及び開発のコストが増大することを抑制し、起動前から起動後まで秘匿するデータのセキュリティを確保することが可能となる。なお、制御プログラムに関しては自由に配置して動作させることができるので、従来のプログラムとの親和性が高くコストの増大を抑制することができる。
【００９５】
次に、メモリＡ１１３０に格納される秘匿プログラム及び鍵情報の更新及び切り替えについて説明する。第２の実施形態においては、図８に示した第１の実施形態と同様の方法で秘匿プログラム及び鍵情報の更新及び切り替えを行うことが可能である。また、第２の実施形態では、図１７に示すようにしても秘匿プログラム及び鍵情報の更新及び切り替えを行うことが可能である。
【００９６】
図１７は、第２の実施形態における秘匿プログラム及び鍵情報の他の更新方法を説明する図である。図１７（Ａ）に示すように、秘匿プログラムＢ及び鍵情報Ｂ１７０５に更新するとき、メモリＡ１１３０に、起動プログラム１７０１及び制御プログラム１７０２のデータが第１のＡＥＳ共通鍵で暗号化されて格納されており、メモリＢ１１４０に、秘匿プログラムＡ及び鍵情報Ａ１７０４のデータが第２のＡＥＳ共通鍵で暗号化されて格納されている状態とする。
【００９７】
秘匿プログラムＢ及び鍵情報Ｂ１７０５に更新する際、制御プログラム１７０２は、現在有効な秘匿プログラムＡ１７０４を呼び出し（Ｐ１７０１）、秘匿プログラムＡが鍵情報Ａを使用して更新データ１７０５の署名確認を行う（Ｐ１７０２）。その結果、署名が正しければ、秘匿プログラムＢ及び鍵情報Ｂ１７０５のデータを第３のＡＥＳ共通鍵で暗号化してメモリＡ１１３０のブランク領域１７０３Ａに書き込む（Ｐ１７０３）。
【００９８】
このようにして図１７（Ｂ）に示すように、第１のＡＥＳ共通鍵で暗号化された起動プログラム１７０１及び制御プログラム１７０２のデータ、及び第３のＡＥＳ共通鍵で暗号化された秘匿プログラムＢ及び鍵情報Ｂ１７０３Ｂの暗号化されたデータがメモリＡ１１３０に格納される。運用時において制御プログラム１７０１は、秘匿プログラムＢ１７０３Ｂの呼び出し（Ｐ１７１１）、秘匿プログラムが実行される。
【００９９】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１００】
１００  プロセッサ
１１０  ＣＰＵコア
１１１  プログラムカウンタ
１２０  暗号処理部
１２１  アドレス登録領域
１３０  メモリＡ
１３１  起動プログラム
１３２  制御プログラム
１３３  秘匿プログラム・鍵情報
１４０  メモリＢ
１５０  メモリＣ
１１１０  ＣＰＵコア
１１１１  プログラムカウンタ
１１２０  暗号処理部
１１２１  ＩＤ情報
１１２２  アドレス登録領域
１１２３  ＲＳＡ秘密鍵
１１２４  ＲＳＡ公開鍵
１１３０  メモリＡ
１１３１  起動プログラム
１１３２  制御プログラム
１１３３  秘匿プログラム・鍵情報
１１４０  メモリＢ
１１４１  秘匿プログラム・鍵情報
１１５０  デバイス
【図１】
0006578814.tif 000002
【図２】
0006578814.tif 000003
【図３】
0006578814.tif 000004
【図４】
0006578814.tif 000005
【図５】
0006578814.tif 000006
【図６】
0006578814.tif 000007
【図７】
0006578814.tif 000008
【図８】
0006578814.tif 000009
【図９】
0006578814.tif 000010
【図１０】
0006578814.tif 000011
【図１１】
0006578814.tif 000012
【図１２】
0006578814.tif 000013
【図１３】
0006578814.tif 000014
【図１４】
0006578814.tif 000015
【図１５】
0006578814.tif 000016
【図１６】
0006578814.tif 000017
【図１７】
0006578814.tif 000018
【図１８】
0006578814.tif 000019