以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は、原則として省略する。
(実施の形態1)
<半導体装置販売モデル>
複数の実施の形態を以下説明するが、それぞれの実施の形態で説明する半導体装置は、本発明者らが考えた新たな販売モデルに従って販売される。先ずここで、本発明者らが考えた半導体装置販売モデルの説明をする。
図1は、実施の形態に係わる半導体装置販売モデルの構成を示すシステム図である。同図において、100は、半導体装置販売モデルを示している。特に制限されないが、この実施の形態においては、半導体装置販売モデル100は、販売者PRD、ユーザーUSRおよびプログラムを提供する第3者OTHによって構成されている。
販売者PRDは、マイクロコンピュータLSIを、ユーザーUSRに対して販売する。マイクロコンピュータLSIは、周知の半導体製造方法によって、複数の回路ブロックが、1個の半導体チップに形成されている。半導体チップに形成された複数の回路ブロックには、電気的に書き換え可能な不揮発性メモリFRM、不揮発性メモリFRMに書き込まれたプログラムに従って動作するマイクロプロセッサ(以下、中央処理ユニットとも称する)CPUおよびライセンス管理ユニットRCNTが含まれている。このマイクロコンピュータLSIは、販売者PRDが製造してもよいし、図示しない半導体製造メーカが製造し、販売者PRDが販売するようにしてもよい。
販売者PRDは、多種類のプログラムが格納されたサーバP−SVを有している。サーバP−SVに格納されているプログラムには、プログラムを実行する際に、ライセンスの許諾が要求される有償プログラムと、ライセンスの許諾が要求されない無償プログラムとが含まれている。販売者PRDは、ユーザーUSRへ、マイクロコンピュータLSIを販売する前に、マイクロコンピュータLSI内の不揮発性メモリFRMに、1種類あるいは複数種類のプログラムを書き込む。ここでは、有償プログラムであるRTOSのプログラムが、不揮発性メモリFRMに書き込まれるものとして説明する。有償プログラムであるRTOSのプログラムは、不正にコピー等を作成されては、ライセンス料金が未回収となる。そのため、RTOSのプログラムは、セキュリティが担保されるべきプログラム、すなわちセキュアプログラムに該当する。
販売者PRDが、ユーザーUSRにマイクロコンピュータLSIを販売する際、不揮発性メモリFRMにプログラムを書き込んでいない状態のマイクロコンピュータLSIの対価に、有償プログラムであるRTOSのライセンスを許諾する際に要求されるライセンス料金(ライセンス対価)を加算して、RTOSのプログラムが不揮発性メモリFRMに書き込まれたマイクロコンピュータの対価(販売価格)を定める。なお、販売促進等のために、RTOSのプログラムが不揮発性メモリFRMに書き込まれたマイクロコンピュータの販売価格は、変動する。
ユーザーUSRは、破線で示すように、RTOSのプログラムのライセンス料金を含めた対価を支払うことによって、RTOSのプログラムが予め書き込まれた不揮発性メモリFRMを有するマイクロコンピュータLSIを購入する。ユーザーUSRは、特に制限されないが、サーバU−SVを有している。サーバU−SVは、例えばネットワークNTWを介して、販売者PRDのサーバP−SVまたは/および第3者OTHのサーバO−SVに接続されている。ユーザーUSRは、ネットワークNTWを介して、販売者PRDまたは/および第3者のサーバP−SV、O−SVから、有償プログラムまたは/および無償プログラムを、サーバU−SVにダウンロードし、サーバU−SVに格納する。ユーサーUSRは、購入したマイクロコンピュータLSIで所望の機能が達成されるように、例えばユーザーUSR自身が作成したユーザープログラムU−APとサーバU−SVに格納されているプログラムO−APを、購入したマイクロコンピュータLSIの不揮発性メモリFRMに書き込む。
この場合、ユーザープログラムU−APおよびサーバU−SVからのプログラムO−APは、RTOSのプログラム上で動作するように、作成されている。例えば、RTOSのプログラムにおけるサブルーチンを、有効に使うように、ユーザープログラムU−APとプログラムO−APは作成されている。マイクロプロセッサCPUが、不揮発性メモリFRMに格納されているRTOSのプログラム、ユーザープログラムU−APおよびプログラムO−APを実行することにより、ユーザーUSRが、所望する機能が、マイクロコンピュータLSIによって実現される。
ユーザーは、ユーザープログラムU−APを作成する際に、RTOSのプログラムを利用するように作成する。これにより、ユーザープログラムU−APを作成する際のユーザーUSRの負担を低減することが可能となる。
特に制限されないが、この実施の形態においては、マイクロコンピュータLSIは、ライセンス管理ユニットRCNTを備えている。販売者PRDは、ユーザーUSRへマイクロコンピュータLSIを販売する際に、ユーザーUSRが希望するライセンスの数に相当するライセンス情報を、不揮発性メモリFRMに書き込んで販売する。この場合のマイクロコンピュータLSIの販売価格は、ユーザーUSRが希望するライセンスの数に対応したライセンス料金を、さらに含むことになる。
ユーザーUSRが、不揮発性メモリFRMにプログラムを書き込むとき、ライセンス管理ユニットRCNTは、書き込むプログラムが有償プログラムであるか否かを判定する。書き込むプログラムが、有償プログラムであった場合、不揮発性メモリFRMに予め格納されているライセンス情報を参照し、ライセンスの数が1以上か否かを判定する。ライセンスの数が1以上であれば、ライセンス管理ユニットRCNTは、プログラムを、不揮発性メモリFRMへ書き込み、ライセンスの数が1未満であれば、不揮発性メモリFRMへの書き込みを禁止する。また、プログラムを不揮発性メモリFRMへ書き込んだ場合には、ライセンス管理ユニットRCNTは、不揮発性メモリFRMに格納されているライセンス情報によって表されるライセンス数の数を1減らすように更新する。
この実施の形態においては、ライセンス料金が、マイクロコンピュータLSIを購入する際に、プリペイドされていることになり、プリペイドされたライセンス料金が不足するまで、ユーザーUSRは、不揮発性メモリFRMに有償プログラムをインストールし、実行することが可能となる。このように、ライセンス料金がプリペイドされているため、ライセンス料金の未回収を防ぐことが可能になるとともに、ライセンス料金の支払いの管理も容易となる。
ここでは、ユーザーUSRの希望ライセンス数に相当するライセンス情報を、販売者PRDが販売前に不揮発性メモリFRMに書き込む例を示したが、これに限定されるものではない。例えば、予め決まったライセンス数に相当するライセンス情報が書き込まれたマイクロコンピュータLSIを、販売者PRDが準備しておくようにしてもよい。
マイクロコンピュータLSIを販売する場合の半導体装置販売モデルを示したが、販売する半導体装置は、マイクロコンピュータLSIに限定されるものではない。
<マイクロコンピュータの構成>
図2は、実施の形態1に係わるマイクロコンピュータLSIの構成を示すブロック図である。図1で説明したように、マイクロコンピュータLSIは、複数の回路ブロックが、周知の半導体製造技術によって、1個の半導体チップに形成されている。図2には、上記した複数の回路ブロックのうちの一部が示されている。すなわち、この実施の形態を説明するうえで必要な回路ブロックのみが示されており、例えば図1で説明したライセンス管理ユニットRCNT等は省略されている。また、図2に示したマイクロコンピュータLSIにおいては、電気的に書き換え可能な不揮発性メモリFRMとして、所謂、フラッシュメモリが用いられている場合を示している。なお、フラッシュメモリには、図1に示した不揮発性メモリと同じ符号FRMが付されている。
図2には、販売者PRDからユーザーUSRへ販売されたマイクロコンピュータLSIの状態が示されている。すなわち、リアルタイムオペレーティングシステム(RTOS)のプログラムの対価も含めて、ユーザーUSRが販売者PRDへ支払い、販売者PRDから購入したマイクロコンピュータLSIの状態が示されている。そのため、フラッシュメモリFRMには、RTSのプログラムが書き込まれ、格納された状態となっている。また、図2は、フラッシュメモリFRMに書き込まれたプログラム(例えばRTOSのプログラム)をバージョンアップするために、マイクロコンピュータLSIがネットワークNTWを介して、販売者PRDのサーバP−SVに接続されている状態が示されている。なお、図2では、図面が複雑になるのを避けるために、ユーザーUSRのサーバU−SVは省略されている。
図2において、200は通信機能回路、201は暗号復号機能回路、202はフラッシュメモリ書き換え回路、203は揮発性メモリ、204はメモリプロテクションユニット、205はバス、206は信号配線を示している。
通信機能回路200は、マイクロコンピュータLSIの外部と内部との間でデータの送受信を行う。例えば、マイクロコンピュータLSIの外部から、バージョンアップされたプログラム(ソフトウェア)を受信し、格納する。暗号復号機能回路201は、暗号化されているプログラムを復号し、暗号化されていないプログラム(復号化されたプログラム)へ変換する。フラッシュメモリ書き換え回路202は、供給されたデータ、例えばプログラムをフラッシュメモリFRMへ書き込む。揮発性メモリ203は、例えばスタテック型メモリあるいはダイナミック型メモリで構成され、プログラムのようなデータを一次的に格納する。メモリプロテクションユニット204につては、後で詳しく説明するが、フラッシュメモリFRMからの情報とマイクロプロセッサ(中央処理ユニット)CPUからの情報に基づいて、マイクロプロセッサCPUからメモリ(フラッシュメモリFRMおよび揮発性メモリ203)へのアクセスを制御する。
例えばフラッシュメモリFRMに格納されているプログラムをバージョンアップするために、マイクロコンピュータLSIは、ネットワークNTWに接続され、バージョンアップしたプログラムが、マイクロコンピュータLSIにダウンロードされる。このダウンロードの時に、プログラムが盗まれ易い状態となる。そのため、このダウンロードの際の動作を以下説明する。
プログラムは、暗号化されている。そのため、サーバP−SVからプログラムが盗まれても、プログラムを実行することはできない。同様に、プログラムをダウンロードする際には、ネットワークNTWをプログラムが通過するが、このときもプログラムは暗号化されているため、例え盗まれても、そのプログラムを実行することはできない。
プログラムが、ネットワークNTWを経由してマイクロコンピュータLSIに供給されると、通信機能回路200が、プログラムであるデータを受信し、格納する。次に、マイクロプロセッサCPUが、バス205を介して、通信機能回路200から、プログラムであるデータを受け取り、バス205を介して、揮発性メモリ203へ転送する。揮発性メモリ203に格納されたプログラムは、暗号化されているため、マイクロプロセッサCPUは、次に、揮発性メモリ203に格納されている暗号化されたプログラムを、バス205を介して、暗号復号機能回路201へ転送する。暗号復号機能回路201によって、暗号が解除され、暗号化されていないプログラムへ変換される。マイクロプロセッサCPUは、この暗号化されていないプログラムを、バス205を介して、揮発性メモリ203へ転送する。
その後、マイクロプロセッサCPUは、揮発性メモリ203に格納されている暗号化されていないプログラムを、バス205を介して、フラッシュ書き換え回路202へ転送する。フラッシュ書き換え回路202は、供給された暗号化されていないプログラムを、フラッシュメモリFRMへ書き込む。これにより、例えば、バージョンアップしたプログラムが、フラッシュメモリFRMに格納されることになる。マイクロプロセッサCPUは、フラッシュメモリFRMに格納されているバージョンアップしたプログラムを読み出して、実行することになる。
上記した動作の説明から理解されるように、プログラムをダウンロードして、フラッシュメモリFRMへ書き込むときには、暗号復号機能回路201、フラッシュメモリ書き換え回路202、揮発性メモリ203、およびマイクロプロセッサCPUに、暗号化されていないプログラムが存在している期間が生じる。また、フラッシュメモリFRMにも、暗号化されていないプログラムが存在していることになる。そのため、暗号化されていないプログラムが存在している期間において、暗号化されていないプログラムが盗まれるのを保護することが要求される。また、フラッシュメモリFRMに存在する暗号化されていないプログラムについても、そのプログラムが盗まれるのを保護することが要求される。
この実施の形態1においては、揮発性メモリ203、フラッシュメモリFRM等のメモリにアクセスする機能は、マイクロプロセッサCPUのみが有することに着目し、メモリプロテクションユニット204によって、マイクロプロセッサCPUがアクセスできる領域に制限を設けるようにされる。この場合、領域を指定する情報は、バス205を介さずに、信号配線206によって直接フラッシュメモリFRMからメモリプロテクションユニット204へ伝達される。
なお、図2において、マイクロプロセッサLSIのそれぞれの辺に設けられているPinは、マイクロプロセッサLSIの外部端子(ピン)を、模式的に示している。
<メモリプロテクションユニットの構成>
次に、メモリプロテクションユニット204の構成を、図3を用いて説明する。図3は、実施の形態1に係わるメモリプロテクションユニットの構成を示すブロック図である。同図には、説明の都合上、マイクロプロセッサCPUおよびフラッシュメモリFRMも示されている。
プログラムは、複数の命令によって構成される。マイクロプロセッサCPUは、プログラムにおける複数の命令から、実行する命令を指定するアドレスを出力する。すなわち、マイクロプロセッサCPUは、プログラムカウンタを有しており、実行する命令を指定するアドレスは、プログラムカウンタによって形成される。図3では、このプログラムカウンタによって形成されたアドレス、すなわち実行する命令を指定するアドレスが、PCアドレス306として示されている。また、マイクロプロセッサCPUが入出力するデータが、符号307で示されている。
この実施の形態1においては、販売者PRDが、フラッシュメモリ(不揮発性メモリ)FRMに、セキュリティが担保されるべきプログラムを書き込んで、販売する場合、セキュリティが担保されるべきプログラム(セキュアプログラム)が格納されたフラッシュメモリFRMのプログラム領域を指定するセキュアアドレス情報304を、フラッシュメモリFRMに書き込んで、販売する。また、このとき、販売者PRDは、揮発性メモリ203(図2)において、セキュリティが担保されるべきデータ(セキュアデータ)を格納するデータ領域を指定するセキュアデータ情報305を、フラッシュメモリFRMに書き込む。
RTOSのプログラムは、有償プログラムであるため、セキュアプログラムである。そのため、RTOSのプログラムを書き込んだフラッシュメモリFRMのプログラム領域を特定するセキュアアドレス情報304と、RTOSのプログラムが動作する際にセキュリティを担保すべきデータが格納される揮発性メモリ203のデータ領域を特定するセキュアデータ情報305が、フラッシュメモリFRMに書き込まれることになる。セキュアアドレス情報304およびセキュアデータ情報305の書き込みは、RTSOのプログラムと同様に、販売者PRDが、マイクロプロセッサLSIを販売する前に行われる。
セキュリティを担保することが必要とされない任意のプログラム(ノンセキュアプログラム)、例えば無償プログラムおよびユーザープログラムU−APは、セキュアアドレス情報304によって特定されるフラッシュメモリFRMのプログラム領域とは異なるプログラム領域に書き込まれることになる。同様に、セキュリティを担保することが必要とされないデータ(ノンセキュアデータ)、例えば無償プログラムおよびユーザープログラムU−APが動作したときに生じるデータは、セキュアデータ情報305によって特定される揮発性メモリ203のデータ領域とは異なるデータ領域に格納されることになる。
ノンセキュアプログラムが書き込まれるフラッシュメモリFRMのプログラム領域を第1プログラム領域と見なした場合、セキュアプログラムが書き込まれるフラッシュメモリFRMのプログラム領域は第2プログラム領域と見なすことができる。このように見なした場合、第2プログラム領域は、セキュアアドレス情報304によって特定されることになる。一方、セキュアアドレス情報304によって特定されていないフラッシュメモリFRMのプログラム領域が、第1プログラム領域となる。勿論、ノンセキュアアドレス情報によって、フラッシュメモリFRMの第1プログラム領域を特定するようにしてもよい。
同様に、ノンセキュアデータが格納される揮発性メモリ203のデータ領域を、第1データ領域と見なした場合、セキュアデータが格納される揮発性メモリ203のデータ領域を、第2データ領域と見なすことができる。このように見なした場合も、第2データ領域は、セキュアデータ情報305によって特定されることになる。一方、セキュアデータ情報305によって特定されていない揮発性メモリ203のデータ領域が、第1データ領域となる。勿論、ノンセキュアデータ情報によって、揮発性メモリ203の第1データ領域を特定するようにしてもよい。
セキュアアドレス情報304とセキュアデータ情報305は、バス205ではなく、図2に示した信号配線206を介して、フラッシュメモリFRMからメモリプロテクションユニット204へ直接的に供給される。
メモリプロテクションユニット204は、フェッチ開始アドレス監視回路300、フェッチアドレス比較回路301およびメモリアクセス制御回路303を備えている。フェッチ開始アドレス監視回路300およびフェッチアドレス比較回路301のそれぞれには、マイクロプロセッサCPUからのPCアドレス306およびフラッシュメモリFRMからのセキュアアドレス情報304が供給される。フェッチ開始アドレス監視回路300およびフェッチアドレス比較回路301については、後で図7等を用いて一例を説明するので、ここでは概要を説明する。
フェッチアドレス比較回路301は、PCアドレス306とセキュアアドレス情報304とを比較し、PCアドレス306が、セキュアアドレス情報304によって指定されている第2プログラム領域内を指定しているのか否かを示す選択信号を出力する。この実施の形態1においては、セキュアアドレス情報304によって指定されている第2プログラム領域を除く、フラッシュメモリFRMのプログラム領域が、ノンセキュアプログラム領域とされている。そのため、フェッチアドレス比較回路301から出力される選択信号は、PCアドレス306が、セキュアプログラム領域(第2プログラム領域)内を指定しているとき、セキュアプログラム領域を指定するセキュアプログラム領域信号と見なすことができ、PCアドレス306がノンセキュアプログラム領域(第1プログラム領域)内を指定しているとき、ノンセキュアプログラム領域を指定するノンセキュアプログラム領域信号と見なすことができる。
フェッチアドレス比較回路301から出力される選択信号が、例えばセキュアプログラム領域を示しているとき、セキュリティが担保されるように、マイクロコンピュータLSIを構成することにより、セキュアプログラムが盗まれるのを防ぐことが可能となる。
セキュアアドレス情報304は、例えば予め固定の値に設定し、変更不可能にしておくことが考えられる。この場合、フラッシュメモリFRMに格納するセキュアプログラムが変更になったとき、あるいはマイクロコンピュータLSIを、ユーザーUSRが購入した後、セキュアプログラムを変更するときに、セキュアプログラム領域を変更することが困難になる。セキュアプログラム領域を変更することができないと、セキュアプログラムのサイズが大きくなった場合等で、セキュリティを担保することが困難になる。
例えば、ユーザーUSRが、マイクロコンピュータLSIを購入した後で、セキュアアドレス情報304を変更することが可能となるようにするためには、セキュアアドレス情報304をレジスタ等の揮発性メモリに格納するようにすることが考えられる。この場合、マイクロコンピュータLSI内のマイクロプロセッサCPUを、ユーザーUSRが操作することができなければ、セキュアアドレス情報304を格納したレジスタをユーザーUSRが操作することは困難である。その結果、セキュリティを担保しながら、セキュアプログラム領域を変更することが可能となる。
しかしながら、この実施の形態1においては、マイクロコンピュータLSIをユーザーUSRが購入した後、ユーザーUSRが、例えばマイクロプロセッサCPUを操作するユーザープログラムU−APを作成する。すなわち、ユーザーUSRは、マイクロプロセッサCPUを操作することが可能である。そのため、ユーザーUSRが、セキュアアドレス情報304を格納したレジスタ等の揮発性メモリを操作するソフトウェア(ノンセキュアプログラム)を作成することか可能となってしまう。レジスタに格納されているセキュアドレス情報304を変更することにより、セキュアプログラムを盗むことが可能となってしまう。
この実施の形態1では、セキュアアドレス情報304およびセキュアデータ情報305は、販売者PRDが、マイクロコンピュータLSIを販売する前に、電気的に書き換え可能なフラッシュメモリFRMに書き込む。これにより、セキュアプログラムに対応したセキュアアドレス情報304およびセキュアデータ情報305を、フラッシュメモリFRMに書き込むことが可能となる。また、販売者PRDは、販売後も必要に応じて、セキュアアドレス情報304およびセキュアデータ情報305を、変更することが可能となる。フラッシュメモリFRMに格納されたセキュアアドレス情報304およびセキュアデータ情報305は、ユーザーUSRの作成したソフトウェア(ノンセキュアプログラム)によって変更されないため、セキュリティを担保することも可能である。
また、この実施の形態1においては、バス205とは異なる信号配線206によって、フラッシュメモリFRMからメモリプロテクションユニット204へ、セキュアアドレス情報304およびセキュアデータ情報305が供給される。これにより、ユーザーUSRがマイクロプロセッサCPUを操作しても、セキュアアドレス情報304およびセキュアデータ情報305が、ユーザーUSRによって読み出されるのを防ぐことが可能となる。
フェッチ開始アドレス監視回路300は、セキュアアドレス情報304、PCアドレス306およびフェッチアドレス比較回路301からの選択信号を受けて、セキュアデータアクセス許可信号302を出力する。
この実施の形態1においては、RTOSのプログラム上で、ユーザープログラムU−AP等が動作する。ユーザープログラムU−AP等は、ユーザーUSRが作成するため、ノンセキュアプログラムであり、フラッシュメモリFRMのノンセキュアプログラム領域に書き込まれる。RTOSのプログラム上で、ユーザープログラムU−APが動作するため、ユーザープログラムU−APから、RTOSのプログラムの呼び出しが行われることになる。
RTOSのプログラムは、互いに異なった機能を達成する複数のサブルーチンを備えている。ユーザープログラムU−APは、複数のサブルーチンから所望の機能を達成するサブルーチンを呼び出すことになる。ここでのサブルーチンの呼び出しは、分岐により行われる。すなわち、RTOSのプログラムが備えている複数のサブルーチンから選択されたサブルーチンへ、ノンセキュアプログラムであるユーザープログラムU−APが分岐する動作が発生する。後で図5等を用いて一例を説明するが、PCアドレス306が、セキュアプログラム領域内を指定しているか否かを監視する構成では、ノンセキュアプログラムからセキュアプログラムへ分岐する際のアタックに対して弱いと言う課題がある。
後で図7等を用いて詳しく説明するが、フェッチ開始アドレス監視回路300は、ノンセキュアプログラムから、セキュアプログラムへ分岐する際に、分岐先アドレスが、フェッチを許可する分岐許可領域(第1領域)内を指定している否かを判定する。分岐許可領域を指定していれば、セキュアデータアクセス許可信号302によって、マイクロプロセッサCPUが、例えばフラッシュメモリFRM内のセキュアプログラム領域へアクセスするのを許可する。これにより、ノンセキュアプログラムからセキュアプログラムへ分岐する際のアタックに対する保護が行われる。
メモリアクセス制御回路303は、フラッシュメモリFRMからのセキュアデータ情報305、セキュアデータアクセス許可信号302、PCアドレス306および入出力データ307を受けて、フラッシュメモリFRMおよび揮発性メモリ203に対するアクセス信号308を出力する。すなわち、メモリアクセス制御回路303は、セキュアデータアクセス許可信号302によって、メモリへのアクセスが許可されている場合、PCアドレス306に対応したアドレス信号を、メモリ(フラッシュメモリFRM、揮発性メモリ203)へ出力し、このアドレス信号によって指定されているメモリ内のアドレスとマイクロプロセッサCPUとの間でのデータ307の送受信を許可する。これに対して、セキュアデータアクセス許可信号302が、メモリへのアクセスを禁止している場合、メモリアクセス制御回路303は、メモリとマイクロプロセッサCPUとの間のデータ307の送受信を禁止する。
<アタック例>
図4は、図3に示したフェッチアドレス比較回路301およびメモリアクセス制御回路303を使って、メモリをプロテクションする場合を説明する説明図である。すなわち、図4は、図3に示したフェッチ開始アドレス監視回路300を、メモリプロテクションユニットが備えていない場合を示している。
この実施の形態1では、ノンセキュアプログラムとセキュアプログラムは、フラッシュメモリFRMに格納され、ノンセキュアデータとセキュアデータは揮発性メモリ203に格納されている。フラッシュメモリFRMには、セキュアプログラムを格納するセキュアプログラム領域を指定するセキュアアドレス情報304とセキュアデータを格納するセキュアデータ領域を指定するセキュアデータ情報305とが格納されている。
このセキュアアドレス情報304によって、フラッシュメモリFRMの領域(空間)は、ノンセキュアプログラムが格納されるノンセキュアプログラム領域と、セキュアプログラムが格納されるセキュアプログラム領域に分けられている。また、揮発性メモリ203の領域(空間)は、セキュアデータ情報305によって、ノンセキュアデータが格納されるノンセキュアデータ領域とセキュアデータが格納されるセキュアデータ領域に分けられている。
ノンセキュアプログラムもセキュアプログラムも、2値信号であり、データと見なすことができる。そのため、図4では、ノンセキュアプログラムを格納するノンセキュアプログラム領域と、ノンセキュアデータを格納するノンセキュアデータ領域が、纏めてノンセキュアデータ領域として示されている。同様に、セキュアプログラムを格納するセキュアプログラム領域と、セキュアデータを格納するセキュアデータ領域が、纏めて、図4では、セキュアデータ領域として示されている。本明細書においては、特に明示しない限り、ノンセキュアデータは、ノンセキュアプログラムとノンセキュアなデータの両方を意味しており、セキュアデータは、セキュアプログラムとセキュアなデータの両方を意味している。
図4では、ノンセキュアデータ領域が、ノンセキュアプログラムを格納するノンセキュアプログラム領域で、セキュアデータ領域が、セキュアプログラムを格納するセキュアプログラム領域である場合を、例として説明する。
PCアドレス306が、セキュアプログラム領域内を指定しているとき、すなわち、セキュアプログラムが実行されているとき、フェッチアドレス比較回路301から出力される選択信号が、セキュアプログラム領域信号として、メモリアクセス制御回路303へ供給される。このセキュアプログラム領域信号に応答して、PCアドレス306がセキュアプログラム領域内を指定しているとき、メモリアクセス制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域(セキュアプログラム領域)とノンセキュアデータ領域(ノンセキュアプログラム領域)の両方をアクセスすることを許可する。すなわち、PCアドレス306によって、セキュアデータ領域およびノンセキュアデータ領域のいずれを指定しても、データ307の送受信が可能となる。これにより、図4に示すように、セキュアプログラム領域に配置されたセキュアプログラムからは、ノンセキュアデータ領域およびセキュアデータ領域のいずれに対してもアクセスが許可(アクセス許可と記載)される。
一方、PCアドレス306が、セキュアプログラム領域外であるノンセキュアプログラム領域内を指定している場合、フェッチアドレス比較回路301から出力される選択信号は、ノンセキュアプログラム領域を指定するノンセキュアプログラム領域信号となる。メモリアクセス制御回路303は、選択信号がノンセキュアプログラム領域信号のとき、マイクロプロセッサCPUが、ノンセキュアデータ領域に対してアクセスすることを許可し、セキュアデータ領域に対してアクセスすることを禁止する。すなわち、この場合には、PCアドレス306が、ノンセキュアデータ領域内を指定しているとき、データ307の送受信が許可され、PCアドレス306が、セキュアデータ領域内を指定しているとき、データ307の送受信が禁止される。これにより、図4に示すように、ノンセキュアプログラム領域に配置されたノンセキュアプログラムからは、ノンセキュアデータ領域に対してのアクセスが許可(アクセス許可と記載)され、セキュアデータ領域に対してのアクセスは禁止(アクセス禁止と記載)されることになる。
セキュアプログラム領域に配置されたセキュアプログラムに、セキュリティホールが存在する場合、ノンセキュアプログラム領域に、ハッキングプログラムを配置し、ハッキングプログラムを、マイクロプロセッサCPUによって実行させることにより、セキュアデータ領域に格納されているデータ(プログラム)を盗むことが可能となる。すなわち、ノンセキュアプログラムとして実行されるハッキングプログラムにおいて、図4においてセキュリティホールとして示されているアドレスへ分岐する。この分岐により、セキュリティホールが存在するセキュリティプログラムが動作することになる。セキュリティプログラムであるため、セキュアデータ領域へのアクセスが許可され、セキュアデータ領域に格納されているセキュアなデータ(プログラム)を、例えばマイクロプロセッサCPU内のレジスタ等に格納することができる。このセキュアなデータ(プログラム)がレジスタに格納された状態で、セキュアプログラムからノンセキュアプログラムであるハッキングプログラムへ復帰する。復帰したとき、レジスタの内容を読み出すことにより、セキュアなデータ(プログラム)を盗むことが可能となる。図4では、アタックにより発生する分岐とメモリ(フラッシュメモリFRM)へのアクセスが、ハッキングとして示されている。
ここでは、セキュアデータ領域がセキュアプログラム領域である場合を説明したが、セキュアデータ領域が、揮発性メモリ203におけるセキュアデータ領域の場合も同様に、揮発性メモリ203に格納されているセキュアなデータを盗むことが可能となってしまう。
<セキュリティホール例>
図5は、セキュリティホールが存在するセキュアプログラムの例を示す模式図である。フラッシュメモリFRMのセキュアプログラム領域には、RTOSのプログラムが格納されている。RTOSのプログラムは、先に述べたように複数のサブルーチンを有している。図5は、複数のサブルーチンのうち、セキュリティホールが存在するサブルーチンの例を示している。
サブルーチンは、メインルーチン(あるいは上位ルーチン)からの分岐により、呼び出される。すなわち、メインルーチンにおいて、PCアドレス306の値が、図5において開始アドレスとして示されているアドレスを指定する値とされる。これにより、メインルーチンから、図5に示すサブルーチンへ分岐する。一例を述べるならば、メインルーチンには、開始アドレスを分岐先アドレスとした分岐命令が格納されており、マイクロプロセッサCPUによって、この分岐命令が実行されることにより、分岐が行われる。
サブルーチンにおいては、開始アドレスによって指定されているアドレスに格納されている命令Ex−Aが、先ず実行される。この命令Ex−Aが実行されることにより、例えばメインルーチンの処理において使われていたレジスタ等の値が、スタックポインタ(図示しない)によって指定されるスタック領域に退避される。次に、PCアドレス306の値が、開始アドレスから終了アドレスへ向けて、順番に変化する。これにより、命令Ex−Bから命令Ex−Pが、この順番で、マイクロプロセッサCPUに読み出され、順番に実行される。これにより、所定の処理が行われ、サブルーチンの機能が達成される。PCアドレス306の値が、終了アドレスを示す値に到達すると、命令Ex−Zが実行される。命令Ex−Zを実行することにより、先にスタックポインタで指定されていたスタック領域に格納されていたレジスタ等の値が、マイクロプロセッサCPU内のレジスタに復帰される。これにより、マイクロプロセッサCPU内のレジスタの値は、サブルーチンへ分岐する前の状態へ復帰することになる。
このようにメインルーチンからサブルーチンへ分岐する際には、所定の開始アドレスへ分岐することにより、所定の処理が実行されることになる。
図5において、所定の処理を実行しているとき、PCアドレス306は、セキュアプログラム領域内を指定しているため、フェッチアドレス比較回路301は、セキュアプログラム領域信号を出力することになる。そのため、メモリアクセス制御回路303は、マイクロプロセッサCPUが、メモリ(フラッシュメモリFRM)をアクセスすることを許可することになる。例えば、図5に示した命令Ex−Sが、特定のストア命令の場合、この特定のストア命令は、セキュリティホールとなってしまうことが考えられる。この特定のストア命令は、例えばマイクロプロセッサCPU内の特定のレジスタ(以下、説明の都合上R0とする)に保持されている値をアドレスとして、このアドレスによって指定されるセキュアデータ領域内のアドレスに格納されているデータ(命令)を、マイクロプロセッサCPU内の別の特定のレジスタ(以下、説明の都合上R1とする)に格納する命令である。
ハッキングプログラムにおいて、特定のレジスタR0に、読み出したいセキュアデータ領域内のアドレスを設定した後、開始アドレスではなく、特定のストア命令Ex−Sを格納したアドレスを分岐先アドレスとして、ハッキングプログラムから図5に示したサブルーチンへ分岐する。すなわち、ハッキングプログラムからサブルーチンへ分岐する際に、PCアドレス306の値を、開始アドレスではなく、セキュリティホール(特定のストア命令Ex−S)のアドレス(分岐先アドレス)に設定して、分岐する。これにより、特定のレジスタR1の退避および復帰は行われず、特定のレジスタR1に格納されているセキュアなデータ(命令)を、ハッキングプログラムによって読み出すことが可能となってしまう。
このようなセキュリティホールは、多数存在することが考えられ、全てのセキュリティホールを無くすことは困難である。
<アタック対策>
図6は、図3に示したフェッチアドレス比較回路301、フェッチ開始アドレス監視回路300およびメモリアクセス制御回路303を用いたメモリプロテクションユニット204を使って、アタックに対してメモリをプロテクションする場合を説明する説明図である。図6は、先に説明した図4と類似している。ここでは、図4との相違点を主に説明する。
図5で説明したように、アタックは、ノンセキュアプログラムから、セキュアプログラム領域に格納されたセキュアプログラムに分岐する際、セキュアプログラムによって定まる開始アドレスに分岐せずに、セキュリティホールに直接分岐することによって、行われる。後で図7を用いて、一例を説明するが、フェッチアドレス比較回路301およびフェッチ開始アドレス監視回路300によって、セキュアプログラム領域が、分岐許可領域(第1領域)BAAと分岐禁止領域(第1領域とは異なる第2領域)BPAに分けられる。ここで、セキュアプログラムの開始アドレスは、分岐許可領域BAA内に割り当てられ、セキュリティホールを指定する分岐先アドレスは、分岐禁止領域BPA内に割り当てられる。すなわち、図5を例にすると、命令Ex−A(第1命令)が、分岐許可領域BAAに配置され、命令Ex−Aを除く他の命令Ex−B〜Ex−Z(第2命令)は、分岐禁止領域BPAに配置される。
ノンセキュアプログラム領域に格納されたノンセキュアプログラムから、セキュアプログラム領域に格納されたセキュアプログラムを呼び出す際、フェッチ開始アドレス監視回路300は、呼び出す際の分岐先のアドレスが、分岐許可領域BAAを指定している場合、メモリアクセスを許容するセキュアデータアクセス許可信号302を出力する。これに対して、呼び出す際の分岐先のアドレスが、分岐禁止領域BPAを指定している場合、フェッチ開始アドレス監視回路300は、メモリアクセスを禁止するセキュアデータアクセス許可信号302を出力する。メモリアクセス制御回路303は、セキュアデータアクセス許可信号302が、メモリアクセスの許可を示している場合、マイクロプロセッサCPUによるメモリ(フラッシュメモリFRM)へのアクセスを許可し、セキュアデータアクセス許可信号302が、メモリアクセスの禁止を示している場合、マイクロプロセッサCPUによるメモリへのアクセスを禁止する。
ハッキングプログラムではないノンセキュアプログラムが、セキュアプログラムを呼び出す場合には、分岐許可領域BAA内を指定する分岐先のアドレスを出力するため、セキュアプログラムを実行することが可能となる。一方、ハッキングプログラムが、セキュリティホールに相当するアドレスを分岐先のアドレスとして呼び出す場合には、分岐禁止領域BPAを指定する分岐先アドレスが出力されることになる。そのため、この場合には、マイクロプロセッサCPUによるメモリへのアクセスが禁止される。その結果、ハッキングプログラムによるハッキングが行われないようにすることが可能となる。
<フェッチ開始アドレス監視回路およびフェッチアドレス比較回路の構成>
次に、図3で説明したフェッチ開始アドレス監視回路300およびフェッチアドレス比較回路301の構成を、図7(A)および(B)を用いて説明する。図7(A)は、実施の形態1に係わるフェッチ開始アドレス監視回路300およびフェッチアドレス比較回路301の構成を示すブロック図である。また、図7(B)は、実施の形態1に係わるセキュアプログラム領域を示す説明図である。
図3に示したセキュアアドレス情報304は、セキュアプログラムを格納するセキュアプログラム領域の上限アドレスを示すセキュアプログラム上限アドレス304−U(上限アドレス情報)と、セキュアプログラム領域の下限アドレスを示すセキュアプログラム下限アドレス304−D(下限アドレス情報)と、を含んでいる。このセキュアプログラム上限アドレス304−Uとセキュアプログラム下限アドレス304−Dとによって指定されたフラッシュメモリFRMの領域が、セキュアプログラムを格納するセキュアプログラム領域(第2プログラム領域)となる。言い換えるならば、セキュアプログラムを書き込んだフラッシュメモリFRMのセキュアプログラム領域を、セキュアプログラム上限アドレス304−Uとセキュアプログラム下限アドレス304−Dによって特定する。
この実施の形態1においては、上限アドレス304−Uの値は、下限アドレス304−Dの値よりも大きな値である。プログラムを実行する際に、PCアドレス306の値は、セキュアプログラム上限アドレス304−Uからセキュアプログラム下限アドレス304−Dに向かって変化する。これにより、マイクロプロセッサCPUは、上限アドレス304−Uによって指定されているアドレスに格納されている命令から、下限アドレス304−Dによって指定されているアドレスに格納されている命令に向けて、フラッシュメモリFRMから命令を読み出し、読み出した命令を実行する。すなわち、マイクロプロセッサCPUは、大きいアドレスから小さいアドレスに向かって、命令を読み出し、実行する。
フェッチアドレス比較回路301は、比較器704、705、2入力アンド回路706(第1論理回路)およびインバータ回路708(第1論理回路)を備えている。
比較器704(第1比較回路)は、セキュアプログラム上限アドレス304−UとPCアドレス306とを比較し、PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値以下のとき、ハイレベルの比較結果信号704−Rを出力する。反対に、PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値を超えているとき、比較器704は、ロウレベルの比較結果信号704−Rを出力する。
比較器705(第2比較回路)は、セキュアプログラム下限アドレス304−DとPCアドレス306とを比較し、PCアドレス306の値が、セキュアプログラム下限アドレス304−Dの値以上のとき、ハイレベルの比較結果信号705−Rを出力する。反対に、PCアドレス306の値が、セキュアプログラム下限アドレス304−Dの値未満とき、比較器705は、ロウレベルの比較結果信号705−Rを出力する。
比較器704および705のそれぞれから出力された比較結果信号704−Rおよび705−Rは、2入力アンド回路706に入力される。2入力アンド回路706によって、比較結果信号704−Rおよび705−Rの論理積が求められる。この2入力アンド回路706の出力信号707は、インバータ回路708に供給され、インバータ回路708によって位相反転される。
PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値とセキュアプログラム下限アドレス304−Dとの間にあるとき、比較結果信号704−Rおよび705−Rのそれぞれがハイレベルとなるため、2入力アンド回路706の出力信号707は、ハイレベルとなる。これにより、インバータ回路708の出力信号709はロウレベルとなる。すなわち、PCアドレス306によって表されるアドレスが、セキュアプログラム上限アドレス304−Uとセキュアプログラム下限アドレス304−Dによって指定されるセキュアプログラム領域内を指定しているとき、2入力アンド回路706の出力信号707はハイレベルとなり、インバータ回路708の出力信号709はロウレベルとなる。
一方、PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値を超えているとき、またはセキュアプログラム下限アドレス304−Dの値未満のときには、2入力アンド回路706の出力信号707はロウレベルとなり、インバータ回路708の出力信号709は、ハイレベルとなる。すなわち、PCアドレス306によって表されるアドレスが、セキュアプログラム領域以外を指定しているときに、出力信号707はロウレベルとなり、出力信号709はハイレベルとなる。
そのため、出力信号707および709は、セキュアプログラム領域を選択しているのかノンセキュアプログラム領域を選択しているのかを表す選択信号と見なすことができる。出力信号707は、セキュアプログラム領域が選択されているとき、ハイレベルとなる。そのため、出力信号707は、セキュアプログラム領域信号707と見なすことができる。同様に、出力信号709は、ノンセキュアプログラム領域が選択されているとき、ハイレベルとなる。そのため、出力信号709は、ノンセキュアプログラム領域信号709と見なすことができる。
比較器704、705、2入力アンド回路706およびインバータ回路708によって、第1比較ユニットが構成されていると見なすことができる。この場合、第1比較ユニットによって形成されるセキュアプログラム領域信号707または/およびノンセキュアプログラム領域信号709(第1比較出力)を監視することによって、PCアドレスカウンタが、セキュアプログラム領域を指定しているのか、あるいはノンセキュアプログラム領域を指定しているのを判定することが可能である。
フェッチ開始アドレス監視回路300は、比較器700、2入力アンド回路701およびフリップフロップ回路703を備えている。
比較器700(第3比較回路)には、セキュアプログラム上限アドレス304−UとPCアドレス306とが供給される。比較器700は、セキュアプログラム上限アドレス304−Uの値から4を減算して得た値(上限アドレス−4)と、PCアドレス306とを比較する。PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値から4を減算して得た値(上限アドレス−4)以上のとき、比較器700は、ハイレベルの比較結果信号700−Rを出力する。一方、PCアドレス306の値が、セキュアプログラム上限アドレス304−Uの値から4を減算して得た値(上限アドレス−4)未満のとき、比較器700は、ロウレベルの比較結果信号700−Rを出力する。
比較結果信号700−Rと、上記した比較器704の比較結果信号704−Rが、2入力アンド回路701(第2論理回路)に供給される。この2入力アンド回路701の出力信号は、セキュアプログラム分岐許可領域信号702として、フリップフロップ回路703に供給される。
フリップフロップ回路703は、セット端子(set)、クリア端子(clear)および出力端子(Q)を備えており、セット端子にハイレベルが供給されることにより、出力端子がハイレベルとなる。出力端子のハイレベルは、クリア端子にハイレベルが供給されるまで維持(保持)される。クリア端子にハイレベルが供給されることにより、出力端子はロウレベルへ変化する。
2入力アンド回路701の出力信号であるセキュアプログラム分岐許可領域信号702が、フリップフロップ回路703のセット端子(set)に供給され、前記したインバータ回路708の出力信号、すなわちノンセキュアプログラム領域信号709が、フリップフロップ回路703のクリア端子(clear)に供給される。このフリップフロップ回路703の出力端子(Q)から出力される信号が、セキュアデータアクセス許可信号302として、図3に示したメモリアクセス制御回路303へ供給される。
セキュアプログラム上限アドレス304−Uと、セキュアプログラム下限アドレス304−Dと、上記したセキュアプログラム上限アドレス304−Uの値から4を減算して得た値(上限アドレス−4)との関係が、図7(B)に示されている。図7(B)において、上限アドレス304−Uおよび下限アドレス304−Dは、実線で示されており、セキュアプログラム上限アドレス304−Uの値から4を減算して得た値(上限アドレス−4)は、破線で示されている。
図7(B)において、上限アドレス304−Uとして示されている値(アドレス)よりも、PCアドレス306の値(アドレス)が、小さいとき、上記したように、比較結果信号704−Rは、ハイレベルとなる。一方、比較器700は、PCアドレス306の値が、上限アドレス304−Uよりも4低い値(上限アドレス−4)以上のときに、ハイレベルの比較結果信号700−Rを出力する。そのため、2入力アンド回路701は、PCアドレスの値が、上限アドレス304−Uの値以下で、上限アドレス−4の値以上のときに、ハイレベルのセキュアプログラム分岐許可領域信号702を出力することになる。セキュアプログラム分岐許可領域信号702(第2比較出力)は、比較器700、704および2入力アンド回路701によって構成された第2比較ユニットにより形成されると見なすことができる。この場合、比較器704は、第1比較ユニットと第2比較ユニットとで共用されていることになる。
セキュアプログラムは、セキュアプログラム領域内に配置されるが、配置の際に、上限アドレス304−Uの値と(上限アドレス−4)の値によって指定されたプログラム領域が、セキュアプログラムの開始アドレス(図5)とされる。この開始アドレスには、分岐の際に最初に実行される命令、図5の例では、レジスタ等を退避する命令Ex−Aが配置される。
例えば、PCアドレス306の値が、下限アドレス304−Dの値未満の場合、比較器704からは、ハイレベルの比較結果信号704−Rが出力され、比較器700および705からは、ロウレベルの比較結果信号700−Rおよび705−Rが出力されることになる。その結果、セキュアプログラム分岐許可領域信号702およびセキュアプログラム領域信号707のそれぞれは、ロウレベルとなり、ノンセキュアプログラム領域信号709はハイレベルとなる。これにより、フリップフロップ回路703のクリア端子には、ハイレベルが供給されるため、フリップフロップ回路703の出力端子はロウレベルとなり、ロウレベルのセキュアデータアクセス許可信号302が、メモリアクセス制御回路303に供給されることになる。
また、PCアドレス306の値が、上限アドレス304−Uの値を超えていた場合、比較器704からは、ロウレベルの比較結果信号704−Rが出力され、比較器700および705からは、ハイレベルの比較結果信号700−Rおよび705−Rが出力されることになる。その結果、セキュアプログラム分岐許可領域信号702およびセキュアプログラム領域信号707のそれぞれは、ロウレベルとなり、ノンセキュアプログラム領域信号709はハイレベルとなる。これにより、フリップフロップ回路703のクリア端子には、ハイレベルが供給されるため、フリップフロップ回路703の出力端子はロウレベルとなり、ロウレベルのセキュアデータアクセス許可信号302が、メモリアクセス制御回路303に供給されることになる。
PCアドレス306の値が、上限アドレス304−Uの値以下であって、(上限アドレス−4)の値以上の場合には、比較器700、704および705のそれぞれから、ハイレベルの比較結果信号700−R、704−Rおよび705−Rが出力されることになる。その結果、セキュアプログラム分岐許可領域信号702およびセキュアプログラム領域信号707のそれぞれは、ハイレベルとなり、ノンセキュアプログラム領域信号709はロウレベルとなる。これにより、フリップフロップ回路703のセット端子には、ハイレベルが供給されるため、フリップフロップ回路703の出力端子はハイレベルとなり、ハイレベルのセキュアデータアクセス許可信号302が、メモリアクセス制御回路303に供給されることになる。
メモリアクセス制御回路303は、セキュアデータアクセス許可信号302が、ハイレベルとなることにより、マイクロプロセッサCPUがメモリをアクセスするのを許可する。すなわち、メモリアクセス制御回路303は、このときのPCアドレス306を、メモリへ供給し、メモリとマイクロプロセッサCPUとの間でデータの送受信が可能となるようにする。そのため、セキュアプログラム分岐許可領域信号702がハイレベルとなることにより、マイクロプロセッサCPUからのPCアドレス306が、メモリに供給され、メモリとの間でデータの送受信が可能とされる。
一方、PCアドレス306の値が、(上限アドレス−4)の値未満であって、下限アドレス304−Dの値以上の場合には、比較器700からの比較結果信号700−Rはロウレベルとなり、比較器704および705のそれぞれからは、ハイレベルの比較結果信号704−Rおよび705−Rが出力されることになる。その結果、セキュアプログラム分岐許可領域信号702およびノンセキュアプログラム領域信号709のそれぞれは、ロウレベルとなり、セキュアプログラム領域信号707は、ハイレベルとなる。これにより、フリップフロップ回路703のセット端子およびクリア端子には、ロウレベルが供給されるため、フリップフロップ回路703の出力端子は、以前の状態を維持することになり、以前の状態がハイレベルであれば、ハイレベルのセキュアデータアクセス許可信号302が、メモリアクセス制御回路303に供給され続け、以前の状態がロウレベルであれば、ロウレベルのセキュアデータアクセス許可信号302が、メモリアクセス制御回路303に供給され続けることになる。フリップフロップ回路703によって、以前の状態が維持(保持)されるため、フリップフロップ回路703は、保持回路と見なすことができる。
メモリアクセス制御回路303は、セキュアデータアクセス許可信号302がロウレベルのとき、マイクロプロセッサCPUからメモリへのアクセスを禁止する。すなわち、PCアドレス306が、メモリへ伝達されるのを禁止する。これにより、マイクロプロセッサCPUとメモリとの間のデータの送受信を禁止されることになる。
ノンセキュアプログラムからセキュアプログラムへ分岐する際、ノンセキュアプログラムにおいて、マイクロプロセッサCPUのPCアドレス306の値は、開始アドレス(図5)に設定される。この場合、開始アドレスは、上限アドレス304−Uと(上限アドレス−4)の間の分岐許可領域BAA内のアドレスである。マイクロプロセッサCPUのPCアドレスが、この分岐許可領域内を指定している場合には、上記したように、セキュアプログラム分岐許可領域信号702がハイレベルとなり、セキュアデータアクセス許可信号302がハイレベルとなる。その結果、マイクロプロセッサCPUのPCアドレス306は、メモリアクセス制御回路303を介して、メモリへ伝達され、分岐許可領域BAAに格納されていた命令が、マイクロプロセッサCPUによって読み出され、実行される。
これに対して、ノンセキュアプログラムが、例えばハッキングプログラムの場合、ハッキングプログラムからセキュアプログラムへ分岐する際、ハッキングプログラムにおいて、マイクロプロセッサCPUのPCアドレス306の値は、開始アドレス(図5)以外のアドレスに設定される。すなわち、PCアドレス306の値は、(上限アドレス−4)と下限アドレス304−Dとの間を指定することになる。この場合、セキュアプログラム分岐許可領域信号702はロウレベルとなり、セキュアプログラム領域信号707はハイレベルとなり、ノンセキュアプログラム領域信号709はロウレベルとなる。
セキュアプログラム分岐許可領域信号702およびノンセキュアプログラム領域信号709がロウレベルとなることによって、フリップフロップ回路703の出力端子(Q)の電圧は、以前の電圧が維持される。ノンセキュアプログラムからの分岐であるため、以前の状態はノンセキュアプログラムを実行していたときの状態となる。ノンセキュアプログラムを実行していたときには、ノンセキュアプログラム領域信号709が、ハイレベルとなる。そのため、以前の状態では、フリップフロップ回路703の出力端子(Q)は、ロウレベルである。その結果、ハッキングプログラムにおいて、分岐禁止領域BPAへ分岐しようとした場合には、ロウレベルのセキュアデータアクセス許可信号302が継続して出力されることになる。メモリアクセス制御回路303は、セキュアデータアクセス許可信号302が継続してロウレベルとなることにより、マイクロプロセッサCPUからメモリ内の分岐禁止領域へのアクセスが禁止される。
この実施の形態1では、セキュアプログラム領域が、比較器700、704および705によって、分岐許可領域BAAと分岐禁止領域BPAに分けられる。ノンセキュアプログラムからセキュアプログラムに分岐する際に、PCアドレス306によって表される分岐先アドレスが分岐許可領域BAA内を指定していれば、マイクロプロセッサCPUによるメモリへのアクセスが許可される。これに対して、PCアドレス306によって表される分岐先アドレスが分岐禁止領域BPA内を指定していれば、マイクロプロセッサCPUによるメモリへのアクセスが禁止される。これにより、セキュアプログラム、セキュアデータをアタックから保護することが可能となる。
この実施の形態1において、分岐許可領域BAAは、上限アドレス304−Uの値(分岐許可領域上限アドレス)と(上限アドレス−4)の値(分岐許可領域下限アドレス)との間のプログラム領域である。また、分岐禁止領域はBPA、下限アドレス304−Dの値(分岐禁止領域下限アドレス)と(上限アドレス−5)の値(分岐禁止領域上限アドレス)との間のプログラム領域である。また、この実施の形態1では、特に制限されないが、開始アドレス(図5)に格納される1個の1ワード命令が、4バイトによって構成されている。そのため、分岐許可領域下限アドレスが、分岐許可領域BAAの上限アドレスに対して4バイト小さくなるように、上限アドレス304−Uから4を減算したアドレスとしている。しかしながら、これに限定されるものではなく、セキュアプログラムの用途等によって、分岐許可領域BAAのサイズは決定してもよい。
また、フリップフロップ回路703は、非同期式のフリップフロップ回路を例として示したが、マイクロプロセッサCPUからメモリへのアクセスにタイミング的に余裕があれば、同期式のフリップフロップ回路を用いるようにしてもよいが、タイミング的に余裕が少ない場合には、非同期式のフリップフロップ回路を用いることが望ましい。
ここでは、3個の比較器700、704および705を用いる例を示したが、これに限定されるものではない。例えば、フェッチアドレス比較回路301とフェッチ開始アドレス監視回路300のそれぞれに、2個の比較器を用いるようにしてもよい。この場合、フェッチ開始アドレス監視回路300に、比較器704と同様な比較器を第4の比較器として設けるようにすればよい。第4の比較器で比較する上限アドレスを比較器704で比較する上限アドレスとは異なるアドレスにすることにより、分岐許可領域BAAを任意に設定できるようにしてもよい。
しかしながら、フェッチアドレス比較回路301およびフェッチ開始アドレス監視回路300において、PCアドレス306と比較するアドレスとして、上限アドレス304−Uまたは下限アドレス304−Dを共通とすることにより、比較器の個数を低減することが可能となる。この場合、上限アドレス304−U(または下限アドレス304−D)を基準として、許可アドレス情報によって分岐許可領域BAAを定めればよい。この実施の形態1では、上限アドレス304−Uを基準として、許可アドレス情報が−4とされ、分岐許可領域BAAの下限アドレスが、(上限アドレス−4)と定められている。
<メモリプロテクションユニットの動作>
次に、ノンセキュアプログラムからセキュアプログラムへ分岐するときの動作を、図7〜図10を用いて説明する。先ず、ノンセキュアプログラムがハッキングプログラムではなく、正常にノンセキュアプログラムからセキュアプログラムへ分岐する場合を説明する。
<<ノンセキュアプログラムからセキュアプログラムへの分岐>>
図8(A)〜(D)は、実施の形態1に係わるメモリプロテクションユニット204の動作を示すタイミング図である。図8は、正常にノンセキュアプログラムからセキュアプログラムへ分岐する場合を示している。
時刻t0まで、マイクロプロセッサCPUは、ノンセキュアプログラム領域でノンセキュアプログラムを実行している。すなわち、PCアドレス306は、図7(B)に示したセキュアプログラム領域ではなく、ノンセキュアプログラム領域内を指定している。そのため、時刻t0までは、比較器704または705(図7(A))からの比較結果信号704−Rまたは705−Rはロウレベルとなる。これにより、セキュアプログラム領域信号707はロウレベルとなり、ノンセキュアプログラム領域信号709はハイレベルとなっている。また、比較結果信号704−Rまたは700−Rがロウレベルとなるため、セキュアプログラム分岐許可領域信号702もロウレベルとなっている。
ノンセキュアプログラム領域信号709がハイレベルとなっているため、フリップフロップ回路703のクリア端子(clear)にハイレベルが供給されることになる。フリップフロップ回路703のセット端子(set)にはロウレベルが供給されているが、クリア端子にハイレベルが供給されているため、セキュアデータアクセス許可信号302はロウレベルとなる。
時刻t0で、マイクロプロセッサCPUは、ノンセキュアプログラムにおける分岐命令を実行する。このとき実行する分岐命令が、セキュアプログラムへの分岐を指示する分岐命令である。特に制限されないが、このとき分岐先アドレスを指定するアドレス情報が、実行しているノンセキュアプログラムにおいて、マイクロプロセッサCPUに与えられる。マイクロプロセッサCPUは、与えられたアドレス情報に従って、PCアドレス306を設定する。ここでは、図5に示した開始アドレスが、PCアドレス306に設定される(図8(A))。開始アドレスは、分岐許可領域BAA内を指定するアドレスであるため、比較結果信号700−R、704−Rおよび705−Rのそれぞれがハイレベルとなる。これにより、セキュアプログラム領域信号707はハイレベルになり、ノンセキュアプログラム領域信号709はロウレベルとなり、セキュアプロクラム分岐許可領域信号702はハイレベルとなる(図8(C)、図8(B))。
セキュアプログラム分岐許可領域信号702がハイレベルとなることにより、フリップフロップ回路703の出力端子(Q)はハイレベルとなる。このとき、フリップフロップ回路703のクリア端子にはロウレベルが供給されているため、フリップフロップ回路703は、ハイレベルを出力する。これにより、セキュアデータアクセス許可信号302はハイレベルへ変化する(図8(D))。セキュアデータアクセス許可信号302がハイレベルとなることにより、メモリアクセス制御回路303(図3)は、マイクロプロセッサCPUからメモリへのアクセスを許可する。
時刻t1で、マイクロプロセッサCPUは、分岐許可領域BAAに格納されている命令(例えば、図5の命令Ex−A)の実行を完了し、時刻t1から時刻t2の間で、セキュアプログラムの残りの命令を実行する。残りの命令を実行するために、PCアドレス306は、時刻t1から時刻t2の間、分岐禁止領域BPA内を指定するアドレスを順次出力する。図5を例にして述べると、時刻t1から時刻t2の間で、所定の処理に関する命令Ex−B〜Ex−Pと、レジスタ等の復帰に関する命令Ex−Zを実行するために、PCアドレス306は、順次更新される。
これらの命令は、セキュアプログラム領域に配置されており、分岐禁止領域BPAに配置されている。そのため、時刻t1において、時刻t1から時刻t2の間、比較器700からはロウレベルの比較結果信号700−Rが出力されることになる。しかしながら、これらの命令は、セキュアプログラム領域に配置されているため、比較器704および705のそれぞれの比較結果信号704−Rおよび705−Rはハイレベルを維持することになる。
時刻t1において、比較結果信号700−Rがロウレベルとなることにより、セキュアプログラム分岐許可領域信号702はロウレベルへ変化する。これにより、フリップフロップ回路703のセット端子(set)には、ロウレベルが供給されることになる。一方、比較結果信号704−Rおよび705−Rは、ハイレベルを維持しているため、ノンセキュアプログラム領域信号709はロウレベルを維持している。そのため、フリップフロップ回路703のクリア端子(clear)には、継続してロウレベルが供給されることになる。クリア端子(clear)がロウレベルのため、フリップフロップ回路703は、その出力端子(Q)がハイレベルの状態を維持(保持)することになる。この結果、セキュアデータアクセス許可信号302も、時刻t1から時刻t2の間、ハイレベルを維持することになる。セキュアデータアクセス許可信号302がハイレベルとなっているため、メモリアクセス制御回路303は、時刻t1から時刻t2の間も、マイクロプロセッサCPUが、メモリをアクセスすることを許可し続ける。
時刻t2において、セキュアプログラムの実行が完了すると、セキュアプログラムからノンセキュアプログラムへ復帰する。すなわち、PCアドレス306は、分岐禁止領域BPAから、ノンセキュアプログラム領域内を指定するアドレスに変わる。セキュアプログラム領域から、ノンセキュアプログラム領域内を指定するアドレスに、PCアドレス306が変化するため、時刻t2において、比較器704または705の比較結果信号704−Rまたは705−Rがロウレベルへ変化する。その結果、ノンセキュアプログラム領域信号709は、ハイレベルへ変化する。これにより、フリップフロップ回路703のクリア端子(clear)にハイレベルが供給され、フリップフロップ回路703の出力端子(Q)の電圧は、ロウレベルへ変化し、セキュアデータアクセス許可信号302もロウレベルへ変化する。セキュアデータアクセス許可信号302がロウレベルとなることによって、メモリアクセス制御回路303は、マイクロプロセッサCPUが、メモリのセキュアプログラム領域およびセキュアデータ領域をアクセスするのを禁止する。
フリップフロップ回路703に注目して述べると、マイクロプロセッサCPUからのアドレス(PCアドレス306)が、ノンセキュアプログラム領域を示すまでは、その出力端子(Q)はハイレベル(所定の状態)に維持され、メモリへのアクセスが許可されることになる。
このようにして、ノンセキュアプログラムから、セキュアプログラムへ分岐して、セキュアプログラムを実行することが可能となる。すなわち、ノンセキュアプログラムから、RTOSを構成するセキュアプログラムを呼び出して、利用することが可能となる。
<<ハッキングプログラムからセキュアプログラムへの分岐>>
次に、ハッキングプログラムからセキュアプログラムへ分岐する場合を説明する。この場合、ハッキングプログラムは、ノンセキュアプログラム領域で動作している。図9(A)〜(D)は、実施の形態1に係わるメモリプロテクションユニットの動作を示すタイミング図である。図9は、ハッキングプログラムからセキュアプログラムへ分岐する場合を示している。なお、図9(B)および(D)において、破線は、図8で説明した状態を示している。すなわち、正常に、ノンセキュアプログラムからセキュアプログラムを呼び出したときの状態を示している。
時刻t0までは、図8と同じであるため、詳しい説明は省略するが、時刻t0までは、ノンセキュアプログラムが実行されているため、ノンセキュアプログラム領域信号709がハイレベルとなっている。そのため、フリップフロップ回路703の出力端子(Q)はロウレベルの状態となっており、セキュアデータアクセス許可信号302もロウレベルとなっている。
時刻t0で、マイクロプロセッサCPUは、ハッキングプログラム(ノンセキュアプログラム)における分岐命令を実行する。このとき実行する分岐命令が、セキュアプログラムの所定の分岐先アドレスへの分岐を指示する分岐命令である。特に制限されないが、このとき所定の分岐先アドレスを指定するアドレス情報は、実行しているハッキングプログラムにおいて、マイクロプロセッサCPUに与えられる。マイクロプロセッサCPUは、与えられたアドレス情報に従って、PCアドレス306を設定する。ハッキングプログラムでは、例えば図5に示した分岐先アドレスが、PCアドレス306に設定される(図9(A))。分岐先アドレスは、開始アドレスと異なり、例えばセキュアプログラムを構成する一連の命令列において、途中の命令が格納されているアドレスである。図5の例では、一連の命令列(命令Ex−B〜Ex−P)のうちの途中のストア命令(Ex−S)が格納されているアドレスが、分岐先アドレスとされている。
この分岐先アドレスは、分岐禁止領域BPAを指定するアドレスであるため、比較結果信号700−Rはロウレベルとなり、比較結果信号704−Rおよび705−Rはハイレベルとなる。比較結果信号704−Rおよび705−Rがハイレベルとなるため、セキュアプログラム領域信号707はハイレベルになり、ノンセキュアプログラム領域信号709はロウレベルとなる。一方、比較結果信号700−Rがロウレベルとなるため、セキュアプロクラム分岐許可領域信号702もロウレベルとなる(図9(C)、図9(B))。
セキュアプログラム分岐許可領域信号702およびノンセキュアプログラム領域信号709のそれぞれが、ロウレベルとなることにより、フリップフロップ回路703のセット端子(set)およびクリア端子(clear)には、ロウレベルが供給されることになる。そのため、フリップフロップ回路703の出力端子(Q)は、時刻t0までの状態を継続して出力する。すなわち、フリップフロップ回路703の出力端子(Q)はロウレベルを継続して出力する。これにより、セキュアデータアクセス許可信号302は、図8(D)で説明したように、ハイレベル(図9(D)の破線)へは変化せず、ロウレベルを維持することになる。セキュアデータアクセス許可信号302がロウレベルであるため、メモリアクセス制御回路303(図3)は、マイクロプロセッサCPUからメモリのセキュアプログラム領域およびセキュアデータ領域へのアクセスを禁止する。
時刻t1において、マイクロプロセッサCPUによるセキュアプログラム領域へのアクセスが、メモリアクセス制御回路303によって禁止されるため、セキュアプログラム領域において分岐先アドレスによって指定される命令(図5では、命令Ex−S)は、読み出されず、この命令は、マイクロプロセッサCPUによって実行されない。図9の例では、マイクロプロセッサCPUが、時刻t1から時刻t2の間、セキュアプログラム領域を指定するPCアドレス306を継続して出力している。PCアドレス306が、セキュアプログラム領域を指定している期間では、セキュアプログラム領域信号707がハイレベルを継続し、図9(C)に示すようにノンセキュアプログラム領域信号709はロウレベルを継続する。そのため、時刻t1から時刻t2の期間においても、フリップフロップ回路703は、その出力端子(Q)は、図9(D)に破線で示すようにハイレベルには変化せず、ロウレベルを維持する。すなわち、セキュアデータアクセス許可信号302はロウレベルを維持する。
セキュアデータアクセス許可信号302がロウレベルを維持するため、時刻t1から時刻t2の期間においても、マイクロプロセッサCPUによるセキュアプログラム領域およびセキュアデータ領域へのアクセスは、メモリアクセス制御回路303によって禁止されることになる。
図9の例では、時刻t2において、マイクロプロセッサCPUは、ノンセキュアプログラムを実行するように、そのPCアドレス306に格納されているアドレスを変更している。PCアドレス306が、ノンセキュアプログラム領域を指定するアドレスに変更されることにより、比較結果信号704−Rまたは705−Rが、ハイレベルからロウレベルへ変化する。これにより、セキュアプログラム領域信号707はハイレベルからロウレベルへ変化し、ノンセキュアプログラム領域信号709は、ロウレベルからハイレベルへ変化する。
ノンセキュアプログラム領域信号709が、ハイレベルとなることによって、フリップフロップ回路703は、出力端子(Q)をロウレベルにする。時刻t2まで、出力端子(Q)はロウレベルであったため、フリップフロップ回路703は、出力端子(Q)から継続してロウレベルを出力すると見なすことができる。すなわち、セキュアデータアクセス許可信号302は、時刻t2以降も、ロウレベルとなる。
メモリアクセス制御回路303は、セキュアデータアクセス許可信号302がロウレベルとなっているが、PCアドレス306が、ノンセキュアプログラム領域内を指定しているため、マイクロプロセッサCPUによるノンセキュアプログラム領域およびノンセキュアデータ領域へのアクセスを許可する。
その結果、ノンセキュアプログラムに関する命令は実行することが可能となる。勿論、ハッキングプログラムにおいて、セキュアプログラムへの分岐命令の後に、ノンセキュアプログラムの命令が配置されている場合、セキュアプログラムへの分岐命令の後に配置されているノンセキュアプログラムの命令を実行しないように制限してもよい。例えばノンセキュアプログラム領域信号709がロウレベルへ変化するタイミングで、セキュアプログラム分岐許可領域信号702をサンプリングし、サンプリングしたセキュアプログラム分岐許可領域信号702がロウレベルであれば、時刻t2以降は、メモリアクセス制御回路303が、マイクロプロセッサCPUによるノンセキュアプログラム領域およびノンセキュアデータ領域へのアクセスも禁止するようにすればよい。
このように、ハッキングプログラムによって、セキュアデータ(セキュアプログラムを含む)へのアクセスが禁止されるため、ハッキングプログラムによるアタックから、セキュアデータを保護することが可能となる。ここでは、ハッキングプログラムを例にして説明したが、ノンセキュアプログラムの不備によって、誤ってセキュアデータが読み出されてしまうのも防ぐことが可能となる。
<<メモリプロテクションユニットの動作>>
図10は、実施の形態1に係わるメモリプロテクションユニット204の動作を示す表である。図10は、分岐の際のメモリプロテクションユニット204の動作を示している。図10において、BSA、BDAおよびBOPは、表の列を示している。ここで、列BSAは、分岐元アドレスを示し、列BDAは、分岐先アドレスを示し、列BOPは、分岐の際の制御を示している。
メモリプロテクションユニット204は、分岐元アドレスを、3個に分けて制御する。すなわち、分岐するとき、分岐元が「(1)ノンセキュアプログラム領域」であるか、「(2)セキュアプログラム分岐許可領域」であるか、あるいは「(3)セキュアプログラム分岐禁止領域」であるかに分けて制御する。言い換えるなら、分岐を実行するとき、分岐命令が「(1)ノンセキュアプログラム領域」に配置されているか、「(2)セキュアプログラム分岐許可領域」に配置されているか、あるいは「(3)セキュアプログラム分岐禁止領域」に配置されているかに分けて制御する。なお、図10において、セキュアプログラム分岐許可領域とは、分岐許可領域BAAを表しており、セキュアプログラム分岐禁止領域とは、分岐禁止領域BPAを表している。
メモリプロテクションユニット204は、図8および図9に示した時刻t0のとき、「(1)ノンセキュアプログラム領域」の制御を行う。また、メモリプロテクションユニット204は、図8において時刻t0から時刻t2の期間は、「(2)セキュアプログラム分岐許可領域」および「(3)セキュアプログラム分岐禁止領域」の制御を行う。
メモリプロテクションユニット204は、列BSAに示した分岐元アドレスが、「ノンセキュアプログラム領域」、「セキュアプログラム分岐許可領域」および「セキュアプログラム分岐禁止領域」のそれぞれに対して、列BDAに示した分岐先アドレスも、3個に分けて制御する。すなわち、分岐するとき、分岐先が、「ノンセキュアプログラム領域」であるか、「セキュアプログラム分岐許可領域」であるか、あるいは「セキュアプログラム分岐禁止領域」に分けて制御する。この場合も、分岐命令を実行した際の分岐先の命令が、「ノンセキュアプログラム領域」に配置されているか、「セキュアプログラム分岐許可領域」に配置されているか、あるいは「セキュアプログラム分岐禁止領域」に配置されているかに分けて制御されていると見なすことができる。
列BOPは、分岐の際の制御を示しており、図10には、分岐の際のセキュアデータ領域に関する制御が示されている。ここでのセキュアデータ領域は、セキュアプログラム領域およびセキュアデータ領域の両方を意味している。セキュアデータ領域に関する制御は、3種類存在する。すなわち、メモリアクセス制御ユニット303が、マイクロプロセッサCPUに対して、セキュアデータ領域に対するアクセスを許可するセキュアデータアクセス許可状態、セキュアデータ領域に対するアクセスを禁止するセキュアデータアクセス禁止状態および分岐前の動作状態を維持する維持状態である。ここで維持状態とは、分岐前が、セキュアデータアクセス許可状態であれば、セキュアデータアクセス許可状態を維持することを意味し、分岐前が、セキュアデータアクセス禁止状態であれば、セキュアデータアクセス禁止状態を維持することを意味する。
メモリプロテクションユニット204は、分岐元アドレスが、列BSAの「(1)セキュアプログラム領域」の場合、分岐先アドレスが、この「(1)セキュアプログラム領域」と同じ行に記載した3個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御(列BOPに記載した制御)を実行する。同様に、分岐元アドレスが、列BSAの「(2)セキュアプログラム分岐許可領域」の場合、分岐先アドレスが、この「(2)セキュアプログラム分岐許可領域」と同じ行に記載した3個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御(列BOPに記載した制御)を実行する。また、分岐元アドレスが、列BSAの「(3)セキュアプログラム分岐禁止領域」の場合、分岐先アドレスが、この「(3)セキュアプログラム分岐禁止領域」と同じ行に記載した3個の分岐先アドレスのいずれかを判定し、判定した分岐先アドレスに対応する制御(列BOPに記載した制御)を実行する。
次に、図7から図9を用いて、図10に示したメモリプロテクションユニット204の動作を説明する。
ユーザープログラムU−APは、例えば複数のノンセキュアプログラムによって構成され、それぞれのノンセキュアプログラムは、ノンセキュアプログラム領域に配置されている。ノンセキュアプログラムであるユーザープログラムU−APが、RTOSのようなセキュアプログラムを利用する場合、図8および図9で説明したように、ノンセキュアプログラム領域からセキュアプログラムへ分岐することになる。
ノンセキュアプログラム領域からの分岐であるため、メモリプロテクションユニット204は、分岐元が「(1)ノンセキュアプログラム領域」であると判定する。すなわち、ユーザープログラムU−APからRTOSのプログラムを呼び出す(分岐する)場合(時刻t0)には、メモリプロテクションユニット204は、分岐元が「(1)ノンセキュアプログラム領域」であると判定する。
次に、メモリプロテクションユニット204内のメモリアクセス制御回路303は、図7、図8および図9で説明したノンセキュアプログラム領域信号709が、ロウレベルか否かを判定する。ノンセキュアプログラム領域信号709がハイレベルであれば、分岐先は、「ノンセキュアプログラム領域」であると判定し、メモリアクセス制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域へアクセスするのを禁止する(列BOPにおいて「セキュアデータアクセス禁止」)。この場合、図10には記載していないが、メモリアクセス制御回路303は、マイクロプロセッサCPUによって、ノンセキュアデータ領域へのアクセスは許可する。これにより、ユーザープログラムにおいて、所定のノンセキュアプログラムから別のノンセキュアプログラムへの分岐が可能となる。なお、図3および図7では、図面が複雑になるのを避けるために、ノンセキュアプログラム領域信号709を、メモリアクセス制御回路303へ供給する信号配線は省略されている。
ノンセキュアプログラム領域信号709がロウレベルとなっている場合、図8および図9の時刻t0で説明したように、セキュアプログラム分岐許可領域信号702の電圧(ハイレベルまたはロウレベル)に従って、セキュアデータアクセス許可信号302は、ハイレベルまたはロウレベルとなる。メモリアクセス制御回路303は、ノンセキュアプログラム領域信号709がロウレベルで、図8に示すようにセキュアデータアクセス許可信号302がハイレベルであれば、分岐先アドレス(列BDA)は、「セキュアプログラム分岐許可領域」であると判定し、マイクロプロセッサCPUによるセキュアデータ領域へのアクセスを許可する(「セキュアデータアクセス許可」)。
これに対して、ノンセキュアプログラム領域信号709がロウレベルで、図9に示すようにセキュアデータアクセス許可信号302がロウレベルであれば、分岐先アドレス(列BDA)は、「セキュアプログラム分岐禁止領域」であると判定し、分岐前の動作状態を維持する状態となる。図9の時刻t0で説明したように、フリップフロップ回路703の出力端子(Q)は、時刻t0よりも前の状態を維持している。この場合、前の状態は、セキュアデータのアクセスを禁止する状態である。そのため、この場合には、マイクロプロセッサCPUによるセキュアデータ領域へのアクセスを禁止する状態が維持される。図9の場合には、時刻t0から時刻t2の期間も、この状態が維持されることになる。
時刻t0において、分岐先アドレスが、「セキュアプログラム分岐許可領域」と判定された場合、時刻t0から時刻t2の期間においては、メモリプロテクションユニット204は、「(2)セキュアプログラム分岐許可領域」または「(3)セキュアプログラム分岐禁止領域」の制御を実行する。
先ず、マイクロプロセッサCPUは、時刻t0から時刻t1の期間において、セキュア分岐許可領域に配置された命令を実行する。このとき、実行する命令が分岐命令であった場合には、「(2)セキュア分岐許可領域」の制御を実行する。すなわち、この期間において実行する分岐命令の分岐先アドレスが、「ノンセキュアプログラム領域」であれば、ノンセキュアプログラム領域信号709がロウレベルとなる。これにより、メモリアクセス制御回路303は、マイクロプロセッサCPによるセキュアデータ領域へのアクセスを禁止する(セキュアデータアクセス禁止)。この場合、図7に示したフリップフロップ回路703の出力端子(Q)が、ロウレベルへクリアされるため、ノンセキュアプログラムから再びセキュアプログラムを利用するためには、ノンセキュアプログラムにおいて、セキュアプログラム分岐許可領域を指定する分岐命令を実行することが、要求される。
時刻t0から時刻t1において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐許可領域」を指定していれば、セキュアプログラム分岐許可領域信号702がハイレベルとなる。これにより、図7に示したフリップフロップ回路703の出力端子(Q)は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号302は、ハイレベルとなり、メモリアクセス制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域をアクセスすることを許可する(セキュアデータアクセス許可)。
時刻t0から時刻t1において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐禁止領域」を指定していれば、図8で説明したように、セキュアプログラム分岐許可領域信号702はロウレベルとなるが、ノンセキュアプログラム領域信号709は、ロウレベルに維持される。そのため、図8で説明したように、フリップフロップ703の出力端子(Q)の電圧は、ハイレベルに維持されることになる。すなわち、分岐する前の状態が維持される。この結果、メモリアクセス制御回路303は、分岐前の動作状態を維持することになる。この場合、分岐前の動作状態は、セキュアデータアクセス許可の状態であったため、マイクロプロセッサCPUによってセキュアデータ領域へのアクセス許可の状態が継続されることになる。
これにより、図7に示したフリップフロップ回路703の出力端子(Q)は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号302は、ハイレベルとなり、メモリ制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域をアクセスすることを許可する(セキュアデータアクセス許可)。
時刻t0から時刻t1の期間において、「セキュアプログラム分岐禁止領域」を分岐先アドレスとした分岐命令を実行した場合、マイクロプロセッサCPUは、図8において時刻t1から時刻t2として示した期間で動作することになる。この場合、マイクロプロセッサCPUは、セキュアプログラム分岐禁止領域に格納されているセキュアプログラムを実行することになる。言い換えるならば、この期間において、マイクロプロセッサCPUが実行する分岐命令は、分岐元アドレスが、「(3)セキュアプログラム分岐禁止領域」となる。
分岐元アドレスが、「(3)セキュアプログラム分岐禁止領域」となっているとき、すなわち、図9において時刻t1から時刻t2の期間、マイクロプロセッサCPUは、セキュア分岐禁止領域に配置された命令を実行する。この期間において、実行する命令が分岐命令であり、その分岐先アドレスが、「ノンセキュアプログラム領域」であれば、ノンセキュアプログラム領域信号709がロウレベルとなる。これにより、メモリアクセス制御回路303は、マイクロプロセッサCPによるセキュアデータ領域へのアクセスを禁止する(セキュアデータアクセス禁止)。この場合、図7に示したフリップフロップ回路703の出力端子(Q)が、ロウレベルへクリアされるため、ノンセキュアプログラムから再びセキュアプログラムを利用するためには、ノンセキュアプログラムにおいて、セキュアプログラム分岐許可領域を指定する分岐命令を実行することが、要求される。
時刻t1から時刻t2において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐許可領域」を指定していれば、セキュアプログラム分岐許可領域信号702がハイレベルとなる。これにより、図7に示したフリップフロップ回路703の出力端子(Q)は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号302は、ハイレベルとなり、メモリアクセス制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域をアクセスすることを許可する(セキュアデータアクセス許可)。
時刻t1から時刻t2において実行される分岐命令の分岐先アドレスが、「セキュアプログラム分岐禁止領域」を指定していれば、図8で説明したように、セキュアプログラム分岐許可領域信号702はロウレベルとなるが、ノンセキュアプログラム領域信号709は、ロウレベルに維持される。そのため、図8で説明したように、フリップフロップ703の出力端子(Q)の電圧は、ハイレベルに維持されることになる。すなわち、分岐する前の状態が維持される。この結果、メモリアクセス制御回路303は、分岐前の動作状態を維持することになる。この場合、分岐前の動作状態は、セキュアデータアクセス許可の状態であったため、マイクロプロセッサCPUによってセキュアデータへのアクセス許可の状態が継続されることになる。
これにより、図7に示したフリップフロップ回路703の出力端子(Q)は、ハイレベルにセットされる。その結果、セキュアデータアクセス許可信号302は、ハイレベルとなり、メモリアクセス制御回路303は、マイクロプロセッサCPUが、セキュアデータ領域をアクセスすることを許可する(セキュアデータアクセス許可)。
なお、図8および図9においては、時刻t2で、ノンセキュアプログラムを実行している。図8の例では、「(3)セキュアプログラム分岐禁止領域」の制御において、分岐先アドレスが、「ノンセキュアプログラム領域」を指定した場合の動作となる。また、図9の例では、「(1)ノンセキュアプログラム領域」の制御において、分岐先アドレスを「ノンセキュアプログラム領域」を指定した場合の動作となる。このいずれの場合においても、メモリアクセス制御回路303によって、マイクロプロセッサCPUが、セキュアデータ領域をアクセスすることは禁止され、ノンセキュアデータ領域のアクセスは許可されることになる。
メモリアクセス制御回路303へノンセキュアプログラム領域信号709を、図示しない信号配線で供給する例を説明したが、これに限定されるものではない。例えば、メモリアクセス制御回路303へセキュアプログラム領域信号707を、図示しない信号配線で供給するようにしてもよい。
上記したように、この実施の形態1においては、ノンセキュアプログラムからセキュアデータ領域へのアクセスを許可するのは、ノンセキュアプログラムにおける分岐命令の分岐先アドレスが、セキュアプログラム分岐許可領域(分岐許可領域BAA)を指定しているときである。これにより、マイクロプロセッサCPUを操作することが可能なノンセキュアプログラムを、任意に作成することができるようにしても、RTOSのようなセキュアプログラムを、ハッキングプログラムによるアタックから保護することが可能となる。
また、セキュアプログラム分岐禁止領域で、セキュアプログラム分岐禁止領域を分岐先アドレスとした分岐命令を実行する場合、セキュアデータ領域へのアクセスの許可/禁止は、分岐命令を実行する前の状態が維持される。これにより、セキュアプログラム分岐禁止領域に配置されたセキュアプログラムにおいて、セキュアプログラム分岐禁止領域を分岐先とした分岐命令を実行したときでも、マイクロプロセッサCPUは、セキュアデータ領域へアクセスすることが可能となる。その結果、RTOSのようなセキュアプログラムにおいて、所定のサブルーチンから他のサブルーチンを呼び出す(分岐する)場合があっても、ユーザープログラムU−APからRTOSを有効に利用することが可能となる。
なお、セキュアデータ領域へのアクセスを禁止するのは、分岐命令の分岐先アドレスが、ノンセキュアプログラム領域を指定するときである。
<変形例>
図11は、実施の形態1に係わる変形例を示す説明図である。図11は、図6と類似しているので、図6との相違点を主に説明する。
図6と同様に、フラッシュメモリFRMは、ノンセキュアプログラム領域とセキュアプログラム領域とを備えており、揮発性メモリ203は、ノンセキュアデータ領域とセキュアデータ領域とを備えている。ここで、セキュアプログラム領域には、セキュリティが担保されるべきプログラムが格納され、セキュアデータ領域にも、セキュリティが担保されるべきデータが格納される。ノンセキュアプログラム領域、ノンセキュアデータ領域およびセキュアデータ領域は、図6と同じであるため、説明は省略する。
この変形例においても、セキュアプログラム領域は、分岐許可領域BAAと分岐禁止領域BPAに分けられている。例えば、図7で説明したように、セキュアプログラム上限アドレス304−Uとセキュアプログラム下限アドレス304−Dによって指定されたフラッシュメモリFRMの領域の範囲内が、セキュアプログラム領域となり、セキュアプログラム領域を除くフラッシュメモリFRMの領域が、ノンセキュアプログラム領域となる。また、分岐許可領域BAAは、図7で示した(上限アドレス−4)と上限アドレス304−Uとの間の範囲となり、分岐禁止領域BPAは、図7で示した(上限アドレス−5)と下限アドレス304−Dとの間の範囲となる。
変形例においては、分岐許可領域BAAに所定の分岐命令BRIが配置される。また、分岐禁止領域BPAには、入力情報チェック用のチェックプログラムCHK、実行プログラム選択用の選択プログラムEXSおよび複数のプログラムPRG1〜PRGnが格納されている。プログラムPRG1〜PRGnは、互いに異なる機能を実現するプログラムであって、図11には、一例として3個のプログラムPRG1〜PRG3が例示されている。
ノンセキュアプログラム領域に配置されたノンセキュアプログラムから、セキュアプログラム領域に配置されたセキュアプログラムへ分岐するノンセキュアプログラムは、例えばノンセキュアデータ領域の所定の領域に、プログラムPRG1〜PRGnのうち、実行すべきプログラムを選択する選択情報を格納する命令と、分岐許可領域BAA内を分岐先アドレスとした分岐命令とを備えている。マイクロプロセッサCPUが、このノンセキュアプログラムを実行することにより、プログラムPRG1〜PRGnのうち、実行すべきプログラムを指定する選択情報が、ノンセキュアデータ領域の所定の領域に格納された後、PCアドレス306は、分岐可能領域BAA内を指定することになる。
PCアドレス306によって、分岐許可領域BAAに配置された分岐命令BRIのアドレスが指定されると、分岐命令BRIが、マイクロプロセッサCPUによって読み出され、実行される。この分岐命令BRIは、チックプログラムCHKへ分岐する命令である。
分岐命令BRIを実行することにより、次にチェックプログラムCHKが実行されることになる。チェックプログラムCHKにおいて、マイクロプロセッサCPUは、ノンセキュアデータ領域の所定の領域から、選択情報を読み出し、読み出した選択情報が、予期しない選択情報でないかのチェックを行う。例えば、選択情報が、プログラムPRG1〜PRGnを超えるプログラムを指定するような選択情報でないか等のチェックを行う。チェックプログラムCHKによるチェックによって適切な選択情報と判定した場合、次に選択プログラムEXSを実行する。
選択プログラムEXSは、プログラムPRG1〜PRGnのうち、選択情報によって指定されているプログラムを選択し、実行する。これにより、セキュアプログラム領域に配置されている複数のプログラムから、所望のセキュアプログラムを選択して、実行することが可能となる。
図11では、省略されているが、分岐許可領域BAAには、例えばレジスタ等の値を退避する命令が配置されている。また、分岐禁止領域BPAには、レジスタ等の値を復帰する命令が配置されている。
分岐許可領域BAAに、例えば、プログラムPRG1〜PRGnのそれぞれに分岐する分岐命令を複数配置しておくことも可能であるが、この場合には、分岐許可領域BAAのサイズが大きくなる。すなわち、分岐を許可する領域が大きくなり、ハッキングプログラムがアクセスすることが可能な領域が大きくなってしまう。この変形例によれば、分岐許可領域BAAのサイズが大きくなるのを抑制することが可能であり、ハッキングプログラムによってアクセスが可能な領域が大きくなるのを抑制することが可能となる。
この変形例においても、図6と同様に、分岐禁止領域BPAを、分岐先アドレスとしてアクセスされた場合、メモリプロテクションユニット204によって、セキュアデータ領域へのアクセスを禁止することが可能であり、セキュアプログラムPRG1〜PRGnを保護することが可能である。
なお、セキュアプログラムを指定する選択情報を、ノンセキュアデータ領域に格納する例を説明したが、これに限定されるものではない。
実施の形態1によれば、RTOSのようなセキュアプログラムの保護を図りながら、マイクロプロセッサCPUは、セキュアプログラムを実行するとともに、ユーザーが作成したユーザープログラムU−APを実行することができる。すなわち、予めRTOSのプログラムを格納したマイクロコンピュータLSIを提供し、ユーザーが、マイクロコンピュータLSI内のマイクロプロセッサCPUを操作して(動作させて)、RTOSの機能を使うようなユーザープログラムU−APを作成するようにしても、セキュアプログラムであるRTOSのプログラムを保護することができる。その結果、新たな半導体販売モデルにおいても、セキュアプログラム(RTOSのプログラム)が盗まれることを防ぐことが可能となり、販売者のメリットが損なわれるのを防ぐことが可能となる。その結果、新たな半導体販売モデルにより、販売者およびユーザーの双方が、メリットを享受できるようになる。
セキュアプログラムを保護するために、例外割り込みを発生させて、特権モードに移行させることにより、セキュアプログラム領域を形成することが考えられる。しかしながら、この場合には、ノンセキュアプログラム領域に、ハッキングプログラムを展開し、ノイズ等を与え、暴走させることによって特権モードへ移行させることが可能であり、ノイズを利用したハッキングに対して、保護が弱いことが考えられる。
これに対して、実施の形態1におけるメモリプロテクションユニット204は、マイクロプロセッサCPUのPCアドレスを監視して、マイクロプロセッサCPUによるセキュアデータへのアクセスを制御している。そのため、ノイズを利用したハッキングに対して、保護が弱くなるのを防ぐことが可能である。また、ノンセキュアプログラム領域に、ハッキングプログラムを展開し、ハッキングプログラムからセキュアプログラムへの分岐によって行うアタックに対しても、セキュアプログラム領域を分岐許可領域BAAと分岐禁止領域BPAに分けることにより、保護が弱くなるのを抑制している。
その結果、予めRTOSのプログラムを書き込んだマイクロコンピュータLSIを提供し、マイクロコンピュータを購入したユーザーが、RTOSの機能を利用するようなプログラムを作成するようにした場合でも、予め書き込んだセキュアプログラムが盗まれるのを防ぐことが可能となる。
(実施の形態2)
図12は、実施の形態2に係わるフラッシュメモリFRMに格納されるデータの配置を模式的に示した配置図である。
実施の形態2に係わるフラッシュメモリFRMは、複数の領域に分けられている。図12には、フラッシュメモリFRMを構成する複数の領域のうち、ノンセキュアプログラム領域、セキュアプログラム領域および保護情報領域が例示されている。図12において、ノンセキュアプログラム領域は、符号1200で示され、セキュアプログラム領域は、符号1201で示され、保護情報領域は、符号1202で示されている。
この実施の形態2において、セキュアプログラム領域1201には、セキュリティが担保されるべきセキュアプログラムが格納され、ノンセキュアプログラム領域1200には、ノンセキュアプログラムが格納される。保護情報領域1202には、セキュアプログラム領域1201を保護する情報が格納される。
新たな半導体販売モデルでは、図1で説明したように、販売者PRDが、マイクロコンピュータLSIを販売する前に、予めRTOSのようなセキュアプログラムを、マイクロコンピュータLSI内のフラッシュメモリFRMに書き込む。販売者PRDは、RTOSを書き込んだフラッシュメモリFRMの領域を、セキュアプログラム領域1201として設定する。このようにして、セキュアプログラム領域1201に、RTOSのようなセキュアプログラムが書き込まれたフラッシュメモリFRMを備えたマイクロコンピュータLSIが、販売者PRDから販売される。
販売者PRDから、マイクロコンピュータLSIを購入したユーザーUSRは、RTOSを利用して動作するユーザープログラムU−APを作成し、フラッシュメモリFRMのノンセキュアプログラム領域1200へ書き込む。フラッシュメモリFRMにユーザープログラムU−APを書き込む際に、予め書き込んでおいたセキュアプログラム(RTOS)に書き込みが行われてしまうと、セキュリティホールをセキュアプログラムに作り込むことが可能となってしまう。これを防ぐために、販売者PRDは、保護情報領域1202に、セキュアプログラムアドレス領域1203を設け、セキュアプログラムアドレス領域1203に、例えば上記したセキュアアドレス情報304、セキュアデータ情報305等を、マイクロコンピュータLSIを販売する前に、書き込む。このセキュアアドレス情報304(セキュアプログラム上限アドレス304−Uおよびセキュアプログラム下限アドレス304−D)によって、図3および図7で説明したように、セキュアプログラム領域を指定し、セキュアプログラム領域への書き込みを禁止する。これによって、セキュアプログラムの書き込みが禁止されることになる。
また、販売後、ノンセキュアプログラム領域1200に格納されたノンセキュアプログラム(例えばユーザープログラムU−AP)によって、保護情報領域1202に対して書き込みが可能になっていると、セキュアプログラムアドレス領域1203を書き換えることが可能となり、セキュアプログラム領域1201の書き込み禁止を解除して、セキュアプログラムにセキュリティホールを作り込むことが可能となってしまう。そのため、販売者PRDは、保護情報領域1202に保護情報制御領域1204を設け、販売後は、保護情報領域1202に格納されている保護情報を書き換えることができないようにする保護情報1205を、保護情報制御領域1204へ、販売前に書き込む。これにより、保護情報領域1202への保護情報の書き込みが禁止される。
このようにして、販売後は、ノンセキュアプログラム領域1200に格納されたノンセキュアプログラムによって、セキュアプログラムの書き換えが禁止されるようにすることができる。しかしながら、販売後に、セキュアプログラムに、バグ等の不具合が発見された場合、セキュアプログラムの書き換えが禁止されているため、セキュアプログラムの更新が困難となり、不具合の対策が困難となってしまう。一方、販売後に、セキュアプログラムの更新が可能となるようにしておくと、予め書き込んでおいたセキュアプログラムにセキュリティホールが作り込まれてしまうことが危惧される。
この実施の形態2においては、セキュアプログラム領域1201に格納したセキュアプログラムからは、保護情報領域1202の書き換え禁止を解除することができるようにされる。この場合、ノンセキュアプログラム領域1200に格納したノンセキュアプログラムによっては、保護情報領域1202の書き換え禁止を解除することができないようにされる。
図13は、実施の形態2に係わるマイクロコンピュータLSIの構成を示すブロック図である。同図には、図2で示したマイクロコンピュータLSIの構成のうち、マイクロプロセッサCPU、フラッシュメモリFRM、フラッシュメモリ書き換え回路202およびメモリプロテクションユニット204のみが示されている。また、説明において必要となるフラッシュメモリ書き換え回路202の構成が、図13では詳しく示されている。
フラッシュメモリ書き換え回路202は、フラッシュメモリ書き換えアドレス設定レジスタ1300、フラッシュメモリ書き換え開始レジスタ1301、フラッシュメモリ書き換え制御回路1304および不正アクセス検出回路1307を備えている。フラッシュメモリ書き換えアドレス設定レジスタ1300およびフラッシュメモリ書き換え開始レジスタ1301は、バス205を介してマイクロプロセッサCPUに接続されている。
フラッシュメモリ書き換えアドレス設定レジスタ1300には、フラッシュメモリFRMを書き換えるとき、フラッシュメモリFRMにおいて、書き換える領域を指定するアドレスが、バス205を介してマイクロプロセッサCPUによって設定される。フラッシュメモリ書き換えアドレス設定レジスタ1300は、設定されたアドレスを、書き換えアドレス1302として、フラッシュメモリ書き換え制御回路1304へ供給する。また、フラッシュメモリ書き換えアドレス設定レジスタ1300は、設定されたアドレスが、フラッシュメモリFRMの領域1200〜1202(図12)のうち、保護情報領域1202を指定しているか否かを判定し、保護情報領域1202を指定しているとき、保護情報選択信号1305を形成して、不正アクセス検出回路1307へ供給する。
フラッシュメモリ書き換え開始レジスタ1301は、マイクロプロセッサCPUから、フラッシュメモリFRMを書き換えるタイミングを示す開始情報が、バス205を介して設定される。フラッシュメモリ書き換え開始レジスタ1301は、設定された開始情報に基づいて、フラッシュメモリ書き換え開始信号1303を形成し、不正アクセス検出回路1307へ供給する。
フラッシュメモリ書き換え制御回路1304は、書き換えアドレス1302、フラッシュメモリ書き換え開始信号1303および不正アクセス検出回路1307からの不正アクセス検出信号1308を受け、不正アクセス検出信号1308が、不正アクセスであることを示していないとき、書き換えアドレス1302によって指定されるフラッシュメモリFRMの領域に対して書き換えを行う。このときの書き換えの開始タイミングが、フラッシュメモリ書き換え開始信号1303によって定められる。なお、図13では、図面が複雑になるのを避けるために、フラッシュメモリFRMに書き込まれるデータを供給する信号配線は省略されているが、書き込まれるデータは、バス205を介してマイクロプロセッサCPUからフラッシュメモリFRMへ供給される。
不正アクセス検出回路1307は、後で図14を用いて一例を示すが、メモリプロテクションユニット204からのノンセキュアプログラム選択信号1306と、上記した保護情報選択信号1305と、上記したフラッシュメモリ書き換え開始信号1303を受け、不正アクセス検出信号1308を形成して、フラッシュメモリ書き換え制御回路1304へ供給する。
メモリプロテクションユニット204は、図3および図7(A)に示した構成を備えており、図3および図7(A)のフェッチアドレス比較回路301において形成されたノンセキュアプログラム領域信号709が、上記したノンセキュアプログラム選択信号1306として、不正アクセス検出回路1307へ供給される。この実施の形態2において、メモリプロテクションユニット204は、マイクロプロセッサCPUからのアドレス(PCアドレス306)が、セキュアプログラム領域を指定しているのかノンセキュアプログラム領域を指定しているのかを検出するために使われている。
図7(A)において説明したように、フェッチアドレス比較回路301は、フラッシュメモリFRMからのセキュアアドレス情報304(セキュアプログラム上限アドレス304−U、セキュアプログラム下限アドレス304−D)と、マイクロプロセッサCPUからのPCアドレス306を受けている。PCアドレス306が、セキュアアドレス情報によって定められているセキュアプログラム領域内を指定するとき、セキュアプログラム領域信号707(図7(A))は、ハイレベルとなり、ノンセキュアプログラム領域信号709は、ロウレベルとなる。一方、PCアドレス306が、セキュアプログラム領域ではなく、ノンセキュアプログラム領域を指定しているとき、セキュアプログラム領域信号707はロウレベルとなり、ノンセキュアプログラム領域信号709は、ハイレベルとなる。そのため、ノンセキュアプログラム領域に配置されているノンセキュアプログラムが実行されているとき、ノンセキュアプログラム領域信号709、すなわちノンセキュアプログラム選択信号1306はハイレベルとなる。
不正アクセス検出回路1307は、ノンセキュアプログラム選択信号1306が、ハイレベルかロウレベルかによって、ノンセキュアプログラムが実行されているのか、セキュアプログラムが実行されているのかを判定する。また、不正アクセス検出回路1307は、保護情報選択信号1305によって、フラッシュメモリFRM内の保護情報領域1202の書き換えが指示されているのか、保護情報領域1202以外の領域の書き換えが指示されているのかを判定する。また、不正アクセス検出回路1307は、フラッシュメモリ書き換え開始信号1303によって、フラッシュメモリFRMの書き換えタイミングを判定する。言い換えるならば、不正アクセス検出回路1307は、マイクロプロセッサCPUからの開始情報に基づいたフラッシュメモリ書き換え開始信号1303によって示されるタイミングで、不正アクセスか否かの検出を行う。
不正アクセス検出回路1307は、ノンセキュアプログラム選択信号1306が、ノンセキュアプログラムが実行されていることを表し、保護情報選択信号1305が、保護情報領域1202を表しているときに、不正アクセス検出信号1308を形成し、フラッシュメモリ書き換え制御回路1304に対して、フラッシュメモリFRMへの書き換えを禁止する。不正アクセス検出信号1308は、フラッシュメモリ書き換え開始信号1303によって示されるタイミングで形成される。
これにより、ノンセキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202が書き換えられるのを禁止することが可能となり、セキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202が書き換えられることが許可されることになる。
図14は、実施の形態2に係わる不正アクセス検出回路1307の構成を示すブロック図である。同図において、1400は、3入力のアンド回路であり、1401は、フリップフロップ回路である。上記した保護情報選択信号1305、フラッシュメモリ書き換え開始信号1303およびノンセキュアプログラム選択信号1306が、3入力のアンド回路1400に入力される。3入力のアンド回路1400の出力は、フリップフロップ回路1401のセット端子(set)に供給される。フリップフロップ回路1401のクリア端子(clear)には、マイクロコンピュータLSIのリセット信号RSTが供給される。
フリップフロップ回路1401は、特に制限されないが、図7で説明したフリップフロップ回路703と同様な構成を有している。すなわち、フリップフロップ回路1401(保持回路)は、セット端子(set)にハイレベルが供給されることにより、出力端子(Q)はハイレベルとなる。出力端子(Q)がハイレベルになると、セット端子(set)にロウレベルが供給されても、クリア端子(clear)にハイレベルが供給されるまで、出力端子(Q)はハイレベルに維持される。
リセット信号RSTは、マイクロコンピュータLSIの外部から、マイクロコンピュータLSI内の回路ブロックに供給される。例えば、リセット信号RSTは、図13に示すように、マイクロプロセッサCPUにも供給されている。特に制限されないが、この実施の形態2においては、リセット信号RSTがハイレベルになることにより、マイクロコンピュータLSIがリセット状態にされる。
図13に示したフラッシュメモリ書き換えアドレス設定レジスタ1300は、設定されたアドレスが、フラッシュメモリFRM内の保護情報領域1202を指定しているとき、ハイレベルの保護情報選択信号1305を形成する。これに対して、設定されたアドレスが、フラッシュメモリFRM内の保護情報領域1202以外の領域(例えば、ノンセキュアプログラム領域1200)を指定している場合、フラッシュメモリ書き換えアドレス設定レジスタ1300は、ロウレベルの保護情報選択信号1305を形成する。また、図13に示したフラッシュメモリ書き換え開始レジスタ1301は、フラッシュメモリFRMを書き換えるタイミングで、フラッシュメモリ書き換え開始信号1303をハイレベルにする。ノンセキュアプログラム選択信号1306は、ノンセキュアプログラムが実行されているとき、ハイレベルとなり、セキュアプログラムが実行されているとき、ロウレベルとなる。
そのため、フラッシュメモリFRM内の保護情報領域1202を書き換えるとき、ノンセキュアプログラムが実行されていれば、3入力のアンド回路1400の出力信号は、ハイレベルとなる。言い換えるならば、ノンセキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202を書き換えようとすると、3入力のアンド回路1400の出力信号はハイレベルとなる。3入力のアンド回路1400からのハイレベルの出力信号が、フリップフロップ回路1401のセット端子(set)に供給されるため、フリップフロップ回路1401の出力端子(Q)の電圧はハイレベルとなり、不正アクセス検出信号1308は、ハイレベルとなる。
フラッシュメモリ書き換え制御回路1304は、不正アクセス検出信号1308がハイレベルとなることにより、供給されている書き換えアドレス1302によって指定されている保護情報領域1202への書き込みを禁止する。フリップフロップ回路1401は、リセット信号RSTがハイレベルとなるまで、出力端子(Q)をハイレベルに維持する。そのため、マイクロコンピュータLSIをリセットするまで、フラッシュメモリ書き換え制御回路1304は、保護情報領域1202への書き込みを禁止することになる。これにより、ハッキングの手段で、繰り返しアタックされても、フラッシュメモリFRMの保護情報領域1202が書き換えられるのを防ぐことが可能となる。
一方、フラッシュメモリFRM内の保護情報領域1202を書き換えるとき、セキュアプログラムが実行されていれば、3入力のアンド回路1400の出力信号は、ロウレベルとなる。言い換えるならば、セキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202を書き換えようとすると、3入力のアンド回路1400の出力信号はロウレベルとなる。3入力のアンド回路1400の出力信号がロウレベルとなるため、フリップフロップ回路1401の出力端子(Q)の電圧は、ロウレベルとなり、不正アクセス検出信号1308もロウレベルとなる。
フラッシュメモリ書き換え制御回路1304は、不正アクセス検出信号1308がロウレベルとなることにより、供給されている書き換えアドレス1302によって指定されている保護情報領域1202への書き込みを許可する。すなわち、セキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202をアクセスする場合には、許可され、保護情報領域1202を書き換えることが可能となる。
実施の形態2によれば、ノンセキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202を書き換えようとすると、不正アクセス検出回路1307から不正アクセス検出信号1308が出力され、フラッシュメモリ書き換え制御回路1304が、フラッシュメモリFRMの保護情報領域1202への書き込みを禁止する。この書き込みの禁止は、マイクロコンピュータLSIが、リセットされるまで継続し、解除することができない。これにより、フラッシュメモリFRMの保護情報領域1202が不正に書き換えられるのを防ぐことが可能となる。保護情報領域1202が不正に書き換えられるのを防ぐことが可能なため、ノンセキュアプログラムによって、セキュアプログラムにセキュリティホールを作り込むことを防ぐことができ、セキュアプログラムを保護することが可能となる。
また、セキュアプログラムにおいて、フラッシュメモリFRM内の保護情報領域1202を書き換える場合には、フラッシュメモリ書き換え制御回路1304が、フラッシュメモリFRMの保護情報領域1202への書き込みを許可する。そのため、フラッシュメモリFRMに予め書き込んでおいたRTOSのプログラム(セキュアプログラム)に不具合が発見された場合、セキュアプログラムにおいて、セキュアプログラム領域1201が書き換え可能となるように、保護情報領域1202内の情報を書き換える。その後、書き換え可能となったセキュアプログラム領域1201に、不具合を修正したRTOS(セキュアプログラム)を書き込む。修正したRTOSを書き込んだ後、セキュアプログラムにおいて、セキュアプログラム領域1201が書き込み禁止となるように、保護情報領域1202内の情報を書き換える。これにより、セキュアプログラムに不具合が発見された場合でも、セキュアプログラムの修正を行うことが可能となる。
例えば、販売者PRDは、ネットワークNTW(図1)を介して、不具合を修正したRTOSと、フラッシュメモリFRMを書き換えるセキュアプログラムを配信する。配信されたこれらのセキュアプログラムが、マイクロコンピュータLSIにダウンロードされ、実行されるようにする。これにより、予めフラッシュメモリFRMに書き込んで提供したマイクロコンピュータLSIのRTOSを修正することが可能となる。
また、実施の形態1で説明したセキュアアドレス情報304は、販売者PRDが販売する前に、保護情報領域1202に書き込むが、実施の形態2によれば、ユーザーUSRが購入した後で、書き換えることが可能となる。これにより、後で、例えばセキュアプログラム領域のサイズ等を、必要に応じて変更することが可能となる。
(実施の形態3)
図15は、実施の形態3に係わるマイクロコンピュータの構成を示すブロック図である。図15に示したマイクロコンピュータLSIの構成は、図2に示したマイクロコンピュータと類似しているので、主に相違点を説明する。なお、図15にも、図2と同様に、マイクロコンピュータLSI以外に、サーバP−SVおよびネットワークNTWが示されている。
新たな半導体販売モデルでは、図1で説明したように、販売者PRDが、RTOSのようなセキュアプログラムを、予めフラッシュメモリFRMへ書き込む。RTOSが書き込まれたフラッシュメモリFRMと、マイクロプロセッサCPU等を備えたマイクロコンピュータLSIが、販売者PRDから販売される。ユーザーUSRは、購入したマイクロコンピュータLSIに、ユーザーUSRが作成したユーザープログラムU−AP等をフラッシュメモリFRMに書き込む。
ユーザーUSRが、購入したマイクロコンピュータLSIのフラッシュメモリFRMに格納されたRTOSのようなセキュアプログラムを、バージョンアップするときあるいは不都合を修正するとき等では、サーバP−SVに、バージョンアップされたRTOSあるいは修正されたRTOSが、格納される。この場合、バージョンアップされたRTOSあるいは修正されたRTOSは、暗号化されて、サーバP−SVに格納されている。そのため、ユーザーUSRが、バージョンアップされたRTOSあるいは修正されたRTOSをダウンロードするために、バージョンアップされたRTOSあるいは修正されたRTOSが、ネットワークNTWを通過するときに、バージョンアップされたRTOSあるいは修正されたRTOSが、第3者によって盗まれても、バージョンアップされたRTOSあるいは修正されたRTOSを動作させることは困難である。
ネットワークNTWを経由したプログラム(バージョンアップされたRTOSあるいは修正されたRTOS)は、通信機能回路200によって、受信され、マイクロプロセッサCPUによって、バス205を介して暗号復号機能回路に伝達され、暗号復号機能回路によって復号される。暗号復号機能回路によって復号され、暗号化されていないプログラムは、図2では、マイクロプロセッサCPUによって揮発性メモリ203に格納されていた。
新たな半導体販売モデルでは、マイクロプロセッサCPUを操作するノンセキュアプログラムをユーザーUSRが作成する。すなわち、ユーザーUSRは、ノンセキュアプログラムではあるが、マイクロプロセッサCPUを任意に操作するプログラムを作成することができる。そのため、マイクロプロセッサCPUを操作するハッキングプログラムを、ユーザーUSRは作成することが可能となる。実施の形態1で説明したメモリプロテクションユニット204によって、揮発性メモリ203、フラッシュメモリFRMに格納されているセキュアデータの保護等は図れるが、マイクロプロセッサCPU、揮発性メモリ203はハッキングに対して弱く、セキュリティホールを発見して、マイクロプロセッサCPU、揮発性メモリ203がハッキングされる危険性が存在する。
この実施の形態3においては、暗号復号機能回路201−A(復号回路)は、専用の信号配線1500によってフラッシュメモリ書き換え回路202−Aに接続され、フラッシュメモリ書き換え回路202−Aは、専用の信号配線1501によってフラッシュメモリFRMに接続されている。
暗号復号機能回路201−Aは、暗号復号機能回路201と異なり、復号化した暗号化されていないプログラムを専用の信号配線1500を介して、フラッシュメモリ書き換え回路202−Aへ伝達する。フラッシュメモリ書き換え回路202−Aは、フラッシュメモリ書き換え回路202と異なり、伝達された暗号化されていないプログラムを、専用の信号配線1501を介してフラッシュメモリFRMへ伝達し、フラッシュメモリFRMに、プログラムを書き込む。
これにより、マイクロプロセッサCPUによって、通信機能回路200(通信回路)から暗号復号機能回路201−Aへ転送された暗号化されたプログラムは、暗号復号機能回路201−Aによって復号化され、復号化された暗号化されていないプログラム(データ)は、マイクロプロセッサCPUによってアクセスされずに、信号配線1500を介して直接、フラッシュメモリ書き換え回路202−Aに供給されるようになる。また、フラッシュメモリ書き換え回路202−Aに供給された暗号化されていないプログラム(データ)も、マイクロプロセッサCPUによってアクセスされず、信号配線1501によって、直接フラッシュメモリFRMへ供給されることになる。
すなわち、暗号化されていないプログラム(データ)が、マイクロプロセッサCPUおよび揮発性メモリ203を仲介することなく、フラッシュメモリFRMに書き込まれるようにすることが可能となる。
マイクロコンピュータLSIの外部からのハッキングを考えた場合、マイクロコンピュータLSIの外部からマイクロプロセッサCPUを、任意に操作することは難しい。そのため、例えばマイクロプロセッサCPUを、暗号化されていないプログラム(データ)が経由しても、プログラムをハッキングすることは難しい。ところが、新たな半導体販売モデルでは、マイクロプロセッサCPUを、任意に操作することが可能なプログラムをユーザーが作成する。そのため、例えばマイクロプロセッサCPUを、暗号化されていないプログラムが経由すると、暗号化されていないプログラムが盗まれると言うことが危惧される。この実施の形態3においては、暗号化されていないプログラムは、マイクロプロセッサCPUおよび揮発性メモリ203を経由せずに、直接、暗号復号機能回路201−Aからフラッシュメモリ書き換え回路202−Aを介してフラッシュメモリFRMへ供給され、書き込まれる。これにより、プログラムをハッキングから保護することが可能となる。
実施の形態3においては、ハッキングプログラムによって、マイクロプロセッサCPUが任意に操作可能となっても、ダウンロードした暗号化されていないプログラム(データ)が、マイクロプロセッサCPUによってアクセスされないため、プログラムが盗まれるのを防ぐことが可能となる。
(実施の形態4)
図16は、実施の形態4に係わるマイクロプロセッサCPUの構成を示すブロック図である。図16は、実施の形態1〜3において説明したマイクロプロセッサCPUの構成を模式的に示している。マイクロプロセッサCPUは、種々の回路ブロックを有しているが、図16には、この実施の形態4の説明に係わる回路ブロックのみが示されている。
同図において、1600は制御ユニット、1601は汎用レジスタ群、1602は第1スタックポインタ、1603は第2スタックポインタ、1604はプログラムカウンタ、1605は演算器を示している。
汎用レジスタ群1601は、複数の汎用レジスタR0〜Rnを備えている。それぞれの汎用レジスタR0〜Rnは、マイクロプロセッサLSIが処理を実行するとき、演算データまたは/およびアドレスを格納する。汎用レジスタR0〜Rnに格納されているアドレスは、マイクロプロセッサCPUが、処理を実行するとき、例えばフラッシュメモリFRMまたは/および揮発性メモリ203のアドレスとして用いられる。
制御ユニット1600は、フラッシュメモリFRMに格納されているセキュアプログラムおよびノンセキュアプログラムに従って、汎用レジスタ群1601内の汎用レジスタ、演算器1605、第1スタックポインタ1602、第2スタックポインタ1603およびプログラムカウンタ1604を制御する。制御ユニット1600が、これらの回路ブロックを制御することにより、セキュアプログラムおよびノンセキュアプログラムに従った処理が、マイクロプロセッサCPUによって実現される。
マイクロプロセッサCPUは、セキュアプログラムとノンセキュアプログラムの両方を、時分割的に実行する。すなわち、1個のマイクロプロセッサCPUによって、RTOSのようなセキュアプログラムとユーザープログラムU−APのようなノンセキュアプログラムの両方が、時分割的に実行される。
プログラムカウンタ1604は、実施の形態1〜3において説明したPCアドレス306を形成する。すなわち、マイクロプロセッサCPUが、セキュアプログラムを実行する際には、プログラムカウンタ1604が、セキュアプログラムを構成する命令を指定するPCアドレス306を形成する。同様に、ノンセキュアプログラムを実行する際には、プログラムカウンタ1604が、ノンセキュアプログラムを構成する命令を指定するPCアドレス306を形成する。特に制限されないが、第1スタックポインタ1602は、マイクロプロセッサCPUが、ノンセキュアプログラムを実行するとき、スタック領域を指定するアドレスを出力する。また、第2スタックポインタ1603は、マイクロプロセッサCPUが、セキュアプログラムを実行するとき、スタック領域を指定するアドレスを出力する。
演算器1605は、例えば汎用レジスタR0〜Rnに格納されているデータ間で演算を行い、演算結果を演算データあるいはアドレスとして、汎用レジスタに格納する。
上記したように、マイクロプロセッサCPUは、セキュアプログラムとノンセキュアプログラムを時分割的に実行する。そのため、セキュアプログラムを実行したときに発生したセキュアデータが、ノンセキュアプログラムを実行する際に、読み取られないように対策を行うことが必要である。
マイクロプロセッサCPUが動作するとき、第1スタックポインタ1602、第2スタックポインタ1603およびプログラムカウンタ1604は、フラッシュメモリFRMまたは/および揮発性メモリ203等のアドレスを指定するが、セキュアデータは格納しない。また、第1スタックポインタ1602、第2スタックポインタ1603およびプログラムカウンタ1604によって指定されるメモリ(フラッシュメモリFRMおよび揮発性メモリ203)については、メモリプロテクションユニット204によって保護することが可能である。例えば、実施の形態1で述べたように、メモリをセキュアプログラム領域とノンセキュアプログラム領域に分け、ノンセキュアプログラムがセキュアプログラム領域をアクセスするのを制限することにより、保護することが可能である。
一方、汎用レジスタR0〜Rnは、演算データまたは/およびアドレスを格納する。例えば、セキュアプログラムを実行したとき、セキュアデータである演算データが汎用レジスタR0〜Rnに格納される。この汎用レジスタR0〜Rnに格納されたデータが、ノンセキュアプログラムによって読み出されると、セキュアデータが盗まれることになる。次に、汎用レジスタR0〜Rnに格納されているデータが盗まれる一例を、図17を用いて説明する。
図17は、セキュアプログラムを実行しているときに、ハードウェア割り込みが発生した場合のマイクロプロセッサCPUの動作を示すフローチャート図である。図17において、HDWは、マイクロプロセッサCPUが、ハードウェアで実施する処理を示しており、NSPは、マイクロプロセッサCPUが、ノンセキュアプログラムを実行することにより行われる処理を示している。図17は、ハードウェア割り込みが発生した場合、ノンセキュアプログラムによって規定された割り込み処理へ分岐する例を示している。
先ず、ステップSH00で、マイクロプロセッサCPUがセキュアプログラムを開始する(Start)。次に、ステップSH01で、ハードウェア割り込みが発生したとする(割り込み発生)。この割り込み発生に応答して、ステップSH02において、割り込みフラグがセットされる(割り込みフラグセット)。
次に、ステップSH03において、割り込み条件が判定され(割り込み条件判定)、ステップSH04において、割り込みフラグがクリアされる(割り込みフラグクリア)。その後、割り込み処理を行った後で、汎用レジスタR0〜Rnの値を戻すことが可能となるように、ステップSH05において、汎用レジスタR0〜Rnの値を、例えば、第2スタックポインタ1603によって指定されるスタック領域に退避させる(汎用レジスタの値を退避)。汎用レジスタR0〜Rnの値を退避した後、ステップSH06において、割り込み処理へ分岐する(割り込み分岐)。
割り込み分岐によって、次にノンセキュアプログラムへ分岐する。ノンセキュアプログラムによって、処理の内容が規定されたところの割り込み処理を、マイクロプロセッサCPUが、ステップSN00で実行し(割り込み処理)、ステップSN01で、マイクロプロセッサCPUは、リターン命令(RET)を実行する。
リターン命令(RET)が実行されることにより、マイクロプロセッサCPUは、ステップSH07を実行する。ステップSH07では、第2スタックポインタ1603によって指定されているスタック領域から、ステップSH05で退避した汎用レジスタR0〜Rnの値か、汎用レジスタR0〜Rnへ戻される(汎用レジスタの値を復帰)。ステップSH08で、セキュアプログラムの実行が終了する(End)。
このように、割り込みが発生した場合、セキュアプログラムを実行していたときの汎用レジスタR0〜Rnの値は、退避されるが、汎用レジスタR0〜Rnは、それぞれの値を保持した状態で、ノンセキュアプログラムによって規定された割り込み処理が、ステップSN00において行われることになる。そのため、汎用レジスタに格納されているセキュアデータを、割り込み処理(ステップSN00)で読み出すことが可能となってしまう。例えば、ノンセキュアプログラムとしてハッキングプログラムを作成し、割り込みを繰り返して発生することにより、汎用レジスタR0〜Rnに格納されているセキュアデータを盗むことが可能となってしまう。
実施の形態4においては、汎用レジスタR0〜Rnに格納されているデータを保護することが可能なマイクロプロセッサCPUを備えたマイクロコンピュータLSIが提供される。実施の形態4においては、汎用レジスタR0〜Rnに格納されているデータの保護が、セキュアプログラムによる汎用レジスタクリア処理と、汎用レジスタクリア制御回路によって達成される。次に、セキュアプログラムによる汎用レジスタクリア処理と、汎用レジスタクリア制御回路を説明する。
<セキュアプログラムによる汎用レジスタクリア>
図18は、実施の形態4に係わるマイクロプロセッサCPUの動作を示すフローチャート図である。図18は、図17と同様に、RTOSのようなセキュアプログラムを実行しているときに、ハードウェア割り込みが発生した場合のマイクロプロセッサCPUの動作を示すフローチャート図である。図18において、HDWは、マイクロプロセッサCPUのハードウェアで実施する処理を示しており、NSPは、ノンセキュアプログラムを実行することにより行われる処理を示しており、SSPは、セキュアプログラムを実行することにより行われる処理を示している。図18においても、ハードウェア割り込みが発生した場合、ノンセキュアプログラムによって規定された割り込み処理へ分岐する例が示されている。
ハードウェアで行われる処理HDWは、ステップSH00、SH01、SH02およびSH08によって達成される。また、セキュアプログラムを実行することにより行われる処理SSPは、ステップSS00〜SS09によって達成され、ノンセキュアプログラムを実行することにより行われる処理NSPは、ステップSN00およびSN01によって達成される。
ステップSH00で、RTOSのようなセキュアプログラムが動作を開始する(Start)。次に、ステップSH01で、割り込みが発生したものとする(割り込み発生)。この割り込みが発生することにより、ステップSH02において、割り込みフラグが、例えば1にセットされる(割り込みフラグセット)。
一方、動作を開始したセキュアプログラム(RTOS)においては、上記した割り込みフラグのチェック(判定)が、所定の周期で行われる。すなわち、セキュアプログラムを実行することにより行われる処理SSPにおいて、マイクロプロセッサCPUは、ステップS00で、任意のセキュアプログラムを実行する(セキュアプログラム実行)。ステップS00で、セキュアプログラムを実行した後、割り込みフラグが1にセットされているか否かの判定を、マイクロプロセッサCPUが、ステップSS01で行う。割り込みフラグがセットされていなければ、ステップSS00へ戻り、任意のセキュアプログラムが実行される。一方、割り込みフラグが1にセットされている場合には、次にステップSS02が、マイクロプロセッサCPUによって実行される。これにより、周期的に、割り込みフラグが1にセットされているか否かの判定が行われ、割り込みフラグがセットされていない場合には、任意のセキュアプログラムが繰り返し実行されることになる。
次に、マイクロプロセッサCPUは、セキュアプログラムを実行することにより、ステップSS02において、割り込み条件を判定し(割り込み条件判定)し、ステップSS03において、割り込みフラグをクリアする(割り込みフラグクリア)。
ステップSS03において、割り込みフラグがクリアされるため、ハードウェアでの処理HDWにおいては、図17で説明したステップSH03(割り込み条件判定)〜ステップSH07(汎用レジスタの値の復帰)は行われない。
ステップSS03に続いて、ステップSS04において、マイクロプロセッサCPUは、汎用レジスタR0〜Rnの値を、第2スタックポインタ1603によって指定されるスタック領域に退避する(汎用レジスタの値を退避)。汎用レジスタR0〜Rnの値を退避した後で、マイクロプロセッサCPUは、ステップSS05を実行する。ステップSS05では、マイクロプロセッサCPUは、汎用レジスタR0〜Rnをクリアする。例えば、所定の値を、汎用レジスタR0〜Rnのそれぞれに書き込むことにより、汎用レジスタR0〜Rnのそれぞれの値はクリアされることになる。
汎用レジスタR0〜Rnのそれぞれをクリアした後、ステップSS06において、マイクロプロセッサCPUは、使用するスタックポインタを、第2スタックポインタ1603から第1スタックポインタ1602へ切り替える(スタックポインタの切り替え)。次に、ステップSS07において、マイクロプロセッサCPUは、ソフトウェア割り込み命令(CALL)を実行する。このとき割り込み命令で呼び出すプログラムは、ノンセキュアプログラムである。呼び出されたノンセキュアプログラムで行われる処理NSPは、図17で説明した処理NSPと同じである。処理NSPで、マイクロプロセッサCPUが行うステップも、図17で説明したステップSN00、SN01と同じであるため、説明は省略する。なお、このノンセキュアプログラムを実行するときには、ステップSS06でスタックポインタが、第1スタックポインタ1602に切り替えられているため、第1スタックポインタ1602を用いて、ノンセキュアプログラムが実行されることになる。
処理NSPにおいて、マイクロプロセッサCPUが、ステップSN01を実行することにより、マイクロプロセッサCPUは、セキュアプログラムでの処理を再開する。すなわち、ステップSS08を次に実行する。ステップSS08では、使用するスタックポインタを第1スタックポインタ1602から第2スタックポインタ1603へ切り替える(スタックポインタの切り替え)。ステップSS09では、切り替えた第2スタックポインタ1603によって指定されているスタック領域から、ステップSS04で退避した汎用レジスタR0〜Rnの値を、汎用レジスタR0〜Rnへ復帰する(汎用レジスタの値を復帰)。
ステップSS09の後は、ステップSS00へ戻る。以降は、割り込みフラグが1にセットされるまで、ステップSS00とSS01が繰り返し実行され、割り込みフラグが1にセットされたときには、ステップSS02〜SS09およびSN00〜SN01が実行されることになる。また、セキュアプログラムを終了した場合は、ステップSH08が実行される(End)。
これにより、セキュアプログラムを実行している際に、ハードウェア割り込みが発生した場合でも、汎用レジスタR0〜Rnに格納されたセキュアデータ(演算データ、アドレス)は、ノンセキュアプログラムを実行する前に、マイクロプロセッサCPUによって、クリアされる。そのため、セキュアデータが盗まれることを防ぐことが可能となる。
<汎用レジスタクリア制御回路>
図18で説明したセキュアプログラムによる汎用レジスタクリアでは、マイクロプロセッサCPUが、例えば汎用レジスタR0〜Rnのそれぞれに、所定の値を書き込むことによって、汎用レジスタR0〜Rnのそれぞれをクリアする。
マイクロプロセッサCPUが実行するセキュアプログラムが、RTOSの場合、割り込みに対して行われる処理が、所定の時間内に完了すれば、リアルタイム性を維持することが可能である。そのため、割り込みに対する処理として、所定の時間内に、セキュアプログラムによる複数の汎用レジスタのクリアが完了すれば、リアルタイム性を維持できる。割り込みの発生から、対応する割り込み処理が実行されるまでの応答が、汎用レジスタをクリアする処理により、若干遅れても、リアルタイム性は問題ない。
しかしながら、マイクロコンピュータLSIで、例えばモータを制御するような用途等では、割り込みが発生してから、短期間のうちに、対応した割り込み処理を実行することが要求される。すなわち、応答時間を短くすることが要求される。この実施の形態4においては、マイクロプロセッサCPUは、汎用レジスタクリア制御回路を備えており、応答時間の短縮化が図られる。
図19は、実施の形態4に係わるマイクロプロセッサCPUの構成を示すブロック図である。図19は、図16に示したマイクロプロセッサと類似しているので、相違点を主に説明する。図19に示したマイクロプロセッサCPUにおいては、汎用レジスタクリア制御回路1900が、図16に示したマイクロプロセッサに追加されている。汎用レジスタクリア制御回路1900は、制御ユニット1600と汎用レジスタ群1601に接続されており、制御ユニット1600からの指示に従って、汎用レジスタ群1601に含まれている汎用レジスタR0〜Rnをクリアする。
この実施の形態4に係わるマイクロプロセッサCPUは、マスク可能な割り込み(第1割り込み)とマスク不可能な割り込み(第1割り込みとは異なる第2割り込み)を受け付ける機能を有している。マスク不可能な割り込みを受け付けた場合、制御ユニット1600は、汎用レジスタクリア制御回路1900に対して、汎用レジスタR0〜Rnをクリアする指示を出力する。
図20は、図19に示したマイクロプロセッサCPUの動作を示すフローチャート図である。図20を用いて、図19に示したマイクロプロセッサCPUの動作を説明する。図20に示したフローチャートは、図18に示したフローチャートと類似しているので、ここでは主に相違する部分を説明する。図20においても、HDWは、マイクロプロセッサCPUのハードウェアで実行する処理を示しており、NSPは、ノンセキュアプログラムを実行することにより行われる処理を示しており、SSPは、セキュアプログラムを実行することにより行われる処理を示している。
ハードウェアで行われる処理HDWは、ステップSH00〜SH08およびSH10〜SH13によって達成される。また、セキュアプログラムを実行することにより行われる処理SSPは、ステップSS00〜SS09によって達成され、ノンセキュアプログラムを実行することにより行われる処理NSPは、ステップSN02〜SN05によって達成される。
セキュアプログラムを実行することにより行われる処理SSP(ステップSS00〜SS09)は、図18で説明した処理SSP(ステップSS00〜SS09)と同じであるため、詳しい説明は省略する。また、図20において、ノンセキュアプログラムを実行することにより行われる処理NSPのうち、ステップSN02は、低速割り込み処理と記載しているが、図18で説明したステップSN00と同じであり、ステップSN03は、図18で説明したステップSN01と同じである。そのため、ステップSN02およびSN03についても、説明は省略する。
ステップSH00で、RTOS(セキュアプログラム)が動作を開始する(Start)。次に、ステップSH01で、割り込みが発生したものとする(割り込み発生)。次に、ステップSH10において、ステップSH01で受け付けた割り込みが、高速割り込みか否かの判定を行う(高速割り込み?)。この実施の形態4においては、マスク不可能な割り込みが、高速な割り込みに該当する。すなわち、ステップSH01において、マスク不可能な割り込みを受け付けた場合、ステップSH10において、高速な割り込みであると判定する。一方、ステップSH01において、マスク可能な割り込みを受け付けた場合、ステップSH10において、高速な割り込みではないと判定する。
ステップSH10において、高速な割り込みでないと判定した場合、次にステップSH02が実行される。ステップSH02において、割り込みフラグが、1にセットされる。割り込みフラグが1にセットされているか否かのチェック(判定)が、図18で説明したように、マイクロプロセッサCPUがセキュアプログラムを実行することにより、所定の周期で行われる。ステップSH02で、割り込みフラグが1にセットされると、図18で説明したように、セキュアプログラムを実行することにより行われる処理SSPにおいて、汎用レジスタR0〜Rnがクリアされる。汎用レジスタR0〜Rnがクリアされた後、ノンセキュアを実行することにより行われる処理NSPにおいて、低速割り込み処理(ステップSN02)およびRET命令(ステップSN03)が実行される。
ステップSH10において、高速な割り込みと判定した場合、次にステップSH03で、割り込み条件の判定(割り込み条件判定)をし、ステップSH04で、割り込みフラグをクリア(割り込みフラグクリア)する。割り込みフラグをクリアした後、第2スタックポインタ1603で指定されているスタック領域に、汎用レジスタR0〜Rnの値を退避する(汎用レジスタの値を退避)。
汎用レジスタの値を退避した後、ステップSH11において、制御ユニット1600は、汎用レジスタクリア制御回路1900へ、汎用レジスタR0〜Rnをクリアするように指示する。この指示に応答して、汎用レジスタクリア制御回路1900は、汎用レジスタR0〜Rnをクリアする(汎用レジスタをクリア)。
ステップSH11に続いて、ステップSH12において、使用するスタックポインタを、第2スタックポインタ1603から第1スタックポインタ1602へ切り替える(スタックポインタの切り替え)。続いて、ステップSH06で、割り込み処理へ分岐する(割り込み分岐)。
割り込み分岐によって、次にノンセキュアプログラムへ分岐する。ノンセキュアプログラムによって、処理の内容が規定されたところの割り込み処理を、マイクロプロセッサCPUが、ステップSN04で実行し(高速割り込み処理)、ステップSN05で、マイクロプロセッサCPUは、リターン命令(RET)を実行する。
リターン命令(RET)が実行されることにより、マイクロプロセッサCPUは、ステップSH13を実行する。ステップSH13では、使用するスタックポインタを、第1スタックポインタ1602から第2スタックポインタ1603へ切り替える(スタックポインタの切り替え)。
スタックポインタを第2スタックポインタ1603へ切り替えた後、ステップSH07で、第2スタックポインタ1603によって指定されているスタック領域から、ステップSH05で退避した汎用レジスタR0〜Rnの値を、汎用レジスタR0〜Rnへ戻す(汎用レジスタの値を復帰)。ステップSH14で、セキュアプログラムの実行が終了する(End)。
ステップSS05では、セキュアプログラムを実行することにより、マイクロプロセッサCPUが、汎用レジスタR0〜R6のそれぞれをクリアしている。これに対して、ステップSH11では、汎用レジスタクリア制御回路1900によって、汎用レジスタR0〜Rnをクリアしている。マイクロプロセッサCPUによって、例えば汎用レジスタR0〜Rnを1個ずつクリアするのに比べて、汎用レジスタクリア制御回路1900により汎用レジスタR0〜Rnをクリアする方が、高速にクリアすることが可能となる。そのため、高速な割り込みを受け付けたときには、短い応答時間で、高速割り込み処理SN04を実行することが可能となる。そのため、短い応答時間で、割り込み処理が実行されることを要求する用途にも、マイクロコンピュータLSIを適用することが可能となる。また、この場合でも、ノンセキュアプログラムを実行する前に、汎用レジスタR0〜Rnは、クリアされるため、セキュアデータが盗まれることを防ぐことが可能となる。
さらに、スタックポインタを、切り替えるようにしているため、セキュアプログラムにおいて、汎用レジスタを退避したスタック領域を、ノンセキュアプログラムにおいて把握することが困難となる。これにより、さらにセキュアデータが盗まれるのを防ぐことが可能となる。
この実施の形態4によれば、RTOSのようなセキュアプログラムを書き込んだフラッシュメモリFRMを有するマイクロコンピュータLSIを購入したユーザーUSRは、マイクロコンピュータLSIを、モータ制御等の高速な割り込みを必要とする用途に使うことが可能となる。また、ユーザーUSRが作成したユーザープログラムによって、セキュアデータが盗まれるのを防ぐことが可能となり、マイクロコンピュータLSIを販売する販売者PRDのメリットも維持することが可能となる。
<付記>
本明細書には、複数の発明が開示されており、その内のいくつかは、請求の範囲に記載しているが、これ以外の発明も開示しており、その代表的なものを次に列記する。
(A)中央処理ユニットと、前記中央処理ユニットによって実行されるセキュアプログラムとノンセキュアプログラムを格納する不揮発性メモリとを備えた半導体装置であって、
前記中央処理ユニットは、互いに異なる複数の割り込みを受付可能で、割り込みがあったとき、割り込みに対応した割り込み処理を実行する中央処理ユニットであって、前記中央処理ユニットは、
プログラムに従って動作する制御ユニットと、
前記制御ユニットが動作するときに、情報を保持するために用いられる複数のレジスタと、
割り込みがあったとき、前記複数のレジスタの値を退避する領域を指定するスタックポインタと、
前記複数のレジスタに保持されている値をクリアするレジスタクリア制御回路と、
を備え、
前記中央処理ユニットは、前記複数の割り込みのうちの第1割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタの値を退避した後、前記複数のレジスタのそれぞれをクリアし、前記第1割り込みに対応した所定の割り込み処理を実施し、
前記中央処理ユニットは、前記複数の割り込みのうち、前記第1割り込みとは異なる第2割り込みに応答して、前記スタックポインタにより指定されている領域に、前記複数のレジスタに保持されている値を退避した後、前記レジスタクリア制御回路によって、前記複数のレジスタをクリアし、前記第2割り込みに対応した所定の割り込み処理を実施する、半導体装置。
(B)前記(A)に記載の半導体装置において、
前記第1割り込みの発生は、前記セキュアプログラムによる監視によって、検出され、前記セキュアプログラムの実行により、前記スタックポインタにより指定されている領域への前記複数のレジスタの値の退避と、前記複数のレジスタのそれぞれのクリアとが行われ、
前記第2割り込みの発生に応答して、前記中央処理ユニットは、前記スタックポインタにより指定されている領域へ前記複数のレジスタの値を退避し、前記レジスタクリア制御回路によって前記複数のレジスタをクリアする、半導体装置。
(C)前記(B)に記載の半導体装置において、
前記セキュアプログラムは、リアルタイムオペレーティングシステムである、半導体装置。
(D)プログラムを実行する中央処理ユニットと、前記中央処理ユニットに接続された電気的に書き換え可能な不揮発性メモリとを内蔵した半導体装置を販売する半導体装置販売モデルであって、
前記不揮発性メモリには、オペレーティングシステムを構成するセキュアプログラムが格納され、格納されたセキュアプログラムの対価を含めた対価で、前記半導体装置は販売され、
購入した前記半導体装置において、前記オペレーティングシステム上で動作するプログラムが、前記書き換え可能な不揮発性メモリに書き込まれる、半導体装置販売モデル。
(E)前記(D)に記載の半導体装置販売モデルにおいて、
購入した前記半導体装置において、ネットワークを介してダウンロードしたプログラムが、前記不揮発性メモリに書き込まれる、半導体装置販売モデル。
(F)前記(E)に記載の半導体装置販売モデルにおいて、
前記ダウンロードしたプログラムは、前記半導体装置を提供するものから提供される、半導体装置販売モデル。
(G)前記(F)に記載の半導体装置販売モデルにおいて、
前記半導体装置は、ライセンス管理ユニットを備え、前記半導体装置を販売する前に、前記ライセンス管理ユニットに、プリペイドで有料ソフトの対価に相当するライセンス情報が格納され、
購入した半導体装置において、ダウンロードしたプログラムが有料ソフトの場合、前記ライセンス管理部は、格納されているライセンス情報に相当する対価に到達するまで、ダウンロードしたプログラムが、前記不揮発性メモリに格納されるのを許可する、半導体装置販売モデル。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。