複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、各ノードが、他のノードによってメインメッセージが送信される度に、各ノードに記憶されているカウンタ値をインクリメントするステップと、送信ノードが、メインメッセージを送信するステップと、送信ノードが、前記メインメッセージの送信に際し、カウンタ値をインクリメントするステップと、送信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、受信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードと、前記MACメッセージに含まれるメッセージ認証コードとが一致するか否かによって、前記メインメッセージの正当性を検証するステップと、を含む、メッセージ認証方法。前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、請求項1に記載のメッセージ認証方法。複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、各ノードが、所定のメッセージIDを有するメッセージが他のノードによって送信される度に、各ノードに記憶されている当該メッセージIDに対応するカウンタ値をインクリメントするステップと、送信ノードが、メッセージIDとデータフィールドを含むメインメッセージを送信するステップと、送信ノードが、前記メインメッセージの送信に際し、前記メッセージIDに対応するカウンタ値をインクリメントするステップと、送信ノードが、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、受信ノードが、前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDに対応するカウンタ値とに基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するステップと、を含む、メッセージ認証方法。前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、請求項3に記載のメッセージ認証方法。前記メッセージ認証コードは、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成される、請求項4に記載のメッセージ認証方法。マスタノードが、通信システム起動時に、各メッセージIDに対応するカウンタ値の初期値をブロードキャストによって通知する、請求項3~5のいずれかに記載のメッセージ認証方法。前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、各ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムを作用させて生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、請求項6に記載のメッセージ認証方法。少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、送信ノードは、カウンタ値を記憶するカウンタ値記憶手段と、他のノードが送信したメインメッセージを受信する度、および自ノードがメインメッセージを送信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、メインメッセージを送信するメインメッセージ送信手段と、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、を有し、受信ノードは、カウンタ値を記憶するカウンタ値記憶手段と、メインメッセージを受信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、を有する、通信システム。前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、請求項8に記載の通信システム。少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、送信ノードは、メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、所定のメッセージIDを有するメインメッセージが他のノードによって送信される度、および自ノードが所定のメッセージIDを有するメインメッセージを送信する度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、メッセージIDとデータフィールドとを含むメインメッセージを送信するメインメッセージ送信手段と、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、を有し、受信ノードは、メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、所定のメッセージIDを有するメインメッセージが他のノードによって送信される度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDとに対応するカウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、を有する、通信システム。前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、請求項10に記載の通信システム。前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムによって生成されるビット列から、所定のビットを抽出してメッセージ認証コードを生成する、請求項11に記載の通信システム。通信システム起動時に、各メッセージIDに対応するカウンタ値の初期値をブロードキャストによって通知するマスタノードをさらに含む、請求項10~12のいずれかに記載の通信システム。前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、前記送信ノードおよび受信ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムによって生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、請求項13に記載の通信システム。しかしながら、非特許文献1に示す方法では、以下のような問題がある。第1に、N番目のメッセージの正当性を検証するためにN7番目までのメッセージを受信する必要があるので、メッセージの検証に時間を要するという問題がある。第2の問題点は、非特許文献1に示す方法は標準化されているCANのプロトコルを変更している点である。CRCフィールドは本来、データフィールド等のデータ内容の誤り検出のためのものである。CANコントローラの処理をハードウェアによって実現している現状を考慮すると、プロトコルの変更は現実的ではない。したがって、この第2の問題点はより深刻なものである。本発明は、CANプロトコルに適用可能な方式でメッセージの認証を可能とする技術を提供することを目的とする。本発明に係るメッセージ認証方法では、メインメッセージと、メインメッセージのメッセージ認証コードMessageAuthenticationCodeMACを含むMACメッセージを送信する。受信側では、メインメッセージから算出されるMACとMACメッセージに含まれるMACが一致すればメインメッセージが正当なものであり、不一致であれば不正なものであると判断できる。本発明においては、以下のようにしてMACを生成する点に特徴がある。通信システム内の各ノードは、メインメッセージがネットワーク上を伝送する度にインクリメントするカウンタ値を記憶する。メインメッセージを送信するノードは、その送信に際してカウンタ値をインクリメントする。送信ノード以外は、ネットワーク上をメインメッセージが伝送したことを検知するとカウンタ値をインクリメントする。なお、カウンタ値の初期値は0である必要はなく任意であって良いが、各ノードで共通とする必要がある。また、インクリメントは、必ずしもカウンタ値を1ずつ増分させるものでなくても良い。各ノードが共通のルールに従ってカウンタ値を変化させる方式、すなわち全てのノードでカウンタ値が共通となる方式であれば、メインメッセージ送信の度に任意の方式に従ってカウンタ値を変化させる方式であっても構わない。メインメッセージの送信ノードは、このカウンタ値を利用してMACメッセージに含めるMACを生成する。より具体的には、メインメッセージとカウンタ値に所定のアルゴリズムを適用してMACを生成する。この所定のアルゴリズムは、例えば共通鍵暗号による暗号アルゴリズムであったり、暗号鍵の事前共有を必要とする鍵付きハッシュ関数などであったりすることができる。なお、MACを生成する際にメインメッセージの全データビットを利用する必要はなく、その一部のみとカウンタ値からMACを生成しても良い。メインメッセージの受信ノードも同様に、受信したメインメッセージとカウンタ値に所定の暗号アルゴリズムを適用してMACを生成する。このような本発明によると、CANプロトコルに適用可能な方式で、MACによってメインメッセージの正当性を検証することができる。たとえば、不正機器が以前に受信したメインメッセージと対応するMACメッセージを送信した場合であっても、再送時にはカウンタ値が変化しているため正しいMACも変化している。したがって、不正機器がリプレイ攻撃を行っても、受信ノードにおいてメインメッセージが不正であることを検知できる。また、本発明では、メインメッセージは平文の状態でネットワーク上を伝送するため不正機器がメインメッセージを知ることができるが、カウンタ値はネットワーク上を伝送せず不正機器には未知である。したがって、メインメッセージおよびMACメッセージを盗聴しても、そこからMACを生成するための暗号アルゴリズムや暗号鍵を推測できないという利点もある。本発明において、メインメッセージは、メッセージIDとデータフィールドを含むものであることができる。この場合、メインメッセージのカウンタ値は、メッセージIDごとに個別にカウントすることが好ましい。そして、MACの生成は、メインメッセージに含まれるメッセージIDおよびデータフィールドと、このメッセージIDに対応するカウンタ値とに基づいて生成することが好ましい。なお、このような場合であってもデータフィールドとカウンタ値のみからMACを生成しても構わない。また、本発明において、MACは、メッセージID、データフィールドおよびメッセージIDに対応するカウンタに共通鍵暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成することが好ましい。この方式は、共通鍵暗号アルゴリズムから得られるビット列が、MACメッセージに格納可能なビット数を超える場合に有効である。なお、ビットの抽出方法は、各ノードで共通していれば任意の方法であって良い。例えば、共通鍵暗号アルゴリズムから得られるビット列から、前半部分のビット列を抽出したり、後半部分のビット列を抽出したり、奇数番目のビット列を抽出したり、偶数番目のビット列を抽出したりすることができる。また、本発明において、カウンタ値の初期化はマスタノードからの通知によって行うことが好ましい。すなわち、ネットワーク上の1つのノードがマスタノードとなって、各メッセージIDに対応するカウンタ値の初期値を、通信システム起動時にブロードキャストによって通知することが好ましい。このようにすれば、各ノードが不揮発性のメモリを有していなくても、全てのノードでカウンタ値を同一とすることができる。カウンタ値の初期化は、より具体的には、以下のようにして行うことが好ましい。すなわち、マスタノードは、メッセージIDごとに乱数値を生成して、ブロードキャスト送信する。各ノードは、ブロードキャスト送信された乱数値を取得して、この乱数値に対して共通鍵暗号アルゴリズムを作用させる。そして、得られた値をカウンタ値の初期値として採用する。このようにすれば、カウンタ値の初期値が、ネットワーク上を直接流れることがないため、不正機器はどのような値でカウンタ値が初期化されたか知ることができない。初期値がわかれば、任意の時点におけるカウンタ値を知ることが可能となり、メインメッセージとMACメッセージから暗号鍵を解読することも可能となり得るが、カウンタの初期値を秘匿化することでこのような危険性も回避できる。なお、本発明は、上記処理の少なくとも一部を含むメッセージ認証方法として捉えることができる。また、本発明は、この方法を実行するコンピュータプログラムとして捉えることもできる。また、本発明は、上記処理の少なくとも一部を実行する通信システムおよび、通信システムを構成する通信装置として捉えることができる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。本発明によれば、CANプロトコルに適用可能な方式でメッセージの認証が可能となる。本実施形態の説明の前にCANControllerAreaNetworkプロトコルの概要について説明する。CANは相互接続された機器間のデータ伝送に用いられる通信プロトコルであり、例えば自動車内の各種ECUElectronicControlUnit間の通信などに用いられる。図1は、CANに用いられるデータフレームのフォーマットを示した図である。データフレームは、CANID101、データフィールド102、CRCフィールド103などを含む。図示した以外のフィールドについての説明は割愛する。CANではCANIDを用いてメッセージのアドレッシングが行われる。すなわち、CANIDによって、このメッセージがどのようなデータであるのかを示し、受信側はCANIDを参照して自ノードが処理する必要のあるデータか否かを判断する。データフィールドは最大で64ビットのフィールドであり、この中にデータの内容が格納される。CRCフィールドは、データフィールドなどから計算されるCRCコードが格納され、通信に伴うビット落ちを検出可能とする。以上のように、CANにおいては、メッセージに送信元や宛先を示すIDは付与されず、CANIDによってデータの内容や受信ノードが指示される。本実施形態では、CANネットワークに本発明を適用して、メッセージの正当性検証を行う。以下、図面を参照しながら本実施形態について説明する。概要図2は、本発明の概要を示す図である。ネットワークに接続されたECU間でデータを通信する場合には次のようにして行う。すなわち、通信すべきデータを含むメッセージ以下、メインメッセージを送信した後に、メインメッセージのデータフィールドに対するMACメッセージ認証コードを含むメッセージ以下、MACメッセージを送信する。MACによるメッセージ認証自体は既知な仕組みであり、本実施形態においても、受信したメインメッセージのデータフィールドから得られるMACと受信したMACメッセージに含まれるMACが一致するか否かによって、受信側においてメインメッセージの正当性を検証する。本実施形態においては、図3Aに示すように、それぞれのECUにおいて各CANIDのメッセージが送信された回数をカウントして記憶する。そして、図3Bに示すように、メインメッセージのデータフィールドと、CANIDと、このCANIDに対応するカウンタ値とを使ってMACを求める点に特徴がある。MACの算出は、ハッシュ関数を使う方式HMACや、ブロック暗号アルゴリズムを使う方式CMACなどの任意の既知の手法によって行えば良い。本実施形態では、共通鍵ブロック暗号の一つであるAES暗号アルゴリズムによってMACを求める。AESでは出力が少なくとも128ビットになるが、MACが格納されるデータフィールドは64ビットなので、128ビットの出力から所定の64ビットを抽出してMACとして利用する。なお共通鍵暗号アルゴリズムの中には64ビットを出力可能なものも存在し、そのような共通鍵暗号アルゴリズムを採用する際には上記の抽出作業は不要である。本実施形態においては、各ECUがそれぞれCANIDごとにメッセージ送信回数をカウントしているため、各CANIDのカウンタ値は全ECUにおいて共通となる。したがって、受信側ECUにおいても、メインメッセージに含まれるデータフィールドとCANID、および自ノードが記憶しているカウンタ値からMACを求めることができる。そして、このようにして求めたMACとMACメッセージに含まれるMACが一致するか否かによって、メインメッセージの正当性を検証可能である。本実施形態の効果を簡単に説明すると、第1にCANプロトコルを変更していないので、既存システムとの互換性があることを挙げられる。例えば、高速処理および低価格化を目的としてハードウェア化されているCANコントローラを利用することができる。第2に、メッセージ送信の度にカウンタ値が更新されるので、不正機器が以前に受信したメッセージをそのまま送信しても、受信側において不正なメッセージであることが検証可能である。第3に、カウンタ値がネットワーク上を流れないため、メインメッセージとMACメッセージを受信して暗号鍵を解読する試みも事実上不可能である。第4に、メインメッセージ送信直後に対応するMACメッセージを送信できるので、即座にメインメッセージの正当性検証が可能である。構成以下では、より詳細に本実施形態について説明する。図4は、本実施形態におけるECUが有する機能部を示す図である。ECUは、CPU、RAM、ROM、センサやアクチュエータとのインタフェースなどから構成されており、ROMに格納されたプログラムをCPUが実行することで、図4に示す各機能部が実現される。図4に示した機能部は、メッセージ送信およびメッセージ受信に必要な機能全てが示されており、処理内容に応じて適切な機能部が選択的に実行される。なお、本実施形態において、全てのメッセージについてMACによるメッセージ認証を行う必要はない。すなわち、重要なメッセージについてのみメッセージ認証を行っても良い。そして、メッセージ認証が必要ないメッセージのみを送受信するECUについては、図4に示したようなメッセージ認証のための各機能部は不要である。図4に示した各機能部の詳細については、メッセージ送受信処理とともに説明を行うが、いくつかの機能部については、ここで説明を加える。暗号鍵記憶部5には、CANネットワーク内で共通な暗号鍵共通鍵が記憶される。この暗号鍵は、外部に漏洩しないことが必要である。本実施形態では、AES暗号アルゴリズムを採用し鍵長は128ビットとする。もちろん、鍵長はより長くても良いし、AES以外の暗号アルゴリズムを採用しても構わない。カウンタ記憶部3には、CANIDごとにネットワーク上をメッセージが伝送された回数を表すカウンタ値が格納される。CANはバス型アーキテクチャであるため、ネットワーク上を伝送されるメッセージを全てのECUが参照可能であり、各ECUにおいてカウンタの更新が可能である。なお、それぞれのECUは、自身が送受信する可能性があるCANIDについてのみカウンタを更新記憶すれば十分である。なお、本実施形態においてカウンタは53ビットとする。これは、暗号アルゴリズムへの入力が128ビット必要なので、データフィールド64ビットとCANID11ビットと合わせて128ビットとするためである。ただし、暗号アルゴリズムへの入力はパディングを行えば良いので、カウンタのビット数はこれより少なくても問題ない。例えば、CANの仕様にしたがって20年間継続的に最大限の速度でメッセージを送信したとしても、240個程度のメッセージしか送信できないので、カウンタ値は40ビット程度としても良い。もちろんカウンタ値の繰り返しを許容しても良く、その場合はより少ないビット数であっても構わない。メッセージ送信時処理まず、メインメッセージを送信するECUが行う処理を、図5および図6を参照しつつ説明する。図5は、送信ECUにおける各機能部の連携を示す図である。図6は、メインメッセージ送信時の処理の流れを示すフローチャートである。メインメッセージ生成部9は、CANIDおよびデータフィールドを含むメインメッセージを生成してCANに送信する。図6のフローチャートには、メインメッセージを送信した後の処理の流れが示されている。メインメッセージを送信すると、CANID抽出部6がメインメッセージ生成部9から送信したメインメッセージのCANIDを抽出するS101。CANID抽出部6は、メインメッセージのCANIDに対応するカウンタ値をカウンタ記憶部3から読み取りS102、カウンタを1つ増加させてカウンタ記憶部3を更新するS103。抽出されたCANIDおよび更新後のカウンタ値は、MAC生成部4に送られる。また、データフィールド抽出部7は、メインメッセージ生成部9が送信したメインメッセージのデータフィールドを抽出するS104。抽出されたデータフィールドは、MAC生成部4に送られる。MAC生成部4は、暗号鍵記憶部5から暗号鍵共通鍵を取り出しS105、この暗号鍵を用いて、CANID、最新のカウンタ値、送信済みのデータフィールドからMACを生成するS106。なお、上述したように本実施形態ではAESを採用しているため暗号アルゴリズムの出力は128ビットであるが、CANのデータフレームが送れるデータフィールドは64ビットである。したがって、システム内で共通するルールに従って出力の128ビットから64ビットを抽出する。例えば、前半64ビットや後半64ビットを採用しても良いし、奇数ビットや偶数ビットを採用しても良い。さらには、CANIDが奇数か偶数かによって、前半64ビットを採用するか後半64ビットを採用するか、あるいは奇数ビットを採用するか偶数ビットを採用するかなどを決めても構わない。MAC生成部4が生成したMACはMACメッセージ生成部1へ送られS107、MACメッセージ生成部1がMACをCANメッセージMACメッセージに加工してCANに送信する。すなわち、計算された64ビットのMACがMACメッセージのデータフィールドに格納される。また、MACメッセージのCANIDは、メインメッセージのCANIDに対応するIDが用いられる。メインメッセージとMACメッセージのCANIDの対応によって、受信側ECUでは、MACメッセージを受信した場合に対応するCANIDを有するメインメッセージに対するMACであることが把握できる。メッセージ受信時処理次に、メインメッセージを受信してその検証を行うECUの処理を、図7および図8を参照しつつ説明する。図7は、受信ECUにおける各機能部の連携を示す図である。図8は、メインメッセージ受信時の処理の流れを示すフローチャートである。ECUがメインメッセージを受信すると、CANID抽出部6がCANメッセージ解析部8を経由して、受信したメインメッセージのCANIDを抽出するS201。なお、CANIDごとにメッセージの内容が規定されているため、CANIDを参照することでそのメッセージがMACによる認証を必要とするものか否かも判断できる。受信したメインメッセージがMACによる認証を必要としないものであれば、以下の処理は行う必要がない。また、受信したメッセージが自ノードで処理する必要がないものである場合も、以下の処理を行う必要がない。受信したメインメッセージは自ノードが処理する必要があるものであり、かつMACによるメッセージ認証が行われるものであると、抽出したCANIDから判断される場合には以下の処理が行われる。CANID抽出部6は、抽出したCANIDに対応するカウンタ値をカウンタ記憶部3から読み取りS202、カウンタを1つ増加させてカウンタ記憶部3を更新するS203。抽出されたCANIDおよび更新後のカウンタ値は、MAC生成部4に送られる。また、データフィールド抽出部7は、CANメッセージ解析部8を経由して、受信したメインメッセージのデータフィールドを抽出するS204。抽出されたデータフィールドは、MAC生成部4に送られる。MAC生成部4は、暗号鍵記憶部5から暗号鍵共通鍵を取り出しS205、この暗号鍵を用いて、受信したメッセージのデータフィールド、CANIDおよびCANIDに対応する最新のカウンタ値からMACを生成するS206。MACの生成方法は、メッセージ送信の際の方法と同じであるため詳細な説明は省略する。MAC生成部4が生成したMACは、MAC比較部2へと送られるS207。受信側ECUは、メインメッセージに対応するMACメッセージをCANメッセージ解析部8が受信するのを待つS208~S209。上述のように、メインメッセージとそのMACメッセージとはCANIDが対応付けられているので、CANメッセージ解析部8は、メインメッセージのCANIDに対応するCANIDを有するメッセージが到着するのを待つ。メインメッセージに対応するMACメッセージが到着するとS209-YES、データフィールド抽出部7が、CANメッセージ解析部8を経由して、MACメッセージからMACを抽出するS211。上述したように、MACはMACメッセージのデータフィールド64ビットに格納されている。データフィールド抽出部7が抽出したMACは、MAC比較部2へと送られるS212。MAC比較部2は、MAC生成部4が生成したMACと、受信したMACメッセージから抽出されたMACとを比較するS213。これら2つのMACが同じであればS214-YES、メインメッセージが正当なものであることが分かるので、受信ECUはメインメッセージを処理するS216。一方、これら2つのMACが異なるものであればS214-NO、メインメッセージが不正なものであることが分かるので、受信ECUはメインメッセージを処理しないS215。なお、不正なメインメッセージを受信した後の処理は種々考えられるが、どのような対応を行っても構わない。カウンタ初期化処理次に、CANIDごとのカウンタ値の初期化について説明する。カウンタ値はシステム内の全ECUで共通することが必要である。システム起動中はネットワークを伝送されるメッセージをカウントすることで全ECUにてカウンタを同一とすることができるが、システム起動時においてもカウンタ値を一致させる必要がある。このために、全ECUに読み書き可能な不揮発性メモリを設け、電源オフ時のカウンタ値を記憶し、システム再開時にこの不揮発性メモリからカウンタ値を読み込んで使用することが考えられる。しかしながら、本実施形態では、全ECUに不揮発性メモリを設けずにシステム開始時のカウンタ値を、以下のようにして一致させる。本実施形態においては、カウンタの初期化処理のために、ネットワーク内の任意のECUをカウンタ初期化用のECU以下、マスタノードともいうとして利用する。マスタノードは、システム開始時に全てのCANIDメッセージ認証が必要なメッセージに対応するCANIDという意味。以下同じ。についてカウンタ値の初期値を全ECUに通知する処理を行う。図9は、マスタノードからカウンタ値の初期化メッセージを受信した際の、一般ノードの各機能部の連携を示した図である。図10aは、カウンタ値の初期化メッセージを送信するマスタノードの処理の流れを示すフローチャートである。図10bは、初期化メッセージを受信した一般ノードの処理の流れを示すフローチャートである。まず、マスタノードが行う処理について図10aを参照して説明する。マスタノードは、システムが起動すると、CANIDを選択してS301、そのCANIDのカウンタ初期値を決定するための乱数を発生させるS302。そして、カウンタを初期化するCANIDと関連づけて、カウンタ初期化メッセージとしてこの乱数を送信するS303。マスタノードでは、全てのCANIDについて、このようなカウンタ初期化メッセージを送信する。次に、一般ノードが行う処理を図9および図10bを参照して説明する。一般ノードは、カウンタ初期化メッセージを受信した場合にS311、そのメッセージが自ノードで送受信するすなわち、カウンタ値を記憶する必要があるCANIDに対するカウンタ初期化メッセージであれば以下の処理を行う。データフィールド抽出部7が、カウンタ初期化メッセージのデータフィールドから、マスタノードが生成した乱数値を取得するS312。そして、この乱数値はMAC生成部4に送られる。そして、MAC生成部4に含まれる暗号アルゴリズムを使用して、受信した乱数値を暗号鍵記憶部5内の暗号鍵共通鍵を用いて暗号化するS313。そして、得られた数値をこのCANID用のカウンタの初期値として、カウンタ記憶部3に記憶するS314。なお、暗号化処理の出力のビット数128ビットとカウンタのビット数53ビットは一致していないので、例えば前半53ビットを採用したり後半53ビットを採用したりするなど、システム内で共通のルールに従ってカウンタの初期値を決定する。このようにすることで、カウンタを記憶するための不揮発性メモリを設ける必要なく、またカウンタ値自体を平文でネットワーク上を伝送させることなく、システム起動時に全ECUにおいてカウンタ値を共通なものとすることができる。本実施形態の作用効果本実施形態によれば、メッセージ認証コードMACを用いてメインメッセージの検証を行うことで、メインメッセージが正規なものであるか、不正機器から送信された不正なものであるかを判断することができる。メッセージ送信の度に、MAC算出に用いられるカウンタ値が変化するので、以前に受信したメッセージを再送するリプレイ攻撃を行った場合には、受信側ECUでMACの相違により不正攻撃を検知することができる。また、本実施形態によるMACによるメッセージ検証処理は、標準化されているCANのプロトコルにしたがった設計となっているため、既存システムへの影響を小さくすることができる。たとえば、CANメッセージを処理するCANコントローラは、高速処理および低価格化を目的としてハードウェア化されているが、本実施形態ではこのような既存のCANコントローラを用いて実装できる。また、本実施形態においては、MACを算出するためにメインメッセージのデータフィールドとCANIDとカウンタ値を利用している。ここで、データフィールドおよびCANIDは平文でネットワーク上を流れるが、カウンタ値自体はネットワーク上を流れない。暗号化前のテキストと暗号化後のテキストが全て分かれば、多くのメッセージを受信することで暗号鍵を解読することが可能となるが、本実施形態では不正機器はカウンタ値を得られないため暗号鍵の解読も不可能となる。また、メインメッセージを送信した後、即座に対応するMACメッセージを送信できる設計となっているため、受信ECU側ではメインメッセージの正当性を即座に判断することができる。変形例本発明は、以上の実施形態に限定されることなく、種々の変形が可能であることは明らかであろう。例えば、採用する暗号アルゴリズムや鍵長などは任意のものであって良いし、カウンタ値のビット長なども安全性に対する要求とコストに対する要求を勘案して任意の長さにすることができる。また、上記ではCANに対して本発明を適用した実施例を説明したが、CAN以外であってもCANと類似するプロトコルにしたがった通信システムであれば本発明を適用できる。また、上記の実施形態においてはメインメッセージに含まれるCANIDとデータフィールドと、CANIDに対応するカウンタ値からMACを生成しているが、メインメッセージのデータフィールドとカウンタ値のみからMACを生成するようにしても良い。このようにしても、メインメッセージがリプレイ攻撃などによって送信されたものであるか、正当なものであるかの判断は可能である。また、上記の説明においては、メインメッセージ受信時および送信時にカウンタ値をインクリメントし、インクリメント後のカウンタ値を使ってMACを算出しているが、インクリメント前のカウンタ値を用いてMACを算出しても構わない。また、カウンタ値のインクリメントは1ずつの増分であるとして説明したが、全ECUで共通のルールが採用されれば必ずしも1ずつ増分する必要はなく、それ以外の値ずつ増分させても構わない。また、上記の実施形態においてはMACによってメインメッセージが正当であることを検証してからメインメッセージの処理を行っているが、処理のリアルタイム性が要求されるメッセージについては、まずメインメッセージの処理を行ってからその正当性を検証しても構わない。この場合、メッセージが不正なものであると判定された場合には、それ以降は該当するCANIDを有するメッセージを無視したりすればよい。