(57)【要約】【課題】不正コードに対する安全性を向上した改竄検知システムを提供する。【解決手段】検証サーバは、被検証ＥＣＵの主記憶部内の記憶内容を全て記憶した記憶部と、乱数と期待値を生成する計算部と、検証ＥＣＵに乱数と期待値を送信する車外ＷＡＮ通信部を含み、検証ＥＣＵは、乱数と期待値を受信する車外ＷＡＮ通信部と、乱数を被検証ＥＣＵに送信し被検証ＥＣＵからレスポンスを受信し期待値とレスポンスを比較して検証する検証部を含み、被検証ＥＣＵは、乱数を検証ＥＣＵから受信し検証ＥＣＵにレスポンスを送信する車載ＬＡＮ通信部と、その空き領域を全て乱数でパディングした主記憶部と、レスポンスを生成するレスポンス生成部を含む。【選択図】図３
2018081349.tif 000002
【特許請求の範囲】
【請求項１】
検証サーバと、検証ＥＣＵと、被検証ＥＣＵを含む改竄検知システムであって、
前記検証サーバは、
前記被検証ＥＣＵの主記憶部内の記憶内容を全て記憶した記憶部と、
乱数を生成し、生成した前記乱数に基づいて前記記憶部内の前記記憶内容が記憶されている領域を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から期待値を生成する計算部と、
前記検証ＥＣＵに、前記乱数と前記期待値を送信する車外ＷＡＮ通信部を含み、
前記検証ＥＣＵは、
前記検証サーバが生成した前記乱数と前記期待値を受信する車外ＷＡＮ通信部と、
前記検証サーバが生成した前記乱数を前記被検証ＥＣＵに送信し、前記被検証ＥＣＵからレスポンスを受信し、前記期待値と前記レスポンスを比較して検証する検証部を含み、
前記被検証ＥＣＵは、
前記検証サーバが生成した前記乱数を前記検証ＥＣＵから受信し、前記検証ＥＣＵに前記レスポンスを送信する車載ＬＡＮ通信部と、
その空き領域を全て乱数でパディングした主記憶部と、
前記検証サーバが生成した前記乱数に基づいて、前記主記憶部を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から、前記レスポンスを生成するレスポンス生成部を含む
改竄検知システム。
【請求項２】
請求項１に記載の改竄検知システムであって、
前記計算部は、
第１乱数と第２乱数を生成する乱数生成部と、
前記記憶部の前記記憶内容のうち、前記第１乱数に対応するアドレス番号から前記第２乱数に対応するアドレス番号までの前記記憶内容のハッシュ値を検証側第１生成値として計算し、前記検証側第１生成値の計算に用いなかった前記記憶内容のハッシュ値を検証側第２生成値として計算し、前記検証側第１生成値と前記検証側第２生成値のそれぞれの所定ビットを抜き出して、検証側第１部分生成値と検証側第２部分生成値を取得し、前記検証側第１部分生成値と前記検証側第２部分生成値を連結して期待値を生成する期待値生成部を含み、
前記レスポンス生成部は、
前記主記憶部の前記記憶内容のうち、前記第１乱数に対応するアドレス番号から前記第２乱数に対応するアドレス番号までの前記記憶内容のハッシュ値を被検証側第１生成値として計算し、前記被検証側第１生成値の計算に用いなかった前記記憶内容のハッシュ値を被検証側第２生成値として計算し、前記被検証側第１生成値と前記被検証側第２生成値のそれぞれの所定ビットを抜き出して、被検証側第１部分生成値と被検証側第２部分生成値を取得し、前記被検証側第１部分生成値と前記被検証側第２部分生成値を連結してレスポンスを生成する
改竄検知システム。
【請求項３】
検証ＥＣＵと、被検証ＥＣＵを含む改竄検知システムであって、
前記検証ＥＣＵは、
前記被検証ＥＣＵの主記憶部内の記憶内容を全て記憶した記憶部と、
乱数を送信し、レスポンスを受信する通信部と、
送信した前記乱数に基づいて前記記憶部内の前記記憶内容が記憶されている領域を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から期待値を生成する計算部と、
前記期待値と前記レスポンスを比較して検証する検証部を含み、
前記被検証ＥＣＵは、
前記検証ＥＣＵが送信した乱数を受信し、前記レスポンスを送信する通信部と、
その空き領域を全て乱数でパディングした主記憶部と、
受信した前記乱数に基づいて、前記主記憶部を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から前記レスポンスを生成するレスポンス生成部を含む
改竄検知システム。
【請求項４】
請求項３に記載の改竄検知システムであって、
前記検証ＥＣＵが送信する前記乱数は、第1乱数と第２乱数とを連結した第３乱数であるものとし、
前記計算部は、
前記記憶部の前記記憶内容のうち、前記第１乱数に対応するアドレス番号から前記第２乱数に対応するアドレス番号までの前記記憶内容のハッシュ値を検証側第１生成値として計算し、前記検証側第１生成値の計算に用いなかった前記記憶内容のハッシュ値を検証側第２生成値として計算し、前記検証側第１生成値と前記検証側第２生成値のそれぞれの所定ビットを抜き出して、検証側第１部分生成値と検証側第２部分生成値を取得し、前記検証側第１部分生成値と前記検証側第２部分生成値を連結して期待値を生成し、
前記レスポンス生成部は、
前記主記憶部の前記記憶内容のうち、前記第１乱数に対応するアドレス番号から前記第２乱数に対応するアドレス番号までの前記記憶内容のハッシュ値を被検証側第１生成値として計算し、前記被検証側第１生成値の計算に用いなかった前記記憶内容のハッシュ値を被検証側第２生成値として計算し、前記被検証側第１生成値と前記被検証側第２生成値のそれぞれの所定ビットを抜き出して、被検証側第１部分生成値と被検証側第２部分生成値を取得し、前記被検証側第１部分生成値と前記被検証側第２部分生成値を連結してレスポンスを生成する
改竄検知システム。
【請求項５】
被検証ＥＣＵを検証する検証ＥＣＵであって、
その空き領域を全て乱数でパディングした前記被検証ＥＣＵの主記憶部全体の期待値を生成する計算部と、
前記期待値と前記被検証ＥＣＵから取得したレスポンスを比較して、前記主記憶部全体を検証する検証部を含み、
前記乱数は所定の出現確率の条件と所定の独立性の条件と所定の周期性の条件を充たす乱数である
検証ＥＣＵ。
【請求項６】
請求項５に記載の検証ＥＣＵであって、
前記主記憶部内の記憶内容を全て記憶した記憶部と、
前記被検証ＥＣＵに乱数を送信し、前記被検証ＥＣＵから前記レスポンスを受信する通信部を含み、
前記計算部は、
送信した前記乱数に基づいて前記記憶部内の前記記憶内容が記憶されている領域を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から前記期待値を生成する
検証ＥＣＵ。
【請求項７】
主記憶部内の空き領域が全て乱数でパディングされ、前記乱数は所定の出現確率の条件と所定の独立性の条件と所定の周期性の条件を充たす乱数である
被検証ＥＣＵ。
【請求項８】
コンピュータを、請求項５または６に記載の検証ＥＣＵとして機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動車などの各機能を制御するＥＣＵのソフトウェアの改竄を同車内の他のＥＣＵが検知するための改竄検知システム、検証ＥＣＵ、被検証ＥＣＵ、プログラムに関する。
【背景技術】
【０００２】
現代の自動車は、エンジン挙動や舵角操作といった自動車本来の機能からナビゲーションや外部通信といった情報システムまで、各機能をElectric Control Unit（ＥＣＵ）という多数のマイコンを用いて電子制御している。ＥＣＵ同士が通信することで、より高度な制御を実現する車載ネットワークシステムが構築される。車１台のＥＣＵ搭載個数、ならびにソフトウェアのコード総量は増大し続けており、ＥＣＵのソフトウェアにバグや脆弱性が残されたまま出荷される危険性がある。
【０００３】
また、地図データの更新や自動運転などの高度なサービスを実現するために、コネクテッドカーと呼ばれるシステムが実現されつつある。コネクテッドカーでは、通信キャリア網のデータ通信や近距離無線通信などを用いて自動車内外のネットワークが連携する。従来から車載ネットワークにはアフターマーケットにおけるＥＣＵの交換や自動車メーカにとって想定外の機器の追加といった不正動作に繋がりうる脅威が指摘されている。これに加え、上述のコネクテッドカーの実現によりソフトウェアのバグや脆弱性を突いた遠隔による不正な制御命令の実行やソフトウェア改竄の脅威が指摘されている。
【０００４】
コネクテッドカーの安全性と利便性を高めるために、ＥＣＵのソフトウェアのバグや脆弱性の修正あるいは改良を円滑に行う無線配信によるＥＣＵのソフトウェアアップデート機能（リモートリプログラミング）が検討されている。リモートリプログラミングが実現すれば、ソフトウェアの大規模なリコールが発生したとしても、自動車に１台ずつ専用機器を結線してソフトウェアを書き換える手間が不要となる。しかしリモートリプログラミング機能自体もまた攻撃者に悪用される危険性がある。このため、車内のＥＣＵ全体による車載ネットワークの構成の完全性を保証する技術（構成証明）の確立が要請されている。車載ネットワーク構成に対する脅威として、ＥＣＵのソフトウェアの改竄、物理的な接触を伴う交換、除外、追加が挙げられる。これらの攻撃に対して、構成証明の証跡を車外のしかるべき機関から容易に確認することができれば、コネクテッドカーに対するサイバー攻撃の早期発見や故障検知が可能となる。
【０００５】
構成証明の中でもＥＣＵのソフトウェアが改竄された状態、つまり車内システムの改竄を検知する技術が検討されている（例えば、非特許技術１）。非特許文献１には、耐タンパ性を有する機器を内蔵する検証ＥＣＵと、耐タンパ性を有しない被検証ＥＣＵとの二者間における認証および鍵共有方式が開示されている。なお、耐タンパ性を有するとは、物理装置の内部構造や記憶データが第三者から解析されないように、あるいは非破壊には解析されないように物理的対策が施された状態を指す。
【０００６】
非特許文献１において、検証ＥＣＵはレスポンスの期待値を算出するために被検証ＥＣＵのソフトウェアデータを記憶している。そして被検証ＥＣＵは自身の主記憶部に記憶されたソフトウェアデータをチェックサム関数Indisputable Code Execution（ＩＣＥ）と暗号学的ハッシュ関数に入力してレスポンスを生成する。関数ＩＣＥは主記憶部のソフトウェアデータだけでなくＣＰＵのプログラムカウンタやステータスレジスタの値を参照することで、ソフトウェアのデータ改竄だけでなく、データが主記憶部の別のアドレス位置に書き換えられていないかまで検証できる。
【０００７】
具体的には、関数ＩＣＥは計算結果だけでなく関数ＩＣＥにかかる計算時間・応答時間も改竄検知に利用する。関数ＩＣＥにかかる計算時間・応答時間は、マルウェアなどにより不正な動作が行われていないかどうかをチェックするために用いられる。
【０００８】
認証を偽証しようとするマルウェアが被検証ＥＣＵに書き込まれたと仮定する。この場合、主記憶部の元データであるソフトウェアデータが全て被検証ＥＣＵ内に残されていれば、マルウェアは関数ＩＣＥの正しい計算結果を算出できる。マルウェアは、自身が計算した正しい計算結果を検証ＥＣＵに返信することにより、改竄検知を掻い潜ろうとする。
【０００９】
しかし、ＩＣＥの実行コードをＣＰＵのアーキテクチャに合わせて最適化し最小のＣＰＵサイクル数で実現すれば、マルウェアが関数ＩＣＥを計算し、プログラムカウンタとステータスレジスタの値を偽装するために余計なＣＰＵサイクルを要する。この計算時間差を検証ＥＣＵが検出できればマルウェアによる偽証を検知できる。そのためＩＣＥの最小サイクル数実装と通信路の遅延を考慮した応答時間制限を適切に設計する必要がある。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】Debojyoti Bhattacharya, Sriram Subramanian Neelakantan, Jamshid Shokrollahi, Hans Loehr: “Bootstrapping trust in automotive networks with different types of ECUs”, 14th escar Europe - The world's leading Automotive Cyber Security conference, November 16-17, 2014
【発明の概要】
【発明が解決しようとする課題】
【００１１】
図１に従来技術の問題点の一つを示す。同図に示すように、従来技術では、主記憶部内の正規のソフトウェアが格納されている領域だけを検証範囲とする。このため主記憶部の空き領域に不正コードが記憶されていた場合（同図の網掛け部）、従来技術では検出できないか、検証に必要なコストが多大になる可能性がある。形式的に検証範囲を主記憶部内全体としても、従来技術では不正コードを検出できない可能性がある。例えば同図に示すように不正コードが空き領域に記憶されており、空き領域が「００」、「１１」、「ｆｆ」といった固定値、あるいは簡単な規則性が存在する質の悪い擬似乱数で単調にパディングされていた場合、不正コードは、自身が存在しなかった場合の空き領域の状態を再現し、主記憶部全体の正規の状態を再現したうえで、再現された主記憶部全体を用いて必要なレスポンスを生成することで、検証結果を偽証できる場合がある。
【００１２】
そこで本発明では、不正コードに対する安全性を向上した改竄検知システムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の改竄検知システムは、検証サーバと、検証ＥＣＵと、被検証ＥＣＵを含む。
【００１４】
検証サーバは、被検証ＥＣＵの主記憶部内の記憶内容を全て記憶した記憶部と、乱数を生成し、生成した乱数に基づいて記憶内容が記憶されている領域を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から期待値を生成する計算部と、検証ＥＣＵに、乱数と期待値を送信する車外ＷＡＮ通信部を含む。
【００１５】
検証ＥＣＵは、検証サーバが生成した乱数と期待値を受信する車外ＷＡＮ通信部と、検証サーバが生成した乱数を被検証ＥＣＵに送信し、被検証ＥＣＵからレスポンスを受信し、期待値とレスポンスを比較して検証する検証部を含む。
【００１６】
被検証ＥＣＵは、その空き領域を全て乱数でパディングした主記憶部と、検証サーバが生成した乱数を検証ＥＣＵから受信し、検証ＥＣＵにレスポンスを送信する車載ＬＡＮ通信部と、検証サーバが生成した乱数に基づいて、主記憶部を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から、レスポンスを生成するレスポンス生成部を含む。
【発明の効果】
【００１７】
本発明の改竄検知システムによれば、不正コードに対する安全性が向上する。
【図面の簡単な説明】
【００１８】
【図１】従来技術における問題点の一つを例示する図。
【図２】本発明における検証範囲と主記憶部の状態を説明する図。
【図３】実施例１の改竄検知システムの構成を示すブロック図。
【図４】実施例１の検証サーバの構成を示すブロック図。
【図５】実施例１の検証ＥＣＵの構成を示すブロック図。
【図６】実施例１の被検証ＥＣＵの構成を示すブロック図。
【図７】実施例１の検証サーバと検証ＥＣＵの動作を示すシーケンス図。
【図８】実施例１の検証ＥＣＵと被検証ＥＣＵの動作を示すシーケンス図。
【図９】実施例１の検証サーバの乱数生成部の構成を示すブロック図。
【図１０】実施例１の検証サーバの乱数生成部の動作を示すフローチャート。
【図１１】実施例１の検証サーバの期待値生成部の構成を示すブロック図。
【図１２】実施例１の検証サーバの期待値生成部の動作を示すフローチャート。
【図１３】実施例１の被検証ＥＣＵのレスポンス生成部の構成を示すブロック図。
【図１４】実施例１の被検証ＥＣＵのレスポンス生成部の動作を示すフローチャート。
【図１５】実施例１の改竄検知システムが実行する処理のコード例。
【図１６】実施例１の期待値生成部が実行するＲＤＨ関数のコード例。
【図１７】実施例１のレスポンス生成部が実行するＲＤＨ関数のコード例。
【図１８】実施例２の改竄検知システムの構成を示すブロック図。
【図１９】実施例２の検証ＥＣＵと被検証ＥＣＵの構成を示すブロック図。
【図２０】実施例２の検証ＥＣＵと被検証ＥＣＵの動作を示すシーケンス図。
【図２１】実施例２の改竄検知システムが実行する処理のコード例。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、詳細に説明する。なお、同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００２０】
＜実施例と従来技術の比較＞
図２を参照して、実施例における検証範囲と主記憶部の状態を従来技術（図１）と比較する。同図に示すように、以下の実施例では、被検証ＥＣＵ１３（２３）の主記憶部１３３（２３３）全体を検証範囲とすることで空き領域への不正コードの書き込みを検知する。具体的には製造工程などにおいて予め主記憶部１３３（２３３）の空き領域を全て乱数でパディングしておき、ソフトウェアと乱数を合わせた主記憶部１３３（２３３）の記憶領域全体を検証範囲とする。パディングされる乱数は、不正コードによって再現することが困難な程度に出現確率が一様で、無規則性（独立性）および無周期性が十分に確保された疑似乱数とすれば好適である。別の表現では、所定の出現確率の条件と所定の独立性の条件と所定の周期性の条件を充たす疑似乱数をパディングされる乱数として用いれば好適である。また、パディングされる乱数として自然現象から作られた自然乱数を用いればさらに好適である。
【００２１】
本発明では、ＣＰＵに依存せず統一された方式で実装可能とするために、検証に乱数生成器とハッシュ関数を用いた。なお、検証領域を主記憶部全体に拡張したことで、検証のチャレンジに対するハッシュ値計算（レスポンス生成）に被検証ＥＣＵ１３（２３）の処理時間の大部分が割かれることになる。計算時間を抑えるためにハッシュ関数に入力するデータ量は可能な限り少なくしたい。そのため、事前計算攻撃（レスポンスをチャレンジが生成される前に事前に多数蓄えて保管しておき、チャレンジＡに対応するレスポンスＡを返す攻撃）・リプレイ攻撃（以前行われた改竄検知のレスポンスを蓄えておき、同じチャレンジＡを受信したとき、蓄えておいた対応するレスポンスＡを送信する攻撃）への耐性を有しながら、ハッシュ関数に入力するデータ値は主記憶部内のデータだけになるように、レスポンス生成を工夫した。
【００２２】
＜実施例において想定する攻撃者＞
次に、以下の実施例において想定する攻撃者について述べる。攻撃者として以下の目的と能力を仮定する。攻撃者は被検証ＥＣＵ１３（２３）のソフトウェアを書き換えて悪意ある任意コードを実行したい。このためその前段階として検証ＥＣＵ１２（２２）による改竄検知を逃れる、あるいはチャレンジに対する正しいレスポンスを偽造して検証を誤らせる事を目的とする。攻撃者は以下の能力を有し、いずれも従来技術と同等の能力であるものとする。
１）被検証ＥＣＵ１３（２３）の物理的特徴（ＣＰＵのクロック周期やメモリ容量など）を知っている。
２）被検証ＥＣＵ１３（２３）内に記憶されたソフトウェアのデータ（命令やデータ、秘密鍵など）を知っている。
３）任意台数の被検証ＥＣＵ１３（２３）のソフトウェアを自由に改竄できる。
４）車載ネットワークに正規のＥＣＵ以外の機器（ＰＣやＥＣＵ）を物理的に追加することはできない。
５）正規ＥＣＵの不揮発性メモリを正規のメモリより大容量のメモリに交換することはできない。
【実施例１】
【００２３】
以下、図３を参照して実施例１の改竄検知システム１の構成を説明する。図３に示すように、本実施例の改竄検知システム１は、検証サーバ１１と、検証ＥＣＵ１２と、複数の被検証ＥＣＵ１３−１、１３−２、…を含む構成である。被検証ＥＣＵ１３については、同図において二個のみ（被検証ＥＣＵ１３−１、被検証ＥＣＵ１３−２）図示したが、特にその数量に制限はなく、その数量は自動車の仕様に応じて変動する。なお、以下の説明において被検証ＥＣＵ１３と表して枝番号を表示しない場合、該当の説明は本実施例の全ての被検証ＥＣＵに共通した説明であるものとする。
【００２４】
検証サーバ１１と検証ＥＣＵ１２は、例えば車外ＷＡＮによって通信可能とされている。検証サーバ１１と検証ＥＣＵ１２間は、第三者からの盗聴や改竄を受けない安全な通信路において無線あるいは有線接続される。安全な通信路の確保には従来技術を用いればよい。例えば無線通信であればＷＰＡ２やＴＬＣ（ＲＦＣ５２４６）などを適切に組み合わせればよい。そのため、検証サーバ１１側の検証ＥＣＵ１２との通信部、および検証ＥＣＵ１２側の検証サーバ１１との通信部は安全な通信路を確立するための通信方式が実装されている必要がある。
【００２５】
本実施例では、検証ＥＣＵ１２と被検証ＥＣＵ１３は何れも自動車の車両内に設置されているものとし、検証ＥＣＵ１２と被検証ＥＣＵ１３は、例えば車載ＬＡＮによって通信可能とされている。車載ＬＡＮについては、同図において、現代の車内システムでＥＣＵ間の通信に用いられる車内ネットワークプロトコルＣＡＮ(Controller Area Network)を模した、バス型接続の配線として示した。なお、本実施例の検証ＥＣＵ１２と被検証ＥＣＵ１３との通信方法はＣＡＮによって構成されるバス型接続の車内システムに限定されない。ただし、検証ＥＣＵ１２と被検証ＥＣＵ１３との通信が直接行えることが望ましい。言い換えれば、本実施例の車載ＬＡＮでは、検証ＥＣＵ１２による検証メッセージが、別の被検証ＥＣＵ１３を経由しなければ目的の被検証ＥＣＵ１３に到達できないようなネットワークトポロジを採用しないことが好ましい。現代の車内システムでは複数のＣＡＮによってサブネットワークが構築されている場合がある。このため検証ＥＣＵ１２の機能は、全てのＣＡＮサブネットワークに接続するゲートウェイＥＣＵが担うことが望ましい。
【００２６】
以下、図４を参照して本実施例の検証サーバ１１の構成を説明する。同図に示すように、本実施例の検証サーバ１１は、記憶部１１１と、計算部１１２と、車外ＷＡＮ通信部１１３を含む。記憶部１１１は、被検証ＥＣＵ主記憶部１１１１と、乱数／期待値記憶部１１１２と、検証結果記憶部１１１３を含む。計算部１１２は、乱数生成部１１２１と、期待値生成部１１２２と、検証結果確認部１１２３を含む。なお前提として、検証サーバ１１内の各機能はセキュアであることが保証されているものとする。
被検証ＥＣＵ主記憶部１１１１：検証サーバ１１は被検証ＥＣＵ１３の主記憶部１３３の記憶内容（後述するソフトウェアおよび乱数のデータ）を全て記憶した領域である被検証ＥＣＵ主記憶部１１１１を有する。当然のことではあるが、被検証ＥＣＵ主記憶部１１１１には第三者によって改竄されていない、正規のソフトウェアと乱数が記憶されている。
乱数／期待値記憶部１１１２：後述の乱数と期待値を記憶する機能を有する。
検証結果記憶部１１１３：後述の検証結果を記憶する機能を有する。
乱数生成部１１２１：乱数（検証のチャレンジとして用いる）を生成する機能を有する。
期待値生成部１１２２：生成した乱数と被検証ＥＣＵ主記憶部１１１１に基づいて、被検証ＥＣＵ１３の完全性を検証するために用いる期待値を生成する機能を有する。具体的には、期待値生成部１１２２は、生成した乱数に基づいて記憶部１１１内の記憶内容が記憶されている領域（被検証ＥＣＵ主記憶部１１１１）を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から期待値を生成する。期待値生成部１１２２の動作の詳細については後述する。
検証結果確認部１１２３：検証結果を確認し結果の如何に従い何らかの対策を講じる判断を行う機能を有する。
車外ＷＡＮ通信部１１３：検証ＥＣＵ１２に上述の乱数と期待値を送信する機能、および検証ＥＣＵ１２から検証結果を受信する機能を有する。前述のとおり、車外ＷＡＮ通信部１１３には検証ＥＣＵ１２と安全な通信を確立する従来技術が実装されている。
【００２７】
以下、図５を参照して本実施例の検証ＥＣＵ１２の構成を説明する。同図に示すように、本実施例の検証ＥＣＵ１２は、車外ＷＡＮ通信部１２１と、ハードウェアセキュリティモジュール１２２と、検証部１２３を含む。ハードウェアセキュリティモジュール１２２は、乱数／期待値記憶部１２２１と、検証結果記憶部１２２２を含む。検証部１２３は、レスポンス検証部１２３１と、車載ＬＡＮ通信部１２３２を含む。
車外ＷＡＮ通信部１２１：検証サーバ１１から乱数（チャレンジ）と期待値を受信する機能、および検証サーバ１１に検証結果を送信する機能を有する。前述のとおり、車外ＷＡＮ通信部１２１は検証サーバ１１と安全な通信を確立する従来技術が実装されている。
乱数／期待値記憶部１２２１：検証サーバ１１から受信した乱数と期待値を記憶する機能を有する。
検証結果記憶部１２２２：レスポンスの検証結果を記憶する機能を有する。
レスポンス検証部１２３１：検証サーバ１１から受信した期待値と、被検証ＥＣＵ１３から受信したレスポンスとが一致するかどうかを検証する機能を有する。
車載ＬＡＮ通信部１２３２：被検証ＥＣＵ１３に乱数（チャレンジ）を送信する機能、および被検証ＥＣＵ１３からレスポンスを受信する機能を有する。  
【００２８】
乱数、期待値および検証結果の改竄を困難にするために、検証ＥＣＵ１２の乱数／期待値記憶部１２２１および検証結果記憶部１２２２はHardware Security Module（ＨＳＭ）、あるいはＨＳＭ相当の耐タンパ性を有する機器によって実現される事が望ましい。また、検証ＥＣＵ１２が改竄された場合は検証サーバ１１に対して不当な検証結果を送信できるようにするため、ＨＳＭを用いたセキュアブートなどの手法により検証ＥＣＵ１２自身の完全性を検証することが望ましい。
【００２９】
以下、図６を参照して本実施例の被検証ＥＣＵ１３の構成を説明する。同図に示すように、本実施例の被検証ＥＣＵ１３は、車載ＬＡＮ通信部１３１と、レスポンス生成部１３２と、主記憶部１３３を含む。
車載ＬＡＮ通信部１３１：検証ＥＣＵ１２から乱数（チャレンジ）を受信する機能および検証ＥＣＵ１２にレスポンスを送信する機能を有する。
レスポンス生成部１３２：受信した乱数（チャレンジ）および主記憶部１３３のデータを用いて、レスポンスを生成する機能を有する。具体的には、レスポンス生成部１３２は、検証サーバ１１が生成した乱数に基づいて、主記憶部１３３を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から、レスポンスを生成する。レスポンス生成部１３２の動作の詳細については後述する。
主記憶部１３３：自身のソフトウェア（命令、データ）と乱数とを記憶する機能を有する。主記憶部１３３はＥＥＰＲＯＭやフラッシュメモリなどで実現できる。上述した通り、主記憶部１３３の空き領域は全て質の良い乱数で予めパディングされているものとする。
【００３０】
以下、図７を参照して本実施例の検証サーバ１１と検証ＥＣＵ１２の動作を説明する。まず、検証サーバ１１の乱数生成部１１２１は、事前に任意のタイミングで乱数（チャレンジ）を生成する（Ｓ１１２１）。乱数生成動作の詳細については、図９、図１０を参照して後述する。
【００３１】
同様に、検証サーバ１１の期待値生成部１１２２は、事前に任意のタイミングで乱数に対応する期待値を生成する（Ｓ１１２２）。期待値生成動作の詳細については、図１１、図１２を参照して後述する。
【００３２】
次に、検証サーバ１１の車外ＷＡＮ通信部１１３は、検証対象である自動車の検証ＥＣＵ１２に対して検証を実施するためのセッション開始要求を送信する（Ｓ１１３Ａ）。検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、検証サーバ１１からセッション開始要求を受信する（Ｓ１２１Ａ）。
【００３３】
次に、検証サーバ１１の車外ＷＡＮ通信部１１３と、検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、任意の従来技術によりハンドシェイクを実行し、安全な通信路を確立する（Ｓ１１３Ｂ，Ｓ１２１Ｂ）。
【００３４】
安全な通信路を確立後、検証サーバ１１の車外ＷＡＮ通信部１１３は、乱数（チャレンジ）および期待値を検証ＥＣＵ１２に送信する（Ｓ１１３Ｃ）。検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、乱数（チャレンジ）および期待値を検証サーバ１１から受信する（Ｓ１２１Ｃ）。
【００３５】
検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、乱数（チャレンジ）および期待値を記憶した後、検証サーバ１１に受信確認通知を送信する（Ｓ１２１Ｄ）。検証サーバ１１の車外ＷＡＮ通信部１１３は、検証ＥＣＵ１２から受信確認通知を受信する（Ｓ１１３Ｄ）。
【００３６】
検証ＥＣＵ１２の検証部１２３は、被検証ＥＣＵ１３とのセッションを開始する（Ｓ１２３）。ステップＳ１２３の詳細については、図８を参照して後述する。セッション開始と同時に、検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、検証サーバ１１に対して検証開始通知を送信する（Ｓ１２１Ｅ）。検証サーバ１１の車外ＷＡＮ通信部１１３は、検証ＥＣＵ１２から検証開始通知を受信する（Ｓ１１３Ｅ）。
【００３７】
なお、検証ＥＣＵ１２は任意のタイミングでステップＳ１２３の検証を開始してよいが、走行時の安全性を考慮し、停止時あるいはイグニッションＯＮ時、すなわち自動車の走行前にステップＳ１２３の検証が実行されれば好適である。
【００３８】
検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、ステップＳ１２３の検証の結果を通知する検証結果通知を検証サーバ１１に送信する（Ｓ１２１Ｆ）。検証サーバ１１の車外ＷＡＮ通信部１１３は、検証ＥＣＵ１２から検証結果通知を受信する（Ｓ１１３Ｆ）。
【００３９】
検証サーバ１１の検証結果確認部１１２３は、検証ＥＣＵ１２から受信した検証結果を検証結果記憶部１１１３に記憶すると共に、なんらかの対処を実行すべきかどうか判断する（Ｓ１１２３）。不正状態のＥＣＵが検出された場合、例えば自動車のオーナに対して通知を発信する、検証ＥＣＵ１２を介して自動車の走行を安全に停止させる指示を発信するなど、様々な対処が考えられる。検証結果確認部１１２３は、検証サーバ１１と検証ＥＣＵ１２間の接続が良好であったにも関わらず、検証開始時刻から検証結果通知時刻までにかかった時間が想定を遥かに上回る場合は、何らかの不正な行為が行われたと見做してもよい。この場合、検証結果確認部１１２３は、検証結果に問題がなかった場合であっても、不正状態と判断してもよい。被検証ＥＣＵ１２の完全性を確認した後、検証サーバ１１の車外ＷＡＮ通信部１１３は、検証ＥＣＵ１２に対してセッション終了通知を送信する（Ｓ１１３Ｇ）。検証ＥＣＵ１２の車外ＷＡＮ通信部１２１は、検証サーバ１１からセッション終了通知を受信する（Ｓ１２１Ｇ）。
【００４０】
以下、図８を参照して本実施例の検証ＥＣＵ１２と被検証ＥＣＵ１３の動作を説明する。まず、検証ＥＣＵ１２の車載ＬＡＮ通信部１２３２は、被検証ＥＣＵ１３に対して検証開始要求を送信する（Ｓ１２３２Ａ）。被検証ＥＣＵ１３の車載ＬＡＮ通信部１３１は、検証ＥＣＵ１２から検証開始要求を受信する（Ｓ１３１Ａ）。
【００４１】
次に、検証ＥＣＵ１２の車載ＬＡＮ通信部１２３２は、被検証ＥＣＵ１３に対して乱数（チャレンジ）を送信する（Ｓ１２３２Ｂ）。被検証ＥＣＵ１３の車載ＬＡＮ通信部１３１は、検証ＥＣＵ１２から乱数（チャレンジ）を受信する（Ｓ１３１Ｂ）。
【００４２】
被検証ＥＣＵ１３のレスポンス生成部１３２は、受信した乱数（チャレンジ）と自身の主記憶部１３３を用いて検証ＥＣＵ１２に対するレスポンスを生成する（Ｓ１３２）。レスポンス生成動作の詳細については、図１３、図１４を参照して後述する。
【００４３】
次に、被検証ＥＣＵ１３の車載ＬＡＮ通信部１３１は、生成したレスポンスを検証ＥＣＵ１２に送信する（Ｓ１３１Ｃ）。検証ＥＣＵ１２の車載ＬＡＮ通信部１２３２は、被検証ＥＣＵ１３からレスポンスを受信する（Ｓ１２３２Ｃ）。
【００４４】
検証ＥＣＵ１２のレスポンス検証部１２３１は、被検証ＥＣＵ１３から受信したレスポンスが期待値と一致しているか検証する。レスポンスと期待値が一致していれば検証対象の被検証ＥＣＵ１３を正常状態として検証結果を記憶し、一致しなければ不正状態として検証結果を記憶する（Ｓ１２３１）。なお、レスポンス検証部１２３１は、乱数（チャレンジ）送信時刻からレスポンス受信時刻までにかかった時間が所定の閾値を上回る場合は、何らかの不正な行為が行われたと見做して、検証結果に問題がなかったとしても不正状態と判断してもよい（Ｓ１２３１）。
【００４５】
ステップＳ１２３１の検証終了後、検証ＥＣＵ１２の車載ＬＡＮ通信部１２３２は、被検証ＥＣＵ１３にセッション終了通知を送信する（１２３２Ｄ）。被検証ＥＣＵ１３の車載ＬＡＮ通信部１３１は、検証ＥＣＵ１２からセッション終了通知を受信する（Ｓ１３１Ｄ）。
【００４６】
以下、図９を参照して本実施例の検証サーバ１１が備える乱数生成部１１２１の構成を説明する。同図に示すように、本実施例の乱数生成部１１２１は、第１乱数生成部１１２１１と、第２乱数生成部１１２１２と、乱数連結部１１２１３を含む。
【００４７】
以下、図１０を参照して上述の乱数生成部１１２１の動作を説明する。第１乱数生成部１１２１１は、第１乱数を生成する（Ｓ１１２１１）。第２乱数生成部１１２１２は、第２乱数を生成する（Ｓ１１２１２）。乱数連結部１１２１３は、第１乱数と第２乱数を連結して第３乱数を生成する（Ｓ１１２１３）。第３乱数は検証サーバ１１において期待値を生成するために用いられ、被検証ＥＣＵ１３においてレスポンスを生成するために用いられる。乱数生成部１１２１の動作の詳細については、図１５を参照して後述する。
【００４８】
以下、図１１を参照して本実施例の検証サーバ１１が備える期待値生成部１１２２の構成を説明する。同図に示すように、本実施例の期待値生成部１１２２は、乱数調整部１１２２１と、第1生成値計算部１１２２２と、第２生成値計算部１１２２３と、第１部分生成値取得部１１２２４と、第２部分生成値取得部１１２２５と、部分生成値連結部１１２２６を含む。
【００４９】
まず乱数調整部１１２２１は、第１乱数、第２乱数のいずれか、または両方が記憶部１１１内に再現されている主記憶部（すなわち、被検証ＥＣＵ主記憶部１１１１）の最後のアドレス番号より大きい場合、該当する乱数のｍｏｄを計算し、計算結果を新たな第１乱数、第２乱数とする（Ｓ１１２２１Ａ）。ステップＳ１１２２１Ａを実行することにより、二つの乱数が何れも記憶部１１１内に再現された主記憶部の最後のアドレス番号よりも小さな値となる。
【００５０】
次に乱数調整部１１２２１は、第１乱数と第２乱数の大小関係に応じて、乱数の定義を交換する（Ｓ１１２２１Ｂ）。具体的には、第１乱数よりも第２乱数の方が大きな値である場合には定義の交換を実行せず、第１乱数よりも第２乱数の方が小さな値である場合には定義の交換を実行し、ステップＳ１１２２１Ｂ終了後に第1乱数が第２乱数よりも小さな値となるように調整する。
【００５１】
次に、第１生成値計算部１１２２２は、記憶部１１１の被検証ＥＣＵ主記憶部１１１１の記憶内容のうち、第１乱数に対応するアドレス番号から第２乱数に対応するアドレス番号までの記憶内容のハッシュ値を検証側第１生成値として計算する（Ｓ１１２２２）。
【００５２】
次に、第２生成値計算部１１２２３は、記憶部１１１の被検証ＥＣＵ主記憶部１１１１の記憶内容のうち、検証側第１生成値の計算に用いなかった記憶内容のハッシュ値を検証側第２生成値として計算する（Ｓ１１２２３）。
【００５３】
次に、第１部分生成値取得部１１２２４は、検証側第１生成値のうち所定のビット（例えば３２ビット）を抜き出して、検証側第１部分生成値を取得する（Ｓ１１２２４）。
【００５４】
次に、第２部分生成値取得部１１２２５は、検証側第２生成値のうち所定のビット（例えば３２ビット）を抜き出して、検証側第２部分生成値を取得する（Ｓ１１２２５）。
【００５５】
次に、部分生成値連結部１１２２６は、検証側第１部分生成値と検証側第２部分生成値を連結して、期待値を生成する（Ｓ１１２２６）。
【００５６】
レスポンスは期待値と同様の手順で生成される。従って、被検証ＥＣＵ１３のレスポンス生成部１３２は、上述した期待値生成部１１２２と同様の構成を有し、同様の動作を実行する。以下、図１３を参照して、本実施例の被検証ＥＣＵ１３が備えるレスポンス生成部１３２の構成を説明する。
【００５７】
同図に示すように、本実施例のレスポンス生成部１３２は、乱数調整部１３２１と、第1生成値計算部１３２２と、第２生成値計算部１３２３と、第１部分生成値取得部１３２４と、第２部分生成値取得部１３２５と、部分生成値連結部１３２６を含む。
【００５８】
以下、図１４を参照してレスポンス生成部１３２の動作を説明する。まず、乱数調整部１３２１は、ステップＳ１１２２１Ａ、Ｓ１１２２１Ｂと同様に、第１乱数、第２乱数の調整を実行する（Ｓ１３２１Ａ、Ｓ１３２１Ｂ）。
【００５９】
次に、第１生成値計算部１３２２は、主記憶部１３３の記憶内容のうち、第１乱数に対応するアドレス番号から第２乱数に対応するアドレス番号までの記憶内容のハッシュ値を被検証側第１生成値として計算する（Ｓ１３２２）。
【００６０】
次に、第２生成値計算部１３２３は、主記憶部１３３の記憶内容のうち、被検証側第１生成値の計算に用いなかった記憶内容のハッシュ値を被検証側第２生成値として計算する（Ｓ１３２３）。
【００６１】
次に、第１部分生成値取得部１３２４は、被検証側第１生成値のうち所定のビット（例えば３２ビット）を抜き出して、被検証側第１部分生成値を取得する（Ｓ１３２４）。
【００６２】
次に、第２部分生成値取得部１３２５は、被検証側第２生成値のうち所定のビット（例えば３２ビット）を抜き出して、被検証側第２部分生成値を取得する（Ｓ１３２５）。
【００６３】
次に、部分生成値連結部１３２６は、被検証側第１部分生成値と被検証側第２部分生成値を連結して、レスポンスを生成する（Ｓ１３２６）。
【００６４】
以下、上述の動作を図１５、図１６、図１７のコード例の記載に合わせて再度説明する。ＣＡＮは１メッセージのペイロード長が最大６４ビットであるから、上述の一連の動作をＣＡＮにおいて適用すれば図１５のコード例とすることができる。図１６、図１７は、ハッシュ値を計算するためのRandomly Dimidiated Hash（ＲＤＨ）関数のコード例であって、上述のステップＳ１１２２１（Ｓ１３２１）、Ｓ１１２２２（Ｓ１３２２）、Ｓ１１２２３（Ｓ１３２３）に対応するコードである。ＲＤＨ関数は従来から汎用的に用いられている関数ではなく、本実施例の改竄検知システム１の動作を実現するために作られた関数である。
【００６５】
図１５の１行目において、Ｓ（検証サーバ１１）は、３２ビットの第１乱数ｒ０、同じく３２ビットの第２乱数ｒ１を生成する（上述のステップＳ１１２１１、Ｓ１１２１２）。
【００６６】
同図の２行目において、Ｓ（検証サーバ１１）は、第１乱数ｒ０と第２乱数ｒ１を連結して第３乱数ｒを生成する（上述のステップＳ１１２１３）。
【００６７】
同図の３行目において、Ｓ（検証サーバ１１）は、第３乱数ｒと、被検証ＥＣＵ主記憶部１１１１の記憶内容ｍｅｍｏｒｙｐを用いてＲＤＨ関数を演算し、検証側第１生成値ｅｘｐ０と、検証側第２生成値ｅｘｐ１を計算する（上述のステップＳ１１２２１、Ｓ１１２２２、Ｓ１１２２３）。
【００６８】
同図の４行目において、Ｓ（検証サーバ１１）は、検証側第１生成値ｅｘｐ０と、検証側第２生成値ｅｘｐ１のうち３２ビットを抜き出して、検証側第１部分生成値ｅｘｐ’０と、検証側第２部分生成値ｅｘｐ’１を取得する（上述のステップＳ１１２２４、Ｓ１１２２５）。
【００６９】
同図の５行目において、Ｓ（検証サーバ１１）は、検証側第１部分生成値ｅｘｐ’０と検証側第２部分生成値ｅｘｐ’１を連結して、期待値Ｅｘｐｅｃｔｅｄ  Ｖａｌｕｅを生成する（上述のステップＳ１１２２６）。
【００７０】
同図の６行目において、Ｓ（検証サーバ１１）は、Ｖ（検証ＥＣＵ１２）に対し、第３乱数ｒと期待値Ｅｘｐｅｃｔｅｄ  Ｖａｌｕｅを送信する（上述のステップＳ１１３Ｃ）。
【００７１】
同図の７行目において、Ｖ（検証ＥＣＵ１２）は、Ｐ（被検証ＥＣＵ１３）に対し、第３乱数ｒを送信する（上述のステップＳ１２３２Ｂ）。
【００７２】
同図の８行目において、Ｖ（検証ＥＣＵ１２）は、Ｔ１に第３乱数ｒの送信時刻ｃｕｒｒｅｎｔ  ｔｉｍｅを記録する。この動作は、例えば車載ＬＡＮ通信部１２３２が実行することとしてもよい。この場合、８行目の動作は、上述のステップＳ１２３２Ｂの一部として実行される。
【００７３】
同図の９行目において、Ｐ（被検証ＥＣＵ１３）は、第３乱数ｒと、主記憶部１３３の記憶内容ｍｅｍｏｒｙｐを用いてＲＤＨ関数を演算し、被検証側第１生成値ｒｅｓ０と、被検証側第２生成値ｒｅｓ１を計算する（上述のステップＳ１３２１、Ｓ１３２２、Ｓ１３２３）。
【００７４】
同図の１０行目において、Ｐ（被検証ＥＣＵ１３）は、被検証側第１生成値ｒｅｓ０と、被検証側第２生成値ｒｅｓ１のうち３２ビットを抜き出して、被検証側第１部分生成値ｒｅｓ’０と、被検証側第２部分生成値ｒｅｓ’１を取得する（上述のステップＳ１３２４、Ｓ１３２５）。
【００７５】
同図の１１行目において、Ｐ（被検証ＥＣＵ１３）は、被検証側第１部分生成値ｒｅｓ’０と被検証側第２部分生成値ｒｅｓ’１を連結して、レスポンスＲｅｓを生成する（上述のステップＳ１３２６）。
【００７６】
同図の１２行目において、Ｐ（被検証ＥＣＵ１３）は、Ｖ（検証ＥＣＵ１２）に対し、レスポンスＲｅｓを送信する（上述のステップＳ１３１Ｃ）。
【００７７】
同図の１３行目において、Ｖ（検証ＥＣＵ１２）は、Ｔ２にレスポンスＲｅｓの受信時刻ｃｕｒｒｅｎｔ  ｔｉｍｅを記録する。この動作は、例えば車載ＬＡＮ通信部１２３２が実行することとしてもよい。この場合、１３行目の動作は、上述のステップＳ１２３２Ｃの一部として実行される。
【００７８】
同図の１４行目において、Ｖ（検証ＥＣＵ１２）は、Ｔ２とＴ１の差分が閾値ａｌｌｏｗｅｄ  ｔｉｍｅ以下であるか否かを検証する。
【００７９】
同図の１５行目において、１４行目の検証の結果が正しくない場合、Ｖ（検証ＥＣＵ１２）は、処理を中断する。
【００８０】
同図の１６行目において、Ｖ（検証ＥＣＵ１２）は、レスポンスＲｅｓと期待値Ｅｘｐｅｃｔｅｄ  Ｖａｌｕｅとが等しいか否かを検証する。
【００８１】
同図の１７行目において、Ｖ（検証ＥＣＵ１２）は、同図の１６行目の検証結果を記憶する。
【００８２】
１４行目〜１７行目までの動作は、例えばレスポンス検証部１２３１が実行することとしてもよい。この場合、１４行目〜１７行目の動作は、上述のステップＳ１２３１の一部として実行される。
【００８３】
図１６は、期待値生成部１１２２が実行するＲＤＨ関数のコード例である。同図の１行目においてＲＤＨ関数への入力が定義される。ＲＤＨ関数の入力として、第３乱数ｒ、被検証ＥＣＵ１３の主記憶部１３３の記憶内容ｍｅｍｏｒｙが定義される。
【００８４】
同図の２行目において、ＲＤＨ関数からの出力が定義される。ＲＤＨ関数の出力として、使用されるハッシュ関数のレングスｌｅｎ（Ｈａｓｈ（・））を有する検証側第１生成値ｅｘｐ０と、検証側第２生成値ｅｘｐ１が定義される。
【００８５】
同図の３〜４行目において、同図のコード例で使用される文字の意味が定義される。ａｄｄｒｓｔａｒｔは、主記憶部の最初のアドレス番号という意味で用いられる。ａｄｄｒｅｎｄは、主記憶部の最後のアドレス番号という意味で用いられる。ｍｅｍ［ａ，ｂ］は、主記憶部のアドレス番号ａからアドレス番号ｂまでの記憶内容という意味で用いられる。
【００８６】
同図の５行目において、Ｓ（検証サーバ１１）は、第１乱数ｒ０、第２乱数ｒ１のいずれか、または両方が記憶部１１１内に再現されている主記憶部（すなわち、被検証ＥＣＵ主記憶部１１１１）の最後のアドレス番号ａｄｄｒｅｎｄより大きい場合、該当する乱数のｍｏｄを計算し（ｒ０，ｒ１  ｍｏｄ  ａｄｄｒｅｎｄ）、計算結果を新たな第１乱数ｒ０、第２乱数ｒ１とする（上述のステップＳ１１２２１Ａ）。
【００８７】
同図の６行目において、Ｓ（検証サーバ１１）は、第１乱数ｒ０よりも第２乱数ｒ１の方が小さな値である場合には定義の交換を実行する（上述のステップＳ１１２２１Ｂ）。
【００８８】
同図の７行目において、Ｓ（検証サーバ１１）は、第１乱数ｒ０に対応するアドレス番号から第２乱数ｒ１に対応するアドレス番号までの記憶内容ｍｅｍ［ｒ０，ｒ１］のハッシュ値を検証側第１生成値ｅｘｐ０として計算する（上述のステップＳ１１２２２）。
【００８９】
同図の７行目において、Ｓ（検証サーバ１１）は、検証側第１生成値ｅｘｐ０の計算に用いなかった記憶内容、すなわち
【００９０】
【数１】
2018081349.tif 000003
【００９１】
のハッシュ値を検証側第２生成値ｅｘｐ１として計算する（上述のステップＳ１１２２３）。
【００９２】
図１７は、レスポンス生成部１３２が実行するＲＤＨ関数のコード例であって、図１６と同様である。具体的には、図１７では、ＲＤＨ関数の実行主体が、Ｐ（被検証ＥＣＵ１３）となっており、図１６において検証側第１生成値ｅｘｐ０、検証側第２生成値ｅｘｐ１となっていた部分は、図１７において被検証側第１生成値ｒｅｓ０、被検証側第２生成値ｒｅｓ１にそれぞれ置き換えられている。
【００９３】
上述したように、ＲＤＨ関数は主記憶部全体を乱数に従ってランダムなアドレス位置で２分割し、それぞれの領域のハッシュ値を計算する関数である。ハッシュ関数に対する入力長を短くし、計算時間を短くするために、乱数をハッシュ関数への入力とはせず、主記憶部のアドレスの指定に用いた。
【００９４】
＜効果＞
上述したように、本実施例の改竄検知システム１は、主記憶部全体に対する改竄を検知できる。また、本実施例の改竄検知システム１によれば、レスポンスを偽造する手段として事前計算・リプレイ攻撃を利用することが事実上困難となっている。具体的には、本実施例においてはチャレンジが乱数であるため、事前計算は計算時間の観点から困難である。また、計算結果の格納はＥＣＵの主記憶部の容量の観点から困難である。
【００９５】
また、非特許文献１で用いられた関数ＩＣＥは、加算を用いて値を更新する際、最上位ビットの桁上がりを考慮していないという脆弱性が存在した。本実施例の改竄検知システム１は、この脆弱性を克服している。
【００９６】
また、非特許文献１で用いられた関数ＩＣＥは、適用可能なプラットフォームが限定されるという弱点があった。本実施例の改竄検知システム１は、検証に用いるアルゴリズムをＣＰＵのアーキテクチャに依存しない関数のみを用いて実現したため、上記の弱点を克服している。
【００９７】
また、非特許文献１で用いられた関数ＩＣＥは、ＣＰＵのアーキテクチャに合わせて最適化し、最小のＣＰＵサイクル数で実現する必要があるところ、自動車に搭載される数十から百数十のＥＣＵのＣＰＵ全てに対して上記を実現すれば、設計コストが膨大になるという弱点があった。本実施例の改竄検知システム１は、この弱点を克服している。
【実施例２】
【００９８】
以下、図１８を参照して、検証サーバの機能を検証ＥＣＵ内に取り込んだ、実施例２の改竄検知システム２について説明する。本実施例は、検証サーバとの頻繁な接続確立が困難な環境下において改竄を検知したい場合などに有効な構成例である。
【００９９】
本実施例の改竄検知システム２は、検証サーバ２１と、検証ＥＣＵ２２と、複数の被検証ＥＣＵ２３−１、２３−２、…を含む構成である。被検証ＥＣＵ２３については、実施例１と同様、特にその数量に制限はなく、その数量は自動車の仕様に応じて変動する。なお、以下の説明において被検証ＥＣＵ２３と表して枝番号を表示しない場合、該当の説明は本実施例の全ての被検証ＥＣＵに共通した説明であるものとする。
【０１００】
以下、図１９を参照して本実施例の検証ＥＣＵ２２、被検証ＥＣＵ２３の構成を説明する。同図に示すように、本実施例の検証ＥＣＵ２２は、記憶部２１１と、計算部２１２と、通信部２１３と、ハードウェアセキュリティモジュール２２２と、検証部２２３を含む。本実施例の被検証ＥＣＵ２３は、通信部２３１と、レスポンス生成部２３２と、主記憶部２３３を含む。
【０１０１】
以下、図２０、２１を参照して本実施例の検証ＥＣＵ２２、被検証ＥＣＵ２３の動作を説明する。記憶部２１１は、予め、被検証ＥＣＵの主記憶部の記憶内容を全て記憶している（Ｓ２１１）。ステップＳ２１１は、便宜上図２０内に示されているものの、実際には後述の動作よりもかなり過去に実行される動作である。主記憶部２３３は、予めその空き領域を全て乱数でパディングしている（Ｓ２３３）。ステップＳ２３３も、便宜上図２０内に示されているものの、実際には後述の動作よりもかなり過去（例えば製造工程）に実行される動作である。
【０１０２】
通信部２１３は、乱数を送信する（Ｓ２１３Ａ、図２１の３行目）。通信部２３１は、乱数を受信する（Ｓ２３１Ａ、図２１の３行目）。
【０１０３】
レスポンス生成部２３２は、受信した乱数に基づいて主記憶部２３３を複数の領域に分割し、それぞれの領域に対する所定の演算結果からレスポンスを生成する（Ｓ２３２、図２１の５〜７行目）。通信部２３１は、レスポンスを送信する（Ｓ２３１Ｂ、図２１の８行目）。通信部２１３は、レスポンスを受信する（Ｓ２１３Ｂ、図２１の８行目）。
【０１０４】
計算部２１２は、送信した乱数に基づいて、記憶部２１１の記憶内容が記憶されている領域を複数の領域に分割し、それぞれの領域に対する所定の演算の結果から期待値を生成する（Ｓ２１２、図２１の１２行目）。検証部２２３は、期待値とレスポンスを比較して検証する（Ｓ２２３、図２１の１２〜１３行目）。
【０１０５】
検証ＥＣＵ２２を第１検証サーバ、検証サーバ２１を第２検証サーバと呼ぶこととすると、本実施例において、第１検証サーバの各機能、特に被検証ＥＣＵ２３の主記憶部２３３は、不正に書き換えられないように何らかの保護対策を実施することが望ましい。例えば、第１検証サーバと第２検証サーバの記憶部および計算部の機能が一致しているか否かを定期的に検証することで、保護対策を実現してもよい。
【０１０６】
本実施例の改竄検知システム２によれば、検証サーバとの頻繁な接続確立が困難な環境下においても、実施例１と同様の効果を奏する。
【０１０７】
＜補記＞
本発明の装置は、例えば単一のハードウェアエンティティとして、キーボードなどが接続可能な入力部、液晶ディスプレイなどが接続可能な出力部、ハードウェアエンティティの外部に通信可能な通信装置（例えば通信ケーブル）が接続可能な通信部、ＣＰＵ（Central Processing Unit、キャッシュメモリやレジスタなどを備えていてもよい）、メモリであるＲＡＭやＲＯＭ、ハードディスクである外部記憶装置並びにこれらの入力部、出力部、通信部、ＣＰＵ、ＲＡＭ、ＲＯＭ、外部記憶装置の間のデータのやり取りが可能なように接続するバスを有している。また必要に応じて、ハードウェアエンティティに、ＣＤ−ＲＯＭなどの記録媒体を読み書きできる装置（ドライブ）などを設けることとしてもよい。このようなハードウェア資源を備えた物理的実体としては、汎用コンピュータなどがある。
【０１０８】
ハードウェアエンティティの外部記憶装置には、上述の機能を実現するために必要となるプログラムおよびこのプログラムの処理において必要となるデータなどが記憶されている（外部記憶装置に限らず、例えばプログラムを読み出し専用記憶装置であるＲＯＭに記憶させておくこととしてもよい）。また、これらのプログラムの処理によって得られるデータなどは、ＲＡＭや外部記憶装置などに適宜に記憶される。
【０１０９】
ハードウェアエンティティでは、外部記憶装置（あるいはＲＯＭなど）に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてメモリに読み込まれて、適宜にＣＰＵで解釈実行・処理される。その結果、ＣＰＵが所定の機能（上記、…部、…手段などと表した各構成要件）を実現する。
【０１１０】
本発明は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。また、上記実施形態において説明した処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されるとしてもよい。
【０１１１】
既述のように、上記実施形態において説明したハードウェアエンティティ（本発明の装置）における処理機能をコンピュータによって実現する場合、ハードウェアエンティティが有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記ハードウェアエンティティにおける処理機能がコンピュータ上で実現される。
【０１１２】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【０１１３】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【０１１４】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【０１１５】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、ハードウェアエンティティを構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2018081349.tif 000004
【図２】
2018081349.tif 000005
【図３】
2018081349.tif 000006
【図４】
2018081349.tif 000007
【図５】
2018081349.tif 000008
【図６】
2018081349.tif 000009
【図７】
2018081349.tif 000010
【図８】
2018081349.tif 000011
【図９】
2018081349.tif 000012
【図１０】
2018081349.tif 000013
【図１１】
2018081349.tif 000014
【図１２】
2018081349.tif 000015
【図１３】
2018081349.tif 000016
【図１４】
2018081349.tif 000017
【図１５】
2018081349.tif 000018
【図１６】
2018081349.tif 000019
【図１７】
2018081349.tif 000020
【図１８】
2018081349.tif 000021
【図１９】
2018081349.tif 000022
【図２０】
2018081349.tif 000023
【図２１】
2018081349.tif 000024