(57)【特許請求の範囲】
【請求項１】
計算装置が、前記計算装置に接続されている電子装置が送信した第１のメッセージおよびネットワークを介して転送される他のメッセージの各々を受信し、前記計算装置が保持する、受信したメッセージの識別情報に対応する第１のシーケンス番号をカウントアップし、前記電子装置から受信した前記第１のメッセージおよび前記第１のメッセージの第１の識別情報に対応する前記第１のシーケンス番号に基づいて第１のコードを生成し、前記第１のコードを前記第１の識別情報に対応付けて保持し、前記第１のメッセージを前記ネットワークに転送し、
検出装置が、前記ネットワークを介して前記第１のメッセージおよび前記他のメッセージの各々を受信し、前記検出装置が保持する、受信したメッセージの識別情報に対応する第２のシーケンス番号をカウントアップし、受信したメッセージおよび受信したメッセージの識別情報に対応する前記第２のシーケンス番号に基づいて第２のコードを生成し、前記第２のコードを当該識別情報に対応付けて保持し、
前記計算装置が、前記第１の識別情報を含む第２のメッセージを前記ネットワークを介して受信すると、前記第１の識別情報および前記第１のコードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求を前記ネットワークに送信し、前記第１の検証要求の送信後、保持された前記第１のコードを初期化し、
前記検出装置が、前記第１の検証要求を受信し、前記第１の検証要求に含まれる前記第１のコードと、前記第１の検証要求に含まれる前記第１の識別情報に対応して１つ前に受信したメッセージに基づいて計算され、前記検出装置が保持している前記第２のコードとを比較し、前記第１のコードと前記第２のコードとが一致する場合に前記第１の識別情報を含む送信要求を生成し、前記送信要求を前記ネットワークに送信し、
前記計算装置または他の計算装置が、前記送信要求を受信すると、前記送信要求に含まれる前記第１の識別情報に対応する前記第１のコードを初期化により保持していない場合、前記送信要求に対して応答せずに前記送信要求を破棄し、前記第１の識別情報に対応する第３のコードを保持している場合、前記第１の識別情報および前記第１の識別情報に対応付けて保持している前記第３のコードを含む第２の検証要求を生成し、前記第２の検証要求を前記ネットワークに送信し、
前記検出装置が、前記送信要求に対する応答として前記第２の検証要求を受信すると、前記第２の検証要求に含まれる前記第３のコードと、前記第２の検証要求に含まれる前記第１の識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、前記第３のコードと前記第４のコードとが一致することを検出すると、前記第２の検証要求に含まれる前記識別情報に対応する前記第４のコードを初期化し、前記第３のコードと前記第４のコードとが一致しないことを検出すると、前記ネットワークに不正な電子装置が接続されていると判定する、
監視方法。
【請求項２】
計算装置が、前記計算装置に接続されている電子装置が送信した第１のメッセージの識別情報ごとに、前記第１のメッセージを基に生成されるコードと、前記識別情報に対して前回生成され前記計算装置が保持する他のコードと、を用いた演算により第１のコードを生成し、前記第１のコードを前記識別情報に対応付けて保持し、前記第１のメッセージをネットワークに転送し、
検出装置が、前記ネットワークを介して前記第１のメッセージを受信し、前記第１のメッセージの前記識別情報ごとに、前記第１のメッセージを基に生成されるコードと、前記識別情報に対して前回生成され前記検出装置が保持する他のコードと、を用いた演算により第２のコードを生成し、前記第２のコードを前記識別情報に対応付けて保持し、
前記計算装置が、前記第１のメッセージの前記識別情報と同じ識別情報を含む第２のメッセージを前記ネットワークを介して受信すると、前記識別情報および前記第１のコードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求を前記ネットワークに送信し、前記第１の検証要求の送信後、保持された前記第１のコードを初期化し、
前記検出装置が、前記ネットワークを介して前記第１の検証要求を受信すると、前記第１の検証要求に含まれる前記第１のコードと、前記第１の検証要求に含まれる前記識別情報に対して１つ前に受信したメッセージに基づいて算出した前記第２のコードと、を比較して、前記第１のコードと前記第２のコードとが一致することを検出すると、前記識別情報を含む送信要求を生成し、前記送信要求を前記ネットワークに送信し、
前記計算装置または他の計算装置が、前記送信要求を受信すると、前記送信要求に含まれる前記識別情報に対応する前記第１のコードを初期化により保持していない場合、前記送信要求に対して応答せずに前記送信要求を破棄し、前記識別情報に対応する第３のコードを保持している場合、前記識別情報および前記識別情報に対応付けて保持している前記第３のコードを含む第２の検証要求を生成し、前記第２の検証要求を前記ネットワークに送信し、
前記検出装置が、前記送信要求に対する応答として前記第２の検証要求を受信すると、前記第２の検証要求に含まれる前記第３のコードと、前記第２の検証要求に含まれる前記識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、前記第３のコードと前記第４のコードとが一致することを検出すると、前記第２の検証要求に含まれる前記識別情報に対応する前記第４のコードを初期化し、前記第３のコードと前記第４のコードとが一致しないことを検出すると、前記ネットワークに不正な電子装置が接続されていると判定する、
監視方法。
【請求項３】
前記検出装置が、前記第１のコードと前記第２のコードとが一致しない場合に、前記ネットワークに不正な電子装置が接続されていると判定する、請求項１または２記載の監視方法。
【請求項４】
前記他の計算装置が、前記送信要求を受信し、前記送信要求に応じて前記第２の検証要求を前記ネットワークに送信した後、前記他の計算装置に保持された前記第３のコードを初期化する、請求項１または２記載の監視方法。
【請求項５】
前記検出装置が、前記送信要求の送信後、前記送信要求に応じた前記第２の検証要求を受信する前に、前記識別情報を含み前記第２の検証要求とは異なるメッセージを受信した場合、前記ネットワークに不正な電子装置が接続されていると判定する、請求項４記載の監視方法。
【請求項６】
複数の電子装置と電子装置およびネットワークの間でメッセージを中継し、前記複数の電子装置に対して設けられる複数の計算装置と前記ネットワークに接続された検出装置とを有し、
計算装置が、前記計算装置に接続されている前記電子装置が送信した第１のメッセージおよび前記ネットワークを介して転送される他のメッセージの各々を受信し、前記計算装置が保持する、受信したメッセージの識別情報に対応する第１のシーケンス番号をカウントアップし、前記電子装置から受信した前記第１のメッセージおよび前記第１のメッセージの第１の識別情報に対応する前記第１のシーケンス番号に基づいて第１のコードを生成し、前記第１のコードを前記第１の識別情報に対応付けて保持し、前記第１のメッセージを前記ネットワークに転送し、
前記検出装置が、前記ネットワークを介して前記第１のメッセージおよび前記他のメッセージの各々を受信し、前記検出装置が保持する、受信したメッセージの識別情報に対応する第２のシーケンス番号をカウントアップし、受信したメッセージおよび受信したメッセージの識別情報に対応する前記第２のシーケンス番号に基づいて第２のコードを生成し、前記第２のコードを当該識別情報に対応付けて保持し、
前記計算装置が、前記第１の識別情報を含む第２のメッセージを前記ネットワークを介して受信すると、前記第１の識別情報および前記第１のコードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求を前記ネットワークに送信し、前記第１の検証要求の送信後、保持された前記第１のコードを初期化し、
前記検出装置が、前記第１の検証要求を受信し、前記第１の検証要求に含まれる前記第１のコードと、前記第１の検証要求に含まれる前記第１の識別情報に対応して１つ前に受信したメッセージに基づいて計算され、前記検出装置が保持している前記第２のコードとを比較し、前記第１のコードと前記第２のコードとが一致する場合に前記第１の識別情報を含む送信要求を生成し、前記送信要求を前記ネットワークに送信し、
前記計算装置または他の計算装置が、前記送信要求を受信すると、前記送信要求に含まれる前記第１の識別情報に対応する前記第１のコードを初期化により保持していない場合、前記送信要求に対して応答せずに前記送信要求を破棄し、前記第１の識別情報に対応する第３のコードを保持している場合、前記第１の識別情報および前記第１の識別情報に対応付けて保持している前記第３のコードを含む第２の検証要求を生成し、前記第２の検証要求を前記ネットワークに送信し、
前記検出装置が、前記送信要求に対する応答として前記第２の検証要求を受信すると、前記第２の検証要求に含まれる前記第３のコードと、前記第２の検証要求に含まれる前記第１の識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、前記第３のコードと前記第４のコードとが一致することを検出すると、前記第２の検証要求に含まれる前記識別情報に対応する前記第４のコードを初期化し、前記第３のコードと前記第４のコードとが一致しないことを検出すると、前記ネットワークに不正な電子装置が接続されていると判定する、
監視システム。
【請求項７】
複数の電子装置と電子装置およびネットワークの間でメッセージを中継し、前記複数の電子装置に対して設けられる複数の計算装置と前記ネットワークに接続された検出装置とを有し、
計算装置が、前記計算装置に接続されている前記電子装置が送信した第１のメッセージの識別情報ごとに、前記第１のメッセージを基に生成されるコードと、前記識別情報に対して前回生成され前記計算装置が保持する他のコードと、を用いた演算により第１のコードを生成し、前記第１のコードを前記識別情報に対応付けて保持し、前記第１のメッセージを前記ネットワークに転送し、
前記検出装置が、前記ネットワークを介して前記第１のメッセージを受信し、前記第１のメッセージの前記識別情報ごとに、前記第１のメッセージを基に生成されるコードと、前記識別情報に対して前回生成され前記検出装置が保持する他のコードと、を用いた演算により第２のコードを生成し、前記第２のコードを前記識別情報に対応付けて保持し、
前記計算装置が、前記第１のメッセージの前記識別情報と同じ識別情報を含む第２のメッセージを前記ネットワークを介して受信すると、前記識別情報および前記第１のコードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求を前記ネットワークに送信し、前記第１の検証要求の送信後、保持された前記第１のコードを初期化し、
前記検出装置が、前記ネットワークを介して前記第１の検証要求を受信すると、前記第１の検証要求に含まれる前記第１のコードと、前記第１の検証要求に含まれる前記識別情報に対して１つ前に受信したメッセージに基づいて算出した前記第２のコードと、を比較して、前記第１のコードと前記第２のコードとが一致することを検出すると、前記識別情報を含む送信要求を生成し、前記送信要求を前記ネットワークに送信し、
前記計算装置または他の計算装置が、前記送信要求を受信すると、前記送信要求に含まれる前記識別情報に対応する前記第１のコードを初期化により保持していない場合、前記送信要求に対して応答せずに前記送信要求を破棄し、前記識別情報に対応する第３のコードを保持している場合、前記識別情報および前記識別情報に対応付けて保持している前記第３のコードを含む第２の検証要求を生成し、前記第２の検証要求を前記ネットワークに送信し、
前記検出装置が、前記送信要求に対する応答として前記第２の検証要求を受信すると、前記第２の検証要求に含まれる前記第３のコードと、前記第２の検証要求に含まれる前記識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、前記第３のコードと前記第４のコードとが一致することを検出すると、前記第２の検証要求に含まれる前記識別情報に対応する前記第４のコードを初期化し、前記第３のコードと前記第４のコードとが一致しないことを検出すると、前記ネットワークに不正な電子装置が接続されていると判定する、
監視システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は監視方法および監視システムに関する。
【背景技術】
【０００２】
産業機器、農業機械、医療機器および自動車などは、種々の電子装置によって制御される。例えば、機械の駆動制御やセンサ処理などを行うＥＣＵ（Electronic Control Unit）と呼ばれる電子装置を複数設け、ＥＣＵにより自動車などの各部の動作を制御する。例えば、ＥＣＵは、ＣＡＮ（Controller Area Network）と呼ばれるネットワークに接続され、他のＥＣＵと相互に通信する。
【０００３】
ところで、ネットワークには不正な電子装置が接続され得る。不正な電子装置により、改ざんされたデータや他の電子装置の動作に悪影響を及ぼすデータがネットワークに送信されるおそれがある。そこで、不正なデータや装置を検出する方法が考えられている。
【０００４】
例えば、複数のＥＣＵがネットワークで接続されたシステムにおいて、メインメッセージとともにメッセージ認証コード（ＭＡＣ：Message Authentication Code）を送信し、メインメッセージが正当なものであるか否かを検証する提案がある。この提案では、メインメッセージを送信した送信ノードが、メインメッセージのデータフィールドおよびＣＡＮＩＤ（IDentifier）とＣＡＮＩＤに対応するカウンタ値とからＭＡＣを生成し、ＭＡＣメッセージとして送信する。メインメッセージを受信した受信ノードは、メインメッセージのデータフィールドおよびＣＡＮＩＤとＣＡＮＩＤに対応するカウンタ値とからＭＡＣを生成して、ＭＡＣメッセージに含まれるＭＡＣと一致するか判断し、メインメッセージの正当性を検証する。
【０００５】
また、不正機器が不正なデータを送信して機器の異常動作を引き起こす不正攻撃を検知するために、設計周期より短い周期でデータを受信した場合に、不正攻撃が発生していることを検知する提案がある。
【０００６】
更に、ゲートウェイが、信号波形のサンプリングにより複数の波形を重ねたアイパターンを生成し、正常時のアイパターンに基づいて生成されたマスクと比較することで異常を認識し、不正な装置が接続されたことを検出する提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−９８７１９号公報
【特許文献２】特開２０１４−１４６８６８号公報
【特許文献３】特開２０１５−５８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のように、送信側装置がメッセージごとに認証コード（例えば、ＭＡＣ）を送信することで、受信側装置で各メッセージの検証を行うことが考えられる。しかし、この方法では、メッセージごとに認証コードを送信したり、または、メッセージを一定回数送信するごとに認証コードを送信したりすることになり、認証コードによる通信量が増大するという問題がある。そこで、通信量を抑えて不正な電子装置の有無を監視するための仕組みをどのように実現するかが問題となる。
【０００９】
１つの側面では、本発明は、不正な電子装置を効率的に検出できる監視方法および監視システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、監視方法が提供される。この監視方法では、計算装置が、計算装置に接続されている電子装置が送信した第１のメッセージおよびネットワークを介して転送される他のメッセージの各々を受信し、計算装置が保持する、受信したメッセージの識別情報に対応する第１のシーケンス番号をカウントアップし、電子装置から受信した第１のメッセージおよび第１のメッセージの第１の識別情報に対応する第１のシーケンス番号に基づいて第１のコードを生成し、第１のコードを第１の識別情報に対応付けて保持し、第１のメッセージをネットワークに転送し、検出装置が、ネットワークを介して第１のメッセージおよび他のメッセージの各々を受信し、検出装置が保持する、受信したメッセージの識別情報に対応する第２のシーケンス番号をカウントアップし、受信したメッセージおよび受信したメッセージの識別情報に対応する第２のシーケンス番号に基づいて第２のコードを生成し、第２のコードを当該識別情報に対応付けて保持し、計算装置が、第１の識別情報を含む第２のメッセージをネットワークを介して受信すると、第１の識別情報および第１のコードを含んでおりネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求をネットワークに送信し、第１の検証要求の送信後、保持された第１のコードを初期化し、検出装置が、第１の検証要求を受信し、第１の検証要求に含まれる第１のコードと、第１の検証要求に含まれる第１の識別情報に対応して１つ前に受信したメッセージに基づいて計算され、検出装置が保持している第２のコードとを比較し、第１のコードと第２のコードとが一致する場合に第１の識別情報を含む送信要求を生成し、送信要求をネットワークに送信し、計算装置または他の計算装置が、送信要求を受信すると、送信要求に含まれる第１の識別情報に対応する第１のコードを初期化により保持していない場合、送信要求に対して応答せずに送信要求を破棄し、第１の識別情報に対応する第３のコードを保持している場合、第１の識別情報および第１の識別情報に対応付けて保持している第３のコードを含む第２の検証要求を生成し、第２の検証要求をネットワークに送信し、検出装置が、送信要求に対する応答として第２の検証要求を受信すると、第２の検証要求に含まれる第３のコードと、第２の検証要求に含まれる第１の識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、第３のコードと第４のコードとが一致することを検出すると、第２の検証要求に含まれる識別情報に対応する第４のコードを初期化し、第３のコードと第４のコードとが一致しないことを検出すると、ネットワークに不正な電子装置が接続されていると判定する。
【００１１】
また、１つの態様では、監視方法が提供される。この監視方法では、計算装置が、計算装置に接続されている電子装置が送信した第１のメッセージの識別情報ごとに、第１のメッセージを基に生成されるコードと、識別情報に対して前回生成され計算装置が保持する他のコードと、を用いた演算により第１のコードを生成し、第１のコードを識別情報に対応付けて保持し、第１のメッセージをネットワークに転送し、検出装置が、ネットワークを介して第１のメッセージを受信し、第１のメッセージの識別情報ごとに、第１のメッセージを基に生成されるコードと、識別情報に対して前回生成され検出装置が保持する他のコードと、を用いた演算により第２のコードを生成し、第２のコードを識別情報に対応付けて保持し、計算装置が、第１のメッセージの識別情報と同じ識別情報を含む第２のメッセージをネットワークを介して受信すると、識別情報および第１のコードを含んでおりネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求をネットワークに送信し、第１の検証要求の送信後、保持された第１のコードを初期化し、検出装置が、ネットワークを介して第１の検証要求を受信すると、第１の検証要求に含まれる第１のコードと、第１の検証要求に含まれる識別情報に対して１つ前に受信したメッセージに基づいて算出した第２のコードと、を比較して、第１のコードと第２のコードとが一致することを検出すると、識別情報を含む送信要求を生成し、送信要求をネットワークに送信し、計算装置または他の計算装置が、送信要求を受信すると、送信要求に含まれる識別情報に対応する第１のコードを初期化により保持していない場合、送信要求に対して応答せずに送信要求を破棄し、識別情報に対応する第３のコードを保持している場合、識別情報および識別情報に対応付けて保持している第３のコードを含む第２の検証要求を生成し、第２の検証要求をネットワークに送信し、検出装置が、送信要求に対する応答として第２の検証要求を受信すると、第２の検証要求に含まれる第３のコードと、第２の検証要求に含まれる識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、第３のコードと第４のコードとが一致することを検出すると、第２の検証要求に含まれる識別情報に対応する第４のコードを初期化し、第３のコードと第４のコードとが一致しないことを検出すると、ネットワークに不正な電子装置が接続されていると判定する。
また、１つの態様では、監視システムが提供される。この監視システムは、複数の電子装置と電子装置およびネットワークの間でメッセージを中継し、複数の電子装置に対して設けられる複数の計算装置とネットワークに接続された検出装置とを有する。計算装置が、計算装置に接続されている電子装置が送信した第１のメッセージおよびネットワークを介して転送される他のメッセージの各々を受信し、計算装置が保持する、受信したメッセージの識別情報に対応する第１のシーケンス番号をカウントアップし、電子装置から受信した第１のメッセージおよび第１のメッセージの第１の識別情報に対応する第１のシーケンス番号に基づいて第１のコードを生成し、第１のコードを第１の識別情報に対応付けて保持し、第１のメッセージをネットワークに転送し、検出装置が、ネットワークを介して第１のメッセージおよび他のメッセージの各々を受信し、検出装置が保持する、受信したメッセージの識別情報に対応する第２のシーケンス番号をカウントアップし、受信したメッセージおよび受信したメッセージの識別情報に対応する第２のシーケンス番号に基づいて第２のコードを生成し、第２のコードを当該識別情報に対応付けて保持し、計算装置が、第１の識別情報を含む第２のメッセージをネットワークを介して受信すると、第１の識別情報および第１のコードを含んでおりネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求をネットワークに送信し、第１の検証要求の送信後、保持された第１のコードを初期化し、検出装置が、第１の検証要求を受信し、第１の検証要求に含まれる第１のコードと、第１の検証要求に含まれる第１の識別情報に対応して１つ前に受信したメッセージに基づいて計算され、検出装置が保持している第２のコードとを比較し、第１のコードと第２のコードとが一致する場合に第１の識別情報を含む送信要求を生成し、送信要求をネットワークに送信し、計算装置または他の計算装置が、送信要求を受信すると、送信要求に含まれる第１の識別情報に対応する第１のコードを初期化により保持していない場合、送信要求に対して応答せずに送信要求を破棄し、第１の識別情報に対応する第３のコードを保持している場合、第１の識別情報および第１の識別情報に対応付けて保持している第３のコードを含む第２の検証要求を生成し、第２の検証要求をネットワークに送信し、検出装置が、送信要求に対する応答として第２の検証要求を受信すると、第２の検証要求に含まれる第３のコードと、第２の検証要求に含まれる第１の識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、第３のコードと第４のコードとが一致することを検出すると、第２の検証要求に含まれる識別情報に対応する第４のコードを初期化し、第３のコードと第４のコードとが一致しないことを検出すると、ネットワークに不正な電子装置が接続されていると判定する。
また、１つの態様では、監視システムが提供される。この監視システムは、複数の電子装置と電子装置およびネットワークの間でメッセージを中継し、複数の電子装置に対して設けられる複数の計算装置とネットワークに接続された検出装置とを有する。計算装置が、計算装置に接続されている電子装置が送信した第１のメッセージの識別情報ごとに、第１のメッセージを基に生成されるコードと、識別情報に対して前回生成され計算装置が保持する他のコードと、を用いた演算により第１のコードを生成し、第１のコードを識別情報に対応付けて保持し、第１のメッセージをネットワークに転送し、検出装置が、ネットワークを介して第１のメッセージを受信し、第１のメッセージの識別情報ごとに、第１のメッセージを基に生成されるコードと、識別情報に対して前回生成され検出装置が保持する他のコードと、を用いた演算により第２のコードを生成し、第２のコードを識別情報に対応付けて保持し、計算装置が、第１のメッセージの識別情報と同じ識別情報を含む第２のメッセージをネットワークを介して受信すると、識別情報および第１のコードを含んでおりネットワークに不正な電子装置が接続されているか否かの検証を要求する第１の検証要求をネットワークに送信し、第１の検証要求の送信後、保持された第１のコードを初期化し、検出装置が、ネットワークを介して第１の検証要求を受信すると、第１の検証要求に含まれる第１のコードと、第１の検証要求に含まれる識別情報に対して１つ前に受信したメッセージに基づいて算出した第２のコードと、を比較して、第１のコードと第２のコードとが一致することを検出すると、識別情報を含む送信要求を生成し、送信要求をネットワークに送信し、計算装置または他の計算装置が、送信要求を受信すると、送信要求に含まれる識別情報に対応する第１のコードを初期化により保持していない場合、送信要求に対して応答せずに送信要求を破棄し、識別情報に対応する第３のコードを保持している場合、識別情報および識別情報に対応付けて保持している第３のコードを含む第２の検証要求を生成し、第２の検証要求をネットワークに送信し、検出装置が、送信要求に対する応答として第２の検証要求を受信すると、第２の検証要求に含まれる第３のコードと、第２の検証要求に含まれる識別情報に対して受信済である最新のメッセージに基づいて算出した第４のコードと、を比較し、第３のコードと第４のコードとが一致することを検出すると、第２の検証要求に含まれる識別情報に対応する第４のコードを初期化し、第３のコードと第４のコードとが一致しないことを検出すると、ネットワークに不正な電子装置が接続されていると判定する。
【発明の効果】
【００１２】
１つの側面では、不正な電子装置を効率的に検出できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の監視システムを示す図である。
【図２】第２の実施の形態の車載システムを示す図である。
【図３】計算装置のハードウェア例を示す図である。
【図４】検出装置のハードウェア例を示す図である。
【図５】ＥＣＵ装置のハードウェア例を示す図である。
【図６】計算装置により保持される情報の例を示す図である。
【図７】検出装置により保持される情報の例を示す図である。
【図８】メッセージの例を示す図である。
【図９】ＭＡＣ値の計算例を示す図である。
【図１０】計算装置のメッセージ受信時の処理例を示す図である。
【図１１】検出装置のメッセージ受信時の処理例を示す図である。
【図１２】同一ＩＤのメッセージ受信時の処理例（その１）を示す図である。
【図１３】同一ＩＤのメッセージ受信時の処理例（その２）を示す図である。
【図１４】同一ＩＤのメッセージ受信時の処理例（その３）を示す図である。
【図１５】検出装置の初期化処理の例を示すフローチャートである。
【図１６】計算装置の初期化処理の例を示すフローチャートである。
【図１７】計算装置の運用状態の処理例（その１）を示すフローチャートである。
【図１８】計算装置の運用状態の処理例（その２）を示すフローチャートである。
【図１９】計算装置の運用状態の処理例（その３）を示すフローチャートである。
【図２０】検出装置の運用状態の処理例（その１）を示すフローチャートである。
【図２１】検出装置の運用状態の処理例（その２）を示すフローチャートである。
【図２２】検出装置の応答待ち状態の処理例を示すフローチャートである。
【図２３】検出装置の運用状態の処理例（その３）を示すフローチャートである。
【図２４】ＥＣＵ装置によるメッセージ送信例を示す図である。
【図２５】監視の具体例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の監視システムを示す図である。監視システム１は、複数の電子装置を有する。各電子装置は、ネットワーク５を介して通信可能である。電子装置は、ＥＣＵでもよい。ネットワーク５は、ＣＡＮでもよい。ＣＡＮは、例えば、産業機器、農業機械、医療機器および自動車などにおける各部の動作制御に用いられる。各電子装置は、相互にメッセージを送受信し、自動車などの動作を制御する。例えば、ネットワーク５が自動車に設けられる場合、ネットワーク５を車載ネットワークと呼べる。
【００１５】
メッセージは、制御種別に応じた識別情報（ＩＤ）および各部に対する制御内容の情報を含む。何れかの電子装置が送信したメッセージは、ネットワーク５に接続された各装置に対してブロードキャスト（同報送信）される。各電子装置は、自身が処理すべきＩＤを予め保持しており、受信したメッセージを自身で処理するか否かを、当該メッセージに含まれるＩＤによって判別する。
【００１６】
監視システム１は、ネットワーク５に送信されたメッセージを検証し、不正な電子装置が接続されているか否かを監視する機能を備えている。監視システム１は、計算装置１０，１０ａ、検出装置２０および電子装置３０，３０ａ，３０ｂを有する。ネットワーク５における監視機能は、計算装置１０，１０ａおよび検出装置２０によって提供される。
【００１７】
計算装置１０は、電子装置３０に接続されている。計算装置１０は、電子装置３０の外部に設けられてもよいし、電子装置３０の一部でもよい。計算装置１０は、ネットワーク５と電子装置３０との間に設けられ、ネットワーク５と電子装置３０との間でメッセージを中継する。計算装置１０は、記憶部１１および演算部１２を有する。
【００１８】
記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部１１は、演算部１２により生成される各種データを記憶する。
【００１９】
演算部１２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００２０】
演算部１２は、電子装置３０により送信されたメッセージＭ１をネットワーク５に転送する。演算部１２は、メッセージＭ１をネットワーク５に転送する際に、メッセージＭ１に基づいて、メッセージＭ１に対応する所定のコードを生成する。例えば、当該コードは、メッセージ認証コード（ＭＡＣ）でもよい。当該コードは、メッセージＭ１に基づく所定の演算によって算出されるハッシュ値でもよい。演算部１２は、ある１つのＩＤについて、前回送信されたメッセージに対応するコードと、今回送信されたメッセージＭ１とに基づいて、メッセージＭ１に対応するコードを算出してもよい。演算部１２は、メッセージＭ１のＩＤに対応づけて、生成したコードを記憶部１１に格納する。
【００２１】
演算部１２は、電子装置３０以外の電子装置（例えば、電子装置３０ａまたは電子装置３０ｂ）が送信したメッセージを、ネットワーク５を介して受信する。演算部１２は、記憶部１１に記憶されたＩＤと同じＩＤのメッセージを受信した場合、ネットワーク５に不正な電子装置が接続されているか否かの検証を要求する検証要求メッセージ（単に検証要求と称することがある）を送信する。検証要求は、特定ＩＤ（例えば、“ＩＤｘ”）によって識別される。また、検証要求は、記憶部１１に記憶された検証対象のＩＤ、および、当該検証対象のＩＤに対応するコードを含む。検証要求は、通常のメッセージよりも高い優先度で送信されるメッセージである。検証要求は、検出装置２０によって処理される（計算装置で受信されても破棄される）。演算部１２は、検証要求を送信した後、記憶部１１に記憶されている該当のＩＤに対応するコード（該当のＩＤに対して保持されたコード）を初期化する（例えば、当該コードを消去する、または、初期値に設定するなど）。初期化した結果、計算装置１０では、当該ＩＤに対応するコードを保持していない状態となる。
【００２２】
なお、計算装置１０ａも、計算装置１０と同様に、記憶部１１と同様の機能を有する記憶部、および、演算部１２と同様の機能を有する演算部を有する。計算装置１０ａも、計算装置１０と同様に、ネットワーク５および電子装置３０ａに接続され、ネットワーク５と電子装置３０ａとの間でメッセージを中継する。
【００２３】
検出装置２０は、ネットワーク５に接続されている。検出装置２０は、記憶部２１、受信バッファ２２および演算部２３を有する。記憶部２１および受信バッファ２２は、記憶部１１と同様に、ＲＡＭなどの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部２１は、演算部２３により生成される各種データを記憶する。受信バッファ２２は、検出装置２０が受信したメッセージを一時的に記憶する。受信バッファ２２は、メッセージのＩＤごとに設けられる。
【００２４】
演算部２３は、演算部１２と同様に、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどを含み得る。演算部２３はプログラムを実行するプロセッサであってもよい。演算部２３は、ネットワーク５から受信したメッセージを受信バッファ２２に格納する。演算部２３は、受信バッファ２２に格納されたメッセージに基づいて、当該メッセージに対応する所定のコードを生成し、記憶部２１に格納する。演算部２３は、演算部１２と同じ演算を用いて、メッセージごとのコードを生成する。
【００２５】
演算部２３は、ネットワーク５から受信した検証要求に応じて、メッセージごとのコードの検証を行う。ここで、演算部２３によるコードの検証を適切に行うために、演算部１２，２３は、コードを生成する演算に共通の鍵を用いる。例えば、演算部２３は、演算用の鍵を予め生成し、計算装置１０，１０ａに予め配布しておく。演算部２３は、メッセージのＩＤおよびコードを検証要求から取得し、演算部２３自身が生成した当該ＩＤおよびコードと照合する。両コードが一致すれば正常であり、両コードが不一致であれば異常である。演算部２３は、異常を検出した場合、不正な電子装置がネットワーク５に接続されている可能性がある旨を報知する（例えば、検出装置２０に接続されたディスプレイに不正な電子装置が存在している旨を表示するなど）。
【００２６】
電子装置３０，３０ａ，３０ｂは、例えばＥＣＵであり、自動車や機械などの各部の動作を制御する。電子装置３０は、記憶部３１および演算部３２を有する。記憶部３１は、ＲＡＭなどの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部３１は、演算部３２により生成される各種データを記憶する。演算部３２は、演算部１２と同様に、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどを含み得る。演算部３２はプログラムを実行するプロセッサであってもよい。電子装置３０ａ，３０ｂも電子装置３０と同様に記憶部および演算部を有する。ここで、電子装置３０，３０ａは、正規の電子装置である。電子装置３０，３０ａそれぞれには、計算装置１０，１０ａが接続されている。一方、電子装置３０ｂは、不正な電子装置であり、何れの計算装置も接続されていない。例えば、計算装置１０および検出装置２０は、下記の手順により不正な電子装置３０ｂがネットワーク５に接続されていることを検出する。
【００２７】
まず、電子装置３０がメッセージＭ１を送信する。メッセージＭ１は、ＩＤ“ＩＤ１”を含む。すると、演算部１２は、メッセージＭ１の内容に対する所定の演算によりコード“Ｃｏｄｅ１”を生成し、メッセージＭ１のＩＤ“ＩＤ１”に対応づけて記憶部１１に格納する。演算部１２は、メッセージＭ１をネットワーク５側へ転送する（ステップＳ１）。前述のように、各メッセージはネットワーク５内でブロードキャストされる。
【００２８】
例えば、計算装置１０ａは、メッセージＭ１を受信する。計算装置１０ａは、受信したメッセージＭ１のＩＤ“ＩＤ１”を確認し、電子装置３０ａが送信するＩＤのメッセージでないと判断し、メッセージＭ１を電子装置３０ａに転送する（メッセージＭ１を素通りさせる）。電子装置３０ａは、メッセージＭ１のＩＤに応じてメッセージＭ１に応じた制御を行う。電子装置３０ａは、メッセージＭ１が自身で処理すべきＩＤのメッセージでなければ、メッセージＭ１を破棄する。
【００２９】
また、検出装置２０は、メッセージＭ１を受信する。検出装置２０は、全てのＩＤのメッセージをＩＤごとの受信バッファに格納する。このため、演算部２３は、受信したメッセージＭ１を受信バッファ２２に格納する。
【００３０】
次に、電子装置３０ｂがメッセージＭ２を送信する。メッセージＭ２は、ＩＤ“ＩＤ１”を含む。演算部１２は、メッセージＭ２を受信する。演算部２３も、メッセージＭ２を受信し、受信バッファ２２に格納する。演算部２３は、ＩＤ“ＩＤ１”を含むメッセージとして、メッセージＭ２の前に受信したメッセージＭ１を受信バッファ２２から取得し、メッセージＭ１に対応するコード“Ｃｏｄｅ１”を生成する。演算部２３は、メッセージＭ１のＩＤ“ＩＤ１”に対応づけて、生成したコード“Ｃｏｄｅ１”を記憶部２１に格納する（ステップＳ２）。
【００３１】
演算部１２は、メッセージＭ２に含まれるＩＤ“ＩＤ１”が、記憶部１１に格納されたＩＤ“ＩＤ１”に一致していることを検出する。すると、演算部１２は、ＩＤ“ＩＤ１”に対応するコード“Ｃｏｄｅ１”を記憶部１１から取得し、ＩＤ“ＩＤ１”およびコード“Ｃｏｄｅ１”を含む検証要求Ｍ３を送信する（ステップＳ３）。そして、演算部１２は、記憶部１１に記憶されたＩＤ“ＩＤ１”に対するコード“Ｃｏｄｅ１”を初期化する（ステップＳ４）。計算装置１０は、ＩＤ“ＩＤ１”に対するコードを初期化した結果、ＩＤ“ＩＤ１”に対するコードを保持していない状態となる。
【００３２】
演算部２３は、検証要求Ｍ３を受信する。すると、検証要求Ｍ３に含まれるＩＤ“ＩＤ１”およびコード“Ｃｏｄｅ１”を抽出し、記憶部２１に記憶されたＩＤ“ＩＤ１”に対応するコード“Ｃｏｄｅ１”と照合する。この場合、両コードは一致しているので、演算部２３は、メッセージＭ１までは正常なメッセージであると判断する。
【００３３】
続いて、演算部２３は、記憶部２１に記憶されたＩＤ“ＩＤ１”のコード“Ｃｏｄｅ１”を初期化し、受信バッファ２２に記憶されたメッセージＭ２に対応するコードを生成する。そして、例えば、演算部２３は、検証対象のＩＤ“ＩＤ１”を指定した検証要求の送信要求を送信する。
【００３４】
ここで、検証要求の送信要求は、指定したＩＤに対応する検証要求の送信を、各計算装置に対して要求するメッセージである。検証要求の送信要求は、検証要求の送信を要求するものであり、単に「送信要求」と呼ばれてもよい。検証要求の送信要求は、検証要求と同様に、検証要求の送信要求を示す特定ＩＤ（例えば、“ＩＤｙ”）によって識別される。検証要求の送信要求は、検証要求および通常のメッセージよりも高い優先度で送信されるメッセージである。各計算装置は、検証要求の送信要求で指定されたＩＤ（例えば、“ＩＤ１”）に対応するコードを保持している場合、当該ＩＤおよび当該コードを含む検証要求を、通常のメッセージよりも優先して送信する。
【００３５】
ところが、上記の例では、メッセージＭ２は、電子装置３０ｂにより送信されたものである。電子装置３０ｂは、計算装置を介さずにネットワーク５に接続されている。このため、検出装置２０は、検証要求の送信要求に対する応答（検証要求）を受信しないことになる。なぜなら、計算装置１０は、ＩＤ“ＩＤ１”に対するコードを初期化済であるし、電子装置３０ｂが先に送信したメッセージＭ２に対するコードを保持している計算装置が存在していないからである。すなわち、その後、検証要求の送信要求に対する検証要求を受信しないまま、検出装置２０は、何れかの電子装置（電子装置３０，３０ａ，３０ｂの何れか）が送信したメッセージを受信する。この場合、演算部２３は、計算装置を有していない不正な電子装置（本例では電子装置３０ｂ）がネットワーク５に接続されていると検出する。演算部２３は、異常を検出した場合、不正な電子装置がネットワーク５に接続されている可能性がある旨をユーザに報知する（例えば、検出装置２０に接続されたディスプレイに不正な電子装置が存在している旨を表示するなど）。
【００３６】
なお、検出装置２０は、送信要求の送信後、電子装置３０ｂから、偽の検証要求を受信することも考えられる（電子装置３０ｂが検証要求を不正に送出するケース）。この場合でも、検出装置２０は、電子装置３０ｂとコード検証用の鍵を共有していないため、コード検証がエラーとなり、不正な電子装置３０ｂがネットワーク５に接続されていることを検出できる。
【００３７】
このように、監視システム１によれば、不正な電子装置を効率的に検出できる。特に、計算装置１０は、計算装置１０に接続された電子装置３０が送信したメッセージＭ１のＩＤと同じＩＤを含むメッセージＭ２をネットワーク５から受信したタイミングで、メッセージＭ１に対応するコードを含む検証要求を送信する。このため、メッセージごとに当該メッセージに対応するＭＡＣを送信する方法に比べて、メッセージごとにＭＡＣを送信しなくてもよくなり、通信量を低減できる。更に、計算装置１０は、検証要求Ｍ３の送信後、記憶部１１に記憶されたコードを初期化するので、検出装置２０から検証要求の送信要求を受信しても、検証済のコードを含む余計な検証要求を送信せずに済む。こうして、監視システム１は、不正な電子装置を効率的に検出できる。
【００３８】
［第２の実施の形態］
図２は、第２の実施の形態の車載システムを示す図である。第２の実施の形態の車載システムは、自動車に設けられる。車載システムは、複数のＥＣＵ装置を含む。複数のＥＣＵ装置それぞれは、自動車のエンジン、ブレーキ、自動変速、エアコン、表示パネルなど自動車が備える種々の装備の制御に用いられる。
【００３９】
第２の実施の形態の車載システムは、計算装置１００，１００ａ，１００ｂ、検出装置２００およびＥＣＵ装置３００，３００ａ，３００ｂを含む。計算装置１００，１００ａ，１００ｂおよび検出装置２００は、ＣＡＮ６に接続されている。ＥＣＵ装置３００は、計算装置１００に接続されている。ＥＣＵ装置３００ａは、計算装置１００ａに接続されている。ＥＣＵ装置３００ｂは、計算装置１００ｂに接続されている。ＥＣＵ装置３００，３００ａ，３００ｂは、それぞれ計算装置１００，１００ａ，１００ｂを介してＣＡＮ６に接続されているということもできる。ＥＣＵ装置３００，３００ａ，３００ｂは、計算装置１００，１００ａ，１００ｂおよびＣＡＮ６を介して、ＣＡＮプロトコルにより相互に通信可能である。
【００４０】
計算装置１００，１００ａ，１００ｂは、それぞれＥＣＵ装置３００，３００ａ，３００ｂに接続され、ＣＡＮ６とＥＣＵ装置３００，３００ａ，３００ｂとの間でメッセージを中継する。計算装置１００，１００ａ，１００ｂは、第１の実施の形態の計算装置１０，１０ａの一例である。
【００４１】
検出装置２００は、計算装置１００，１００ａ，１００ｂと連携して、不正なＥＣＵ装置がＣＡＮ６に接続されているか否かを検出する。検出装置２００は、不正なＥＣＵ装置が接続されている可能性がある場合、ユーザに対して、その旨を通知する。検出装置２００は、第１の実施の形態の検出装置２０の一例である。
【００４２】
ＥＣＵ装置３００，３００ａ，３００ｂは、自動車の各種装備の制御を行う。ＥＣＵ装置３００は、計算装置１００に接続されており、計算装置１００を介して、ＣＡＮ６に対してメッセージを送信したり、ＣＡＮ６からメッセージを受信したりする。ＥＣＵ装置３００ａは、計算装置１００ａに接続されており、計算装置１００ａを介して、ＣＡＮ６に対してメッセージを送信したり、ＣＡＮ６からメッセージを受信したりする。ＥＣＵ装置３００ｂは、計算装置１００ｂに接続されており、計算装置１００ｂを介して、ＣＡＮ６に対してメッセージを送信したり、ＣＡＮ６からメッセージを受信したりする。ＥＣＵ装置３００，３００ａ，３００ｂは、他のＥＣＵ装置から受信したメッセージに応じた制御を行ったり、他のＥＣＵ装置に対して制御用のメッセージを送信したりする。ＥＣＵ装置３００，３００ａ，３００ｂは、第１の実施の形態の電子装置３０，３０ａ，３０ｂの一例である。ＥＣＵ装置３００，３００ａ，３００ｂは、電子制御装置と呼ばれてもよい。
【００４３】
ＣＡＮ６には、新たなＥＣＵ装置を接続することができる。例えば、ＥＣＵ装置３００ｃを、ＣＡＮ６に接続可能である。ただし、ＥＣＵ装置３００ｃが不正なメッセージを送信するＥＣＵ装置（不正ＥＣＵ装置）であることもある。この場合、ＥＣＵ装置３００ｃにより自動車の安全な走行を妨げるおそれがある。例えば、ＥＣＵ装置３００ｃが、ＥＣＵ装置３００，３００ａ，３００ｂの何れかまたは複数に対して異常な制御を実行させるメッセージを送信すると、自動車の走行中に適切な速度を保てない、ユーザが適切な運転操作を行えないなどの被害が生じ得る。また、このような制御異常は、重大な事故に繋がるおそれもある。
【００４４】
そこで、上記のように、第１の実施の形態の車載システムでは、計算装置１００，１００ａ，１００ｂおよび検出装置２００により、不正なＥＣＵ装置３００ｃがＣＡＮ６に接続されていることを検出する機能を提供する。
【００４５】
図３は、計算装置のハードウェア例を示す図である。計算装置１００は、制御部１０１、記憶部１０２、ＭＡＣ生成部１０３、ＥＣＵ−ＩＦ（InterFace）１０４、ネットワークＩＦ１０５、メッセージ受信部１０６およびＭＡＣ蓄積部１０７を有する。各ユニットは計算装置１００のバスに接続されている。計算装置１００ａ，１００ｂも計算装置１００と同様のユニットを用いて実現できる。
【００４６】
制御部１０１は、計算装置１００の情報処理を制御する。制御部１０１は、プロセッサでもよく、マルチプロセッサであってもよい。制御部１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。制御部１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４７】
記憶部１０２は、計算装置１００の主記憶装置である。記憶部１０２は、制御部１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムを記憶する。また、記憶部１０２は、制御部１０１による処理に用いる各種データを記憶する。なお、計算装置１００は、記憶部１０２とは別個に、ＯＳのプログラムやアプリケーションプログラムを記憶する、フラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
【００４８】
ＭＡＣ生成部１０３は、計算装置１００に接続されているＥＣＵ装置３００が送信したメッセージに対応するメッセージ認証コード（ＭＡＣ）を生成し、ＭＡＣ蓄積部１０７に格納する。第２の実施の形態の例では、ＭＡＣはある値（ＭＡＣ値と称する）を示すビット列で表わされる。ＭＡＣ値の生成方法の詳細は、後述される。
【００４９】
ＥＣＵ−ＩＦ１０４は、ＥＣＵ装置３００と接続される接続インタフェースである。ＥＣＵ−ＩＦ１０４は、ＥＣＵ装置３００からのメッセージの受信やＥＣＵ装置３００へのメッセージの転送に用いられる。計算装置１００は、ＥＣＵ−ＩＦ１０４を介して、ＥＣＵ装置３００と直接接続されているともいえる。
【００５０】
ネットワークＩＦ１０５は、ＣＡＮ６と接続される接続インタフェースである。ネットワークＩＦ１０５は、ＣＡＮ６からのメッセージの受信や、ＣＡＮ６へのメッセージの送信に用いられる。
【００５１】
メッセージ受信部１０６は、ＥＣＵ−ＩＦ１０４やネットワークＩＦ１０５を用いて、メッセージを受信し、メッセージの内容を解析する。
ＭＡＣ蓄積部１０７は、ＭＡＣ生成部１０３が生成したＭＡＣ値を、メッセージごとのＩＤに対応づけて記憶する。
【００５２】
図４は、検出装置のハードウェア例を示す図である。検出装置２００は、制御部２０１、記憶部２０２、ＭＡＣ生成部２０３、ＭＡＣ比較部２０４、ネットワークＩＦ２０５、メッセージ受信部２０６、ＭＡＣ蓄積部２０７および異常通知部２０８を有する。
【００５３】
制御部２０１は、検出装置２００の情報処理を制御する。制御部２０１は、プロセッサでもよく、マルチプロセッサであってもよい。制御部２０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。制御部２０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５４】
記憶部２０２は、検出装置２００の主記憶装置である。記憶部２０２は、制御部２０１に実行させるＯＳのプログラムやアプリケーションプログラムを記憶する。また、記憶部２０２は、制御部２０１による処理に用いる各種データを記憶する。なお、検出装置２００は、記憶部２０２とは別個に、ＯＳのプログラムやアプリケーションプログラムを記憶するフラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
【００５５】
ＭＡＣ生成部２０３は、検出装置２００が受信したメッセージに対応するＭＡＣ値を生成し、ＭＡＣ蓄積部２０７に格納する。ＭＡＣ値の生成方法の詳細は、後述される。
ＭＡＣ比較部２０４は、あるＩＤについて、ＭＡＣ蓄積部２０７に記憶されたＭＡＣ値と、検証要求メッセージに含まれるＭＡＣ値とを比較する。ＭＡＣ比較部２０４は、ＭＡＣ値の比較に応じて、不正なＥＣＵ装置がＣＡＮ６に接続されているか否かを判定する。ＭＡＣ比較部２０４は、不正なＥＣＵ装置がＣＡＮ６に接続されていると判定すると、異常通知部２０８に、異常通知を行うよう指示する。
【００５６】
ネットワークＩＦ２０５は、ＣＡＮ６と接続される接続インタフェースである。ネットワークＩＦ２０５は、ＣＡＮ６からのメッセージの受信や、ＣＡＮ６へのメッセージの送信に用いられる。
【００５７】
メッセージ受信部２０６は、ネットワークＩＦ２０５を用いて、メッセージを受信し、メッセージの内容を解析する。
ＭＡＣ蓄積部２０７は、ＭＡＣ生成部２０３により生成されたＭＡＣ値を、メッセージごとのＩＤに対応づけて記憶する。
【００５８】
異常通知部２０８は、ＭＡＣ比較部２０４による異常通知の指示に応じて、不正なＥＣＵ装置が接続されている旨を自動車の運転者や保守員などに通知する。通知の方法としては、例えば、検出装置２００が備えるエラーＬＥＤ（Light Emitting Diode）を点灯させる、検出装置２００に接続されたディスプレイに不正なＥＣＵ装置が接続されている旨を文字表示させる、などの方法が考えられる。
【００５９】
図５は、ＥＣＵ装置のハードウェア例を示す図である。ＥＣＵ装置３００は、制御部３０１、記憶部３０２、通信データ生成部３０３、ネットワークＩＦ３０４、駆動制御部３０５およびセンサ制御部３０６を有する。
【００６０】
制御部３０１は、ＥＣＵ装置３００の情報処理を制御する。制御部３０１は、プロセッサでもよく、マルチプロセッサであってもよい。制御部３０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。制御部３０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００６１】
記憶部３０２は、ＥＣＵ装置の主記憶装置である。記憶部３０２は、制御部３０１に実行させるＯＳのプログラムやアプリケーションプログラムを記憶する。また、記憶部３０２は、制御部３０１による処理に用いる各種データを記憶する。なお、ＥＣＵ装置３００は、記憶部３０２とは別個に、ＯＳのプログラムやアプリケーションプログラムを記憶する、フラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
【００６２】
通信データ生成部３０３は、通信データ（すなわち、メッセージ）を生成する。
ネットワークＩＦ３０４は、計算装置１００に接続されている。ネットワークＩＦ３０４は、計算装置１００を介したＣＡＮ６へのメッセージの送信、および、ＣＡＮ６からのメッセージの受信に用いられる。
【００６３】
駆動制御部３０５は、自動車が備える駆動機構の駆動を制御する。例えば、駆動制御部３０５は、他のＥＣＵ装置から受信したメッセージにより、駆動機構の駆動方法を変更することもある。また、駆動制御部３０５は、現在の駆動状況などの情報を含むメッセージを通信データ生成部３０３により生成させ、ネットワークＩＦ３０４を用いて他のＥＣＵ装置に送信することもある。
【００６４】
センサ制御部３０６は、自動車が備えるセンサの動作を制御する。例えば、センサ制御部３０６は、他のＥＣＵ装置から受信したメッセージにより、センサの動作方法を変更することもある。また、センサ制御部３０６は、センシング結果などの情報を含むメッセージを通信データ生成部３０３により生成させ、ネットワークＩＦ３０４を用いて他のＥＣＵ装置に送信することもある。
【００６５】
なお、計算装置１００、検出装置２００およびＥＣＵ装置３００それぞれは、プロセッサ（制御部に相当）およびメモリ（記憶部に相当）を有するコンピュータにより実現されてもよい。
【００６６】
図６は、計算装置により保持される情報の例を示す図である。図６（Ａ）は、記憶部１０２に格納される受信バッファ１１０を例示している。図６（Ｂ）は、ＭＡＣ蓄積部１０７に格納されるＭＡＣ値バッファ１２０を例示している。
【００６７】
受信バッファ１１０は、計算装置１００が受信したメッセージを一時的に格納しておくバッファである。ＭＡＣ値バッファ１２０は、メッセージのＩＤごとに、前回のＭＡＣ値（旧ＭＡＣ値）と、今回のＭＡＣ値（新ＭＡＣ値）とを記憶するバッファである。
【００６８】
例えば、受信バッファ１１０には、ＩＤが“Ｍｓ１”、旧ＭＡＣ値が“Ａ１”、新ＭＡＣ値が“Ａ２”という情報が登録されている。これは、ＩＤ“Ｍｓ１”を含むメッセージに対して、旧ＭＡＣ値が“Ａ１”であり、新ＭＡＣ値が“Ａ２”であることを示す。後述するように、処理の過程で、新ＭＡＣ値の項目に格納された値が、旧ＭＡＣ値の項目に格納されることになるため、旧ＭＡＣ値の項目の設定値と新ＭＡＣ値の項目の設定値とが同じ値であることもある。例えば、ＩＤ“Ｍｓ２”のレコードでは、旧ＭＡＣ値の項目および新ＭＡＣ値の項目の何れの設定値も“Ｂ１”である。なお、以下の説明では、旧ＭＡＣ値の項目に設定される値を単に旧ＭＡＣ値と称することがある。また、新ＭＡＣ値の項目の設定される値を単に新ＭＡＣ値と称することがある。
【００６９】
図７は、検出装置により保持される情報の例を示す図である。図７（Ａ）は、記憶部２０２に格納される受信バッファ２１０を例示している。図７（Ｂ）は、ＭＡＣ蓄積部２０７に格納されるＭＡＣ値バッファ２２０を例示している。
【００７０】
受信バッファ２１０は、検出装置２００が受信したメッセージを、メッセージのＩＤごとに一時的に格納しておくバッファである。例えば、受信バッファ２１０には、ＩＤが“Ｍｓ１”、受信メッセージが“Ｍｓｇ１”という情報が登録されている。これは、ＩＤ“Ｍｓ１”に対して、メッセージ本体“Ｍｓｇ１”が受信バッファ２１０に格納されていることを示す。受信バッファ２１０には、第２の実施の形態の車載システムでＥＣＵ装置３００，３００ａ，３００ｂにより送信され得るメッセージのＩＤごとに、所定のバッファ領域（受信メッセージを格納するための記憶領域）が予め確保されている。
【００７１】
ＭＡＣ値バッファ２２０は、メッセージのＩＤごとに、旧ＭＡＣ値と、新ＭＡＣ値とを記憶するバッファである。例えば、ＭＡＣ値バッファ２２０には、ＩＤが“Ｍｓ１”、旧ＭＡＣ値が“Ａ１”、新ＭＡＣ値が“Ａ２”という情報が登録されている。これは、ＩＤ“Ｍｓ１”を含むメッセージに対して、旧ＭＡＣ値が“Ａ１”であり、新ＭＡＣ値が“Ａ２”であることを示す。
【００７２】
図８は、メッセージの例を示す図である。図８（Ａ）は、第２の実施の形態の車載システムで用いられるメッセージフォーマットを例示している。図８（Ｂ）は、ＭＡＣ検証要求メッセージ（単に、ＭＡＣ検証要求と称することがある）を例示している。図８（Ｃ）は、ＭＡＣ検証要求の送信要求メッセージ（単に、送信要求と称することがある）を例示している。
【００７３】
図８（Ａ）において、メッセージフォーマットは、ＩＤ、メッセージ長、データおよびエラーチェックのフィールドを含む。ＩＤフィールドには、メッセージのＩＤが設定される。メッセージ長フィールドには、メッセージのサイズが設定される。データフィールドは、自動車内の各種装備に対する制御内容の情報が設定される。エラーチェックフィールドには、エラーチェック用の符号（エラーチェックコード）が設定される。
【００７４】
図８（Ｂ）のＭＡＣ検証要求メッセージは、上記メッセージフォーマットを用いて、計算装置１００，１００ａ，１００ｂにより生成される。例えば、ＩＤフィールドには“Ｘ”が設定される。ＩＤ“Ｘ”は、ＭＡＣ検証要求メッセージを識別するＩＤとして予め定められたＩＤである。メッセージ長フィールドには、“Ｌｅｎ１”が設定される。データフィールドには、検証対象とするＩＤ（検証対象ＩＤと称する）およびＭＡＣ値が設定される。エラーチェックフィールドには、エラーチェックコードが設定される。
【００７５】
図８（Ｃ）のＭＡＣ検証要求の送信要求メッセージは、上記メッセージフォーマットを用いて、検出装置２００により生成される。例えば、ＩＤフィールドには、“Ｙ”が設定される。ＩＤ“Ｙ”は、ＭＡＣ検証要求の送信要求メッセージを識別するＩＤとして予め定められたＩＤである。メッセージ長フィールドには、“Ｌｅｎ２”が設定される。データフィールドには、検証対象ＩＤが設定される。エラーチェックフィールドには、エラーチェックコードが設定される。
【００７６】
ここで、メッセージを送信する際の優先度は、ＩＤによって決定される。具体的には、「緊急メッセージのＩＤ」の優先度が最も高く、次いで「ＭＡＣ検証要求の送信要求のＩＤ“Ｙ”」、「ＭＡＣ検証要求のＩＤ“Ｘ”」、「一般メッセージのＩＤ」の順に、優先度が低くなっていく。なお、「緊急メッセージ」はシステムの非常時に送信されるメッセージである。また、ＭＡＣ検証要求の送信要求は、ＭＡＣ検証要求の送信を要求するものであり、単に「送信要求」と呼ばれてもよい。
【００７７】
図９は、ＭＡＣ値の計算例を示す図である。計算装置１００は、次のようにしてＭＡＣ値を計算する。なお、計算装置１００ａ，１００ｂおよび検出装置２００も、計算装置１００と同様にして、各メッセージのＭＡＣ値を計算する。
【００７８】
計算装置１００は、ＭＡＣ蓄積部１０７により、ＩＤごとの旧ＭＡＣ値および新ＭＡＣ値を記憶している。ＭＡＣ生成部１０３は、あるＩＤのメッセージ（受信メッセージと称する）をＥＣＵ装置３００から受信すると次の処理を実行する。
【００７９】
まず、ＭＡＣ生成部１０３は、受信メッセージのＩＤフィールド、データフィールドの設定、および、シーケンス番号を用いた第１段階の演算により、受信メッセージ単体に対応するＭＡＣ値（受信メッセージＭＡＣ値と称する）を生成する。ただし、ＩＤフィールドをＭＡＣ計算の対象としなくてもよい。ここで、シーケンス番号は、ＣＡＮ６に送信されたメッセージのカウント数である。すなわち、シーケンス番号は、ＣＡＮ６上を流れるメッセージ数に同期する。具体的には、計算装置１００は、メッセージをＥＣＵ３００、または、ＣＡＮ６から受信すると、無条件でカウントアップする（例えば、不正なＥＣＵ装置から送信されたメッセージを受信してもカウントアップする）。また、検出装置２００は、メッセージをＣＡＮ６から受信するごとに検出装置２００のカウンタをカウントアップする。これにより、各計算装置および検出装置２００のカウンタ値は同期される。例えば、制御部１０１は、ＥＣＵ装置３００が送信したメッセージおよびＣＡＮ６から受信するメッセージのＩＤごとにシーケンス番号をカウントし、記憶部１０２に格納し得る。例えば、ＩＤごとのシーケンス番号は、ＭＡＣ値の初期化の際に初期値（例えば、“０”またはそれ以外の所定値）に設定され得る。
【００８０】
ＭＡＣ生成部１０３は、第１段階の演算として、例えば、Ｈ−ＭＡＣ（Hash-based MAC）演算や、Ｃ−ＭＡＣ（Cipher-based MAC）演算を利用できる。ＭＡＣ生成部１０３は、受信メッセージＭＡＣ値に基づく第２段階の演算により、新ＭＡＣ値を生成する。具体的には下記の通りである。
【００８１】
ＭＡＣ生成部１０３は、該当のＩＤのメッセージに対して、第２段階の演算により前回生成したＭＡＣ値（旧ＭＡＣ値）を、ＭＡＣ蓄積部１０７から取得する。そして、ＭＡＣ生成部１０３は、旧ＭＡＣ値と今回の受信メッセージに対して生成した受信メッセージＭＡＣ値とを用いた第２段階の演算により、新ＭＡＣ値を生成する。例えば、旧ＭＡＣ値と受信メッセージＭＡＣ値とを用いた所定の演算（例えば、両ＭＡＣ値を結合して１つの値とする、または、両ＭＡＣ値が同一桁数であれば同一桁のビット同士の論理積をとるなど）の結果を、ハッシュ関数ｈに入力することが考えられる。このとき、ＭＡＣ生成部１０３は、ハッシュ関数ｈに対して、検出装置２００から配布されたＭＡＣ検証鍵も入力する。こうして、ＭＡＣ生成部１０３は、新ＭＡＣ値を生成する。この場合、第２段階の演算を、Ｈ−ＭＡＣ演算と考えてもよい。今回生成された新ＭＡＣ値は、次回のＭＡＣ生成の際に、旧ＭＡＣ値としてＭＡＣ生成の演算に利用される。例えば、第２段階の演算の方法として、ＳＨＡ−２５６（Secure Hash Algorithm 256）などのアルゴリズムを用いることができる。
【００８２】
ここで、以下の説明において、単にＭＡＣ値、旧ＭＡＣ値、新ＭＡＣ値という場合、上記の第２段階の演算によって算出されるＭＡＣ値を示すものとする。
なお、あるＩＤのメッセージに対する初回のＭＡＣ生成の際には、ＭＡＣ蓄積部１０７に旧ＭＡＣ値が記憶されていない。この場合、ＭＡＣ生成部１０３は、旧ＭＡＣ値を用いずに第２段階の演算をおこなってもよいし、旧ＭＡＣ値を所定の初期値（例えば、全て“０”の所定桁のビット列）として第２段階の演算を行ってもよい。
【００８３】
図１０は、計算装置のメッセージ受信時の処理例を示す図である。計算装置１００は、ＥＣＵ装置３００から受信したメッセージＭ１１に対して、図９で例示した演算により、新ＭＡＣ値を生成する。
【００８４】
具体的には、計算装置１００は、ＥＣＵ装置３００からメッセージＭ１１を受信し、受信バッファ１１０に格納する。計算装置１００は、ＭＡＣ生成部１０３の機能により、メッセージＭ１１に対して求めた受信メッセージＭＡＣ値と、ＭＡＣ蓄積部１０７に記憶された旧ＭＡＣ値とを用いて、メッセージＭ１１に対応する新ＭＡＣ値を生成する。計算装置１００は、生成した新ＭＡＣ値をＭＡＣ蓄積部１０７に格納する。そして、計算装置１００は、メッセージＭ１１をＣＡＮ６側に転送する。計算装置１００は、受信バッファ１１０に格納されたメッセージＭ１１を破棄する。
【００８５】
図１１は、検出装置のメッセージ受信時の処理例を示す図である。検出装置２００は、ＣＡＮ６からメッセージＭ１１を受信する。メッセージＭ１１は、ＥＣＵ装置３００により送信されたメッセージである。また、メッセージＭ１１は、メッセージＭ１１に含まれるＩＤについて、検出装置２００により受信された最新メッセージである。
【００８６】
検出装置２００は、メッセージＭ１１を受信バッファ２１０に格納する。ここで、受信バッファ２１０には、メッセージＭ１１と同じＩＤで、メッセージＭ１１よりも１つ前に受信されたメッセージＭ１０が格納されている。メッセージＭ１０は、メッセージＭ１１よりも１つ前に送信されたメッセージＭ１１と同一ＩＤの旧メッセージである。
【００８７】
検出装置２００は、メッセージＭ１１（最新メッセージ）を受信すると、ＭＡＣ生成部２０３により、メッセージＭ１０（旧メッセージ）に対応する新ＭＡＣ値を生成する。生成方法は、図９で例示した方法と同じである。ＭＡＣ生成部２０３は、新ＭＡＣ値を生成する際に、計算装置１００，１００ａ，１００ｂに配布したＭＡＣ検証鍵を用いる。検出装置２００は、生成した新ＭＡＣ値をＭＡＣ蓄積部２０７に格納する。検出装置２００は、受信バッファ２１０に格納されたメッセージＭ１０（旧メッセージ）を破棄する。すなわち、検出装置２００において、メッセージＭ１０に対応する新ＭＡＣ値が生成された時点では、メッセージＭ１０と同一ＩＤの最新メッセージであるメッセージＭ１１が、受信バッファ２１０に、格納されていることになる。
【００８８】
図１２は、同一ＩＤのメッセージ受信時の処理例（その１）を示す図である。図１２では、次の順番でメッセージが送信される場合を例示している。１番目に、ＥＣＵ装置３００はメッセージＭ２１を送信する。２番目に、ＥＣＵ装置３００は、メッセージＭ２２を送信する。３番目に、ＥＣＵ装置３００ａはメッセージＭ２３を送信する。ここで、メッセージＭ２１，Ｍ２２，Ｍ２３のＩＤフィールドには、同じＩＤが設定されている。４番目に、計算装置１００は、ＭＡＣ検証要求Ｍ２４を送信する。このとき、計算装置１００，１００ａおよび検出装置２００は次のような処理を行う。なお、計算装置１００ｂおよびＥＣＵ装置３００ｂについては、着目するＩＤのメッセージに関与しない（該当ＩＤのメッセージを送信せず、該当ＩＤのメッセージを受信しても破棄する）ため、図１２の例の説明では省略する。
【００８９】
計算装置１００は、ＥＣＵ装置３００からメッセージＭ２１を受信する。計算装置１００は、メッセージＭ２１に対応するＭＡＣ値“Ｖ１”を生成し、メッセージＭ２１のＩＤに対応づけて保持する。計算装置１００は、メッセージＭ２１をＣＡＮ６に転送する。メッセージＭ２１は、計算装置１００ａおよび検出装置２００に到着する。
【００９０】
検出装置２００は、メッセージＭ２１を受信バッファ２１０に格納する（メッセージＭ２１が受信バッファ２１０に格納された状態の図示を省略している）。また、この段階で、計算装置１００ａは、メッセージＭ２１を受信するが、計算装置１００ａは該当ＩＤのメッセージを送信しておらず、該当ＩＤのＭＡＣ値をもたないので、ＭＡＣ検証要求を送信しない（計算装置１００ａに該当ＩＤのＭＡＣ値があればＭＡＣ検証要求を送信し検証が行われることになる）。計算装置１００ａは、メッセージＭ２１をＥＣＵ装置３００ａに転送する（図示を省略している）。ＥＣＵ装置３００ａに到着したメッセージＭ２１は、ＥＣＵ装置３００ａで処理されるべきものであれば、ＥＣＵ装置３００ａで処理され、そうでなければ破棄される。
【００９１】
次に、計算装置１００は、ＥＣＵ装置３００からメッセージＭ２２を受信する。計算装置１００は、メッセージＭ２２とＭＡＣ値“Ｖ１”とを基にＭＡＣ値“Ｖ２”を生成し、メッセージＭ２２のＩＤ（メッセージＭ２１と同じＩＤ）に対応づけて保持する。計算装置１００は、メッセージＭ２２をＣＡＮ６に転送する。メッセージＭ２２は、計算装置１００ａおよび検出装置２００に到着する。
【００９２】
検出装置２００は、メッセージＭ２２を受信バッファ２１０に格納する（メッセージＭ２２が受信バッファ２１０に格納された状態の図示を省略している）。検出装置２００は、受信バッファ２１０に格納されたメッセージＭ２１を取得し、メッセージＭ２１を基に、ＭＡＣ値“Ｖ１”を生成し、メッセージＭ２１のＩＤに対応づけて保持する。なお、検出装置２００は、受信バッファ２１０からメッセージＭ２１を取得する際に、メッセージＭ２１のＩＤのシーケンス番号をインクリメントする。すなわち、検出装置２００は、今回受信したメッセージＭ２２を含めないシーケンス番号によって、メッセージＭ２１のＭＡＣ値を生成することになる（以降のメッセージのＭＡＣ値を生成する際も同様）。計算装置１００ａに到着したメッセージＭ２２は、メッセージＭ２１と同様に処理される。
【００９３】
続いて、計算装置１００ａは、ＥＣＵ装置３００ａからメッセージＭ２３を受信する。計算装置１００ａは、メッセージＭ２３に対応するＭＡＣ値“Ｖ３”を生成し、メッセージＭ２３のＩＤ（メッセージＭ２１，Ｍ２２と同じＩＤ）に対応づけて保持する。計算装置１００ａは、メッセージＭ２３をＣＡＮ６に転送する。メッセージＭ２３は、計算装置１００および検出装置２００に到着する。
【００９４】
検出装置２００は、メッセージＭ２３を受信バッファ２１０に格納する。検出装置２００は、受信バッファ２１０に格納されたメッセージＭ２２とＭＡＣ値“Ｖ１”とを基に、ＭＡＣ値“Ｖ２”を生成し、メッセージＭ２２のＩＤに対応づけて保持する。
【００９５】
計算装置１００は、メッセージＭ２３を受信する。計算装置１００は、メッセージＭ２３に含まれるＩＤが、計算装置１００が保持するＭＡＣ値“Ｖ２”に対応づけられたＩＤに一致していることを検出する。すると、計算装置１００は、当該ＩＤおよびＭＡＣ値“Ｖ２”を含むＭＡＣ検証要求Ｍ２４を生成し、ＣＡＮ６に送信する。計算装置１００は、計算装置１００で保持されている当該ＩＤに対するＭＡＣ値を初期化する（ＭＡＣ値の初期化の際は、該当ＩＤのシーケンス番号も初期値にする）。ＭＡＣ検証要求Ｍ２４は、計算装置１００ａおよび検出装置２００に到着する。
【００９６】
検出装置２００は、ＭＡＣ検証要求Ｍ２４に含まれるＩＤおよびＭＡＣ値“Ｖ２”の組が、検出装置２００が保持するＩＤおよびＭＡＣ値“Ｖ２”の組に一致するかを比較する。検出装置２００は当該ＩＤおよびＭＡＣ値“Ｖ２”の組が一致することを検出する。すると、検出装置２００は、当該ＩＤに対するＭＡＣ値を初期化する（該当ＩＤのシーケンス番号も初期値にする）。
【００９７】
なお、計算装置１００ａは、ＭＡＣ検証要求Ｍ２４を受信するが、計算装置１００ａで処理すべきメッセージではないと判断して、ＭＡＣ検証要求Ｍ２４を破棄する。
図１３は、同一ＩＤのメッセージ受信時の処理例（その２）を示す図である。図１３では、図１２の処理に続いて実行される処理を例示している。図１３の処理では、次の順番でメッセージが送信される。１番目に、検出装置２００は、送信要求Ｍ２５を送信する。送信要求Ｍ２５は、検証対象のＩＤとして、メッセージＭ２３のＩＤ（メッセージＭ２１，Ｍ２２と同じＩＤ）を含む。２番目に、計算装置１００ａは、ＭＡＣ検証要求Ｍ２６を送信する。このとき、計算装置１００，１００ａおよび検出装置２００は次のような処理を行う。
【００９８】
検出装置２００は、送信要求Ｍ２５を送信する際に、受信バッファ２１０に格納されたメッセージＭ２３を基に、ＭＡＣ値“Ｖ３”を生成し、メッセージＭ２３のＩＤに対応づけて保持する。そして、検出装置２００は、送信要求Ｍ２５をＣＡＮ６に送信する。
【００９９】
計算装置１００は、送信要求Ｍ２５を受信する。計算装置１００は、送信要求Ｍ２５に含まれる検証対象のＩＤに対応するＭＡＣ値を保持していない（初期化済であるため）。このため、計算装置１００は、送信要求Ｍ２５に対して応答せずに、送信要求Ｍ２５を破棄する。
【０１００】
計算装置１００ａは、送信要求Ｍ２５を受信する。計算装置１００ａは、送信要求Ｍ２５に含まれる検証対象のＩＤに対応するＭＡＣ値（ＭＡＣ値“Ｖ３”）を保持している。このため、計算装置１００ａは、送信要求Ｍ２５に応答する。具体的には、計算装置１００ａは、検証対象のＩＤおよび当該ＩＤに対応づけて保持しているＭＡＣ値“Ｖ３”を含むＭＡＣ検証要求Ｍ２６を生成し、ＣＡＮ６に送信する。計算装置１００ａは、該当のＩＤに対するＭＡＣ値を初期化する（該当ＩＤのシーケンス番号も初期値にする）。ＭＡＣ検証要求Ｍ２６は、計算装置１００および検出装置２００に到着する。
【０１０１】
検出装置２００は、ＭＡＣ検証要求Ｍ２６に含まれるＩＤおよびＭＡＣ値“Ｖ３”の組が、検出装置２００が保持するＩＤおよびＭＡＣ値“Ｖ３”の組に一致するかを比較する。検出装置２００は、当該ＩＤとＭＡＣ値“Ｖ３”との組が一致することを検出する。すると、検出装置２００は、当該ＩＤに対するＭＡＣ値を初期化する（該当ＩＤのシーケンス番号も初期値にする）。
【０１０２】
なお、計算装置１００は、ＭＡＣ検証要求Ｍ２６を受信するが、計算装置１００で処理すべきメッセージではないと判断して、ＭＡＣ検証要求Ｍ２６を破棄する。
この場合、図１２，１３で例示した検出装置２００によるＭＡＣ値の検証は、何れも成功したことになる。その結果、検出装置２００は、不正なＥＣＵ装置がＣＡＮ６に接続されていないと判断する。
【０１０３】
一方、検出装置２００は、該当のＩＤについて、ＭＡＣ検証要求Ｍ２６に含まれるＭＡＣ値と、検出装置２００が保持するＭＡＣ値とが一致していない場合（ＭＡＣ値の検証に失敗）、ＣＡＮ６に不正なＩＣＵ装置が接続されていると判断する。
【０１０４】
また、不正なＥＣＵ装置がＣＡＮ６に接続されている場合、不正なＥＣＵ装置は、計算装置を介さずにＣＡＮ６に接続されることになるため、図１２，１３で例示した検証を検出装置２００により適切に行えないことになる。この場合、検出装置２００は、不正なＥＣＵ装置がＣＡＮ６に接続されていると判断する。具体的には次の通りである。
【０１０５】
図１４は、同一ＩＤのメッセージ受信時の処理例（その３）を示す図である。図１４では、図１２の処理に続いて実行される処理を例示している。図１４の処理では、次の順番でメッセージが送信される。１番目に、検出装置２００は、送信要求Ｍ２５を送信する。送信要求Ｍ２５は、検証対象のＩＤとして、メッセージＭ２３のＩＤ（メッセージＭ２１，Ｍ２２と同じＩＤ）を含む。ただし、図１４の例では、メッセージＭ２３は、ＥＣＵ装置３００ａが送信したものではなく、不正なＥＣＵ装置（例えば、ＥＣＵ装置３００ｃ）が送信したものとする。２番目に、何れかのＥＣＵ装置は、当該ＩＤを含む新規のメッセージＭ２７を送信する。
【０１０６】
この場合、検出装置２００は、送信要求Ｍ２５を送信する際に、受信バッファ２１０に格納されたメッセージＭ２３を基に、ＭＡＣ値“Ｖ３”を生成し、メッセージＭ２３のＩＤに対応づけて保持する。その後、検出装置２００は、送信要求Ｍ２５の送信に対して、ＭＡＣ検証要求を受信することなく、該当のＩＤを含むメッセージＭ２７を受信することになる。
【０１０７】
ここで、前述のように、ＭＡＣ検証要求は、他のメッセージよりも優先度が高い。したがって、図１３で例示したＥＣＵ装置３００ａ（正規のＥＣＵ装置）のように、メッセージ送信元のＥＣＵ装置が計算装置を介してＣＡＮ６に接続されていれば、検出装置２００は、送信要求Ｍ２５の送信後、何れかの計算装置により送信されたＭＡＣ検証要求を受信するはずである。これに対して、上記のようにＭＡＣ検証要求を受信することなく、検証対象のＩＤを含むメッセージＭ２７を受信したということは、計算装置と接続されていない、あるいは、計算装置の機能をもたない不正なＥＣＵ装置が、ＣＡＮ６に接続されていることになる。よって、この場合、検出装置２００は、不正なＥＣＵ装置がＣＡＮ６に接続されていると判断する。
【０１０８】
次に、第２の実施の形態の車載システムで実行される処理手順を説明する。
図１５は、検出装置の初期化処理の例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。ここで、初期化処理は、例えば、検出装置２００が電源オンになり、運用状態へ遷移する前に実行される処理である。
【０１０９】
（Ｓ１１）制御部２０１は、受信バッファ２１０およびＭＡＣ値バッファ２２０を初期化する。これにより、受信バッファ２１０およびＭＡＣ値バッファ２２０内のデータが消去される。ＭＡＣ生成部１０３は、ＭＡＣ検証鍵を生成する。
【０１１０】
（Ｓ１２）制御部２０１は、ＥＣＵ装置の認証を行う（ＥＣＵ認証）。例えば、制御部２０１は、ＣＡＮ６に接続されているＥＣＵ装置から当該ＥＣＵ装置の識別番号を取得し、検出装置２００に予め登録された識別番号に合致するかを確認することで、ＥＣＵ装置の認証を行う（合致すれば認証成功、合致しなければ認証失敗）。
【０１１１】
（Ｓ１３）制御部２０１は、該当のＥＣＵ装置の認証に成功したか否かを判定する。認証に成功した場合、処理をステップＳ１５に進める。認証に失敗した場合、処理をステップＳ１４に進める。
【０１１２】
（Ｓ１４）異常通知部２０８は、不正なＥＣＵ装置が接続されている旨をユーザに通知する。例えば、異常通知部２０８は、検出装置２００が備えるエラーＬＥＤを点灯させる、検出装置２００に接続されたディスプレイに不正なＥＣＵ装置が接続されている旨を文字表示させるなどの方法によって、不正なＥＣＵ装置が接続されている旨をユーザに通知する。そして、処理を終了する。
【０１１３】
（Ｓ１５）ＭＡＣ生成部２０３は、ＣＡＮ６を介し、認証に成功したＥＣＵ装置に対してＭＡＣ検証鍵を配布する。例えば、ＭＡＣ生成部１０３は、認証に成功したＥＣＵ装置との間で、鍵配布用に専用のセッションを確立してＭＡＣ検証鍵を配布してもよい。
【０１１４】
（Ｓ１６）制御部２０１は、全てのＥＣＵ装置の認証に成功したか否かを判定する。全てのＥＣＵ装置の認証に成功した場合、処理をステップＳ１７に進める。未認証のＥＣＵ装置がある場合、処理をステップＳ１２に進める。
【０１１５】
（Ｓ１７）制御部２０１は、各ＥＣＵ装置に対して、通信の開始通知を送信する。検出装置２００は、開始通知を送信する際に、シーケンス番号をカウントするカウンタを初期化する。各計算装置では、開始通知を受信した際にカウンタが初期化されることになる。これにより、カウンタを同期させる。
【０１１６】
（Ｓ１８）制御部２０１は、運用状態に遷移する。検出装置２００は、運用状態では、受信するメッセージに応じて、後述する種々の処理を実行する。
なお、ステップＳ１２〜Ｓ１６において、ＭＡＣ生成部１０３は、例えば、最初に、ＣＡＮ６に接続されている全てのＥＣＵ装置から識別番号を取得し、取得した全ての識別番号が認証成功した場合に、全てのＥＣＵ装置に対してＭＡＣ検証鍵を配布してもよい。
【０１１７】
次に、計算装置１００による処理手順を説明する。計算装置１００について主に説明するが、計算装置１００ａ，１００ｂも計算装置１００と同様の処理を実行する。
図１６は、計算装置の初期化処理の例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１１８】
（Ｓ２１）制御部１０１は、計算装置１００に接続されているＥＣＵ装置３００の認証を行う（ＥＣＵ認証）。具体的には、制御部１０１は、ＥＣＵ装置３００の識別番号を取得し、計算装置１００に予め登録された識別番号に合致するかを確認することで、ＥＣＵ装置３００の認証を行う（合致すれば認証成功、合致しなければ認証失敗）。
【０１１９】
（Ｓ２２）制御部１０１は、検出装置２００の認証に成功したか否かを判定する。認証に成功した場合、処理をステップＳ２４に進める。認証に失敗した場合、処理をステップＳ２３に進める。
【０１２０】
（Ｓ２３）制御部１０１は、計算装置１００に接続された所定のＬＥＤまたはディスプレイなどを用いて認証失敗のエラーを表示する。また、制御部１０１は、計算装置１００によるＭＡＣ値の計算機能を無効とする。この場合、計算装置１００は、以後、ＥＣＵ装置３００から受信するメッセージを、ＣＡＮ６へ素通りさせるようになる。
【０１２１】
（Ｓ２４）制御部１０１は、検出装置２００によって配布されたＭＡＣ検証鍵を受信する。ステップＳ２３は、図１５のステップＳ１５に対応する処理である。
（Ｓ２５）制御部１０１は、受信バッファ１１０およびＭＡＣ値バッファ１２０を初期化する。これにより、受信バッファ１１０およびＭＡＣ値バッファ１２０内のデータが消去される。また、制御部１０１は、ＭＡＣ検証鍵を記憶部１０２に格納する。
【０１２２】
（Ｓ２６）制御部１０１は、検出装置２００から通信の開始通知を受信すると、運用状態に遷移する。計算装置１００は、運用状態では、受信するメッセージに応じて、後述する種々の処理を実行する。なお、制御部１０１は、検出装置２００から開始通知を受信するとシーケンス番号をカウントするカウンタを初期化する。
【０１２３】
図１７は、計算装置の運用状態の処理例（その１）を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。図１７では、計算装置１００が、計算装置１００に接続されているＥＣＵ装置３００からメッセージを受信した場合の手順を例示する。
【０１２４】
（Ｓ３１）メッセージ受信部１０６は、ＥＣＵ−ＩＦ１０４を介して、ＥＣＵ装置３００からメッセージを受信する。
（Ｓ３２）メッセージ受信部１０６は、受信したメッセージ（受信メッセージ）を受信バッファ１１０に記録する。メッセージ受信部１０６は、受信メッセージに含まれるＩＤをＭＡＣ値バッファ１２０に登録する。ただし、ＭＡＣ値バッファ１２０に該当のＩＤが登録済のこともある。該当のＩＤが登録済の場合、メッセージ受信部１０６は、該当のＩＤを上書きしてもよいし、ＩＤの登録を行わなくてもよい。メッセージ受信部１０６は、該当のＩＤのシーケンス番号をインクリメントする。
【０１２５】
（Ｓ３３）ＭＡＣ生成部１０３は、受信メッセージのＩＤに対して、ＭＡＣ値バッファ１２０に、旧ＭＡＣ値があるか否かを判定する。旧ＭＡＣ値がない場合、処理をステップＳ３４に進める。旧ＭＡＣがある場合、処理をステップＳ３５に進める。
【０１２６】
（Ｓ３４）ＭＡＣ生成部１０３は、受信メッセージを基にＭＡＣ値を計算し、ＭＡＣ値バッファ１２０の新ＭＡＣ値に格納する。そして、処理をステップＳ３６に進める。
（Ｓ３５）ＭＡＣ生成部１０３は、受信メッセージと旧ＭＡＣ値（受信メッセージのＩＤに対応する旧ＭＡＣ値）とを基にＭＡＣ値を計算し、ＭＡＣ値バッファ１２０の新ＭＡＣ値に格納する。そして、処理をステップＳ３６に進める。
【０１２７】
（Ｓ３６）制御部１０１は、ネットワークＩＦ１０５を介して、受信メッセージをＣＡＮ６へ送信する。
（Ｓ３７）制御部１０１は、メッセージの送信に成功したか否かを判定する。例えば、制御部１０１は、他の装置により送信されたメッセージとの衝突有無やＣＡＮ６の通信路上に流れるメッセージがステップＳ３６で送信したメッセージに合致しているかなどの検証によって、メッセージの送信に成功したか否かを判定することが考えられる。メッセージの送信に成功した場合、処理をステップＳ３８に進める。メッセージの送信に成功しなかった場合、処理を終了する。なお、メッセージの送信に成功しなかった場合、制御部１０１は、送信失敗をＥＣＵ装置３００に通知する。すると、ＥＣＵ装置３００は、同じメッセージの再送を試みる。当該再送の際には、計算装置１００は、ステップＳ３１の処理から再度順番に実行することになる。
【０１２８】
（Ｓ３８）制御部１０１は、今回送信成功したメッセージのＩＤについて、ＭＡＣ値バッファ１２０における新ＭＡＣ値を、旧ＭＡＣ値に格納する。
このようにして、計算装置１００は、ＥＣＵ装置３００からメッセージを受信するたびに、当該メッセージのＩＤごとにＭＡＣ値を計算し、ＭＡＣ蓄積部１０７に蓄積する。
【０１２９】
図１８は、計算装置の運用状態の処理例（その２）を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。図１８では、計算装置１００がＣＡ６側からメッセージを受信した場合の手順を例示する。
【０１３０】
（Ｓ４１）メッセージ受信部１０６は、ネットワークＩＦ１０５を介して、ＣＡＮ６よりメッセージを受信する。
（Ｓ４２）制御部１０１は、受信したメッセージ（受信メッセージ）のＩＤがＭＡＣ値バッファ１２０に登録済のＩＤであるか否かを判定する。登録済のＩＤである場合、処理をステップＳ４３に進める。登録済のＩＤでない場合、受信メッセージをＥＣＵ装置３００へ送信して、処理を終了する。
【０１３１】
（Ｓ４３）制御部１０１は、受信メッセージのＩＤに対応する旧ＭＡＣ値が、ＭＡＣ値バッファ１２０にあるか否かを判定する。該当のＩＤに対応する旧ＭＡＣ値がある場合、処理をステップＳ４４に進める。該当のＩＤに対応する旧ＭＡＣ値がない場合、処理を終了する。
【０１３２】
（Ｓ４４）制御部１０１は、受信メッセージのＩＤおよび当該ＩＤに対応する旧ＭＡＣ値を含むＭＡＣ検証要求を、ネットワークＩＦ１０５を介して、ＣＡＮ６へ送信する。
（Ｓ４５）制御部１０１は、ＭＡＣ検証要求の送信に成功したか否かを判定する。例えば、制御部１０１は、ステップＳ３７で例示した方法と同様の方法を用いて、ＭＡＣ検証要求の送信に成功したか否かを判定できる。ＭＡＣ検証要求の送信に成功した場合、処理をステップＳ４６に進める。ＭＡＣ検証要求の送信に成功しなかった場合、処理を終了する。
【０１３３】
（Ｓ４６）制御部１０１は、ステップＳ４４で送信した検証要求に含まれるＩＤについて、ＭＡＣ値バッファ１２０に登録された旧ＭＡＣ値を初期化する。制御部１０１は、該当ＩＤのシーケンス番号も初期値に設定する。そして、処理を終了する。
【０１３４】
このようにして、計算装置１００は、ＣＡＮ６側から受信したメッセージに含まれるＩＤに対し、ＭＡＣ値バッファ１２０に旧ＭＡＣ値が登録済である場合、当該ＩＤおよび旧ＭＡＣ値を含むＭＡＣ検証要求を送信し、検出装置２００による検証を促す。
【０１３５】
なお、ステップＳ４３またはステップＳ４５の判定でＮｏの場合、制御部１０１は、受信メッセージをＥＣＵ装置３００へ転送してもよい。あるいは、ステップＳ４３またはステップＳ４５の判定でＮｏの場合、制御部１０１は、受信メッセージのＩＤを基にＥＣＵ装置３００で処理されるメッセージではないことが明らかであれば、当該受信メッセージを破棄してもよい。また、ステップＳ４２では、制御部１０１は、受信したメッセージのＩＤごとにシーケンス番号をカウントするカウンタをカウンタアップする。
【０１３６】
図１９は、計算装置の運用状態の処理例（その３）を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。図１９では、計算装置１００がＣＡＮ６側から送信要求を受信した場合の手順を例示する。
【０１３７】
（Ｓ５１）メッセージ受信部１０６は、ネットワークＩＦ１０５を介して、ＣＡＮ６よりＭＡＣ検証要求の送信要求を受信する。前述のように、送信要求は、データフィールドに検証対象ＩＤを含む。
【０１３８】
（Ｓ５２）制御部１０１は、送信要求に含まれる検証対象ＩＤを取得する。制御部１０１は、検証対象ＩＤと同じＩＤについて、ＭＡＣ値バッファ１２０に旧ＭＡＣ値があるか否かを判定する。該当ＩＤの旧ＭＡＣ値がある場合、処理をステップＳ５３に進める。該当ＩＤの旧ＭＡＣ値がない場合、送信要求を破棄して、処理を終了する。
【０１３９】
（Ｓ５３）制御部１０１は、検証対象ＩＤおよび当該ＩＤに対応する旧ＭＡＣ値を含むＭＡＣ検証要求を、ネットワークＩＦ１０５を介して、ＣＡＮ６へ送信する。
（Ｓ５４）制御部１０１は、ステップＳ５３で送信した検証要求に含まれるＩＤについて、ＭＡＣ値バッファ１２０に登録された旧ＭＡＣ値を初期化する。制御部１０１は、該当ＩＤのシーケンス番号も初期値に設定する。そして、処理を終了する。
【０１４０】
このようにして、計算装置１００は、送信要求を受信し、送信要求で指定された検証対象ＩＤに対応する旧ＭＡＣ値を保持している場合、当該ＩＤおよび当該旧ＭＡＣ値を含むＭＡＣ検証要求をＣＡＮ６に送信する。
【０１４１】
図２０は、検出装置の運用状態の処理例（その１）を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。図２０では、検出装置２００がＭＡＣ検証要求以外のメッセージを受信した場合の手順を例示する。
【０１４２】
（Ｓ６１）メッセージ受信部２０６は、ネットワークＩＦ２０５を介して、ＣＡＮ６よりメッセージを受信する。
（Ｓ６２）制御部２０１は、受信したメッセージ（受信メッセージ）に含まれるＩＤが、受信バッファ２１０の何れかのＩＤに一致するか否かを判定する。一致する場合、処理をステップＳ６３に進める。一致しない場合、受信メッセージを破棄して、処理を終了する。
【０１４３】
（Ｓ６３）ＭＡＣ生成部２０３は、受信メッセージのＩＤと同じＩＤであって、受信バッファ２１０に格納されているメッセージ（当該ＩＤに対する前回の受信メッセージ）を取得する。ＭＡＣ生成部２０３は、当該ＩＤのシーケンス番号をインクリメントする。ＭＡＣ生成部２０３は、当該ＩＤについて、ＭＡＣ値バッファ２２０に格納された旧ＭＡＣ値を取得する。ＭＡＣ生成部２０３は、当該ＩＤに対する前回の受信メッセージと、当該旧ＭＡＣ値とを基に、新ＭＡＣ値を計算し、ＭＡＣ値バッファ２２０の新ＭＡＣ値に格納する。なお、当該ＩＤのメッセージが受信バッファ２１０に未だ格納されていないこともある。その場合、ＭＡＣ生成部２０３は、受信バッファ２１０から当該ＩＤに対する前回のメッセージを取得できないので、ステップＳ６３をスキップする。
【０１４４】
（Ｓ６４）制御部２０１は、ステップＳ６１で受信した受信メッセージ（今回の受信メッセージ）を受信バッファ２１０に格納する。ここで、ＭＡＣ生成部２０３は、ステップＳ６３で計算した新ＭＡＣ値を、ＭＡＣ値バッファ２２０の該当ＩＤに対応する旧ＭＡＣ値に設定する（ただし、ステップＳ６３で新ＭＡＣ値を計算していない場合は当該旧ＭＡＣ値の設定を行わない）。
【０１４５】
このようにして、検出装置２００は、ＣＡＮ６から受信するメッセージについて、ＩＤごとにＭＡＣ値を計算し、保持する。このとき、該当のＩＤについて今回受信した最新のメッセージについてはＭＡＣ値を計算せずに、受信バッファ２１０に格納しておく。
【０１４６】
図２１は、検出装置の運用状態の処理例（その２）を示すフローチャートである。以下、図２１に示す処理をステップ番号に沿って説明する。図２１では、検出装置２００がＭＡＣ検証要求を受信した場合の手順を例示する。
【０１４７】
（Ｓ７１）メッセージ受信部２０６は、ネットワークＩＦ２０５を介して、ＣＡＮ６よりＭＡＣ検証要求を受信する。ＭＡＣ検証要求は、前述のように、検証対象ＩＤおよびＭＡＣ値を含む。
【０１４８】
（Ｓ７２）ＭＡＣ比較部２０４は、ＭＡＣ検証要求に含まれる検証対象ＩＤに対応するＭＡＣ値（旧ＭＡＣ値）を、ＭＡＣ値バッファ２２０から取得する。ＭＡＣ比較部２０４は、ＭＡＣ値バッファ２２０から取得したＭＡＣ値と、ＭＡＣ検証要求に含まれるＭＡＣ値とを比較する。
【０１４９】
（Ｓ７３）ＭＡＣ比較部２０４は、ステップＳ７２の比較により、両者が一致するか否かを判定する。一致しない場合、処理をステップＳ７４に進める。一致する場合、処理をステップＳ７５に進める。
【０１５０】
（Ｓ７４）異常通知部２０８は、不正なＥＣＵ装置が接続されている旨をユーザに通知する。例えば、異常通知部２０８は、検出装置２００が備えるエラーＬＥＤを点灯させる、検出装置２００に接続されたディスプレイに不正なＥＣＵ装置が接続されている旨を文字表示させるなどの方法によって、不正なＥＣＵ装置が接続されている旨をユーザに通知する。そして、処理を終了する。
【０１５１】
（Ｓ７５）ＭＡＣ生成部２０３は、受信バッファ２１０に保持されたメッセージのうち検証対象ＩＤに対応するメッセージを基に、新ＭＡＣ値を計算する。このとき、ＭＡＣ生成部２０３は、新ＭＡＣ値の計算前に、該当ＩＤのシーケンス番号を１単位分インクリメントする。ＭＡＣ生成部２０３は、計算した新ＭＡＣ値を、ＭＡＣ値バッファ２２０の当該検証対象ＩＤに対応する旧ＭＡＣ値に登録する（ＭＡＣ値バッファ２２０に格納）。
【０１５２】
（Ｓ７６）制御部２０１は、受信バッファ２１０に格納された検証対象ＩＤに対応するメッセージを削除する。
（Ｓ７７）制御部２０１は、該当の検証対象ＩＤを含むＭＡＣ検証要求の送信要求を、ネットワークＩＦ２０５を介して、ＣＡＮ６へ送信する。
【０１５３】
（Ｓ７８）制御部２０１は、送信要求に対する応答待ち状態へ遷移する。
このように、検出装置２００は、ＭＡＣ検証要求に応じて、ＭＡＣ値の検証を行う。ＭＡＣ検証要求に対するＭＡＣ値の検証に成功した場合でも、最新のメッセージに対するＭＡＣ値の検証を行うため、検出装置２００は、送信要求を送信する。
【０１５４】
図２２は、検出装置の応答待ち状態の処理例を示すフローチャートである。以下、図２２に示す処理をステップ番号に沿って説明する。図２２では、検出装置２００が、送信要求の送信後、応答待ち状態にある場合の手順を例示する。
【０１５５】
（Ｓ８１）メッセージ受信部２０６は、ネットワークＩＦ２０５を介して、ＣＡＮ６よりメッセージを受信する。
（Ｓ８２）メッセージ受信部２０６は、受信したメッセージがＭＡＣ検証要求であるか否かを判定する。ＭＡＣ検証要求である場合、処理をステップＳ８３に進める。ＭＡＣ検証要求でない場合、処理をステップＳ８５に進める。
【０１５６】
（Ｓ８３）ＭＡＣ比較部２０４は、ＭＡＣ検証要求に含まれる検証対象ＩＤに対応するＭＡＣ値（旧ＭＡＣ値）を、ＭＡＣ値バッファ２２０から取得する。ＭＡＣ比較部２０４は、ＭＡＣ値バッファ２２０から取得したＭＡＣ値と、ＭＡＣ検証要求に含まれるＭＡＣ値とを比較する。
【０１５７】
（Ｓ８４）ＭＡＣ比較部２０４は、ステップＳ８３の比較により、両者が一致するか否かを判定する。一致しない場合、処理をステップＳ８５に進める。一致する場合、ＭＡＣ値バッファ２２０の該当のＩＤに対するＭＡＣ値（旧ＭＡＣ値および新ＭＡＣ値）を初期化（該当ＩＤのシーケンス番号も初期値に設定）して、処理をステップＳ８６に進める。
【０１５８】
（Ｓ８５）異常通知部２０８は、不正なＥＣＵ装置が接続されている旨をユーザに通知する。例えば、異常通知部２０８は、検出装置２００が備えるエラーＬＥＤを点灯させる、検出装置２００に接続されたディスプレイに不正なＥＣＵ装置が接続されている旨を文字表示させるなどの方法によって、不正なＥＣＵ装置が接続されている旨をユーザに通知する。そして、処理を終了する。
【０１５９】
（Ｓ８６）制御部２０１は、運用状態へ遷移する。これにより、ＭＡＣ検証要求の送信要求に対する応答待ち状態は解除される。
このように、検出装置２００は、ＭＡＣ検証要求の送信要求を送信することで、ＥＣＵ装置によるＭＡＣ検証要求の送信を促す。そして、検出装置２００は、ＭＡＣ検証要求を受信しないまま、通常のメッセージを受信した場合や、ＭＡＣ検証要求に含まれるＭＡＣ値の検証に失敗した場合に、不正なＥＣＵ装置がＣＡＮ６に接続されていると判断する。
【０１６０】
なお、検出装置２００は、運用状態において、何れかのＥＣＵ装置からＭＡＣ検証要求を受信した場合だけでなく、ＭＡＣ検証要求の送信要求を定期的にＣＡＮ６に送信することで、計算装置が置き換えられたことを検出してもよい。
【０１６１】
図２３は、検出装置の運用状態の処理例（その３）を示すフローチャートである。以下、図２３に示す処理をステップ番号に沿って説明する。
（Ｓ９１）制御部２０１は、前回の送信要求の送信から一定時間が経過したか否かを判定する。一定時間が経過した場合、処理をステップＳ９２に進める。一定時間が経過していない場合、処理を終了する（制御部２０１は、一定時間経過したか否かの監視を継続する）。
【０１６２】
（Ｓ９２）制御部２０１は、ＣＡＮ６へ送信要求を送信する。このとき、制御部２０１は、送信要求に、検証対象ＩＤを含める。例えば、制御部２０１は、ＩＤごとにタイマを用意して、ＩＤごとに送信要求を定期的に送信してもよい。あるいは、制御部２０１は、検証対象ＩＤを１つずつ順番に選択し、送信要求に含めてもよい（例えば、今回の定期送信のタイミングでは検証対象ＩＤを第１のＩＤとし、次回の定期送信のタイミングでは検証対象ＩＤを第２のＩＤとするなど）。
【０１６３】
（Ｓ９３）制御部２０１は、送信要求に対する応答待ち状態へ遷移する。その後、検出装置２００の各部は、図２２で説明した手順を実行する。
なお、制御部２０１は、ＩＤごとのメッセージの受信数に応じて、送信要求の送信タイミングを決定してもよい。例えば、制御部２０１は、該当のＩＤについて、前回の送信要求の送信タイミングから所定数のメッセージを受信したタイミングで、当該ＩＤを検証対象ＩＤとして含むＭＡＣ検証溶融要求をＣＡＮ６に送信する。
【０１６４】
検出装置２００は、こうして定期的にＭＡＣ検証要求の確認を行うことで、何れかの計算装置の置き換えまたは取り外しを適切に監視できる。
図２４は、ＥＣＵ装置によるメッセージ送信例を示す図である。図２４では、ＥＣＵ装置３００，３００ａ，３００ｃ（ＥＣＵ装置３００ｃは、不正ＥＣＵ装置である）が送信するメッセージの表記例を示している。具体的には、ＥＣＵ装置３００が送信するメッセージを、送信される順番を示す番号ｎ（ｎは１以上の整数）とともに、メッセージａｎと表記する。例えば、メッセージａ１は、ＥＣＵ装置３００が送信した１番目のメッセージである。同様に、ＥＣＵ装置３００ａが送信するｎ番目のメッセージを、メッセージｂｎと表記する。また、ＥＣＵ装置３００ｃが送信するｎ番目のメッセージを、メッセージｄｎと表記する。
【０１６５】
図２５は、監視の具体例を示す図である。図２５では、第２の実施の形態の監視の具体例とともに、他の監視方法との比較例も例示されている。図２５（Ａ）は、ＭＡＣ値によるメッセージ認証を行わない場合である。図２５（Ｂ）は、メッセージごとにＭＡＣ値を送信して監視を行う場合である。図２５（Ｃ）は、第２の実施の形態の車載システムによる監視の具体例である。なお、以下では、図２５（Ａ）、図２５（Ｂ）の説明を行う場合にも、第２の実施の形態の説明に用いた装置名／符号を便宜的に用いる。ただし、図２５（Ａ）、図２５（Ｂ）で想定されるシステムでは、計算装置が含まれておらず、各ＥＣＵ装置は、計算装置を介さずにＣＡＮに接続されているものとする。また、図２５（Ａ）、図２５（Ｂ）、図２５（Ｃ）の何れの場合も、最初のメッセージ（メッセージａ１）の送信前には、何のメッセージも送信されていないものとする。更に、送信されるメッセージａｎ，ｂｎ，ｄｎの何れも、ＩＤフィールドのＩＤは全て同じであるものとする。
【０１６６】
図２５（Ａ）において、まず、ＥＣＵ装置３００が、一連のメッセージａ１，ａ２，・・・，ａｎ（合計でＮ個のメッセージ）を送信する。次に、ＥＣＵ装置３００ａが、メッセージｂ１を送信する。その後、ＥＣＵ装置３００ｃ（不正ＥＣＵ装置）が不正なメッセージｄ１を送信する。しかし、図２５（Ａ）の例では、ＭＡＣ値によるメッセージ認証を行っていないため、ＥＣＵ装置３００ｃにより送信された不正なメッセージｄ１を、不正なメッセージとして検出することができない。なお、図２５（Ａ）の例では、メッセージａ１からメッセージｄ１までの一連のメッセージの個数は、Ｎ＋１＋１個（＝Ｎ＋２個）である。
【０１６７】
図２５（Ｂ）において、ＥＣＵ装置３００は、メッセージａ１、メッセージａ１のＭＡＣ値を含むＭＡＣメッセージ、メッセージａ２、メッセージａ２のＭＡＣ値を含むＭＡＣメッセージ、・・・、メッセージａｎ、メッセージａｎのＭＡＣ値を含むＭＡＣメッセージというように、メッセージごとにＭＡＣメッセージを送信する。次に、ＥＣＵ装置３００ａは、メッセージｂ１、メッセージｂ１のＭＡＣ値を含むＭＡＣメッセージを順に送信する。次に、ＥＣＵ装置３００ｃは、メッセージｄ１を送信する。次に、ＥＣＵ装置３００ａは、メッセージｂ２を送信する。この場合、メッセージｄ１に続くＭＡＣ値が送信されていないため、例えば、検出装置２００は、メッセージｂ２が送信された時点で、不正なメッセージ（メッセージｄ１）を送信した不正なＥＣＵ装置（ＥＣＵ装置３００ｃ）が存在することを発見できる。この場合、ＥＣＵ装置３００によるメッセージａ１の送信から、不正なＥＣＵ装置の存在が検出される直前までに送信されるメッセージの数は、２（Ｎ＋１）＋１個（＝２Ｎ＋３個）である。
【０１６８】
図２５（Ｃ）において、ＥＣＵ装置３００は、メッセージａ１，メッセージａ２，・・・，メッセージａｎを順に送信する。次に、ＥＣＵ装置３００ａは、メッセージｂ１を送信する。すると、ＥＣＵ装置３００に接続されている計算装置１００は、メッセージｂ１の受信に応じて、ＭＡＣ検証要求Ｍ３１（図２５では検証要求と略記している）を送信する。
【０１６９】
検出装置２００は、検証要求Ｍ３１を受信すると、ＭＡＣ値の検証を行う。検出装置２００は、ＭＡＣ値の検証に成功すると、ＭＡＣ検証要求の送信要求Ｍ３２（図２５では送信要求と表記している）を送信する。計算装置１００ａは、送信要求Ｍ３２を受信すると、ＭＡＣ検証要求Ｍ３３を送信する。検出装置２００は、ＭＡＣ検証要求Ｍ３３に対して、ＭＡＣ値の検証を行い、メッセージｂ１までが正規のＥＣＵ装置によって送信されたものであると判断する。
【０１７０】
続いて、ＥＣＵ装置３００ｃ（不正なＥＣＵ装置）が、メッセージｄ１を送信する。メッセージｄ１は、計算装置１００，１００ａに到達する。計算装置１００，１００ａでは、該当ＩＤに対応するＭＡＣ値を初期化済である。このため、計算装置１００，１００ａは、メッセージｄ１を受信してもＭＡＣ検証要求を送信しない。
【０１７１】
その後、検出装置２００は、送信要求の定期送信のタイミングに達したことを検知し、送信要求Ｍ３４を送信する。送信要求Ｍ３４では、検証対象ＩＤとして、メッセージａｎ，ｂｎ，ｄｎのＩＤと同じＩＤが設定されている。送信要求Ｍ３４は、計算装置１００，１００ａに到達するが、計算装置１００，１００ａは、何れも検証対象ＩＤに対するＭＡＣ値を保持していないので、送信要求Ｍ３４に対してＭＡＣ検証要求を送信しない。その後、ＥＣＵ装置３００ａは、メッセージｂ２を送信する。
【０１７２】
このとき、検出装置２００は、送信要求Ｍ３４に対するＭＡＣ検証要求を受信しないまま、新規のメッセージｂ２を受信することになる。このため、検出装置２００は、このタイミングで、不正なＥＣＵ装置（ＥＣＵ装置３００ｃ）が存在することを発見できる。この場合、ＥＣＵ装置３００によるメッセージａ１の送信から、不正なＥＣＵ装置の存在が検出される直前までに送信されるメッセージの数は、Ｎ＋１＋３＋１＋１個（＝Ｎ＋６個）である。メッセージ認証の比較例（図２５（Ｂ））の方法でのメッセージ総数（２Ｎ＋３）個と、図２５（Ｃ）の方法でのメッセージ総数（Ｎ＋６）個とを比べると、後者の方が、Ｎが増えたときの、送信されるメッセージの増加を抑えることができる。特に、実際のケースでは、Ｎ＞３になるケースが多いため、図２５（Ｃ）の方法はメッセージ数を低減するために十分有効な方法である。こうして、第２の実施の形態の車載システムによれば、不正なＥＣＵ装置を効率的に検出可能となる。
【０１７３】
更に、図２５（Ｂ）の方法では、メッセージごとにＭＡＣメッセージを送信するため、メッセージａ１〜ａｎまでの送信に、図２５（Ａ）の方法に比べて２倍の時間がかかり、通信が遅延する。一方、図２５（Ｃ）の方法では、計算装置１００によりＭＡＣ値によるメッセージ検証が行われるべきタイミングに絞ってＭＡＣ検証要求が送信されるので、メッセージａ１〜ａｎまでを送信するまでの所要時間が、図２５（Ａ）の方法と同等の時間で済む。すなわち、第２の実施の形態の方法（図２５（Ｃ））では、メッセージ認証の比較例（図２５（Ｂ））の方法に比べて、一連のメッセージを送信するための所要時間を短縮できるという利点もある。
【０１７４】
なお、図２５では、メッセージｄ１の後に、ＭＡＣ検証要求の送信要求Ｍ３４が送信されるケースを例示した。検出装置２００は、それ以外のケースでも適切に不正なＥＣＵ装置を検出可能である。一例として、メッセージｄ１の後、ＭＡＣ検証要求の送信要求Ｍ３４が送信されずに、ＥＣＵ装置３００ａによりメッセージｂ２が送信され、次いでＥＣＵ装置３００ｃによりメッセージｄ２が送信される場合を考える。この場合、検出装置２００は、その後、計算装置１００ａによるＭＡＣ検証要求を受け付けることになり、当該ＭＡＣ検証要求に応じたＭＡＣ値によるメッセージ認証を行うことで、ＭＡＣ値の不一致を確認し、不正なＥＣＵ装置３００ｃの存在を適切に検出できる。
【０１７５】
また、一定数のメッセージ送信ごとにＭＡＣを付与する方法も考えられるが、この方法では、複数のＥＣＵ装置が同一のＩＤのメッセージを送信するシステムで利用することができない。一方、第２の実施の形態の監視方法によれば、同一ＩＤのメッセージを複数のＥＣＵ装置が送信する場合でも、不正メッセージおよび不正ＥＣＵ装置を検出可能である。
【０１７６】
また、メッセージ送信の周期性を利用し、通常とは異なる周期でメッセージを送信するＥＣＵ装置を検出することで、不正ＥＣＵ装置を検出する方法も考えられるが、この方法では、通常のメッセージが周期性をもたずに送信されるシステムで利用することができない。一方、第２の実施の形態の監視方法によれば、通常のメッセージが周期性をもたずに送信される場合でも不正ＥＣＵ装置を適切に検出できる。
【０１７７】
以上の第１，第２の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  計算装置が、前記計算装置に接続されている電子装置が送信した第１のメッセージの識別情報ごとに、前記第１のメッセージを基に生成されるコードを保持し、
前記計算装置が、前記第１のメッセージの識別情報と同じ識別情報を含む第２のメッセージをネットワークを介して受信すると、前記識別情報および前記コードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記コードを初期化する、
監視方法。
【０１７８】
（付記２）  検出装置が、前記ネットワークを介して受信したメッセージを基に生成される前記コードを当該メッセージの識別情報ごとに保持し、
前記検出装置が、前記検証要求を受信し、前記検証要求に含まれる第１のコードと、前記検証要求に含まれる識別情報に対して前記検出装置が保持している第２のコードとの比較に応じて、前記ネットワークに不正な電子装置が接続されていることを検出する、
付記１記載の監視方法。
【０１７９】
（付記３）  前記検出装置が、前記第１のコードと前記第２のコードとが一致しない場合に、前記ネットワークに不正な電子装置が接続されていると判定する、付記２記載の監視方法。
【０１８０】
（付記４）  前記検出装置が、前記第１のコードと前記第２のコードとが一致する場合に、検証対象のメッセージの識別情報を含み前記検証要求の送信を要求する送信要求を前記ネットワークに送信する、付記２または３記載の監視方法。
【０１８１】
（付記５）  前記検出装置が、メッセージを受信すると、当該メッセージの識別情報ごとに、今回受信したメッセージを受信バッファに保持し、前回受信したメッセージを基に前記コードを生成し、保持する、付記４記載の監視方法。
【０１８２】
（付記６）  前記検出装置が、前記送信要求を送信する際に、検証対象の識別情報に対して保持している前記コードを初期化し、前記受信バッファに格納されているメッセージを基に当該コードを生成し、保持する、付記５記載の監視方法。
【０１８３】
（付記７）  他の計算装置が、前記送信要求を受信し、前記送信要求に含まれる検証対象の識別情報と、当該識別情報に対して前記他の計算装置が保持する第３のコードとを含む前記検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記第３のコードを初期化する、付記４乃至６の何れか１つに記載の監視方法。
【０１８４】
（付記８）  前記検出装置が、前記送信要求の送信後、前記送信要求に応じた前記検証要求を受信する前に、前記検証対象の識別情報を含み前記検証要求とは異なるメッセージを受信した場合、前記ネットワークに不正な電子装置が接続されていると判定する、付記４乃至７の何れか１つに記載の監視方法。
【０１８５】
（付記９）  前記検出装置が、識別情報ごとに、所定の周期で、または、所定数のメッセージの受信後に、当該識別情報を検証対象として含む前記送信要求を前記ネットワークに送信する、付記４乃至８の何れか１つに記載の監視方法。
【０１８６】
（付記１０）  前記計算装置が、前記電子装置の認証を行い、認証不成功時には前記計算装置による前記コードを生成する機能を無効にし、認証成功時には前記コードを生成する機能を有効にする、付記１乃至９の何れか１つに記載の監視方法。
【０１８７】
（付記１１）  前記コードは、メッセージを基に生成されるハッシュ値である、付記１乃至１０の何れか１つに記載の監視方法。
（付記１２）  前記検証要求は、前記電子装置により送信される通常のメッセージよりも優先して送信されるメッセージである、付記１乃至１１の何れか１つに記載の監視方法。
【０１８８】
（付記１３）  前記ネットワークは、コントローラエリアネットワークである、付記１乃至１２の何れか１つに記載の監視方法。
（付記１４）  複数の電子装置と、
電子装置とネットワークとの間でメッセージを中継し、前記電子装置が送信した第１のメッセージの識別情報ごとに、前記第１のメッセージを基に生成されるコードを保持し、前記第１のメッセージの識別情報と同じ識別情報を含む第２のメッセージを前記ネットワークを介して受信すると、前記識別情報および前記コードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記コードを初期化する、計算装置と、
を有する監視システム。
【符号の説明】
【０１８９】
１  監視システム
５  ネットワーク
１０，１０ａ  計算装置
１１，２１，３１  記憶部
１２，２３，３２  演算部
２０  検出装置
２２  受信バッファ
３０，３０ａ，３０ｂ  電子装置
Ｍ１，Ｍ２  メッセージ
Ｍ３  検証要求
【図１】
0006730578.tif 000002
【図２】
0006730578.tif 000003
【図３】
0006730578.tif 000004
【図４】
0006730578.tif 000005
【図５】
0006730578.tif 000006
【図６】
0006730578.tif 000007
【図７】
0006730578.tif 000008
【図８】
0006730578.tif 000009
【図９】
0006730578.tif 000010
【図１０】
0006730578.tif 000011
【図１１】
0006730578.tif 000012
【図１２】
0006730578.tif 000013
【図１３】
0006730578.tif 000014
【図１４】
0006730578.tif 000015
【図１５】
0006730578.tif 000016
【図１６】
0006730578.tif 000017
【図１７】
0006730578.tif 000018
【図１８】
0006730578.tif 000019
【図１９】
0006730578.tif 000020
【図２０】
0006730578.tif 000021
【図２１】
0006730578.tif 000022
【図２２】
0006730578.tif 000023
【図２３】
0006730578.tif 000024
【図２４】
0006730578.tif 000025
【図２５】
0006730578.tif 000026