(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-13
(45)【発行日】2022-01-13
(54)【発明の名称】送信装置、受信装置、及び通信方法
(51)【国際特許分類】
H04L 9/32 20060101AFI20220105BHJP
G09C 1/00 20060101ALI20220105BHJP
G06F 21/64 20130101ALI20220105BHJP
H04L 1/00 20060101ALI20220105BHJP
【FI】
H04L9/00 675A
G09C1/00 640D
G06F21/64
H04L1/00 B
(21)【出願番号】P 2017149678
(22)【出願日】2017-08-02
【審査請求日】2019-11-12
(73)【特許権者】
【識別番号】000003218
【氏名又は名称】株式会社豊田自動織機
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】名児耶 敏也
【審査官】桜井 茂行
(56)【参考文献】
【文献】特開2010-102258(JP,A)
【文献】特開2009-070026(JP,A)
【文献】特開2010-141915(JP,A)
【文献】特開2015-046943(JP,A)
【文献】特表2013-531447(JP,A)
【文献】米国特許出願公開第2015/0003443(US,A1)
【文献】国際公開第2013/084571(WO,A1)
【文献】特開2009-223399(JP,A)
【文献】特開2001-251296(JP,A)
【文献】特開2013-048485(JP,A)
【文献】嶋田 大輔,いまから学ぶブロックチェーンのしくみ,SoftwareDesign,日本,(株)技術評論社,2017年04月18日,2017年5月号,pp.80-90
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G09C 1/00
G06F 21/64
H04L 1/00
(57)【特許請求の範囲】
【請求項1】
送信装置であって、
送信対象データと、暗号化鍵と、ハッシュ関数とを用いて前記送信対象データに対する今回ハッシュ値を計算するハッシュ値処理部と、
前記送信対象データと、前記今回ハッシュ値と、前記送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成するデータフレーム生成部と、
前記データフレームを送信する通信モジュールと、
前記送信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値とに基づいて誤り検出符号を計算する誤り検出符号計算部
と、
を備え、
前記データフレーム生成部は、前記送信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値と、前記誤り検出符号とを含むデータフレームを生成する
ことを特徴とする送信装置。
【請求項2】
請求項
1に記載の送信装置であって、
前記送信対象データは、現在の時刻を示す時刻データを含む
ことを特徴とする送信装置。
【請求項3】
請求項1
または請求項2に記載の送信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の半分である
ことを特徴とする送信装置。
【請求項4】
請求項1
または請求項2に記載の送信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の2倍以上である
ことを特徴とする送信装置。
【請求項5】
受信装置であって、
送信対象データと、今回ハッシュ値と、前記送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを受信する通信モジュールと、
前記今回ハッシュ値と前記前回ハッシュ値とが一致する場合に、前記データフレームが含む受信対象データに基づく処理を実行するデータフレーム処理部と
を備え、
受信した前記データフレームが含む前記受信対象データと、前記今回ハッシュ値と、前記前回ハッシュ値とに基づいて誤り検出符号を計算する誤り検出符号計算部を更に備え、
前記誤り検出符号計算部が計算した前記誤り検出符号と、受信した前記データフレームから抽出した誤り検出符号とが一致しない場合、前記データフレーム処理部は、受信した前記データフレームを破棄する
ことを特徴とする受信装置。
【請求項6】
請求項
5に記載の受信装置であって、
受信した前記データフレーム以外の処理待ちデータフレームが存在する場合に、受信した前記データフレームが含む前記前回ハッシュ値と前記処理待ちデータフレームが含む前記今回ハッシュ値とに従って、受信した前記データフレーム及び前記処理待ちデータフレームをデータフレームの送信順にソートする誤り検出部を更に備え、
前記ハッシュ値処理部は、最後に処理されたデータフレームが含む前記今回ハッシュ値と、前記データフレームの送信順でソートされた先頭のデータフレームが含む前記前回ハッシュ値とが一致する場合に、前記ハッシュ関数と、前記先頭のデータフレームが含むデータとを用いて第1のハッシュ値を計算し、前記送信装置が事前に指定する前記公開鍵と、前記ハッシュ関数と、前記データフレームが含む前記今回ハッシュ値とを用いて第2のハッシュ値を計算し、
前記データフレーム処理部は、前記第1のハッシュ値と前記第2のハッシュ値とが一致する場合に、前記先頭のデータフレームが含む前記データに基づく処理を実行する
ことを特徴とする受信装置。
【請求項7】
請求項
5又は
6に記載の受信装置であって、
前記受信対象データは、現在の時刻を示す時刻データを含む
ことを特徴とする受信装置。
【請求項8】
請求項
5~
7の何れか一項に記載の受信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の半分である
ことを特徴とする受信装置。
【請求項9】
請求項
5~
7の何れか一項に記載の受信装置であって、
前記今回ハッシュ値及び前記前回ハッシュ値の各大きさは、前記データフレームを構成する最小データ単位の2倍以上である
ことを特徴とする受信装置。
【請求項10】
請求項
5~
9の何れか一項に記載の受信装置であって、
前記受信装置が、受信した前記データフレームを送信した送信装置と、受信した前記データフレームの宛先である他の受信装置との間の通信履歴を記録する通信履歴記録装置である場合、前記データフレーム処理部は、受信した前記データフレームが含む前記今回ハッシュ値をハッシュ値保存リストに保存し、前記受信対象データに基づく処理を実行せずに新たなデータフレームの受信を待機する
ことを特徴とする受信装置。
【請求項11】
送信装置及び受信装置が実行する通信方法であって、
前記送信装置は、
送信対象データと、暗号化鍵と、ハッシュ関数とを用いて前記送信対象データに対する今回ハッシュ値を計算し、
前記送信対象データと、前記今回ハッシュ値と、前記送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成し、
生成した前記データフレームを送信し、
前記受信装置は、
前記データフレームを受信し、
受信した前記データフレームに先立ち前回処理したデータフレームが含む前記今回ハッシュ値であって、前回処理した前記データフレームが含むデータに対して計算された前記今回ハッシュ値と、受信した前記データフレームが含む前回ハッシュ値であって、受信した前記データフレームが含む受信対象データに先立ち前回送信されたデータに対して計算された前記前回ハッシュ値とが一致する場合に、ハッシュ関数と、前記受信対象データとを用いて第1のハッシュ値を計算し、前記送信装置が事前に指定する公開鍵と、前記ハッシュ関数と、前記データフレームが含む前記今回ハッシュ値とを用いて第2のハッシュ値を計算し、
計算した前記第1のハッシュ値と前記第2のハッシュ値とが一致する場合に、前記受信対象データに基づく処理を実行する
ことを含むことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、送信装置、受信装置、及び通信方法に関する。
【背景技術】
【0002】
車両に搭載される通信システムは、例えば、AUTOSAR(Automotive Open System Architecture)の仕様書に記載されたE2E(End to End)プロトコルに準拠し得る。該E2Eプロトコルでは、送信装置は、送信対象のデータと共に、CRC(Cyclic Redundancy Check)符号といった誤り検出符号とカウンタ値とをデータフレームに含めて送信する。一方、受信装置は、データフレームに含まれる誤り検出符号とカウンタ値とに基づいて、受信したデータの正しさ(整合性)や受信順序を確認する。
【0003】
また、特許文献1に記載の通信システムでは、第1の通信ノードは、第2の通信ノードへ送信するデータと、該データの送信順序を表すカウンタ値とに基づいて、該カウンタ値をシードとして、第1の誤り検出符号を計算する。そして、第1の通信ノードは、第1の誤り検出符号とデータとを含むデータフレームを第2の通信ノードへ送信する。一方、第2の通信ノードは、第1の通信ノードからのデータフレームを受信し、受信されたデータフレームに含まれるデータと、該データの受信順序を表すカウンタ値とに基づいて、該カウンタ値をシードとして、第2の誤り検出符号を計算する。そして、第2の通信ノードは、第2の誤り検出符号と、データフレームに含まれる第1の誤り検出符号とが一致するかを判定し、判定結果に基づいて、データフレームに含まれるデータに応じた処理を行う。
【0004】
なお、関連する技術として、上述した特許文献1の他に、特許文献2~5に記載の技術が知られている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2013-207600号公報
【文献】特開2013-219710号公報
【文献】特開2014-056381号公報
【文献】特開2016-021623号公報
【文献】特表2015-511905号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、カウンタ値を用いた上述の通信システムでは、カウンタ値は、データフレームが送信される度に、初期値(例えば、1)から所定数(例えば、1)だけ増加又は減少する。このため、例えば、初回のデータフレームを送信する場合や、カウンタ値を取得できない異常によりカウンタ値の初期値が用いられる場合、シードであるカウンタ値を特定することが容易である。この結果、カウンタ値を用いた上述の通信システムでは、例えば、データフレームを傍受してデータフレームを解析し、シードであるカウンタ値を特定した後データを改ざんし、通信を乗っ取ることも容易になる。加えて、例えば、特許文献1に記載の通信システムでは、カウンタ値を生成するための物理的なカウンタが通信ノードに備えられるため、通信ノードのサイズが大きくなり、車両の所定スペースに通信ノードを収納できなくなる虞がある。
【0007】
本発明の一側面に係る目的は、通信の安全性が確保された通信装置を提供することである。
【課題を解決するための手段】
【0008】
本発明に係る一つの形態である送信装置は、ハッシュ値処理部、データフレーム生成部、及び通信モジュールを備える。ハッシュ値処理部は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。データフレーム生成部は、送信対象データと、今回ハッシュ値と、送信対象データに先立ち前回送信されたデータに対して計算された前回ハッシュ値とを含むデータフレームを生成する。通信モジュールは、データフレームを送信する。
【発明の効果】
【0009】
一実施形態に従った送信装置によれば、通信の安全性が確保された通信装置を提供できる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施形態に従った通信装置を含む通信システムの構成例を示す図である。
【
図2】第1の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。
【
図3】第1の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【
図4A】第1の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図4B】第1の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図5】第1の実施形態に従ったハッシュ値保存リストの一例を示す図である。
【
図6A】第2の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図6B】第2の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図7】第3の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【
図8】第4の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【
図9】第4の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。
【
図10A】第4の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図10B】第4の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【
図11】第5の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【
図12】第6の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【発明を実施するための形態】
【0011】
以下図面に基づいて実施形態について詳細を説明する。
<第1の実施形態>
図1は、第1の実施形態に従った通信装置を含む通信システムの構成例を示す図である。
図1に示す構成例では、通信システム1は、複数の通信装置2-1~2-N(Nは2以上の整数)を含み、複数の通信装置2-1~2-Nは、通信線3を介して相互に接続する。以下の説明において複数の通信装置2-1~2-Nを特に区別しない場合には、通信装置2と記載する場合がある。通信システム1は、CAN(Controller Area Network)の仕様に準拠した通信システムであってもよい。
【0012】
通信装置2は、通信システム1の通信ノードである。通信装置2は、例えば、車両の所定置に搭載される電子制御ユニット(ECU:Electronic Control Unit)等である。以下では、通信装置2は、送信対象データを含むデータフレームを生成して送信する送信機能と、受信対象データを含むデータフレームを受信して処理する受信機能とを備える装置として説明する。しかしながら、通信システム1を構成する複数の通信装置2の内の1つ以上の通信装置2は、受信機能を備えない送信装置であってもよいし、送信機能を備えない受信装置であってもよい。したがって、通信装置2は、実施形態に従った送信装置及び受信装置の一例である。
【0013】
通信装置2は、制御部21、記憶部22、及び通信モジュール23を含む。制御部21、記憶部22、及び通信モジュール23は、バス24を介して相互に接続する。なお、
図1には、通信装置2-1に対してのみ構成要素が便宜的に示されている。しかしながら、その他の通信装置2は、通信装置2-1と同じ構成要素を含んでもよい。また、その他の通信装置2は、通信装置2-1の構成要素の内、送信機能を有する構成要素のみを送信装置として含んでもよいし、受信機能を有する構成要素のみを受信装置として含んでもよい。
【0014】
制御部21は、例えば、CPU(Central Processing Unit)、マルチコアCPU、又はプログラマブルなデバイス(FPGA(Field Programmable Gate Array)やPLD(Programmable Logic Device)等)により構成される。制御部21は、通信装置2全体の動作を司る。例えば、制御部21は、他の通信装置2へ送信する送信対象データを含むデータフレームを生成する。また、例えば、制御部21は、他の通信装置2から受信したデータフレームに対して所定の処理を実行する。制御部21は、ハッシュ値処理部211、誤り検出符号計算部212、データフレーム生成部213、誤り検出部214、及びデータフレーム処理部215を備える。これらの構成要素211~215は、相互に連携して所望の処理を実行する。制御部21が備える各構成要素の具体的な動作は後述する。
【0015】
記憶部22は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)により構成される。記憶部22は、制御部21の処理動作を規定するプログラムや、通信装置2が事前に指定する公開鍵やハッシュ関数、制御部21が処理するデータを記憶する。公開鍵は、通信装置2が送信したデータフレームを示すCAN Identifier Base ID や CAN Identifier 拡張IDであってもよい。さらに、公開鍵は、通信装置2が送信したデータフレームのデータとして受信装置が受信可能な、任意の数値であってもよい。
【0016】
通信モジュール23は、例えば、変調器や復調器等により構成される。例えば、通信モジュール23は、制御部21が生成したデータフレームを所定の通信方式に従って変調し、データフレームの宛先である通信装置2へデータフレームを送信する。また、例えば、通信モジュール23は、他の通信装置2から受信したデータフレームを所定の通信方式に従って復調し、該データフレームを制御部21へ出力する。
【0017】
通信装置2が実行する送信処理及び受信処理の例示的なフローを以下に説明する。
<<送信処理>>
図2は、第1の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。通信装置2は、
図2に示すような一連の送信処理を、送信対象データが発生する毎に実行し得る。
【0018】
ステップS101において、他の通信装置2へ送信する送信対象データが制御部21において発生すると、ハッシュ値処理部211は、ステップS102の処理を実行する。ステップS102において、ハッシュ値処理部211は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。今回ハッシュ値とは、データフレームに含まれるデータ、すなわち、送信対象データ(或いは受信対象データ)に対して計算されたハッシュ値を指す。また、暗号化鍵は、ハッシュ値を暗号化するために用いられる鍵である。
【0019】
ステップS103において、ハッシュ値処理部211は、ステップS102で計算した今回ハッシュ値と前回ハッシュ値とが一致するか否かを判定する。前回ハッシュ値とは、送信対象データ(或いは受信対象データ)に先立ち前回送信されたデータに対してハッシュ値処理部211が計算したハッシュ値を指す。前回送信されたデータに対するハッシュ値は、該データに対する一連の送信処理中のステップS102においてハッシュ値処理部211が今回ハッシュ値として計算している。そして、前回送信されたデータに対する今回ハッシュ値は、該データに後続して次回送信されるデータに対する前回ハッシュ値としてハッシュ値処理部211が記憶部22に記憶している。
【0020】
今回ハッシュ値と前回ハッシュ値とが一致すると判定する場合(ステップS103で“YES”)、送信対象データと、該対象データに先立ち前回送信されたデータとは同一であるため、送信対象データを再度送信する必要がない。そこで、ステップS104において、ハッシュ値処理部211は、送信対象データを破棄し、当該送信対象データに対する一連の送信処理は終了する。
【0021】
一方、今回ハッシュ値と前回ハッシュ値とが一致しないと判定する場合(ステップS103で“NO”)、一連の送信処理は、ステップS105へ進む。ステップS105において、誤り検出符号計算部212は、送信対象データと、今回ハッシュ値と、前回ハッシュ値とに基づいて誤り検出符号を計算する。ステップS106において、データフレーム生成部213は、送信対象データと、誤り検出符号と、今回ハッシュ値と、前回ハッシュ値とを含むデータフレームを生成する。
【0022】
図3は、第1の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。なお、
図3には、CANで定義されるデータフレームの標準フォーマット中のデータフィールドが示されているが、該データフレームには、SOF(Start Of Frame)やID(Identifier)等の不図示のその他のフィールドも含まれ得る。
図3に示す構成例では、8バイトのデータフィールドの内、誤り検出符号、今回ハッシュ値、及び前回ハッシュ値に夫々1バイトが当てられている。また、
図3において“データ1”~“データ5”と記載したフィールドで示されるように、最小データ単位が1バイトであるデータ(送信対象データ或いは受信対象データ)に対して5バイトが当てられている。
【0023】
図3に示す一例では、通信装置2が前々回送信したデータフレームに含まれる前回ハッシュ値はハッシュ値Aであり、今回ハッシュ値はハッシュ値Bである。通信装置2が前回送信したデータフレームに含まれる前回ハッシュ値はハッシュ値Bであり、今回ハッシュ値はハッシュ値Cである。通信装置2が今回送信するデータフレームに含まれる前回ハッシュ値はハッシュ値Cであり、今回ハッシュ値はハッシュ値Dである。このように、前々回のデータフレームの今回ハッシュ値は、前回のデータフレームの前回ハッシュ値であり、前回のデータフレームの今回ハッシュ値は、今回のデータフレームの前回ハッシュ値である。したがって、受信側の通信装置2(例えば、受信装置)は、受信した複数のデータフレームの今回ハッシュ値及び前回ハッシュ値を夫々参照することで、複数のデータフレームに夫々含まれるデータ(受信対象データ)の順序を特定できる。
【0024】
ステップS107において、通信モジュール23は、データフレーム生成部213が生成したデータフレームを該データフレームの宛先である他の通信装置2へ送信する。
このように、通信装置2は、送信対象データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。そして、通信装置2は、送信対象データと、今回ハッシュ値と、送信対象データに先立ち前回送信されたデータに対して計算した前回ハッシュ値とを含むデータフレームを生成して送信する。このため、受信側の通信装置2は、受信したデータフレーム中の前回ハッシュ値と、該データフレームに先立ち処理したデータフレーム中の今回ハッシュ値とを比較することで、受信対象データの処理順序を確認できる。また、受信側の通信装置2は、データフレーム中の今回ハッシュ値を検証することで、受信対象データの正しさを確認できる。
【0025】
したがって、実施形態に従った通信装置によれば、カウンタ値を用いたり、誤り検出符号のデータ数を増やしたりすることなく、高いASIL(Automotive Safety Integrity Level)での通信の安全性を確保できる。また、実施形態に従った通信装置によれば、物理的なカウンタを通信装置に備えることに起因して通信ノードのサイズが大きくなることもない。
<<受信処理>>
図4(A)及び
図4(B)は、第1の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。通信装置2は、
図4(A)及び
図4(B)に示すような一連の受信処理を、データフレームを新たに受信する毎に実行し得る。
【0026】
ステップS201において、通信モジュール23は、他の通信装置2が送信したデータフレームを受信する。ステップS202において、誤り検出部214は、受信したデータフレームから誤り検出符号を抽出する。また、ステップS203において、誤り検出符号計算部212は、受信したデータフレームに含まれる受信対象データと、今回ハッシュ値と、前回ハッシュ値とに基づいて誤り検出符号を計算する。
【0027】
ステップS204において、誤り検出部214は、受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部212が計算した誤り検出符号とが一致するか否かを判定する。
【0028】
受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部212が計算した誤り検出符号とが一致しないと判定する場合(ステップS204で“NO”)、受信対象データ、今回ハッシュ値、及び前回ハッシュ値の内の少なくとも1つに誤りがある。そこで、ステップS205において、データフレーム処理部215は、受信したデータフレームを破棄する。そして、データフレーム処理部215は、誤りのないデータフレームを受信するために、一連の受信処理をステップS201に戻す。なお、データフレーム生成部213は、受信したデータフレームに誤りがあったことを示すエラーフレームを生成してもよい。そして、通信モジュール23は、受信したデータフレームを送信した通信装置2へエラーフレームを送信してもよい。
【0029】
一方、受信したデータフレームから抽出した誤り検出符号と、誤り検出符号計算部212が計算した誤り検出符号とが一致すると判定する場合(ステップS204で“YES”)、誤り検出部214は、ステップS206の処理に進む。ステップS206において、誤り検出部214は、処理待ちデータフレームがあるか否かを判定する。処理待ちデータフレームとは、ステップS201で受信したデータフレーム以外のデータフレームであり、
図4(A)及び
図4(B)に示すような一連の受信処理が完了していないデータフレームを指す。
【0030】
処理待ちデータフレームがないと判定する場合(ステップS206で“NO”)、ステップS207において、誤り検出部214は、受信したデータフレームから今回ハッシュ値を抽出する。そして、ステップS208において、誤り検出部214は、抽出した今回ハッシュ値を記憶部22内のハッシュ値保存リストに保存する。ハッシュ値保存リストは、一連の受信処理が完了していないデータフレームが含む今回ハッシュ値が保存されるリストである。
【0031】
一方、処理待ちデータフレームがあると判定する場合(ステップS206で“YES”)、ステップS209において、誤り検出部214は、受信したデータフレームから前回ハッシュ値及び今回ハッシュ値を抽出する。そして、ステップS210において、誤り検出部214は、抽出した前回ハッシュ値と、ハッシュ値保存リストに既に保存されている今回ハッシュ値とを比較する。こうした比較によって、誤り検出部214は、受信したデータフレーム及び処理待ちデータフレームをデータフレームの送信順にソートする。また、ステップS211において、誤り検出部214は、ソートしたデータフレームの今回ハッシュ値をハッシュ値保存リストに保存する。
【0032】
例えば、抽出した前回ハッシュ値がハッシュ値Cであり、抽出した今回ハッシュ値がハッシュ値Dであり、ハッシュ値保存リストに既に保存されている今回ハッシュ値がハッシュ値B及びハッシュ値Cであると仮定する。この仮定では、抽出した前回ハッシュ値Cと同じ今回ハッシュ値がハッシュ値保存リスト中に存在する。そこで、受信したデータフレーム及び処理待ちデータフレームは、今回ハッシュ値がハッシュ値B、ハッシュ値C、及びハッシュ値Dの順番でソートされる。また、ハッシュ値保存リストには、ハッシュ値B、ハッシュ値C、及びハッシュ値Dがデータフレームのソート順に保存される。
【0033】
ステップS212において、誤り検出部214は、最後に処理されたデータフレームが含む今回ハッシュ値と、データフレームの送信順でソートされた先頭のデータフレームが含む前回ハッシュ値とが一致するか否かを判定する。最後に処理されたデータフレームとは、
図4(A)及び
図4(B)に示すような一連の受信処理が最後に完了されたデータフレームを指す。例えば、処理待ちデータフレームが存在しない場合、誤り検出部214は、最後に処理されたデータが含む今回ハッシュ値と、ステップS201で受信したデータフレームが含む前回ハッシュ値とが一致するか否かを判定する。
【0034】
最後に処理されたデータフレームが含む今回ハッシュ値と、先頭のデータフレームが含む前回ハッシュ値とが一致しないと判定する場合(ステップS212で“NO”)、先頭のデータフレームが含む受信対象データよりも先に処理される予定のデータが存在する。すなわち、先頭のデータフレームが含む受信対象データよりも先に送信されたはずの(或いは先に受信されるべき)データが存在する。そこで、誤り検出部214は、先に処理される予定のデータを含むデータフレームを受信するために、一連の受信処理をステップS201へ戻す。
【0035】
一方、最後に処理されたデータフレームが含む今回ハッシュ値と、先頭のデータフレームが含む前回ハッシュ値とが一致すると判定する場合(ステップS212で“YES”)、ハッシュ値処理部211は、ステップS213の処理に進む。ステップS213において、ハッシュ値処理部211は、ハッシュ関数と、先頭のデータフレームが含む受信対象データとを用いて ハッシュ値1(第1のハッシュ値)を計算する。例えば、処理待ちデータフレームが存在しない場合、ハッシュ値処理部211は、ハッシュ関数と、ステップS201で受信したデータフレームが含む受信対象データとを用いて ハッシュ値1を計算する。さらに、ステップS213において、ハッシュ値処理部211は、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いてハッシュ値2(第2のハッシュ値)を計算する。例えば、処理待ちデータフレームが存在しない場合、ハッシュ値処理部211は、公開鍵と、ハッシュ関数と、ステップS201で受信したデータフレームが含む今回ハッシュ値とを用いてハッシュ値2を計算する。
【0036】
ステップS214において、誤り検出部214は、ハッシュ値処理部211が計算したハッシュ値1とハッシュ値2とが一致するか否かを判定する。例えば、処理待ちデータフレームが存在する場合、ステップS214において、誤り検出部214は、ハッシュ値処理部211が計算したハッシュ値1と、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いて計算されたハッシュ値2とが一致するか否かを判定する。また、例えば、処理待ちデータフレームが存在しない場合、誤り検出部214は、ハッシュ値処理部211が計算したハッシュ値1とハッシュ値2とが一致するか否かを判定する。
【0037】
ハッシュ値処理部211が計算したハッシュ値1とハッシュ値2とが一致しないと判定する場合(ステップS214で“NO”)、先頭のデータフレームが含む受信対象データに誤りがある。そこで、ステップS215において、誤り検出部214は、先頭のデータフレームに対応する今回ハッシュ値をハッシュ値保存リストから削除する。また、データフレーム処理部215は、先頭のデータフレームを破棄する。そして、データフレーム処理部215は、誤りのないデータフレームを受信するために、一連の受信処理をステップS201に戻す。なお、データフレーム生成部213は、先頭のデータフレームに誤りがあったことを示すエラーフレームを生成してもよい。そして、通信モジュール23は、先頭のデータフレームを送信した通信装置2へエラーフレームを送信してもよい。
【0038】
一方、ハッシュ値処理部211が計算したハッシュ値1とハッシュ値2とが一致すると判定する場合(ステップS214で“YES”)、誤り検出部214は、ステップS216の処理に進む。ステップS216において、誤り検出部214は、先頭のデータフレーム中の前回ハッシュ値に先行する今回ハッシュ値をハッシュ値保存リストから削除する。
図5は、第1の実施形態に従ったハッシュ値保存リストの一例を示す図である。例えば、
図3に示した今回のデータフレームに対してステップS216の処理が実行される場合、
図5に示すように、今回のデータフレーム中の前回ハッシュ値Cに先行する今回ハッシュ値Bがハッシュ値保存リストから削除される。今回のデータフレームに対してステップS212以降の処理が実行される場合、前々回のデータフレーム及び前回のデータフレームに対する一連の受信処理は完了している。それ故、今回のデータフレームに先立つデータフレームの送信順序を確認する必要がないため、今回のデータフレーム中の前回ハッシュ値Cに先行する今回ハッシュ値Bはハッシュ値保存リストから削除される。
【0039】
ステップS217において、データフレーム処理部215は、先頭のデータフレームが含む受信対象データに基づく処理を実行する。
このように、通信装置2は、受信したデータフレーム中の前回ハッシュ値と、該データフレームに先立ち処理したデータフレーム中の今回ハッシュ値とを比較することで、受信対象データの処理順序を確認する。また、通信装置2は、受信したデータフレーム中の今回ハッシュ値を検証することで、受信対象データの正しさを確認する。したがって、実施形態に従った通信装置によれば、カウンタ値を用いたり、誤り検出符号のデータ数を増やしたりすることなく、高いASILでの通信の安全性を確保できる。また、実施形態に従った通信装置によれば、物理的なカウンタを通信装置に備えることに起因して通信ノードのサイズが大きくなることもない。
【0040】
本発明は、以上の実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。例えば、上述した第1の実施形態を以下に示す第2~第6の実施形態のように改良、変更してもよい。また、第1~第6の実施形態の内の2つ以上の実施形態を組み合わせてもよい。
<第2の実施形態>
通信システム1を構成する通信装置2の内、少なくとも1つの通信装置2は、他の通信装置2間で送受信されるデータフレームの通信履歴を記録する通信履歴記録装置であってもよい。この場合、データフレームを送信する通信装置2は、該データフレームの本来の宛先である受信側の通信装置2に加えて通信履歴記録装置へデータフレームを送信してよい。また、通信履歴記録装置は、
図6(A)及び
図6(B)に示したような一連の受信処理を行ってもよい。
図6(A)及び
図6(B)は、第2の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【0041】
図4(A)及び
図4(B)と
図6(A)及び
図6(B)との比較から理解し得るように、通信履歴記録装置である通信装置2は、ハッシュ値処理部211が計算したハッシュ値1とハッシュ値2とが一致すると判定する場合(ステップS214で“YES”)、ステップS216及びステップS217の処理を実行しない。すなわち、通信履歴記録装置である通信装置2は、他の通信装置2間の通信履歴を後日検証するために、ステップS208又はステップS211で保存した今回ハッシュ値をハッシュ値保存リストから削除しない。また、通信履歴記録装置である通信装置2は、受信したデータフレームの本来の宛先である受信側の通信装置2ではないため、受信したデータフレームが含む受信対象データに基づく処理を行わない。代わりに、
図6(A)及び
図6(B)に示すように、通信履歴記録装置である通信装置2は、他の通信装置2間で送受信される新たなデータフレームを受信するために、一連の受信処理をステップS201に戻す。
【0042】
このように、他の通信装置2間の通信履歴を記録する通信装置2を通信システム1に備えれば、例えば、車両故障の診断時等の際に、他の通信装置2間の通信履歴を検証することができる。
<第3の実施形態>
図7に示すように、データフレームの送信対象データ(或いは受信対象データ)は、現在の時刻を示す時刻データを含んでもよい。
図7は、第3の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【0043】
図3と
図7との比較から理解し得るように、第3の実施形態に従った通信装置2が生成するデータフレームは、“第1のデータ”のフィールド等に、現在の時刻を示す時刻データを含む。そこで、データフレームを送信する通信装置2は、ステップS101で時刻データを含む送信対象データが発生すると、ステップS102において、時刻データを含む送信データと、暗号化鍵と、ハッシュ関数とを用いて送信対象データに対する今回ハッシュ値を計算する。また、データフレームを受信した通信装置2は、ステップS213においてハッシュ関数と、時刻データを含む受信対象データとを用いてハッシュ値1を計算する。また、データフレームを受信した通信装置2は、公開鍵と、ハッシュ関数と、先頭のデータフレームが含む今回ハッシュ値とを用いて、ハッシュ値2を計算する。
【0044】
このように、送信対象データ(或いは受信対象データ)に現在時刻を示す時刻データを含めれば、データフレームの送信側及び受信側の通信装置2が計算する今回ハッシュ値は、前回ハッシュ値と一致しにくくなる。したがって、第3の実施形態に従った通信装置2によれば、ステップS210等においてデータフレームの送信順序をより特定しやすくすることができる。
<第4の実施形態>
図8に示すように、第4の実施形態に従った通信装置2が生成するデータフレームは、誤り検出符号を含まなくてもよい。
図8は、第4の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
図9は、第4の実施形態に従った通信装置が実行する送信処理の例示的フローを示す図である。
図10(A)及び
図10(B)は、第4の実施形態に従った通信装置が実行する受信処理の例示的フローを示す図である。
【0045】
図3と
図8との比較から理解し得るように、第4の実施形態に従った通信装置2が生成するデータフレームは、誤り検出符号を含まない。そこで、
図9に示すように、データフレームを送信する通信装置2は、誤り検出符号を計算するステップS105の処理を実行しない。また、データフレームを送信する通信装置2は、ステップS106Aにおいて、誤り検出符号を含まないデータフレームを生成する。
【0046】
また、
図10(A)及び
図10(B)に示すように、データフレームを受信した通信装置2は、ステップS202Aにおいて、受信したデータフレームから受信対象データ及び今回ハッシュ値を抽出する。また、ステップS203Aにおいて、通信装置2は、ハッシュ関数と、受信したデータフレームが含む受信対象データとを用いて、ハッシュ値1を計算する。さらにステップS203Aにおいて、通信装置2は、公開鍵と、ハッシュ関数と、受信したデータフレームが含む今回ハッシュ値とを用いて、ハッシュ値2を計算する。そして、ステップS204Aにおいて、通信装置2は、ハッシュ値1とハッシュ値2とが一致するか否かを判定する。ハッシュ値1とハッシュ値2とが一致しないと判定する場合(ステップS204Aで“NO”)、ステップS205において、通信装置2は、受信されたデータフレームを破棄する。一方、ハッシュ値1とハッシュ値2とが一致すると判定する場合(ステップS204Aで“YES”)、通信装置2は、ステップS206へ進む。以降の処理は、第1の実施形態に従った通信装置2が行う受信処理と同様である。
【0047】
このように、第4の実施形態に従った通信装置2が生成するデータフレームは、誤り検出符号を含まず、該データフレームを受信した通信装置2は、誤り検出符号の代わりにハッシュ値を用いてデータフレームの整合性を検証する。したがって、第4の実施形態に従った通信装置によれば、誤り検出符号を計算する処理時間を短縮することができる。また、
図3と
図8との比較から理解し得るように、第4の実施形態に従ったデータフレームでは、誤り検出符号に代わって、送信対象データ(或いは受信対象データ)を追加することができる。
<第5の実施形態>
図11に示すように、データフレームに含まれる今回ハッシュ値及び前回ハッシュ値の各大きさは、データフレームを構成する最小データ単位の半分であってもよい。
図11は、第5の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【0048】
図3と
図11との比較から理解し得るように、第5の実施形態に従った通信装置2が生成するデータフレームでは、該データフレームを構成する最小データ単位の半分を前回ハッシュ値及び今回ハッシュ値に夫々割り当てる。具体的には、例えば、CANに準拠したデータフレームでは、8バイトのデータフレームを構成する最小データ単位1バイトの半分の4ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられる。この結果、データフレームで送受信可能なデータ数は、
図3に示すような”データ1”~“データ5”に加えて
図11に示すような“データ6”を増やすことができる。
【0049】
なお、例えば、CAN FDに準拠したデータフレームでは、64バイトのデータフレームを構成する最小データ単位1バイトの半分の4ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。また、例えば、車載イーサネットに準拠したデータフレームでは、46バイトのデータフレームを構成する最小データ単位1バイトの半分の4ビットが今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。
【0050】
このように、第5の実施形態によれば、データフレームで送受信可能なデータ数を増やすことができる。
<第6の実施形態>
図12に示すように、今回ハッシュ値及び前回ハッシュ値の各大きさは、データフレームを構成する最小データ単位の2倍以上であってもよい。
図12は、第6の実施形態に従った通信装置が生成するデータフレームの構成例を示す図である。
【0051】
図3と
図12との比較から理解し得るように、第6の実施形態に従った通信装置2が生成するデータフレームでは、該データフレームを構成する最小データ単位の2倍以上を前回ハッシュ値及び今回ハッシュ値に夫々割り当てる。具体的には、例えば、CANに準拠したデータフレームでは、8バイトのデータフレームを構成する最小データ単位1バイトの3倍(3バイト)が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられる。この場合、データフレームで送受信可能なデータ数は1つ(全部で1バイト)である。
【0052】
なお、例えば、CAN FDに準拠したデータフレームでは、64バイトのデータフレームを構成する最小データ単位1バイトの8倍(8バイト)が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。この場合、データフレームで送受信可能なデータ数は55個(全部で55バイト)である。また、例えば、車載イーサネットに準拠したデータフレームでは、46バイトのデータフレームを構成する最小データ単位1バイトの8倍(8バイト)が今回ハッシュ値及び前回ハッシュ値に夫々割り当てられてもよい。この場合、データフレームで送受信可能なデータ数は29個(全部で29バイト)である。
【0053】
このように、第6の実施形態によれば、データフレームを構成するハッシュ値のデータ数を増やすことで、通信の安全性を高めることができる。
【符号の説明】
【0054】
1 通信システム
2 通信装置
3 通信線
21 制御部
22 記憶部
23 通信モジュール
24 バス
211 ハッシュ値処理部
212 誤り検出符号計算部
213 データフレーム生成部
214 誤り検出部
215 データフレーム処理部