(57)【要約】【課題】  検査後に不正なプログラムに書き換えられたとしても、そのプログラムの実行を防ぐことができ、また、いつの時点で、どのプログラムが不正に書き換えられたかを容易に確認することができるプログラム実行制御装置及びプログラム実行制御方法を提供することを目的とする。【解決手段】  本発明のプログラム実行制御装置は、プログラムを格納するフラッシュメモリ１０１と、前記プログラムの不正の有無を検査する検査時点を検出する条件検出部１０３と、前記検査時点で、前記不正の有無を検査する不正検査部１０４と、前記検査結果に応じて、前記プログラムを実行するか否かを制御する実行制御部１０５と、前記実行制御部１０５の結果に応じて、前記プログラムを実行するＣＰＵ１０２とを備える。【選択図】  図１
2005327187.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納するメモリと、
前記プログラムの不正の有無を検査する検査時点を検出する検出手段と、
前記検査時点で、前記不正の有無を検査する検査手段と、
前記検査手段により判断された不正無しのプログラムを実行するよう制御する制御手段と、
前記不正無しのプログラムを実行する実行手段と、
を備えるプログラム実行制御装置。
【請求項２】
前記制御手段は、前記検査手段により判断された不正有りのプログラムを実行させないよう制御し、
前記実行手段は、前記不正有りのプログラムを実行しない請求項１記載のプログラム実行制御装置
【請求項３】
前記検出手段は、所定の時点を検出する請求項２記載のプログラム実行制御装置。
【請求項４】
前記検出手段は、前記プログラムが書き換えられた時点を検出する請求項２記載のプログラム実行制御装置。
【請求項５】
前記検出手段は、一定間隔ごとの時点を検出する請求項２記載のプログラム実行制御装置。
【請求項６】
前記検査手段による検査の結果を記録する記録手段を備える請求項２から５のいずれかに記載のプログラム実行制御装置。
【請求項７】
前記制御手段は、前記記録手段に記録された検査の結果を参照し、前記不正無しのプログラムを実行するよう制御する請求項６記載のプログラム実行制御装置。
【請求項８】
前記制御手段は、前記記録手段に記録された検査の結果を参照し、前記不正有りのプログラムを実行させないよう制御する請求項７記載のプログラム実行制御装置。
【請求項９】
前記不正有りのプログラムを実行するか否かを判定する判定手段を備え、
前記制御手段は、実行すると判定された前記不正有りのプログラムを実行するよう制御する請求項２から８のいずれかに記載のプログラム実行制御装置。
【請求項１０】
メモリに格納されたプログラムの不正の有無を検査する検査時点を検出する検出ステップと、
前記検査時点で、前記不正の有無を検査する検査ステップと、
前記検査ステップにより判断された不正無しのプログラムを実行するよう制御する制御ステップと、
前記不正無しのプログラムを実行する実行ステップと、
を備えるプログラム実行制御方法。
【請求項１１】
前記制御ステップは、前記検査ステップにより判断された不正有りのプログラムを実行させないよう制御し、
前記実行ステップは、前記不正有りのプログラムを実行しない請求項１０記載のプログラム実行制御方法。
【請求項１２】
前記検出ステップは、所定の時点を検出する請求項１１記載のプログラム実行制御方法。
【請求項１３】
前記検出ステップは、前記プログラムが書き換えられた時点を検出する請求項１１記載のプログラム実行制御方法。
【請求項１４】
前記検出ステップは、一定間隔ごとの時点を検出する請求項１１記載のプログラム実行制御方法。
【請求項１５】
前記検査ステップによる検査の結果を記録する記録ステップを有する請求項１１から１４のいずれかに記載のプログラム実行制御方法。
【請求項１６】
前記制御ステップは、記録された検査の結果を参照し、前記不正無しのプログラムを実行するよう制御する請求項１５記載のプログラム実行制御方法。
【請求項１７】
前記制御ステップは、記録された検査の結果を参照し、前記不正有りのプログラムを実行させないよう制御する請求項１６記載のプログラム実行制御方法。
【請求項１８】
前記不正有りのプログラムを実行するか否かを判定する判定ステップを有し、
前記制御ステップは、実行すると判定された前記不正有りのプログラムを実行するよう制御する請求項１１から１７のいずれかに記載のプログラム実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正なプログラムの実行を防止するプログラム実行制御装置及びプログラム実行制御方法に関する。
【背景技術】
【０００２】
従来、プログラムを格納し、格納したプログラムの消去及び書き換えをすることができるメモリと、メモリに格納されたプログラムの命令を解釈し実行するＣＰＵとを含むシステムを、意図しない不正なプログラムの実行から保護する方法として、実行するプログラムを格納するメモリの書き換えを所定の方法で保護することで、不正なプログラムの書き換えを防止し、不正なプログラムの実行を防止する第１の方法（例えば、非特許文献１参照）と、メモリに格納されたプログラムをシステムの電源投入またはハードウェアリセット後に所定の方法で検査し、正常と判定されたプログラムのみをＣＰＵで実行することで、不正なプログラムの実行を防止する第２の方法（例えば、特許文献１または特許文献２を参照）が知られている。
【０００３】
第１の方法として、例えば、ＦＡＳＬ  ＬＬＣ社製のフラッシュメモリＳ２９ＧＬ５１２Ｎに搭載されているプロテクト機能が知られており、所定のコマンドを実行することにより不正な書き換えから保護する恒久プロテクトと、使用者が定義したパスワードにより不正な書き換えから保護するパスワードプロテクトなどが知られている。
【０００４】
第２の方法として、特許文献１に記載された発明は、システムを作動させるためのプログラムを格納する外部ＲＯＭと、情報書き込み後に消去・再書き込みができなくなるよう構成された内蔵ＰＲＯＭと、ＣＰＵとを含む装置において、電源投入またはハードウェアリセット後に、内蔵ＰＲＯＭに格納されたプログラムにより、外部ＲＯＭのデータを検査して、正常であれば外部ＲＯＭのプログラムを実行し、異常であれば検査を繰り返すというものである。
【０００５】
また、第２の方法として、特許文献２に記載された発明は、メッセージ・ダイジェスト処理された実行プログラムを格納するメモリと、メッセージ・ダイジェスト処理し、プログラムを実行する処理部と、を含む装置において、電源投入またはハードウェアリセット後に、メッセージ・ダイジェスト方法によって所定の実行プログラムを検査し、正常であれば実行プログラムを実行し、異常であれば実行プログラムを停止するというものである。
【非特許文献１】Ｓ２９ＧＬｘｘｘＮ  ＭｉｒｒｏｒＢｉｔ  フラッシュファミリ  データシート  文書番号Ｊ２７６３１  改定Ａ  修正Ｉ  発行日  ２００３年１２月１５日  （２７６３１−ＡＩ  Ｏｃｔ  １６、０３）  ｐ．４５  セクタプロテクト
【特許文献１】特開平９−３２５９１４号
【特許文献２】特開平１１−３９１５８号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１、２に記載された発明は、メモリに格納されているプログラムの検査を電源投入後またはハードウェアリセット後に実施し、その時点以外の検査を実施しない。近年のＯＳを用いたシステムでは、電源投入またはハードウェアリセット後にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）というプログラム全般を制御するプログラムが最初に実行され、その後でＯＳ上で動作するアプリケーション・プログラムが実行されるよう構成されているため、検査後にネットワーク経由またはＣＤ−ＲＯＭなどの記憶媒体から不正なアプリケーション・プログラムやその他の不正なプログラムがメモリに格納された場合、あるいは、検査後に不正なプログラムが格納された別のメモリに物理的に取り替えられた場合、不正なプログラムを発見することができず、結果として不正なプログラムの実行を許してしまうことになる。
【０００７】
また、検査後に不正なプログラムがメモリに格納されても、不正なプログラムを発見できないため、いつの時点で、どのプログラムが不正に書き換えられたかを確認することができなかった。
【０００８】
本発明は、上記の課題を解決するもので、どの時点で不正なプログラムに書き換えられたとしても、その不正なプログラムの実行を防ぐことができるプログラム実行制御装置及びプログラム実行制御方法を提供することを目的とする。
【０００９】
また、本発明は、いつの時点で、どのプログラムが不正なプログラムに書き換えられたかを容易に確認することができるプログラム実行制御装置及びプログラム実行制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明のプログラム実行制御装置は、プログラムを格納するメモリと、前記プログラムの不正の有無を検査する検査時点を検出する検出手段と、前記検査時点で、前記不正の有無を検査する検査手段と、前記検査手段により判断された不正無しのプログラムを実行するよう制御する制御手段と、前記不正無しのプログラムを実行する実行手段と、を備える。
【００１１】
また、本発明のプログラム実行制御装置は、前記制御手段が、前記検査手段により判断された不正有りのプログラムを実行させないよう制御し、前記実行手段が、前記不正有りのプログラムを実行しない。
【００１２】
本発明のプログラム実行制御方法は、メモリに格納されたプログラムの不正の有無を検査する検査時点を検出する検出ステップと、前記検査時点で、前記不正の有無を検査する検査ステップと、前記検査ステップにより判断された不正無しのプログラムを実行するよう制御する制御ステップと、前記不正無しのプログラムを実行する実行ステップと、を備える。
【００１３】
また、本発明のプログラム実行制御方法は、前記制御ステップが、前記検査ステップにより判断された不正有りのプログラムを実行させないよう制御し、前記実行ステップが、前記不正有りのプログラムを実行しない。
【００１４】
従来、固定の時点でのみプログラムの不正の有無を検査していたため、不正なプログラムを発見できないことがあったが、この構成によれば、任意の検査時点でプログラムの不正の有無を検査するため、不正なプログラムを見落とすことなく発見できる。
【００１５】
また、本発明のプログラム実行制御装置は、前記検出手段が、所定の時点を検出する。
【００１６】
また、本発明のプログラム実行制御方法は、前記検出ステップが、所定の時点を検出する。
【００１７】
この構成によれば、予め設定した複数の時点でプログラムの不正の有無を検査するため、不正なプログラムを効率的に発見できる。
【００１８】
また、本発明のプログラム実行制御装置は、前記検出手段が、前記プログラムが書き換えられた時点を検出する。
【００１９】
また、本発明のプログラム実行制御方法は、前記検出ステップが、前記プログラムが書き換えられた時点を検出する。
【００２０】
この構成によれば、プログラムが書き換えられた全ての時点でプログラムを検査するため、不正なプログラムに書き換えられた時点で即座に発見できる。
【００２１】
また、本発明のプログラム実行制御装置は、前記検出手段が、一定間隔ごとの時点を検出する。
【００２２】
また、本発明のプログラム実行制御方法は、前記検出ステップが、一定間隔ごとの時点を検出する。
【００２３】
この構成によれば、一定間隔ごとにプログラムを検査するため、不正なプログラムに書き換えられても、効率的に不正なプログラムを発見できる。
【００２４】
また、本発明のプログラム実行制御装置は、前記検査手段による検査の結果を記録する記録手段を備える。
【００２５】
また、本発明のプログラム実行制御方法は、前記検査ステップによる検査の結果を記録する記録ステップを有する。
【００２６】
この構成によれば、検査手段による検査結果を記録しておくことによって、いつの時点で、どのプログラムが不正に書き換えられたかを確認することができる。
【００２７】
また、本発明のプログラム実行制御装置は、前記制御手段が、前記記録手段に記録された検査の結果を参照し、前記不正無しのプログラムを実行するよう制御する。
【００２８】
また、本発明のプログラム実行制御方法は、前記制御ステップが、記録された検査の結果を参照し、前記不正無しのプログラムを実行するよう制御する。
【００２９】
また、本発明のプログラム実行制御装置は、前記制御手段が、前記記録手段に記録された検査の結果を参照し、前記不正有りのプログラムを実行させないよう制御する。
【００３０】
また、本発明のプログラム実行制御方法は、前記制御ステップが、記録された検査の結果を参照し、前記不正有りのプログラムを実行させないよう制御する。
【００３１】
この構成によれば、記録された検査結果を参照して不正無しのプログラムを実行することによって、不正なプログラムの有無を検査するたびに、プログラムを実行するか否かを制御する必要が無いため、効率的にプログラムを実行することができる。
【００３２】
また、本発明のプログラム実行制御装置は、前記不正有りのプログラムを実行するか否かを判定する判定手段を備え、前記制御手段が、実行すると判定された前記不正有りのプログラムを実行するよう制御する。
【００３３】
また、本発明のプログラム実行制御方法は、前記不正有りのプログラムを実行するか否かを判定する判定ステップを有し、前記制御ステップが、実行すると判定された前記不正有りのプログラムを実行するよう制御する。
【００３４】
この構成によれば、不正されても影響が無い、或いは、小さいプログラムが不正なプログラムに書き換えられても、そのプログラムを実行するよう制御することによって、効率的にプログラムを実行することができる。
【発明の効果】
【００３５】
本発明のプログラム実行制御装置及びプログラム実行制御方法によれば、任意の検査時点でプログラムの不正の有無を検査するため、不正なプログラムを見落とすことなく発見し、不正なプログラムの実行を防ぐことができる。
【００３６】
また、本発明のプログラム実行制御装置及びプログラム実行制御方法によれば、検査手段による検査結果を記録しておくことによって、いつの時点で、どのプログラムが不正に書き換えられたかを確認することができる。
【発明を実施するための最良の形態】
【００３７】
本発明のプログラム実行制御装置及びプログラム実行制御方法の実施形態について、図面を参照しながら説明する。
【００３８】
（第１の実施の形態）
図１は、本発明に係る第１の実施の形態のプログラム実行制御装置を示す構成図である。プログラム実行制御装置は、実行するプログラムを格納するフラッシュメモリ１０１と、プログラムを実行するＣＰＵ１０２と、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられたことを検出する条件検出部１０３と、条件検出部１０３が検出したときにフラッシュメモリ１０１に格納されているプログラムが不正か否かを検査する不正検査部１０４と、不正検査部１０４の結果に応じてプログラムの実行を制御する実行制御部１０５とで構成されている。
【００３９】
ここで、不正なプログラムとは、本発明に係る実施の形態の不正検査部が一意に判定することができるプログラムのことである。不正検査部は、例えば、従来から知られているように、実行するプログラムが格納されたフラッシュメモリ上の全てのデータを加算した値と予め決められている正常な値とを比較し、正常な値と異なっていた場合、そのデータを有するプログラムを不正なプログラムと判定する。以下の説明では、全てこのような意味で不正なプログラムという表現を用いるものとする。
【００４０】
図１０、図１１のメモリイメージ図を用いて、第１の実施の形態の不正検査部が不正なプログラムであると判定する検査方法について詳細に説明する。
【００４１】
図１０は、プログラムが格納されているメモリイメージ図である。０ｘ００００００００番地から０ｘ０００００１ＦＦ番地までがメモリの全領域１２００であり、０ｘ００００００００番地から０ｘ０００００１Ｂ７番地までにプログラム１２０１が格納されており、０ｘ０００００１Ｂ８番地から０ｘ０００００１ＦＦ番地までの空き空間にはメモリの初期値である０ｘＦＦが格納されている。不正検査はまず全領域の値の総和１２０２を算出する。０ｘ００００００００番地の０ｘＤＣから０ｘ０００００１ＦＦ番地の０ｘＦＦまでを加算すると０ｘ０００１２３ＤＣとなる。次に、総和の下位８ビットの検査値１２０３を算出すると０ｘＤＣとなる。この検出値とあらかじめ決めておいた８ビットの期待値１２０４である０ｘ００００００００番地の０ｘＤＣと比較する。図１０のメモリイメージの場合は検査値１２０３と期待値１２０４が０ｘＤＣで一致するため検査結果は正常と判定される。
【００４２】
一方、図１１は、図１０のメモリに動的にプログラム１３０１が追加されたメモリイメージ図である。追加プログラム１３０１は、図１０の空き空間である０ｘ０００００１Ｂ８番地から格納される。格納された領域は０ｘ０００００１Ｂ８番地から０ｘ０００００１ＦＢ番地までである。不正検査は、図１０で説明した方法と同様に行い、検査値１２０３と期待値１２０４が０ｘＤＣで一致するため、検査結果は正常と判定される。プログラムが追加されているにも関わらず正常と判定される理由は、正常な追加プログラム１３０１は検査値１２０３と期待値１２０４とを一致させるための補正値１３０２を備えているためである。追加プログラム１３０１の末尾である０ｘ０００００１ＦＢ番地の０ｘ１Ａが補正値１３０２であるが、この補正値１３０２を含めて全領域の値の総和１２０２を算出することで、検査値１２０３と期待値１２０４が一致する。不正に追加されたプログラムの末尾は、この補正値１３０２ではなく、メモリの初期値である０ｘＦＦのままである。このため、不正に追加されたプログラムの場合、０ｘ０００００１ＦＢ番地が０ｘＦＦでは検査値１２０３が０ｘＣ２となり、期待値１２０４と異なるため、不正なプログラムと判定される。
【００４３】
なお、検査方法をあらかじめ決めておいた８ビットの期待値と、フラッシュメモリ１０１の全領域の値の総和の下位８ビットの検査値とを比較して一致するかどうかで判定する検査方法に限定して説明したが、その要旨を逸脱しない範囲で種々変形した検査方法を採用することができる。また、検査方法をプログラムとして実装する場合は、プログラムを読み出しできないメモリに格納する、マスクＲＯＭに格納する、あるいは検査用のハードウェアとする、などの対応をとることで、検査方法の解読を防止する。尚、上述のメモリイメージ図を用いた検査方法は、以下で説明する実施の形態においても同じため、以下では説明を省略する。
【００４４】
図２は、本発明に係る第１の実施の形態のプログラム実行制御装置の処理フロー図である。まず、条件検出部１０３が、フラッシュメモリ１０１に格納されたプログラムがＣＰＵ１０２によって書き換えられたことを検出する（ステップＳ２０１）。ここで、条件検出部１０３がプログラムの書き換えを検出する方法として、本実施の形態では、フラッシュメモリ１０１に対して書き換えコマンドが発行され、書き換え処理が完了したことを検出する。
【００４５】
次に、上述の検査方法によって、不正検査部１０４が、フラッシュメモリ１０１に書き換えられたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００４６】
次に、不正検査部１０４が、ステップＳ２０２における検査結果を実行制御部１０５に伝える（ステップＳ２０３）。実行制御部１０５は、ステップＳ２０３で検査結果が正常と伝えられたのであれば、ＣＰＵ１０２を起動してプログラムを実行させる（ステップＳ２０４）。また、ステップＳ２０３で検査結果が不正と伝えられたのであれば、ＣＰＵ１０２を停止するなどの制御を行い、不正と判定されたプログラムをＣＰＵ１０２が実行しないようにする（ステップＳ２０５）。
【００４７】
以上のように、本発明に係る第１の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリに格納されたプログラムが書き換えられるごとに、プログラムを検査することによって、フラッシュメモリに格納されたプログラムが不正なプログラムに書き換えられたとしても、不正なプログラムの実行を防止することができる。
【００４８】
また、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられるタイミングは、フラッシュメモリ１０１の全領域が初期状態でプログラムが書き換えられた時、既存のプログラムが動作した後で動的に別のプログラムが追加されるタイミングである。
【００４９】
（第２の実施の形態）
第２の実施の形態のプログラム実行制御装置の構成は、図１に示す第１の実施の形態のプログラム実行制御装置の構成と同じである。第２の実施の形態のプログラム実行制御装置が第１の実施の形態と異なるのは、条件検出部１０３がＣＰＵ１０２に内蔵されるタイマからの割込み信号を検出することである。不正検査部１０４は、条件検出部１０３がタイマからの割込み信号を検出したときに、フラッシュメモリ１０１に格納されているプログラムが不正か否かを検査し、実行制御部１０５は、不正検査部１０４の結果に応じてプログラムの実行を制御するよう構成されている。
【００５０】
また、第２の実施の形態のプログラム実行制御装置の処理フロー図は、図２に示す第１の実施の形態のプログラム実行制御装置の処理フロー図を用いて説明できる。まず、条件検出部１０３が、タイマからの割込み信号を検出する（ステップＳ２０１）。ここで、ＣＰＵ１０２は、割込み信号を一定時間毎に繰り返し発生させることができる。その時間間隔は、実施時に一意に決めることができ、例えば１０秒間隔のように決めることができる。
【００５１】
次に、不正検査部１０４が、フラッシュメモリ１０１に格納されたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００５２】
次に、不正検査部１０４が、ステップＳ２０２における検査結果を実行制御部１０５に伝える（ステップＳ２０３）。実行制御部１０５は、ステップＳ２０３で検査結果が正常と伝えられたのであれば、ＣＰＵ１０２を起動してプログラムを実行させる（ステップＳ２０４）。また、ステップＳ２０３で検査結果が不正と伝えられたのであれば、ＣＰＵ１０２を停止するなどの制御を行い、不正と判定されたプログラムをＣＰＵ１０２が実行しないようにする（ステップＳ２０５）。
【００５３】
以上のように、本発明に係る第２の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリ１０１が物理的に取り外し可能であって、不正なプログラムを格納した別のフラッシュメモリ１０１に取り替えられるなどの方法によって、フラッシュメモリ１０１に格納されたプログラムが書き換えられたことを検出できない場合でも、一定時間毎に繰り返し発生する割込み信号が発生した時に、フラッシュメモリに格納されたプログラムが不正か否かを検査することによって、不正なプログラムの実行を防ぐことができる。
【００５４】
（第３の実施の形態）
図３は、本発明に係る第３の実施の形態のプログラム実行制御装置を示す構成図である。プログラム実行制御装置は、実行するプログラムを格納するフラッシュメモリ１０１と、プログラムを実行するＣＰＵ１０２と、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられたことを検出する条件検出部１０３と、条件検出部１０３が検出したときにフラッシュメモリ１０１に格納されているプログラムが不正か否かを検査する不正検査部１０４と、不正検査部１０４の結果及びフラッシュメモリ１０１におけるＣＰＵ１０２の命令フェッチのアドレスを参照して、ＣＰＵ１０２へのプログラムの発行を制御するアクセス制御部３０１とで構成されている。
【００５５】
図４は、本発明に係る第３の実施の形態のプログラム実行制御装置の処理フロー図である。まず、条件検出部１０３が、フラッシュメモリ１０１に格納されたプログラムがＣＰＵ１０２によって書き換えられたことを検出する（ステップＳ２０１）。ここで、条件検出部１０３がプログラムが書き換えられたことを検出する方法として、本実施の形態では、フラッシュメモリ１０１に対して書き換えコマンドが発行され、書き換え処理が完了したことを検出する。
【００５６】
次に、不正検査部１０４が、フラッシュメモリ１０１に書き換えられたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００５７】
次に、不正検査部１０４が、ステップＳ２０２における検査結果をアクセス制御部３０１に伝える。（ステップＳ２０３）。アクセス制御部３０１は、ステップＳ２０３で検査結果が正常と伝えられたのであれば、フラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ４０１）。ステップＳ２０３で検査結果が不正と伝えられたのであれば、アクセス制御部３０１はＣＰＵ１０２の命令フェッチのアドレスを参照し、不正なプログラムであっても実行できるか否かを判定する（ステップＳ４０２）。
【００５８】
ステップＳ４０２で実行できると判定されれば、アクセス制御部３０１はフラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ４０１）。ステップＳ４０２で実行できないと判定されれば、アクセス制御部３０１はＣＰＵ１０２で何もしない命令であるＮＯＰ命令をＣＰＵ１０２に発行する（ステップＳ４０４）。
【００５９】
次に、ステップＳ４０１またはステップＳ４０４で発行された命令をＣＰＵ１０２が受け取り、ＣＰＵ１０２がプログラムを実行またはＮＯＰ命令を実行する（ステップＳ４０３）。
【００６０】
ここで、命令フェッチのアドレスを参照し、不正なプログラムであっても実行するか否かを判定することによって、ステップＳ４０１またはステップＳ４０４に分岐させる理由は、例えばシステムの初期化処理を必ず行わなければならないシステムを動作させる場合、初期化処理のプログラムを格納しているアドレスは不正なプログラムと判定された場合であってもそのプログラムを実行するとし、それ以外のプログラムを格納しているアドレスは不正なプログラムであれば実行しないようにすると、不正検査部１０４が不正プログラムと判断してもその不正の影響が無い、或いは、小さい初期化処理のプログラムは動作させるが、その不正の影響が大きいそれ以外のプログラムは動作させないよう制御することができ、円滑に、効率よくプログラムの実行を制御することができる。また、内部メモリのアドレスは不正なプログラムと判定された場合であってもそのプログラムを実行するようにし、外部メモリのアドレスは不正なプログラムであれば実行しないようにすることによって、効率よくプログラムの実行を制御することができる。
また、プログラムが書き換えできない領域のメモリのアドレスは不正なプログラムと判定された場合であってもそのプログラムを実行するようにし、プログラムが書き換えできる領域のメモリのアドレスは不正なプログラムであれば実行しないようにすることによって、効率よくプログラムの実行を制御することができる。
【００６１】
なお、上記の説明では、ステップＳ４０４において、アクセス制御部３０１がＣＰＵ１０２に何も実行しないＮＯＰ命令を発行するよう制御する例について説明したが、これに限定されない。例えば、ＣＰＵ１０２が実質的に停止する（クロックの停止など）命令であっても良いし、ＣＰＵ１０２がユーザプログラムではなく、デバッグ用のプログラムを実行する命令を発行するものでも良い。
【００６２】
以上のように、本発明に係る第３の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリに格納されたプログラムが書き換えられるごとに、プログラムを検査することによって、フラッシュメモリに格納されたプログラムが不正なプログラムに書き換えられたとしても、不正なプログラムの実行を防止することができる。また、不正されても影響が無い、或いは、小さいプログラムなどの特定のプログラムが不正なプログラムに書き換えられても、そのプログラムを実行するよう制御することによって、円滑に、効率よくプログラムの実行を制御することができる。
【００６３】
（第４の実施の形態）
第４の実施の形態のプログラム実行制御装置の構成は、図３に示す第３の実施の形態のプログラム実行制御装置の構成と同じである。第４の実施の形態のプログラム実行制御装置が第３の実施の形態と異なるのは、条件検出部１０３がＣＰＵ１０２に内蔵されるタイマからの割込み信号を検出することである。不正検査部１０４は、条件検出部１０３がタイマからの割込み信号を検出したときに、フラッシュメモリ１０１に格納されているプログラムが不正か否かを検査し、アクセス制御部３０１は、不正検査部１０４の結果及びフラッシュメモリ１０１におけるＣＰＵ１０２の命令フェッチのアドレスを参照して、ＣＰＵ１０２へのプログラムの発行を制御するよう構成されている。
【００６４】
また、第４の実施の形態におけるプログラム実行制御装置の処理フロー図は、図４に示す第３の実施の形態のプログラム実行制御装置の処理フロー図を用いて説明できる。まず、条件検出部１０３が、タイマからの割込み信号を検出する（ステップＳ２０１）。ここで、ＣＰＵ１０２は、割込み信号を一定時間毎に繰り返し発生させることができる。その時間間隔は、実施時に一意に決めることができ、例えば１０秒間隔のように決めることができる。
【００６５】
次に、不正検査部１０４が、フラッシュメモリ１０１に書き換えられたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００６６】
次に、不正検査部１０４が、ステップＳ２０２における検査結果をアクセス制御部３０１に伝える（ステップＳ２０３）。アクセス制御部３０１は、ステップＳ２０３で検査結果が正常と伝えられたのであれば、フラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ４０１）。ステップＳ２０３で検査結果が不正と伝えられたのであれば、アクセス制御部３０１はＣＰＵ１０２の命令フェッチのアドレスを参照し、不正なプログラムであっても実行できるか否かを判定する（ステップＳ４０２）。
【００６７】
ステップＳ４０２で実行できると判定されれば、アクセス制御部３０１はフラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ４０１）。ステップＳ４０２で実行できないと判定と判定されれば、アクセス制御部３０１はＣＰＵ１０２で何もしない命令であるＮＯＰ命令をＣＰＵ１０２に発行する（ステップＳ４０４）。
【００６８】
次に、ステップＳ４０１またはステップＳ４０４で発行された命令をＣＰＵ１０２が受け取り、ＣＰＵ１０２がプログラムを実行またはＮＯＰ命令を実行する（ステップＳ４０３）。
【００６９】
なお、命令フェッチのアドレスを参照し、不正なプログラムであっても実行するか否かを判定することによって、ステップＳ４０１またはステップＳ４０４に分岐させる理由は、第３の実施の形態の場合と同じため説明を省略する。
【００７０】
以上のように、本発明に係る第４の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリ１０１が物理的に取り外し可能であって、不正なプログラムを格納した別のフラッシュメモリ１０１に取り替えられるなどの方法によって、フラッシュメモリ１０１に格納されたプログラムが書き換えられたことを検出できない場合でも、一定時間毎に繰り返し発生する割込み信号が発生した時に、フラッシュメモリに格納されたプログラムが不正か否かを検査することによって、不正なプログラムの実行を防ぐことができる。また、不正されても影響が無い、或いは、小さいプログラムなどの特定のプログラムが不正なプログラムに書き換えられても、そのプログラムを実行するよう制御することによって、円滑に、効率よくプログラムの実行を制御することができる。
【００７１】
（第５の実施の形態）
図５は、本発明に係る第５の実施の形態のプログラム実行制御装置を示す構成図である。プログラム実行制御装置は、実行するプログラムを格納するフラッシュメモリ１０１と、プログラムを実行するＣＰＵ１０２と、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられたことを検出する条件検出部１０３と、条件検出部１０３が検出したときにフラッシュメモリ１０１に格納されているプログラムが不正か否かを検査する不正検査部１０４と、不正記録メモリ５０２と、不正検査部１０４の結果を不正記録メモリ５０２に記録する不正記録部５０１と、不正記録メモリ５０２に記録された結果に応じてプログラムの実行を制御する実行制御部５０３とで構成されている。
【００７２】
図６及び図７は、本発明に係る第５の実施の形態のプログラム実行制御装置の処理フロー図である。
【００７３】
図６は、本発明に係る第５の実施の形態のプログラム実行制御装置が、不正記録メモリ５０２に不正検査部１０４の結果を記録するまでの処理を示すフロー図である。図６において、まず、条件検出部１０３が、フラッシュメモリ１０１に格納されたプログラムがＣＰＵ１０２によって書き換えられたことを検出する（ステップＳ２０１）。本実施の形態では、フラッシュメモリ１０１に対して書き換えコマンドが発行され、書き換え処理が完了したことを検出する。
【００７４】
次に、不正検査部１０４が、フラッシュメモリ１０１に書き換えられたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００７５】
次に、不正検査部１０４が、ステップＳ２０２における検査結果を不正記録部５０１に伝える（ステップＳ２０３）。ステップＳ２０３で検査結果が正常と伝えられたのであれば、不正記録部５０１が不正記録メモリ５０２に正常値を記録する（ステップＳ６０１）。また、ステップＳ２０３で検査結果が不正と伝えられた場合は、不正記録部５０１が不正記録メモリ５０２に不正値を記録する（ステップＳ６０２）。ここで、例えば、正常値とは１であり、不正値とは０であるとする。
【００７６】
図７は、本発明に係る第５の実施の形態のプログラム実行制御装置の処理フロー図である。既に不正検査が行われたプログラムを実行する時に、実行制御部５０３は不正記録メモリ５０２に予め記録した検査結果を取得する（ステップＳ７０１）。次に、取得した検査結果が正常値か不正値かの判定を行う（ステップＳ７０２）。
【００７７】
実行制御部５０３は、検査結果が正常値１であれば、ＣＰＵ１０２を起動してプログラムを実行させる（ステップＳ７０３）。また、実行制御部５０３は、検査結果が不正値０であれば、ＣＰＵ１０２を停止するなどの制御を行い、不正と判定されたプログラムをＣＰＵ１０２が実行しないようにする（ステップＳ７０４）。
【００７８】
以上のように、本発明に係る第５の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリに格納されたプログラムが書き換えられるごとに、プログラムを検査することによって、フラッシュメモリに格納されたプログラムが不正なプログラムに書き換えられたとしても、不正なプログラムの実行を防止することができる。また、検査結果を記録しておくことによって、不正なプログラム、及び、不正なプログラムが格納された時点を容易に確認することができる。また、記録した検査結果に応じてプログラムの実行を制御することによって、不正なプログラムの有無を検査するたびに、プログラムを実行するか否かを制御する必要が無いため、円滑に、効率よくプログラムの実行を制御することができる。
【００７９】
（第６の実施の形態）
第６の実施の形態のプログラム実行制御装置の構成は、第５の実施の形態のプログラム実行制御装置の構成と同じである。第６の実施の形態のプログラム実行制御装置が、第５の実施の形態と異なるのは、条件検出部１０３がＣＰＵ１０２に内蔵されるタイマからの割込み信号を検出することである。不正検査部１０４は、条件検出部１０３がタイマからの割込み信号を検出したときに、フラッシュメモリ１０１に格納されているプログラムが不正か否かを検査し、不正記録部５０１は、不正検査部１０４の結果を不正記録メモリ５０２に記録し、実行制御部５０３は、不正記録メモリ５０２に記録された結果に応じてプログラムの実行を制御するよう構成されている。
【００８０】
図６及び図７は、本発明に係る第６の実施の形態のプログラム実行制御装置の処理フロー図である。
【００８１】
図６は、本発明に係る第６の実施の形態のプログラム実行制御装置が、不正記録メモリ５０２に不正検査部１０４の結果を記録するまでの処理を示すフロー図である。図６において、まず、条件検出部１０３が、タイマからの割込み信号を検出する（ステップＳ２０１）。ここで、ＣＰＵ１０２は、割込み信号を一定時間毎に繰り返し発生させることができる。その時間間隔は、実施時に一意に決めることができ、例えば１０秒間隔のように決めることができる。
【００８２】
次に、不正検査部１０４が、フラッシュメモリ１０１に書き換えられたプログラムが不正か否かを検査する（ステップＳ２０２）。
【００８３】
次に、不正検査部１０４が、ステップＳ２０２における検査結果を不正記録部５０１に伝える（ステップＳ２０３）。ステップＳ２０３で検査結果が正常と伝えられたのであれば、不正記録部５０１が不正記録メモリ５０２に正常値を記録する（ステップＳ６０１）。また、ステップＳ２０３で検査結果が不正と伝えられた場合は、不正記録部５０１が不正記録メモリ５０２に不正値を記録する（ステップＳ６０２）。ここで、例えば、正常値とは１であり、不正値とは０であるとする。
【００８４】
図７は、本発明に係る第６の実施の形態のプログラム実行制御装置の処理フロー図である。既に不正検査が行われたプログラムを実行する時に、実行制御部５０３は不正記録メモリ５０２に予め記録した検査結果を取得する（ステップＳ７０１）。次に、取得した検査結果が正常値か不正値かの判定を行う（ステップＳ７０２）。
【００８５】
実行制御部５０３は、検査結果が正常値１であれば、ＣＰＵ１０２を起動してプログラムを実行させる（ステップＳ７０３）。また、実行制御部５０３は、検査結果が不正値０であれば、ＣＰＵ１０２を停止するなどの制御を行い、不正と判定されたプログラムをＣＰＵ１０２が実行しないようにする（ステップＳ７０４）。
【００８６】
以上のように、本発明に係る第４の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリ１０１が物理的に取り外し可能であって、不正なプログラムを格納した別のフラッシュメモリ１０１に取り替えられるなどの方法によって、フラッシュメモリ１０１に格納されたプログラムが書き換えられたことを検出できない場合でも、一定時間毎に繰り返し発生する割込み信号が発生した時に、フラッシュメモリに格納されたプログラムが不正か否かを検査することによって、不正なプログラムの実行を防ぐことができる。また、検査結果を記録しておくことによって、不正なプログラム、及び、不正なプログラムが格納された時点を容易に確認することができる。また、記録した検査結果に応じてプログラムの実行を制御することによって、不正なプログラムの有無を検査するたびに、プログラムを実行するか否かを制御する必要が無いため、円滑に、効率よくプログラムの実行を制御することができる。
【００８７】
（第７の実施の形態）
図８は、本発明に係る第７の実施の形態のプログラム実行制御装置を示す構成図である。プログラム実行制御装置は、実行するプログラムを格納するフラッシュメモリ１０１と、プログラムを実行するＣＰＵ１０２と、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられたことを検出する条件検出部１０３と、上検出部１０３が検出したときにフラッシュメモリ１０１に格納されたプログラムが不正か否かを検査する不正検査部１０４と、不正記録メモリ５０２と、不正検査部１０４の結果を不正記録メモリ５０２に記録する不正記録部５０１と、不正記録メモリ５０２に記録された結果及びフラッシュメモリ１０１におけるＣＰＵ１０２の命令フェッチのアドレスを参照して、ＣＰＵ１０２へのプログラムの発行を制御するアクセス制御部８０１で構成されている。
【００８８】
図９は、本発明に係る第７の実施の形態のプログラム実行制御装置の処理フロー図である。不正検査部１０４の結果を不正記録メモリ５０２に記録するまでの処理フローは、第５の実施の形態の場合と同じため説明を省略し、プログラムの実行を制御する処理を図９を用いて説明する。
【００８９】
既に不正検査が行われたプログラムを実行する時に、アクセス制御部８０１は不正記録メモリ５０２に予め記録した検査結果を取得する（ステップＳ７０１）。次に、取得した検査結果が正常値か不正値かの判定を行う（ステップＳ７０２）。
【００９０】
アクセス制御部８０１は、検査結果が正常値１であれば、フラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ９０１）。ステップＳ７０２で検査結果が不正値０であれば、アクセス制御部８０１はＣＰＵ１０２の命令フェッチのアドレスを参照し、不正なプログラムであっても実行できるか否かを判定する（ステップＳ９０２）。
【００９１】
ステップＳ９０２で実行できると判定されれば、アクセス制御部８０１はフラッシュメモリ１０１からプログラムを取得してＣＰＵ１０２に発行する（ステップＳ９０１）。ステップＳ９０２で実行できないと判定されれば、アクセス制御部８０１はＣＰＵ１０２で何もしない命令であるＮＯＰ命令をＣＰＵ１０２に発行する（ステップＳ９０４）。
【００９２】
次に、ステップＳ９０１またはステップＳ９０４で発行された命令をＣＰＵ１０２が受け取り、ＣＰＵ１０２がプログラムを実行またはＮＯＰ命令を実行する（ステップＳ９０３）。
【００９３】
なお、命令フェッチのアドレスを参照し、不正なプログラムであっても実行するか否かを判定することによって、ステップＳ９０１かステップＳ９０４に分岐する理由は、第３の実施の形態の場合と同じため説明を省略する。
【００９４】
以上のように、本発明に係る第７の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリに格納されたプログラムが書き換えられるごとに、プログラムを検査することによって、フラッシュメモリに格納されたプログラムが不正なプログラムに書き換えられたとしても、不正なプログラムの実行を防止することができる。また、検査結果を記録しておくことによって、不正なプログラム、及び、不正なプログラムが格納された時点を容易に確認することができる。また、記録した検査結果に応じてプログラムの実行を制御することによって、円滑に、効率よくプログラムの実行を制御することができる。また、不正されても影響が無い、或いは、小さいプログラムなどの特定のプログラムが不正なプログラムに書き換えられても、そのプログラムを実行するよう制御することによって、円滑に、効率よくプログラムの実行を制御することができる。
【００９５】
（第８の実施の形態）
第８の実施の形態のプログラム実行制御装置の構成は、図８に示す第７の実施の形態のプログラム制御装置の構成と同じである。第８の実施の形態のプログラム実行制御装置が第７の実施の形態と異なるのは、条件検出部１０３がＣＰＵ１０２に内蔵されるタイマからの割込みの信号を検出することである。不正検査部１０４は、条件検出部１０３がタイマからの割込み信号を検出したときに、フラッシュメモリ１０１に格納されているプログラムが不正か否かを検査し、不正記録部５０１は、不正検査部１０４の結果を不正記録メモリ５０２に記録し、アクセス制御部８０１は、不正記録メモリ５０２に記録された結果及びフラッシュメモリ１０１におけるＣＰＵ１０２の命令フェッチのアドレスを参照して、ＣＰＵ１０２へのプログラムの発行を制御するよう構成されている。
【００９６】
不正検査部１０４の結果を不正記録メモリ５０２に記録するまでの処理フローは、第６の実施の形態の場合と同じため説明を省略し、プログラムの実行を制御する処理フローは、第７の実施の形態の場合と同じため説明を省略する。
【００９７】
以上のように、本発明に係る第８の実施の形態のプログラム実行制御装置及びプログラム実行制御方法によれば、フラッシュメモリ１０１が物理的に取り外し可能であって、不正なプログラムを格納した別のフラッシュメモリ１０１に取り替えられるなどの方法によって、フラッシュメモリ１０１に格納されたプログラムが書き換えられたことを検出できない場合でも、一定時間毎に繰り返し発生する割込み信号が発生した時に、フラッシュメモリに格納されたプログラムが不正か否かを検査することによって、不正なプログラムの実行を防ぐことができる。また、検査結果を記録しておくことによって、不正なプログラム、及び、不正なプログラムが格納された時点を容易に確認することができる。また、記録した検査結果に応じてプログラムの実行を制御することによって、円滑に、効率よくプログラムの実行を制御することができる。また、不正されても影響が無い、或いは、小さいプログラムなどの特定のプログラムが不正なプログラムに書き換えられても、そのプログラムを実行するよう制御することによって、円滑に、効率よくプログラムの実行を制御することができる。
【００９８】
なお、実施の形態１から８において、実行するプログラムを格納するメモリをフラッシュメモリ１０１に限定して説明したが、プログラムを記憶するメモリであれば如何なるものであってもよい。
【００９９】
また、実施の形態１から８において、条件検出部１０３の条件を、フラッシュメモリ１０１がＣＰＵ１０２によって書き換えられた時と、ＣＰＵ１０２に内蔵されるタイマによって割込みが発生した時に限定して説明したが、検出する条件は、ＤＭＡや外部制御によるＣＰＵ１０２を使用しない書き換えがあった時や、プログラム中の専用命令が実行された時などの条件であってもよい。また、初期化処理が終了する時点の１０秒後とシステム全体が動作し始める時点の３０秒後というタンミングのように、複数の条件を設定し、その条件を満たすそれぞれの時点で検査をするようにしてもよい。
【産業上の利用可能性】
【０１００】
本発明に係るプログラム実行制御装置及びプログラム実行制御方法は、任意の検査時点でプログラムの不正の有無を検査するため、不正なプログラムを見落とすことなく発見し、不正なプログラムの実行を防ぐことができる。不正なプログラムに書き換えられた後に、その不正なプログラムを検査し、その検査結果を記録しておくことによって、いつの時点で、どのプログラムが不正に書き換えられたかを確認することができるため、不正なプログラムがメモリに格納され実行されたことに起因するシステムの不具合が発生した場合、不具合要因の特定が容易になるため、機器組み込みシステムのソフトウェア開発分野で有用である。
【図面の簡単な説明】
【０１０１】
【図１】本発明に係る第１、２の実施の形態のプログラム実行制御装置を示す構成図
【図２】本発明に係る第１、２の実施の形態のプログラム実行制御装置の処理フロー図
【図３】本発明に係る第３、４の実施の形態のプログラム実行制御装置を示す構成図
【図４】本発明に係る第３、４の実施の形態のプログラム実行制御装置の処理フロー図
【図５】本発明に係る第５、６の実施の形態のプログラム実行制御装置を示す構成図
【図６】本発明に係る第５、６、７、８の実施形態のプログラム実行制御装置の処理フロー図
【図７】本発明に係る第５、６の実施の形態のプログラム実行制御装置の処理フロー図
【図８】本発明に係る第７、８の実施の形態のプログラム実行制御装置を示す構成図
【図９】本発明に係る第７、８の実施の形態のプログラム実行制御装置の処理フロー図
【図１０】プログラムが格納されているメモリイメージ図
【図１１】動的にプログラムが追加されたメモリイメージ図
【符号の説明】
【０１０２】
１０１  フラッシュメモリ
１０２  ＣＰＵ
１０３  条件検出部
１０４  不正検査部
１０５  実行制御部
３０１  アクセス制御部
５０１  不正記録部
５０２  不正記録メモリ
５０３  実行制御部
８０１  アクセス制御部
９０１  書き換え制御部
１２００  メモリの全領域
１２０１  プログラム
１２０２  総和
１２０３  検査値
１２０４  期待値
１３０１  追加プログラム
１３０２  補正値
【図１】
2005327187.tif 000003
【図２】
2005327187.tif 000004
【図３】
2005327187.tif 000005
【図４】
2005327187.tif 000006
【図５】
2005327187.tif 000007
【図６】
2005327187.tif 000008
【図７】
2005327187.tif 000009
【図８】
2005327187.tif 000010
【図９】
2005327187.tif 000011
【図１０】
2005327187.tif 000012
【図１１】
2005327187.tif 000013