(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-25
(45)【発行日】2023-05-08
(54)【発明の名称】メッセージの特徴を推定する方法および情報処理装置
(51)【国際特許分類】
H04L 43/08 20220101AFI20230426BHJP
H04L 12/22 20060101ALI20230426BHJP
H04L 12/28 20060101ALI20230426BHJP
H04L 12/66 20060101ALI20230426BHJP
【FI】
H04L43/08
H04L12/22
H04L12/28 100A
H04L12/66
(21)【出願番号】P 2019178794
(22)【出願日】2019-09-30
【審査請求日】2022-06-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(72)【発明者】
【氏名】矢嶋 純
(72)【発明者】
【氏名】森川 郁也
(72)【発明者】
【氏名】長谷部 高行
【審査官】佐々木 洋
(56)【参考文献】
【文献】国際公開第2018/105330(WO,A1)
【文献】特開2019-126004(JP,A)
【文献】特開平7-321783(JP,A)
【文献】特開2018-182725(JP,A)
【文献】特開2018-152745(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/00-12/66
H04L 41/00-101/695
(57)【特許請求の範囲】
【請求項1】
ネットワーク内で送信されるメッセージの特徴を推定する推定方法であって、
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを参照し、
各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算し、
各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントし、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新し、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する
ことを特徴とする推定方法。
【請求項2】
前記第2の変数は、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否か、及び、イベントの発生時以外の期間において当該部分領域に格納される値がイベント発生時以外に格納されるべき値であるか否かを表す
ことを特徴とする請求項1に記載の推定方法。
【請求項3】
前記第1の変数および前記第2の変数の初期状態はそれぞれ第1の状態であり、
処理対象の受信メッセージとその直前に受信した同じ識別子を有する受信メッセージとの間の受信間隔が前記送信周期より短いときに、各部分領域に対して設けられている第1の変数をそれぞれ第2の状態に更新し、
前記受信間隔が前記送信周期より短く、且つ、前記処理対象の受信メッセージ中の第1の部分領域の値が最初の受信メッセージ中の第1の部分領域の値と一致するときに、前記第1の部分領域に対して設けられている第2の変数を第2の状態に更新し、
前記受信間隔が前記送信周期より長いときに、各部分領域に対して設けられている第1の変数および第2の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表し、且つ、前記少なくとも1つの部分領域のパターン数が2以上であるときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に特定の値が設定される部分領域を含む、と推定する
ことを特徴とする請求項1に記載の推定方法。
【請求項4】
前記第1の変数および前記第2の変数の初期状態はそれぞれ第1の状態であり、
処理対象の受信メッセージとその直前に受信した同じ識別子を有する受信メッセージとの間の受信間隔が前記送信周期より短いときに、各部分領域に対して設けられている第1の変数をそれぞれ第2の状態に更新し、
前記受信間隔が前記送信周期より短く、且つ、前記処理対象の受信メッセージ中の第1の部分領域の値がその直前の受信メッセージ中の第1の部分領域の値と一致するときに、前記第1の部分領域に対して設けられている第2の変数を第2の状態に更新し、
前記受信間隔が前記送信周期より長いときに、各部分領域に対して設けられている第1の変数および第2の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表すときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に値が変化する部分領域を含む、と推定する
ことを特徴とする請求項1に記載の推定方法。
【請求項5】
前記第2の変数は、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否か、及び、イベントの発生時以外の期間において当該部分領域に格納される値がイベント発生時以外に格納されるべき値であるか否かを表し、
前記受信間隔が前記送信周期と対応し、且つ、前記処理対象の受信メッセージ中の第2の部分領域の値がイベント発生時以外に格納されるべき値と異なるときに、前記第2の部分領域に対して設けられている第2の変数を第2の状態に更新する
ことを特徴とする請求項3または4に記載の推定方法。
【請求項6】
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを参照し、
各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算し、
各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントし、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新し、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する
処理をコンピュータに実行させるプログラム。
【請求項7】
ネットワーク内で送信されるメッセージの特徴を推定する情報処理装置であって、
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを保存する保存部と、
前記通信ログを参照して、各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算する受信間隔計算部と、
前記通信ログを参照して、各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントするカウンタと、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新する更新部と、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する推定部と、
を備える情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワーク内で送信されるメッセージの特徴を推定する方法および情報処理装置に係わる。
【背景技術】
【0002】
自動車の車載ネットワークにおいて、CAN(Controller Area Network)と呼ばれるネットワーク技術が使用されることがある。CANを使用するネットワークにおいては、各ノードにECU(electronic control unit)が実装される。
【0003】
ECUから送信されるメッセージには、識別情報(ID)が付与されている。このメッセージは、ネットワーク内のECUにブロードキャストされる。ここで、各ECUは、自分が取得すべきメッセージのIDを認識している。そして、各ECUは、受信メッセージのIDをチェックすることにより、必要なメッセージを取得する。
【0004】
上記構成のCANシステムにおいて、悪意ある第3者によりECUが乗っ取られ、そのECUから悪意あるメッセージが出力される攻撃が行われることがある。例えば、CANシステムにおいて使用されるIDが、悪意あるメッセージに付与される。そうすると、そのメッセージを受信したECUは、意図しない処理を実行するおそれがある。よって、ネットワークへの攻撃または不正なアクセスを検知する方法が検討されている。
【0005】
なお、多様で変化し得る攻撃に適応して攻撃フレームを検知し得るセキュリティ装置が提案されている(例えば、特許文献1)。複数の電子制御ユニット(ECU)が通信するネットワークにおいて、ネットワークから受信したフレームが不正か否かを判定する情報処理装置が提案されている(例えば、特許文献2)。車載ネットワークを流れるデータフレームを処理する情報処理方法が提案されている(例えば、特許文献3)。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2017-085663号公報
【文献】特開2019-008618号公報
【文献】WO2018/105330
【発明の概要】
【発明が解決しようとする課題】
【0007】
CANシステムにおいては、メッセージに付与される識別子毎に、送信タイプ(又は、送信パターン)が異なることがある。送信タイプとしては、例えば、下記の3つが想定される。
(1)周期メッセージ
(2)非周期メッセージ
(3)イベント送信付き周期メッセージ
なお、周期メッセージは、あるECUにより一定の周期で送信される。イベント送信付き周期メッセージは、通常は、一定の周期で送信されるが、あるイベントが発生したときには、そのイベントの発生に起因して送信される。非周期メッセージは、周期メッセージまたはイベント送信付き周期メッセージ以外のメッセージである。
【0008】
そして、攻撃検知においては、識別子ごとにメッセージの送信タイプが分かっていることが好ましい。加えて、攻撃検知においては、受信フレーム内のどの領域にどのような形式(または、属性)のデータが書き込まれているのかを認識できることが好ましい。
【0009】
しかし、従来の技術では、送信タイプの判定およびフレーム内の各データの形式の判定を効率よく実行できない。一例としては、2つの判定処理が独立して実行される。また、従来の技術では、イベント送信付き周期メッセージを認識した攻撃検知を行っていない。したがって、従来の技術の攻撃検知方法は、改善の余地がある。
【0010】
本発明の1つの側面に係わる目的は、ネットワーク内で送信されるメッセージの特徴を精度よく推定する方法を提供することである。
【課題を解決するための手段】
【0011】
本発明の1つの態様の推定方法は、ネットワーク内で送信されるメッセージの特徴を推定する。この推定方法は、各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを参照し、各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算し、各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントし、各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新し、前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する。
【発明の効果】
【0012】
上述の態様によれば、ネットワーク内で送信されるメッセージの特徴を精度よく推定できる。
【図面の簡単な説明】
【0013】
【
図1】推定装置が使用されるネットワークの一例を示す図である。
【
図2】イベント送信付き周期メッセージについて説明する図である。
【
図3】メッセージを伝送するフレームのフォーマットの例を示す図である。
【
図4】推定装置が実装されるECUのハードウェア構成の一例を示す図である。
【
図5】メッセージ内に格納される各データの形式の例を示す図である。
【
図6】本発明の実施形態に係わる推定装置の一例を示す図である。
【
図9】本発明の実施形態に係わる推定処理の一例を示すフローチャートである。
【
図11】前処理の一例を示すフローチャートである。
【
図12】推定処理の一例を示すフローチャートである。
【
図13】第2の実施形態の前処理を示すフローチャートである。
【
図14】第2の実施形態の推定処理を示すフローチャートである。
【
図15】実施例1および実施例2で参照される通信ログの例を示す図である。
【
図16】実施例1における更新結果を示す図(その1)である。
【
図17】実施例1における更新結果を示す図(その2)である。
【
図18】実施例1における更新結果を示す図(その3)である。
【
図19】実施例1における更新結果を示す図(その4)である。
【
図20】実施例2における更新結果を示す図(その1)である。
【
図21】実施例2における更新結果を示す図(その2)である。
【
図22】実施例2における更新結果を示す図(その3)である。
【発明を実施するための形態】
【0014】
図1は、本発明の実施形態に係わる推定装置が使用されるネットワークの一例を示す。
図1に示すネットワーク100は、複数のECU(ECU0~ECUk)を備える。複数のECUは、バスを介して互いに接続されている。そして、この実施例では、複数のECUは、CAN(Controller Area Network)システムを構成する。
【0015】
各ECUは、バスを介してメッセージを送信できる。このメッセージは、ネットワーク100の全てのECUにブロードキャストされる。このとき、メッセージは、送信元ノードにも到着する。また、各メッセージには、識別子(ID)が付与されている。ここで、各ECUは、自分が取得すべきメッセージのIDを認識している。そして、各ECUは、受信メッセージのIDをチェックすることにより、必要なメッセージを取得する。なお、各ECUは、「通信装置」の一例である。
【0016】
上記ネットワーク100において、複数のECUの中の1つに推定装置が実装される。
図1に示す実施例では、ECU0に推定装置が実装されている。この場合、推定装置が実装されるECUは、「情報処理装置」の一例である。また、推定装置は、いずれかのECUに実装されるのではなく、コンピュータ等の情報処理装置に実装されてもよい。さらに、車外のコンピュータにおいて当該技術を利用して特徴を推定し、推定した特徴を用いて、車内のECUまたはコンピュータ、あるいは車外のコンピュータにて攻撃検知を行っても良い。
【0017】
推定装置は、ネットワーク100内を伝送されるメッセージの送信タイプおよびメッセージ中に含まれるデータの形式(または、属性)を推定する。なお、推定装置は、攻撃検知装置と共に使用されることがある。この場合、攻撃検知装置は、推定装置の推定結果を利用して、受信メッセージが攻撃メッセージであるか否かを判定する。また、推定装置および攻撃検知装置は、同じECU内に実装されてもよい。
【0018】
ECU1~ECUkは、指定された識別子を含むメッセージを送信する。
図1に示す例では、ECU1は、識別情報ID_Aを含むメッセージを送信し、ECU2は、識別情報ID_Bを含むメッセージを送信し、ECU3は、識別情報ID_Cを含むメッセージを送信する。ここで、各メッセージは、ネットワーク100内でブロードキャストされる。よって、推定装置が実装されるECU(ここでは、ECU0)は、すべてのメッセージを受信できる。なお、
図1のタイミングチャートは、ECU1~ECU3から送信されるメッセージがECU0に到着する様子を示している。
【0019】
ネットワーク100において送信されるメッセージは、識別子ごとに、下記のいずれかに分類される。
(1)周期メッセージ
(2)非周期メッセージ
(3)イベント送信付き周期メッセージ
【0020】
周期メッセージは、あるECUにより一定の周期で送信される。例えば、ID=0x123を含むメッセージは10m秒間隔で送信され、ID=0x456を含むメッセージは20m秒間隔で送信される。
【0021】
イベント送信付き周期メッセージは、通常は、一定の周期で送信されるが、あるイベントが発生したときには、そのイベントの発生に起因して送信される。
図2に示す例では、メッセージは、通常時には、周期T1で送信される。具体的には、メッセージM1~M4は、周期T1で送信されている。但し、所定のイベント(例えば、ユーザの指示またはアラームの検知など)が発生すると、そのイベントの発生に起因してメッセージが送信される。
図2では、イベントの発生に起因してメッセージM5が送信されている。このとき、メッセージM4の送信タイミングとメッセージM5の送信タイミングとの差分T2は、周期T1より短くなる。この後、メッセージM6~M7が送信される。このとき、メッセージの送信間隔は、T1に戻る。
【0022】
なお、イベントの発生に起因して送信されるメッセージの所定の領域には、特定の値が設定される。例えば、
図2に示すケース1では、メッセージM1~M4、M6~M7の所定の領域には「1」が設定されているが、メッセージM5の同じ領域には「3」が設定される。或いは、イベントの発生に起因して、メッセージの所定の領域の値が変化する。例えば、ケース2では、メッセージM1~M4の所定の領域には「1」が設定され、メッセージM5以降の同じ領域には「7」が設定されている。
【0023】
なお、車載ネットワークにおいては、複数のECUは、車両を制御するために使用される。例えば、ID=0x123を含むメッセージは、アクセル開度を表すデータを伝送する。また、ID=0x456を含むメッセージは、ブレーキ踏込み角度を表すデータを伝送する。
【0024】
図3は、メッセージを伝送するフレームのフォーマットの例を示す。標準仕様のフレームは、SOF(Start of Frame)、調停(arbitration)フィールド、コントロールフィールド、データフィールド、CRCフィールド、ACKフィールド、およびEOF(End of Frame)を含む。調停フィールドは、IDおよびRTR(Remote Transmission Request)を含む。IDは、メッセージを識別するための識別情報を表す。コントロールフィールドは、IDE(Identifier Extension)、予約ビット、DLC(Data Length Code)を含む。CRCフィールドは、CRCシーケンスおよびCRCデリミタを含む。ACKフィールドは、ACKスロットおよびACKデリミタを含む。なお、
図3において各情報要素に対して表記されている値は、ビット長を表す。例えば、IDの長さは11ビットであり、データフィールドの長さは0~64ビットの可変長である。
【0025】
標準仕様のフレームと同様に、拡張仕様で使用されるフレームも、SOF、調停フィールド、コントロールフィールド、データフィールド、CRCフィールド、ACKフィールド、EOFを含む。ただし、拡張仕様では、より多くのビット数で識別情報が表される。
【0026】
以下の記載では、標準仕様のフレームを利用してメッセージが伝送されるものとする。ただし、本発明の実施形態に係わる推定方法は、拡張仕様のフレームを利用してメッセージが伝送されるケースにも適用される。また、本発明の実施形態に係わる推定方法は、CAN-FDと呼ばれる規格にも対応可能である。
【0027】
図4は、推定装置が実装されるECUのハードウェア構成の一例を示す。ECU200は、この例では、CANトランシーバ201、CANコントローラ202、処理回路203を含む。処理回路203は、プロセッサ204およびメモリ205を含む。
【0028】
CANトランシーバ201は、
図3に示すフレームを送信および受信する機能を備える。CANコントローラ202は、CANトランシーバ201が受信したフレームからデータを抽出すると共に、そのフレームの受信時刻を測定する。なお、CANコントローラ202は、受信フレームに対してCRCチェックを実行してもよい。また、CANコントローラ202は、送信フレームにデータを格納することができる。プロセッサ204は、メモリ205に格納されているプログラムを実行することにより、メッセージの送信タイプの推定およびメッセージ中に含まれるデータの形式の推定を実現する。この場合、このプログラムは、後述するフローチャートの手順を記述している。
【0029】
本発明の実施形態に係わる推定装置は、ネットワークへの攻撃を検知する攻撃検知装置が利用する情報を生成する。すなわち、推定装置は、識別子ごとにメッセージの送信タイプを推定し、また、識別子ごとにメッセージ中に含まれるデータの形式を推定する。
【0030】
ここで、攻撃検知は、下記の前提条件の下で行われるものとする。
(1)識別子ごとに検知を行う。
(2)検知対象の識別子を含むメッセージが、周期メッセージ、イベント送信付き周期メッセージ、または非周期メッセージのいずれであるのかは不明である。
(3)ただし、周期メッセージまたはイベント送信付き周期メッセージの送信周期は、既知であるか、検出可能である。
(4)データ領域にどのような形式のデータが格納されているか(例えば、「第5ビットから8ビット分の領域に固定値が格納されている」)は不明である。
【0031】
これらの前提条件の下では、攻撃検知装置(または、検知者)は、攻撃検知の前に下記の事前準備を行う。
準備処理1:事前に取得した通信ログに基づいて、識別子ごとにメッセージの送信タイプを推定する。
準備処理2:準備手順1で得られる送信タイプに対応する検知方法を準備する。
【0032】
検知方法としては、メッセージの送信周期を利用して、送信周期から外れて到着したメッセージを攻撃メッセージと判定する方法が提案されている。また、メッセージ内のデータの振舞いに基づいて攻撃メッセージを検知する方法も提案されている。非周期メッセージまたはイベント送信付き周期メッセージに対しては、メッセージ内のデータの振舞いに基づく方法が有効である。
【0033】
データの振舞いに基づく検知手法においては、例えば、特定の識別子を含むメッセージのデータ領域の先頭の8ビットが固定値である場合、受信メッセージの先頭の8ビットの値がその固定値と異なるときは、そのメッセージが攻撃メッセージであると判定される。或いは、順番に送信されるメッセージの所定の領域の値が所定のルール(例えば、1ずつインクリメントされる)に従って変化する場合、受信メッセージがそのルールに従わなければ、そのメッセージが攻撃メッセージであると判定される。他にも多くのルールが存在し、受信メッセージがそれぞれのルールから逸脱したときに、その受信メッセージが攻撃メッセージであると判定される。
【0034】
よって、データの振舞いに基づく検知手法を実行する場合、識別子ごとに、データ領域内の何ビット目から何ビット目までの間にどのような形式のデータが格納されているのかを事前に知っておく必要がある。具体的には、攻撃検知を行う前に、ネットワークの通信ログに基づいて、メッセージ内にどのような形式のデータが格納されているのかを調査する必要がある。すなわち、検知者は、攻撃検知を行う前に、下記の2つの処理を行う。
処理A:ネットワークの通信ログに基づいて、識別子ごとに、メッセージの送信タイプを推定する。
処理B:ネットワークの通信ログに基づいて、識別子ごとに、メッセージのデータ領域内にどのような形式のデータが含まれているのかを推定する。
【0035】
図5は、メッセージ内に格納される各データの形式の例を示す。この例では、先頭の16ビットのデータ形式が連続値であり、次の8ビットのデータ形式が固定値であり、最後の8ビットのデータ形式がチェックサムである。ここで、「連続値」は、ある受信メッセージに格納されている値とその次の受信メッセージに格納されている値との差分が所定の閾値より小さいデータを表す。例えば、所定の時間間隔(例えば、10m秒)で検出されるハンドル角度の変化量は、所定値より大きくなることはないと考えられる。よって、ある受信メッセージから検出される値とその次の受信メッセージから検出される値との差分が閾値より大きいときは、攻撃が発生したと判定される。或いは、「固定値」が格納されている領域において他の値が検出されたときには、攻撃が発生したと判定される。
【0036】
ここで、処理B(即ち、メッセージのデータ領域内のどの位置にどのような形式のデータが格納されているのかの推定)については、例えば、文献Xまたは文献Yに記載されている。
文献X:Field Classification, Modeling and Anomaly Detection in Unknown CAN Bus Networks (Markovitz, Wool)(国際会議escar 2015)
文献Y:WO2018/105330
【0037】
文献Xに記載されている方法では、データのユニーク性を利用して3つの形式(固定値、マルチ値、連続値/センサ値)が識別される。また、文献Yに記載されている方法では、データのユニーク性およびデータの時系列変化に関する特徴量(分散など)を利用することで、5つの形式(固定値、カウンタ、連続値、チェックサム、ステータス(マルチ値))が識別される。
【0038】
しかし、文献Xまたは文献Yに記載されている方法では、イベント送信付き周期メッセージからイベント領域を検出することは困難である。なお、「イベント領域」は、この明細書では、イベント送信付き周期メッセージにおいてイベントの発生時に特定の値が設定される領域、又は、イベント送信付き周期メッセージにおいて通常時には固定値であるがイベントの発生時にはその値が変化する領域を意味する。また、文献Xまたは文献Yに記載されている方法では、上述した処理Bと同時または平行に、上述した処理Aを行うことは困難である。このため、攻撃検知の準備に要する時間が長くなってしまう。そこで、本発明の実施形態に係わる推定方法は、これらの問題を解決する機能を備える。
【0039】
<第1の実施形態>
図6は、本発明の実施形態に係わる推定装置の一例を示す。本発明の実施形態に係わる推定装置10は、通信ログデータベース11、制御部12、パターン数カウンタ13、受信間隔判定部14、変数更新部15、形式推定部16、途中結果格納部17、および最終結果推定部18を備える。なお、推定装置10は、
図6に示していない他の回路または機能を備えていてもよい。
【0040】
推定装置10は、複数のECUを含む通信ネットワークに接続される。そして、推定装置10は、各ECUから送信されるフレームを受信する。各フレームには、メッセージが格納されている。すなわち、推定装置10は、各ECUから送信されるメッセージを受信する。
図1に示す例では、ECU0が推定装置10として動作してもよい。この場合、推定装置10は、ECU1~ECUkから送信されるメッセージを受信する。あるいは、推定装置10は、複数のECUを含む通信ネットワークから取得した通信ログを分析する、外部の計算装置に実装されたコンピュータプログラムである。この場合、各ECUから送信された通信ログから1個ずつフレームのログを取得して処理を行う。
【0041】
推定装置10は、メッセージの送信タイプを識別する機能を備える。すなわち、推定装置10は、周期メッセージ、非周期メッセージ、又はイベント送信付き周期メッセージを識別する機能を備える。イベント送信付き周期メッセージは、
図2を参照して説明したように、通常時は一定の周期で送信されるが、所定のイベントが発生したときは、そのイベントの発生に起因して送信される。したがって、イベント送信付き周期メッセージは、通常時は一定の周期で送信されるが、イベントの発生時には、その周期より短い時間間隔で送信される。また、第1の実施形態において検出されるイベント送信付き周期メッセージは、イベントの発生時には、
図2に示すケース1のように、メッセージ中の所定の領域に特定の値が設定されるものとする。
【0042】
通信ログデータベース11には、推定装置10が受信するメッセージに係わる通信ログが保存される。通信ログには、
図7に示すように、メッセージの受信時刻、メッセージに含まれる識別子、およびメッセージのデータ領域に格納されているデータが記録される。なお、この実施例では、
図3に示すように、データ領域は64ビットである。よって、各メッセージに格納されるデータの長さは、最大で64ビットである。
【0043】
推定装置10は、通信ログデータベース11に保存されている通信ログを利用して、識別子ごとに、メッセージの送信タイプおよびメッセージに格納されているデータの特徴を推定する。なお、以下の説明では、特に断らない限り、推定対象の識別子に対する処理について記載する。
【0044】
制御部12は、所定のモニタ期間を指定する。そして、制御部12は、モニタ期間に対応する通信ログから、各メッセージの受信時刻を表す情報およびデータ領域に格納されているデータを取得する。以下の記載では、i番目に推定装置10に到着したメッセージの受信時刻を「t(i)」と表記し、そのメッセージに格納されているデータを「Data(i)」と表記することがある。
【0045】
ここで、推定装置10は、各メッセージに格納されているデータの振舞いに基づく攻撃検知を実現するための情報を生成する。このため、推定装置10は、各メッセージのデータ領域を解析する。ただし、推定装置10にとって、データ領域内のどの位置にどのような長さのデータが格納されているのかは未知である。よって、推定装置10は、すべての格納パターンについてデータの値を解析する。
【0046】
なお、以下の記載では、64ビットのデータ領域内に1または複数の個別データが格納されるとき、各個別データが格納される領域を「部分領域」と呼ぶことがある。例えば、
図5に示す実施例では、データ領域は、ハンドル角度データを格納する16ビットの部分領域、固定データを格納する8ビットの部分領域、およびチェックサムデータを格納する8ビットの部分領域を含んでいる。
【0047】
推定装置10は、各部分領域に格納されているデータを解析する。ここで、個別データを格納する部分領域の開始位置および長さは未知である。よって、推定装置10は、すべての格納パターンについてデータの値を解析する。例えば、部分領域の長さが1ビットである場合、第1ビットから開始される部分領域、第2ビットから開始される部分領域・・・第64ビットから開始される部分領域、が存在し得る。すなわち、部分領域の長さが1ビットである場合、64種類の部分領域が存在し得る。また、部分領域の長さが2ビットである場合、第1ビットから開始される部分領域、第1ビットから開始される部分領域・・・第63ビットから開始される部分領域、が存在し得る。すなわち、部分領域の長さが2ビットである場合、63種類の部分領域が存在し得る。以下、同様に、部分領域の長さがkビットである場合、「64+1-k」種類の部分領域が存在し得る。よって、合計で2080パターンの部分領域が存在することになる。
【0048】
このように、各部分領域は、データ領域内での開始位置および長さの組合せで識別される。よって、以下の記載では、開始位置Pおよび長さLで識別される部分領域またはその部分領域に格納されている値を「Data(P,L)」と表記することがある。例えば、
図8において、ハンドル角度データは、データ領域内の第1ビットから格納され、その長さは16ビットである。よって、ハンドル角度データが格納されている部分領域は「Data(1,16)」で表される。また、固定データは、データ領域内の第17ビットから格納され、その長さは8ビットである。よって、固定データが格納されている部分領域は「Data(17,8)」で表される。
【0049】
パターン数カウンタ13は、各部分領域についてパターン数をカウントする。即ち、2080通りの部分領域それぞれについてパターン数がカウントされる。パターン数は、モニタ期間内に推定装置10に到着したメッセージにおいて現れる、異なる値の数を表す。例えば、全ての受信メッセージに同じ値が格納されているときは、パターン数は「1」である。また、10個の受信メッセージのうち、5個のメッセージに値Xが格納され、残りの5個のメッセージに値Yが格納されているときは、パターン数は「2」である。更に、10個の受信メッセージのうち、5個のメッセージに値Xが格納され、3個のメッセージに値Yが格納され、残りの2個のメッセージに値Zが格納されているときは、パターン数は「3」である。なお、以下の記載においては、部分領域Data(P,L)のパターン数を「DP(P,L)」と表記することがある。
【0050】
受信間隔判定部14は、各受信メッセージについて、当該メッセージの受信時刻と当該メッセージの直前のメッセージの受信時刻の差分を表す受信間隔を計算する。すなわち、i番目のメッセージに対して、受信時刻t(i)と受信時刻t(i-1)との差分を計算することにより受信間隔dt(i)が計算される。また、受信間隔判定部14は、各受信メッセージに対して送信周期と受信間隔dt(i)とを比較して、その比較結果を制御部12に通知する。
【0051】
変数更新部15は、各部分領域に対して、下記の3つの変数を管理する。即ち、2080通りの部分領域それぞれに対して各変数が管理される。なお、下記の送信間隔は、推定対象の識別子を含むメッセージの送信間隔を表す。
(1)メッセージの受信間隔が送信周期より短いか否かを表す変数s_f
(2)メッセージの受信間隔が送信周期と一致するか否かを表す変数p_f
(3)メッセージの受信間隔が所定のイベントの発生時以外の期間において送信周期と一致するか否かを表す変数f_f
なお、変数f_fは、メッセージの受信間隔が所定のイベントの発生時以外の期間において送信周期と一致するか否かを表すことに加えて、イベント発生時以外の期間にデータが一定であるか否かを表してもよい。すなわち、変数f_fは、メッセージの受信間隔が所定のイベントの発生時以外の期間において送信周期と一致するか否かを表すことに加えて、イベントの発生時以外の期間において部分領域に格納される値がイベント発生時以外に格納されるべき値であるか否かを表してもよい。そして、変数更新部15は、メッセージの受信間隔に基づいて、これらのメッセージを更新する。このとき、ある部分領域に係わる変数は、メッセージの受信間隔およびその部分領域の値に基づいて更新されることがある。これらの変数の初期値は、それぞれ「1」である。また、これらの変数は、いったん「0」に更新された後は、「1」に戻ることはない。なお、以下の記載では、開始位置Pおよび長さLで識別される部分領域に係わる変数をそれぞれ「s_f(P,L)」「p_f(P,L)」「f_f(P,L)」と表記することがある。
【0052】
形式推定部16は、各部分領域に格納されているデータの形式(または、属性)を推定する。このとき、形式推定部16は、格納されているデータの値、パターン数カウンタ13により得られるパターン数DP、および変数更新部15により更新された変数に基づいて、各部分領域に格納されているデータの形式を推定する。
【0053】
途中結果格納部17は、パターン数カウンタ13、受信間隔判定部14、変数更新部15および形式推定部16の処理結果を一時的に保存する。
【0054】
制御部12は、モニタ期間内のすべての通信ログについて処理が終了すると、終了通知を生成して最終結果推定部18に与える。そうすると、最終結果推定部18は、途中結果格納部17に保存されている処理結果を利用して、識別子ごとに、メッセージの送信タイプおよびメッセージに格納されているデータの形式を推定する。このとき、最終結果推定部18は、各部分領域についての推定結果に基づいて、メッセージの送信タイプおよびメッセージに格納されているデータの形式を推定する。
【0055】
図9は、本発明の実施形態に係わる推定処理の一例を示すフローチャートである。このフローチャートの処理は、指定されたモニタ期間および指定された識別子に対して実行される。
【0056】
S1において、推定装置10は、推定処理において使用する変数を初期化する。具体的には、全ての部分領域について、パターン数DP(P,L)が「ゼロ」に初期化される。また、全ての部分領域について、変数s_f、p_f、f_fがそれぞれ「1」に初期化される。
【0057】
各変数は、
図10に示す変数管理テーブルにより管理される。
図10において、部分領域を識別する2つの数字は、データ領域内の開始位置Pおよび長さLを表す。また、形式1~8については後で説明する。この変数管理テーブルは、例えば、途中経過格納部17に保存される。なお、変数管理テーブルは、
図10に示す変数に加えて、
図10に示していない他の変数を管理してもよい。
【0058】
S2において、推定装置10は、前処理を実行する。前処理は、各受信メッセージに対して、且つ、各受信メッセージ内の各部分領域に対して実行される。すなわち、推定装置10は、通信ログから1レコード分のデータを取り出す毎に、2080個の部分領域それぞれに対して前処理を実行する。
【0059】
S3において、推定装置10は、推定処理を実行する。推定処理は、各部分領域に格納されているデータの形式を推定する処理、および各部分領域のデータ形式に基づいてメッセージの送信タイプを推定する処理を含む。
【0060】
S4において、推定装置10は、重複解消処理を実行する。重複解消処理は、部分領域に格納されているデータの形式を確定させる処理を含む。
【0061】
図11は、前処理の一例を示すフローチャートである。この前処理は、
図9に示すS2に相当する。よって、この前処理は、各部分領域に対して実行される。以下の記載では、前処理が実行される部分領域を「対象部分領域」と呼ぶことがある。
【0062】
S11において、形式判定部16は、対象部分領域に格納されているデータの形式を推定する。この実施例では、データは、以下の10個の形式のうちのいずれか1つの該当するものとする。
形式1:固定値
形式2:チェックサム(計算式)
形式3:カウンタ
形式4:単調増加
形式5:符号なし連続値
形式6:符号付き連続値
形式7:チェックサム(一様)
形式8:マルチ値
形式9:イベント(特定値:イベント発生時に特定の値が設定される)
形式10:イベント(変化:イベント発生時に値が変化する)
なお、形式10は、後述する第2の実施形態において検出される。そして、S11においては、形式判定部16は、対象部分領域に格納されているデータの形式が上述の形式1~4のいずれかに該当する可能性があるか否かを判定する。そして、形式判定部16は、対象部分領域に格納されているデータの形式がある形式に該当し得るときは、その形式に対応するフラグに「1」が設定され、そうでないときは、その形式に対応するフラグに「0」が設定される。
【0063】
このとき、データ形式の推定において下記の情報が参照される。
(1)データの出現パターン数
(2)データを符号なしデータとみなしたときのデータの変化量の分散値
(3)データを符号付きデータとみなしたときのデータの変化量の分散値
(4)チェックサムの計算式(どの部分の値に基づいて、どのように計算するのかを表す情報)
(5)データの一様分布性
(6)直前のメッセージの値との差分値
S11においては、下記の処理が実行される。
(1)データの出現パターン数が2以上になったときは、形式1に対応する固定値可能性フラグに「0」を設定する。
(2)チェックサム計算の結果が対象部分領域に格納されている値と一致しないときは、形式2に対応するチェックサム(計算式)可能性フラグに「0」を設定する。なお、チェックサムは、通常、nバイト(nは、整数)のデータに対して実行されるので、データ長がこの条件に該当しないときは、即座に、チェックサム(計算式)可能性フラグに「0」を設定してもよい。
(3)直前のメッセージの値との差分値がプラス方向およびマイナス方向の双方に変化することあるときは、形式3に対応するカウンタ可能性フラグに「0」を設定すると共に、形式4に対応する単調増加可能性フラグにも「0」を設定する。
(4)直前のメッセージの値との差分値が全てのメッセージについてプラス方向またはマイナス方向のいずれか一方向であるが、差分値の大きさが一定以上であるときは、形式4に対応する単調増加可能性フラグに「0」を設定する。
(5)直前のメッセージの値との差分値がゼロ以外の一定値ではないときは、形式3に対応するカウンタ可能性フラグに「0」を設定する
(6)直前のメッセージの値との差分値差分値がゼロ以外の一定値であるときは、形式4に対応する単調増加可能性フラグに「0」を設定する。
【0064】
なお、可能性フラグが「0」である状態は、対象部分領域に格納されているデータが対応する形式に該当しないことを表す。換言すれば、可能性フラグが「1」である状態は、対象部分領域に格納されているデータが対応する形式に該当し得ることを表す。このように、S11においては、対象部分領域に格納されているデータが形式1~4に該当し得るか否かが判定される。
【0065】
S12~S13において、パターン数カウンタ13は、必要に応じて、対象部分領域のパターン数DPを更新する。具体的には、新たな受信メッセージの対象部分領域の値が、過去の受信メッセージの対処部分領域に格納されていたいずれの値にも一致しないときには、パターン数DPが1だけインクリメントされ、また、その新たな値が保存される。なお、パターン数DPが3以上であるときは、メモリ領域を節約するために、その新たな値を保存しなくてもよい。
【0066】
S14において、受信間隔判定部14は、メッセージの受信間隔dtを計算する。すなわち、処理対象のメッセージの受信時刻と直前に受信したメッセージの受信時刻との差分が計算される。なお、受信間隔は、すべての部分領域に対して同じなので、受信間隔判定部14は、各部分領域に対して受信間隔を計算する必要はない。
【0067】
S15において、受信間隔判定部14は、受信間隔dtが送信周期Tより小さいか否かを判定する。なお、S15の判定において、送信周期Tは、送信周期Tよりも所定量th1だけ小さい値(T-th1)を意味する。そして、受信間隔dtが送信周期Tより小さいときは、S16において、変数更新部15は、変数p_fを「0」に更新する。
【0068】
S17において、変数更新部15は、対象部分領域に格納されている値(Data(P,L))が最初の受信メッセージの対象部分領域に格納されていた値(d(1))と一致するか否かを判定する。ここで、S17の処理は、S15の判定が「Yes」であったときに実行される。すなわち、受信間隔dtが送信周期Tより小さく、且つ、対象部分領域に格納されている値(Data(P,L))が最初の受信メッセージの対象部分領域に格納されていた値(d(1))と一致するときに、S17の判定が「Yes」となる。そして、この状況は、「通常は、一定の周期で送信されるが、あるイベントが発生したときには、そのイベントの発生に起因して特定の値が設定される」を満足しないことになる。よって、S17の判定が「Yes」となるときは、S18において、変数更新部15は、変数f_fを「0」に更新する。
【0069】
例えば、
図2に示すケース1において、メッセージM5のデータがメッセージM1のデータと一致する場合には、S17の判定が「Yes」となり、S18において変数f_fが「0」に更新される。一方、メッセージM5のデータがメッセージM1のデータと異なるときは、S17の判定が「No」となり、変数f_fは更新されない。
【0070】
S19において、受信間隔判定部14は、受信間隔dtが送信周期Tより大きいか否かを判定する。なお、S19の判定において、送信周期Tは、送信周期Tよりも所定量th2だけ大きい値(T-th2)を意味する。そして、受信間隔dtが送信周期Tより大きいときには、S20において、変数更新部15は、変数s_f、p_f、f_fをそれぞれ「0」に更新する。
【0071】
受信間隔dtが送信間隔Tと一致または略一致するとき(T-th1<dt<T+th2)には、S21において、変数更新部15は、対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されていた値と一致するか否かを判定する。ここで、S21の処理は、実質的に、S17と同じである。そして、受信間隔dtが送信間隔Tと一致または略一致し、且つ、対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されていた値と異なるときは、変数更新部15は、S22において、変数f_fを「0」に更新する。一方、S21において対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されていた値と一致するときは、変数s_f、p_f、f_fは保持される。
【0072】
このように、受信間隔dtが送信周期Tより小さく、且つ、対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されている値と一致するときに、変数f_fが「0」に更新される。また、受信間隔dtが送信間隔Tと一致または略一致し、且つ、対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されていた値と異なるときも、変数f_fを「0」に更新してもよい。
【0073】
なお、ある部分領域に対応する変数が「0」である状態は、その部分領域を含むメッセージの送信タイプが、その変数に対応する送信タイプに該当しないことを表す。換言すれば、モニタ期間の全ての受信メッセージに対して前処理が終了したときに、ある部分領域に対応する変数が「1」である状態は、その部分領域を含むメッセージが、その変数に対応する送信タイプで送信されている可能性があると推定される。
【0074】
図12は、推定処理の一例を示すフローチャートである。この推定処理は、
図9に示すS3に相当する。なお、推定処理は、
図11に示す前処理が終了した後に実行される。したがって、推定処理が実行されるときには、各部分領域について、パターン数DPおよび変数s_f、p_f、f_fの更新は終了している。
【0075】
形式推定部16は、各部分領域についてS31~S36の処理を実行する。よって、推定処理が実行される部分領域「対象部分領域」と呼ぶことがある。
【0076】
S31において、形式推定部16は、対象部分領域に対して設けられているパターン数DPおよび変数s_f、p_f、f_fが下記の3つの条件を満たしているか否かを判定する。
(1)パターン数DPは「2」である
(2)変数s_fは「1」である
(3)変数f_fは「1」である
なお、条件(1)は、モニタ期間内に受信するメッセージの対象部分領域に、2種類の値が現れたことを表す。条件(2)は、モニタ期間内に、少なくとも1回、送信周期より短い受信間隔でメッセージが到着したことを表す。条件(3)は、受信メッセージがイベント送信付き周期メッセージである可能性があることを表す。
【0077】
上記3つの条件を満足するときは、形式推定部16は、S32において、対象部分領域を含むメッセージの送信タイプが「イベント送信付き周期メッセージ(特定値)」であると推定する。一方、上記3つの条件を満足しないときは、形式推定部16の処理はS33に進む。
【0078】
S33において、形式推定部16は、対象部分領域に対して設けられている変数p_fが「1」であるか否かを判定する。なお、変数p_fが「1」である状態は、すべての受信メッセージの受信間隔が送信周期Tと一致または略一致したときに得られる。そして、変数p_fが「1」であるときは、形式推定部16は、S34において、対象部分領域を含むメッセージの送信タイプが「周期メッセージ」であると推定する。一方、変数p_fが「1」でないときは、形式推定部16は、S35において、対象部分領域を含むメッセージの送信タイプが「非周期メッセージ」であると推定する。
【0079】
S36において、形式推定部16は、対象部分領域に格納されているデータの形式が上述した形式5~8のいずれかに該当し得るか否かを判定する。具体的には、下記の処理が実行される。
(1)対象部分領域に格納されているデータを「符号なしデータ」とみなしたときのデータの変化量の分散値が一定値を超えているときは、形式5に対応する符号なし連続値可能性フラグに「0」を設定する。
(2)対象部分領域に格納されているデータを「符号付きデータ」とみなしたときのデータの変化量の分散値が一定値を超えているときは、形式6に対応する符号付き連続値可能性フラグに「0」を設定する。
(3)対象部分領域に格納されているデータが一様に分布していないときは、形式7に対応するチェックサム(一様)可能性フラグに「0」を設定する。
(4)形式8に対応するマルチ値可能性フラグを「1」に設定する。或いは、形式推定部16は、マルチ値可能性フラを使用しなくてもよい。
【0080】
なお、可能性フラグが「0」である状態は、対象部分領域に格納されているデータが対応する形式に該当しないことを表す。換言すれば、可能性フラグが「1」である状態は、対象部分領域に格納されているデータが対応する形式に該当し得ることを表す。このように、S36においては、対象部分領域に格納されているデータが形式5~8に該当し得るか否かが判定される。
【0081】
このように、S31~S36において、各部分領域について、データ形式および送信タイプが推定される。この後、形式推定部16は、S37において、メッセージの送信タイプを推定する。一例としては、1以上の部分領域に対してS31の判定が「Yes」であったときは、形式推定部16は、メッセージの送信タイプが「イベント送信付き周期メッセージ」であると推定する。また、S31において「Yes」と判定された部分領域が存在せず、且つ、1以上の部分領域に対してS33の判定が「Yes」であったときには、形式推定部16は、メッセージの送信タイプが「周期メッセージ」であると推定する。上記2つのケースに該当しないときは、形式推定部16は、メッセージの送信タイプが「非周期メッセージ」であると推定する。
【0082】
上述の前処理および推定処理により、各部分領域について、データ形式の候補としてありえないものが除去された結果を表す可能性フラグが得られる。ただし、1つの部分領域に対して複数の候補が残っていることがある。また、ある部分領域が他の部分領域に包含されていることがある。したがって、
図9に示す重複解消処理が実行される。なお、「連続値」は、所定長より短いデータに対しては意味をなさないので、例えば、部分領域の長さが4ビットより短いときは、連続値可能性フラグに「0」を設定してもよい。「チェックサム」も同様である。
【0083】
図9に示す重複解消処理は、例えば、下記の処理を含む。なお、重複解消処理は、例えば、最終結果推定部18により実行される。
【0084】
(1)部分領域のデータ長を1ビットから64ビットまでインクリメントしながら、或いは、部分領域のデータ長を64ビットから1ビットまで1ずつデクリメントしながら、固定値可能性フラグが「1」に設定されている部分領域のデータ形式を「固定値」に決定する。
【0085】
(2)部分領域の開始位置を表す変数iおよび部分領域のデータ長を表す変数jを用意する。変数iは、第1ビットからデータ長ビット目までを順番に指定する。変数jは、第iビットからデータ形式が決定されていないビットまでの長さを初期値として、1までデクリメントしていく。ただし、i+jの値が8の倍数になるときは、その値に対応する部分領域を優先して処理する。そして、変数iおよび変数jを変えながら、下記の重複解消処理が実行される。なお、下記の記載において(i,j)は、開始位置が第iビットであり、長さがjビットである部分領域を表す。
(2a)(i,j)のチェックサム(計算式)可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「チェックサム(計算式)」に決定する。
(2b)(i,j)のイベント(特定値)可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「イベント(特定値)」に決定する。
(2c)(i,j)のイベント(変化)可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「イベント(変化)」に決定する。尚、「イベント(変化)」については、後述する第2の実施形態で説明する。
(2d)(i,j)のカウンタ可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「カウンタ」に決定する。
(2e)(i,j)の単調増加可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「単調増加」に決定する。
(2f)(i,j)の符号なし連続値可能性フラグが「1」であり、且つ、符号付き連続値可能性フラグも「1」であるときは、第iビットからjビット分の領域に格納されているデータを、分散の小さい方の形式に決定する。
(2g)(i,j)の符号なし連続値可能性フラグが「1」であり、且つ、符号付き連続値可能性フラグが「0」であるときは、第iビットからjビット分の領域に格納されているデータを「符号なし連続値」に決定する。
(2h)(i,j)の符号なし連続値可能性フラグが「0」であり、且つ、符号付き連続値可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「符号付き連続値」に決定する。
(2i)(i,j)のチェックサム(一様)可能性フラグが「1」であるときは、第iビットからjビット分の領域に格納されているデータを「チェックサム(一様)」に決定する。
(2j)第iビットから1ビット分を「マルチ値」に決定する。
(2k)「マルチ値」以外の形式に決定されているときは、iにjを加えてループを継続する。「マルチ値」と決定されているときは、iに「1」を加えてループを継続する。
【0086】
i+jの値が8の倍数になるときに、その値に対応する部分領域を優先して処理する理由は、データ領域の先頭からカウントして8の倍数のビット位置にデータの境界が設定されることが多いためである。また、上述の手順では、データ領域の先頭から処理が行われるが、データ領域の最後尾から処理が行われてもよい。さらに、上記2b、2cは、互いに入れ替えてもよい。上記2f、2g、2hは、互いに入れ替えてもよい。上記2aと上記2b、2cとを互いに入れ替えてもよい。
【0087】
なお、第1の実施形態において、推定装置10は、S13の後でS11の処理を実行してもよし、S14の後でS11の処理を実行してもよい。また、推定装置10は、前処理の直後にS36の処理を実行してもよいし、重複処理の直前にS36の処理を実行してもよい。さらに、推定装置10は、前処理が終了した後であれば、任意のタイミングで重複処理を実行してもよい。
【0088】
図9~
図12に示す例では、3つの変数s_f、p_f、f_fを使用するが、推定装置10は、2つの変数を使用して推定処理を行ってもよい。例えば、推定装置10は、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグを使用する。この場合、
図11~
図12に示す処理は、下記のように実行される。すなわち、S15において受信間隔dtが送信周期より短いときは、周期メッセージ可能性フラグが「0」に更新される。S17において対象部分領域の値が最初の受信メッセージの対象部分領域に格納されていた値と一致するときは、イベント送信付きメッセージ可能性フラグが「0」に更新される。S19において受信間隔dtが送信周期より長いときは、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグが「0」に更新される。そして、S31において、パターン数DPが「2」であり、且つ、イベント送信付きメッセージ可能性フラグが「1」であれば、送信タイプが「イベント(特定値)」であると推定される。なお、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグは、それぞれ変数f_fおよび変数p_fに相当する。
【0089】
また、
図12に示す例では、S31において3つの条件に基づいて対象部分領域を含むメッセージの送信タイプが推定されるが、第1の実施形態はこの方法に限定されるものではない。例えば、パターン数DPが「2」であり、且つ、変数s_fが「1」であり、且つ、変数f_fが「1」であり、且つ、変数p_fが「0」であるときに、対象部分領域を含むメッセージの送信タイプを「イベント(特定値)」と推定してもよい。
【0090】
さらに、
図12に示す例では、S31において対象部分領域のパターン数DPが「2」であるか否かが判定される。ここで、パターン数DPが「2」である状態は、通常時に所定の固定値が設定され、イベント発生時にその固定値と異なる特定値が設定されるメッセージ送信に相当する。例えば、
図2に示すケース1では、通常時に「1(固定値)」が設定され、イベント発生に起因して送信されるメッセージM5において「3(特定値)」が設定されている。ただし、第1の実施形態の「イベント(特定値)」は、このケースに限定されるものではない。すなわち、「イベント(特定値)」は、通常時に任意の値が設定され、イベント発生時に特定値が設定されるメッセージであってもよい。この場合、S31において、対象部分領域のパターン数DPが「2以上」であるか否かが判定される。
【0091】
<第2の実施形態>
第1の実施形態では、イベント送信付き周期メッセージは、イベント発生時に特定値が設定される部分領域を含む。これに対して、第2の実施形態では、イベント送信付き周期メッセージは、イベント発生時に値が変化する部分領域を含む。例えば、
図2に示すケース2では、メッセージM1~M4のデータは「1」であるが、イベントの発生に起因して生成されるメッセージM5以降のデータは「7」に変化している。
【0092】
推定装置10の構成は、第1の実施形態および第2の実施形態において実質的に同じであり、
図6に示す通りである。また、推定方法の手順は、第1の実施形態および第2の実施形態においてほぼ同じであり、
図9に示すフローチャートの通りである。ただし、第2の実施形態に係わる前処理および推定処理は、それぞれ第1の実施形態と異なる処理を含む。
【0093】
図13は、第2の実施形態において実行される前処理の一例を示すフローチャートである。なお、S11、S14~16、S19~S20は、第1の実施形態および第2の実施形態において実質的に同じである。また、第2の実施形態では、
図11に示すS12~S13を実行する必要はない。よって、
図13では、S12~S13は省略されているが、第2の実施形態においてS12~S13を実行してもよい。
【0094】
第2の実施形態では、
図11に示すS17の代わりにS41の処理が実行される。S41においては、変数更新部15は、対象部分領域に格納されている値(Data(i))が、直前の受信メッセージの対象部分領域に格納されていた値(Data(i-1))と一致するか否かを判定する。ここで、S41の処理は、S15の判定が「Yes」であったときに実行される。即ち、受信間隔dtが送信周期Tより小さく、且つ、対象部分領域に格納されている値が、直前の受信メッセージの対象部分領域に格納されている値と一致するときに、S41の判定が「Yes」となる。そして、この状況は、「所定のイベントが発生したときに、対象部分領域の値が変化する」を満足しないことになる。よって、S41の判定が「Yes」となるときは、S18において、変数更新部15は、変数f_fを「0」に更新する。
【0095】
例えば、
図2に示すケース2において、メッセージM5のデータがメッセージM4のデータと一致する場合には、S41の判定が「Yes」となり、S18において変数f_fが「0」に更新される。一方、メッセージM5のデータがメッセージM4のデータと異なるときは、S41の判定が「No」となり、変数f_fは更新されない。
【0096】
受信間隔dtが送信間隔Tと一致または略一致するとき(T-th1<dt<T+th2)には、S42において、変数更新部15は、対象部分領域に格納されている値が直前の受信メッセージの対象部分領域に格納されていた値と一致するか否かを判定する。ここで、S42の処理は、実質的に、S41と同じである。そして、受信間隔dtが送信間隔Tと一致または略一致し、且つ、対象部分領域に格納されている値が直前の受信メッセージの対象部分領域に格納されていた値と異なるときは、変数更新部15は、S43において、変数f_fを「0」に更新する。一方、S42において対象部分領域に格納されている値が最初の受信メッセージの対象部分領域に格納されていた値と一致するときは、変数s_f、p_f、f_fは保持される。
【0097】
このように、第2の実施形態の前処理では、受信間隔dtが送信周期Tより小さく、且つ、対象部分領域に格納されている値が直前の受信メッセージの対象部分領域に格納されている値と一致するときに、変数f_fが「0」に更新される。また、受信間隔dtが送信間隔Tと一致または略一致し、且つ、対象部分領域に格納されている値が直前の受信メッセージの対象部分領域に格納されていた値と異なるときも、変数f_fを「0」に更新してもよい。
【0098】
図14は、第2の実施形態において実行される推定処理の一例を示すフローチャートである。なお、S33~S37は、第1の実施形態および第2の実施形態において実質的に同じである。
【0099】
第2の実施形態では、
図12に示すS31~S32の代わりにS44~S45の処理が実行される。S44においては、形式推定部16は、変数s_f、p_f、f_fが下記の2つの条件を満たしているか否かを判定する。
(1)変数s_fは「1」である
(2)変数f_fは「1」である
条件(1)は、モニタ期間内に、少なくとも1回、送信周期より短い受信間隔でメッセージが到着したことを表す。条件(2)は、受信メッセージがイベント送信付き周期メッセージである可能性があることを表す。
【0100】
上記2つの条件を満足するときは、形式推定部16は、S45において、対象部分領域を含むメッセージの送信タイプが「イベント送信付き周期メッセージ(変化)」であると推定する。一方、上記2つの条件を満足しないときは、形式推定部16の処理はS33に進む。
【0101】
なお、第2の実施形態において、推定装置10は、S14の後でS11の処理を実行してもよい。また、推定装置10は、前処理の直後にS36の処理を実行してもよいし、重複処理の直前にS36の処理を実行してもよい。さらに、推定装置10は、前処理が終了した後であれば、任意のタイミングで重複処理を実行してもよい。
【0102】
図13~
図14に示す例では、3つの変数s_f、p_f、f_fを使用するが、2つの変数を使用して推定処理を行ってもよい。例えば、推定装置10は、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグを使用する。この場合、
図13~
図14に示す処理は、下記のように実行される。すなわち、S15において受信間隔dtが送信周期より短いときは、周期メッセージ可能性フラグが「0」に更新される。S41において対象部分領域の値が直前の受信メッセージの対象部分領域の値と一致するときは、イベント送信付きメッセージ可能性フラグが「0」に更新される。S19において受信間隔dtが送信周期より長いときは、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグがそれぞれ「0」に更新される。S44においてイベント送信付きメッセージ可能性フラグが「1」であれば、送信タイプが「イベント(変化)」であると推定される。なお、イベント送信付きメッセージ可能性フラグおよび周期メッセージ可能性フラグは、それぞれ、変数f_fおよび変数p_fに相当する。
【0103】
また、推定装置10は、第1の実施形態の推定および第2の実施形態の推定の双方を実行してもよい。この場合、メッセージの受信間隔が所定のイベントの発生時以外の期間において送信周期と一致するか否かを表す変数(f_f)として、イベント発生時に特定の値が設定されるメッセージを検出するための変数f_f1、及び、イベント発生時に値が変化するメッセージを検出するための変数f_f2、を個々に管理することが好ましい。
【0104】
<実施例1>
この実施例では、
図15に示す通信ログが得られている。また、説明を簡単にするために、受信時刻(タイムスタンプ)は小数点以下2桁で表され、各メッセージのデータ領域の長さは4ビットである。実際のCANにおいては、データはバイト単位で形成されるが、簡単のためにデータ長が4ビットである例を示す。チェックサム計算は、データ領域内の第1~第3ビットの加算結果を第4ビットに書き込む。ID=100を含むメッセージの送信周期およびID=200を含むメッセージの基本送信周期は、いずれも1秒である。
【0105】
推定装置10は、ID=100を含むメッセージの特徴を推定する。ここで、この実施例では、各メッセージのデータ領域の長さが4ビットなので、部分領域の種類(即ち、開始位置および長さの組合せ)は、下記の10通りである。
(1)開始位置=1、長さ=1
(2)開始位置=1、長さ=2
(3)開始位置=1、長さ=3
(4)開始位置=1、長さ=4
(5)開始位置=2、長さ=1
(6)開始位置=2、長さ=2
(7)開始位置=2、長さ=3
(8)開始位置=3、長さ=1
(9)開始位置=3、長さ=2
(10)開始位置=4、長さ=1
【0106】
そして、推定装置10は、
図15に示す通信ログの1番目のレコードから順番にデータを取得して
図9(
図11~
図12または
図13~
図14)に示すフローチャートの処理を実行する。なお、各部分領域のパターン数DPの初期値はゼロである。変数s_f、p_f、f_fの初期値は1である。S15およびS19において、マージン(即ち、th1及びth2)は、それぞれ0.2秒である。
【0107】
(1)1番目のレコードのデータを取得
通信ログの1番目のレコードに記録されているデータは「受信時刻=1.00、ID=100、値=0001」である。ここで、このメッセージは「ID=100」を含む。よって、推定装置10は推定処理を実行する。そして、推定装置10による実行結果は下記の通りである。
【0108】
(1a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(1)は「0」である。また、パターン数DP(1,1)は「1」に更新さる。さらに、部分領域の長さが4ではないので、チェックサム(計算式)データとはなり得ない。よって、チェックサム(計算式)可能性フラグ(1,1)が「0」に更新される。
【0109】
(1b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(1,2)(1)は「00」である。また、パターン数DP(1,2)は「1」に更新される。更に、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(1,2)が「0」に更新される。
【0110】
(1c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(1,3)(1)は「000」である。また、パターン数DP(1,3)は「1」に更新される。更に、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(1,3)が「0」に更新される。
【0111】
(1d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0001」である。即ち、d(1,4)(1)は「0001」である。また、パターン数DP(1,4)は「1」に更新される。ここで、部分領域の長さが4である。ただし、第1~第3ビットの和が第4ビットの値に一致していない。したがって、チェックサム(計算式)可能性フラグ(1,4)が「0」に更新される。
【0112】
(1e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(2,1)(1)は「0」である。また、パターン数DP(2,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,1)が「0」に更新される。
【0113】
(1f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(2,2)(1)は「00」である。また、パターン数DP(2,2)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,2)が「0」に更新される。
【0114】
(1g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「001」である。すなわち、d(2,3)(1)は「001」である。また、パターン数DP(2,3)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,3)が「0」に更新される。
【0115】
(1h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(1)は「0」である。また、パターン数DP(3,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(3,1)が「0」に更新される。
【0116】
(1i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「01」である。すなわち、d(3,2)(1)は「01」である。また、パターン数DP(3,2)は「1」に更新される。更に、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(3,2)が「0」に更新される。
【0117】
(1j)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(4,1)(1)は「1」である。また、パターン数DP(4,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(4,1)が「0」に更新される。
【0118】
図16は、上記1a~1jの処理結果を示す。なお、
図16に示す形式2は、チェックサム(計算式)を表す。すなわち、各部分領域に格納されているデータは、いずれも、チェックサム(計算式)である可能性が否定されている。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=1.00」として記録する。
【0119】
(2)2番目のレコードのデータを取得
通信ログの2番目のレコードに記録されているデータは「受信時刻=1.50、ID=200、値=0000」である。ここで、このメッセージは「ID=100」を含まないので、取得したデータは破棄される。
【0120】
(3)3番目のレコードのデータを取得
通信ログの3番目のレコードに記録されているデータは「受信時刻=2.00、ID=100、値=0110」である。ここで、このメッセージは「ID=100」を含むので、推定装置10は推定処理を実行する。
【0121】
なお、推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=1.00」を得る。ここで、受信間隔dtは、「送信周期-th1」以上、且つ、「送信周期+th2」以下である。したがって、推定装置10は、変数s_f、p_fを更新しない。ただし、部分領域に格納されている値がメッセージM1の同じ部分領域の値と異なるときは、推定装置10は、その部分領域の変数f_fを「0」に更新する。
【0122】
なお、変数s_f、p_f、f_f、およびデータ形式1~8に対応する各フラグは、いったん「0」に更新された後は、「1」に戻ることはない。したがって、既に「0」に更新されている変数またはフラグについては、「1」を「0」に更新する事象が発生しても、その記載を省略する。
【0123】
(3a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(2)は「0」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,1)(1))と同じである。よって、パターン数DP(1,1)は「1」のまま保持される。また、カウンタ可能性フラグ(1,1)および単調増加可能性フラグ(1,1)がそれぞれ「0」に更新される。
【0124】
(3b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「01」である。すなわち、d(1,2)(2)は「01」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,2)(1))と異なる。この結果、パターン数DP(1,2)は「2」に更新され、固定値可能性フラグ(1,2)が「0」に更新され、変数f_f(1,2)が「0」に更新される。
【0125】
(3c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「011」である。すなわち、d(1,3)(2)は「011」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,3)(1))と異なる。この結果、パターン数DP(1,3)は「2」に更新され、固定値可能性フラグ(1,3)が「0」に更新され、変数f_f(1,3)が「0」に更新される。
【0126】
(3d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0110」である。即ち、d(1,4)(2)は「0110」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,4)(1))と異なる。したがって、パターン数DP(1,4)は「2」に更新され、固定値可能性フラグ(1,4)が「0」に更新され、変数f_f(1,4)が「0」に更新される。さらに、当該部分領域に格納されている値と、前回のメッセージの同じ部分領域に格納されていた値(d(1,4)(1))との差分が5であり、閾値より大きいので、単調増加可能性フラグ(1,4)が「0」に更新される。なお、この実施例では、閾値は5であるものとする。
【0127】
(3e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(2,1)(2)は「1」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,1)(1))と異なる。この結果、パターン数DP(2,1)は「2」に更新され、固定値可能性フラグ(2,1)が「0」に更新され、変数f_f(2,1)が「0」に更新される。
【0128】
(3f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「11」である。すなわち、d(2,2)(2)は「11」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,2)(1))と異なる。この結果、パターン数DP(2,2)は「2」に更新され、固定値可能性フラグ(2,2)が「0」に更新され、変数f_f(2,2)が「0」に更新される。
【0129】
(3g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「110」である。すなわち、d(2,3)(2)は「110」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,3)(1))と異なる。この結果、パターン数DP(2,3)は「2」に更新され、固定値可能性フラグ(2,3)が「0」に更新され、変数f_f(2,3)が「0」に更新される。さらに、当該部分領域に格納されている値と、前回のメッセージの同じ部分領域に格納されていた値(d(2,3)(1))との差分が5であり、閾値より大きいので、単調増加可能性フラグ(2,3)が「0」に更新される。
【0130】
(3h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(3,1)(2)は「1」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(3,1)(1))と異なる。したがって、パターン数DP(3,1)は「2」に更新され、固定値可能性フラグ(3,1)が「0」に更新される、変数f_f(3,1)が「0」に更新され。
【0131】
(3i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「10」である。すなわち、d(3,2)(2)は「10」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(3,2)(1))と異なる。この結果、パターン数DP(3,2)は「2」に更新され、固定値可能性フラグ(3,2)が「0」に更新され、変数f_f(3,2)が「0」に更新される。
【0132】
(3j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(4,1)(2)は「0」であり、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(4,1)(1))と異なる。この結果、パターン数DP(4,1)は「2」に更新され、固定値可能性フラグ(4,1)が「0」に更新され、変数f_f(4,1)が「0」に更新される。
【0133】
図17は、上記3a~3jの処理結果を示す。なお、形式1は、固定値を表す。形式3は、カウンタを表す。形式4は、単調増加を表す。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=2.00」として記録する。
【0134】
(4)4番目のレコードのデータを取得
通信ログの4番目のレコードに記録されているデータは「受信時刻=2.50、ID=200、値=0000」である。ここで、このメッセージは「ID=100」を含まないので、取得したデータは破棄される。
【0135】
(5)5番目のレコードのデータを取得
通信ログの5番目のレコードに記録されているデータは「受信時刻=3.00、ID=100、値=1001」である。ここで、このメッセージは「ID=100」を含むので、推定装置10は推定処理を実行する。
【0136】
なお、推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=1.00」を得る。ここで、受信間隔dtは、「送信周期-th1」以上、且つ、「送信周期+th2」以下である。したがって、推定装置10は、変数s_f、p_fを更新しない。ただし、部分領域に格納されている値がメッセージM1の同じ部分領域の値と異なるとき、または、部分領域に格納されている値がメッセージM3の同じ部分領域の値と異なるときは、推定装置10は、その部分領域の変数f_fを「0」に更新する。
【0137】
(5a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(1,1)(3)は「1」である。そして、この値は、過去の受信メッセージの同じ部分領域に格納されていたいずれの値とも異なる。よって、パターン数DP(1,1)は「2」に更新される。また、固定値可能性フラグ(1,1)が「0」に更新される。さらに、変数f_f(1,1)が「0」に更新される。
【0138】
(5b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「10」である。すなわち、d(1,2)(3)は「10」である。そして、この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。よって、パターン数DP(1,2)は「3」に更新される。
【0139】
(5c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「100」である。すなわち、d(1,3)(3)は「100」である。そして、この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。したがって、パターン数DP(1,3)は「3」に更新される。また、当該部分領域に格納されている値の変化量は、ゼロ以外の一定値ではない。具体的には、d(1,2)(1)とd(1,2)(2)との差分が「3」であり、d(1,2)(2)とd(1,2)(3)との差分が「4」である。よって、カウンタ可能性フラグ(1,4)が「0」に更新される。
【0140】
(5d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「1001」である。即ち、d(1,4)(3)は「1001」である。そして、この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。したがって、パターン数DP(1,4)は「3」に更新される。また、当該部分領域に格納されている値の変化量は、ゼロ以外の一定値ではない。よって、カウンタ可能性フラグ(1,4)が「0」に更新される。
【0141】
(5e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(2,1)(3)は「0」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。具体的には、d(2,1)(1)とd(2,1)(2)との差分が「+1」であり、d(2,1)(2)とd(2,1)(3)との差分が「-1」である。したがって、カウンタ可能性フラグ(2,1)が「0」に更新され、単調増加可能性フラグ(2,1)が「0」に更新される。
【0142】
(5f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(2,2)(3)は「00」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。よって、カウンタ可能性フラグ(2,2)が「0」に更新され、単調増加可能性フラグ(2,2)が「0」に更新される。
【0143】
(5g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「001」である。すなわち、d(2,3)(3)は「001」である。そして、当該部分領域に格納されている値の変化量は、ゼロ以外の一定値ではない。したがって、カウンタ可能性フラグ(2,3)が「0」に更新される。
【0144】
(5h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(3)は「0」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。したがって、カウンタ可能性フラグ(3,1)が「0」に更新され、単調増加可能性フラグ(3,1)が「0」に更新される。
【0145】
(5i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「01」である。すなわち、d(3,2)(3)は「01」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。よって、カウンタ可能性フラグ(3,2)が「0」に更新され、単調増加可能性フラグ(3,2)が「0」に更新される。
【0146】
(5j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(4,1)(3)は「1」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。したがって、カウンタ可能性フラグ(4,1)が「0」に更新され、単調増加可能性フラグ(4,1)が「0」に更新される。
【0147】
図18は、上記5a~5jの処理結果を示す。なお、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=3.00」として記録する。
【0148】
(6)6番目のレコードのデータを取得
通信ログの6番目のレコードに記録されているデータは「受信時刻=3.25、ID=200、値=0100」である。ここで、このメッセージは「ID=100」を含まないので、取得したデータは破棄される。
【0149】
(7)7番目のレコードのデータを取得
通信ログの7番目のレコードに記録されているデータは「受信時刻=4.00、ID=100、値=0111」である。ここで、このメッセージは「ID=100」を含むので、推定装置10は推定処理を実行する。
【0150】
なお、推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=1.00」を得る。ここで、受信間隔dtは、「送信周期-th1」以上、且つ、「送信周期+th2」以下である。したがって、推定装置10は、変数s_f、p_f、f_fを更新しない。
【0151】
(7a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(1,1)(4)は「1」である。
【0152】
(7b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「01」である。すなわち、d(1,2)(4)は「01」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。よって、カウンタ可能性フラグ(1,2)が「0」に更新され、単調増加可能性フラグ(1,2)が「0」に更新される。
【0153】
(7c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「011」である。すなわち、d(1,3)(4)は「011」である。そして、当該部分領域に格納されている値は、増加することもあるし、減少することもある。したがって、単調増加可能性フラグ(1,3)が「0」に更新される。
【0154】
(7d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0111」である。即ち、d(1,4)(4)は「0111」である。この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。よって、パターン数DP(1,4)は「4」に更新される。
【0155】
(7e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(2,1)(4)は「1」である。
【0156】
(7f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「11」である。すなわち、d(2,2)(4)は「11」である。
【0157】
(7g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「111」である。すなわち、d(2,3)(4)は「111」である。この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。よって、パターン数DP(2,3)は「3」に更新される。
【0158】
(7h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(3,1)(4)は「1」である。
【0159】
(7i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「11」である。すなわち、d(3,2)(4)は「11」である。この値は、過去に受信したメッセージの同じ部分領域に格納されていたいずれの値とも異なる。よって、パターン数DP(3,2)は「3」に更新される。
【0160】
(7j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(4,1)(4)は「1」である。
【0161】
図19は、上記7a~7jの処理結果を示す。メッセージの送信タイプ(イベント、周期、非周期)については、後で説明する。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=4.00」として記録する。
【0162】
(8)8番目のレコードのデータを取得
通信ログの8番目のレコードに記録されているデータは「受信時刻=4.25、ID=200、値=0000」である。ここで、このメッセージは「ID=100」を含まないので、取得したデータは破棄される。
【0163】
(9)送信タイプの推定
推定装置10は、各部分領域について、
図12のS31~S35(又は、
図14のS33~S35、S44、S45)を実行する。ここで、この例では、変数s_f、p_f、f_fはいずれも「1」のまま更新されていない。この結果、
図19に示すように、すべての部分領域において、変数p_fが「1」である。すなわち、すべての部分領域に対して、S33~S34により「送信タイプ=周期メッセージ」が得られる。よって、推定装置10は、ID=100を含むメッセージは「周期メッセージ」であると推定する。
【0164】
(10)形式5~8の推定
データ領域に格納されている値を「符号付きデータ」と仮定すると、その値は「1」→「6」→「-7」→「7」と推移し、その分散は大きい。よって、符号付き連続値可能性フラグ(1,4)は「0」に更新される。一方、データ領域に格納されている値を「符号なしデータ」と仮定すると、その値は「1」→「6」→「9」→「7」と推移し、その分散は小さい。したがって、符号なし連続値可能性フラグ(1,4)は「1」のまま保持される。
【0165】
各部分領域に格納されている値は、一様に分布しているとはいえない。よって、すべての部分領域について、チェックサム(一様)可能性フラグが「0」に更新される。
【0166】
(11)重複解消処理
すべての部分領域に対して、固定値可能性フラグ(
図19では、形式1)が「0」に更新されている。よって、ID=100を含むメッセージは、固定値データを格納していないと推定される。また、開始位置(i)とデータ長(j)との和が8の倍数となる部分領域は存在しない。したがって、推定装置10は、データ長の長い部分領域(すなわち、部分領域(1,4))から重複解消処理を開始する。
(11a)部分領域(1,4)のチェックサム(計算式)可能性フラグ(
図19では、形式2)が「0」に更新されているので、データ形式は確定しない。
(11b)部分領域(1,4)のイベント可能性フラグが「0」に更新されているので、データ形式は確定しない。
(11c)部分領域(1,4)のカウンタ可能性フラグ(
図19では、形式3)が「0」に更新されているので、データ形式は確定しない。
(11d)部分領域(1,4)の単調増加可能性フラグ(
図19では、形式4)が「0」に更新されているので、データ形式は確定しない。
(11e)部分領域(1,4)の符号なし連続値可能性フラグは、上述したように「1」のまま保持されている。よって、推定装置10は、データ領域に格納されているデータの形式が「符号なし連続値」であると推定する。
【0167】
<実施例2>
実施例1と同様に、実施例2においても、
図15に示す通信ログに基づいてメッセージの特徴を推定する。ただし、実施例2では、推定装置10は、ID=200を含むメッセージの特徴を推定する。また、実施例2では、第1の実施形態に係わる推定(すなわち、イベント発生時に特定値が設定される部分領域を含むイベント送信付きメッセージの検出)が行われる。
【0168】
(1)1番目のレコードのデータを取得
通信ログの1番目のレコードに記録されているデータは「受信時刻=1.00、ID=100、値=0001」である。ここで、このメッセージは「ID=200」を含まないので、取得したデータは破棄される。
【0169】
(2)2番目のレコードのデータを取得
通信ログの2番目のレコードに記録されているデータは「受信時刻=1.50、ID=200、値=0000」である。ここで、このメッセージは「ID=200」を含むので、推定装置10は推定処理を実行する。そして、推定装置10による実行結果は下記の通りである。
【0170】
(2a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(1)は「0」である。また、パターン数DP(1,1)は「1」に更新さる。さらに、部分領域の長さが4ではないので、チェックサム(計算式)データとはなり得ない。よって、チェックサム(計算式)可能性フラグ(1,1)が「0」に更新される。
【0171】
(2b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(1,2)(1)は「00」である。また、パターン数DP(1,2)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(1,2)が「0」に更新される。
【0172】
(2c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(1,3)(1)は「000」である。また、パターン数DP(1,3)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(1,3)が「0」に更新される。
【0173】
(2d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0000」である。即ち、d(1,4)(1)は「0000」である。また、パターン数DP(1,4)は「1」に更新される。なお、当該部分領域の長さは4であり、第1~第3ビットの和が第4ビットの値と一致しているので、チェックサム(計算式)可能性フラグ(1,4)は「1」のまま保持される。
【0174】
(2e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(2,1)(1)は「0」である。また、パターン数DP(2,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,1)が「0」に更新される。
【0175】
(2f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(2,2)(1)は「00」である。また、パターン数DP(2,2)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,2)が「0」に更新される。
【0176】
(2g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(2,3)(1)は「000」である。また、パターン数DP(2,3)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(2,3)が「0」に更新される。
【0177】
(2h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(1)は「0」である。また、パターン数DP(3,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(3,1)が「0」に更新される。
【0178】
(2i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(3,2)(1)は「00」である。また、パターン数DP(3,2)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(3,2)が「0」に更新される。
【0179】
(2j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(4,1)(1)は「0」である。また、パターン数DP(4,1)は「1」に更新される。さらに、部分領域の長さが4ではないので、チェックサム(計算式)可能性フラグ(4,1)が「0」に更新される。
【0180】
図20は、上記2a~2jの処理結果を示す。なお、
図20に示す形式2は、チェックサム(計算式)を表す。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=1.50」として記録する。
【0181】
(3)3番目のレコードのデータを取得
通信ログの3番目のレコードに記録されているデータは「受信時刻=2.00、ID=100、値=0110」である。ここで、このメッセージは「ID=200」を含まないので、取得したデータは破棄される。
【0182】
(4)4番目のレコードのデータを取得
通信ログの4番目のレコードに記録されているデータは「受信時刻=2.50、ID=200、値=0000」である。ここで、このメッセージは「ID=200」を含むので、推定装置10は推定処理を実行する。
【0183】
推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=1.00」を得る。ここで、受信間隔dtは、「送信周期-th1」以上、且つ、「送信周期+th2」以下である。よって、推定装置10は、変数s_f、p_fを更新しない。ただし、部分領域に格納されている値が、「ID=200」を含む最初のメッセージ(即ち、メッセージM2)の同じ部分領域の値と異なるときは、推定装置10は、その部分領域の変数f_fを「0」に更新する。
【0184】
(4a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(2)は「0」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,1)(1))と同じである。したがって、パターン数DP(1,1)は「1」のまま保持される。また、カウンタ可能性フラグ(1,1)および単調増加可能性フラグ(1,1)がそれぞれ「0」に更新される。なお、受信間隔dtが送信周期と一致しているが、当該部分領域の値(すなわち、「0」)は、「ID=200」を含む最初のメッセージ(すなわち、メッセージM2の)の同じ部分領域の値(すなわち、「0」)と同じなので、変数f_f(1,1)は更新されない。他の部分領域についても同様である。
【0185】
(4b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(1,2)(2)は「00」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,2)(1))と同じである。したがって、パターン数DP(1,2)は「1」のまま保持される。また、カウンタ可能性フラグ(1,2)および単調増加可能性フラグ(1,2)がそれぞれ「0」に更新される。
【0186】
(4c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(1,3)(2)は「000」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,3)(1))と同じである。したがって、パターン数DP(1,3)は「1」のまま保持される。また、カウンタ可能性フラグ(1,3)および単調増加可能性フラグ(1,3)がそれぞれ「0」に更新される。
【0187】
(4d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0000」である。即ち、d(1,4)(2)は「0000」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(1,4)(1))と同じである。したがって、パターン数DP(1,4)は「1」のまま保持される。また、カウンタ可能性フラグ(1,4)および単調増加可能性フラグ(1,4)がそれぞれ「0」に更新される。
【0188】
(4e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(2,1)(2)は「0」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,1)(1))と同じである。したがって、パターン数DP(2,1)は「1」のまま保持される。また、カウンタ可能性フラグ(2,1)および単調増加可能性フラグ(2,1)がそれぞれ「0」に更新される。
【0189】
(4f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(2,2)(2)は「00」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,2)(1))と同じである。よって、パターン数DP(2,2)は「1」のまま保持される。また、カウンタ可能性フラグ(2,2)および単調増加可能性フラグ(2,2)がそれぞれ「0」に更新される。
【0190】
(4g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(2,3)(2)は「000」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(2,3)(1))と同じである。よって、パターン数DP(2,3)は「1」のまま保持される。また、カウンタ可能性フラグ(2,3)および単調増加可能性フラグ(2,3)がそれぞれ「0」に更新される。
【0191】
(4h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(2)は「0」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(3,1)(1))と同じである。したがって、パターン数DP(3,1)は「1」のまま保持される。また、カウンタ可能性フラグ(3,1)および単調増加可能性フラグ(3,1)がそれぞれ「0」に更新される。
【0192】
(4i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(3,2)(2)は「00」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(3,2)(1))と同じである。よって、パターン数DP(3,2)は「1」のまま保持される。また、カウンタ可能性フラグ(3,2)および単調増加可能性フラグ(3,2)がそれぞれ「0」に更新される。
【0193】
(4j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(4,1)(2)は「0」である。そして、当該部分領域に格納されている値は、前回のメッセージの同じ部分領域に格納されていた値(d(4,1)(1))と同じである。したがって、パターン数DP(4,1)は「1」のまま保持される。また、カウンタ可能性フラグ(4,1)および単調増加可能性フラグ(4,1)がそれぞれ「0」に更新される。
【0194】
図21は、上記4a~4jの処理結果を示す。なお、形式3は、カウンタを表す。形式4は、単調増加を表す。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=2.50」として記録する。
【0195】
(5)5番目のレコードのデータを取得
通信ログの5番目のレコードに記録されているデータは「受信時刻=3.00、ID=100、値=1001」である。ここで、このメッセージは「ID=200」を含まないので、取得したデータは破棄される。
【0196】
(6)6番目のレコードのデータを取得
通信ログの6番目のレコードに記録されているデータは「受信時刻=3.25、ID=200、値=0100」である。ここで、このメッセージは「ID=200」を含むので、推定装置10は推定処理を実行する。
【0197】
なお、推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=0.75」を得る。ここで、受信間隔dtは、「送信周期-th1」以下である。したがって、推定装置10は、
図22に示すように、各部分領域の変数p_fをそれぞれ「0」に更新する。なお、この処理は、
図11または
図13に示すS15~S16に相当する。
【0198】
(6a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(3)は「0」である。ここで、当該部分領域に格納されている値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(1,1)は「1」のまま保持される。また、受信間隔dtが「送信周期-th1」以下である状況において、当該部分領域に格納されている値は、最初のメッセージの同じ部分領域に格納されている値(d(1,1)(1))と同じである。よって、変数f_f(1,1)が「0」に更新される。この処理は、
図11に示すS17~S18に相当する。
【0199】
(6b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「01」である。すなわち、d(1,2)(3)は「01」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(1,2)は「2」に更新され、固定値可能性フラグ(1,2)は「0」に更新される。
【0200】
(6c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「010」である。すなわち、d(1,3)(3)は「010」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(1,3)は「2」に更新され、固定値可能性フラグ(1,3)が「0」に更新される。
【0201】
(6d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0100」である。即ち、d(1,4)(3)は「0100」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(1,4)は「2」に更新され、固定値可能性フラグ(1,4)が「0」に更新される。また、当該部分領域の第1~第3ビットの和が第4ビットの値と一致していないので、チェックサム(計算式)可能性フラグ(1,4)は「0」に更新される。
【0202】
(6e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「1」である。即ち、d(2,1)(3)は「1」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(2,1)は「2」に更新され、固定値可能性フラグ(2,1)が「0」に更新される。
【0203】
(6f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「10」である。すなわち、d(2,2)(3)は「10」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(2,2)は「2」に更新され、固定値可能性フラグ(2,2)が「0」に更新される。
【0204】
(6g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「100」である。すなわち、d(2,3)(3)は「100」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されているいずれの値とも異なる。したがって、パターン数DP(2,3)は「2」に更新され、固定値可能性フラグ(2,3)が「0」に更新される。
【0205】
(6h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(3)は「0」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。したがって、パターン数DP(3,1)は「1」のまま保持される。また、受信間隔dtが「送信周期-th1」以下である状況において、当該部分領域に格納されている値は、最初のメッセージの同じ部分領域に格納されている値(d(3,1)(1))と同じである。したがって、変数f_f(3,2)が「0」に更新される。
【0206】
(6i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(3,2)(3)は「00」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。したがって、パターン数DP(3,2)は「1」のまま保持される。また、受信間隔dtが「送信周期-th1」以下である状況において、当該部分領域に格納されている値は、最初のメッセージの同じ部分領域に格納されている値(d(3,2)(1))と同じである。したがって、変数f_f(3,2)が「0」に更新される。
【0207】
(6j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(4,1)(3)は「0」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。したがって、パターン数DP(4,1)は「1」のまま保持される。また、受信間隔dtが「送信周期-th1」以下である状況において、当該部分領域に格納されている値は、最初のメッセージの同じ部分領域に格納されている値(d(4,1)(1))と同じである。したがって、変数f_f(4,1)が「0」に更新される。
【0208】
図22は、上記6a~6jの処理結果を示す。なお、上述したように、各部分領域の変数p_fは、いずれも「0」に更新されている。また、推定装置10は、当該メッセージの受信時刻を、後続のメッセージの処理のために「前回受信時刻=3.25」として記録する。
【0209】
(7)7番目のレコードのデータを取得
通信ログの7番目のレコードに記録されているデータは「受信時刻=4.00、ID=100、値=0111」である。ここで、このメッセージは「ID=200」を含まないので、取得したデータは破棄される。
【0210】
(8)8番目のレコードのデータを取得
通信ログの8番目のレコードに記録されているデータは「受信時刻=4.25、ID=200、値=0000」である。ここで、このメッセージは「ID=200」を含むので、推定装置10は推定処理を実行する。
【0211】
推定装置10は、当該メッセージの受信時刻と同じ識別子を含む直前の受信メッセージの受信時刻との差分を計算して「受信間隔dt=1.00」を得る。ここで、受信間隔dtは、「送信周期-th1」以上、且つ、「送信周期+th2」以下である。よって、推定装置10は、変数s_f、p_fを更新しない。ただし、部分領域に格納されている値が、「ID=200」を含む最初のメッセージ(即ち、メッセージM2)の同じ部分領域の値と異なるときは、推定装置10は、その部分領域の変数f_fを「0」に更新する。
【0212】
(8a)開始位置=1、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(1,1)(4)は「0」である。ここで、当該部分領域に格納されている値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(1,1)は更新されない。
【0213】
(8b)開始位置=1、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(1,2)(4)は「00」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(1,2)は更新されない。
【0214】
(8c)開始位置=1、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(1,3)(4)は「000」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(1,3)は更新されない。
【0215】
(8d)開始位置=1、長さ=4の部分領域
この部分領域に格納されている値は「0000」である。即ち、d(1,4)(4)は「0000」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(1,4)は更新されない。
【0216】
(8e)開始位置=2、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(2,1)(4)は「0」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(2,1)は更新されない。
【0217】
(8f)開始位置=2、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(2,2)(4)は「00」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(2,2)は更新されない。
【0218】
(8g)開始位置=2、長さ=3の部分領域
この部分領域に格納されている値は「000」である。すなわち、d(2,3)(4)は「000」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(2,3)は更新されない。
【0219】
(8h)開始位置=3、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(3,1)(4)は「0」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(3,1)は更新されない。
【0220】
(8i)開始位置=3、長さ=2の部分領域
この部分領域に格納されている値は「00」である。すなわち、d(3,2)(4)は「00」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(3,2)は更新されない。
【0221】
(8j)開始位置=4、長さ=1の部分領域
この部分領域に格納されている値は「0」である。即ち、d(4,1)(4)は「0」である。ここで、この値は、過去に受信したメッセージの同じ部分領域に格納されている値に対して新たな値ではない。よって、パターン数DP(4,1)は更新されない。
【0222】
(9)送信タイプの推定
推定装置10は、各部分領域について、
図12のS31~S35を実行する。ここで、上記処理が終了した時点で、部分領域(1,1)、(3,1)、(3,2)、(4,1)に対して設けられる変数p_fおよび変数f_fがそれぞれ「0」に更新されている。したがって、これらの部分領域に対応する送信タイプは、
図22に示すように、「非周期」と判定される。他の部分領域は、
図12のS31の条件を満たすので、その送信タイプは「イベント(特定値)」と判定される。
【0223】
さらに、1以上の部分領域に対応する送信タイプが「イベント(特定値)」と判定されたときは、推定装置10は、メッセージの送信タイプが「イベント(特定値)」であると推定する。したがって、推定装置10は、ID=200を含むメッセージは、「イベント送信付き周期メッセージ」であると推定する。
【0224】
(10)形式5~8の推定
データ領域に格納されている値を「符号付きデータ」と仮定すると、その値は「0」→「4」→「0」→「0」と推移し、その分散は小さい。よって、符号付き連続値可能性フラグ(1,4)は「1」のまま保持される。また、データ領域に格納されている値を「符号なしデータ」と仮定したケースでも、その値の推移は同じなので、符号なし連続値可能性フラグ(1,4)も「1」のまま保持される。
【0225】
各部分領域に格納されている値は、一様に分布しているとはいえない。よって、すべての部分領域について、チェックサム(一様)可能性フラグが「0」に更新される。
【0226】
(11)重複解消処理
図22に示すように、部分領域(1,1)(3,1)(4,1)に対して設けられている固定値可能性フラグがそれぞれ「1」である。すなわち、データ領域内の第1ビット、第3ビット、および第4ビットの固定値可能性フラグがそれぞれ「1」である。よって、これらのビットは、それぞれ「固定値」に確定する。したがって、第2ビットについてデータ形式の推定が行われる。ここで、開始位置(i)とデータ長(j)との和が8の倍数となる部分領域は存在しない。よって、推定装置10は、データ長の長い部分領域(すなわち、部分領域(2,1))から重複解消処理を開始する。
(11a)部分領域(2,1)のチェックサム(計算式)可能性フラグ(
図22では、形式2)は「0」に更新されているので、データ形式は確定しない。
(11b)部分領域(2,1)のイベント可能性フラグは「1」のまま保持されているので、データ形式が「イベント(特定値)」に確定される。したがって、推定装置10は、第1ビット、第3ビット、および第4ビットのデータを「固定値」と推定し、第2ビットのデータを「イベント(特定値)」と推定する。
【0227】
このように、本発明の実施形態に係わる推定方法は、データ領域内のデータの振る舞いに基づいてデータの形式を推定しながら、メッセージの送信タイプを推定できる。したがって、攻撃検知のための事前準備処理において、通信ログを解析する時間が削減される。これ加えて、通常時には周期的に送信され、且つ、イベント発生時には送信周期に対して非同期で送信されるメッセージ(上述の例では、イベント送信付き周期メッセージ)を識別できる。よって、本発明の実施形態に係わる推定方法により得られる推定結果を利用すれば、攻撃検知の精度が向上する。
【0228】
上述の実施例を含む実施形態に関し、さらに下記の付記を開示する。
(付記1)
ネットワーク内で送信されるメッセージの特徴を推定する推定方法であって、
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを参照し、
各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算し、
各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントし、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新し、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する
ことを特徴とする推定方法。
(付記2)
前記第2の変数は、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否か、及び、イベントの発生時以外の期間において当該部分領域に格納される値がイベント発生時以外に格納されるべき値であるか否かを表す
ことを特徴とする付記1に記載の推定方法。
(付記3)
前記第1の変数および前記第2の変数の初期状態はそれぞれ第1の状態であり、
処理対象の受信メッセージとその直前に受信した同じ識別子を有する受信メッセージとの間の受信間隔が前記送信周期より短いときに、各部分領域に対して設けられている第1の変数をそれぞれ第2の状態に更新し、
前記受信間隔が前記送信周期より短く、且つ、前記処理対象の受信メッセージ中の第1の部分領域の値が最初の受信メッセージ中の第1の部分領域の値と一致するときに、前記第1の部分領域に対して設けられている第2の変数を第2の状態に更新し、
前記受信間隔が前記送信周期より長いときに、各部分領域に対して設けられている第1の変数および第2の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表し、且つ、前記少なくとも1つの部分領域のパターン数が2以上であるときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に特定の値が設定される部分領域を含む、と推定する
ことを特徴とする付記1に記載の推定方法。
(付記4)
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表し、且つ、前記少なくとも1つの部分領域のパターン数が2以上であり、且つ、前記少なくとも1つの部分領域に対して設けられている第1の変数が第2の状態を表すときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に特定の値が設定される部分領域を含む、と推定する
ことを特徴とする付記3に記載の推定方法。
(付記5)
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期より短いか否かを表す第3の変数を管理し、
前記第3の変数の初期状態は第1の状態であり、
前記受信間隔が前記送信周期以上であるときに、各部分領域に対して設けられている前記第3の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表し、且つ、前記少なくとも1つの部分領域のパターン数が2以上であり、且つ、前記少なくとも1つの部分領域に対して設けられている第3の変数が第1の状態を表すときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に特定の値が設定される部分領域を含む、と推定する
ことを特徴とする付記3に記載の推定方法。
(付記6)
前記第1の変数および前記第2の変数の初期状態はそれぞれ第1の状態であり、
処理対象の受信メッセージとその直前に受信した同じ識別子を有する受信メッセージとの間の受信間隔が前記送信周期より短いときに、各部分領域に対して設けられている第1の変数をそれぞれ第2の状態に更新し、
前記受信間隔が前記送信周期より短く、且つ、前記処理対象の受信メッセージ中の第1の部分領域の値がその直前の受信メッセージ中の第1の部分領域の値と一致するときに、前記第1の部分領域に対して設けられている第2の変数を第2の状態に更新し、
前記受信間隔が前記送信周期より長いときに、各部分領域に対して設けられている第1の変数および第2の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表すときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に値が変化する部分領域を含む、と推定する
ことを特徴とする付記1に記載の推定方法。
(付記7)
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期より短いか否かを表す第3の変数を管理し、
前記第3の変数の初期状態は第1の状態であり、
前記受信間隔が前記送信周期以上であるときに、各部分領域に対して設けられている前記第3の変数をそれぞれ第2の状態に更新し、
前記複数の部分領域のうちの少なくとも1つの部分領域に対して設けられている第2の変数が第1の状態を表し、且つ、前記少なくとも1つの部分領域に対して設けられている第3の変数が第1の状態を表すときに、
受信メッセージは、前記所定のイベントが発生しない期間には前記送信周期で送信され、且つ、
前記受信メッセージは、前記所定のイベントの発生時に値が変化する部分領域を含む、と推定する
ことを特徴とする付記6に記載の推定方法。
(付記8)
前記第2の変数は、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否か、及び、イベントの発生時以外の期間において当該部分領域に格納される値がイベント発生時以外に格納されるべき値であるか否かを表し、
前記受信間隔が前記送信周期と対応し、且つ、前記処理対象の受信メッセージ中の第2の部分領域の値がイベント発生時以外に格納されるべき値と異なるときに、前記第2の部分領域に対して設けられている第2の変数を第2の状態に更新する
ことを特徴とする付記3または6に記載の推定方法。
(付記9)
メッセージのデータ領域に格納されているデータの形式が、イベントが発生したときに特定の値に設定されるデータ、イベントが発生したときに値が変化するデータ、固定値、符号なし連続値、符号付き連続値、計算式によるチェックサム、一様性を示すチェックサム、カウンタ、単調増加、マルチ値のいずれに該当するかを判定する
ことを特徴とする付記1~8のいずれか1つに記載の推定方法。
(付記10)
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを参照し、
各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算し、
各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントし、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新し、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する
処理をコンピュータに実行させるプログラム。
(付記11)
ネットワーク内で送信されるメッセージの特徴を推定する情報処理装置であって、
各メッセージの受信時刻および各メッセージに格納されているデータが記録された通信ログを保存する保存部と、
前記通信ログを参照して、各メッセージについて、当該メッセージの受信時刻と当該メッセージの受信前に受信したメッセージの受信時刻との差分を表す受信間隔を計算する受信間隔計算部と、
前記通信ログを参照して、各メッセージのデータ領域内の位置および長さの組合せで指定される複数の異なる部分領域それぞれに格納されている値を検出することで、各部分領域について、検出される異なる値の数を表すパターン数をそれぞれカウントするカウンタと、
各部分領域に対して設けられている、メッセージの受信間隔が所定の送信周期と対応するか否かを表す第1の変数、および、メッセージの受信間隔が所定のイベントの発生時以外の期間において前記送信周期と対応するか否かを表す第2の変数を、前記受信間隔および当該部分領域に格納されている値に基づいてそれぞれ更新する更新部と、
前記第1の変数、前記第2の変数、および前記パターン数に基づいて、メッセージの送信タイプおよびメッセージのデータ領域内に格納されているデータの形式を推定する推定部と、
を備える情報処理装置。
【符号の説明】
【0229】
10 推定装置
11 通信ログデータベース
12 制御部
13 パターン数カウンタ
14 受信間隔判定部
15 変数更新部
16 形式推定部
18 最終結果推定部
200 ECU
204 プロセッサ