(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-30
(45)【発行日】2023-11-08
(54)【発明の名称】異常検出回路及び異常検出方法
(51)【国際特許分類】
G06F 11/07 20060101AFI20231031BHJP
【FI】
G06F11/07 157
(21)【出願番号】P 2022502705
(86)(22)【出願日】2020-02-27
(86)【国際出願番号】 JP2020008006
(87)【国際公開番号】W WO2021171472
(87)【国際公開日】2021-09-02
【審査請求日】2022-05-17
(73)【特許権者】
【識別番号】000106276
【氏名又は名称】サンケン電気株式会社
(74)【代理人】
【識別番号】100097113
【氏名又は名称】堀 城之
(74)【代理人】
【識別番号】100162363
【氏名又は名称】前島 幸彦
(72)【発明者】
【氏名】下山 直彦
【審査官】稲葉 崇
(56)【参考文献】
【文献】韓国公開特許第10-2019-0014387(KR,A)
【文献】特開2015-133573(JP,A)
【文献】特開平11-289324(JP,A)
【文献】特開2003-218850(JP,A)
【文献】特開平11-306047(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 11/07
G06F 11/30
H04L 9/00
(57)【特許請求の範囲】
【請求項1】
初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、
前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、
前記CPUから読み出し可能に種値を保存する種値記憶部と、
前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、
前記CPUによって鍵値が書き込まれる鍵値記憶部と、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器とを具備し、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時のカウント値を前記種値として前記種値記憶部に保存することを特徴とする異常検出回路。
【請求項2】
初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、
前記CPUから読み出し可能に種値を保存する種値記憶部と、
前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、
前記CPUによって鍵値が書き込まれる鍵値記憶部と、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器と、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致してもリセットされないフリーカウンタとを具備し、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における前記フリーカウンタのカウント値を前記種値として前記種値記憶部に保存することを特徴とする異常検出回路。
【請求項3】
初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、
前記CPUから読み出し可能に種値を保存する種値記憶部と、
前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、
前記CPUによって鍵値が書き込まれる鍵値記憶部と、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器と、
乱数発生器とを具備し、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時に前記乱数発生器が発生する乱数を前記種値として前記種値記憶部に保存することを特徴とする異常検出回路。
【請求項4】
初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、
前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場
合に、CPUの異常を検出する異常検出回路であって、
前記CPUから読み出し可能に種値を保存する種値記憶部と、
前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、
前記CPUによって鍵値が書き込まれる鍵値記憶部と、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器とを具備し、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における外部回路のカウント値や乱数を前記種値として前記種値記憶部に保存することを特徴とする異常検出回路。
【請求項5】
前記演算器による規定の演算処理は、前記種値としてとりうる値の種値集合と、前記検証用鍵値としてとりうる値の鍵値集合との関係として、前記種値集合から前記鍵値集合への写像が全単射であることを特徴とする請求項1乃至4のいずれかに記載の異常検出回路。
【請求項6】
前記演算器による規定の演算処理には、ビットスワップが含まれていることを特徴とする請求項1乃至5のいずれかに記載の異常検出回路。
【請求項7】
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが不一致である場合、前記カウンタをリセットすることなく、カウントを継続させることを特徴とする請求項1乃至
6のいずれかに記載の異常検出回路。
【請求項8】
請求項1乃至
7のいずれかに記載の異常検出回路と、前記CPUとを具備することを特徴とするマイクロコンピュータ。
【請求項9】
カウンタによって初期値からタイムアウト値に向けて所定のクロックでカウントを行い、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出方法であって、
種値記憶部に前記CPUから読み出し可能に種値を保存し、
演算器によって前記種値記憶部に保存した前記種値に対して規定の演算処理を実行することで検証用鍵値を生成し、
鍵値記憶部に前記CPUによって鍵値が書き込まれるのを待ち受け、
比較器によって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較し、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時のカウント値を前記種値として前記種値記憶部に保存することを特徴とする異常検出方法。
【請求項10】
カウンタによって初期値からタイムアウト値に向けて所定のクロックでカウントを行い
、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した
場合に、CPUの異常を検出する異常検出方法であって、
種値記憶部に前記CPUから読み出し可能に種値を保存し、
演算器によって前記種値記憶部に保存した前記種値に対して規定の演算処理を実行することで検証用鍵値を生成し、
鍵値記憶部に前記CPUによって鍵値が書き込まれるのを待ち受け、
比較器によって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較し、
フリーカウンタによって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致してもリセットすることなくカウントし、
前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における前記フリーカウンタのカウント値を前記種値として前記種値記憶部に保存することを特徴とする異常検出方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、CPUの異常を検出する異常検出回路及び異常検出方法に関する。
【背景技術】
【0002】
CPUの異常を検出する異常検出回路としてウォッチドッグタイマが知られている。ウォッチドッグタイマは、CPUによってカウントがリセットされることなく、カウント値が設定されたタイムアウト値に到達した場合にCPUの異常を検出する。
【0003】
CPUによるカウンタのリセットに際し、鍵値を使用することが提案されている(例えば、特許文献1、2参照)。特許文献1では、リセットに使用した鍵値の値に対して演算処理を行った値を、次に使用する鍵値として使用する。また、特許文献2では、カウンタのカウント値を次に使用する鍵値として使用する。
【先行技術文献】
【特許文献】
【0004】
【文献】特開平01-147643号公報
【文献】特開平11-306047号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1では、プログラムシーケンスを監視する機能として論理的監視を行う機能は満たすが、鍵となる値は一定周期を持つ繰り返し値であり、前の鍵が決まれば次の鍵が一意に決まる。従って、プログラムシーケンスの動作状況により次の鍵が変化することはなく、プログラムシーケンスの監視機能が弱いという問題点があった。
【0006】
また、特許文献2では、カウント値の読出しタイミングによって鍵値が異なるためプログラムシーケンスの動作状況によりランダム性が得られるが、読み出したそのままの値を鍵値として用いるため論理的な手順処理が無く、プログラムシーケンスの論理監視を行う監視機能が不足している。また、読み出したカウント値をそのまま鍵値として設定するため、CPUが読み出したカウント値を鍵値として書き込む前にデバッガ等の他のバスマスタがレジスタの読出しを行うと、鍵値が変化してしまいウォッチドッグタイマのカウンタがリセットされなくなってしまう。
【0007】
本発明は斯かる問題点を鑑みてなされたものであり、その目的とするところは、プログラムシーケンスを時間的及び論理的に監視することができる異常検出回路及び異常検出方法を提供する点にある。
【課題を解決するための手段】
【0008】
本発明に係る異常検出回路及び異常検出方法は、上記の目的を達成するため、次のように構成される。
本発明の異常検出回路は、初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、前記CPUから読み出し可能に種値を保存する種値記憶部と、前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、前記CPUによって鍵値が書き込まれる鍵値記憶部と、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器とを具備し、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時のカウント値を前記種値として前記種値記憶部に保存することを特徴とする。
また、本発明の異常検出回路は、初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、前記CPUから読み出し可能に種値を保存する種値記憶部と、前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、前記CPUによって鍵値が書き込まれる鍵値記憶部と、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器と、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致してもリセットされないフリーカウンタとを具備し、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における前記フリーカウンタのカウント値を前記種値として前記種値記憶部に保存することを特徴とする。
また、本発明の異常検出回路は、初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、前記CPUから読み出し可能に種値を保存する種値記憶部と、前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、前記CPUによって鍵値が書き込まれる鍵値記憶部と、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器と、乱数発生器とを具備し、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時に前記乱数発生器が発生する乱数を前記種値として前記種値記憶部に保存することを特徴とする。
また、本発明の異常検出回路は、初期値からタイムアウト値に向けて所定のクロックでカウントを行うカウンタを有し、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出回路であって、前記CPUから読み出し可能に種値を保存する種値記憶部と、前記種値記憶部に保存された前記種値に対して規定の演算処理を実行することで検証用鍵値を生成する演算器と、前記CPUによって鍵値が書き込まれる鍵値記憶部と、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較する比較器とを具備し、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における外部回路のカウント値や乱数を前記種値として前記種値記憶部に保存することを特徴とする。
また、本発明の異常検出方法は、カウンタによって初期値からタイムアウト値に向けて所定のクロックでカウントを行い、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出方法であって、種値記憶部に前記CPUから読み出し可能に種値を保存し、演算器によって前記種値記憶部に保存した前記種値に対して規定の演算処理を実行することで検証用鍵値を生成し、鍵値記憶部に前記CPUによって鍵値が書き込まれるのを待ち受け、比較器によって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較し、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時のカウント値を前記種値として前記種値記憶部に保存することを特徴とする。
また、本発明の異常検出方法は、カウンタによって初期値からタイムアウト値に向けて所定のクロックでカウントを行い、前記カウンタがリセットされることなく、カウント値が前記タイムアウト値に到達した場合に、CPUの異常を検出する異常検出方法であって、種値記憶部に前記CPUから読み出し可能に種値を保存し、演算器によって前記種値記憶部に保存した前記種値に対して規定の演算処理を実行することで検証用鍵値を生成し、鍵値記憶部に前記CPUによって鍵値が書き込まれるのを待ち受け、比較器によって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とを比較し、フリーカウンタによって前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致してもリセットすることなくカウントし、前記鍵値記憶部に書き込まれた前記鍵値と前記検証用鍵値とが一致した場合、前記カウンタをリセットすると共に、前記カウンタのリセット時における前記フリーカウンタのカウント値を前記種値として前記種値記憶部に保存することを特徴とする。
【発明の効果】
【0009】
本発明の異常検出回路及び異常検出方法によれば、CPUは、種値を読み出し、その都度異なる種値に対する規定の演算処理、鍵値の書き込みという一連の動作をカウント値がタイムアウト値に到達する前に実行する必要があるため、プログラムシーケンスを時間的及び論理的に監視することができるという効果を奏する。
【図面の簡単な説明】
【0010】
【
図1】本発明に係る異常検出回路の実施の形態を内蔵したマイクロコンピュータの構成を示すブロック図である。
【
図2】
図1に示す異常検出回路の一致時及び不一致時の動作を示すタイミングチャートである。
【
図3】
図1に示す異常検出回路のタイムアウト時の動作を示すタイミングチャートである。
【
図4】
図1に示す異常検出回路の他の構成例を示すブロック図である。
【
図5】
図4に示すフリーカウンタのカウント動作を示すタイミングチャートである。
【
図6】
図1に示す異常検出回路の他の構成例を示すブロック図である。
【発明を実施するための形態】
【0011】
以下に、本発明の好適な実施の形態を添付図面に基づいて説明する。
【0012】
本実施の形態の異常検出回路10は、
図1を参照すると、プログラムを実行するCPU2、CPU2が実行するプログラムを格納するROM3、CPU2のワーク領域となるRAM4等を有するマイクロコンピュータ1に内蔵され、例えば、1つの半導体チップに形成される。
【0013】
異常検出回路10は、CPU2によってカウントがリセットされることなく、設定されたカウント値に到達した場合にCPU2の異常を検出するウォッチドッグタイマであり、内部バス(BUS)5を介してCPU2に接続されている。
【0014】
異常検出回路10は、バスインターフェース(BUS_I/F)11と、カウンタ(COUNTER)12と、種値レジスタ(SEED)13と、演算器(CALCULATOR)14と、ライトキーレジスタ(WKEY)15と、比較器(COMPARE)16と、バッファ(WRITE_KEY_BUF)17と、第1アンド回路18と、第2アンド回路19と、第1オア回路20と、第2オア回路21とを備えている。
【0015】
カウンタ12は、初期値(INITIAL_VALUE)から所定のクロックでカウントを行い、カウント値が設定されたタイムアウト値(TIMEOUT_VALUE)に到達すると、カウントタイムアウト信号(COUNT_TIMEOUT)を出力する。
【0016】
また、カウンタ12は、リセットカウンタ信号(RESET_COUNTER)が入力されると、カウント値を初期値にリセットして、新たなカウントを開始する。また、リセットカウンタ信号(RESET_COUNTER)は、種値読み出し信号(LOAD_SEED)として種値レジスタ13に入力され、種値レジスタ13には、カウンタ12のリセット前のカウント値が種値(SEED)として保存される。
【0017】
種値レジスタ13は、バスインターフェース11を介してリードアクセス可能に構成されている。CPU2は、種値レジスタ13に保存された種値をカウンタ12のカウント値がタイムアウト値に到達する前に読み出す。
【0018】
種値は、カウンタ12をリセットした時のカウント値が種値レジスタ13に保存される。従って、プログラムシーケンスの動作状況により種値が変化する。また、種値レジスタ13へのリードアクセスでは、カウンタ12からの読み出しが発生しないため、他のバスマスタ等による種値レジスタ13へのリードアクセスが発生しても種値が変化することがない。
【0019】
演算器14は、種値レジスタ13に保存された種値に対して規定の演算処理を実施することで、鍵値(CKEY)を生成する。演算器14で実施される規定の演算処理は、種値から生成した鍵値が他の種値からは生成できない演算処理が適用される。すなわち、規定の演算処理は、種値としてとりうる値の種値集合と、鍵値としてとりうる値の鍵値集合との関係として、種値集合から鍵値集合への写像を全単射とした演算処理である。これにより、異なる種値に対して同一の鍵値が存在しないため、異なる種値から生成した鍵値が有効となることなく、論理的監視を行う機能の有効性が向上する。
【0020】
また、規定の演算処理では、種値と鍵値とが一対一に対応するため、鍵値のビット幅は、種値のビット幅以上に設定されている。すなわち、鍵値のビット幅が種値のビット幅未満の場合は、異なる種から同じ鍵が生成される虞がある。さらに、規定の演算処理において、種値の全ビットが演算で使用され、未使用のビットは無いように設定されている。
【0021】
規定の演算処理を複数の演算の組み合わせとし、個々の演算で全単射が維持されるようにすると良い。カウンタ12のカウント値及び鍵値(CKEY)を32bit幅とすると、例えば、ビットスワップと、固定値の加算(鍵値のビット幅を超えるキャリーは削除)と、ビット反転(固定値の排他的論理和)とを組み合わせた次式を規定の演算処理として適用することができる。
CKEY[31:0]=({SEED[7:0],SEED[31:8]} +0x85C421FE ) ^ 0x3486A8D7
【0022】
ライトキーレジスタ15は、バスインターフェース11を介してライトアクセス可能に構成されている。CPU2は、種値レジスタ13から読み出した種値に対して、演算器14と同じ規定の演算処理を実施することで、鍵値(WKEY)を生成し、ライトキーレジスタ15に書き込み信号(WRITE_KEY)を出力することで、生成した鍵値(WKEY)をカウンタ12のカウント値がタイムアウト値に到達する前にライトキーレジスタ15に書き込む。
【0023】
比較器16は、演算器14によって演算された鍵値(CKEY)と、ライトキーレジスタ15に書き込まれた鍵値(WKEY)とを比較し、両者が一致した場合にHIGHとなり、両者が不一致の場合にLOWとなる比較信号(COMP_KEY)を出力する。
【0024】
第1アンド回路18の一方の入力端子には、書き込み信号(WRITE_KEY)がバッファ17を介して1クロック分遅れた書き込みバッファ信号(WRITE_KEY_BUF)として入力され、第1アンド回路18の他方の反転入力端子には、比較器16から出力される比較信号(COMP_KEY)が入力される。これにより、書き込み信号(WRITE_KEY)に伴ってライトキーレジスタ15に書き込まれた鍵値(WKEY)が演算器14によって演算された鍵値(CKEY)と不一致である場合、第1アンド回路18の出力端子から不一致信号(UNMATCH KEY)が出力される。
【0025】
第2アンド回路19の一方の入力端子には、ライトキーレジスタ15への書き込み信号(WRITE_KEY)がバッファ17を介して1クロック分遅れた書き込みバッファ信号(WRITE_KEY_BUF)として入力され、第1アンド回路18の他方の入力端子には、比較器16から出力される比較信号(COMP_KEY)が入力される。これにより、書き込み信号(WRITE_KEY)に伴ってライトキーレジスタ15に書き込まれた鍵値(WKEY)が演算器14によって演算された鍵値(CKEY)と一致する場合、第2アンド回路19の出力端子から一致信号(MATCH_KEY)が出力される。
【0026】
第1オア回路20の一方の入力端子には、カウンタ12から出力されるカウントタイムアウト信号(COUNT_TIMEOUT)が入力され、第1オア回路20の他方の入力端子には、第1アンド回路18から出力される不一致信号(UNMATCH_KEY)が入力される。これにより、カウントタイムアウト信号(COUNT_TIMEOUT)と不一致信号(UNMATCH_KEY)とのいずれか若しくは両方が第1オア回路20に入力されると、第1オア回路20の出力端子からCPU2の異常を検出したエラー信号(ERROR)として出力される。
【0027】
第2オア回路21の一方の入力端子には、第1オア回路20から出力されるエラー信号(ERROR)が入力され、第2オア回路21の他方の入力端子には、第2アンド回路19から出力される一致信号(MATCH_KEY)が入力される。これにより、エラー信号(ERROR)と不一致信号(UNMATCH_KEY)とのいずれか若しくは両方が第2オア回路21に入力されると、第2オア回路21の出力端子からリセットカウンタ信号(RESET_COUNTER)が出力される。
【0028】
次に、異常検出回路10の一致時の動作について
図2を参照して説明する。
CPU2からの書き込み信号(WRITE_KEY)に伴って、時刻t1に、ライトキーレジスタ15に鍵値(WKEY: 0xB1428929)が書き込まれる。すると、比較器16は、演算器14によって、種値レジスタ13に保存されている種値(SEED:0x 00000000)に対して規程の演算処理を実施することで生成された鍵値(CKEY: 0xB1428929)と、ライトキーレジスタ15に書き込まれた鍵値(WKEY: 0xB1428929)とを比較する。
【0029】
すると、鍵値(CKEY: 0xB1428929)と鍵値(WKEY: 0xB1428929)とが一致して比較器16からの比較信号(COMP_KEY)がHIGHとなるため、書き込みバッファ信号(WRITE_KEY_BUF)が一致信号(MATCH_KEY)として第2アンド回路19の出力端子から出力される。そして、一致信号(MATCH_KEY)は、リセットカウンタ信号(RESET_COUNTER)及び種値読み出し信号(LOAD_SEED)として第2オア回路21の出力端子から出力される。これにより、カウンタ12は、カウント値を初期値にリセットして、新たなカウントを開始すると共に、種値レジスタ13には、カウンタ12のリセット前のカウント値(0x0000A38D)が種値(SEED: 0x0000A38D)として保存される。
【0030】
この場合、CPU2は、種値レジスタ13からの種値を読み出し、その都度異なる種値に対する規定の演算処理、ライトキーレジスタ15への鍵値の書き込みという一連の動作をカウンタ12のカウント値がタイムアウト値に到達する前に実行でき、種値に対する規定の演算処理が正常に行えたことになる。従って、CPU2でのプログラムシーケンスが正常に機能していることが、時間的及び論理的に検証されたことになる。
【0031】
次に、異常検出回路10の不一致時の動作について
図2を参照して説明する。
CPU2からの書き込み信号(WRITE_KEY)に伴って、時刻t2に、ライトキーレジスタ15に鍵値(WKEY: 0x12345678)が書き込まれる。すると、比較器16は、演算器14によって、種値レジスタ13に保存されている種値(SEED:0x0000A38D)に対して規程の演算処理を実施することで生成された鍵値(CKEY: 0x26428A76)と、ライトキーレジスタ15に書き込まれた鍵値(WKEY: 0x12345678)とを比較する。
【0032】
すると、鍵値(CKEY: 0xB1428929)と鍵値(WKEY: 0xB1428929)とが不一致となって比較器16からの比較信号(COMP_KEY)がLOWとなるため、書き込みバッファ信号(WRITE_KEY_BUF)が不一致信号(UNMATCH_KEY)として第1アンド回路18の出力端子から出力される。そして、不一致信号(UNMATCH_KEY)は、エラー信号(ERROR)として第1オア回路20の出力端子から出力されると共に、リセットカウンタ信号(RESET_COUNTER)及び種値読み出し信号(LOAD_SEED)として第2オア回路21の出力端子から出力される。これにより、カウンタ12は、カウント値を初期値にリセットして、新たなカウントを開始すると共に、種値レジスタ13には、カウンタ12のリセット前のカウント値(0x000002E5)が種値(SEED: 0x000002E5)として保存される。
【0033】
この場合、CPU2は、種値レジスタ13からの種値を読み出し、その都度異なる種値に対する規定の演算処理、ライトキーレジスタ15への鍵値の書き込みという一連の動作をカウンタ12のカウント値がタイムアウト値に到達する前に実行できたが、種値に対する規定の演算処理を正常に行えなかったことになる。従って、CPU2でのプログラムシーケンスが論理的に異常をきたしていることが検出される。
【0034】
次に、異常検出回路10のタイムアウト時の動作について
図3を参照して説明する。
CPU2からの書き込み信号(WRITE_KEY)が入力されることなく、時刻t3に、カウント値が設定されたタイムアウト値(TIMEOUT_VALUE)に到達すると、カウンタ12は、カウントタイムアウト信号(COUNT_TIMEOUT)を出力する。
【0035】
カウントタイムアウト信号(COUNT_TIMEOUT)は、エラー信号(ERROR)として第1オア回路20の出力端子から出力されると共に、リセットカウンタ信号(RESET_COUNTER)及び種値読み出し信号(LOAD_SEED)として第2オア回路21の出力端子から出力される。これにより、カウンタ12は、カウント値を初期値にリセットして、新たなカウントを開始すると共に、種値レジスタ13には、カウンタ12のリセット前のカウント値(0x02000000)が種値(SEED: 0x02000000)として保存される。
【0036】
この場合、CPU2は、種値レジスタ13からの種値を読み出し、その都度異なる種値に対する規定の演算処理、ライトキーレジスタ15への鍵値の書き込みという一連の動作をカウンタ12のカウント値がタイムアウト値に到達する前に実行できなかったことになる。従って、CPU2でのプログラムシーケンスが時間的に異常をきたしていることが検出される。
【0037】
図4に示す異常検出回路10aは、カウンタ12とは異なるフリーカウンタ22を備え、種値読み出し信号(LOAD_SEED)が種値レジスタ13に入力されると、フリーカウンタ22のカウント値が種値(SEED)として保存されるように構成されている。
【0038】
フリーカウンタ22は、
図5に示すように、カウンタ12をリセットするリセットカウンタ信号(RESET_COUNTER)によってリセットされることなく、所定のクロック信号に基づいて初期値(INITIAL_VALUE)と目標値(TARGET_VALUE)との間を順次カウントする。この例では、フリーカウンタ22という構成を追加する必要があるが、プログラムシーケンス毎の種値(SEED)を確実に異なる値にすることができる。すなわち、CPU2が同じタイミングで一連の動作を実行している場合、リセットカウンタ信号(RESET_COUNTER)によってリセットされるカウンタ12のリセット前のカウント値が同じ値となるケースが想定される。これに対し、フリーカウンタ22は、リセットカウンタ信号(RESET_COUNTER)によってリセットされることないため、CPU2が同じタイミングで一連の動作を実行しても、リセット時のカウント値が異なる値となる。なお、フリーカウンタ22において初期値(INITIAL_VALUE)と目標値(TARGET_VALUE)との間のカウント値は、十分に大きい値に設定することが好ましく、カウンタ12における初期値(INITIAL_VALUE)とタイムアウト値(TIMEOUT_VALUE)との間のカウント値以上に設定すると良い。
【0039】
また、フリーカウンタ22の代わりに乱数発生器を備え、種値読み出し信号(LOAD_SEED)が種値レジスタ13に入力されると、乱数発生器が発生させる乱数を種値(SEED)として保存させるようにしても良い。
【0040】
さらに、フリーカウンタ22や乱数発生器として機能する外部回路がある場合には、種値読み出し信号(LOAD_SEED)が種値レジスタ13に入力されると、外部回路のカウント値や乱数を種値(SEED)として保存させるようにしても良い。
【0041】
図6に示す異常検出回路10bは、第1アンド回路18及び第1オア回路20が省略され、鍵値(WKEY)と鍵値(CKEY)とが不一致であっても、エラー信号(ERROR)及びリセットカウンタ信号(RESET_COUNTER)が出力されないように構成されている。この場合、カウンタ12のカウント値がタイムアウト値(TIMEOUT_VALUE)に到達した場合のみ、カウントタイムアウト信号(COUNT_TIMEOUT)を出力され、エラー信号(ERROR)が出力されることになる。
【0042】
以上説明したように、本実施の形態は、初期値からタイムアウト値に向けてカウントを行うカウンタ12を有し、カウンタ12がリセットされることなく、カウント値がタイムアウト値に到達した場合に、CPU2の異常を検出する異常検出回路10であって、CPU2から読み出し可能に種値(SEED)を保存する種値記憶部である種値レジスタ13と、種値レジスタ13に保存された種値に対して規程の演算処理を実行することで検証用の鍵値(CKEY)を生成する演算器14と、CPU2によって鍵値(WKEY)が書き込まれる鍵値記憶部であるライトキーレジスタ15と、ライトキーレジスタ15に書き込まれた鍵値(WKEY)と検証用の鍵値(CKEY)とを比較する比較器16とを具備し、ライトキーレジスタ15に書き込まれた鍵値(WKEY)と検証用の鍵値(CKEY)とが一致した場合、カウンタ12をリセットすると共に、カウンタ12のリセット時に決定する種値(SEED)を種値レジスタ13に保存する。
この構成により、CPU2は、種値レジスタ13からの種値を読み出し、その都度異なる種値に対する規定の演算処理、ライトキーレジスタ15への鍵値の書き込みという一連の動作をカウンタ12のカウント値がタイムアウト値に到達する前に実行する必要があるため、プログラムシーケンスを時間的及び論理的に監視することができる。
【0043】
さらに、本実施の形態において、演算器14による既定の演算処理は、種値(SEED)としてとりうる値の種値集合と、検証用鍵値(CKEY)としてとりうる値の鍵値集合との関係として、種値集合から鍵値集合への写像が全単射である。
この構成により、鍵値(WKEY)と検証用の鍵値(CKEY)とが異なる演算処理によって一致することがないため、プログラムシーケンスの論理的監視を正確に行うことができる。
【0044】
さらに、本実施の形態において、演算器14による既定の演算処理には、ビットスワップが含まれている。
この構成により、ハードウェアに比べてソフトウェアでの処理が煩雑であるため、プログラムシーケンスの論理的監視を正確に行うことができる。
【0045】
さらに、本実施の形態において、カウンタ12のリセット時のカウント値を種値(SEED)として種値レジスタ13に保存する。
この構成により、種値を決定するための回路を新たに設けることなく、カウンタ12のリセット時のカウント値を種値(SEED)として用いることができる。
【0046】
さらに、本実施の形態は、ライトキーレジスタ15に書き込まれた鍵値(WKEY)と検証用の鍵値(CKEY)とが一致してもリセットされないフリーカウンタ22を具備し、カウンタ12のリセット時におけるフリーカウンタ22のカウント値を種値(SEED)として種値レジスタ13に保存する。
この構成により、CPU2が同じタイミングで一連の動作を実行しても、リセット時のカウント値が異なる値となり、プログラムシーケンスの論理的監視を正確に行うことができる。
【0047】
さらに、本実施の形態は、乱数発生器を具備し、カウンタ12のリセット時に乱数発生器が発生する乱数を種値(SEED)として種値レジスタ13に保存する。
この構成により、CPU2が同じタイミングで一連の動作を実行しても、リセット時のカウント値が異なる値となり、プログラムシーケンスの論理的監視を正確に行うことができる。
【0048】
さらに、本実施の形態において、カウンタ12のリセット時に外部回路で決定する値を種値(SEED)として種値レジスタ13に保存する。
この構成により、回路内に種値を決定する回路を設けることなく、外部回路で決定する値を種値(SEED)として用いることができる。
【0049】
さらに、本実施の形態において、ライトキーレジスタ15に書き込まれた鍵値(WKEY)と検証用の鍵値(CKEY)とが不一致である場合、カウンタ12をリセットすることなく、カウントを継続させる。
この構成により、カウンタ12のカウント値がタイムアウト値(TIMEOUT_VALUE)に到達した場合のみ、エラー信号(ERROR)が出力され、エラー検出のロジックを統一することができる。
【0050】
なお、本発明が上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変更され得ることは明らかである。また、上記構成部材の数、位置、形状等は上記実施の形態に限定されず、本発明を実施する上で好適な数、位置、形状等にすることができる。なお、各図において、同一構成要素には同一符号を付している。
【符号の説明】
【0051】
1 マイクロコンピュータ
2 CPU
3 ROM
4 RAM
5 内部バス
10 異常検出回路
11 バスインターフェース
12 カウンタ
13 種値レジスタ
14 演算器
15 ライトキーレジスタ
16 比較器
17 バッファ
18 第1アンド回路
19 第2アンド回路
20 第1オア回路
21 第2オア回路
22 フリーカウンタ