(57)【要約】【課題】セキュアプログラムを保護しながら、マイクロプロセッサを任意に操作することが可能な半導体装置を提供する。【解決手段】半導体装置は、任意のプログラムが格納される第１プログラム領域と、セキュアプログラムが格納される第２プログラム領域とを備えたメモリと、プログラム内の命令を指定するアドレスを出力するマイクロプロセッサＣＰＵと、マイクロプロセッサＣＰＵから出力されるアドレスに基づいて、メモリへのアクセスを制御するメモリプロテクションユニット２０４を備える。マイクロプロセッサＣＰＵが、第１プログラム領域におけるプログラムを実行することにより出力するアドレスが、第２プログラム領域における分岐許可領域を指定するとき、メモリプロテクションユニット２０４は、メモリへのアクセスを許可し、分岐禁止領域を指定するとき、メモリへのアクセスを禁止する。【選択図】図３
2019096338.tif 000002
【特許請求の範囲】
【請求項１】
中央処理ユニットと、前記中央処理ユニットによって実行されるセキュアプログラムとノンセキュアプログラムを格納する不揮発性メモリとを備えた半導体装置であって、
前記中央処理ユニットは、互いに異なる複数の割り込みを受付可能で、割り込みがあったとき、割り込みに対応した割り込み処理を実行する中央処理ユニットであって、前記中央処理ユニットは、
プログラムに従って動作する制御ユニットと、
前記制御ユニットが動作するときに、情報を保持するために用いられる複数のレジスタと、
割り込みがあったとき、前記複数のレジスタの値を退避する領域を指定するスタックポインタと、
前記複数のレジスタに保持されている値をクリアするレジスタクリア制御回路と、
を備え、
前記中央処理ユニットは、前記複数の割り込みのうちの第１割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタの値を退避した後、前記複数のレジスタのそれぞれをクリアし、前記第１割り込みに対応した所定の割り込み処理を実施し、
前記中央処理ユニットは、前記複数の割り込みのうち、前記第１割り込みとは異なる第２割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタに保持されている値を退避した後、前記レジスタクリア制御回路によって、前記複数のレジスタをクリアし、前記第２割り込みに対応した所定の割り込み処理を実施する、半導体装置。
【請求項２】
請求項１に記載の半導体装置において、
前記第１割り込みの発生は、前記セキュアプログラムによる監視によって、検出され、前記セキュアプログラムの実行により、前記スタックポインタにより指定されている領域への前記複数のレジスタの値の退避と、前記複数のレジスタのそれぞれのクリアとが行われ、
前記第２割り込みの発生に応答して、前記中央処理ユニットは、前記スタックポインタにより指定されている領域へ前記複数のレジスタの値を退避し、前記レジスタクリア制御回路によって前記複数のレジスタをクリアする、半導体装置。
【請求項３】
請求項２に記載の半導体装置において、
前記セキュアプログラムは、リアルタイムオペレーティングシステムである、半導体装置。
【請求項４】
プログラムを実行する中央処理ユニットと、前記中央処理ユニットに接続された電気的に書き換え可能な不揮発性メモリとを内蔵した半導体装置を販売する半導体装置販売モデルであって、
前記不揮発性メモリには、オペレーティングシステムを構成するセキュアプログラムが格納され、格納されたセキュアプログラムの対価を含めた対価で、前記半導体装置は販売され、
購入した前記半導体装置において、前記オペレーティングシステム上で動作するプログラムが、前記書き換え可能な不揮発性メモリに書き込まれる、半導体装置販売モデル。
【請求項５】
請求項４に記載の半導体装置販売モデルにおいて、
購入した前記半導体装置において、ネットワークを介してダウンロードしたプログラムが、前記不揮発性メモリに書き込まれる、半導体装置販売モデル。
【請求項６】
請求項５に記載の半導体装置販売モデルにおいて、
前記ダウンロードしたプログラムは、前記半導体装置を提供するものから提供される、半導体装置販売モデル。
【請求項７】
請求項６に記載の半導体装置販売モデルにおいて、
前記半導体装置は、ライセンス管理ユニットを備え、前記半導体装置を販売する前に、前記ライセンス管理ユニットに、プリペイドで有料ソフトの対価に相当するライセンス情報が格納され、
購入した半導体装置において、ダウンロードしたプログラムが有料ソフトの場合、前記ライセンス管理部は、格納されているライセンス情報に相当する対価に到達するまで、ダウンロードしたプログラムが、前記不揮発性メモリに格納されるのを許可する、半導体装置販売モデル。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、特にマイクロプロセッサと電気的に書き換え可能な不揮発性メモリとが、１個の半導体チップに内蔵された半導体装置に関する。
【背景技術】
【０００２】
マイクロプロセッサ（以下、中央処理ユニットとも称する）と電気的に書き換え可能な不揮発性メモリを、１個の半導体チップに内蔵した半導体装置が、例えばマイクロコンピュータとして知られている。このようなマイクロコンピュータは、セキュリティが要求される製品分野でも多く使われている。セキュリティが要求される製品分野でマイクロコンピュータを用いる場合、セキュリティに対するアタックは、マイクロコンピュータの外部から行われることが主である。そのため、セキュリティを守るために、マイクロコンピュータは、その外部からのアタックに対して耐性が高くなるようにされているが、マイクロコンピュータ内でのアタックに対する耐性は弱い場合が多い。
【０００３】
マイクロコンピュータに内蔵されたマイクロプロセッサは、例えばリアルタイムオペレーティングシステム（以下、ＲＴＯＳとも称する）で動作し、このＲＴＯＳ上でアプリケーションプログラムが動作する。この場合、ＲＴＯＳを、アプリケーションプログラムの暴走から守るために、例外割り込みを発生し、特権モードで動作させるようにすることが行われる。これにより、マイクロコンピュータ内で、アプリケーションプログラムを、悪意をもって暴走させても、ＲＴＯＳを守ることが可能となる。しかしながら、電源ノイズ等を繰り返し与えるようなアタックに対しては弱いと言う問題がある。
【０００４】
コンピュータシステムの保護に関する技術としては、例えば特許文献１に記載されている技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−３０４９５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明者らは、半導体装置を販売する新たなビジネスモデルを考えた。この新たな半導体装置販売モデルについては、後で詳しく説明するが、ここでは解決しようとする課題を説明するために、この新たな半導体装置販売モデルの概要を説明しておく。
【０００７】
新たな半導体装置販売モデルでは、ＲＴＯＳのようなセキュリティが担保されるべきプログラム（以下、セキュアプログラムとも称する）が、マイクロコンピュータの不揮発性メモリに予め格納されて、販売される。すなわち、マイクロコンピュータのような半導体装置を用いるユーザーへ提供される。マイクロコンピュータを購入したユーザーは、例えばＲＴＯＳ上で動作するユーザープログラムを作成し、不揮発性メモリに格納する。この場合、ユーザーは、ＲＴＯＳの備えている機能を利用したユーザープログラムを作成すればよいため、ユーザープログラムの作成が容易となる。その結果、ユーザーは、ユーザーが望む機能を有するマイクロコンピュータ（半導体装置）を、容易に製造することが可能となる。
【０００８】
この場合、マイクロコンピュータを販売（提供）する者（以下、販売者とも称する）は、例えばＲＴＯＳのようなプログラムを格納していない不揮発性メモリを内蔵したマイクロコンピュータの対価に、ＲＴＯＳのようなプログラムの対価を加えて、販売価格として販売する。これにより、販売者は、収益を上げることが可能となり、ユーザーは、ユーザープログラムの作成が容易なマイクロプロセッサを使うことができ、所望の機能を有するマイクロコンピュータを容易に得ることが可能となる。すなわち、販売者およびユーザーの双方でメリットが生じることになる。
【０００９】
この半導体装置販売モデルでは、ユーザーが、ＲＴＯＳ上で動作するプログラムを作成することになる。すなわち、マイクロコンピュータに内蔵されたマイクロプロセッサを操作するプログラムを、ユーザーが作成することになる。そのため、マイクロコンピュータにおいては、ユーザーのプログラムから、ＲＴＯＳが備えている機能を、任意に呼び出すことが可能となるようにしておくことが要求される。
【００１０】
ここで、ユーザーが、マイクロプロセッサを、任意に操作するプログラムを作成することが可能であり、ＲＴＯＳの機能も任意にアクセスすることが可能であることにより、新たな課題が発生する。例えば、ユーザーは、ＲＴＯＳをコピーするようなユーザープログラム、すなわちハッキングプログラムを作成することも可能となることが危惧される。悪意を持って、ＲＴＯＳをコピーされた場合、例えば、安価なマイクロコンピュータを購入し、そのマイクロコンピュータにコピーしたＲＴＯＳを格納することも可能となってしまう。このことは、販売者のメリットが失われてしまうことに繋がる。
【００１１】
特許文献１には、バッファオーバーフロー攻撃等による記憶領域内の機密データに対する削除、改竄、漏洩等を防止可能なコンピュータシステムに関する技術が記載されている。すなわち、特許文献１の図１に示されているコンピュータシステム（１）は、記憶領域（１９）のアドレス毎のＣＰＵ（１０）からのプログラム実行用のアクセス権の有無を設定したアクセス制御メモリマップを記憶するメモリマップ回路（１５）と、アクセス権判定回路（１６）を備えている。アクセス権判定回路（１６）は、プログラムカウンタ（２０）で指定される実行プログラム格納アドレス（Ｓｐｃ）の記憶領域へのＣＰＵ（１０）からのアクセス権の有無を、アクセス制御メモリマップに基づいて判定し、アクセス権がない場合には、ＣＰＵ（１０）から実行プログラム格納アドレスの記憶領域へのアクセスを不能にする所定の処理をＣＰＵ（１０）に実行させるアクセス禁止信号（ＳＣ）を出力する。
【００１２】
これにより、コンピュータシステム（１）の外部からのアタック、例えば電源ノイズを加えることにより、ＣＰＵを暴走させるアタックに対して、コンピュータシステムを保護することが可能となる。
【００１３】
しかしながら、これはコンピュータシステムの外部からのアタックに対する技術に関するものであり、マイクロプロセッサであるＣＰＵを任意に操作することが可能な場合のアタックに対しては意識されていない。勿論、新たな半導体装置販売モデルについては、記載もされていない。
【課題を解決するための手段】
【００１４】
一実施の形態による半導体装置は、任意のプログラムが格納される第１プログラム領域と、セキュリティが担保されるべきプログラムが格納される第２プログラム領域とを備えたメモリと、プログラム内の命令を指定するアドレスを出力する中央処理ユニット（マイクロプロセッサ）と、中央処理ユニットから出力されるアドレスに基づいて、メモリへのアクセスを制御するメモリプロテクションユニットを備える。中央処理ユニットが、第１プログラム領域におけるプログラムを実行することにより出力するアドレスが、第２プログラム領域における第１領域を指定するとき、メモリプロテクションユニットは、中央処理ユニットによるメモリへのアクセスを許可し、第１領域とは異なる第２領域を指定するとき、メモリプロテクションユニットは、中央処理ユニットによるメモリへのアクセスを禁止する。
【００１５】
すなわち、第１プログラム領域における任意のプログラムが、セキュリティが担保されるべきプログラムが格納される第２プログラム領域の第１領域をアクセスした際には、そのアクセスが許可され、第２プログラム領域の第２領域がアクセスされた際には、アクセスが禁止される。これにより、セキュリティが担保されるべきプログラムを、任意のプログラムから使うことが可能になるとともに、セキュリティが担保されるべきプログラムを保護することが可能となる。
【００１６】
また、他の一実施の形態による半導体装置は、セキュリティが担保されるべきプログラムが格納された電気的に書き換え可能な不揮発性メモリと、実行されるべき命令を指定するアドレスを出力する中央処理ユニットと、中央処理ユニットから出力されているアドレスが、不揮発性メモリにおいて、セキュリティが担保されるべきプログラムが格納されるセキュアプログラム領域を指定しているか否かを検出するメモリプロテクションユニットを備えている。さらに半導体装置は、不揮発性メモリの書き換えを制御する不揮発性メモリ書き換え制御回路と、不正アクセス検出回路を備えている。ここで、不正アクセス検出回路は、メモリプロテクションユニットが、中央処理ユニットから出力されているアドレスが、セキュアプログラム領域内を指定していないことを検出しているとき、不揮発性メモリ書き換え制御ユニットに書き換えを禁止させる。
【００１７】
これにより、中央処理ユニットが、セキュアプログラム領域におけるプログラムを実行していないとき、電気的に書き換え可能な不揮発性メモリの書き換えが禁止される。言い換えるならば、ユーザープログラムが実行されるノンセキュアプログラム領域において、プログラムが実行されているときには、電気的に書き換え可能な不揮発性メモリの書き換えが禁止される。その結果、セキュリティが担保されるべきプログラムの書き換えを可能にするとともに、ノンセキュアプログラム領域におけるプログラムによる書き換えから、セキュアプログラム領域におけるプログラムを保護することが可能となる。
【００１８】
さらに、他の一実施の形態においては、セキュリティが担保されるべきプログラムが暗号化されて、１つの半導体チップに形成された半導体装置へ提供される。ここで、半導体装置は、電気的に書き換え可能な不揮発性メモリと、不揮発性メモリに結合され、書き込まれたプログラムを実行することが可能な中央処理ユニットと、暗号化されて提供されたプログラムの暗号を復号化する復号回路と、復号回路によって復号されたプログラムを、直接不揮発性メモリへ書き込む書き換え回路を備えている。
【００１９】
これにより、中央処理ユニットを、ユーザープログラムによって任意に動作させることを可能とした場合でも、復号されたプログラムは、直接不揮発性メモリへ書き込まれるため、プログラムを保護することが可能となる。
【発明の効果】
【００２０】
一実施の形態によれば、セキュアプログラムを保護しながら、中央処理ユニットを任意に操作することが可能な半導体装置を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態１に係わる半導体装置販売モデルの構成を示すシステム図である。
【図２】実施の形態１に係わるマイクロコンピュータの構成を示すブロック図である。
【図３】実施の形態１に係わるメモリプロテクションユニットの構成を示すブロック図である。
【図４】メモリのプロテクションを説明する説明図である。
【図５】セキュアプログラムの模式図である。
【図６】実施の形態１に係わるメモリプロテクションユニットによるメモリのプロテクションを説明する説明図である。
【図７】（Ａ）および（Ｂ）は、実施の形態１に係わるフェッチ開始アドレス監視回路、フェッチアドレス比較回路の構成を示すブロック図およびセキュアプログラム領域を示す説明図である。
【図８】（Ａ）〜（Ｄ）は、実施の形態１に係わるメモリプロテクションユニットの動作を示すタイミング図である。
【図９】（Ａ）〜（Ｄ）は、実施の形態１に係わるメモリプロテクションユニットの動作を示すタイミング図である。
【図１０】実施の形態１に係わるメモリプロテクションユニットの動作を示す表である。
【図１１】実施の形態１の変形例に係わるメモリプロテクションユニットによるメモリのプロテクションを説明する説明図である。
【図１２】実施の形態２に係わるフラッシュメモリに格納されるデータの配置を示す配置図である。
【図１３】実施の形態２に係わるマイクロコンピュータの構成を示すブロック図である。
【図１４】実施の形態２に係わる不正アクセス検出回路の構成を示すブロック図である。
【図１５】実施の形態３に係わるマイクロコンピュータの構成を示すブロック図である。
【図１６】実施の形態４に係わるマイクロプロセッサの構成を示すブロック図である。
【図１７】マイクロプロセッサの動作を示すフローチャート図である。
【図１８】実施の形態４に係わるマイクロプロセッサの動作を示すフローチャート図である。
【図１９】実施の形態４に係わるマイクロプロセッサの構成を示すブロック図である。
【図２０】実施の形態４に係わるマイクロプロセッサの動作を示すフローチャート図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は、原則として省略する。
【００２３】
（実施の形態１）
＜半導体装置販売モデル＞
複数の実施の形態を以下説明するが、それぞれの実施の形態で説明する半導体装置は、本発明者らが考えた新たな販売モデルに従って販売される。先ずここで、本発明者らが考えた半導体装置販売モデルの説明をする。
【００２４】
図１は、実施の形態に係わる半導体装置販売モデルの構成を示すシステム図である。同図において、１００は、半導体装置販売モデルを示している。特に制限されないが、この実施の形態においては、半導体装置販売モデル１００は、販売者ＰＲＤ、ユーザーＵＳＲおよびプログラムを提供する第３者ＯＴＨによって構成されている。
【００２５】
販売者ＰＲＤは、マイクロコンピュータＬＳＩを、ユーザーＵＳＲに対して販売する。マイクロコンピュータＬＳＩは、周知の半導体製造方法によって、複数の回路ブロックが、１個の半導体チップに形成されている。半導体チップに形成された複数の回路ブロックには、電気的に書き換え可能な不揮発性メモリＦＲＭ、不揮発性メモリＦＲＭに書き込まれたプログラムに従って動作するマイクロプロセッサ（以下、中央処理ユニットとも称する）ＣＰＵおよびライセンス管理ユニットＲＣＮＴが含まれている。このマイクロコンピュータＬＳＩは、販売者ＰＲＤが製造してもよいし、図示しない半導体製造メーカが製造し、販売者ＰＲＤが販売するようにしてもよい。
【００２６】
販売者ＰＲＤは、多種類のプログラムが格納されたサーバＰ−ＳＶを有している。サーバＰ−ＳＶに格納されているプログラムには、プログラムを実行する際に、ライセンスの許諾が要求される有償プログラムと、ライセンスの許諾が要求されない無償プログラムとが含まれている。販売者ＰＲＤは、ユーザーＵＳＲへ、マイクロコンピュータＬＳＩを販売する前に、マイクロコンピュータＬＳＩ内の不揮発性メモリＦＲＭに、１種類あるいは複数種類のプログラムを書き込む。ここでは、有償プログラムであるＲＴＯＳのプログラムが、不揮発性メモリＦＲＭに書き込まれるものとして説明する。有償プログラムであるＲＴＯＳのプログラムは、不正にコピー等を作成されては、ライセンス料金が未回収となる。そのため、ＲＴＯＳのプログラムは、セキュリティが担保されるべきプログラム、すなわちセキュアプログラムに該当する。
【００２７】
販売者ＰＲＤが、ユーザーＵＳＲにマイクロコンピュータＬＳＩを販売する際、不揮発性メモリＦＲＭにプログラムを書き込んでいない状態のマイクロコンピュータＬＳＩの対価に、有償プログラムであるＲＴＯＳのライセンスを許諾する際に要求されるライセンス料金（ライセンス対価）を加算して、ＲＴＯＳのプログラムが不揮発性メモリＦＲＭに書き込まれたマイクロコンピュータの対価（販売価格）を定める。なお、販売促進等のために、ＲＴＯＳのプログラムが不揮発性メモリＦＲＭに書き込まれたマイクロコンピュータの販売価格は、変動する。
【００２８】
ユーザーＵＳＲは、破線で示すように、ＲＴＯＳのプログラムのライセンス料金を含めた対価を支払うことによって、ＲＴＯＳのプログラムが予め書き込まれた不揮発性メモリＦＲＭを有するマイクロコンピュータＬＳＩを購入する。ユーザーＵＳＲは、特に制限されないが、サーバＵ−ＳＶを有している。サーバＵ−ＳＶは、例えばネットワークＮＴＷを介して、販売者ＰＲＤのサーバＰ−ＳＶまたは／および第３者ＯＴＨのサーバＯ−ＳＶに接続されている。ユーザーＵＳＲは、ネットワークＮＴＷを介して、販売者ＰＲＤまたは／および第３者のサーバＰ−ＳＶ、Ｏ−ＳＶから、有償プログラムまたは／および無償プログラムを、サーバＵ−ＳＶにダウンロードし、サーバＵ−ＳＶに格納する。ユーサーＵＳＲは、購入したマイクロコンピュータＬＳＩで所望の機能が達成されるように、例えばユーザーＵＳＲ自身が作成したユーザープログラムＵ−ＡＰとサーバＵ−ＳＶに格納されているプログラムＯ−ＡＰを、購入したマイクロコンピュータＬＳＩの不揮発性メモリＦＲＭに書き込む。
【００２９】
この場合、ユーザープログラムＵ−ＡＰおよびサーバＵ−ＳＶからのプログラムＯ−ＡＰは、ＲＴＯＳのプログラム上で動作するように、作成されている。例えば、ＲＴＯＳのプログラムにおけるサブルーチンを、有効に使うように、ユーザープログラムＵ−ＡＰとプログラムＯ−ＡＰは作成されている。マイクロプロセッサＣＰＵが、不揮発性メモリＦＲＭに格納されているＲＴＯＳのプログラム、ユーザープログラムＵ−ＡＰおよびプログラムＯ−ＡＰを実行することにより、ユーザーＵＳＲが、所望する機能が、マイクロコンピュータＬＳＩによって実現される。
【００３０】
ユーザーは、ユーザープログラムＵ−ＡＰを作成する際に、ＲＴＯＳのプログラムを利用するように作成する。これにより、ユーザープログラムＵ−ＡＰを作成する際のユーザーＵＳＲの負担を低減することが可能となる。
【００３１】
特に制限されないが、この実施の形態においては、マイクロコンピュータＬＳＩは、ライセンス管理ユニットＲＣＮＴを備えている。販売者ＰＲＤは、ユーザーＵＳＲへマイクロコンピュータＬＳＩを販売する際に、ユーザーＵＳＲが希望するライセンスの数に相当するライセンス情報を、不揮発性メモリＦＲＭに書き込んで販売する。この場合のマイクロコンピュータＬＳＩの販売価格は、ユーザーＵＳＲが希望するライセンスの数に対応したライセンス料金を、さらに含むことになる。
【００３２】
ユーザーＵＳＲが、不揮発性メモリＦＲＭにプログラムを書き込むとき、ライセンス管理ユニットＲＣＮＴは、書き込むプログラムが有償プログラムであるか否かを判定する。書き込むプログラムが、有償プログラムであった場合、不揮発性メモリＦＲＭに予め格納されているライセンス情報を参照し、ライセンスの数が１以上か否かを判定する。ライセンスの数が１以上であれば、ライセンス管理ユニットＲＣＮＴは、プログラムを、不揮発性メモリＦＲＭへ書き込み、ライセンスの数が１未満であれば、不揮発性メモリＦＲＭへの書き込みを禁止する。また、プログラムを不揮発性メモリＦＲＭへ書き込んだ場合には、ライセンス管理ユニットＲＣＮＴは、不揮発性メモリＦＲＭに格納されているライセンス情報によって表されるライセンス数の数を１減らすように更新する。
【００３３】
この実施の形態においては、ライセンス料金が、マイクロコンピュータＬＳＩを購入する際に、プリペイドされていることになり、プリペイドされたライセンス料金が不足するまで、ユーザーＵＳＲは、不揮発性メモリＦＲＭに有償プログラムをインストールし、実行することが可能となる。このように、ライセンス料金がプリペイドされているため、ライセンス料金の未回収を防ぐことが可能になるとともに、ライセンス料金の支払いの管理も容易となる。
【００３４】
ここでは、ユーザーＵＳＲの希望ライセンス数に相当するライセンス情報を、販売者ＰＲＤが販売前に不揮発性メモリＦＲＭに書き込む例を示したが、これに限定されるものではない。例えば、予め決まったライセンス数に相当するライセンス情報が書き込まれたマイクロコンピュータＬＳＩを、販売者ＰＲＤが準備しておくようにしてもよい。
【００３５】
マイクロコンピュータＬＳＩを販売する場合の半導体装置販売モデルを示したが、販売する半導体装置は、マイクロコンピュータＬＳＩに限定されるものではない。
【００３６】
＜マイクロコンピュータの構成＞
図２は、実施の形態１に係わるマイクロコンピュータＬＳＩの構成を示すブロック図である。図１で説明したように、マイクロコンピュータＬＳＩは、複数の回路ブロックが、周知の半導体製造技術によって、１個の半導体チップに形成されている。図２には、上記した複数の回路ブロックのうちの一部が示されている。すなわち、この実施の形態を説明するうえで必要な回路ブロックのみが示されており、例えば図１で説明したライセンス管理ユニットＲＣＮＴ等は省略されている。また、図２に示したマイクロコンピュータＬＳＩにおいては、電気的に書き換え可能な不揮発性メモリＦＲＭとして、所謂、フラッシュメモリが用いられている場合を示している。なお、フラッシュメモリには、図１に示した不揮発性メモリと同じ符号ＦＲＭが付されている。
【００３７】
図２には、販売者ＰＲＤからユーザーＵＳＲへ販売されたマイクロコンピュータＬＳＩの状態が示されている。すなわち、リアルタイムオペレーティングシステム（ＲＴＯＳ）のプログラムの対価も含めて、ユーザーＵＳＲが販売者ＰＲＤへ支払い、販売者ＰＲＤから購入したマイクロコンピュータＬＳＩの状態が示されている。そのため、フラッシュメモリＦＲＭには、ＲＴＳのプログラムが書き込まれ、格納された状態となっている。また、図２は、フラッシュメモリＦＲＭに書き込まれたプログラム（例えばＲＴＯＳのプログラム）をバージョンアップするために、マイクロコンピュータＬＳＩがネットワークＮＴＷを介して、販売者ＰＲＤのサーバＰ−ＳＶに接続されている状態が示されている。なお、図２では、図面が複雑になるのを避けるために、ユーザーＵＳＲのサーバＵ−ＳＶは省略されている。
【００３８】
図２において、２００は通信機能回路、２０１は暗号復号機能回路、２０２はフラッシュメモリ書き換え回路、２０３は揮発性メモリ、２０４はメモリプロテクションユニット、２０５はバス、２０６は信号配線を示している。
【００３９】
通信機能回路２００は、マイクロコンピュータＬＳＩの外部と内部との間でデータの送受信を行う。例えば、マイクロコンピュータＬＳＩの外部から、バージョンアップされたプログラム（ソフトウェア）を受信し、格納する。暗号復号機能回路２０１は、暗号化されているプログラムを復号し、暗号化されていないプログラム（復号化されたプログラム）へ変換する。フラッシュメモリ書き換え回路２０２は、供給されたデータ、例えばプログラムをフラッシュメモリＦＲＭへ書き込む。揮発性メモリ２０３は、例えばスタテック型メモリあるいはダイナミック型メモリで構成され、プログラムのようなデータを一次的に格納する。メモリプロテクションユニット２０４につては、後で詳しく説明するが、フラッシュメモリＦＲＭからの情報とマイクロプロセッサ（中央処理ユニット）ＣＰＵからの情報に基づいて、マイクロプロセッサＣＰＵからメモリ（フラッシュメモリＦＲＭおよび揮発性メモリ２０３）へのアクセスを制御する。
【００４０】
例えばフラッシュメモリＦＲＭに格納されているプログラムをバージョンアップするために、マイクロコンピュータＬＳＩは、ネットワークＮＴＷに接続され、バージョンアップしたプログラムが、マイクロコンピュータＬＳＩにダウンロードされる。このダウンロードの時に、プログラムが盗まれ易い状態となる。そのため、このダウンロードの際の動作を以下説明する。
【００４１】
プログラムは、暗号化されている。そのため、サーバＰ−ＳＶからプログラムが盗まれても、プログラムを実行することはできない。同様に、プログラムをダウンロードする際には、ネットワークＮＴＷをプログラムが通過するが、このときもプログラムは暗号化されているため、例え盗まれても、そのプログラムを実行することはできない。
【００４２】
プログラムが、ネットワークＮＴＷを経由してマイクロコンピュータＬＳＩに供給されると、通信機能回路２００が、プログラムであるデータを受信し、格納する。次に、マイクロプロセッサＣＰＵが、バス２０５を介して、通信機能回路２００から、プログラムであるデータを受け取り、バス２０５を介して、揮発性メモリ２０３へ転送する。揮発性メモリ２０３に格納されたプログラムは、暗号化されているため、マイクロプロセッサＣＰＵは、次に、揮発性メモリ２０３に格納されている暗号化されたプログラムを、バス２０５を介して、暗号復号機能回路２０１へ転送する。暗号復号機能回路２０１によって、暗号が解除され、暗号化されていないプログラムへ変換される。マイクロプロセッサＣＰＵは、この暗号化されていないプログラムを、バス２０５を介して、揮発性メモリ２０３へ転送する。
【００４３】
その後、マイクロプロセッサＣＰＵは、揮発性メモリ２０３に格納されている暗号化されていないプログラムを、バス２０５を介して、フラッシュ書き換え回路２０２へ転送する。フラッシュ書き換え回路２０２は、供給された暗号化されていないプログラムを、フラッシュメモリＦＲＭへ書き込む。これにより、例えば、バージョンアップしたプログラムが、フラッシュメモリＦＲＭに格納されることになる。マイクロプロセッサＣＰＵは、フラッシュメモリＦＲＭに格納されているバージョンアップしたプログラムを読み出して、実行することになる。
【００４４】
上記した動作の説明から理解されるように、プログラムをダウンロードして、フラッシュメモリＦＲＭへ書き込むときには、暗号復号機能回路２０１、フラッシュメモリ書き換え回路２０２、揮発性メモリ２０３、およびマイクロプロセッサＣＰＵに、暗号化されていないプログラムが存在している期間が生じる。また、フラッシュメモリＦＲＭにも、暗号化されていないプログラムが存在していることになる。そのため、暗号化されていないプログラムが存在している期間において、暗号化されていないプログラムが盗まれるのを保護することが要求される。また、フラッシュメモリＦＲＭに存在する暗号化されていないプログラムについても、そのプログラムが盗まれるのを保護することが要求される。
【００４５】
この実施の形態１においては、揮発性メモリ２０３、フラッシュメモリＦＲＭ等のメモリにアクセスする機能は、マイクロプロセッサＣＰＵのみが有することに着目し、メモリプロテクションユニット２０４によって、マイクロプロセッサＣＰＵがアクセスできる領域に制限を設けるようにされる。この場合、領域を指定する情報は、バス２０５を介さずに、信号配線２０６によって直接フラッシュメモリＦＲＭからメモリプロテクションユニット２０４へ伝達される。
【００４６】
なお、図２において、マイクロプロセッサＬＳＩのそれぞれの辺に設けられているＰｉｎは、マイクロプロセッサＬＳＩの外部端子（ピン）を、模式的に示している。
【００４７】
＜メモリプロテクションユニットの構成＞
次に、メモリプロテクションユニット２０４の構成を、図３を用いて説明する。図３は、実施の形態１に係わるメモリプロテクションユニットの構成を示すブロック図である。同図には、説明の都合上、マイクロプロセッサＣＰＵおよびフラッシュメモリＦＲＭも示されている。
【００４８】
プログラムは、複数の命令によって構成される。マイクロプロセッサＣＰＵは、プログラムにおける複数の命令から、実行する命令を指定するアドレスを出力する。すなわち、マイクロプロセッサＣＰＵは、プログラムカウンタを有しており、実行する命令を指定するアドレスは、プログラムカウンタによって形成される。図３では、このプログラムカウンタによって形成されたアドレス、すなわち実行する命令を指定するアドレスが、ＰＣアドレス３０６として示されている。また、マイクロプロセッサＣＰＵが入出力するデータが、符号３０７で示されている。
【００４９】
この実施の形態１においては、販売者ＰＲＤが、フラッシュメモリ（不揮発性メモリ）ＦＲＭに、セキュリティが担保されるべきプログラムを書き込んで、販売する場合、セキュリティが担保されるべきプログラム（セキュアプログラム）が格納されたフラッシュメモリＦＲＭのプログラム領域を指定するセキュアアドレス情報３０４を、フラッシュメモリＦＲＭに書き込んで、販売する。また、このとき、販売者ＰＲＤは、揮発性メモリ２０３（図２）において、セキュリティが担保されるべきデータ（セキュアデータ）を格納するデータ領域を指定するセキュアデータ情報３０５を、フラッシュメモリＦＲＭに書き込む。
【００５０】
ＲＴＯＳのプログラムは、有償プログラムであるため、セキュアプログラムである。そのため、ＲＴＯＳのプログラムを書き込んだフラッシュメモリＦＲＭのプログラム領域を特定するセキュアアドレス情報３０４と、ＲＴＯＳのプログラムが動作する際にセキュリティを担保すべきデータが格納される揮発性メモリ２０３のデータ領域を特定するセキュアデータ情報３０５が、フラッシュメモリＦＲＭに書き込まれることになる。セキュアアドレス情報３０４およびセキュアデータ情報３０５の書き込みは、ＲＴＳＯのプログラムと同様に、販売者ＰＲＤが、マイクロプロセッサＬＳＩを販売する前に行われる。
【００５１】
セキュリティを担保することが必要とされない任意のプログラム（ノンセキュアプログラム）、例えば無償プログラムおよびユーザープログラムＵ−ＡＰは、セキュアアドレス情報３０４によって特定されるフラッシュメモリＦＲＭのプログラム領域とは異なるプログラム領域に書き込まれることになる。同様に、セキュリティを担保することが必要とされないデータ（ノンセキュアデータ）、例えば無償プログラムおよびユーザープログラムＵ−ＡＰが動作したときに生じるデータは、セキュアデータ情報３０５によって特定される揮発性メモリ２０３のデータ領域とは異なるデータ領域に格納されることになる。
【００５２】
ノンセキュアプログラムが書き込まれるフラッシュメモリＦＲＭのプログラム領域を第１プログラム領域と見なした場合、セキュアプログラムが書き込まれるフラッシュメモリＦＲＭのプログラム領域は第２プログラム領域と見なすことができる。このように見なした場合、第２プログラム領域は、セキュアアドレス情報３０４によって特定されることになる。一方、セキュアアドレス情報３０４によって特定されていないフラッシュメモリＦＲＭのプログラム領域が、第１プログラム領域となる。勿論、ノンセキュアアドレス情報によって、フラッシュメモリＦＲＭの第１プログラム領域を特定するようにしてもよい。
【００５３】
同様に、ノンセキュアデータが格納される揮発性メモリ２０３のデータ領域を、第１データ領域と見なした場合、セキュアデータが格納される揮発性メモリ２０３のデータ領域を、第２データ領域と見なすことができる。このように見なした場合も、第２データ領域は、セキュアデータ情報３０５によって特定されることになる。一方、セキュアデータ情報３０５によって特定されていない揮発性メモリ２０３のデータ領域が、第１データ領域となる。勿論、ノンセキュアデータ情報によって、揮発性メモリ２０３の第１データ領域を特定するようにしてもよい。
【００５４】
セキュアアドレス情報３０４とセキュアデータ情報３０５は、バス２０５ではなく、図２に示した信号配線２０６を介して、フラッシュメモリＦＲＭからメモリプロテクションユニット２０４へ直接的に供給される。
【００５５】
メモリプロテクションユニット２０４は、フェッチ開始アドレス監視回路３００、フェッチアドレス比較回路３０１およびメモリアクセス制御回路３０３を備えている。フェッチ開始アドレス監視回路３００およびフェッチアドレス比較回路３０１のそれぞれには、マイクロプロセッサＣＰＵからのＰＣアドレス３０６およびフラッシュメモリＦＲＭからのセキュアアドレス情報３０４が供給される。フェッチ開始アドレス監視回路３００およびフェッチアドレス比較回路３０１については、後で図７等を用いて一例を説明するので、ここでは概要を説明する。
【００５６】
フェッチアドレス比較回路３０１は、ＰＣアドレス３０６とセキュアアドレス情報３０４とを比較し、ＰＣアドレス３０６が、セキュアアドレス情報３０４によって指定されている第２プログラム領域内を指定しているのか否かを示す選択信号を出力する。この実施の形態１においては、セキュアアドレス情報３０４によって指定されている第２プログラム領域を除く、フラッシュメモリＦＲＭのプログラム領域が、ノンセキュアプログラム領域とされている。そのため、フェッチアドレス比較回路３０１から出力される選択信号は、ＰＣアドレス３０６が、セキュアプログラム領域（第２プログラム領域）内を指定しているとき、セキュアプログラム領域を指定するセキュアプログラム領域信号と見なすことができ、ＰＣアドレス３０６がノンセキュアプログラム領域（第１プログラム領域）内を指定しているとき、ノンセキュアプログラム領域を指定するノンセキュアプログラム領域信号と見なすことができる。
【００５７】
フェッチアドレス比較回路３０１から出力される選択信号が、例えばセキュアプログラム領域を示しているとき、セキュリティが担保されるように、マイクロコンピュータＬＳＩを構成することにより、セキュアプログラムが盗まれるのを防ぐことが可能となる。
【００５８】
セキュアアドレス情報３０４は、例えば予め固定の値に設定し、変更不可能にしておくことが考えられる。この場合、フラッシュメモリＦＲＭに格納するセキュアプログラムが変更になったとき、あるいはマイクロコンピュータＬＳＩを、ユーザーＵＳＲが購入した後、セキュアプログラムを変更するときに、セキュアプログラム領域を変更することが困難になる。セキュアプログラム領域を変更することができないと、セキュアプログラムのサイズが大きくなった場合等で、セキュリティを担保することが困難になる。
【００５９】
例えば、ユーザーＵＳＲが、マイクロコンピュータＬＳＩを購入した後で、セキュアアドレス情報３０４を変更することが可能となるようにするためには、セキュアアドレス情報３０４をレジスタ等の揮発性メモリに格納するようにすることが考えられる。この場合、マイクロコンピュータＬＳＩ内のマイクロプロセッサＣＰＵを、ユーザーＵＳＲが操作することができなければ、セキュアアドレス情報３０４を格納したレジスタをユーザーＵＳＲが操作することは困難である。その結果、セキュリティを担保しながら、セキュアプログラム領域を変更することが可能となる。
【００６０】
しかしながら、この実施の形態１においては、マイクロコンピュータＬＳＩをユーザーＵＳＲが購入した後、ユーザーＵＳＲが、例えばマイクロプロセッサＣＰＵを操作するユーザープログラムＵ−ＡＰを作成する。すなわち、ユーザーＵＳＲは、マイクロプロセッサＣＰＵを操作することが可能である。そのため、ユーザーＵＳＲが、セキュアアドレス情報３０４を格納したレジスタ等の揮発性メモリを操作するソフトウェア（ノンセキュアプログラム）を作成することか可能となってしまう。レジスタに格納されているセキュアドレス情報３０４を変更することにより、セキュアプログラムを盗むことが可能となってしまう。
【００６１】
この実施の形態１では、セキュアアドレス情報３０４およびセキュアデータ情報３０５は、販売者ＰＲＤが、マイクロコンピュータＬＳＩを販売する前に、電気的に書き換え可能なフラッシュメモリＦＲＭに書き込む。これにより、セキュアプログラムに対応したセキュアアドレス情報３０４およびセキュアデータ情報３０５を、フラッシュメモリＦＲＭに書き込むことが可能となる。また、販売者ＰＲＤは、販売後も必要に応じて、セキュアアドレス情報３０４およびセキュアデータ情報３０５を、変更することが可能となる。フラッシュメモリＦＲＭに格納されたセキュアアドレス情報３０４およびセキュアデータ情報３０５は、ユーザーＵＳＲの作成したソフトウェア（ノンセキュアプログラム）によって変更されないため、セキュリティを担保することも可能である。
【００６２】
また、この実施の形態１においては、バス２０５とは異なる信号配線２０６によって、フラッシュメモリＦＲＭからメモリプロテクションユニット２０４へ、セキュアアドレス情報３０４およびセキュアデータ情報３０５が供給される。これにより、ユーザーＵＳＲがマイクロプロセッサＣＰＵを操作しても、セキュアアドレス情報３０４およびセキュアデータ情報３０５が、ユーザーＵＳＲによって読み出されるのを防ぐことが可能となる。
【００６３】
フェッチ開始アドレス監視回路３００は、セキュアアドレス情報３０４、ＰＣアドレス３０６およびフェッチアドレス比較回路３０１からの選択信号を受けて、セキュアデータアクセス許可信号３０２を出力する。
【００６４】
この実施の形態１においては、ＲＴＯＳのプログラム上で、ユーザープログラムＵ−ＡＰ等が動作する。ユーザープログラムＵ−ＡＰ等は、ユーザーＵＳＲが作成するため、ノンセキュアプログラムであり、フラッシュメモリＦＲＭのノンセキュアプログラム領域に書き込まれる。ＲＴＯＳのプログラム上で、ユーザープログラムＵ−ＡＰが動作するため、ユーザープログラムＵ−ＡＰから、ＲＴＯＳのプログラムの呼び出しが行われることになる。
【００６５】
ＲＴＯＳのプログラムは、互いに異なった機能を達成する複数のサブルーチンを備えている。ユーザープログラムＵ−ＡＰは、複数のサブルーチンから所望の機能を達成するサブルーチンを呼び出すことになる。ここでのサブルーチンの呼び出しは、分岐により行われる。すなわち、ＲＴＯＳのプログラムが備えている複数のサブルーチンから選択されたサブルーチンへ、ノンセキュアプログラムであるユーザープログラムＵ−ＡＰが分岐する動作が発生する。後で図５等を用いて一例を説明するが、ＰＣアドレス３０６が、セキュアプログラム領域内を指定しているか否かを監視する構成では、ノンセキュアプログラムからセキュアプログラムへ分岐する際のアタックに対して弱いと言う課題がある。
【００６６】
後で図７等を用いて詳しく説明するが、フェッチ開始アドレス監視回路３００は、ノンセキュアプログラムから、セキュアプログラムへ分岐する際に、分岐先アドレスが、フェッチを許可する分岐許可領域（第１領域）内を指定している否かを判定する。分岐許可領域を指定していれば、セキュアデータアクセス許可信号３０２によって、マイクロプロセッサＣＰＵが、例えばフラッシュメモリＦＲＭ内のセキュアプログラム領域へアクセスするのを許可する。これにより、ノンセキュアプログラムからセキュアプログラムへ分岐する際のアタックに対する保護が行われる。
【００６７】
メモリアクセス制御回路３０３は、フラッシュメモリＦＲＭからのセキュアデータ情報３０５、セキュアデータアクセス許可信号３０２、ＰＣアドレス３０６および入出力データ３０７を受けて、フラッシュメモリＦＲＭおよび揮発性メモリ２０３に対するアクセス信号３０８を出力する。すなわち、メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２によって、メモリへのアクセスが許可されている場合、ＰＣアドレス３０６に対応したアドレス信号を、メモリ（フラッシュメモリＦＲＭ、揮発性メモリ２０３）へ出力し、このアドレス信号によって指定されているメモリ内のアドレスとマイクロプロセッサＣＰＵとの間でのデータ３０７の送受信を許可する。これに対して、セキュアデータアクセス許可信号３０２が、メモリへのアクセスを禁止している場合、メモリアクセス制御回路３０３は、メモリとマイクロプロセッサＣＰＵとの間のデータ３０７の送受信を禁止する。
【００６８】
＜アタック例＞
図４は、図３に示したフェッチアドレス比較回路３０１およびメモリアクセス制御回路３０３を使って、メモリをプロテクションする場合を説明する説明図である。すなわち、図４は、図３に示したフェッチ開始アドレス監視回路３００を、メモリプロテクションユニットが備えていない場合を示している。
【００６９】
この実施の形態１では、ノンセキュアプログラムとセキュアプログラムは、フラッシュメモリＦＲＭに格納され、ノンセキュアデータとセキュアデータは揮発性メモリ２０３に格納されている。フラッシュメモリＦＲＭには、セキュアプログラムを格納するセキュアプログラム領域を指定するセキュアアドレス情報３０４とセキュアデータを格納するセキュアデータ領域を指定するセキュアデータ情報３０５とが格納されている。
【００７０】
このセキュアアドレス情報３０４によって、フラッシュメモリＦＲＭの領域（空間）は、ノンセキュアプログラムが格納されるノンセキュアプログラム領域と、セキュアプログラムが格納されるセキュアプログラム領域に分けられている。また、揮発性メモリ２０３の領域（空間）は、セキュアデータ情報３０５によって、ノンセキュアデータが格納されるノンセキュアデータ領域とセキュアデータが格納されるセキュアデータ領域に分けられている。
【００７１】
ノンセキュアプログラムもセキュアプログラムも、２値信号であり、データと見なすことができる。そのため、図４では、ノンセキュアプログラムを格納するノンセキュアプログラム領域と、ノンセキュアデータを格納するノンセキュアデータ領域が、纏めてノンセキュアデータ領域として示されている。同様に、セキュアプログラムを格納するセキュアプログラム領域と、セキュアデータを格納するセキュアデータ領域が、纏めて、図４では、セキュアデータ領域として示されている。本明細書においては、特に明示しない限り、ノンセキュアデータは、ノンセキュアプログラムとノンセキュアなデータの両方を意味しており、セキュアデータは、セキュアプログラムとセキュアなデータの両方を意味している。
【００７２】
図４では、ノンセキュアデータ領域が、ノンセキュアプログラムを格納するノンセキュアプログラム領域で、セキュアデータ領域が、セキュアプログラムを格納するセキュアプログラム領域である場合を、例として説明する。
【００７３】
ＰＣアドレス３０６が、セキュアプログラム領域内を指定しているとき、すなわち、セキュアプログラムが実行されているとき、フェッチアドレス比較回路３０１から出力される選択信号が、セキュアプログラム領域信号として、メモリアクセス制御回路３０３へ供給される。このセキュアプログラム領域信号に応答して、ＰＣアドレス３０６がセキュアプログラム領域内を指定しているとき、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域（セキュアプログラム領域）とノンセキュアデータ領域（ノンセキュアプログラム領域）の両方をアクセスすることを許可する。すなわち、ＰＣアドレス３０６によって、セキュアデータ領域およびノンセキュアデータ領域のいずれを指定しても、データ３０７の送受信が可能となる。これにより、図４に示すように、セキュアプログラム領域に配置されたセキュアプログラムからは、ノンセキュアデータ領域およびセキュアデータ領域のいずれに対してもアクセスが許可（アクセス許可と記載）される。
【００７４】
一方、ＰＣアドレス３０６が、セキュアプログラム領域外であるノンセキュアプログラム領域内を指定している場合、フェッチアドレス比較回路３０１から出力される選択信号は、ノンセキュアプログラム領域を指定するノンセキュアプログラム領域信号となる。メモリアクセス制御回路３０３は、選択信号がノンセキュアプログラム領域信号のとき、マイクロプロセッサＣＰＵが、ノンセキュアデータ領域に対してアクセスすることを許可し、セキュアデータ領域に対してアクセスすることを禁止する。すなわち、この場合には、ＰＣアドレス３０６が、ノンセキュアデータ領域内を指定しているとき、データ３０７の送受信が許可され、ＰＣアドレス３０６が、セキュアデータ領域内を指定しているとき、データ３０７の送受信が禁止される。これにより、図４に示すように、ノンセキュアプログラム領域に配置されたノンセキュアプログラムからは、ノンセキュアデータ領域に対してのアクセスが許可（アクセス許可と記載）され、セキュアデータ領域に対してのアクセスは禁止（アクセス禁止と記載）されることになる。
【００７５】
セキュアプログラム領域に配置されたセキュアプログラムに、セキュリティホールが存在する場合、ノンセキュアプログラム領域に、ハッキングプログラムを配置し、ハッキングプログラムを、マイクロプロセッサＣＰＵによって実行させることにより、セキュアデータ領域に格納されているデータ（プログラム）を盗むことが可能となる。すなわち、ノンセキュアプログラムとして実行されるハッキングプログラムにおいて、図４においてセキュリティホールとして示されているアドレスへ分岐する。この分岐により、セキュリティホールが存在するセキュリティプログラムが動作することになる。セキュリティプログラムであるため、セキュアデータ領域へのアクセスが許可され、セキュアデータ領域に格納されているセキュアなデータ（プログラム）を、例えばマイクロプロセッサＣＰＵ内のレジスタ等に格納することができる。このセキュアなデータ（プログラム）がレジスタに格納された状態で、セキュアプログラムからノンセキュアプログラムであるハッキングプログラムへ復帰する。復帰したとき、レジスタの内容を読み出すことにより、セキュアなデータ（プログラム）を盗むことが可能となる。図４では、アタックにより発生する分岐とメモリ（フラッシュメモリＦＲＭ）へのアクセスが、ハッキングとして示されている。
【００７６】
ここでは、セキュアデータ領域がセキュアプログラム領域である場合を説明したが、セキュアデータ領域が、揮発性メモリ２０３におけるセキュアデータ領域の場合も同様に、揮発性メモリ２０３に格納されているセキュアなデータを盗むことが可能となってしまう。
【００７７】
＜セキュリティホール例＞
図５は、セキュリティホールが存在するセキュアプログラムの例を示す模式図である。フラッシュメモリＦＲＭのセキュアプログラム領域には、ＲＴＯＳのプログラムが格納されている。ＲＴＯＳのプログラムは、先に述べたように複数のサブルーチンを有している。図５は、複数のサブルーチンのうち、セキュリティホールが存在するサブルーチンの例を示している。
【００７８】
サブルーチンは、メインルーチン（あるいは上位ルーチン）からの分岐により、呼び出される。すなわち、メインルーチンにおいて、ＰＣアドレス３０６の値が、図５において開始アドレスとして示されているアドレスを指定する値とされる。これにより、メインルーチンから、図５に示すサブルーチンへ分岐する。一例を述べるならば、メインルーチンには、開始アドレスを分岐先アドレスとした分岐命令が格納されており、マイクロプロセッサＣＰＵによって、この分岐命令が実行されることにより、分岐が行われる。
【００７９】
サブルーチンにおいては、開始アドレスによって指定されているアドレスに格納されている命令Ｅｘ−Ａが、先ず実行される。この命令Ｅｘ−Ａが実行されることにより、例えばメインルーチンの処理において使われていたレジスタ等の値が、スタックポインタ（図示しない）によって指定されるスタック領域に退避される。次に、ＰＣアドレス３０６の値が、開始アドレスから終了アドレスへ向けて、順番に変化する。これにより、命令Ｅｘ−Ｂから命令Ｅｘ−Ｐが、この順番で、マイクロプロセッサＣＰＵに読み出され、順番に実行される。これにより、所定の処理が行われ、サブルーチンの機能が達成される。ＰＣアドレス３０６の値が、終了アドレスを示す値に到達すると、命令Ｅｘ−Ｚが実行される。命令Ｅｘ−Ｚを実行することにより、先にスタックポインタで指定されていたスタック領域に格納されていたレジスタ等の値が、マイクロプロセッサＣＰＵ内のレジスタに復帰される。これにより、マイクロプロセッサＣＰＵ内のレジスタの値は、サブルーチンへ分岐する前の状態へ復帰することになる。
【００８０】
このようにメインルーチンからサブルーチンへ分岐する際には、所定の開始アドレスへ分岐することにより、所定の処理が実行されることになる。
【００８１】
図５において、所定の処理を実行しているとき、ＰＣアドレス３０６は、セキュアプログラム領域内を指定しているため、フェッチアドレス比較回路３０１は、セキュアプログラム領域信号を出力することになる。そのため、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、メモリ（フラッシュメモリＦＲＭ）をアクセスすることを許可することになる。例えば、図５に示した命令Ｅｘ−Ｓが、特定のストア命令の場合、この特定のストア命令は、セキュリティホールとなってしまうことが考えられる。この特定のストア命令は、例えばマイクロプロセッサＣＰＵ内の特定のレジスタ（以下、説明の都合上Ｒ０とする）に保持されている値をアドレスとして、このアドレスによって指定されるセキュアデータ領域内のアドレスに格納されているデータ（命令）を、マイクロプロセッサＣＰＵ内の別の特定のレジスタ（以下、説明の都合上Ｒ１とする）に格納する命令である。
【００８２】
ハッキングプログラムにおいて、特定のレジスタＲ０に、読み出したいセキュアデータ領域内のアドレスを設定した後、開始アドレスではなく、特定のストア命令Ｅｘ−Ｓを格納したアドレスを分岐先アドレスとして、ハッキングプログラムから図５に示したサブルーチンへ分岐する。すなわち、ハッキングプログラムからサブルーチンへ分岐する際に、ＰＣアドレス３０６の値を、開始アドレスではなく、セキュリティホール（特定のストア命令Ｅｘ−Ｓ）のアドレス（分岐先アドレス）に設定して、分岐する。これにより、特定のレジスタＲ１の退避および復帰は行われず、特定のレジスタＲ１に格納されているセキュアなデータ（命令）を、ハッキングプログラムによって読み出すことが可能となってしまう。
【００８３】
このようなセキュリティホールは、多数存在することが考えられ、全てのセキュリティホールを無くすことは困難である。
【００８４】
＜アタック対策＞
図６は、図３に示したフェッチアドレス比較回路３０１、フェッチ開始アドレス監視回路３００およびメモリアクセス制御回路３０３を用いたメモリプロテクションユニット２０４を使って、アタックに対してメモリをプロテクションする場合を説明する説明図である。図６は、先に説明した図４と類似している。ここでは、図４との相違点を主に説明する。
【００８５】
図５で説明したように、アタックは、ノンセキュアプログラムから、セキュアプログラム領域に格納されたセキュアプログラムに分岐する際、セキュアプログラムによって定まる開始アドレスに分岐せずに、セキュリティホールに直接分岐することによって、行われる。後で図７を用いて、一例を説明するが、フェッチアドレス比較回路３０１およびフェッチ開始アドレス監視回路３００によって、セキュアプログラム領域が、分岐許可領域（第１領域）ＢＡＡと分岐禁止領域（第１領域とは異なる第２領域）ＢＰＡに分けられる。ここで、セキュアプログラムの開始アドレスは、分岐許可領域ＢＡＡ内に割り当てられ、セキュリティホールを指定する分岐先アドレスは、分岐禁止領域ＢＰＡ内に割り当てられる。すなわち、図５を例にすると、命令Ｅｘ−Ａ（第１命令）が、分岐許可領域ＢＡＡに配置され、命令Ｅｘ−Ａを除く他の命令Ｅｘ−Ｂ〜Ｅｘ−Ｚ（第２命令）は、分岐禁止領域ＢＰＡに配置される。
【００８６】
ノンセキュアプログラム領域に格納されたノンセキュアプログラムから、セキュアプログラム領域に格納されたセキュアプログラムを呼び出す際、フェッチ開始アドレス監視回路３００は、呼び出す際の分岐先のアドレスが、分岐許可領域ＢＡＡを指定している場合、メモリアクセスを許容するセキュアデータアクセス許可信号３０２を出力する。これに対して、呼び出す際の分岐先のアドレスが、分岐禁止領域ＢＰＡを指定している場合、フェッチ開始アドレス監視回路３００は、メモリアクセスを禁止するセキュアデータアクセス許可信号３０２を出力する。メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２が、メモリアクセスの許可を示している場合、マイクロプロセッサＣＰＵによるメモリ（フラッシュメモリＦＲＭ）へのアクセスを許可し、セキュアデータアクセス許可信号３０２が、メモリアクセスの禁止を示している場合、マイクロプロセッサＣＰＵによるメモリへのアクセスを禁止する。
【００８７】
ハッキングプログラムではないノンセキュアプログラムが、セキュアプログラムを呼び出す場合には、分岐許可領域ＢＡＡ内を指定する分岐先のアドレスを出力するため、セキュアプログラムを実行することが可能となる。一方、ハッキングプログラムが、セキュリティホールに相当するアドレスを分岐先のアドレスとして呼び出す場合には、分岐禁止領域ＢＰＡを指定する分岐先アドレスが出力されることになる。そのため、この場合には、マイクロプロセッサＣＰＵによるメモリへのアクセスが禁止される。その結果、ハッキングプログラムによるハッキングが行われないようにすることが可能となる。
【００８８】
＜フェッチ開始アドレス監視回路およびフェッチアドレス比較回路の構成＞
次に、図３で説明したフェッチ開始アドレス監視回路３００およびフェッチアドレス比較回路３０１の構成を、図７（Ａ）および（Ｂ）を用いて説明する。図７（Ａ）は、実施の形態１に係わるフェッチ開始アドレス監視回路３００およびフェッチアドレス比較回路３０１の構成を示すブロック図である。また、図７（Ｂ）は、実施の形態１に係わるセキュアプログラム領域を示す説明図である。
【００８９】
図３に示したセキュアアドレス情報３０４は、セキュアプログラムを格納するセキュアプログラム領域の上限アドレスを示すセキュアプログラム上限アドレス３０４−Ｕ（上限アドレス情報）と、セキュアプログラム領域の下限アドレスを示すセキュアプログラム下限アドレス３０４−Ｄ（下限アドレス情報）と、を含んでいる。このセキュアプログラム上限アドレス３０４−Ｕとセキュアプログラム下限アドレス３０４−Ｄとによって指定されたフラッシュメモリＦＲＭの領域が、セキュアプログラムを格納するセキュアプログラム領域（第２プログラム領域）となる。言い換えるならば、セキュアプログラムを書き込んだフラッシュメモリＦＲＭのセキュアプログラム領域を、セキュアプログラム上限アドレス３０４−Ｕとセキュアプログラム下限アドレス３０４−Ｄによって特定する。
【００９０】
この実施の形態１においては、上限アドレス３０４−Ｕの値は、下限アドレス３０４−Ｄの値よりも大きな値である。プログラムを実行する際に、ＰＣアドレス３０６の値は、セキュアプログラム上限アドレス３０４−Ｕからセキュアプログラム下限アドレス３０４−Ｄに向かって変化する。これにより、マイクロプロセッサＣＰＵは、上限アドレス３０４−Ｕによって指定されているアドレスに格納されている命令から、下限アドレス３０４−Ｄによって指定されているアドレスに格納されている命令に向けて、フラッシュメモリＦＲＭから命令を読み出し、読み出した命令を実行する。すなわち、マイクロプロセッサＣＰＵは、大きいアドレスから小さいアドレスに向かって、命令を読み出し、実行する。
【００９１】
フェッチアドレス比較回路３０１は、比較器７０４、７０５、２入力アンド回路７０６（第１論理回路）およびインバータ回路７０８（第１論理回路）を備えている。
【００９２】
比較器７０４（第１比較回路）は、セキュアプログラム上限アドレス３０４−ＵとＰＣアドレス３０６とを比較し、ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値以下のとき、ハイレベルの比較結果信号７０４−Ｒを出力する。反対に、ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値を超えているとき、比較器７０４は、ロウレベルの比較結果信号７０４−Ｒを出力する。
【００９３】
比較器７０５（第２比較回路）は、セキュアプログラム下限アドレス３０４−ＤとＰＣアドレス３０６とを比較し、ＰＣアドレス３０６の値が、セキュアプログラム下限アドレス３０４−Ｄの値以上のとき、ハイレベルの比較結果信号７０５−Ｒを出力する。反対に、ＰＣアドレス３０６の値が、セキュアプログラム下限アドレス３０４−Ｄの値未満とき、比較器７０５は、ロウレベルの比較結果信号７０５−Ｒを出力する。
【００９４】
比較器７０４および７０５のそれぞれから出力された比較結果信号７０４−Ｒおよび７０５−Ｒは、２入力アンド回路７０６に入力される。２入力アンド回路７０６によって、比較結果信号７０４−Ｒおよび７０５−Ｒの論理積が求められる。この２入力アンド回路７０６の出力信号７０７は、インバータ回路７０８に供給され、インバータ回路７０８によって位相反転される。
【００９５】
ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値とセキュアプログラム下限アドレス３０４−Ｄとの間にあるとき、比較結果信号７０４−Ｒおよび７０５−Ｒのそれぞれがハイレベルとなるため、２入力アンド回路７０６の出力信号７０７は、ハイレベルとなる。これにより、インバータ回路７０８の出力信号７０９はロウレベルとなる。すなわち、ＰＣアドレス３０６によって表されるアドレスが、セキュアプログラム上限アドレス３０４−Ｕとセキュアプログラム下限アドレス３０４−Ｄによって指定されるセキュアプログラム領域内を指定しているとき、２入力アンド回路７０６の出力信号７０７はハイレベルとなり、インバータ回路７０８の出力信号７０９はロウレベルとなる。
【００９６】
一方、ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値を超えているとき、またはセキュアプログラム下限アドレス３０４−Ｄの値未満のときには、２入力アンド回路７０６の出力信号７０７はロウレベルとなり、インバータ回路７０８の出力信号７０９は、ハイレベルとなる。すなわち、ＰＣアドレス３０６によって表されるアドレスが、セキュアプログラム領域以外を指定しているときに、出力信号７０７はロウレベルとなり、出力信号７０９はハイレベルとなる。
【００９７】
そのため、出力信号７０７および７０９は、セキュアプログラム領域を選択しているのかノンセキュアプログラム領域を選択しているのかを表す選択信号と見なすことができる。出力信号７０７は、セキュアプログラム領域が選択されているとき、ハイレベルとなる。そのため、出力信号７０７は、セキュアプログラム領域信号７０７と見なすことができる。同様に、出力信号７０９は、ノンセキュアプログラム領域が選択されているとき、ハイレベルとなる。そのため、出力信号７０９は、ノンセキュアプログラム領域信号７０９と見なすことができる。
【００９８】
比較器７０４、７０５、２入力アンド回路７０６およびインバータ回路７０８によって、第１比較ユニットが構成されていると見なすことができる。この場合、第１比較ユニットによって形成されるセキュアプログラム領域信号７０７または／およびノンセキュアプログラム領域信号７０９（第１比較出力）を監視することによって、ＰＣアドレスカウンタが、セキュアプログラム領域を指定しているのか、あるいはノンセキュアプログラム領域を指定しているのを判定することが可能である。
【００９９】
フェッチ開始アドレス監視回路３００は、比較器７００、２入力アンド回路７０１およびフリップフロップ回路７０３を備えている。
【０１００】
比較器７００（第３比較回路）には、セキュアプログラム上限アドレス３０４−ＵとＰＣアドレス３０６とが供給される。比較器７００は、セキュアプログラム上限アドレス３０４−Ｕの値から４を減算して得た値（上限アドレス−４）と、ＰＣアドレス３０６とを比較する。ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値から４を減算して得た値（上限アドレス−４）以上のとき、比較器７００は、ハイレベルの比較結果信号７００−Ｒを出力する。一方、ＰＣアドレス３０６の値が、セキュアプログラム上限アドレス３０４−Ｕの値から４を減算して得た値（上限アドレス−４）未満のとき、比較器７００は、ロウレベルの比較結果信号７００−Ｒを出力する。
【０１０１】
比較結果信号７００−Ｒと、上記した比較器７０４の比較結果信号７０４−Ｒが、２入力アンド回路７０１（第２論理回路）に供給される。この２入力アンド回路７０１の出力信号は、セキュアプログラム分岐許可領域信号７０２として、フリップフロップ回路７０３に供給される。
【０１０２】
フリップフロップ回路７０３は、セット端子（ｓｅｔ）、クリア端子（ｃｌｅａｒ）および出力端子（Ｑ）を備えており、セット端子にハイレベルが供給されることにより、出力端子がハイレベルとなる。出力端子のハイレベルは、クリア端子にハイレベルが供給されるまで維持（保持）される。クリア端子にハイレベルが供給されることにより、出力端子はロウレベルへ変化する。
【０１０３】
２入力アンド回路７０１の出力信号であるセキュアプログラム分岐許可領域信号７０２が、フリップフロップ回路７０３のセット端子（ｓｅｔ）に供給され、前記したインバータ回路７０８の出力信号、すなわちノンセキュアプログラム領域信号７０９が、フリップフロップ回路７０３のクリア端子（ｃｌｅａｒ）に供給される。このフリップフロップ回路７０３の出力端子（Ｑ）から出力される信号が、セキュアデータアクセス許可信号３０２として、図３に示したメモリアクセス制御回路３０３へ供給される。
【０１０４】
セキュアプログラム上限アドレス３０４−Ｕと、セキュアプログラム下限アドレス３０４−Ｄと、上記したセキュアプログラム上限アドレス３０４−Ｕの値から４を減算して得た値（上限アドレス−４）との関係が、図７（Ｂ）に示されている。図７（Ｂ）において、上限アドレス３０４−Ｕおよび下限アドレス３０４−Ｄは、実線で示されており、セキュアプログラム上限アドレス３０４−Ｕの値から４を減算して得た値（上限アドレス−４）は、破線で示されている。
【０１０５】
図７（Ｂ）において、上限アドレス３０４−Ｕとして示されている値（アドレス）よりも、ＰＣアドレス３０６の値（アドレス）が、小さいとき、上記したように、比較結果信号７０４−Ｒは、ハイレベルとなる。一方、比較器７００は、ＰＣアドレス３０６の値が、上限アドレス３０４−Ｕよりも４低い値（上限アドレス−４）以上のときに、ハイレベルの比較結果信号７００−Ｒを出力する。そのため、２入力アンド回路７０１は、ＰＣアドレスの値が、上限アドレス３０４−Ｕの値以下で、上限アドレス−４の値以上のときに、ハイレベルのセキュアプログラム分岐許可領域信号７０２を出力することになる。セキュアプログラム分岐許可領域信号７０２（第２比較出力）は、比較器７００、７０４および２入力アンド回路７０１によって構成された第２比較ユニットにより形成されると見なすことができる。この場合、比較器７０４は、第１比較ユニットと第２比較ユニットとで共用されていることになる。
【０１０６】
セキュアプログラムは、セキュアプログラム領域内に配置されるが、配置の際に、上限アドレス３０４−Ｕの値と（上限アドレス−４）の値によって指定されたプログラム領域が、セキュアプログラムの開始アドレス（図５）とされる。この開始アドレスには、分岐の際に最初に実行される命令、図５の例では、レジスタ等を退避する命令Ｅｘ−Ａが配置される。
【０１０７】
例えば、ＰＣアドレス３０６の値が、下限アドレス３０４−Ｄの値未満の場合、比較器７０４からは、ハイレベルの比較結果信号７０４−Ｒが出力され、比較器７００および７０５からは、ロウレベルの比較結果信号７００−Ｒおよび７０５−Ｒが出力されることになる。その結果、セキュアプログラム分岐許可領域信号７０２およびセキュアプログラム領域信号７０７のそれぞれは、ロウレベルとなり、ノンセキュアプログラム領域信号７０９はハイレベルとなる。これにより、フリップフロップ回路７０３のクリア端子には、ハイレベルが供給されるため、フリップフロップ回路７０３の出力端子はロウレベルとなり、ロウレベルのセキュアデータアクセス許可信号３０２が、メモリアクセス制御回路３０３に供給されることになる。
【０１０８】
また、ＰＣアドレス３０６の値が、上限アドレス３０４−Ｕの値を超えていた場合、比較器７０４からは、ロウレベルの比較結果信号７０４−Ｒが出力され、比較器７００および７０５からは、ハイレベルの比較結果信号７００−Ｒおよび７０５−Ｒが出力されることになる。その結果、セキュアプログラム分岐許可領域信号７０２およびセキュアプログラム領域信号７０７のそれぞれは、ロウレベルとなり、ノンセキュアプログラム領域信号７０９はハイレベルとなる。これにより、フリップフロップ回路７０３のクリア端子には、ハイレベルが供給されるため、フリップフロップ回路７０３の出力端子はロウレベルとなり、ロウレベルのセキュアデータアクセス許可信号３０２が、メモリアクセス制御回路３０３に供給されることになる。
【０１０９】
ＰＣアドレス３０６の値が、上限アドレス３０４−Ｕの値以下であって、（上限アドレス−４）の値以上の場合には、比較器７００、７０４および７０５のそれぞれから、ハイレベルの比較結果信号７００−Ｒ、７０４−Ｒおよび７０５−Ｒが出力されることになる。その結果、セキュアプログラム分岐許可領域信号７０２およびセキュアプログラム領域信号７０７のそれぞれは、ハイレベルとなり、ノンセキュアプログラム領域信号７０９はロウレベルとなる。これにより、フリップフロップ回路７０３のセット端子には、ハイレベルが供給されるため、フリップフロップ回路７０３の出力端子はハイレベルとなり、ハイレベルのセキュアデータアクセス許可信号３０２が、メモリアクセス制御回路３０３に供給されることになる。
【０１１０】
メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２が、ハイレベルとなることにより、マイクロプロセッサＣＰＵがメモリをアクセスするのを許可する。すなわち、メモリアクセス制御回路３０３は、このときのＰＣアドレス３０６を、メモリへ供給し、メモリとマイクロプロセッサＣＰＵとの間でデータの送受信が可能となるようにする。そのため、セキュアプログラム分岐許可領域信号７０２がハイレベルとなることにより、マイクロプロセッサＣＰＵからのＰＣアドレス３０６が、メモリに供給され、メモリとの間でデータの送受信が可能とされる。
【０１１１】
一方、ＰＣアドレス３０６の値が、（上限アドレス−４）の値未満であって、下限アドレス３０４−Ｄの値以上の場合には、比較器７００からの比較結果信号７００−Ｒはロウレベルとなり、比較器７０４および７０５のそれぞれからは、ハイレベルの比較結果信号７０４−Ｒおよび７０５−Ｒが出力されることになる。その結果、セキュアプログラム分岐許可領域信号７０２およびノンセキュアプログラム領域信号７０９のそれぞれは、ロウレベルとなり、セキュアプログラム領域信号７０７は、ハイレベルとなる。これにより、フリップフロップ回路７０３のセット端子およびクリア端子には、ロウレベルが供給されるため、フリップフロップ回路７０３の出力端子は、以前の状態を維持することになり、以前の状態がハイレベルであれば、ハイレベルのセキュアデータアクセス許可信号３０２が、メモリアクセス制御回路３０３に供給され続け、以前の状態がロウレベルであれば、ロウレベルのセキュアデータアクセス許可信号３０２が、メモリアクセス制御回路３０３に供給され続けることになる。フリップフロップ回路７０３によって、以前の状態が維持（保持）されるため、フリップフロップ回路７０３は、保持回路と見なすことができる。
【０１１２】
メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２がロウレベルのとき、マイクロプロセッサＣＰＵからメモリへのアクセスを禁止する。すなわち、ＰＣアドレス３０６が、メモリへ伝達されるのを禁止する。これにより、マイクロプロセッサＣＰＵとメモリとの間のデータの送受信を禁止されることになる。
【０１１３】
ノンセキュアプログラムからセキュアプログラムへ分岐する際、ノンセキュアプログラムにおいて、マイクロプロセッサＣＰＵのＰＣアドレス３０６の値は、開始アドレス（図５）に設定される。この場合、開始アドレスは、上限アドレス３０４−Ｕと（上限アドレス−４）の間の分岐許可領域ＢＡＡ内のアドレスである。マイクロプロセッサＣＰＵのＰＣアドレスが、この分岐許可領域内を指定している場合には、上記したように、セキュアプログラム分岐許可領域信号７０２がハイレベルとなり、セキュアデータアクセス許可信号３０２がハイレベルとなる。その結果、マイクロプロセッサＣＰＵのＰＣアドレス３０６は、メモリアクセス制御回路３０３を介して、メモリへ伝達され、分岐許可領域ＢＡＡに格納されていた命令が、マイクロプロセッサＣＰＵによって読み出され、実行される。
【０１１４】
これに対して、ノンセキュアプログラムが、例えばハッキングプログラムの場合、ハッキングプログラムからセキュアプログラムへ分岐する際、ハッキングプログラムにおいて、マイクロプロセッサＣＰＵのＰＣアドレス３０６の値は、開始アドレス（図５）以外のアドレスに設定される。すなわち、ＰＣアドレス３０６の値は、（上限アドレス−４）と下限アドレス３０４−Ｄとの間を指定することになる。この場合、セキュアプログラム分岐許可領域信号７０２はロウレベルとなり、セキュアプログラム領域信号７０７はハイレベルとなり、ノンセキュアプログラム領域信号７０９はロウレベルとなる。
【０１１５】
セキュアプログラム分岐許可領域信号７０２およびノンセキュアプログラム領域信号７０９がロウレベルとなることによって、フリップフロップ回路７０３の出力端子（Ｑ）の電圧は、以前の電圧が維持される。ノンセキュアプログラムからの分岐であるため、以前の状態はノンセキュアプログラムを実行していたときの状態となる。ノンセキュアプログラムを実行していたときには、ノンセキュアプログラム領域信号７０９が、ハイレベルとなる。そのため、以前の状態では、フリップフロップ回路７０３の出力端子（Ｑ）は、ロウレベルである。その結果、ハッキングプログラムにおいて、分岐禁止領域ＢＰＡへ分岐しようとした場合には、ロウレベルのセキュアデータアクセス許可信号３０２が継続して出力されることになる。メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２が継続してロウレベルとなることにより、マイクロプロセッサＣＰＵからメモリ内の分岐禁止領域へのアクセスが禁止される。
【０１１６】
この実施の形態１では、セキュアプログラム領域が、比較器７００、７０４および７０５によって、分岐許可領域ＢＡＡと分岐禁止領域ＢＰＡに分けられる。ノンセキュアプログラムからセキュアプログラムに分岐する際に、ＰＣアドレス３０６によって表される分岐先アドレスが分岐許可領域ＢＡＡ内を指定していれば、マイクロプロセッサＣＰＵによるメモリへのアクセスが許可される。これに対して、ＰＣアドレス３０６によって表される分岐先アドレスが分岐禁止領域ＢＰＡ内を指定していれば、マイクロプロセッサＣＰＵによるメモリへのアクセスが禁止される。これにより、セキュアプログラム、セキュアデータをアタックから保護することが可能となる。
【０１１７】
この実施の形態１において、分岐許可領域ＢＡＡは、上限アドレス３０４−Ｕの値（分岐許可領域上限アドレス）と（上限アドレス−４）の値（分岐許可領域下限アドレス）との間のプログラム領域である。また、分岐禁止領域はＢＰＡ、下限アドレス３０４−Ｄの値（分岐禁止領域下限アドレス）と（上限アドレス−５）の値（分岐禁止領域上限アドレス）との間のプログラム領域である。また、この実施の形態１では、特に制限されないが、開始アドレス（図５）に格納される１個の１ワード命令が、４バイトによって構成されている。そのため、分岐許可領域下限アドレスが、分岐許可領域ＢＡＡの上限アドレスに対して４バイト小さくなるように、上限アドレス３０４−Ｕから４を減算したアドレスとしている。しかしながら、これに限定されるものではなく、セキュアプログラムの用途等によって、分岐許可領域ＢＡＡのサイズは決定してもよい。
【０１１８】
また、フリップフロップ回路７０３は、非同期式のフリップフロップ回路を例として示したが、マイクロプロセッサＣＰＵからメモリへのアクセスにタイミング的に余裕があれば、同期式のフリップフロップ回路を用いるようにしてもよいが、タイミング的に余裕が少ない場合には、非同期式のフリップフロップ回路を用いることが望ましい。
【０１１９】
ここでは、３個の比較器７００、７０４および７０５を用いる例を示したが、これに限定されるものではない。例えば、フェッチアドレス比較回路３０１とフェッチ開始アドレス監視回路３００のそれぞれに、２個の比較器を用いるようにしてもよい。この場合、フェッチ開始アドレス監視回路３００に、比較器７０４と同様な比較器を第４の比較器として設けるようにすればよい。第４の比較器で比較する上限アドレスを比較器７０４で比較する上限アドレスとは異なるアドレスにすることにより、分岐許可領域ＢＡＡを任意に設定できるようにしてもよい。
【０１２０】
しかしながら、フェッチアドレス比較回路３０１およびフェッチ開始アドレス監視回路３００において、ＰＣアドレス３０６と比較するアドレスとして、上限アドレス３０４−Ｕまたは下限アドレス３０４−Ｄを共通とすることにより、比較器の個数を低減することが可能となる。この場合、上限アドレス３０４−Ｕ（または下限アドレス３０４−Ｄ）を基準として、許可アドレス情報によって分岐許可領域ＢＡＡを定めればよい。この実施の形態１では、上限アドレス３０４−Ｕを基準として、許可アドレス情報が−４とされ、分岐許可領域ＢＡＡの下限アドレスが、（上限アドレス−４）と定められている。
【０１２１】
＜メモリプロテクションユニットの動作＞
次に、ノンセキュアプログラムからセキュアプログラムへ分岐するときの動作を、図７〜図１０を用いて説明する。先ず、ノンセキュアプログラムがハッキングプログラムではなく、正常にノンセキュアプログラムからセキュアプログラムへ分岐する場合を説明する。
【０１２２】
＜＜ノンセキュアプログラムからセキュアプログラムへの分岐＞＞
図８（Ａ）〜（Ｄ）は、実施の形態１に係わるメモリプロテクションユニット２０４の動作を示すタイミング図である。図８は、正常にノンセキュアプログラムからセキュアプログラムへ分岐する場合を示している。
【０１２３】
時刻ｔ０まで、マイクロプロセッサＣＰＵは、ノンセキュアプログラム領域でノンセキュアプログラムを実行している。すなわち、ＰＣアドレス３０６は、図７（Ｂ）に示したセキュアプログラム領域ではなく、ノンセキュアプログラム領域内を指定している。そのため、時刻ｔ０までは、比較器７０４または７０５（図７（Ａ））からの比較結果信号７０４−Ｒまたは７０５−Ｒはロウレベルとなる。これにより、セキュアプログラム領域信号７０７はロウレベルとなり、ノンセキュアプログラム領域信号７０９はハイレベルとなっている。また、比較結果信号７０４−Ｒまたは７００−Ｒがロウレベルとなるため、セキュアプログラム分岐許可領域信号７０２もロウレベルとなっている。
【０１２４】
ノンセキュアプログラム領域信号７０９がハイレベルとなっているため、フリップフロップ回路７０３のクリア端子（ｃｌｅａｒ）にハイレベルが供給されることになる。フリップフロップ回路７０３のセット端子（ｓｅｔ）にはロウレベルが供給されているが、クリア端子にハイレベルが供給されているため、セキュアデータアクセス許可信号３０２はロウレベルとなる。
【０１２５】
時刻ｔ０で、マイクロプロセッサＣＰＵは、ノンセキュアプログラムにおける分岐命令を実行する。このとき実行する分岐命令が、セキュアプログラムへの分岐を指示する分岐命令である。特に制限されないが、このとき分岐先アドレスを指定するアドレス情報が、実行しているノンセキュアプログラムにおいて、マイクロプロセッサＣＰＵに与えられる。マイクロプロセッサＣＰＵは、与えられたアドレス情報に従って、ＰＣアドレス３０６を設定する。ここでは、図５に示した開始アドレスが、ＰＣアドレス３０６に設定される（図８（Ａ））。開始アドレスは、分岐許可領域ＢＡＡ内を指定するアドレスであるため、比較結果信号７００−Ｒ、７０４−Ｒおよび７０５−Ｒのそれぞれがハイレベルとなる。これにより、セキュアプログラム領域信号７０７はハイレベルになり、ノンセキュアプログラム領域信号７０９はロウレベルとなり、セキュアプロクラム分岐許可領域信号７０２はハイレベルとなる（図８（Ｃ）、図８（Ｂ））。
【０１２６】
セキュアプログラム分岐許可領域信号７０２がハイレベルとなることにより、フリップフロップ回路７０３の出力端子（Ｑ）はハイレベルとなる。このとき、フリップフロップ回路７０３のクリア端子にはロウレベルが供給されているため、フリップフロップ回路７０３は、ハイレベルを出力する。これにより、セキュアデータアクセス許可信号３０２はハイレベルへ変化する（図８（Ｄ））。セキュアデータアクセス許可信号３０２がハイレベルとなることにより、メモリアクセス制御回路３０３（図３）は、マイクロプロセッサＣＰＵからメモリへのアクセスを許可する。
【０１２７】
時刻ｔ１で、マイクロプロセッサＣＰＵは、分岐許可領域ＢＡＡに格納されている命令（例えば、図５の命令Ｅｘ−Ａ）の実行を完了し、時刻ｔ１から時刻ｔ２の間で、セキュアプログラムの残りの命令を実行する。残りの命令を実行するために、ＰＣアドレス３０６は、時刻ｔ１から時刻ｔ２の間、分岐禁止領域ＢＰＡ内を指定するアドレスを順次出力する。図５を例にして述べると、時刻ｔ１から時刻ｔ２の間で、所定の処理に関する命令Ｅｘ−Ｂ〜Ｅｘ−Ｐと、レジスタ等の復帰に関する命令Ｅｘ−Ｚを実行するために、ＰＣアドレス３０６は、順次更新される。
【０１２８】
これらの命令は、セキュアプログラム領域に配置されており、分岐禁止領域ＢＰＡに配置されている。そのため、時刻ｔ１において、時刻ｔ１から時刻ｔ２の間、比較器７００からはロウレベルの比較結果信号７００−Ｒが出力されることになる。しかしながら、これらの命令は、セキュアプログラム領域に配置されているため、比較器７０４および７０５のそれぞれの比較結果信号７０４−Ｒおよび７０５−Ｒはハイレベルを維持することになる。
【０１２９】
時刻ｔ１において、比較結果信号７００−Ｒがロウレベルとなることにより、セキュアプログラム分岐許可領域信号７０２はロウレベルへ変化する。これにより、フリップフロップ回路７０３のセット端子（ｓｅｔ）には、ロウレベルが供給されることになる。一方、比較結果信号７０４−Ｒおよび７０５−Ｒは、ハイレベルを維持しているため、ノンセキュアプログラム領域信号７０９はロウレベルを維持している。そのため、フリップフロップ回路７０３のクリア端子（ｃｌｅａｒ）には、継続してロウレベルが供給されることになる。クリア端子（ｃｌｅａｒ）がロウレベルのため、フリップフロップ回路７０３は、その出力端子（Ｑ）がハイレベルの状態を維持（保持）することになる。この結果、セキュアデータアクセス許可信号３０２も、時刻ｔ１から時刻ｔ２の間、ハイレベルを維持することになる。セキュアデータアクセス許可信号３０２がハイレベルとなっているため、メモリアクセス制御回路３０３は、時刻ｔ１から時刻ｔ２の間も、マイクロプロセッサＣＰＵが、メモリをアクセスすることを許可し続ける。
【０１３０】
時刻ｔ２において、セキュアプログラムの実行が完了すると、セキュアプログラムからノンセキュアプログラムへ復帰する。すなわち、ＰＣアドレス３０６は、分岐禁止領域ＢＰＡから、ノンセキュアプログラム領域内を指定するアドレスに変わる。セキュアプログラム領域から、ノンセキュアプログラム領域内を指定するアドレスに、ＰＣアドレス３０６が変化するため、時刻ｔ２において、比較器７０４または７０５の比較結果信号７０４−Ｒまたは７０５−Ｒがロウレベルへ変化する。その結果、ノンセキュアプログラム領域信号７０９は、ハイレベルへ変化する。これにより、フリップフロップ回路７０３のクリア端子（ｃｌｅａｒ）にハイレベルが供給され、フリップフロップ回路７０３の出力端子（Ｑ）の電圧は、ロウレベルへ変化し、セキュアデータアクセス許可信号３０２もロウレベルへ変化する。セキュアデータアクセス許可信号３０２がロウレベルとなることによって、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、メモリのセキュアプログラム領域およびセキュアデータ領域をアクセスするのを禁止する。
【０１３１】
フリップフロップ回路７０３に注目して述べると、マイクロプロセッサＣＰＵからのアドレス（ＰＣアドレス３０６）が、ノンセキュアプログラム領域を示すまでは、その出力端子（Ｑ）はハイレベル（所定の状態）に維持され、メモリへのアクセスが許可されることになる。
【０１３２】
このようにして、ノンセキュアプログラムから、セキュアプログラムへ分岐して、セキュアプログラムを実行することが可能となる。すなわち、ノンセキュアプログラムから、ＲＴＯＳを構成するセキュアプログラムを呼び出して、利用することが可能となる。
【０１３３】
＜＜ハッキングプログラムからセキュアプログラムへの分岐＞＞
次に、ハッキングプログラムからセキュアプログラムへ分岐する場合を説明する。この場合、ハッキングプログラムは、ノンセキュアプログラム領域で動作している。図９（Ａ）〜（Ｄ）は、実施の形態１に係わるメモリプロテクションユニットの動作を示すタイミング図である。図９は、ハッキングプログラムからセキュアプログラムへ分岐する場合を示している。なお、図９（Ｂ）および（Ｄ）において、破線は、図８で説明した状態を示している。すなわち、正常に、ノンセキュアプログラムからセキュアプログラムを呼び出したときの状態を示している。
【０１３４】
時刻ｔ０までは、図８と同じであるため、詳しい説明は省略するが、時刻ｔ０までは、ノンセキュアプログラムが実行されているため、ノンセキュアプログラム領域信号７０９がハイレベルとなっている。そのため、フリップフロップ回路７０３の出力端子（Ｑ）はロウレベルの状態となっており、セキュアデータアクセス許可信号３０２もロウレベルとなっている。
【０１３５】
時刻ｔ０で、マイクロプロセッサＣＰＵは、ハッキングプログラム（ノンセキュアプログラム）における分岐命令を実行する。このとき実行する分岐命令が、セキュアプログラムの所定の分岐先アドレスへの分岐を指示する分岐命令である。特に制限されないが、このとき所定の分岐先アドレスを指定するアドレス情報は、実行しているハッキングプログラムにおいて、マイクロプロセッサＣＰＵに与えられる。マイクロプロセッサＣＰＵは、与えられたアドレス情報に従って、ＰＣアドレス３０６を設定する。ハッキングプログラムでは、例えば図５に示した分岐先アドレスが、ＰＣアドレス３０６に設定される（図９（Ａ））。分岐先アドレスは、開始アドレスと異なり、例えばセキュアプログラムを構成する一連の命令列において、途中の命令が格納されているアドレスである。図５の例では、一連の命令列（命令Ｅｘ−Ｂ〜Ｅｘ−Ｐ）のうちの途中のストア命令（Ｅｘ−Ｓ）が格納されているアドレスが、分岐先アドレスとされている。
【０１３６】
この分岐先アドレスは、分岐禁止領域ＢＰＡを指定するアドレスであるため、比較結果信号７００−Ｒはロウレベルとなり、比較結果信号７０４−Ｒおよび７０５−Ｒはハイレベルとなる。比較結果信号７０４−Ｒおよび７０５−Ｒがハイレベルとなるため、セキュアプログラム領域信号７０７はハイレベルになり、ノンセキュアプログラム領域信号７０９はロウレベルとなる。一方、比較結果信号７００−Ｒがロウレベルとなるため、セキュアプロクラム分岐許可領域信号７０２もロウレベルとなる（図９（Ｃ）、図９（Ｂ））。
【０１３７】
セキュアプログラム分岐許可領域信号７０２およびノンセキュアプログラム領域信号７０９のそれぞれが、ロウレベルとなることにより、フリップフロップ回路７０３のセット端子（ｓｅｔ）およびクリア端子（ｃｌｅａｒ）には、ロウレベルが供給されることになる。そのため、フリップフロップ回路７０３の出力端子（Ｑ）は、時刻ｔ０までの状態を継続して出力する。すなわち、フリップフロップ回路７０３の出力端子（Ｑ）はロウレベルを継続して出力する。これにより、セキュアデータアクセス許可信号３０２は、図８（Ｄ）で説明したように、ハイレベル（図９（Ｄ）の破線）へは変化せず、ロウレベルを維持することになる。セキュアデータアクセス許可信号３０２がロウレベルであるため、メモリアクセス制御回路３０３（図３）は、マイクロプロセッサＣＰＵからメモリのセキュアプログラム領域およびセキュアデータ領域へのアクセスを禁止する。
【０１３８】
時刻ｔ１において、マイクロプロセッサＣＰＵによるセキュアプログラム領域へのアクセスが、メモリアクセス制御回路３０３によって禁止されるため、セキュアプログラム領域において分岐先アドレスによって指定される命令（図５では、命令Ｅｘ−Ｓ）は、読み出されず、この命令は、マイクロプロセッサＣＰＵによって実行されない。図９の例では、マイクロプロセッサＣＰＵが、時刻ｔ１から時刻ｔ２の間、セキュアプログラム領域を指定するＰＣアドレス３０６を継続して出力している。ＰＣアドレス３０６が、セキュアプログラム領域を指定している期間では、セキュアプログラム領域信号７０７がハイレベルを継続し、図９（Ｃ）に示すようにノンセキュアプログラム領域信号７０９はロウレベルを継続する。そのため、時刻ｔ１から時刻ｔ２の期間においても、フリップフロップ回路７０３は、その出力端子（Ｑ）は、図９（Ｄ）に破線で示すようにハイレベルには変化せず、ロウレベルを維持する。すなわち、セキュアデータアクセス許可信号３０２はロウレベルを維持する。
【０１３９】
セキュアデータアクセス許可信号３０２がロウレベルを維持するため、時刻ｔ１から時刻ｔ２の期間においても、マイクロプロセッサＣＰＵによるセキュアプログラム領域およびセキュアデータ領域へのアクセスは、メモリアクセス制御回路３０３によって禁止されることになる。
【０１４０】
図９の例では、時刻ｔ２において、マイクロプロセッサＣＰＵは、ノンセキュアプログラムを実行するように、そのＰＣアドレス３０６に格納されているアドレスを変更している。ＰＣアドレス３０６が、ノンセキュアプログラム領域を指定するアドレスに変更されることにより、比較結果信号７０４−Ｒまたは７０５−Ｒが、ハイレベルからロウレベルへ変化する。これにより、セキュアプログラム領域信号７０７はハイレベルからロウレベルへ変化し、ノンセキュアプログラム領域信号７０９は、ロウレベルからハイレベルへ変化する。
【０１４１】
ノンセキュアプログラム領域信号７０９が、ハイレベルとなることによって、フリップフロップ回路７０３は、出力端子（Ｑ）をロウレベルにする。時刻ｔ２まで、出力端子（Ｑ）はロウレベルであったため、フリップフロップ回路７０３は、出力端子（Ｑ）から継続してロウレベルを出力すると見なすことができる。すなわち、セキュアデータアクセス許可信号３０２は、時刻ｔ２以降も、ロウレベルとなる。
【０１４２】
メモリアクセス制御回路３０３は、セキュアデータアクセス許可信号３０２がロウレベルとなっているが、ＰＣアドレス３０６が、ノンセキュアプログラム領域内を指定しているため、マイクロプロセッサＣＰＵによるノンセキュアプログラム領域およびノンセキュアデータ領域へのアクセスを許可する。
【０１４３】
その結果、ノンセキュアプログラムに関する命令は実行することが可能となる。勿論、ハッキングプログラムにおいて、セキュアプログラムへの分岐命令の後に、ノンセキュアプログラムの命令が配置されている場合、セキュアプログラムへの分岐命令の後に配置されているノンセキュアプログラムの命令を実行しないように制限してもよい。例えばノンセキュアプログラム領域信号７０９がロウレベルへ変化するタイミングで、セキュアプログラム分岐許可領域信号７０２をサンプリングし、サンプリングしたセキュアプログラム分岐許可領域信号７０２がロウレベルであれば、時刻ｔ２以降は、メモリアクセス制御回路３０３が、マイクロプロセッサＣＰＵによるノンセキュアプログラム領域およびノンセキュアデータ領域へのアクセスも禁止するようにすればよい。
【０１４４】
このように、ハッキングプログラムによって、セキュアデータ（セキュアプログラムを含む）へのアクセスが禁止されるため、ハッキングプログラムによるアタックから、セキュアデータを保護することが可能となる。ここでは、ハッキングプログラムを例にして説明したが、ノンセキュアプログラムの不備によって、誤ってセキュアデータが読み出されてしまうのも防ぐことが可能となる。
【０１４５】
＜＜メモリプロテクションユニットの動作＞＞
図１０は、実施の形態１に係わるメモリプロテクションユニット２０４の動作を示す表である。図１０は、分岐の際のメモリプロテクションユニット２０４の動作を示している。図１０において、ＢＳＡ、ＢＤＡおよびＢＯＰは、表の列を示している。ここで、列ＢＳＡは、分岐元アドレスを示し、列ＢＤＡは、分岐先アドレスを示し、列ＢＯＰは、分岐の際の制御を示している。
【０１４６】
メモリプロテクションユニット２０４は、分岐元アドレスを、３個に分けて制御する。すなわち、分岐するとき、分岐元が「（１）ノンセキュアプログラム領域」であるか、「（２）セキュアプログラム分岐許可領域」であるか、あるいは「（３）セキュアプログラム分岐禁止領域」であるかに分けて制御する。言い換えるなら、分岐を実行するとき、分岐命令が「（１）ノンセキュアプログラム領域」に配置されているか、「（２）セキュアプログラム分岐許可領域」に配置されているか、あるいは「（３）セキュアプログラム分岐禁止領域」に配置されているかに分けて制御する。なお、図１０において、セキュアプログラム分岐許可領域とは、分岐許可領域ＢＡＡを表しており、セキュアプログラム分岐禁止領域とは、分岐禁止領域ＢＰＡを表している。
【０１４７】
メモリプロテクションユニット２０４は、図８および図９に示した時刻ｔ０のとき、「（１）ノンセキュアプログラム領域」の制御を行う。また、メモリプロテクションユニット２０４は、図８において時刻ｔ０から時刻ｔ２の期間は、「（２）セキュアプログラム分岐許可領域」および「（３）セキュアプログラム分岐禁止領域」の制御を行う。
【０１４８】
メモリプロテクションユニット２０４は、列ＢＳＡに示した分岐元アドレスが、「ノンセキュアプログラム領域」、「セキュアプログラム分岐許可領域」および「セキュアプログラム分岐禁止領域」のそれぞれに対して、列ＢＤＡに示した分岐先アドレスも、３個に分けて制御する。すなわち、分岐するとき、分岐先が、「ノンセキュアプログラム領域」であるか、「セキュアプログラム分岐許可領域」であるか、あるいは「セキュアプログラム分岐禁止領域」に分けて制御する。この場合も、分岐命令を実行した際の分岐先の命令が、「ノンセキュアプログラム領域」に配置されているか、「セキュアプログラム分岐許可領域」に配置されているか、あるいは「セキュアプログラム分岐禁止領域」に配置されているかに分けて制御されていると見なすことができる。
【０１４９】
列ＢＯＰは、分岐の際の制御を示しており、図１０には、分岐の際のセキュアデータ領域に関する制御が示されている。ここでのセキュアデータ領域は、セキュアプログラム領域およびセキュアデータ領域の両方を意味している。セキュアデータ領域に関する制御は、３種類存在する。すなわち、メモリアクセス制御ユニット３０３が、マイクロプロセッサＣＰＵに対して、セキュアデータ領域に対するアクセスを許可するセキュアデータアクセス許可状態、セキュアデータ領域に対するアクセスを禁止するセキュアデータアクセス禁止状態および分岐前の動作状態を維持する維持状態である。ここで維持状態とは、分岐前が、セキュアデータアクセス許可状態であれば、セキュアデータアクセス許可状態を維持することを意味し、分岐前が、セキュアデータアクセス禁止状態であれば、セキュアデータアクセス禁止状態を維持することを意味する。
【０１５０】
メモリプロテクションユニット２０４は、分岐元アドレスが、列ＢＳＡの「（１）セキュアプログラム領域」の場合、分岐先アドレスが、この「（１）セキュアプログラム領域」と同じ行に記載した３個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御（列ＢＯＰに記載した制御）を実行する。同様に、分岐元アドレスが、列ＢＳＡの「（２）セキュアプログラム分岐許可領域」の場合、分岐先アドレスが、この「（２）セキュアプログラム分岐許可領域」と同じ行に記載した３個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御（列ＢＯＰに記載した制御）を実行する。また、分岐元アドレスが、列ＢＳＡの「（３）セキュアプログラム分岐禁止領域」の場合、分岐先アドレスが、この「（３）セキュアプログラム分岐禁止領域」と同じ行に記載した３個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御（列ＢＯＰに記載した制御）を実行する。
【０１５１】
次に、図７から図９を用いて、図１０に示したメモリプロテクションユニット２０４の動作を説明する。
【０１５２】
ユーザープログラムＵ−ＡＰは、例えば複数のノンセキュアプログラムによって構成され、それぞれのノンセキュアプログラムは、ノンセキュアプログラム領域に配置されている。ノンセキュアプログラムであるユーザープログラムＵ−ＡＰが、ＲＴＯＳのようなセキュアプログラムを利用する場合、図８および図９で説明したように、ノンセキュアプログラム領域からセキュアプログラムへ分岐することになる。
【０１５３】
ノンセキュアプログラム領域からの分岐であるため、メモリプロテクションユニット２０４は、分岐元が「（１）ノンセキュアプログラム領域」であると判定する。すなわち、ユーザープログラムＵ−ＡＰからＲＴＯＳのプログラムを呼び出す（分岐する）場合（時刻ｔ０）には、メモリプロテクションユニット２０４は、分岐元が「（１）ノンセキュアプログラム領域」であると判定する。
【０１５４】
次に、メモリプロテクションユニット２０４内のメモリアクセス制御回路３０３は、図７、図８および図９で説明したノンセキュアプログラム領域信号７０９が、ロウレベルか否かを判定する。ノンセキュアプログラム領域信号７０９がハイレベルであれば、分岐先は、「ノンセキュアプログラム領域」であると判定し、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域へアクセスするのを禁止する（列ＢＯＰにおいて「セキュアデータアクセス禁止」）。この場合、図１０には記載していないが、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵによって、ノンセキュアデータ領域へのアクセスは許可する。これにより、ユーザープログラムにおいて、所定のノンセキュアプログラムから別のノンセキュアプログラムへの分岐が可能となる。なお、図３および図７では、図面が複雑になるのを避けるために、ノンセキュアプログラム領域信号７０９を、メモリアクセス制御回路３０３へ供給する信号配線は省略されている。
【０１５５】
ノンセキュアプログラム領域信号７０９がロウレベルとなっている場合、図８および図９の時刻ｔ０で説明したように、セキュアプログラム分岐許可領域信号７０２の電圧（ハイレベルまたはロウレベル）に従って、セキュアデータアクセス許可信号３０２は、ハイレベルまたはロウレベルとなる。メモリアクセス制御回路３０３は、ノンセキュアプログラム領域信号７０９がロウレベルで、図８に示すようにセキュアデータアクセス許可信号３０２がハイレベルであれば、分岐先アドレス（列ＢＤＡ）は、「セキュアプログラム分岐許可領域」であると判定し、マイクロプロセッサＣＰＵによるセキュアデータ領域へのアクセスを許可する（「セキュアデータアクセス許可」）。
【０１５６】
これに対して、ノンセキュアプログラム領域信号７０９がロウレベルで、図９に示すようにセキュアデータアクセス許可信号３０２がロウレベルであれば、分岐先アドレス（列ＢＤＡ）は、「セキュアプログラム分岐禁止領域」であると判定し、分岐前の動作状態を維持する状態となる。図９の時刻ｔ０で説明したように、フリップフロップ回路７０３の出力端子（Ｑ）は、時刻ｔ０よりも前の状態を維持している。この場合、前の状態は、セキュアデータのアクセスを禁止する状態である。そのため、この場合には、マイクロプロセッサＣＰＵによるセキュアデータ領域へのアクセスを禁止する状態が維持される。図９の場合には、時刻ｔ０から時刻ｔ２の期間も、この状態が維持されることになる。
【０１５７】
時刻ｔ０において、分岐先アドレスが、「セキュアプログラム分岐許可領域」と判定された場合、時刻ｔ０から時刻ｔ２の期間においては、メモリプロテクションユニット２０４は、「（２）セキュアプログラム分岐許可領域」または「（３）セキュアプログラム分岐禁止領域」の制御を実行する。
【０１５８】
先ず、マイクロプロセッサＣＰＵは、時刻ｔ０から時刻ｔ１の期間において、セキュア分岐許可領域に配置された命令を実行する。このとき、実行する命令が分岐命令であった場合には、「（２）セキュア分岐許可領域」の制御を実行する。すなわち、この期間において実行する分岐命令の分岐先アドレスが、「ノンセキュアプログラム領域」であれば、ノンセキュアプログラム領域信号７０９がロウレベルとなる。これにより、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰによるセキュアデータ領域へのアクセスを禁止する（セキュアデータアクセス禁止）。この場合、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）が、ロウレベルへクリアされるため、ノンセキュアプログラムから再びセキュアプログラムを利用するためには、ノンセキュアプログラムにおいて、セキュアプログラム分岐許可領域を指定する分岐命令を実行することが、要求される。
【０１５９】
時刻ｔ０から時刻ｔ１において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐許可領域」を指定していれば、セキュアプログラム分岐許可領域信号７０２がハイレベルとなる。これにより、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号３０２は、ハイレベルとなり、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域をアクセスすることを許可する（セキュアデータアクセス許可）。
【０１６０】
時刻ｔ０から時刻ｔ１において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐禁止領域」を指定していれば、図８で説明したように、セキュアプログラム分岐許可領域信号７０２はロウレベルとなるが、ノンセキュアプログラム領域信号７０９は、ロウレベルに維持される。そのため、図８で説明したように、フリップフロップ７０３の出力端子（Ｑ）の電圧は、ハイレベルに維持されることになる。すなわち、分岐する前の状態が維持される。この結果、メモリアクセス制御回路３０３は、分岐前の動作状態を維持することになる。この場合、分岐前の動作状態は、セキュアデータアクセス許可の状態であったため、マイクロプロセッサＣＰＵによってセキュアデータ領域へのアクセス許可の状態が継続されることになる。
【０１６１】
これにより、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号３０２は、ハイレベルとなり、メモリ制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域をアクセスすることを許可する（セキュアデータアクセス許可）。
【０１６２】
時刻ｔ０から時刻ｔ１の期間において、「セキュアプログラム分岐禁止領域」を分岐先アドレスとした分岐命令を実行した場合、マイクロプロセッサＣＰＵは、図８において時刻ｔ１から時刻ｔ２として示した期間で動作することになる。この場合、マイクロプロセッサＣＰＵは、セキュアプログラム分岐禁止領域に格納されているセキュアプログラムを実行することになる。言い換えるならば、この期間において、マイクロプロセッサＣＰＵが実行する分岐命令は、分岐元アドレスが、「（３）セキュアプログラム分岐禁止領域」となる。
【０１６３】
分岐元アドレスが、「（３）セキュアプログラム分岐禁止領域」となっているとき、すなわち、図９において時刻ｔ１から時刻ｔ２の期間、マイクロプロセッサＣＰＵは、セキュア分岐禁止領域に配置された命令を実行する。この期間において、実行する命令が分岐命令であり、その分岐先アドレスが、「ノンセキュアプログラム領域」であれば、ノンセキュアプログラム領域信号７０９がロウレベルとなる。これにより、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰによるセキュアデータ領域へのアクセスを禁止する（セキュアデータアクセス禁止）。この場合、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）が、ロウレベルへクリアされるため、ノンセキュアプログラムから再びセキュアプログラムを利用するためには、ノンセキュアプログラムにおいて、セキュアプログラム分岐許可領域を指定する分岐命令を実行することが、要求される。
【０１６４】
時刻ｔ１から時刻ｔ２において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐許可領域」を指定していれば、セキュアプログラム分岐許可領域信号７０２がハイレベルとなる。これにより、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号３０２は、ハイレベルとなり、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域をアクセスすることを許可する（セキュアデータアクセス許可）。
【０１６５】
時刻ｔ１から時刻ｔ２において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐禁止領域」を指定していれば、図８で説明したように、セキュアプログラム分岐許可領域信号７０２はロウレベルとなるが、ノンセキュアプログラム領域信号７０９は、ロウレベルに維持される。そのため、図８で説明したように、フリップフロップ７０３の出力端子（Ｑ）の電圧は、ハイレベルに維持されることになる。すなわち、分岐する前の状態が維持される。この結果、メモリアクセス制御回路３０３は、分岐前の動作状態を維持することになる。この場合、分岐前の動作状態は、セキュアデータアクセス許可の状態であったため、マイクロプロセッサＣＰＵによってセキュアデータへのアクセス許可の状態が継続されることになる。
【０１６６】
これにより、図７に示したフリップフロップ回路７０３の出力端子（Ｑ）は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号３０２は、ハイレベルとなり、メモリアクセス制御回路３０３は、マイクロプロセッサＣＰＵが、セキュアデータ領域をアクセスすることを許可する（セキュアデータアクセス許可）。
【０１６７】
なお、図８および図９においては、時刻ｔ２で、ノンセキュアプログラムを実行している。図８の例では、「（３）セキュアプログラム分岐禁止領域」の制御において、分岐先アドレスが、「ノンセキュアプログラム領域」を指定した場合の動作となる。また、図９の例では、「（１）ノンセキュアプログラム領域」の制御において、分岐先アドレスを「ノンセキュアプログラム領域」を指定した場合の動作となる。このいずれの場合においても、メモリアクセス制御回路３０３によって、マイクロプロセッサＣＰＵが、セキュアデータ領域をアクセスすることは禁止され、ノンセキュアデータ領域のアクセスは許可されることになる。
【０１６８】
メモリアクセス制御回路３０３へノンセキュアプログラム領域信号７０９を、図示しない信号配線で供給する例を説明したが、これに限定されるものではない。例えば、メモリアクセス制御回路３０３へセキュアプログラム領域信号７０７を、図示しない信号配線で供給するようにしてもよい。
【０１６９】
上記したように、この実施の形態１においては、ノンセキュアプログラムからセキュアデータ領域へのアクセスを許可するのは、ノンセキュアプログラムにおける分岐命令の分岐先アドレスが、セキュアプログラム分岐許可領域（分岐許可領域ＢＡＡ）を指定しているときである。これにより、マイクロプロセッサＣＰＵを操作することが可能なノンセキュアプログラムを、任意に作成することができるようにしても、ＲＴＯＳのようなセキュアプログラムを、ハッキングプログラムによるアタックから保護することが可能となる。
【０１７０】
また、セキュアプログラム分岐禁止領域で、セキュアプログラム分岐禁止領域を分岐先アドレスとした分岐命令を実行する場合、セキュアデータ領域へのアクセスの許可／禁止は、分岐命令を実行する前の状態が維持される。これにより、セキュアプログラム分岐禁止領域に配置されたセキュアプログラムにおいて、セキュアプログラム分岐禁止領域を分岐先とした分岐命令を実行したときでも、マイクロプロセッサＣＰＵは、セキュアデータ領域へアクセスすることが可能となる。その結果、ＲＴＯＳのようなセキュアプログラムにおいて、所定のサブルーチンから他のサブルーチンを呼び出す（分岐する）場合があっても、ユーザープログラムＵ−ＡＰからＲＴＯＳを有効に利用することが可能となる。
【０１７１】
なお、セキュアデータ領域へのアクセスを禁止するのは、分岐命令の分岐先アドレスが、ノンセキュアプログラム領域を指定するときである。
【０１７２】
＜変形例＞
図１１は、実施の形態１に係わる変形例を示す説明図である。図１１は、図６と類似しているので、図６との相違点を主に説明する。
【０１７３】
図６と同様に、フラッシュメモリＦＲＭは、ノンセキュアプログラム領域とセキュアプログラム領域とを備えており、揮発性メモリ２０３は、ノンセキュアデータ領域とセキュアデータ領域とを備えている。ここで、セキュアプログラム領域には、セキュリティが担保されるべきプログラムが格納され、セキュアデータ領域にも、セキュリティが担保されるべきデータが格納される。ノンセキュアプログラム領域、ノンセキュアデータ領域およびセキュアデータ領域は、図６と同じであるため、説明は省略する。
【０１７４】
この変形例においても、セキュアプログラム領域は、分岐許可領域ＢＡＡと分岐禁止領域ＢＰＡに分けられている。例えば、図７で説明したように、セキュアプログラム上限アドレス３０４−Ｕとセキュアプログラム下限アドレス３０４−Ｄによって指定されたフラッシュメモリＦＲＭの領域の範囲内が、セキュアプログラム領域となり、セキュアプログラム領域を除くフラッシュメモリＦＲＭの領域が、ノンセキュアプログラム領域となる。また、分岐許可領域ＢＡＡは、図７で示した（上限アドレス−４）と上限アドレス３０４−Ｕとの間の範囲となり、分岐禁止領域ＢＰＡは、図７で示した（上限アドレス−５）と下限アドレス３０４−Ｄとの間の範囲となる。
【０１７５】
変形例においては、分岐許可領域ＢＡＡに所定の分岐命令ＢＲＩが配置される。また、分岐禁止領域ＢＰＡには、入力情報チェック用のチェックプログラムＣＨＫ、実行プログラム選択用の選択プログラムＥＸＳおよび複数のプログラムＰＲＧ１〜ＰＲＧｎが格納されている。プログラムＰＲＧ１〜ＰＲＧｎは、互いに異なる機能を実現するプログラムであって、図１１には、一例として３個のプログラムＰＲＧ１〜ＰＲＧ３が例示されている。
【０１７６】
ノンセキュアプログラム領域に配置されたノンセキュアプログラムから、セキュアプログラム領域に配置されたセキュアプログラムへ分岐するノンセキュアプログラムは、例えばノンセキュアデータ領域の所定の領域に、プログラムＰＲＧ１〜ＰＲＧｎのうち、実行すべきプログラムを選択する選択情報を格納する命令と、分岐許可領域ＢＡＡ内を分岐先アドレスとした分岐命令とを備えている。マイクロプロセッサＣＰＵが、このノンセキュアプログラムを実行することにより、プログラムＰＲＧ１〜ＰＲＧｎのうち、実行すべきプログラムを指定する選択情報が、ノンセキュアデータ領域の所定の領域に格納された後、ＰＣアドレス３０６は、分岐可能領域ＢＡＡ内を指定することになる。
【０１７７】
ＰＣアドレス３０６によって、分岐許可領域ＢＡＡに配置された分岐命令ＢＲＩのアドレスが指定されると、分岐命令ＢＲＩが、マイクロプロセッサＣＰＵによって読み出され、実行される。この分岐命令ＢＲＩは、チックプログラムＣＨＫへ分岐する命令である。
【０１７８】
分岐命令ＢＲＩを実行することにより、次にチェックプログラムＣＨＫが実行されることになる。チェックプログラムＣＨＫにおいて、マイクロプロセッサＣＰＵは、ノンセキュアデータ領域の所定の領域から、選択情報を読み出し、読み出した選択情報が、予期しない選択情報でないかのチェックを行う。例えば、選択情報が、プログラムＰＲＧ１〜ＰＲＧｎを超えるプログラムを指定するような選択情報でないか等のチェックを行う。チェックプログラムＣＨＫによるチェックによって適切な選択情報と判定した場合、次に選択プログラムＥＸＳを実行する。
【０１７９】
選択プログラムＥＸＳは、プログラムＰＲＧ１〜ＰＲＧｎのうち、選択情報によって指定されているプログラムを選択し、実行する。これにより、セキュアプログラム領域に配置されている複数のプログラムから、所望のセキュアプログラムを選択して、実行することが可能となる。
【０１８０】
図１１では、省略されているが、分岐許可領域ＢＡＡには、例えばレジスタ等の値を退避する命令が配置されている。また、分岐禁止領域ＢＰＡには、レジスタ等の値を復帰する命令が配置されている。
【０１８１】
分岐許可領域ＢＡＡに、例えば、プログラムＰＲＧ１〜ＰＲＧｎのそれぞれに分岐する分岐命令を複数配置しておくことも可能であるが、この場合には、分岐許可領域ＢＡＡのサイズが大きくなる。すなわち、分岐を許可する領域が大きくなり、ハッキングプログラムがアクセスすることが可能な領域が大きくなってしまう。この変形例によれば、分岐許可領域ＢＡＡのサイズが大きくなるのを抑制することが可能であり、ハッキングプログラムによってアクセスが可能な領域が大きくなるのを抑制することが可能となる。
【０１８２】
この変形例においても、図６と同様に、分岐禁止領域ＢＰＡを、分岐先アドレスとしてアクセスされた場合、メモリプロテクションユニット２０４によって、セキュアデータ領域へのアクセスを禁止することが可能であり、セキュアプログラムＰＲＧ１〜ＰＲＧｎを保護することが可能である。
【０１８３】
なお、セキュアプログラムを指定する選択情報を、ノンセキュアデータ領域に格納する例を説明したが、これに限定されるものではない。
【０１８４】
実施の形態１によれば、ＲＴＯＳのようなセキュアプログラムの保護を図りながら、マイクロプロセッサＣＰＵは、セキュアプログラムを実行するとともに、ユーザーが作成したユーザープログラムＵ−ＡＰを実行することができる。すなわち、予めＲＴＯＳのプログラムを格納したマイクロコンピュータＬＳＩを提供し、ユーザーが、マイクロコンピュータＬＳＩ内のマイクロプロセッサＣＰＵを操作して（動作させて）、ＲＴＯＳの機能を使うようなユーザープログラムＵ−ＡＰを作成するようにしても、セキュアプログラムであるＲＴＯＳのプログラムを保護することができる。その結果、新たな半導体販売モデルにおいても、セキュアプログラム（ＲＴＯＳのプログラム）が盗まれることを防ぐことが可能となり、販売者のメリットが損なわれるのを防ぐことが可能となる。その結果、新たな半導体販売モデルにより、販売者およびユーザーの双方が、メリットを享受できるようになる。
【０１８５】
セキュアプログラムを保護するために、例外割り込みを発生させて、特権モードに移行させることにより、セキュアプログラム領域を形成することが考えられる。しかしながら、この場合には、ノンセキュアプログラム領域に、ハッキングプログラムを展開し、ノイズ等を与え、暴走させることによって特権モードへ移行させることが可能であり、ノイズを利用したハッキングに対して、保護が弱いことが考えられる。
【０１８６】
これに対して、実施の形態１におけるメモリプロテクションユニット２０４は、マイクロプロセッサＣＰＵのＰＣアドレスを監視して、マイクロプロセッサＣＰＵによるセキュアデータへのアクセスを制御している。そのため、ノイズを利用したハッキングに対して、保護が弱くなるのを防ぐことが可能である。また、ノンセキュアプログラム領域に、ハッキングプログラムを展開し、ハッキングプログラムからセキュアプログラムへの分岐によって行うアタックに対しても、セキュアプログラム領域を分岐許可領域ＢＡＡと分岐禁止領域ＢＰＡに分けることにより、保護が弱くなるのを抑制している。
【０１８７】
その結果、予めＲＴＯＳのプログラムを書き込んだマイクロコンピュータＬＳＩを提供し、マイクロコンピュータを購入したユーザーが、ＲＴＯＳの機能を利用するようなプログラムを作成するようにした場合でも、予め書き込んだセキュアプログラムが盗まれるのを防ぐことが可能となる。
【０１８８】
（実施の形態２）
図１２は、実施の形態２に係わるフラッシュメモリＦＲＭに格納されるデータの配置を模式的に示した配置図である。
【０１８９】
実施の形態２に係わるフラッシュメモリＦＲＭは、複数の領域に分けられている。図１２には、フラッシュメモリＦＲＭを構成する複数の領域のうち、ノンセキュアプログラム領域、セキュアプログラム領域および保護情報領域が例示されている。図１２において、ノンセキュアプログラム領域は、符号１２００で示され、セキュアプログラム領域は、符号１２０１で示され、保護情報領域は、符号１２０２で示されている。
【０１９０】
この実施の形態２において、セキュアプログラム領域１２０１には、セキュリティが担保されるべきセキュアプログラムが格納され、ノンセキュアプログラム領域１２００には、ノンセキュアプログラムが格納される。保護情報領域１２０２には、セキュアプログラム領域１２０１を保護する情報が格納される。
【０１９１】
新たな半導体販売モデルでは、図１で説明したように、販売者ＰＲＤが、マイクロコンピュータＬＳＩを販売する前に、予めＲＴＯＳのようなセキュアプログラムを、マイクロコンピュータＬＳＩ内のフラッシュメモリＦＲＭに書き込む。販売者ＰＲＤは、ＲＴＯＳを書き込んだフラッシュメモリＦＲＭの領域を、セキュアプログラム領域１２０１として設定する。このようにして、セキュアプログラム領域１２０１に、ＲＴＯＳのようなセキュアプログラムが書き込まれたフラッシュメモリＦＲＭを備えたマイクロコンピュータＬＳＩが、販売者ＰＲＤから販売される。
【０１９２】
販売者ＰＲＤから、マイクロコンピュータＬＳＩを購入したユーザーＵＳＲは、ＲＴＯＳを利用して動作するユーザープログラムＵ−ＡＰを作成し、フラッシュメモリＦＲＭのノンセキュアプログラム領域１２００へ書き込む。フラッシュメモリＦＲＭにユーザープログラムＵ−ＡＰを書き込む際に、予め書き込んでおいたセキュアプログラム（ＲＴＯＳ）に書き込みが行われてしまうと、セキュリティホールをセキュアプログラムに作り込むことが可能となってしまう。これを防ぐために、販売者ＰＲＤは、保護情報領域１２０２に、セキュアプログラムアドレス領域１２０３を設け、セキュアプログラムアドレス領域１２０３に、例えば上記したセキュアアドレス情報３０４、セキュアデータ情報３０５等を、マイクロコンピュータＬＳＩを販売する前に、書き込む。このセキュアアドレス情報３０４（セキュアプログラム上限アドレス３０４−Ｕおよびセキュアプログラム下限アドレス３０４−Ｄ）によって、図３および図７で説明したように、セキュアプログラム領域を指定し、セキュアプログラム領域への書き込みを禁止する。これによって、セキュアプログラムの書き込みが禁止されることになる。
【０１９３】
また、販売後、ノンセキュアプログラム領域１２００に格納されたノンセキュアプログラム（例えばユーザープログラムＵ−ＡＰ）によって、保護情報領域１２０２に対して書き込みが可能になっていると、セキュアプログラムアドレス領域１２０３を書き換えることが可能となり、セキュアプログラム領域１２０１の書き込み禁止を解除して、セキュアプログラムにセキュリティホールを作り込むことが可能となってしまう。そのため、販売者ＰＲＤは、保護情報領域１２０２に保護情報制御領域１２０４を設け、販売後は、保護情報領域１２０２に格納されている保護情報を書き換えることができないようにする保護情報１２０５を、保護情報制御領域１２０４へ、販売前に書き込む。これにより、保護情報領域１２０２への保護情報の書き込みが禁止される。
【０１９４】
このようにして、販売後は、ノンセキュアプログラム領域１２００に格納されたノンセキュアプログラムによって、セキュアプログラムの書き換えが禁止されるようにすることができる。しかしながら、販売後に、セキュアプログラムに、バグ等の不具合が発見された場合、セキュアプログラムの書き換えが禁止されているため、セキュアプログラムの更新が困難となり、不具合の対策が困難となってしまう。一方、販売後に、セキュアプログラムの更新が可能となるようにしておくと、予め書き込んでおいたセキュアプログラムにセキュリティホールが作り込まれてしまうことが危惧される。
【０１９５】
この実施の形態２においては、セキュアプログラム領域１２０１に格納したセキュアプログラムからは、保護情報領域１２０２の書き換え禁止を解除することができるようにされる。この場合、ノンセキュアプログラム領域１２００に格納したノンセキュアプログラムによっては、保護情報領域１２０２の書き換え禁止を解除することができないようにされる。
【０１９６】
図１３は、実施の形態２に係わるマイクロコンピュータＬＳＩの構成を示すブロック図である。同図には、図２で示したマイクロコンピュータＬＳＩの構成のうち、マイクロプロセッサＣＰＵ、フラッシュメモリＦＲＭ、フラッシュメモリ書き換え回路２０２およびメモリプロテクションユニット２０４のみが示されている。また、説明において必要となるフラッシュメモリ書き換え回路２０２の構成が、図１３では詳しく示されている。
【０１９７】
フラッシュメモリ書き換え回路２０２は、フラッシュメモリ書き換えアドレス設定レジスタ１３００、フラッシュメモリ書き換え開始レジスタ１３０１、フラッシュメモリ書き換え制御回路１３０４および不正アクセス検出回路１３０７を備えている。フラッシュメモリ書き換えアドレス設定レジスタ１３００およびフラッシュメモリ書き換え開始レジスタ１３０１は、バス２０５を介してマイクロプロセッサＣＰＵに接続されている。
【０１９８】
フラッシュメモリ書き換えアドレス設定レジスタ１３００には、フラッシュメモリＦＲＭを書き換えるとき、フラッシュメモリＦＲＭにおいて、書き換える領域を指定するアドレスが、バス２０５を介してマイクロプロセッサＣＰＵによって設定される。フラッシュメモリ書き換えアドレス設定レジスタ１３００は、設定されたアドレスを、書き換えアドレス１３０２として、フラッシュメモリ書き換え制御回路１３０４へ供給する。また、フラッシュメモリ書き換えアドレス設定レジスタ１３００は、設定されたアドレスが、フラッシュメモリＦＲＭの領域１２００〜１２０２（図１２）のうち、保護情報領域１２０２を指定しているか否かを判定し、保護情報領域１２０２を指定しているとき、保護情報選択信号１３０５を形成して、不正アクセス検出回路１３０７へ供給する。
【０１９９】
フラッシュメモリ書き換え開始レジスタ１３０１は、マイクロプロセッサＣＰＵから、フラッシュメモリＦＲＭを書き換えるタイミングを示す開始情報が、バス２０５を介して設定される。フラッシュメモリ書き換え開始レジスタ１３０１は、設定された開始情報に基づいて、フラッシュメモリ書き換え開始信号１３０３を形成し、不正アクセス検出回路１３０７へ供給する。
【０２００】
フラッシュメモリ書き換え制御回路１３０４は、書き換えアドレス１３０２、フラッシュメモリ書き換え開始信号１３０３および不正アクセス検出回路１３０７からの不正アクセス検出信号１３０８を受け、不正アクセス検出信号１３０８が、不正アクセスであることを示していないとき、書き換えアドレス１３０２によって指定されるフラッシュメモリＦＲＭの領域に対して書き換えを行う。このときの書き換えの開始タイミングが、フラッシュメモリ書き換え開始信号１３０３によって定められる。なお、図１３では、図面が複雑になるのを避けるために、フラッシュメモリＦＲＭに書き込まれるデータを供給する信号配線は省略されているが、書き込まれるデータは、バス２０５を介してマイクロプロセッサＣＰＵからフラッシュメモリＦＲＭへ供給される。
【０２０１】
不正アクセス検出回路１３０７は、後で図１４を用いて一例を示すが、メモリプロテクションユニット２０４からのノンセキュアプログラム選択信号１３０６と、上記した保護情報選択信号１３０５と、上記したフラッシュメモリ書き換え開始信号１３０３を受け、不正アクセス検出信号１３０８を形成して、フラッシュメモリ書き換え制御回路１３０４へ供給する。
【０２０２】
メモリプロテクションユニット２０４は、図３および図７（Ａ）に示した構成を備えており、図３および図７（Ａ）のフェッチアドレス比較回路３０１において形成されたノンセキュアプログラム領域信号７０９が、上記したノンセキュアプログラム選択信号１３０６として、不正アクセス検出回路１３０７へ供給される。この実施の形態２において、メモリプロテクションユニット２０４は、マイクロプロセッサＣＰＵからのアドレス（ＰＣアドレス３０６）が、セキュアプログラム領域を指定しているのかノンセキュアプログラム領域を指定しているのかを検出するために使われている。
【０２０３】
図７（Ａ）において説明したように、フェッチアドレス比較回路３０１は、フラッシュメモリＦＲＭからのセキュアアドレス情報３０４（セキュアプログラム上限アドレス３０４−Ｕ、セキュアプログラム下限アドレス３０４−Ｄ）と、マイクロプロセッサＣＰＵからのＰＣアドレス３０６を受けている。ＰＣアドレス３０６が、セキュアアドレス情報によって定められているセキュアプログラム領域内を指定するとき、セキュアプログラム領域信号７０７（図７（Ａ））は、ハイレベルとなり、ノンセキュアプログラム領域信号７０９は、ロウレベルとなる。一方、ＰＣアドレス３０６が、セキュアプログラム領域ではなく、ノンセキュアプログラム領域を指定しているとき、セキュアプログラム領域信号７０７はロウレベルとなり、ノンセキュアプログラム領域信号７０９は、ハイレベルとなる。そのため、ノンセキュアプログラム領域に配置されているノンセキュアプログラムが実行されているとき、ノンセキュアプログラム領域信号７０９、すなわちノンセキュアプログラム選択信号１３０６はハイレベルとなる。
【０２０４】
不正アクセス検出回路１３０７は、ノンセキュアプログラム選択信号１３０６が、ハイレベルかロウレベルかによって、ノンセキュアプログラムが実行されているのか、セキュアプログラムが実行されているのかを判定する。また、不正アクセス検出回路１３０７は、保護情報選択信号１３０５によって、フラッシュメモリＦＲＭ内の保護情報領域１２０２の書き換えが指示されているのか、保護情報領域１２０２以外の領域の書き換えが指示されているのかを判定する。また、不正アクセス検出回路１３０７は、フラッシュメモリ書き換え開始信号１３０３によって、フラッシュメモリＦＲＭの書き換えタイミングを判定する。言い換えるならば、不正アクセス検出回路１３０７は、マイクロプロセッサＣＰＵからの開始情報に基づいたフラッシュメモリ書き換え開始信号１３０３によって示されるタイミングで、不正アクセスか否かの検出を行う。
【０２０５】
不正アクセス検出回路１３０７は、ノンセキュアプログラム選択信号１３０６が、ノンセキュアプログラムが実行されていることを表し、保護情報選択信号１３０５が、保護情報領域１２０２を表しているときに、不正アクセス検出信号１３０８を形成し、フラッシュメモリ書き換え制御回路１３０４に対して、フラッシュメモリＦＲＭへの書き換えを禁止する。不正アクセス検出信号１３０８は、フラッシュメモリ書き換え開始信号１３０３によって示されるタイミングで形成される。
【０２０６】
これにより、ノンセキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２が書き換えられるのを禁止することが可能となり、セキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２が書き換えられることが許可されることになる。
【０２０７】
図１４は、実施の形態２に係わる不正アクセス検出回路１３０７の構成を示すブロック図である。同図において、１４００は、３入力のアンド回路であり、１４０１は、フリップフロップ回路である。上記した保護情報選択信号１３０５、フラッシュメモリ書き換え開始信号１３０３およびノンセキュアプログラム選択信号１３０６が、３入力のアンド回路１４００に入力される。３入力のアンド回路１４００の出力は、フリップフロップ回路１４０１のセット端子（ｓｅｔ）に供給される。フリップフロップ回路１４０１のクリア端子（ｃｌｅａｒ）には、マイクロコンピュータＬＳＩのリセット信号ＲＳＴが供給される。
【０２０８】
フリップフロップ回路１４０１は、特に制限されないが、図７で説明したフリップフロップ回路７０３と同様な構成を有している。すなわち、フリップフロップ回路１４０１（保持回路）は、セット端子（ｓｅｔ）にハイレベルが供給されることにより、出力端子（Ｑ）はハイレベルとなる。出力端子（Ｑ）がハイレベルになると、セット端子（ｓｅｔ）にロウレベルが供給されても、クリア端子（ｃｌｅａｒ）にハイレベルが供給されるまで、出力端子（Ｑ）はハイレベルに維持される。
【０２０９】
リセット信号ＲＳＴは、マイクロコンピュータＬＳＩの外部から、マイクロコンピュータＬＳＩ内の回路ブロックに供給される。例えば、リセット信号ＲＳＴは、図１３に示すように、マイクロプロセッサＣＰＵにも供給されている。特に制限されないが、この実施の形態２においては、リセット信号ＲＳＴがハイレベルになることにより、マイクロコンピュータＬＳＩがリセット状態にされる。
【０２１０】
図１３に示したフラッシュメモリ書き換えアドレス設定レジスタ１３００は、設定されたアドレスが、フラッシュメモリＦＲＭ内の保護情報領域１２０２を指定しているとき、ハイレベルの保護情報選択信号１３０５を形成する。これに対して、設定されたアドレスが、フラッシュメモリＦＲＭ内の保護情報領域１２０２以外の領域（例えば、ノンセキュアプログラム領域１２００）を指定している場合、フラッシュメモリ書き換えアドレス設定レジスタ１３００は、ロウレベルの保護情報選択信号１３０５を形成する。また、図１３に示したフラッシュメモリ書き換え開始レジスタ１３０１は、フラッシュメモリＦＲＭを書き換えるタイミングで、フラッシュメモリ書き換え開始信号１３０３をハイレベルにする。ノンセキュアプログラム選択信号１３０６は、ノンセキュアプログラムが実行されているとき、ハイレベルとなり、セキュアプログラムが実行されているとき、ロウレベルとなる。
【０２１１】
そのため、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換えるとき、ノンセキュアプログラムが実行されていれば、３入力のアンド回路１４００の出力信号は、ハイレベルとなる。言い換えるならば、ノンセキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換えようとすると、３入力のアンド回路１４００の出力信号はハイレベルとなる。３入力のアンド回路１４００からのハイレベルの出力信号が、フリップフロップ回路１４０１のセット端子（ｓｅｔ）に供給されるため、フリップフロップ回路１４０１の出力端子（Ｑ）の電圧はハイレベルとなり、不正アクセス検出信号１３０８は、ハイレベルとなる。
【０２１２】
フラッシュメモリ書き換え制御回路１３０４は、不正アクセス検出信号１３０８がハイレベルとなることにより、供給されている書き換えアドレス１３０２によって指定されている保護情報領域１２０２への書き込みを禁止する。フリップフロップ回路１４０１は、リセット信号ＲＳＴがハイレベルとなるまで、出力端子（Ｑ）をハイレベルに維持する。そのため、マイクロコンピュータＬＳＩをリセットするまで、フラッシュメモリ書き換え制御回路１３０４は、保護情報領域１２０２への書き込みを禁止することになる。これにより、ハッキングの手段で、繰り返しアタックされても、フラッシュメモリＦＲＭの保護情報領域１２０２が書き換えられるのを防ぐことが可能となる。
【０２１３】
一方、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換えるとき、セキュアプログラムが実行されていれば、３入力のアンド回路１４００の出力信号は、ロウレベルとなる。言い換えるならば、セキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換えようとすると、３入力のアンド回路１４００の出力信号はロウレベルとなる。３入力のアンド回路１４００の出力信号がロウレベルとなるため、フリップフロップ回路１４０１の出力端子（Ｑ）の電圧は、ロウレベルとなり、不正アクセス検出信号１３０８もロウレベルとなる。
【０２１４】
フラッシュメモリ書き換え制御回路１３０４は、不正アクセス検出信号１３０８がロウレベルとなることにより、供給されている書き換えアドレス１３０２によって指定されている保護情報領域１２０２への書き込みを許可する。すなわち、セキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２をアクセスする場合には、許可され、保護情報領域１２０２を書き換えることが可能となる。
【０２１５】
実施の形態２によれば、ノンセキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換えようとすると、不正アクセス検出回路１３０７から不正アクセス検出信号１３０８が出力され、フラッシュメモリ書き換え制御回路１３０４が、フラッシュメモリＦＲＭの保護情報領域１２０２への書き込みを禁止する。この書き込みの禁止は、マイクロコンピュータＬＳＩが、リセットされるまで継続し、解除することができない。これにより、フラッシュメモリＦＲＭの保護情報領域１２０２が不正に書き換えられるのを防ぐことが可能となる。保護情報領域１２０２が不正に書き換えられるのを防ぐことが可能なため、ノンセキュアプログラムによって、セキュアプログラムにセキュリティホールを作り込むことを防ぐことができ、セキュアプログラムを保護することが可能となる。
【０２１６】
また、セキュアプログラムにおいて、フラッシュメモリＦＲＭ内の保護情報領域１２０２を書き換える場合には、フラッシュメモリ書き換え制御回路１３０４が、フラッシュメモリＦＲＭの保護情報領域１２０２への書き込みを許可する。そのため、フラッシュメモリＦＲＭに予め書き込んでおいたＲＴＯＳのプログラム（セキュアプログラム）に不具合が発見された場合、セキュアプログラムにおいて、セキュアプログラム領域１２０１が書き換え可能となるように、保護情報領域１２０２内の情報を書き換える。その後、書き換え可能となったセキュアプログラム領域１２０１に、不具合を修正したＲＴＯＳ（セキュアプログラム）を書き込む。修正したＲＴＯＳを書き込んだ後、セキュアプログラムにおいて、セキュアプログラム領域１２０１が書き込み禁止となるように、保護情報領域１２０２内の情報を書き換える。これにより、セキュアプログラムに不具合が発見された場合でも、セキュアプログラムの修正を行うことが可能となる。
【０２１７】
例えば、販売者ＰＲＤは、ネットワークＮＴＷ（図１）を介して、不具合を修正したＲＴＯＳと、フラッシュメモリＦＲＭを書き換えるセキュアプログラムを配信する。配信されたこれらのセキュアプログラムが、マイクロコンピュータＬＳＩにダウンロードされ、実行されるようにする。これにより、予めフラッシュメモリＦＲＭに書き込んで提供したマイクロコンピュータＬＳＩのＲＴＯＳを修正することが可能となる。
【０２１８】
また、実施の形態１で説明したセキュアアドレス情報３０４は、販売者ＰＲＤが販売する前に、保護情報領域１２０２に書き込むが、実施の形態２によれば、ユーザーＵＳＲが購入した後で、書き換えることが可能となる。これにより、後で、例えばセキュアプログラム領域のサイズ等を、必要に応じて変更することが可能となる。
【０２１９】
（実施の形態３）
図１５は、実施の形態３に係わるマイクロコンピュータの構成を示すブロック図である。図１５に示したマイクロコンピュータＬＳＩの構成は、図２に示したマイクロコンピュータと類似しているので、主に相違点を説明する。なお、図１５にも、図２と同様に、マイクロコンピュータＬＳＩ以外に、サーバＰ−ＳＶおよびネットワークＮＴＷが示されている。
【０２２０】
新たな半導体販売モデルでは、図１で説明したように、販売者ＰＲＤが、ＲＴＯＳのようなセキュアプログラムを、予めフラッシュメモリＦＲＭへ書き込む。ＲＴＯＳが書き込まれたフラッシュメモリＦＲＭと、マイクロプロセッサＣＰＵ等を備えたマイクロコンピュータＬＳＩが、販売者ＰＲＤから販売される。ユーザーＵＳＲは、購入したマイクロコンピュータＬＳＩに、ユーザーＵＳＲが作成したユーザープログラムＵ−ＡＰ等をフラッシュメモリＦＲＭに書き込む。
【０２２１】
ユーザーＵＳＲが、購入したマイクロコンピュータＬＳＩのフラッシュメモリＦＲＭに格納されたＲＴＯＳのようなセキュアプログラムを、バージョンアップするときあるいは不都合を修正するとき等では、サーバＰ−ＳＶに、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳが、格納される。この場合、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳは、暗号化されて、サーバＰ−ＳＶに格納されている。そのため、ユーザーＵＳＲが、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳをダウンロードするために、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳが、ネットワークＮＴＷを通過するときに、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳが、第３者によって盗まれても、バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳを動作させることは困難である。
【０２２２】
ネットワークＮＴＷを経由したプログラム（バージョンアップされたＲＴＯＳあるいは修正されたＲＴＯＳ）は、通信機能回路２００によって、受信され、マイクロプロセッサＣＰＵによって、バス２０５を介して暗号復号機能回路に伝達され、暗号復号機能回路によって復号される。暗号復号機能回路によって復号され、暗号化されていないプログラムは、図２では、マイクロプロセッサＣＰＵによって揮発性メモリ２０３に格納されていた。
【０２２３】
新たな半導体販売モデルでは、マイクロプロセッサＣＰＵを操作するノンセキュアプログラムをユーザーＵＳＲが作成する。すなわち、ユーザーＵＳＲは、ノンセキュアプログラムではあるが、マイクロプロセッサＣＰＵを任意に操作するプログラムを作成することができる。そのため、マイクロプロセッサＣＰＵを操作するハッキングプログラムを、ユーザーＵＳＲは作成することが可能となる。実施の形態１で説明したメモリプロテクションユニット２０４によって、揮発性メモリ２０３、フラッシュメモリＦＲＭに格納されているセキュアデータの保護等は図れるが、マイクロプロセッサＣＰＵ、揮発性メモリ２０３はハッキングに対して弱く、セキュリティホールを発見して、マイクロプロセッサＣＰＵ、揮発性メモリ２０３がハッキングされる危険性が存在する。
【０２２４】
この実施の形態３においては、暗号復号機能回路２０１−Ａ（復号回路）は、専用の信号配線１５００によってフラッシュメモリ書き換え回路２０２−Ａに接続され、フラッシュメモリ書き換え回路２０２−Ａは、専用の信号配線１５０１によってフラッシュメモリＦＲＭに接続されている。
【０２２５】
暗号復号機能回路２０１−Ａは、暗号復号機能回路２０１と異なり、復号化した暗号化されていないプログラムを専用の信号配線１５００を介して、フラッシュメモリ書き換え回路２０２−Ａへ伝達する。フラッシュメモリ書き換え回路２０２−Ａは、フラッシュメモリ書き換え回路２０２と異なり、伝達された暗号化されていないプログラムを、専用の信号配線１５０１を介してフラッシュメモリＦＲＭへ伝達し、フラッシュメモリＦＲＭに、プログラムを書き込む。
【０２２６】
これにより、マイクロプロセッサＣＰＵによって、通信機能回路２００（通信回路）から暗号復号機能回路２０１−Ａへ転送された暗号化されたプログラムは、暗号復号機能回路２０１−Ａによって復号化され、復号化された暗号化されていないプログラム（データ）は、マイクロプロセッサＣＰＵによってアクセスされずに、信号配線１５００を介して直接、フラッシュメモリ書き換え回路２０２−Ａに供給されるようになる。また、フラッシュメモリ書き換え回路２０２−Ａに供給された暗号化されていないプログラム（データ）も、マイクロプロセッサＣＰＵによってアクセスされず、信号配線１５０１によって、直接フラッシュメモリＦＲＭへ供給されることになる。
【０２２７】
すなわち、暗号化されていないプログラム（データ）が、マイクロプロセッサＣＰＵおよび揮発性メモリ２０３を仲介することなく、フラッシュメモリＦＲＭに書き込まれるようにすることが可能となる。
【０２２８】
マイクロコンピュータＬＳＩの外部からのハッキングを考えた場合、マイクロコンピュータＬＳＩの外部からマイクロプロセッサＣＰＵを、任意に操作することは難しい。そのため、例えばマイクロプロセッサＣＰＵを、暗号化されていないプログラム（データ）が経由しても、プログラムをハッキングすることは難しい。ところが、新たな半導体販売モデルでは、マイクロプロセッサＣＰＵを、任意に操作することが可能なプログラムをユーザーが作成する。そのため、例えばマイクロプロセッサＣＰＵを、暗号化されていないプログラムが経由すると、暗号化されていないプログラムが盗まれると言うことが危惧される。この実施の形態３においては、暗号化されていないプログラムは、マイクロプロセッサＣＰＵおよび揮発性メモリ２０３を経由せずに、直接、暗号復号機能回路２０１−Ａからフラッシュメモリ書き換え回路２０２−Ａを介してフラッシュメモリＦＲＭへ供給され、書き込まれる。これにより、プログラムをハッキングから保護することが可能となる。
【０２２９】
実施の形態３においては、ハッキングプログラムによって、マイクロプロセッサＣＰＵが任意に操作可能となっても、ダウンロードした暗号化されていないプログラム（データ）が、マイクロプロセッサＣＰＵによってアクセスされないため、プログラムが盗まれるのを防ぐことが可能となる。
【０２３０】
（実施の形態４）
図１６は、実施の形態４に係わるマイクロプロセッサＣＰＵの構成を示すブロック図である。図１６は、実施の形態１〜３において説明したマイクロプロセッサＣＰＵの構成を模式的に示している。マイクロプロセッサＣＰＵは、種々の回路ブロックを有しているが、図１６には、この実施の形態４の説明に係わる回路ブロックのみが示されている。
【０２３１】
同図において、１６００は制御ユニット、１６０１は汎用レジスタ群、１６０２は第１スタックポインタ、１６０３は第２スタックポインタ、１６０４はプログラムカウンタ、１６０５は演算器を示している。
【０２３２】
汎用レジスタ群１６０１は、複数の汎用レジスタＲ０〜Ｒｎを備えている。それぞれの汎用レジスタＲ０〜Ｒｎは、マイクロプロセッサＬＳＩが処理を実行するとき、演算データまたは／およびアドレスを格納する。汎用レジスタＲ０〜Ｒｎに格納されているアドレスは、マイクロプロセッサＣＰＵが、処理を実行するとき、例えばフラッシュメモリＦＲＭまたは／および揮発性メモリ２０３のアドレスとして用いられる。
【０２３３】
制御ユニット１６００は、フラッシュメモリＦＲＭに格納されているセキュアプログラムおよびノンセキュアプログラムに従って、汎用レジスタ群１６０１内の汎用レジスタ、演算器１６０５、第１スタックポインタ１６０２、第２スタックポインタ１６０３およびプログラムカウンタ１６０４を制御する。制御ユニット１６００が、これらの回路ブロックを制御することにより、セキュアプログラムおよびノンセキュアプログラムに従った処理が、マイクロプロセッサＣＰＵによって実現される。
【０２３４】
マイクロプロセッサＣＰＵは、セキュアプログラムとノンセキュアプログラムの両方を、時分割的に実行する。すなわち、１個のマイクロプロセッサＣＰＵによって、ＲＴＯＳのようなセキュアプログラムとユーザープログラムＵ−ＡＰのようなノンセキュアプログラムの両方が、時分割的に実行される。
【０２３５】
プログラムカウンタ１６０４は、実施の形態１〜３において説明したＰＣアドレス３０６を形成する。すなわち、マイクロプロセッサＣＰＵが、セキュアプログラムを実行する際には、プログラムカウンタ１６０４が、セキュアプログラムを構成する命令を指定するＰＣアドレス３０６を形成する。同様に、ノンセキュアプログラムを実行する際には、プログラムカウンタ１６０４が、ノンセキュアプログラムを構成する命令を指定するＰＣアドレス３０６を形成する。特に制限されないが、第１スタックポインタ１６０２は、マイクロプロセッサＣＰＵが、ノンセキュアプログラムを実行するとき、スタック領域を指定するアドレスを出力する。また、第２スタックポインタ１６０３は、マイクロプロセッサＣＰＵが、セキュアプログラムを実行するとき、スタック領域を指定するアドレスを出力する。
【０２３６】
演算器１６０５は、例えば汎用レジスタＲ０〜Ｒｎに格納されているデータ間で演算を行い、演算結果を演算データあるいはアドレスとして、汎用レジスタに格納する。
【０２３７】
上記したように、マイクロプロセッサＣＰＵは、セキュアプログラムとノンセキュアプログラムを時分割的に実行する。そのため、セキュアプログラムを実行したときに発生したセキュアデータが、ノンセキュアプログラムを実行する際に、読み取られないように対策を行うことが必要である。
【０２３８】
マイクロプロセッサＣＰＵが動作するとき、第１スタックポインタ１６０２、第２スタックポインタ１６０３およびプログラムカウンタ１６０４は、フラッシュメモリＦＲＭまたは／および揮発性メモリ２０３等のアドレスを指定するが、セキュアデータは格納しない。また、第１スタックポインタ１６０２、第２スタックポインタ１６０３およびプログラムカウンタ１６０４によって指定されるメモリ（フラッシュメモリＦＲＭおよび揮発性メモリ２０３）については、メモリプロテクションユニット２０４によって保護することが可能である。例えば、実施の形態１で述べたように、メモリをセキュアプログラム領域とノンセキュアプログラム領域に分け、ノンセキュアプログラムがセキュアプログラム領域をアクセスするのを制限することにより、保護することが可能である。
【０２３９】
一方、汎用レジスタＲ０〜Ｒｎは、演算データまたは／およびアドレスを格納する。例えば、セキュアプログラムを実行したとき、セキュアデータである演算データが汎用レジスタＲ０〜Ｒｎに格納される。この汎用レジスタＲ０〜Ｒｎに格納されたデータが、ノンセキュアプログラムによって読み出されると、セキュアデータが盗まれることになる。次に、汎用レジスタＲ０〜Ｒｎに格納されているデータが盗まれる一例を、図１７を用いて説明する。
【０２４０】
図１７は、セキュアプログラムを実行しているときに、ハードウェア割り込みが発生した場合のマイクロプロセッサＣＰＵの動作を示すフローチャート図である。図１７において、ＨＤＷは、マイクロプロセッサＣＰＵが、ハードウェアで実施する処理を示しており、ＮＳＰは、マイクロプロセッサＣＰＵが、ノンセキュアプログラムを実行することにより行われる処理を示している。図１７は、ハードウェア割り込みが発生した場合、ノンセキュアプログラムによって規定された割り込み処理へ分岐する例を示している。
【０２４１】
先ず、ステップＳＨ００で、マイクロプロセッサＣＰＵがセキュアプログラムを開始する（Ｓｔａｒｔ）。次に、ステップＳＨ０１で、ハードウェア割り込みが発生したとする（割り込み発生）。この割り込み発生に応答して、ステップＳＨ０２において、割り込みフラグがセットされる（割り込みフラグセット）。
【０２４２】
次に、ステップＳＨ０３において、割り込み条件が判定され（割り込み条件判定）、ステップＳＨ０４において、割り込みフラグがクリアされる（割り込みフラグクリア）。その後、割り込み処理を行った後で、汎用レジスタＲ０〜Ｒｎの値を戻すことが可能となるように、ステップＳＨ０５において、汎用レジスタＲ０〜Ｒｎの値を、例えば、第２スタックポインタ１６０３によって指定されるスタック領域に退避させる（汎用レジスタの値を退避）。汎用レジスタＲ０〜Ｒｎの値を退避した後、ステップＳＨ０６において、割り込み処理へ分岐する（割り込み分岐）。
【０２４３】
割り込み分岐によって、次にノンセキュアプログラムへ分岐する。ノンセキュアプログラムによって、処理の内容が規定されたところの割り込み処理を、マイクロプロセッサＣＰＵが、ステップＳＮ００で実行し（割り込み処理）、ステップＳＮ０１で、マイクロプロセッサＣＰＵは、リターン命令（ＲＥＴ）を実行する。
【０２４４】
リターン命令（ＲＥＴ）が実行されることにより、マイクロプロセッサＣＰＵは、ステップＳＨ０７を実行する。ステップＳＨ０７では、第２スタックポインタ１６０３によって指定されているスタック領域から、ステップＳＨ０５で退避した汎用レジスタＲ０〜Ｒｎの値か、汎用レジスタＲ０〜Ｒｎへ戻される（汎用レジスタの値を復帰）。ステップＳＨ０８で、セキュアプログラムの実行が終了する（Ｅｎｄ）。
【０２４５】
このように、割り込みが発生した場合、セキュアプログラムを実行していたときの汎用レジスタＲ０〜Ｒｎの値は、退避されるが、汎用レジスタＲ０〜Ｒｎは、それぞれの値を保持した状態で、ノンセキュアプログラムによって規定された割り込み処理が、ステップＳＮ００において行われることになる。そのため、汎用レジスタに格納されているセキュアデータを、割り込み処理（ステップＳＮ００）で読み出すことが可能となってしまう。例えば、ノンセキュアプログラムとしてハッキングプログラムを作成し、割り込みを繰り返して発生することにより、汎用レジスタＲ０〜Ｒｎに格納されているセキュアデータを盗むことが可能となってしまう。
【０２４６】
実施の形態４においては、汎用レジスタＲ０〜Ｒｎに格納されているデータを保護することが可能なマイクロプロセッサＣＰＵを備えたマイクロコンピュータＬＳＩが提供される。実施の形態４においては、汎用レジスタＲ０〜Ｒｎに格納されているデータの保護が、セキュアプログラムによる汎用レジスタクリア処理と、汎用レジスタクリア制御回路によって達成される。次に、セキュアプログラムによる汎用レジスタクリア処理と、汎用レ
ジスタクリア制御回路を説明する。
【０２４７】
＜セキュアプログラムによる汎用レジスタクリア＞
図１８は、実施の形態４に係わるマイクロプロセッサＣＰＵの動作を示すフローチャート図である。図１８は、図１７と同様に、ＲＴＯＳのようなセキュアプログラムを実行しているときに、ハードウェア割り込みが発生した場合のマイクロプロセッサＣＰＵの動作を示すフローチャート図である。図１８において、ＨＤＷは、マイクロプロセッサＣＰＵのハードウェアで実施する処理を示しており、ＮＳＰは、ノンセキュアプログラムを実行することにより行われる処理を示しており、ＳＳＰは、セキュアプログラムを実行することにより行われる処理を示している。図１８においても、ハードウェア割り込みが発生した場合、ノンセキュアプログラムによって規定された割り込み処理へ分岐する例が示されている。
【０２４８】
ハードウェアで行われる処理ＨＤＷは、ステップＳＨ００、ＳＨ０１、ＳＨ０２およびＳＨ０８によって達成される。また、セキュアプログラムを実行することにより行われる処理ＳＳＰは、ステップＳＳ００〜ＳＳ０９によって達成され、ノンセキュアプログラムを実行することにより行われる処理ＮＳＰは、ステップＳＮ００およびＳＮ０１によって達成される。
【０２４９】
ステップＳＨ００で、ＲＴＯＳのようなセキュアプログラムが動作を開始する（Ｓｔａｒｔ）。次に、ステップＳＨ０１で、割り込みが発生したものとする（割り込み発生）。この割り込みが発生することにより、ステップＳＨ０２において、割り込みフラグが、例えば１にセットされる（割り込みフラグセット）。
【０２５０】
一方、動作を開始したセキュアプログラム（ＲＴＯＳ）においては、上記した割り込みフラグのチェック（判定）が、所定の周期で行われる。すなわち、セキュアプログラムを実行することにより行われる処理ＳＳＰにおいて、マイクロプロセッサＣＰＵは、ステップＳ００で、任意のセキュアプログラムを実行する（セキュアプログラム実行）。ステップＳ００で、セキュアプログラムを実行した後、割り込みフラグが１にセットされているか否かの判定を、マイクロプロセッサＣＰＵが、ステップＳＳ０１で行う。割り込みフラグがセットされていなければ、ステップＳＳ００へ戻り、任意のセキュアプログラムが実行される。一方、割り込みフラグが１にセットされている場合には、次にステップＳＳ０２が、マイクロプロセッサＣＰＵによって実行される。これにより、周期的に、割り込みフラグが１にセットされているか否かの判定が行われ、割り込みフラグがセットされていない場合には、任意のセキュアプログラムが繰り返し実行されることになる。
【０２５１】
次に、マイクロプロセッサＣＰＵは、セキュアプログラムを実行することにより、ステップＳＳ０２において、割り込み条件を判定し（割り込み条件判定）し、ステップＳＳ０３において、割り込みフラグをクリアする（割り込みフラグクリア）。
【０２５２】
ステップＳＳ０３において、割り込みフラグがクリアされるため、ハードウェアでの処理ＨＤＷにおいては、図１７で説明したステップＳＨ０３（割り込み条件判定）〜ステップＳＨ０７（汎用レジスタの値の復帰）は行われない。
【０２５３】
ステップＳＳ０３に続いて、ステップＳＳ０４において、マイクロプロセッサＣＰＵは、汎用レジスタＲ０〜Ｒｎの値を、第２スタックポインタ１６０３によって指定されるスタック領域に退避する（汎用レジスタの値を退避）。汎用レジスタＲ０〜Ｒｎの値を退避した後で、マイクロプロセッサＣＰＵは、ステップＳＳ０５を実行する。ステップＳＳ０５では、マイクロプロセッサＣＰＵは、汎用レジスタＲ０〜Ｒｎをクリアする。例えば、所定の値を、汎用レジスタＲ０〜Ｒｎのそれぞれに書き込むことにより、汎用レジスタＲ０〜Ｒｎのそれぞれの値はクリアされることになる。
【０２５４】
汎用レジスタＲ０〜Ｒｎのそれぞれをクリアした後、ステップＳＳ０６において、マイクロプロセッサＣＰＵは、使用するスタックポインタを、第２スタックポインタ１６０３から第１スタックポインタ１６０２へ切り替える（スタックポインタの切り替え）。次に、ステップＳＳ０７において、マイクロプロセッサＣＰＵは、ソフトウェア割り込み命令（ＣＡＬＬ）を実行する。このとき割り込み命令で呼び出すプログラムは、ノンセキュアプログラムである。呼び出されたノンセキュアプログラムで行われる処理ＮＳＰは、図１７で説明した処理ＮＳＰと同じである。処理ＮＳＰで、マイクロプロセッサＣＰＵが行うステップも、図１７で説明したステップＳＮ００、ＳＮ０１と同じであるため、説明は省略する。なお、このノンセキュアプログラムを実行するときには、ステップＳＳ０６でスタックポインタが、第１スタックポインタ１６０２に切り替えられているため、第１スタックポインタ１６０２を用いて、ノンセキュアプログラムが実行されることになる。
【０２５５】
処理ＮＳＰにおいて、マイクロプロセッサＣＰＵが、ステップＳＮ０１を実行することにより、マイクロプロセッサＣＰＵは、セキュアプログラムでの処理を再開する。すなわち、ステップＳＳ０８を次に実行する。ステップＳＳ０８では、使用するスタックポインタを第１スタックポインタ１６０２から第２スタックポインタ１６０３へ切り替える（スタックポインタの切り替え）。ステップＳＳ０９では、切り替えた第２スタックポインタ１６０３によって指定されているスタック領域から、ステップＳＳ０４で退避した汎用レジスタＲ０〜Ｒｎの値を、汎用レジスタＲ０〜Ｒｎへ復帰する（汎用レジスタの値を復帰）。
【０２５６】
ステップＳＳ０９の後は、ステップＳＳ００へ戻る。以降は、割り込みフラグが１にセットされるまで、ステップＳＳ００とＳＳ０１が繰り返し実行され、割り込みフラグが１にセットされたときには、ステップＳＳ０２〜ＳＳ０９およびＳＮ００〜ＳＮ０１が実行されることになる。また、セキュアプログラムを終了した場合は、ステップＳＨ０８が実行される（Ｅｎｄ）。
【０２５７】
これにより、セキュアプログラムを実行している際に、ハードウェア割り込みが発生した場合でも、汎用レジスタＲ０〜Ｒｎに格納されたセキュアデータ（演算データ、アドレス）は、ノンセキュアプログラムを実行する前に、マイクロプロセッサＣＰＵによって、クリアされる。そのため、セキュアデータが盗まれることを防ぐことが可能となる。
【０２５８】
＜汎用レジスタクリア制御回路＞
図１８で説明したセキュアプログラムによる汎用レジスタクリアでは、マイクロプロセッサＣＰＵが、例えば汎用レジスタＲ０〜Ｒｎのそれぞれに、所定の値を書き込むことによって、汎用レジスタＲ０〜Ｒｎのそれぞれをクリアする。
【０２５９】
マイクロプロセッサＣＰＵが実行するセキュアプログラムが、ＲＴＯＳの場合、割り込みに対して行われる処理が、所定の時間内に完了すれば、リアルタイム性を維持することが可能である。そのため、割り込みに対する処理として、所定の時間内に、セキュアプログラムによる複数の汎用レジスタのクリアが完了すれば、リアルタイム性を維持できる。割り込みの発生から、対応する割り込み処理が実行されるまでの応答が、汎用レジスタをクリアする処理により、若干遅れても、リアルタイム性は問題ない。
【０２６０】
しかしながら、マイクロコンピュータＬＳＩで、例えばモータを制御するような用途等では、割り込みが発生してから、短期間のうちに、対応した割り込み処理を実行することが要求される。すなわち、応答時間を短くすることが要求される。この実施の形態４においては、マイクロプロセッサＣＰＵは、汎用レジスタクリア制御回路を備えており、応答時間の短縮化が図られる。
【０２６１】
図１９は、実施の形態４に係わるマイクロプロセッサＣＰＵの構成を示すブロック図である。図１９は、図１６に示したマイクロプロセッサと類似しているので、相違点を主に説明する。図１９に示したマイクロプロセッサＣＰＵにおいては、汎用レジスタクリア制御回路１９００が、図１６に示したマイクロプロセッサに追加されている。汎用レジスタクリア制御回路１９００は、制御ユニット１６００と汎用レジスタ群１６０１に接続されており、制御ユニット１６００からの指示に従って、汎用レジスタ群１６０１に含まれている汎用レジスタＲ０〜Ｒｎをクリアする。
【０２６２】
この実施の形態４に係わるマイクロプロセッサＣＰＵは、マスク可能な割り込み（第１割り込み）とマスク不可能な割り込み（第１割り込みとは異なる第２割り込み）を受け付ける機能を有している。マスク不可能な割り込みを受け付けた場合、制御ユニット１６００は、汎用レジスタクリア制御回路１９００に対して、汎用レジスタＲ０〜Ｒｎをクリアする指示を出力する。
【０２６３】
図２０は、図１９に示したマイクロプロセッサＣＰＵの動作を示すフローチャート図である。図２０を用いて、図１９に示したマイクロプロセッサＣＰＵの動作を説明する。図２０に示したフローチャートは、図１８に示したフローチャートと類似しているので、ここでは主に相違する部分を説明する。図２０においても、ＨＤＷは、マイクロプロセッサＣＰＵのハードウェアで実行する処理を示しており、ＮＳＰは、ノンセキュアプログラムを実行することにより行われる処理を示しており、ＳＳＰは、セキュアプログラムを実行することにより行われる処理を示している。
【０２６４】
ハードウェアで行われる処理ＨＤＷは、ステップＳＨ００〜ＳＨ０８およびＳＨ１０〜ＳＨ１３によって達成される。また、セキュアプログラムを実行することにより行われる処理ＳＳＰは、ステップＳＳ００〜ＳＳ０９によって達成され、ノンセキュアプログラムを実行することにより行われる処理ＮＳＰは、ステップＳＮ０２〜ＳＮ０５によって達成される。
【０２６５】
セキュアプログラムを実行することにより行われる処理ＳＳＰ（ステップＳＳ００〜ＳＳ０９）は、図１８で説明した処理ＳＳＰ（ステップＳＳ００〜ＳＳ０９）と同じであるため、詳しい説明は省略する。また、図２０において、ノンセキュアプログラムを実行することにより行われる処理ＮＳＰのうち、ステップＳＮ０２は、低速割り込み処理と記載しているが、図１８で説明したステップＳＮ００と同じであり、ステップＳＮ０３は、図１８で説明したステップＳＮ０１と同じである。そのため、ステップＳＮ０２およびＳＮ０３についても、説明は省略する。
【０２６６】
ステップＳＨ００で、ＲＴＯＳ（セキュアプログラム）が動作を開始する（Ｓｔａｒｔ）。次に、ステップＳＨ０１で、割り込みが発生したものとする（割り込み発生）。次に、ステップＳＨ１０において、ステップＳＨ０１で受け付けた割り込みが、高速割り込みか否かの判定を行う（高速割り込み？）。この実施の形態４においては、マスク不可能な割り込みが、高速な割り込みに該当する。すなわち、ステップＳＨ０１において、マスク不可能な割り込みを受け付けた場合、ステップＳＨ１０において、高速な割り込みであると判定する。一方、ステップＳＨ０１において、マスク可能な割り込みを受け付けた場合、ステップＳＨ１０において、高速な割り込みではないと判定する。
【０２６７】
ステップＳＨ１０において、高速な割り込みでないと判定した場合、次にステップＳＨ０２が実行される。ステップＳＨ０２において、割り込みフラグが、１にセットされる。割り込みフラグが１にセットされているか否かのチェック（判定）が、図１８で説明したように、マイクロプロセッサＣＰＵがセキュアプログラムを実行することにより、所定の周期で行われる。ステップＳＨ０２で、割り込みフラグが１にセットされると、図１８で説明したように、セキュアプログラムを実行することにより行われる処理ＳＳＰにおいて、汎用レジスタＲ０〜Ｒｎがクリアされる。汎用レジスタＲ０〜Ｒｎがクリアされた後、ノンセキュアを実行することにより行われる処理ＮＳＰにおいて、低速割り込み処理（ステップＳＮ０２）およびＲＥＴ命令（ステップＳＮ０３）が実行される。
【０２６８】
ステップＳＨ１０において、高速な割り込みと判定した場合、次にステップＳＨ０３で、割り込み条件の判定（割り込み条件判定）をし、ステップＳＨ０４で、割り込みフラグをクリア（割り込みフラグクリア）する。割り込みフラグをクリアした後、第２スタックポインタ１６０３で指定されているスタック領域に、汎用レジスタＲ０〜Ｒｎの値を退避する（汎用レジスタの値を退避）。
【０２６９】
汎用レジスタの値を退避した後、ステップＳＨ１１において、制御ユニット１６００は、汎用レジスタクリア制御回路１９００へ、汎用レジスタＲ０〜Ｒｎをクリアするように指示する。この指示に応答して、汎用レジスタクリア制御回路１９００は、汎用レジスタＲ０〜Ｒｎをクリアする（汎用レジスタをクリア）。
【０２７０】
ステップＳＨ１１に続いて、ステップＳＨ１２において、使用するスタックポインタを、第２スタックポインタ１６０３から第１スタックポインタ１６０２へ切り替える（スタックポインタの切り替え）。続いて、ステップＳＨ０６で、割り込み処理へ分岐する（割り込み分岐）。
【０２７１】
割り込み分岐によって、次にノンセキュアプログラムへ分岐する。ノンセキュアプログラムによって、処理の内容が規定されたところの割り込み処理を、マイクロプロセッサＣＰＵが、ステップＳＮ０４で実行し（高速割り込み処理）、ステップＳＮ０５で、マイクロプロセッサＣＰＵは、リターン命令（ＲＥＴ）を実行する。
【０２７２】
リターン命令（ＲＥＴ）が実行されることにより、マイクロプロセッサＣＰＵは、ステップＳＨ１３を実行する。ステップＳＨ１３では、使用するスタックポインタを、第１スタックポインタ１６０２から第２スタックポインタ１６０３へ切り替える（スタックポインタの切り替え）。
【０２７３】
スタックポインタを第２スタックポインタ１６０３へ切り替えた後、ステップＳＨ０７で、第２スタックポインタ１６０３によって指定されているスタック領域から、ステップＳＨ０５で退避した汎用レジスタＲ０〜Ｒｎの値を、汎用レジスタＲ０〜Ｒｎへ戻す（汎用レジスタの値を復帰）。ステップＳＨ１４で、セキュアプログラムの実行が終了する（Ｅｎｄ）。
【０２７４】
ステップＳＳ０５では、セキュアプログラムを実行することにより、マイクロプロセッサＣＰＵが、汎用レジスタＲ０〜Ｒ６のそれぞれをクリアしている。これに対して、ステップＳＨ１１では、汎用レジスタクリア制御回路１９００によって、汎用レジスタＲ０〜Ｒｎをクリアしている。マイクロプロセッサＣＰＵによって、例えば汎用レジスタＲ０〜Ｒｎを１個ずつクリアするのに比べて、汎用レジスタクリア制御回路１９００により汎用レジスタＲ０〜Ｒｎをクリアする方が、高速にクリアすることが可能となる。そのため、高速な割り込みを受け付けたときには、短い応答時間で、高速割り込み処理ＳＮ０４を実行することが可能となる。そのため、短い応答時間で、割り込み処理が実行されることを要求する用途にも、マイクロコンピュータＬＳＩを適用することが可能となる。また、この場合でも、ノンセキュアプログラムを実行する前に、汎用レジスタＲ０〜Ｒｎは、クリアされるため、セキュアデータが盗まれることを防ぐことが可能となる。
【０２７５】
さらに、スタックポインタを、切り替えるようにしているため、セキュアプログラムにおいて、汎用レジスタを退避したスタック領域を、ノンセキュアプログラムにおいて把握することが困難となる。これにより、さらにセキュアデータが盗まれるのを防ぐことが可能となる。
【０２７６】
この実施の形態４によれば、ＲＴＯＳのようなセキュアプログラムを書き込んだフラッシュメモリＦＲＭを有するマイクロコンピュータＬＳＩを購入したユーザーＵＳＲは、マイクロコンピュータＬＳＩを、モータ制御等の高速な割り込みを必要とする用途に使うことが可能となる。また、ユーザーＵＳＲが作成したユーザープログラムによって、セキュアデータが盗まれるのを防ぐことが可能となり、マイクロコンピュータＬＳＩを販売する販売者ＰＲＤのメリットも維持することが可能となる。
【０２７７】
＜付記＞
本明細書には、複数の発明が開示されており、その内のいくつかは、請求の範囲に記載しているが、これ以外の発明も開示しており、その代表的なものを次に列記する。
【０２７８】
（Ａ）中央処理ユニットと、前記中央処理ユニットによって実行されるセキュアプログラムとノンセキュアプログラムを格納する不揮発性メモリとを備えた半導体装置であって、
前記中央処理ユニットは、互いに異なる複数の割り込みを受付可能で、割り込みがあったとき、割り込みに対応した割り込み処理を実行する中央処理ユニットであって、前記中央処理ユニットは、
プログラムに従って動作する制御ユニットと、
前記制御ユニットが動作するときに、情報を保持するために用いられる複数のレジスタと、
割り込みがあったとき、前記複数のレジスタの値を退避する領域を指定するスタックポインタと、
前記複数のレジスタに保持されている値をクリアするレジスタクリア制御回路と、
を備え、
前記中央処理ユニットは、前記複数の割り込みのうちの第１割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタの値を退避した後、前記複数のレジスタのそれぞれをクリアし、前記第１割り込みに対応した所定の割り込み処理を実施し、
前記中央処理ユニットは、前記複数の割り込みのうち、前記第１割り込みとは異なる第２割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタに保持されている値を退避した後、前記レジスタクリア制御回路によって、前記複数のレジスタをクリアし、前記第２割り込みに対応した所定の割り込み処理を実施する、半導体装置。
【０２７９】
（Ｂ）前記（Ａ）に記載の半導体装置において、
前記第１割り込みの発生は、前記セキュアプログラムによる監視によって、検出され、前記セキュアプログラムの実行により、前記スタックポインタにより指定されている領域への前記複数のレジスタの値の退避と、前記複数のレジスタのそれぞれのクリアとが行われ、
前記第２割り込みの発生に応答して、前記中央処理ユニットは、前記スタックポインタにより指定されている領域へ前記複数のレジスタの値を退避し、前記レジスタクリア制御回路によって前記複数のレジスタをクリアする、半導体装置。
【０２８０】
（Ｃ）前記（Ｂ）に記載の半導体装置において、
前記セキュアプログラムは、リアルタイムオペレーティングシステムである、半導体装置。
【０２８１】
（Ｄ）プログラムを実行する中央処理ユニットと、前記中央処理ユニットに接続された電気的に書き換え可能な不揮発性メモリとを内蔵した半導体装置を販売する半導体装置販売モデルであって、
前記不揮発性メモリには、オペレーティングシステムを構成するセキュアプログラムが格納され、格納されたセキュアプログラムの対価を含めた対価で、前記半導体装置は販売され、
購入した前記半導体装置において、前記オペレーティングシステム上で動作するプログラムが、前記書き換え可能な不揮発性メモリに書き込まれる、半導体装置販売モデル。
【０２８２】
（Ｅ）前記（Ｄ）に記載の半導体装置販売モデルにおいて、
購入した前記半導体装置において、ネットワークを介してダウンロードしたプログラムが、前記不揮発性メモリに書き込まれる、半導体装置販売モデル。
【０２８３】
（Ｆ）前記（Ｅ）に記載の半導体装置販売モデルにおいて、
前記ダウンロードしたプログラムは、前記半導体装置を提供するものから提供される、半導体装置販売モデル。
【０２８４】
（Ｇ）前記（Ｆ）に記載の半導体装置販売モデルにおいて、
前記半導体装置は、ライセンス管理ユニットを備え、前記半導体装置を販売する前に、前記ライセンス管理ユニットに、プリペイドで有料ソフトの対価に相当するライセンス情報が格納され、
購入した半導体装置において、ダウンロードしたプログラムが有料ソフトの場合、前記ライセンス管理部は、格納されているライセンス情報に相当する対価に到達するまで、ダウンロードしたプログラムが、前記不揮発性メモリに格納されるのを許可する、半導体装置販売モデル。
【０２８５】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２８６】
ＣＰＵ  マイクロプロセッサ
ＦＲＭ  不揮発性メモリ（フラッシュメモリ）
ＬＳＩ  マイクロコンピュータ
ＰＲＤ  販売者
ＵＳＲ  ユーザー
２００  通信機能回路
２０１  暗号復号機能回路
２０２  フラッシュメモリ書き換え回路
２０３  揮発性メモリ
２０４  メモリプロテクションユニット
３００  フェッチ開始アドレス監視回路
３０１  フェッチアドレス比較回路
３０３  メモリアクセス制御回路
７００、７０４、７０５  比較器
７０３、１４０１  フリップフロップ回路
１３０７  不正アクセス検出回路
【図１】
2019096338.tif 000003
【図２】
2019096338.tif 000004
【図３】
2019096338.tif 000005
【図４】
2019096338.tif 000006
【図５】
2019096338.tif 000007
【図６】
2019096338.tif 000008
【図７】
2019096338.tif 000009
【図８】
2019096338.tif 000010
【図９】
2019096338.tif 000011
【図１０】
2019096338.tif 000012
【図１１】
2019096338.tif 000013
【図１２】
2019096338.tif 000014
【図１３】
2019096338.tif 000015
【図１４】
2019096338.tif 000016
【図１５】
2019096338.tif 000017
【図１６】
2019096338.tif 000018
【図１７】
2019096338.tif 000019
【図１８】
2019096338.tif 000020
【図１９】
2019096338.tif 000021
【図２０】
2019096338.tif 000022