(57)【要約】【課題】通信の安全性が確保された通信装置を提供する。【解決手段】送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算するハッシュ値処理部２１１と、送信対象データと、今回ハッシュ値と、送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成するデータフレーム生成部２１３と、データフレームを送信する通信モジュール２３とを備えて送信装置２を構成する。【選択図】図１
2019029921.tif 000002
【特許請求の範囲】
【請求項１】
送信装置であって、
送信対象データと、暗号化鍵と、ハッシュ関数とを用いて前記送信対象データに対する今回ハッシュ値を計算するハッシュ値処理部と、
前記送信対象データと、前記今回ハッシュ値と、前記送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成するデータフレーム生成部と、
前記データフレームを送信する通信モジュールと
を備えることを特徴とする送信装置。
【請求項２】
請求項１に記載の送信装置であって、
前記送信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値とに基づいて誤り検出符号を計算する誤り検出符号計算部を更に備え、
前記データフレーム生成部は、前記送信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値と、前記誤り検出符号とを含むデータフレームを生成する
ことを特徴とする送信装置。
【請求項３】
請求項１又は２に記載の送信装置であって、
前記送信対象データは、現在の時刻を示す時刻データを含む
ことを特徴とする送信装置。
【請求項４】
請求項１〜３の何れか一項に記載の送信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の半分である
ことを特徴とする送信装置。
【請求項５】
請求項１〜３の何れか一項に記載の送信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の２倍以上である
ことを特徴とする送信装置。
【請求項６】
受信装置であって、
データフレームを受信する通信モジュールと、
前記第１のハッシュ値と前記第２のハッシュ値とが一致する場合に、前記受信対象データに基づく処理を実行するデータフレーム処理部と
を備えることを特徴とする受信装置。
【請求項７】
請求項６に記載の受信装置であって、
受信した前記データフレームが含む前記受信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値とに基づいて誤り検出符号を計算する誤り検出符号計算部を更に備え、
前記誤り検出符号計算部が計算した前記誤り検出符号と、受信した前記データフレームから抽出した誤り検出符号とが一致しない場合、前記データフレーム処理部は、受信した前記データフレームを破棄する
ことを特徴とする受信装置。
【請求項８】
請求項６又は７に記載の受信装置であって、
受信した前記データフレーム以外の処理待ちデータフレームが存在する場合に、受信した前記データフレームが含む前記前回ハッシュ値と前記処理待ちデータフレームが含む前記今回ハッシュ値とに従って、受信した前記データフレーム及び前記処理待ちデータフレームをデータフレームの送信順にソートする誤り検出部を更に備え、
前記ハッシュ値処理部は、最後に処理されたデータフレームが含む前記今回ハッシュ値と、前記データフレームの送信順でソートされた先頭のデータフレームが含む前記前回ハッシュ値とが一致する場合に、前記ハッシュ関数と、前記先頭のデータフレームが含むデータとを用いて第１のハッシュ値を計算し、前記送信装置が事前に指定する前記公開鍵と、前記ハッシュ関数と、前記データフレームが含む前記今回ハッシュ値とを用いて第２のハッシュ値を計算し、
前記データフレーム処理部は、前記第１のハッシュ値と前記第２のハッシュ値とが一致する場合に、前記先頭のデータフレームが含む前記データに基づく処理を実行する
ことを特徴とする受信装置。
【請求項９】
請求項６〜８の何れか一項に記載の受信装置であって、
前記受信対象データは、現在の時刻を示す時刻データを含む
ことを特徴とする受信装置。
【請求項１０】
請求項６〜９の何れか一項に記載の受信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の半分である
ことを特徴とする受信装置。
【請求項１１】
請求項６〜９の何れか一項に記載の受信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の２倍以上である
ことを特徴とする受信装置。
【請求項１２】
請求項６〜１１の何れか一項に記載の受信装置であって、
前記受信装置が、受信した前記データフレームを送信した送信装置と、受信した前記データフレームの宛先である他の受信装置との間の通信履歴を記録する通信履歴記録装置である場合、前記データフレーム処理部は、受信した前記データフレームが含む前記今回ハッシュ値をハッシュ値保存リストに保存し、前記受信対象データに基づく処理を実行せずに新たなデータフレームの受信を待機する
ことを特徴とする受信装置。
【請求項１３】
送信装置及び受信装置が実行する通信方法であって、
送信対象データと、暗号化鍵と、ハッシュ関数とを用いて前記送信対象データに対する今回ハッシュ値を計算し、
前記送信対象データと、前記今回ハッシュ値と、前記送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成し、
生成した前記データフレームを送信し、
前記データフレームを受信し、
受信した前記データフレームに先立ち前回処理したデータフレームが含む前記今回ハッシュ値であって、前回処理した前記データフレームが含むデータに対して計算された前記今回ハッシュ値と、受信した前記データフレームが含む前回ハッシュ値であって、受信した前記データフレームが含む受信対象データに先立ち前回送信されたデータに対して計算された前記前回ハッシュ値とが一致する場合に、ハッシュ関数と、前記受信対象データとを用いて第１のハッシュ値を計算し、前記送信装置が事前に指定する公開鍵と、前記ハッシュ関数と、前記データフレームが含む前記今回ハッシュ値とを用いて第２のハッシュ値を計算し、
計算した前記第１のハッシュ値と前記第２のハッシュ値とが一致する場合に、前記受信対象データに基づく処理を実行する
ことを含むことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信装置、受信装置、及び通信方法に関する。
【背景技術】
【０００２】
車両に搭載される通信システムは、例えば、ＡＵＴＯＳＡＲ（Automotive Open System Architecture）の仕様書に記載されたＥ２Ｅ（End to End）プロトコルに準拠し得る。該Ｅ２Ｅプロトコルでは、送信装置は、送信対象のデータと共に、ＣＲＣ（Cyclic Redundancy Check）符号といった誤り検出符号とカウンタ値とをデータフレームに含めて送信する。一方、受信装置は、データフレームに含まれる誤り検出符号とカウンタ値とに基づいて、受信したデータの正しさ（整合性）や受信順序を確認する。
【０００３】
また、特許文献１に記載の通信システムでは、第１の通信ノードは、第２の通信ノードへ送信するデータと、該データの送信順序を表すカウンタ値とに基づいて、該カウンタ値をシードとして、第１の誤り検出符号を計算する。そして、第１の通信ノードは、第１の誤り検出符号とデータとを含むデータフレームを第２の通信ノードへ送信する。一方、第２の通信ノードは、第１の通信ノードからのデータフレームを受信し、受信されたデータフレームに含まれるデータと、該データの受信順序を表すカウンタ値とに基づいて、該カウンタ値をシードとして、第２の誤り検出符号を計算する。そして、第２の通信ノードは、第２の誤り検出符号と、データフレームに含まれる第１の誤り検出符号とが一致するかを判定し、判定結果に基づいて、データフレームに含まれるデータに応じた処理を行う。
【０００４】
なお、関連する技術として、上述した特許文献１の他に、特許文献２〜５に記載の技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２０７６００号公報
【特許文献２】特開２０１３−２１９７１０号公報
【特許文献３】特開２０１４−０５６３８１号公報
【特許文献４】特開２０１６−０２１６２３号公報
【特許文献５】特表２０１５−５１１９０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、カウンタ値を用いた上述の通信システムでは、カウンタ値は、データフレームが送信される度に、初期値（例えば、１）から所定数（例えば、１）だけ増加又は減少する。このため、例えば、初回のデータフレームを送信する場合や、カウンタ値を取得できない異常によりカウンタ値の初期値が用いられる場合、シードであるカウンタ値を特定することが容易である。この結果、カウンタ値を用いた上述の通信システムでは、例えば、データフレームを傍受してデータフレームを解析し、シードであるカウンタ値を特定した後データを改ざんし、通信を乗っ取ることも容易になる。加えて、例えば、特許文献１に記載の通信システムでは、カウンタ値を生成するための物理的なカウンタが通信ノードに備えられるため、通信ノードのサイズが大きくなり、車両の所定スペースに通信ノードを収納できなくなる虞がある。
【０００７】
本発明の一側面に係る目的は、通信の安全性が確保された通信装置を提供することである。
【課題を解決するための手段】
【０００８】
本発明に係る一つの形態である送信装置は、ハッシュ値処理部、データフレーム生成部、及び通信モジュールを備える。ハッシュ値処理部は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。データフレーム生成部は、送信対象データと、今回ハッシュ値と、送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成する。通信モジュールは、データフレームを送信する。
【発明の効果】
【０００９】
一実施形態に従った送信装置によれば、通信の安全性が確保された通信装置を提供できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態に従った通信装置を含む通信システムの構成例を示す図である。
【図２】第１の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。
【図３】第１の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【図４Ａ】第１の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図４Ｂ】第１の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図５】第１の実施形態に従ったハッシュ値保存リストの一例を示す図である。
【図６Ａ】第２の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図６Ｂ】第２の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図７】第３の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【図８】第４の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【図９】第４の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。
【図１０Ａ】第４の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図１０Ｂ】第４の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【図１１】第５の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【図１２】第６の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【発明を実施するための形態】
【００１１】
以下図面に基づいて実施形態について詳細を説明する。
＜第１の実施形態＞
図１は、第１の実施形態に従った通信装置を含む通信システムの構成例を示す図である。図１に示す構成例では、通信システム１は、複数の通信装置２−１〜２−Ｎ（Ｎは２以上の整数）を含み、複数の通信装置２−１〜２−Ｎは、通信線３を介して相互に接続する。以下の説明において複数の通信装置２−１〜２−Ｎを特に区別しない場合には、通信装置２と記載する場合がある。通信システム１は、ＣＡＮ（Controller Area Network）の仕様に準拠した通信システムであってもよい。
【００１２】
通信装置２は、通信システム１の通信ノードである。通信装置２は、例えば、車両の所定置に搭載される電子制御ユニット（ＥＣＵ：Electronic Control Unit）等である。以下では、通信装置２は、送信対象データを含むデータフレームを生成して送信する送信機能と、受信対象データを含むデータフレームを受信して処理する受信機能とを備える装置として説明する。しかしながら、通信システム１を構成する複数の通信装置２の内の１つ以上の通信装置２は、受信機能を備えない送信装置であってもよいし、送信機能を備えない受信装置であってもよい。したがって、通信装置２は、実施形態に従った送信装置及び受信装置の一例である。
【００１３】
通信装置２は、制御部２１、記憶部２２、及び通信モジュール２３を含む。制御部２１、記憶部２２、及び通信モジュール２３は、バス２４を介して相互に接続する。なお、図１には、通信装置２−１に対してのみ構成要素が便宜的に示されている。しかしながら、その他の通信装置２は、通信装置２−１と同じ構成要素を含んでもよい。また、その他の通信装置２は、通信装置２−１の構成要素の内、送信機能を有する構成要素のみを送信装置として含んでもよいし、受信機能を有する構成要素のみを受信装置として含んでもよい。
【００１４】
制御部２１は、例えば、ＣＰＵ（Central Processing Unit）、マルチコアＣＰＵ、又はプログラマブルなデバイス（ＦＰＧＡ（Field Programmable Gate Array）やＰＬＤ（Programmable Logic Device）等）により構成される。制御部２１は、通信装置２全体の動作を司る。例えば、制御部２１は、他の通信装置２へ送信する送信対象データを含むデータフレームを生成する。また、例えば、制御部２１は、他の通信装置２から受信したデータフレームに対して所定の処理を実行する。制御部２１は、ハッシュ値処理部２１１、誤り検出符号計算部２１２、データフレーム生成部２１３、誤り検出部２１４、及びデータフレーム処理部２１５を備える。これらの構成要素２１１〜２１５は、相互に連携して所望の処理を実行する。制御部２１が備える各構成要素の具体的な動作は後述する。
【００１５】
記憶部２２は、例えば、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）により構成される。記憶部２２は、制御部２１の処理動作を規定するプログラムや、通信装置２が事前に指定する公開鍵やハッシュ関数、制御部２１が処理するデータを記憶する。公開鍵は、通信装置２が送信したデータフレームを示すCAN Identifier Base ID や CAN Identifier 拡張IDであってもよい。さらに、公開鍵は、通信装置２が送信したデータフレームのデータとして受信装置が受信可能な、任意の数値であってもよい。
【００１６】
通信モジュール２３は、例えば、変調器や復調器等により構成される。例えば、通信モジュール２３は、制御部２１が生成したデータフレームを所定の通信方式に従って変調し、データフレームの宛先である通信装置２へデータフレームを送信する。また、例えば、通信モジュール２３は、他の通信装置２から受信したデータフレームを所定の通信方式に従って復調し、該データフレームを制御部２１へ出力する。
【００１７】
通信装置２が実行する送信処理及び受信処理の例示的なフローを以下に説明する。
＜＜送信処理＞＞
図２は、第１の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。通信装置２は、図２に示すような一連の送信処理を、送信対象データが発生する毎に実行し得る。
【００１８】
ステップＳ１０１において、他の通信装置２へ送信する送信対象データが制御部２１において発生すると、ハッシュ値処理部２１１は、ステップＳ１０２の処理を実行する。ステップＳ１０２において、ハッシュ値処理部２１１は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。今回ハッシュ値とは、データフレームに含まれるデータ、すなわち、送信対象データ（或いは受信対象データ）に対して計算されたハッシュ値を指す。また、暗号化鍵は、ハッシュ値を暗号化するために用いられる鍵である。
【００１９】
ステップＳ１０３において、ハッシュ値処理部２１１は、ステップＳ１０２で計算した今回ハッシュ値と前回ハッシュ値とが一致するか否かを判定する。前回ハッシュ値とは、送信対象データ（或いは受信対象データ）に先立ち前回送信されたデータに対してハッシュ値処理部２１１が計算したハッシュ値を指す。前回送信されたデータに対するハッシュ値は、該データに対する一連の送信処理中のステップＳ１０２においてハッシュ値処理部２１１が今回ハッシュ値として計算している。そして、前回送信されたデータに対する今回ハッシュ値は、該データに後続して次回送信されるデータに対する前回ハッシュ値としてハッシュ値処理部２１１が記憶部２２に記憶している。
【００２０】
今回ハッシュ値と前回ハッシュ値とが一致すると判定する場合（ステップＳ１０３で“ＹＥＳ”）、送信対象データと、該対象データに先立ち前回送信されたデータとは同一であるため、送信対象データを再度送信する必要がない。そこで、ステップＳ１０４において、ハッシュ値処理部２１１は、送信対象データを破棄し、当該送信対象データに対する一連の送信処理は終了する。
【００２１】
一方、今回ハッシュ値と前回ハッシュ値とが一致しないと判定する場合（ステップＳ１０３で“ＮＯ”）、一連の送信処理は、ステップＳ１０５へ進む。ステップＳ１０５において、誤り検出符号計算部２１２は、送信対象データと、今回ハッシュ値と、前回ハッシュ値とに基づいて誤り検出符号を計算する。ステップＳ１０６において、データフレーム生成部２１３は、送信対象データと、誤り検出符号と、今回ハッシュ値と、前回ハッシュ値とを含むデータフレームを生成する。
【００２２】
図３は、第１の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。なお、図３には、ＣＡＮで定義されるデータフレームの標準フォーマット中のデータフィールドが示されているが、該データフレームには、ＳＯＦ（Start Of Frame）やＩＤ（Identifier）等の不図示のその他のフィールドも含まれ得る。図３に示す構成例では、８バイトのデータフィールドの内、誤り検出符号、今回ハッシュ値、及び前回ハッシュ値に夫々１バイトが当てられている。また、図３において“データ１”〜“データ５”と記載したフィールドで示されるように、最小データ単位が１バイトであるデータ（送信対象データ或いは受信対象データ）に対して５バイトが当てられている。
【００２３】
図３に示す一例では、通信装置２が前々回送信したデータフレームに含まれる前回ハッシュ値はハッシュ値Ａであり、今回ハッシュ値はハッシュ値Ｂである。通信装置２が前回送信したデータフレームに含まれる前回ハッシュ値はハッシュ値Ｂであり、今回ハッシュ値はハッシュ値Ｃである。通信装置２が今回送信するデータフレームに含まれる前回ハッシュ値はハッシュ値Ｃであり、今回ハッシュ値はハッシュ値Ｄである。このように、前々回のデータフレームの今回ハッシュ値は、前回のデータフレームの前回ハッシュ値であり、前回のデータフレームの今回ハッシュ値は、今回のデータフレームの前回ハッシュ値である。したがって、受信側の通信装置２（例えば、受信装置）は、受信した複数のデータフレームの今回ハッシュ値及び前回ハッシュ値を夫々参照することで、複数のデータフレームに夫々含まれるデータ（受信対象データ）の順序を特定できる。
【００２４】
ステップＳ１０７において、通信モジュール２３は、データフレーム生成部２１３が生成したデータフレームを該データフレームの宛先である他の通信装置２へ送信する。
このように、通信装置２は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。そして、通信装置２は、送信対象データと、今回ハッシュ値と、送信対象データに先立ち前回送信されたデータに対して計算した前回ハッシュ値とを含むデータフレームを生成して送信する。このため、受信側の通信装置２は、受信したデータフレーム中の前回ハッシュ値と、該データフレームに先立ち処理したデータフレーム中の今回ハッシュ値とを比較することで、受信対象データの処理順序を確認できる。また、受信側の通信装置２は、データフレーム中の今回ハッシュ値を検証することで、受信対象データの正しさを確認できる。
【００２５】
したがって、実施形態に従った通信装置によれば、カウンタ値を用いたり、誤り検出符号のデータ数を増やしたりすることなく、高いＡＳＩＬ（Automotive Safety Integrity Level）での通信の安全性を確保できる。また、実施形態に従った通信装置によれば、物理的なカウンタを通信装置に備えることに起因して通信ノードのサイズが大きくなることもない。
＜＜受信処理＞＞
図４（Ａ）及び図４（Ｂ）は、第１の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。通信装置２は、図４（Ａ）及び図４（Ｂ）に示すような一連の受信処理を、データフレームを新たに受信する毎に実行し得る。
【００２６】
ステップＳ２０１において、通信モジュール２３は、他の通信装置２が送信したデータフレームを受信する。ステップＳ２０２において、誤り検出部２１４は、受信したデータフレームから誤り検出符号を抽出する。また、ステップＳ２０３において、誤り検出符号計算部２１２は、受信したデータフレームに含まれる受信対象データと、今回ハッシュ値と、前回ハッシュ値とに基づいて誤り検出符号を計算する。
【００２７】
ステップＳ２０４において、誤り検出部２１４は、受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部２１２が計算した誤り検出符号とが一致するか否かを判定する。
【００２８】
受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部２１２が計算した誤り検出符号とが一致しないと判定する場合（ステップＳ２０４で“ＮＯ”）、受信対象データ、今回ハッシュ値、及び前回ハッシュ値の内の少なくとも１つに誤りがある。そこで、ステップＳ２０５において、データフレーム処理部２１５は、受信したデータフレームを破棄する。そして、データフレーム処理部２１５は、誤りのないデータフレームを受信するために、一連の受信処理をステップＳ２０１に戻す。なお、データフレーム生成部２１３は、受信したデータフレームに誤りがあったことを示すエラーフレームを生成してもよい。そして、通信モジュール２３は、受信したデータフレームを送信した通信装置２へエラーフレームを送信してもよい。
【００２９】
一方、受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部２１２が計算した誤り検出符号とが一致すると判定する場合（ステップＳ２０４で“ＹＥＳ”）、誤り検出部２１４は、ステップＳ２０６の処理に進む。ステップＳ２０６において、誤り検出部２１４は、処理待ちデータフレームがあるか否かを判定する。処理待ちデータフレームとは、ステップＳ２０１で受信したデータフレーム以外のデータフレームであり、図４（Ａ）及び図４（Ｂ）に示すような一連の受信処理が完了していないデータフレームを指す。
【００３０】
処理待ちデータフレームがないと判定する場合（ステップＳ２０６で“ＮＯ”）、ステップＳ２０７において、誤り検出部２１４は、受信したデータフレームから今回ハッシュ値を抽出する。そして、ステップＳ２０８において、誤り検出部２１４は、抽出した今回ハッシュ値を記憶部２２内のハッシュ値保存リストに保存する。ハッシュ値保存リストは、一連の受信処理が完了していないデータフレームが含む今回ハッシュ値が保存されるリストである。
【００３１】
一方、処理待ちデータフレームがあると判定する場合（ステップＳ２０６で“ＹＥＳ”）、ステップＳ２０９において、誤り検出部２１４は、受信したデータフレームから前回ハッシュ値及び今回ハッシュ値を抽出する。そして、ステップＳ２１０において、誤り検出部２１４は、抽出した前回ハッシュ値と、ハッシュ値保存リストに既に保存されている今回ハッシュ値とを比較する。こうした比較によって、誤り検出部２１４は、受信したデータフレーム及び処理待ちデータフレームをデータフレームの送信順にソートする。また、ステップＳ２１１において、誤り検出部２１４は、ソートしたデータフレームの今回ハッシュ値をハッシュ値保存リストに保存する。
【００３２】
例えば、抽出した前回ハッシュ値がハッシュ値Ｃであり、抽出した今回ハッシュ値がハッシュ値Ｄであり、ハッシュ値保存リストに既に保存されている今回ハッシュ値がハッシュ値Ｂ及びハッシュ値Ｃであると仮定する。この仮定では、抽出した前回ハッシュ値Ｃと同じ今回ハッシュ値がハッシュ値保存リスト中に存在する。そこで、受信したデータフレーム及び処理待ちデータフレームは、今回ハッシュ値がハッシュ値Ｂ、ハッシュ値Ｃ、及びハッシュ値Ｄの順番でソートされる。また、ハッシュ値保存リストには、ハッシュ値Ｂ、ハッシュ値Ｃ、及びハッシュ値Ｄがデータフレームのソート順に保存される。
【００３３】
ステップＳ２１２において、誤り検出部２１４は、最後に処理されたデータフレームが含む今回ハッシュ値と、データフレームの送信順でソートされた先頭のデータフレームが含む前回ハッシュ値とが一致するか否かを判定する。最後に処理されたデータフレームとは、図４（Ａ）及び図４（Ｂ）に示すような一連の受信処理が最後に完了されたデータフレームを指す。例えば、処理待ちデータフレームが存在しない場合、誤り検出部２１４は、最後に処理されたデータが含む今回ハッシュ値と、ステップＳ２０１で受信したデータフレームが含む前回ハッシュ値とが一致するか否かを判定する。
【００３４】
最後に処理されたデータフレームが含む今回ハッシュ値と、先頭のデータフレームが含む前回ハッシュ値とが一致しないと判定する場合（ステップＳ２１２で“ＮＯ”）、先頭のデータフレームが含む受信対象データよりも先に処理される予定のデータが存在する。すなわち、先頭のデータフレームが含む受信対象データよりも先に送信されたはずの（或いは先に受信されるべき）データが存在する。そこで、誤り検出部２１４は、先に処理される予定のデータを含むデータフレームを受信するために、一連の受信処理をステップＳ２０１へ戻す。
【００３５】
一方、最後に処理されたデータフレームが含む今回ハッシュ値と、先頭のデータフレームが含む前回ハッシュ値とが一致すると判定する場合（ステップＳ２１２で“ＹＥＳ”）、ハッシュ値処理部２１１は、ステップＳ２１３の処理に進む。ステップＳ２１３において、ハッシュ値処理部２１１は、ハッシュ関数と、先頭のデータフレームが含む受信対象データとを用いて ハッシュ値１（第１のハッシュ値）を計算する。例えば、処理待ちデータフレームが存在しない場合、ハッシュ値処理部２１１は、ハッシュ関数と、ステップＳ２０１で受信したデータフレームが含む受信対象データとを用いて ハッシュ値１を計算する。さらに、ステップＳ２１３において、ハッシュ値処理部２１１は、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いてハッシュ値２（第２のハッシュ値）を計算する。例えば、処理待ちデータフレームが存在しない場合、ハッシュ値処理部２１１は、公開鍵と、ハッシュ関数と、ステップＳ２０１で受信したデータフレームが含む今回ハッシュ値とを用いてハッシュ値２を計算する。
【００３６】
ステップＳ２１４において、誤り検出部２１４は、ハッシュ値処理部２１１が計算したハッシュ値１とハッシュ値２とが一致するか否かを判定する。例えば、処理待ちデータフレームが存在する場合、ステップＳ２１４において、誤り検出部２１４は、ハッシュ値処理部２１１が計算したハッシュ値１と、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いて計算されたハッシュ値２とが一致するか否かを判定する。また、例えば、処理待ちデータフレームが存在しない場合、誤り検出部２１４は、ハッシュ値処理部２１１が計算したハッシュ値１とハッシュ値２とが一致するか否かを判定する。
【００３７】
ハッシュ値処理部２１１が計算したハッシュ値１とハッシュ値２とが一致しないと判定する場合（ステップＳ２１４で“ＮＯ”）、先頭のデータフレームが含む受信対象データに誤りがある。そこで、ステップＳ２１５において、誤り検出部２１４は、先頭のデータフレームに対応する今回ハッシュ値をハッシュ値保存リストから削除する。また、データフレーム処理部２１５は、先頭のデータフレームを破棄する。そして、データフレーム処理部２１５は、誤りのないデータフレームを受信するために、一連の受信処理をステップＳ２０１に戻す。なお、データフレーム生成部２１３は、先頭のデータフレームに誤りがあったことを示すエラーフレームを生成してもよい。そして、通信モジュール２３は、先頭のデータフレームを送信した通信装置２へエラーフレームを送信してもよい。
【００３８】
一方、ハッシュ値処理部２１１が計算したハッシュ値１とハッシュ値２とが一致すると判定する場合（ステップＳ２１４で“ＹＥＳ”）、誤り検出部２１４は、ステップＳ２１６の処理に進む。ステップＳ２１６において、誤り検出部２１４は、先頭のデータフレーム中の前回ハッシュ値に先行する今回ハッシュ値をハッシュ値保存リストから削除する。図５は、第１の実施形態に従ったハッシュ値保存リストの一例を示す図である。例えば、図３に示した今回のデータフレームに対してステップＳ２１６の処理が実行される場合、図５に示すように、今回のデータフレーム中の前回ハッシュ値Ｃに先行する今回ハッシュ値Ｂがハッシュ値保存リストから削除される。今回のデータフレームに対してステップＳ２１２以降の処理が実行される場合、前々回のデータフレーム及び前回のデータフレームに対する一連の受信処理は完了している。それ故、今回のデータフレームに先立つデータフレームの送信順序を確認する必要がないため、今回のデータフレーム中の前回ハッシュ値Ｃに先行する今回ハッシュ値Ｂはハッシュ値保存リストから削除される。
【００３９】
ステップＳ２１７において、データフレーム処理部２１５は、先頭のデータフレームが含む受信対象データに基づく処理を実行する。
このように、通信装置２は、受信したデータフレーム中の前回ハッシュ値と、該データフレームに先立ち処理したデータフレーム中の今回ハッシュ値とを比較することで、受信対象データの処理順序を確認する。また、通信装置２は、受信したデータフレーム中の今回ハッシュ値を検証することで、受信対象データの正しさを確認する。したがって、実施形態に従った通信装置によれば、カウンタ値を用いたり、誤り検出符号のデータ数を増やしたりすることなく、高いＡＳＩＬでの通信の安全性を確保できる。また、実施形態に従った通信装置によれば、物理的なカウンタを通信装置に備えることに起因して通信ノードのサイズが大きくなることもない。
【００４０】
本発明は、以上の実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。例えば、上述した第１の実施形態を以下に示す第２〜第６の実施形態のように改良、変更してもよい。また、第１〜第６の実施形態の内の２つ以上の実施形態を組み合わせてもよい。
＜第２の実施形態＞
通信システム１を構成する通信装置２の内、少なくとも１つの通信装置２は、他の通信装置２間で送受信されるデータフレームの通信履歴を記録する通信履歴記録装置であってもよい。この場合、データフレームを送信する通信装置２は、該データフレームの本来の宛先である受信側の通信装置２に加えて通信履歴記録装置へデータフレームを送信してよい。また、通信履歴記録装置は、図６（Ａ）及び図６（Ｂ）に示したような一連の受信処理を行ってもよい。図６（Ａ）及び図６（Ｂ）は、第２の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【００４１】
図４（Ａ）及び図４（Ｂ）と図６（Ａ）及び図６（Ｂ）との比較から理解し得るように、通信履歴記録装置である通信装置２は、ハッシュ値処理部２１１が計算したハッシュ値１とハッシュ値２とが一致すると判定する場合（ステップＳ２１４で“ＹＥＳ”）、ステップＳ２１６及びステップＳ２１７の処理を実行しない。すなわち、通信履歴記録装置である通信装置２は、他の通信装置２間の通信履歴を後日検証するために、ステップＳ２０８又はステップＳ２１１で保存した今回ハッシュ値をハッシュ値保存リストから削除しない。また、通信履歴記録装置である通信装置２は、受信したデータフレームの本来の宛先である受信側の通信装置２ではないため、受信したデータフレームが含む受信対象データに基づく処理を行わない。代わりに、図６（Ａ）及び図６（Ｂ）に示すように、通信履歴記録装置である通信装置２は、他の通信装置２間で送受信される新たなデータフレームを受信するために、一連の受信処理をステップＳ２０１に戻す。
【００４２】
このように、他の通信装置２間の通信履歴を記録する通信装置２を通信システム１に備えれば、例えば、車両故障の診断時等の際に、他の通信装置２間の通信履歴を検証することができる。
＜第３の実施形態＞
図７に示すように、データフレームの送信対象データ（或いは受信対象データ）は、現在の時刻を示す時刻データを含んでもよい。図７は、第３の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【００４３】
図３と図７との比較から理解し得るように、第３の実施形態に従った通信装置２が生成するデータフレームは、“第１のデータ”のフィールド等に、現在の時刻を示す時刻データを含む。そこで、データフレームを送信する通信装置２は、ステップＳ１０１で時刻データを含む送信対象データが発生すると、ステップＳ１０２において、時刻データを含む送信データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。また、データフレームを受信した通信装置２は、ステップＳ２１３においてハッシュ関数と、時刻データを含む受信対象データとを用いてハッシュ値１を計算する。また、データフレームを受信した通信装置２は、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いて、ハッシュ値２を計算する。
【００４４】
このように、送信対象データ（或いは受信対象データ）に現在時刻を示す時刻データを含めれば、データフレームの送信側及び受信側の通信装置２が計算する今回ハッシュ値は、前回ハッシュ値と一致しにくくなる。したがって、第３の実施形態に従った通信装置２によれば、ステップＳ２１０等においてデータフレームの送信順序をより特定しやすくすることができる。
＜第４の実施形態＞
図８に示すように、第４の実施形態に従った通信装置２が生成するデータフレームは、誤り検出符号を含まなくてもよい。図８は、第４の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。図９は、第４の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。図１０（Ａ）及び図１０（Ｂ）は、第４の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【００４５】
図３と図８との比較から理解し得るように、第４の実施形態に従った通信装置２が生成するデータフレームは、誤り検出符号を含まない。そこで、図９に示すように、データフレームを送信する通信装置２は、誤り検出符号を計算するステップＳ１０５の処理を実行しない。また、データフレームを送信する通信装置２は、ステップＳ１０６Ａにおいて、誤り検出符号を含まないデータフレームを生成する。
【００４６】
また、図１０（Ａ）及び図１０（Ｂ）に示すように、データフレームを受信した通信装置２は、ステップＳ２０２Ａにおいて、受信したデータフレームから受信対象データ及び今回ハッシュ値を抽出する。また、ステップＳ２０３Ａにおいて、通信装置２は、ハッシュ関数と、受信したデータフレームが含む受信対象データとを用いて、ハッシュ値１を計算する。さらにステップＳ２０３Ａにおいて、通信装置２は、公開鍵と、ハッシュ関数と、受信したデータフレームが含む今回ハッシュ値とを用いて、ハッシュ値２を計算する。そして、ステップＳ２０４Ａにおいて、通信装置２は、ハッシュ値１とハッシュ値２とが一致するか否かを判定する。ハッシュ値１とハッシュ値２とが一致しないと判定する場合（ステップＳ２０４Ａで“ＮＯ”）、ステップＳ２０５において、通信装置２は、受信されたデータフレームを破棄する。一方、ハッシュ値１とハッシュ値２とが一致すると判定する場合（ステップＳ２０４Ａで“ＹＥＳ”）、通信装置２は、ステップＳ２０６へ進む。以降の処理は、第１の実施形態に従った通信装置２が行う受信処理と同様である。
【００４７】
このように、第４の実施形態に従った通信装置２が生成するデータフレームは、誤り検出符号を含まず、該データフレームを受信した通信装置２は、誤り検出符号の代わりにハッシュ値を用いてデータフレームの整合性を検証する。したがって、第４の実施形態に従った通信装置によれば、誤り検出符号を計算する処理時間を短縮することができる。また、図３と図８との比較から理解し得るように、第４の実施形態に従ったデータフレームでは、誤り検出符号に代わって、送信対象データ（或いは受信対象データ）を追加することができる。
＜第５の実施形態＞
図１１に示すように、データフレームに含まれる今回ハッシュ値及び前回ハッシュ値の各大きさは、データフレームを構成する最小データ単位の半分であってもよい。図１１は、第５の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【００４８】
図３と図１１との比較から理解し得るように、第５の実施形態に従った通信装置２が生成するデータフレームでは、該データフレームを構成する最小データ単位の半分を前回ハッシュ値及び今回ハッシュ値に夫々割り当てる。具体的には、例えば、ＣＡＮに準拠したデータフレームでは、８バイトのデータフレームを構成する最小データ単位１バイトの半分の４ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられる。この結果、データフレームで送受信可能なデータ数は、図３に示すような”データ１”〜“データ５”に加えて図１１に示すような“データ６”を増やすことができる。
【００４９】
なお、例えば、ＣＡＮ  ＦＤに準拠したデータフレームでは、６４バイトのデータフレームを構成する最小データ単位１バイトの半分の４ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。また、例えば、車載イーサネットに準拠したデータフレームでは、４６バイトのデータフレームを構成する最小データ単位１バイトの半分の４ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。
【００５０】
このように、第５の実施形態によれば、データフレームで送受信可能なデータ数を増やすことができる。
＜第６の実施形態＞
図１２に示すように、今回ハッシュ値及び前回ハッシュ値の各大きさは、データフレームを構成する最小データ単位の２倍以上であってもよい。図１２は、第６の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【００５１】
図３と図１２との比較から理解し得るように、第６の実施形態に従った通信装置２が生成するデータフレームでは、該データフレームを構成する最小データ単位の２倍以上を前回ハッシュ値及び今回ハッシュ値に夫々割り当てる。具体的には、例えば、ＣＡＮに準拠したデータフレームでは、８バイトのデータフレームを構成する最小データ単位１バイトの３倍（３バイト）が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられる。この場合、データフレームで送受信可能なデータ数は１つ（全部で１バイト）である。
【００５２】
なお、例えば、ＣＡＮ  ＦＤに準拠したデータフレームでは、６４バイトのデータフレームを構成する最小データ単位１バイトの８倍（８バイト）が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。この場合、データフレームで送受信可能なデータ数は５５個（全部で５５バイト）である。また、例えば、車載イーサネットに準拠したデータフレームでは、４６バイトのデータフレームを構成する最小データ単位１バイトの８倍（８バイト）が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。この場合、データフレームで送受信可能なデータ数は２９個（全部で２９バイト）である。
【００５３】
このように、第６の実施形態によれば、データフレームを構成するハッシュ値のデータ数を増やすことで、通信の安全性を高めることができる。
【符号の説明】
【００５４】
１    通信システム
２    通信装置
３    通信線
２１    制御部
２２    記憶部
２３    通信モジュール
２４    バス
２１１    ハッシュ値処理部
２１２    誤り検出符号計算部
２１３    データフレーム生成部
２１４    誤り検出部
２１５    データフレーム処理部
【図１】
2019029921.tif 000003
【図２】
2019029921.tif 000004
【図３】
2019029921.tif 000005
【図４Ａ】
2019029921.tif 000006
【図４Ｂ】
2019029921.tif 000007
【図５】
2019029921.tif 000008
【図６Ａ】
2019029921.tif 000009
【図６Ｂ】
2019029921.tif 000010
【図７】
2019029921.tif 000011
【図８】
2019029921.tif 000012
【図９】
2019029921.tif 000013
【図１０Ａ】
2019029921.tif 000014
【図１０Ｂ】
2019029921.tif 000015
【図１１】
2019029921.tif 000016
【図１２】
2019029921.tif 000017