(57)【要約】【課題】制御用マイコンに実装するユーザープログラムのメンテナンス性を損なわずに、制御用マイコンおよびこれを組込んだ機器の高いセキュリティを実現する。【解決手段】本発明の半導体装置は、電源投入後に初期化ステップ２５で内部状態の初期化を行い、これに続いて、メモリ装置の所定のアドレス領域を対象としてあらかじめ定められたアルゴリズムに従って検査コードを求める検査コード計算ステップ２６と、メモリ装置の別のアドレス領域にあらかじめ格納されている確認コードと前記検査コードとの整合性を検査し、この結果に基づいて、ＣＰＵが所定のプログラムを実行する実行状態、または、ＣＰＵが実質的に停止状態にある待機状態を選択する検査コード判定ステップ２７と、を有することを特徴としている。【選択図】  図２
2004220296.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納するメモリ装置と、このプログラムを読み出して実行するＣＰＵとを備え、電源投入直後に内部状態をあらかじめ定められた状態に設定する初期化手段を有する半導体装置において、
前記初期化手段により初期化を行った直後に、前記メモリ装置の所定のアドレス領域を対象としてあらかじめ定められたアルゴリズムに従って検査コードを求める計算手段と、
前記メモリ装置の別のアドレス領域にあらかじめ格納されている確認コードと前記計算手段により求めた検査コードとの整合性を検査し、この結果に基づいて、前記ＣＰＵが所定のプログラムを実行する実行状態と前記ＣＰＵが実質的に停止状態にある待機状態とのうち、いずれか一方を選択する第１の選択手段と、
を有することを特徴とする半導体装置。
【請求項２】
前記メモリ装置のアドレス領域のうち、あらかじめ定められたユーザー領域への外部からの書込みを製品出荷後に可能とする書込み手段を有し、前記計算手段が対象とするアドレス領域は、
製品出荷後の書込みが許可された前記ユーザー領域のうち、
前記確認コードを格納するアドレス領域を除いたすべての領域であることを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記書込み手段によって書込みを行う書込み状態と、前記書込み手段による書込みを行わない通常状態とのうちいずれか一方の選択を、電源投入直後の所定の外部信号によって決定する第２の選択手段をさらに有することを特徴とする請求項２に記載の半導体装置。
【請求項４】
前記初期化手段による初期化から前記第１の選択手段による選択が終了するまでの間は、マスク可能な外部割込みを受け付けない機能を有することを特徴とする請求項１乃至請求項３のいずれか１項に記載の半導体装置。
【請求項５】
前記計算手段および前記第１の選択手段は、前記ＣＰＵによって実行可能なプログラムとして実装され、前記メモリ装置に格納されており、これらは少なくとも製品出荷後は書換え不可能な読出し専用領域に格納されていることを特徴とする請求項１乃至請求項４のいずれか１項に記載の半導体装置。
【請求項６】
前記待機状態にあることを外部に知らせる通知手段をさらに有することを特徴とする請求項１乃至請求項５のいずれか１項に記載の半導体装置。
【請求項７】
前記待機状態では、マスク不可能なリセット割込みのみを受け付け、このリセット割込みを受け付けると前記初期化手段による初期化を実行するリセット機能をさらに有することを特徴とする請求項１乃至請求項６のいずれか１項に記載の半導体装置。
【請求項８】
前記リセット機能および前記初期化手段は前記ＣＰＵによって実行可能なプログラムとして実装されており、前記リセット機能は前記読出し専用領域に配置された割込みベクトルを経由して前記初期化手段に実行を移すものであることを特徴とする請求項７に記載の半導体装置。
【請求項９】
プログラムを格納するメモリ装置と、このプログラムを読み出して実行するＣＰＵとを備えた半導体装置の制御方法であって、電源投入直後に内部状態をあらかじめ定められた状態に設定する初期化ステップを備え、
前記初期化ステップで初期化を行った直後に、前記メモリ装置の所定のアドレス領域を対象としてあらかじめ定められたアルゴリズムに従って検査コードを求める計算ステップと、
前記メモリ装置の別のアドレス領域にあらかじめ格納されている確認コードと前記計算ステップで求めた検査コードとの整合性を検査し、この結果に基づいて、前記ＣＰＵが所定のプログラムを実行する実行状態と前記ＣＰＵが実質的に停止状態にある待機状態とのうち、いずれか一方を選択する第１の選択ステップと、を有することを特徴とする半導体装置の制御方法。
【請求項１０】
前記メモリ装置のアドレス領域のうち、あらかじめ定められたユーザー領域への外部からの書込みを製品出荷後に可能とする書込み手段を有する半導体装置の制御方法であって、
前記計算ステップは、
製品出荷後の書込みが許可された前記ユーザー領域のうち、
前記確認コードを格納するアドレス領域を除いたすべての領域にたいして行われることを特徴とする請求項９に記載の半導体装置の制御方法。
【請求項１１】
前記書込み手段によって書込みを行う書込み状態と、前記書込み手段による書込みを行わない通常状態とのうちいずれか一方の選択を、電源投入直後の所定の外部信号によって決定する第２の選択ステップをさらに有することを特徴とする請求項１０に記載の半導体装置の制御方法。
【請求項１２】
前記初期化ステップから前記第１の選択ステップが終了するまでの間は、マスク可能な外部割込みを受け付けないことを特徴とする請求項９乃至請求項１１のいずれか１項に記載の半導体装置の制御方法。
【請求項１３】
前記待機状態にあることを外部に知らせる通知ステップをさらに有することを特徴とする請求項９乃至請求項１２のいずれか１項に記載の半導体装置の制御方法。
【請求項１４】
前記待機状態では、マスク不可能なリセット割込みのみを受け付け、このリセット割込みを受け付けると前記初期化ステップを実行することを特徴とする請求項９乃至請求項１３のいずれか１項に記載の半導体装置の制御方法。
【請求項１５】
前記リセット割込みによる前記初期化ステップの起動方法は、前記読出し専用領域に配置された割込みベクトルを経由して行われることを特徴とする請求項１４に記載の半導体装置の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ワンチップマイクロコンピュータのユーザープログラム保護を目的としたセキュリティ機能を有する半導体装置およびその制御方法に関する。
【０００２】
【従来の技術】
中央処理装置、メモリ装置、インターフェース装置などを一つの半導体基板に集積、形成した半導体装置は、ワンチップマイクロコントローラ、あるいは、制御用マイコンなどと呼ばれ、ユーザープログラムを書き込むだけで、複雑で多機能な制御を容易に実現できるため、機器の制御素子として、産業用、民生用を問わず一般に広く用いられている。
【０００３】
図３は一般的な制御用マイコンの基本的なハードウェア構成を示す機能ブロック図である。図４はそのメモリ割り付けの一例を示すメモリマップ図である。ここでは、一つのリニアなアドレス空間を持った最も基本的な構成を説明する。
【０００４】
図３に示すように、制御用マイコンは、プログラムやデータを格納するメモリ装置、メモリ装置から読み出したプログラムに従って演算や処理を行う中央処理装置３１（以下ＣＰＵという）、データや信号の外部との受渡しを行うインターフェース装置３２（以下Ｉ／Ｏという）、およびこれらに接続された内部バスと外部バス３３、とから構成される。
【０００５】
メモリ装置には、主にシステムプログラムを格納しておく不揮発性の読出し専用メモリ装置３４（以下ＲＯＭという）、ユーザープログラムを格納する書換え可能な不揮発性メモリ装置３５（以下ＥＥＰＲＯＭという）、処理途中でのデータの一時保管用スタックなどとして用いるランダムアクセスメモリ装置３６（以下ＲＡＭという）がある。
【０００６】
ＥＥＰＲＯＭ３５への書込みには、ＲＡＭ３６への書込みとは異なり、特殊な書込み回路が必要であるが、ここではこの書込み回路も含めて機能ブロックＥＥＰＲＯＭ３５として表してある。
【０００７】
また、ＲＯＭ３４には、製造時にデータを書き込むいわゆるマスクＲＯＭや、電気的には消去不可能なＰＲＯＭのほかに、書込み方法を非公開にしたＥＥＰＲＯＭを用いることもできる。すなわち、書込み方法を非公開にすれば、製品出荷後にユーザーが当該ＥＥＰＲＯＭを書換えることはできないので、結果的に、読出し専用のＲＯＭ３４として機能させることが可能となる。
【０００８】
内部バスには、データバス３７、アドレスバス３８、コントロールバス３９がある。データバス３７は、上記各装置間でデータを授受するために用いられる。アドレスバス３８には、ＣＰＵ３１が各メモリ装置３４、３５、３６およびＩ／Ｏ３２にアクセスするためにアドレス信号を出力する。
【０００９】
また、外部との高速なデータ転送を実現するために、ＣＰＵ３１の代わりに外部バス３３を介して外部装置がアドレスバス３８を制御する場合もある。コントロールバス３９は、各装置の同期を取るために用いられる。また、各装置がその状態を他の装置に知らせたり、割込みなどの外部信号をＣＰＵ３１やメモリ装置に伝えたりするためにも用いられる。
【００１０】
上述したように種類の異なる複数のメモリ装置を実装する場合でも、図４に示すように、通常は、ＣＰＵ３１から見て一つのリニアなアドレス空間に、それぞれのアドレス領域が重ならないように各メモリ装置３４、３５、３６が割り付けられる。
【００１１】
例えば、スタックなどに用いるデータ領域４１にはＲＡＭ３６が、ユーザープログラムを格納するユーザー領域４２にはＥＥＰＲＯＭ３５が、システムプログラムを格納するシステム領域４３にはＲＯＭ３４が、それぞれ割り付けられる。また、ＣＰＵ３１への割込みに対応する複数の割込みベクトルを配置する割込みベクトルテーブル４４にも、ＲＯＭ３４が割り付けられる。
【００１２】
このような構成の制御用マイコンは、製品出荷後、ユーザーに公開されるＥＥＰＲＯＭ３５への書込み方法を用いて、ユーザーにより、所望の制御プログラムをユーザー領域４２に書き込まれ、目的とする機器に組込まれて使用される。
【００１３】
図５は従来の制御用マイコンにおける電源投入後のブートシーケンスを示すフロー図である。ここでは、主にＣＰＵ３１によるＥＥＰＲＯＭ３５へのユーザープログラムの書込みシーケンスと、ユーザープログラム実行前の制御用マイコン立ち上げシーケンス、およびリセット割込みに関わるシーケンスについて簡単に説明する。
【００１４】
電源投入後、まず、割込み禁止ステップ５１において、ＣＰＵ３１は割込み禁止命令を実行し、マスク不可能なリセット割込み以外を受け付けない割込み禁止モードとなる。次に、書込み判定ステップ５２において、Ｉ／Ｏ３２を介して外部バス３３上の書込み指示信号がチェックされる。
【００１５】
この外部信号の状態があらかじめ定められたものと一致すれば（ＴＲＵＥ）、ユーザー領域４２への書込みを行う書込み状態が選択され、一致しなければ（ＦＡＬＳＥ）、すでにユーザー領域４２に書きこまれているユーザープログラムを実行する通常状態が選択される。
【００１６】
書込み状態では、書込みステップ５３において、ＣＰＵ３１は外部バス３３およびＩ／Ｏ３２を介して受けとったユーザープログラムデータを１ワードずつユーザー領域４２に書き込んでいく。ユーザープログラムの書込みが終了すると、ＣＰＵ３１は停止命令を実行し、制御用マイコン自体は待機状態５４となる。
【００１７】
待機状態５４ではＣＰＵ３１は割込み禁止モードのままなので、電源を再投入するか、リセット割込みによりＣＰＵ３１の実行制御を変更しない限り、制御用マイコンは待機状態５４を脱出することはできない。
【００１８】
通常状態では、まず、初期化ステップ５５において、Ｉ／Ｏ３２、各メモリ装置３４、３５、３６などでの必要な部分の内部状態をあらかじめ定められた状態に初期化する。次に、割込み許可ステップ５６において、ＣＰＵ３１は割込み許可命令を実行し割込み禁止モードを解除する。
【００１９】
最後に、ＣＰＵ３１はあらかじめ定められたユーザープログラムのエントリーポイントに実行制御を移し、制御用マイコンはユーザープログラムを実行する実行状態５７となる。
【００２０】
上述したように、ブートシーケンスにおいては、制御用マイコンが実行状態５７となるまでは、ＣＰＵ３１は割込み禁止モードになっており、通常の割込みは受け付けられない。しかし、マスク不可能なリセット割込みだけは例外で、ＣＰＵ３１はこの割込みにより、常に、あらかじめ定められたエントリーポイントに実行制御を移す。
【００２１】
エントリーポイントのアドレスは割込みベクトルテーブル４４内の所定の領域に置かれ、通常は、図５に示すように、電源投入直後の実行制御のスタートアドレスと同じになっている。リセット割込みは、ユーザープログラムあるいはシステムプログラムのバグなどにより、ＣＰＵ３１が暴走した時に電源を落とさずに制御用マイコンを初期状態に戻すために使用される。
【００２２】
ところで、従来の制御用マイコンは、その使用目的に鑑み、上述のようなユーザー領域４２への書込み手段を提供しており、また、その書込み方法をもユーザーに公開している場合が多い。これにより、そのプログラムの修正、バージョンアップなどのメンテナンスを、ユーザー自身が容易に実行できるようになる。
【００２３】
反面、これには、第三者によって、ユーザープログラムを改ざんされたり、あるいは、ユーザープログラムを外部に読み出されたりしてしまう、という危険がある。
【００２４】
特に、図５に示すような従来のブートシーケンスの通常状態では、電源投入後、無条件である決められたエントリーポイントからユーザープログラムの実行を開始するので、改ざんされたプログラムが容易に実行されてしまう。このため、場合によっては、この制御用マイコンが組込まれた機器が暴走するなどの重大な事態を引き起こす危険がある。
【００２５】
これを回避するため、ユーザー領域４２への書込み手段、およびその書込み方法を非公開とし、制御用マイコンを生産する半導体メーカー側ですべてのユーザープログラムを書き込む、という方法もある。
【００２６】
しかし、この場合、プログラムの修正、バージョンアップのたびに、ユーザーはその新しいプログラムをメーカーに渡し、書き込んでもらわなければならず、プログラムのメンテナンス性が著しく阻害されることとなる。さらに、いったんその書込み方法が外部に知られると、書込み方法を変更しなければならず、メーカーにとっても負担が大きい。
【００２７】
このようなセキュリティ問題の対策として、システムコールのエントリーポイントに、ユーザーごとに異なるオフセット値を用いる方法が、特開平７−１３８７１号公報に記載されている。通常、データの外部への読出しなどの基本的な動作はシステムコールによって実装されるため、この方法は、ユーザーのメンテナンス性を犠牲にすることなく、セキュリティ問題にある程度対応できる。
【００２８】
しかしながら、この方法では、ユーザーごとにオフセット値を変えるため、追加のハードウェアが必要となる。さらに、いったんこのオフセット値が外部に知られてしまうと、そのユーザーに対するオフセット値を変更しなければならず、ユーザーはプログラムを修正して再度書き込む必要が生ずる。
【００２９】
また、このようにオフセット値を変更した場合でも、オフセット値の更新がすべて完了する前に、第三者によってユーザープログラムを外部に読み出されてしまう、という危険を回避することはできない。
【００３０】
【発明が解決しようとする課題】
上述のごとく、従来の半導体装置およびその制御方法は、ユーザー領域４２への書込み手段、およびその書込み方法を公開しているため、ユーザープログラムを容易に第三者に改ざんされてしまう、という問題があった。特に、従来の半導体装置のブートシーケンスでは、電源投入後に、無条件である決められたエントリーポイントからユーザープログラムを実行するようになっているため、改ざんされたプログラムを容易に実行できる、という問題があった。
【００３１】
本発明は、上記問題点を解決するためになされたもので、ユーザー領域への書込み手段、およびその書込み方法を公開しても、セキュリティ問題を回避することができる半導体装置およびその制御方法を提供することを目的とする。
【００３２】
【課題を解決するための手段】
上記目的を達成するために、本発明の半導体装置は、プログラムを格納するメモリ装置と、このプログラムを読み出して実行するＣＰＵとを備え、電源投入直後に内部状態をあらかじめ定められた状態に設定する初期化手段を有する半導体装置において、前記初期化手段により初期化を行った直後に、前記メモリ装置の所定のアドレス領域を対象としてあらかじめ定められたアルゴリズムに従って検査コードを求める計算手段と、前記メモリ装置の別のアドレス領域にあらかじめ格納されている確認コードと前記計算手段により求めた検査コードとの整合性を検査し、この結果に基づいて、前記ＣＰＵが所定のプログラムを実行する実行状態と前記ＣＰＵが実質的に停止状態にある待機状態とのうち、いずれか一方を選択する第１の選択手段と、を有することを特徴としている。
【００３３】
本発明によれば、ユーザー領域へのプログラム書込み手段、およびその書込み方法を公開しても、正規の手続きを踏まずに変更されたプログラムを実行することはできないので、ユーザーのメンテナンス性を損なうことなく、高いセキュリティを持った半導体装置を実現することができる。
【００３４】
また、本発明の半導体装置の制御方法は、プログラムを格納するメモリ装置と、このプログラムを読み出して実行するＣＰＵとを備えた半導体装置の制御方法であって、電源投入直後に内部状態をあらかじめ定められた状態に設定する初期化ステップを備え、前記初期化ステップで初期化を行った直後に、前記メモリ装置の所定のアドレス領域を対象としてあらかじめ定められたアルゴリズムに従って検査コードを求める計算ステップと、前記メモリ装置の別のアドレス領域にあらかじめ格納されている確認コードと前記計算ステップで求めた検査コードとの整合性を検査し、この結果に基づいて、前記ＣＰＵが所定のプログラムを実行する実行状態と前記ＣＰＵが実質的に停止状態にある待機状態とのうち、いずれか一方を選択する第１の選択ステップと、を有することを特徴としている。
【００３５】
本発明によれば、ユーザー領域へのプログラム書込み手段、およびその書込み方法を公開しても、正規の手続きを踏まずに変更されたプログラムを実行することはできないので、ユーザーのメンテナンス性を損なうことなく、高いセキュリティを持った半導体装置の制御方法を実現することができる。
【００３６】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態（以下実施形態という）を説明する。本実施形態の説明では、半導体装置の基本的なハードウェア構成は、図３に示した一般的な機能ブロック図と同一であるので、詳しい説明は省略する。
【００３７】
図１は、本発明の実施形態に係わる半導体装置のメモリアドレス空間を示すメモリマップ図である。
【００３８】
メモリアドレス空間は、ＣＰＵ３１から見て一つのリニアな論理アドレスによって構成され、図１に示すように、データ領域１１、ユーザー領域１２、システム領域１３、および割込みベクトルテーブル１４がある。
【００３９】
物理的なメモリ装置としては、データ領域１１にはＲＡＭ３６が、ユーザー領域１２にはＥＥＰＲＯＭ３５が、システム領域１３および割込みベクトルにはＲＯＭ３４が、それぞれ割り付けられている。
【００４０】
ここでいうＲＯＭ３４とは、製品出荷後のユーザーによる書換えが不可能な読出し専用メモリ装置を意味している。製品出荷前の半導体メーカーによる当該メモリ装置への書込み手段の有無は問わない。
【００４１】
ユーザー領域１２には、ユーザープログラムとともに、当該プログラムのユーザーによる識別コードとして、確認コード１５がユーザーによって書き込まれる。この確認コード１５を除いたユーザー領域１２を検査対象領域１６と呼ぶ。
【００４２】
ユーザーはユーザー領域１２にユーザープログラムを書き込んだのち、半導体メーカーとの間であらかじめ定められているアルゴリズムにしたがって検査対象領域１６全域の演算を行い、この確認コード１５を求め、これをユーザー領域１２の決められたアドレス領域に書き込む。
【００４３】
実際には、後述するように、本発明の半導体装置においては、ユーザー領域１２に書き込んだデータを読み出すことはできないので、ユーザーは当該プログラムのコンパイルを行った際に、本発明の半導体装置を模倣した仮想アドレス空間上で上記演算を行い、確認コード１５を求め、当該プログラムと確認コード１５とを同時にユーザー領域１２へ書き込む必要がある。
【００４４】
確認コード１５を求めるアルゴリズムとしては、検査対象領域１６全域のデータを用いて演算を行うもので、演算の加法則が成立しないものが望ましい。ここでいう加法則が成立しないとは、新しく追加したプログラム部分のみの演算結果と元の確認コード１５とを単純にたし合わせても、追加したプログラムを含む全体の正しい確認コード１５に等しくはならないことをいう。これは、ユーザーが書き込んでいない空き領域に第三者が新たにプログラムを追加し、確認コード１５を書換えることができないようにするためである。
【００４５】
演算の加法則が成立しなければ、元のプログラムそのものを所持していない限り、新たに追加した部分を含めた正確な確認コード１５を求めることは、ほとんど不可能だからである。具体的な方法としては、検査対象領域１６の全データを２進数として加算し、結果のうちの複数バイトを利用するチェックサムを用いる。
【００４６】
次に、ＲＯＭ３４が割り付けられたシステム領域１３には検査ルーチン１７が置かれている。これは、上記の確認コード１５を求めるアルゴリズムと同じ方法で、検査対象領域１６を対象として、ユーザー領域１２に書きこまれているユーザープログラムを検査し、当該ユーザーが書きこんだものと同一であることをプログラムの実行直前に保証するシステムプログラムである。
【００４７】
このため、検査ルーチン１７はユーザーが書換えることのできないシステム領域１３（ＲＯＭ３４）に置く必要がある。
【００４８】
さらに、リセット割込みベクトル１８もＲＯＭ３４に置かれる。一般にリセット割込みを含む割込みベクトルテーブル１４はＲＯＭ３４に置かれることが多い。
【００４９】
ユーザーの利便性を考慮して、割込みベクトルテーブル１４をシステム起動後にＲＡＭ３６に再配置して、ユーザーがユーザープログラム中でこれらを書換えることができるようにした半導体装置もある。
【００５０】
しかし、本発明の半導体装置では、後述するように、プログラム実行直前にユーザープログラムの同一性を保証するため、少なくともリセット割込みベクトル１８は、他のメモリ装置への再配置は行わず、常に半導体メーカーがＲＯＭ３４に設定したものを使用する。
【００５１】
上述したメモリマップを持った本発明の半導体装置を用いて、ユーザープログラムの正当性を保証し、システムセキュリティを保持する制御方法を以下に説明する。
【００５２】
図２は、本発明の実施形態に係わる半導体装置の制御方法におけるブートシーケンスを示すフロー図である。
【００５３】
電源が投入されると、まず、割込み禁止ステップ２１で、マスク不可能なリセット割込み以外の外部割込みがすべて禁止され、ＣＰＵ３１は割込み禁止モードとなる。これは以下のブートシーケンスが終了し、ユーザー領域１２に書きこまれているユーザープログラムの正当性が確認されるまでは、外部割込みによってユーザープログラムなどが不正に実行されないようにするためである。
【００５４】
次に、書込み判定ステップ２２において、あらかじめ定められた方法により外部より与えられた信号によって、ユーザープログラムの書込みを行う書込み状態か、すでに書き込まれたユーザープログラムの実行を行う通常状態かが選択される。
【００５５】
ここで、書込み状態が選択されると（ＴＲＵＥ）、書込みステップ２３へ移行する。書込みステップ２３では、ＣＰＵ３１が外部バス３３およびＩ／Ｏ３２を介してユーザープログラムを１ワードずつ受け取り、ユーザー領域１２に順次書き込んでいく。
【００５６】
書込みが終了すると、ＣＰＵ３１は停止命令を実行し、本半導体装置は待機状態２４となる。ここではＣＰＵ３１の割込み禁止モードは解除されていないので、本半導体装置の電源を再投入するか、後述するリセット割込みによりＣＰＵ３１の実行制御を変更しない限り、待機状態２４を解除することはできない。
【００５７】
書込み判定ステップ２２で通常状態が選択されると（ＦＡＬＳＥ）、まず、初期化ステップ２５において、本半導体装置の内部状態が初期化される。
【００５８】
次に、検査コード計算ステップ２６において、前述の検査ルーチン１７を用いて、検査対象領域１６を対象にして検査コードが計算される。ここで用いられる計算アルゴリズムは、ユーザーがプログラムを書き込む際に確認コード１５を求めるのに用いたものと同じものである。
【００５９】
計算された検査コードは、検査コード判定ステップ２７において、ユーザーがあらかじめユーザー領域１２に書き込んでおいた確認コード１５と比較される。比較の結果が一致すれば（ＯＫ）、割込み許可ステップ２８でＣＰＵ３１の割込み禁止モードが解除され、ユーザープログラムのエントリーポイントに実行制御が移され、実行状態２９となる。
【００６０】
比較の結果が一致しなければ（ＮＧ）、通知ステップ３０が選択され、現在ユーザー領域１２にあるプログラムが不正なものであることを、Ｉ／Ｏ３２および外部バス３３を介して、外部に通知する。その後、ＣＰＵ３１は停止命令を実行するか、無限ループに入るなどして実質的な停止状態となり、本半導体装置は待機状態２４となる。
【００６１】
元のプログラムを所持しない第三者が正確な確認コード１５を求めることはほとんど不可能なので、不正に改ざんされたプログラムは、この比較結果が一致せず、本発明の半導体装置で実行されることはない。
【００６２】
上述したように、電源投入直後から割込み許可ステップ２８までは、マスク不可能なリセット割込みを除き、すべての外部割込みが禁止されている。また、リセット割込みベクトル１８はユーザーが書換え不可能なＲＯＭ３４に置かれており、その実行制御の変更先は、図２に示すように、電源投入時のエントリーポイントと同じアドレスに設定されている。このため、リセット割込みによってもＣＰＵ３１の実行制御をユーザーがコントロールすることはできない。
【００６３】
この様なブートシーケンスを用いることで、検査対象領域１６に書き込まれているユーザープログラムが確認コード１５と同時に正規のユーザーによって書き込まれたものであることが保証される。
【００６４】
上記実施形態によれば、改ざんされたプログラムを本発明の半導体装置で実行することはできないので、本発明の半導体装置を組込んだ機器が第三者により故意に暴走させられるなどの重大な問題を回避することができ、高いセキュリティを保持することができる。
【００６５】
たとえ、公開されている書込み手段を用いて、不正な改ざんを行ったとしても、元のプログラムを所持していない第三者は、正確な確認コード１５を求めることはほとんど不可能で、その改ざんされたプログラムを実行することはできない。
【００６６】
特に、本発明の半導体装置においては、確認コード１５、それを計算するアルゴリズム、確認コード１５の格納アドレスなど、セキュリティにかかわる情報が第三者に知られたとしても、改ざんされたプログラムを本発明の半導体装置で実行することはできない、という点は重要である。
【００６７】
また、本発明の半導体装置においては、ユーザープログラムの実行前に、毎回、ユーザー領域１２の空き領域も含め検査されるので、空き領域への不正プログラムの追加によるユーザープログラムの不正読出しなども阻止することができる。
【００６８】
一方、元のプログラムを所持している正規のユーザーは、プログラムの改良に伴って確認コード１５を更新することで、メンテナンス性を犠牲にすることなくバージョンアップなどを自由に行うことができる。
【００６９】
上記実施形態では、確認コード１５を求めるアルゴリズムとして、チェックサムを用いたが、本発明はこれに限られるものではない。例えば、データをビットシフトしながら加算していくＣＲＣＣ（巡回冗長検査コード）などを用いてもよい。また、計算結果をそのまま用いるのではなく、ユーザーごとに異なるキーワードで暗号化するなど、計算結果に各種の演算を施したものを確認コード１５として用いることもできる。
【００７０】
さらに、上記実施形態の説明では、簡単のため、各種メモリ装置は一つのリニアな論理アドレス空間に割り付けられているとしたが、本発明は、メモリ装置のより複雑な割り付け方法を持った半導体装置にも適用できる。
【００７１】
例えば、ＣＰＵ３１がシステムモードとユーザーモードとを持ち、それぞれの論理アドレス空間に割り付けられる物理メモリ装置が一部のアドレスでそれぞれ異なるような、バンク方式やマッピング方式のメモリ構成を持った半導体装置にも適用できる。
【００７２】
その場合、電源投入直後、およびリセット割込み直後には、図１と等価なアドレス空間を持つようにハードウェアを構成し、ユーザープログラムからはこれらメモリ装置の割り付けを変更できないようにしておけばよい。
【００７３】
【発明の効果】
以上説明したように本発明によれば、ユーザー領域へのプログラム書込み手段、およびその書込み方法を公開しても、正規の手続きを踏まずに変更されたプログラムを実行することはできないので、ユーザーのメンテナンス性を損なうことなく、高いセキュリティを実現することができる。
【図面の簡単な説明】
【図１】本発明の実施形態に係わる半導体装置のメモリアドレス空間を示すメモリマップ図。
【図２】本発明の実施形態に係わる半導体装置の制御方法におけるブートシーケンスを示すフロー図。
【図３】一般的な制御用マイコンの基本的なハードウェア構成を示す機能ブロック図。
【図４】一般的な制御用マイコンのメモリ割り付けの一例を示すメモリマップ図。
【図５】従来の半導体装置の制御方法におけるブートシーケンスを示すフロー図。
【符号の説明】
１１、４１  データ領域
１２、４２  ユーザー領域
１３、４３  システム領域
１４、４４  割込みベクトルテーブル
１５  確認コード
１６  検査対象領域
１７  検査ルーチン
１８  リセット割込みベクトル
２１、５１  割込み禁止ステップ
２２、５２  書込み判定ステップ
２３、５３  書込みステップ
２４、５４  待機状態
２５、５５  初期化ステップ
２６  検査コード計算ステップ
２７  検査コード判定ステップ
２８、５６  割込み許可ステップ
２９、５７  実行状態
３０  通知ステップ
３１  ＣＰＵ
３２  Ｉ／Ｏ
３３  外部バス
３４  ＲＯＭ
３５  ＥＥＰＲＯＭ
３６  ＲＡＭ
３７  データバス
３８  アドレスバス
３９  コントロールバス
【図１】
2004220296.tif 000003
【図２】
2004220296.tif 000004
【図３】
2004220296.tif 000005
【図４】
2004220296.tif 000006
【図５】
2004220296.tif 000007