(57)【要約】      （修正有）【課題】改ざんの検証対象プログラムを分割した部分プログラム毎にプログラムの改ざんの検知処理を実施する電子制御装置において、起動時間の制約を満たしつつ、検証用認証子を記憶するために消費される記憶領域を抑制すること。【解決手段】本発明の電子制御装置１００は、プログラムを分割した複数の分割プログラム、および検証用認証子を記憶する記憶部１１、１５と、暗号演算により前記複数の分割プログラムそれぞれの部分認証子を生成する暗号演算部１２、１３、３０と、複数の前記部分認証子を用いた論理演算を行って演算認証子を生成し、前記検証用認証子と前記演算認証子とが一致するか否かによって前記プログラムの改ざんの有無を検証する検証部１４、３０と、を有する。【選択図】図１
2019020872.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを分割した複数の分割プログラム、および検証用認証子を記憶する記憶部（１１、１５）と、
暗号演算により前記複数の分割プログラムそれぞれの部分認証子を生成する暗号演算部（１２、１３、３０、２２４）と、
複数の前記部分認証子を用いた論理演算を行って演算認証子を生成し、前記検証用認証子と前記演算認証子とが一致するか否かによって前記プログラムの改ざんの有無を検証する検証部（１４、３０、２２４）と、
を有する電子制御装置。
【請求項２】
前記記憶部（１１）に記憶されている前記検証用認証子が一つであり、
前記検証部（１４、３０、２２４）が、すべての前記部分認証子を用いた論理演算を行って一つの演算認証子を生成し、前記一つの検証用認証子と前記一つの演算認証子とが一致するか否かによって前記プログラムの改ざんの有無を検証する、
請求項１に記載の電子制御装置。
【請求項３】
前記検証部（１４、３０、２２４）が行う前記論理演算が、排他的論理和（ＸＯＲ演算）または排他的論理和の否定（ＸＮＯＲ演算）である、
請求項１または２に記載の電子制御装置。
【請求項４】
プログラムを分割した複数の分割プログラムそれぞれの部分認証子を生成する暗号演算ステップ（Ｓ２０、Ｓ５０）と、
前記暗号演算ステップ（Ｓ２０、Ｓ５０）により得られた複数の前記部分認証子を用いて論理演算を行って演算認証子を生成する認証子演算ステップ（Ｓ６０）と、
前記演算認証子と、あらかじめ求めた検証用認証子とが一致するか否かを判定する検証ステップ（Ｓ９０、Ｓ１００）と、
を有するプログラム改ざん検知方法。
【請求項５】
電子制御装置が起動する際に前記各ステップを実行する、
請求項４に記載のプログラム改ざん検知方法。
【請求項６】
電子制御装置の低消費電力モードから通常モードに移行する際に前記各ステップを実行する、
請求項４に記載のプログラム改ざん検知方法。
【請求項７】
プログラムを分割した複数の分割プログラムそれぞれの部分認証子を生成する暗号演算ステップ（Ｓ２０、Ｓ５０）と、
前記暗号演算ステップ（Ｓ２０、Ｓ５０）により得られた複数の前記部分認証子を用いて論理演算を行って演算認証子を生成する認証子演算ステップ（Ｓ６０）と、
前記演算認証子と、あらかじめ求めた検証用認証子とが一致するか否かを判定する検証ステップ（Ｓ９０、Ｓ１００）と、
を有するプログラム改ざん検知方法、をコンピュータに実行させるプログラム。
【請求項８】
プログラムを分割した複数の分割プログラムそれぞれの部分認証子を生成する暗号演算ステップ（Ｓ２０、Ｓ５０）と、
前記暗号演算ステップ（Ｓ２０、Ｓ５０）により得られた複数の前記部分認証子を用いて論理演算を行って演算認証子を生成する認証子演算ステップ（Ｓ６０）と、
前記演算認証子と、あらかじめ求めた検証用認証子とが一致するか否かを判定する検証ステップ（Ｓ９０、Ｓ１００）と、
を有するプログラム改ざん検知方法、を電子制御装置が起動する際にコンピュータに実行させるプログラム。
【請求項９】
プログラムを分割した複数の分割プログラムそれぞれの部分認証子を生成する暗号演算ステップ（Ｓ２０、Ｓ５０）と、
前記暗号演算ステップ（Ｓ２０、Ｓ５０）により得られた複数の前記部分認証子を用いて論理演算を行って演算認証子を生成する認証子演算ステップ（Ｓ６０）と、
前記演算認証子と、あらかじめ求めた検証用認証子とが一致するか否かを判定する検証ステップ（Ｓ９０、Ｓ１００）と、
を有するプログラム改ざん検知方法、を電子制御装置の低消費電力モードから通常モードに移行する際にコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム改ざんを検知する電子制御装置に関するものである。
【背景技術】
【０００２】
車両には、電子制御装置として、エンジン、ハンドル、ブレーキ等の制御を行う制御系ＥＣＵ（Electronic Control Unit）や、メータやパワーウインドウ等の制御を行うボデー系ＥＣＵや、ナビゲーション装置等の情報系ＥＣＵ等といった異なる種類のＥＣＵが搭載されている。これら、車両に搭載される車載ＥＣＵのプログラムには、例えば安全性を確保するため、起動時間に厳しい時間的制約が課せられるものが含まれる。
【０００３】
特許文献１には、自動車等の組み込み機器において、ＯＳ（Operating System）等が第三者によって改ざんされる危険に対し、意図したＯＳ等のみを動作させるセキュアブート方法の発明が記載されている。同文献に記載のセキュアブート方法の発明は、高速かつ安全にシステムを起動させることを目的として、コンピュータが、システムのプログラム起動毎に、プログラムを複数に区分した部分プログラムのうち、検証対象となる部分プログラムを選択する選択工程と、選択した部分プログラムのハッシュ値を算出する算出工程と、算出したハッシュ値と正解ハッシュ値とが一致するかを判定し、一致する場合に起動処理を継続し、一致しない場合に起動処理を中断する検証工程とを、実行するものである。このように、特許文献１には、検証対象となるプログラム領域を複数の区分に分割し、各区分単位でプログラムの改ざんの有無の検証を順次実施することで、起動時間の制約を満しつつ、検証すべきすべてのプログラム領域を検証できることが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−２２５２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載されているセキュアブート方法は、起動時の時間制約を満たすためにプログラム領域を分割した部分プログラムごとに、認証子として生成したハッシュ値と、あらかじめ記憶しておいた検証用認証子である正解ハッシュ値とを比較し、プログラムの改ざんの有無を検証する。
無線インターフェースを経由して外部からの情報が自動車に提供される新たなサービスに伴って、自動車が外部と接続される機会も増える。このため、車載ＥＣＵのプログラムが改ざんのリスクも増大するといえる。したがって、安全なシステム起動のために、改ざんの有無を頻繁に検証することが必要になる。例えば、バッテリ接続時に起動する車載ＥＣＵの場合、バッテリ接続時にしか起動しないため、次回のバッテリ接続まで起動するタイミングがなく、その間にプログラムが改ざんされると改ざんがあったことに気付くのが遅れてしまう。したがって、スリープモードからのウェイクアップ起動（低消費電力モードから通常モードへの移行）時にも、改ざんの有無の検証を実施するようにすることで、改ざんに早期に気づくことが可能となる。
【０００６】
一般に、スリープからのウェイクアップ起動時間の制約は、通常の起動時間の制約よりも厳しい。このため、スリープからウェイクアップ起動時における時間的制約を満たそうとすると、検証すべきプログラムの領域を細かく分けて、多数の部分プログラムに分割する必要がある。
特許文献１に記載のセキュアブート方法は、各部分プログラムに対して一つずつの検証用認証子（正解ハッシュ値）をあらかじめ記憶しておく必要がある。このため、部分プログラムの数が増加すると、記憶領域に記憶される検証用認証子の数も増加する。したがって、多数の検証用認証子が限られた記憶領域（メモリ）における多くの領域を占めるという問題が発生する。
【０００７】
本発明の目的は、改ざんの検証対象プログラムを分割した分割プログラム毎にプログラムの改ざんを検知する処理を行なう電子制御装置において、起動時間の制約を満たしつつ、検証用認証子を記憶するために消費される記憶領域を抑制することである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の電子制御装置（１００、２００）は、
プログラムを分割した複数の分割プログラム、および検証用認証子を記憶する記憶部（１１、１５）と、
暗号演算により前記複数の分割プログラムそれぞれの部分認証子を生成する暗号演算部（１２、１３、３０、２２４）と、
複数の前記部分認証子を用いた論理演算を行って演算認証子を生成し、前記検証用認証子と前記演算認証子とが一致するか否かによって前記プログラムの改ざんの有無を検証する検証部（１４、３０、２２４）と、
を有する。
【発明の効果】
【０００９】
本発明の電子制御装置は、分割プログラムから生成された部分認証子を複数用いた論理演算によって生成された演算認証子と、あらかじめ同じ論理演算を行って生成された検証用認証子と、が一致するか否かにより、プログラムの改ざんの有無を検証する。この構成によって、記憶部にあらかじめ記憶しておく検証用認証子の数を分割プログラムの数よりも少なくすることができる。したがって、起動時間の制約を満たすためにプログラムの分割数を増やしても、検証用認証子の記憶に要する記憶部（メモリ）の消費量が少ない電子制御装置となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態１に係る電子制御装置の構成を説明するブロック図
【図２】図１の電子制御装置によるプログラムの改ざんチェック処理の概要を模式的に示す説明図
【図３】図１の電子制御装置の動作を説明するフローチャート
【図４】本発明の実施形態２に係る電子制御装置の構成を説明するブロック図
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について、図面を参照して説明する。各図において、同じ機能または発明の構成要素に対応する部分には同じ符号を付し、重複する説明を適宜省略する。実施形態において構成の一部分のみを説明している場合、説明しない他の部分には、先行して説明した他の実施形態の構成を適用することができる。
【００１２】
なお、本発明は、特許請求の範囲に記載された発明を意味しており、以下の実施形態に限定されるものではない。また、少なくともかぎ括弧内の語は、特許請求の範囲に記載された語を意味し、同じく以下の実施形態に限定されるものではない。
また、特許請求の範囲の従属項に記載の構成及び方法、および従属項に記載の構成及び方法に対応する実施形態の構成及び方法は、本発明においては任意の構成及び方法である。
【００１３】
（実施形態１）
１．電子制御装置（ＥＣＵ）の構成
本実施形態の電子制御装置の構成について以下に説明する。
図１に示すように、電子制御装置１００は、ＲＯＭ（Read Only Memory）１０、ＲＡＭ（Random Access Memory）２０、ＣＰＵ（Central Processing Unit）３０、Ｉ／Ｏ（Input / Output）、およびこれらの構成を接続するバスラインなどから構成されている。
なお、本実施形態は、メッセージ認証コード（Message Authentication Code、MAC）を用いた暗号演算を用いることを主眼として記載しているが、本発明はＨＡＳＨ関数（Hash function）を用いた演算（ＳＨＡ−２５６など）をはじめ、その他の演算も含むものである。
【００１４】
ＲＯＭ１０は、改ざんチェック用のプログラム保存部１１、暗号演算部１２、暗号鍵保存部１３、認証子演算部１４、および検証用認証子保存部１５を備えている。
【００１５】
プログラム保存部１１（本発明の「記憶部」に相当）には、改ざんチェック対象のプログラムが、複数のブロックに分割された分割プログラムとして記憶されている。プログラムの分割数は、電子制御装置１００の用途や起動時間等を考慮して決定すればよい。
なお、「分割」とは、記憶領域で区切るなどして、プログラムの部分の開始点が特定されていればよく、プログラム自体を分割する必要は必ずしもない。
【００１６】
暗号演算部１２（本発明の「暗号演算部」に相当）は、暗号演算プログラムが保存された領域である。暗号演算は、暗号演算部１２のプログラムを読み込んだＣＰＵ（暗号演算部）３０によって実施される。本実施形態では、ＣＭＡＣ（Cipher-based MAC）などのメッセージ認証コード（Message Authentication Code、MAC）を用いた暗号演算プログラムが暗号演算部１２に保存されている。ＭＡＣ以外の暗号演算としては、ＨＡＳＨ関数（Hash function）を用いた演算（ＳＨＡ−２５６など）が挙げられる。暗号演算により、複数の分割プログラムそれぞれの部分認証子を生成する。
【００１７】
暗号鍵保存部１３は、暗号演算部１２が暗号演算を実施する際に必要となる、ＭＡＣ演算の暗号鍵が記憶された領域である。なお、暗号演算部１２が暗号演算プログラムとして、ＨＡＳＨ関数（Hash function）を用いた演算を行う場合は、暗号鍵は不要なので暗号鍵保存部１３を用いる必要はない。
【００１８】
認証子演算部１４（本発明の「検証部」に相当）は、改ざんチェック用のプログラム保存部１１の各分割プログラムについて生成された、複数の部分認証子を用いて演算認証子を生成する論理演算プログラムが記憶された領域である。論理演算は、認証子演算部１４のプログラムを読み込んだＣＰＵ（検証部）３０によって実施される。認証子演算部１４において用いられる論理演算については、図２および図３を参照して後に説明する。また、プログラムの改ざんの有無の検証についても、図２および図３を参照して後に説明する。
【００１９】
検証用認証子保存部１５（本発明の「記憶部」に相当）は、改ざんを検証する対象であるプログラム保存部１１に記憶された検証対象のプログラムの検証用認証子が保存された領域である。検証用認証子は、プログラム保存部１１のプログラムについて、所定の暗号演算および論理演算をあらかじめ行うことにより生成されたものである。
【００２０】
電子制御装置１００は、ＲＯＭ１０に保存されているプログラム保存部１１を書き換え可能な機能（リプログラム機能）を備えていてもよい。この場合、プログラム保存部１１の書き換えにより、検証用認証子も変化するから、併せて検証用認証子保存部１５も書き換える必要がある。リプログラム機能を備えている場合、外部から接続される可能性が高くなるから、検証用認証子の記憶に要する領域を増大させることなく、プログラム保存部１１の分割数を増やすことができる電子制御装置１００は有用である。
【００２１】
ＲＡＭ２０は、次回ＭＡＣ生成対象ブロック保存部２１および認証子保存部２２を備えている。
次回ＭＡＣ生成対象ブロック保存部２１には、ブロック番号やＲＯＭ１０におけるアドレス等、次にＭＡＣ生成の対象となる分割プログラムを特定できる情報が保存される。
認証子保存部２２には、認証子が生成される毎に、新たな認証子が上書き保存される。
【００２２】
ＣＰＵ３０は、プログラムを実行する装置であり、プログラム保存部１１のプログラム改ざんを検証する際には、暗号演算部１２および認証子演算部１４の各プログラムを実行する。
【００２３】
２．改ざんチェック処理
上述した構成を備えた電子制御装置１００による、プログラムの改ざんチェック処理について、図２を参照して説明する。
図２に示すように、ＲＯＭ１０のプログラム保存部１１に書かれたプログラムをチェック対象とする改ざんチェック処理では、ＭＡＣ演算および論理演算が行われる。以下、ＭＡＣ演算および論理演算について順に説明する。
【００２４】
２．１．ＭＡＣ演算
ＭＡＣ演算は、メッセージ認証コード（ＭＡＣ）を用いた暗号演算であり、暗号演算部１２のプログラムの実行として、暗号鍵保存部１３の暗号鍵を用いて、ＲＯＭ１０の改ざんチェック領域１０Ａのブロック１〜ブロックｎの各分割プログラムを対象として行われる。ＭＡＣ演算の結果として、ブロック１〜ブロックｎの各分割プログラムそれぞれに対してＭＡＣ１〜ＭＡＣｎ（部分認証子）が生成される。生成されたＭＡＣは、例えば、AES（Advanced Encryption Standard）１２８の暗号アルゴリズムを用いた演算の場合は、１２８ビットである。なお、SHA（Secure Hash Algorithm）−２５６のＨＡＳＨ関数を用いた演算の場合は、生成されるＨＡＳＨ値は、２５６ビットである。
【００２５】
ＲＯＭ１０は、ｎ個の部分プログラムが保存されたプログラム保存部１１が置かれた改ざんチェック領域１０Ａと、それ以外の非改ざんチェック領域１０Ｂとに分かれている。
【００２６】
改ざんチェック領域１０Ａには、ブロック１〜ブロックｎに分割された部分プログラムが保存されている。以下では、ブロック１〜ブロックｎの部分プログラムを、適宜、ブロック１〜ブロックｎということもある。
非改ざんチェック領域１０Ｂには、検証用認証子が保存されている。検証用認証子は、演算によってあらかじめ生成されたものであり、認証子［１−ｎ］（演算用認証子）と比較して、ブロック１〜ブロックｎが改ざんされたものが含まれるか否かの判定に用いられるから、重要性の高いデータである。このため、ＲＯＭ１０の非改ざんチェック領域１０Ｂはセキュア領域として構成されている。セキュア領域とは、記憶されている情報へのアクセスが困難であって、情報を保護する機能が高い領域をいう。
【００２７】
図２には、非改ざんチェック領域１０Ｂの全部がセキュア領域として構成された例を示す。しかし、非改ざんチェック領域１０Ｂはセキュア領域ではなく、改ざんチェック領域１０Ａと同程度の情報保護機能の領域であってもよい、また、一部をセキュア領域としてもよい。
なお、図２では省略しているが、ＲＯＭ１０の非改ざんチェック領域１０Ｂには、暗号演算部１２、暗号鍵保存部１３および認証子演算部１４（図１参照）も置かれている。
【００２８】
２．２．論理演算
ブロックｘ（ｘは２〜ｎの整数）の暗号演算によってＭＡＣｘが算出されると、ＲＡＭ２０の認証子保存部２２に記憶されている認証子とＭＡＣｘとの論理演算が行われて、認証子［１−ｘ］が生成され、認証子保存部２２に上書きされる。併せて、次回ＭＡＣ生成対象ブロック保存部２１にブロックｘ＋１を特定するブロック番号ｘ＋１が保存される。
【００２９】
論理演算としては、論理積（ＡＮＤ演算）、論理積の否定（ＮＡＮＤ演算）、論理和（ＯＲ演算）、論理和の否定（ＮＯＲ演算）、排他的論理和（ＸＯＲ演算）および、排他的論理和の否定（ＸＮＯＲ演算＝一致論理）が挙げられる。これらのうちでは、排他的論理和および排他的論理和の否定が、真理値表における０と１との数が同じであることから、論理演算の繰り返しによって、０または１の一方に収束しないという点において好ましい。
【００３０】
２．３．ＭＡＣ演算と論理演算との関係
ＭＡＣ演算および論理演算はそれぞれ、２．１および２．２で説明したように実施される。以下では、ＭＡＣがブロック番号順に生成される場合、ＭＡＣ演算により生成される部分認証子と、論理演算により生成される演算認証子とが、それぞれ、どのように用いられるかについて、順次実施されるブロック１〜ブロックｎの演算処理に沿って順に説明する。
【００３１】
ブロック１のＭＡＣ１は、最初に生成される部分認証子である。このため、ＭＡＣ１が生成された時点では、複数の部分認証子を用いた論理演算を行うことができない。そこで、認証子［１］（演算認証子）として、ブロック１のＭＡＣ１がＲＡＭ２０の認証子保存部２２に保存される。併せて、次回ＭＡＣ生成対象ブロック保存部２１の次回ＭＡＣ生成対象ブロックを２にする。
【００３２】
続いて、ブロック２のＭＡＣ２が生成されると、認証子保存部２２の認証子［１］とＭＡＣ２との論理演算を行って生成された認証子［１−２］（演算認証子）が認証子保存部２２に上書き保存される。併せて、次回ＭＡＣ生成対象ブロック保存部２１の次回ＭＡＣ生成対象ブロックを３にする。
認証子［１］はＭＡＣ１と同一だから、ＭＡＣ２と認証子［１］との論理演算は、２つの部分認証子を用いて行われたものである。
【００３３】
さらに、ブロック３のＭＡＣ３が生成されると、認証子保存部２２の認証子［１−２］とＭＡＣ３との論理演算を行って生成された認証子［１−３］（演算認証子）が認証子保存部２２に上書き保存される。併せて、次回ＭＡＣ生成対象ブロック保存部２１の次回ＭＡＣ生成対象ブロックを４にする。
認証子［１−２］は、ＭＡＣ１とＭＡＣ２とを用いた論理演算により生成されたものであるから、認証子［１−２］とＭＡＣ３との論理演算は、３つの部分認証子ＭＡＣ１、ＭＡＣ２およびＭＡＣ３を用いて行われたものである。本発明において、論理演算に用いられた「複数の部分認証子」には、先の論理演算で用いられた部分認証子が含まれる。
【００３４】
ブロックＸのＭＡＣＸ（Ｘ＝４〜ｎ−１）が生成された場合の演算処理は、ブロック３と同様である。
【００３５】
最後に、ブロックｎのＭＡＣｎが生成されると、認証子保存部２２の認証子［１−ｎ-１］とＭＡＣｎとの論理演算を行って生成された認証子［１−ｎ］（演算認証子）が認証子保存部２２に上書き保存される。併せて、次回ＭＡＣ生成対象ブロック保存部２１の次回ＭＡＣ生成対象ブロックを１に初期化する。
認証子［１−ｎ-１］は、ＭＡＣ１〜ＭＡＣｎ-１を用いた論理演算により生成されたものであるから、認証子［１−ｎ-１］とＭＡＣｎとの論理演算は、部分認証子ＭＡＣ１〜ＭＡＣｎのすべてを用いて行われたものである。
【００３６】
認証子［１−ｎ］は、ブロック１〜ブロックｎのＭＡＣ１〜ＭＡＣｎ（部分認証子）のすべてを用いて行われた論理演算の結果として、生成された演算認証子である。したがって、ブロック１〜ブロックｎのいずれかが改ざんされた場合、ＭＡＣ１〜ＭＡＣｎのいずれかを介して、認証子［１−ｎ］に当該改ざんが反映される。したがって、改ざんがある場合、認証子［１−ｎ］と、事前の演算によって求められた検証用認証子とは一致しない。
【００３７】
そこで、認証子［１−ｎ］と検証用認証子とを比較して、一致しない場合にはプログラムの改ざん有、一致する場合にはプログラムの改ざん無、と判断することができる。当該比較によって、プログラムの改ざん有と判断した場合には、電子制御装置１００（図１参照）の起動を中止したり、警告表示を出したりする。
【００３８】
電子制御装置１００は、ＭＡＣ１〜ＭＡＣｎのすべてを用いた演算を行って認証子［１−ｎ］（演算認証子）生成し、検証用認証子とを比較して、プログラム保存部１１（図１参照）の改ざんの有無を判断する。このため、ＲＯＭ１０の検証用認証子保存部１５には一つの検証用認証子を保存すれば足りる。
【００３９】
したがって、従来のように、分割したブロック毎にプログラムの改ざんの有無を検証する、ブロック数と同じ数の検証用認証子が必要なものよりも、ブロック数ｎから１を引いたｎ−１個の検証用認証子の記憶容量を削減することができる。
【００４０】
例えば、部分認証子であるＭＡＣ１〜ＭＡＣｎとして１２８ビットのものを用いた場合、（ｎ−１）×１２８ビットの記憶容量を削減することができる。電子制御装置１００によれば、改ざん検証の対象となるプログラムの分割数が多くなるほど、ＲＯＭ１０の記憶容量の削減効果が高くなる。プログラムの分割数の増大は、起動処理が中断した場合に、それまでの処理が無駄になることを防止し、電子制御装置１００の起動時間を短縮するために有効である。
【００４１】
図２では、検証用認証子が一つである場合記載した。このように、検証用認証子を一つにすることは、ＲＯＭ１０の検証用認証子保存部１５の記憶容量を削減する観点から好ましいといえる。
ただし、検証用認証子保存部１５に保存される検証用認証子の数は、一つに限られず、複数としてもよい、検証用認証子を複数とする場合、ブロック１〜ブロックｎを複数のグループに分け、各グループ用の検証用認証子をあらかじめＲＯＭ１０に記憶しておく。そして、各グループの部分認証子をすべて用いた論理演算による検証用認証子を生成し、検証用認証子と比較し、当該グループに含まれる分割プログラムの改ざんの有無を判断する。
【００４２】
認証子［１］〜認証子［１−ｎ］の算出を連続して、一度で行うことが出来ない場合、暗号演算や論理演算の途中で改ざんチェック処理が中止される。この場合、認証子保存部２２には、中止されるまでの改ざんチェック処理によって得られた認証子（演算認証子）が保存されている。また、次回ＭＡＣ生成対象ブロック保存部２１には、認証子が得られた論理演算の次に、ＭＡＣ生成対象となるブロックが保存されている。したがって、中止される迄の改ざんチェック処理で、認証子を生成した論理演算の次の暗号演算から再開することができる。そして、再開した暗号演算に続く論理演算では、認証子保存部２２の認証子を用いることができため、中断されるまでに完了したブロックに対する暗号処理および論理演算の結果を有効に用いることができる。
したがって、プログラムを分割して、改ざんチェック処理を行うことによって、プログラム検証に要する時間を短縮することが可能になる。
【００４３】
ＲＡＭ２０は、低消費電力モードから通常モードへの起動（Ｗａｋｅ  Ｕｐ起動）において、初期化されない非初期化領域２０Ａと、初期化される初期領域２０Ｂとからなっている。非初期化領域２０Ａには、次回ＭＡＣ生成対象ブロック保存部２１と認証子保存部２２とが置かれている。このため、認証子１〜認証子［１−ｎ］が算出される毎に書き換えられた次回ＭＡＣ生成対象ブロック保存部２１、および認証子保存部２２に書き込まれた情報は、Ｗａｋｅ  Ｕｐ起動時に維持される。したがって、認証子１〜認証子［１−ｎ］の演算途中で、再起動が生じた場合、再起動前に記録された次回ＭＡＣ生成対象ブロック保存部２１および認証子保存部２２の情報に基づいて、改ざんチェック処理を再開することができる。
【００４４】
次回ＭＡＣ生成対象ブロック保存部２１および認証子保存部２２が保存される領域は、Ｗａｋｅ  Ｕｐ起動時に初期化されない領域であれば、改ざんチェック処理の中断から素早く再開することができる。このため、次回ＭＡＣ生成対象ブロック保存部２１および認証子保存部２２を、ＥＥＰＲＯＭやＤａｔａ  Ｆｌａｓｈ等の書き換え可能な不揮発性メモリに保存してもよい。ただし、処理速度は、例示の不揮発性メモリよりもＲＡＭ２０の方が速いため、電子制御装置１００の起動時における時間制約を満たすことができる場合に限って、前記例示の不揮発性メモリを使用できる。
【００４５】
本発明は、電子制御装置を複数備えた電子制御装置ユニットとして実施することもできる。電子制御装置を複数備えた電子制御装置ユニットは、起動時における時間的制約が異なる電子制御装置が組み合わせて用いられることが多い。したがって、記憶部に記憶されている分割プログラムの分割数を、複数の電子制御装置の用途や、移動時の時間的制約に応じて、異ならせることが好ましい。これにより、電子制御装置の各起動時間の制約を満たしつつ、電子制御装置ユニットにおける記憶部全体としてメモリの消費量を抑制することができる。
【００４６】
３．プログラム改ざん検知方法
図３を参照して、上述した電子制御装置１００によるプログラム改ざん検知方法について、説明する。
プログラム改ざん検知方法は、ＣＰＵ３０が暗号演算部１２および認証子演算部１４（図１参照）のプログラムを読み込んで実行するものであり、電子制御装置１００の起動時、低消費電力モードから通常モードに移行する際等にコールされる。低消費電力モードは、電子制御装置１００が、通常モードにおいて行う処理の一部を行わない、消費電力が通常モードよりも小さい状態をいう。実行中のプログラムがメモリに保存され一時的に停止するスリープモードは、低消費電力モードの一例である。
【００４７】
Ｓ１０では、ＲＡＭ２０の次回ＭＡＣ生成対象ブロック保存部２１に記録されているブロック番号を参照して、ブロック番号が１以外であるか否かが判定される。そして、次回ＭＡＣ生成対象ブロック保存部２１のブロック番号が１以外ではない場合（１である場合）には（Ｓ１０：ＮＯ）Ｓ２０（暗号演算ステップ）に処理が移行され、次回ＭＡＣ生成対象ブロック保存部２１のブロック番号が１以外である場合には（Ｓ１０：ＹＥＳ）Ｓ５０（暗号演算ステップ）に移行する。
【００４８】
Ｓ２０では、ＭＡＣ生成対象ブロックであるブロック１の分割プログラムのＭＡＣ１を生成し、Ｓ３０に移行する。
Ｓ３０では、Ｓ２０で生成されたＭＡＣ１をＲＡＭ２０の認証子保存部２２に、認証子として記憶し、Ｓ４０（認証子演算ステップ）に移行する。
Ｓ４０では、ＲＡＭ２０の次回ＭＡＣ生成対象ブロック保存部２１に、次回ＭＡＣ生成対象ブロックとして、Ｓ２０においてＭＡＣを生成した部分プログラムのブロック番号に１を加えたブロック番号を書き込んで（設定して）、本処理を終了する。
【００４９】
Ｓ５０では、ＭＡＣ生成対象ブロックである、ブロック番号ｘ（ｘは２〜ｎの整数）の分割プログラムのＭＡＣｘを生成して、Ｓ６０（認証子演算ステップ）に移行する。
Ｓ６０では、認証子演算部１４が、Ｓ５０で生成されたＭＡＣとＲＡＭ２０の認証子保存部２２に記憶されている認証子［１−（ｘ−１）］との論理演算を行い、認証子［１−（ｘ）］を算出し、Ｓ７０に移行する。
Ｓ７０では、ＲＡＭ２０の認証子保存部２２に、生成された認証子［１−ｘ］を記憶し、Ｓ８０に移行する。
【００５０】
Ｓ８０では、Ｓ５０でＭＡＣが生成されたブロックが最終ブロックか否か、すなわち、ＭＡＣが生成されたブロックのブロック番号ｘが、分割プログラムのブロック数ｎと等しい（ｘ＝ｎ）か否かが判断される。
ｘ＝ｎである場合には（Ｓ８０：Ｙｅｓ）、Ｓ７０で認証子保存部２２に記憶された認証子［１−ｎ］は、すべての分割プログラムの部分認証子を用いた論理演算の結果得られたものである。すべての分割プログラムのなかに、改ざんされたプログラムが含まれるか否かを検証する検証用認証子として用いることができる。そこで、Ｓ９０（検証ステップ）に移行する。
ｘ＝ｎでない場合には、Ｓ４０に移行する。
【００５１】
Ｓ９０では、認証子保存部２２に保存されている認証子［１−ｎ］と、検証用認証子保存部１５に保存されている検証用認証子と、を比較する。
Ｓ１００（検証ステップ）では、Ｓ９０において比較した値が一致したか否を判断する。
一致する場合には（Ｓ１００：ＹＥＳ）Ｓ１１０に処理が移行され、一致しない場合には（Ｓ１００：ＹＥＳ）Ｓ１２０に処理が移行される。
【００５２】
Ｓ１１０では、改ざんチェック結果を改ざんなしに設定し、Ｓ１３０に移行する。
Ｓ１２０では、改ざんチェック結果を改ざんありに設定し、Ｓ１３０に移行する。
Ｓ１３０では、次回ＭＡＣ生成対象ブロック保存部２１のブロック番号を１に初期化して、本処理を終了する。
【００５３】
本発明は、上述したプログラム改ざん検知方法をコンピュータに実行させるプログラムとして実施することもできる。当該プログラムは、電子制御装置が起動する際や、低消費電力モードから通常モードに移行する際に実行される。
【００５４】
以上のように、本実施形態の電子制御装置によれば、プログラムを分割した分割プログラム毎に必要となる各部分認証子そのものではなく、複数の部分認証子を用いて論理演算を行って得られる演算認証子を検証用認証子との比較対象とし、プログラムの改ざんの有無を検知する。これにより、記憶すべき検証用認証子の数を削減し、ＲＯＭの大量消費を抑えることが可能になる。
【００５５】
（実施形態２）
セキュリティチップを利用する電子制御装置（ＥＣＵ）に本発明を適用する形態について説明する。
図４に示すように、本実施形態の電子制御装置２００は、ＲＯＭ２１０、セキュリティチップ２２０、ＲＡＭ２０、ＣＰＵ３０、およびＩ／Ｏおよびこれらの構成を接続するバスラインを備えている。
【００５６】
電子制御装置２００は、ＲＯＭ１０に代えて、ＲＯＭ２１０およびセキュリティチップ２２０を備えている構成において、電子制御装置１００と異なっている。ＲＯＭ１０の各部のうち、ＲＯＭ２１０に配置されているのはプログラム保存部１１のみである。プログラム保存部１１以外は、耐タンパー性（記憶データを解析する困難さ）が高いセキュリティチップ２２０に置かれている。
【００５７】
セキュリティチップ２２０は、セキュア（Ｓｅｃｕｒｅ）ＣＰＵ２２４、セキュア（Ｓｅｃｕｒｅ）ＲＡＭ２２３、セキュアインターフェース（Ｓｅｃｕｒｅ  Ｉ／Ｆ）、ハードウェアＩＰモジュール（ＨＷＩＰ）２２１、およびセキュア（Ｓｅｃｕｒｅ）ＲＯＭ２２２を備えている。ハードウェアＩＰモジュール２２１は、暗号演算部１２を有している。セキュア（Ｓｅｃｕｒｅ）ＲＯＭ２２２は、暗号鍵保存部１３、認証子演算部１４および検証用認証子保存部１５を有している。セキュア（Ｓｅｃｕｒｅ）ＲＡＭ２２３は、次回ＭＡＣ生成対象ブロック保存部２１、および認証子保存部２２を有している。そして、実施形態１においては、図２の各種暗号演算や図３のフローの処理はＣＰＵ３０が実行していたが、本実施形態においてはセキュア（Ｓｅｃｕｒｅ）ＣＰＵ２２４がこれを実行する。
【００５８】
以上のように、プログラム改ざんの有無を検証する処理に用いられるプログラム（および演算認証子や次回ＭＡＣ生成対象ブロック等の一時データ）、暗号鍵、および検証用認証子をセキュリティチップ２２０に記憶することにより、これらプログラム（および上記一時データ）、暗号鍵、および検証用認証子にアクセスされることを防止することができる。
【００５９】
（総括）
本発明の電子制御装置の形態の例として、半導体、電子回路、モジュール、マイクロコンピュータが挙げられる。またこれらにアンテナや通信用インターフェースなど、必要な機能を追加してもよい。また、カーナビゲーションシステム、スマートフォン、パーソナルコンピュータ、携帯情報端末のような形態をとることも可能である。
【００６０】
加えて、本発明は、上述の専用のハードウェアで実現できるだけでなく、メモリやハードディスク等の記録媒体に記録したプログラム、及びこれを実行可能な専用又は汎用ＣＰＵ及びメモリ等を有する汎用のハードウェアとの組み合わせとしても実現できる。
【００６１】
専用や汎用のハードウェアの記憶領域（外部記憶装置（ハードディスク、ＵＳＢメモリ等）、内部記憶装置（ＲＡＭ，ＲＯＭ等））に格納されるプログラムは、記録媒体を介して、あるいは記録媒体を介さずにサーバから通信回線を経由して上述の専用又は汎用のハードウェア（本発明の「コンピュータ」に相当」に提供することもできる。これにより、プログラムのアップグレードを通じて常に最新の機能を提供することができる。
【産業上の利用可能性】
【００６２】
本発明にかかる電子制御装置は、車載用電子制御装置（ＥＣＵ）として用いることができる。もちろん、車載用以外の電子制御装置も本発明に含むものである。
【符号の説明】
【００６３】
１０  ＲＯＭ（記憶部）、１０Ａ  非改ざんチェック領域、１０Ｂ  非改ざんチェック領域、１１  プログラム保存部（記憶部）、１２  暗号演算部（暗号演算部）、１３  暗号鍵保存部、１４  認証子演算部（検証部）、１５  検証用認証子保存部（記憶部）、２０  ＲＡＭ、２０Ａ  非初期化領域、２０Ｂ  初期領域、２１  次回ＭＡＣ生成対象ブロック保存部、２２  認証子保存部、３０  ＣＰＵ（暗号演算部、検証部）、１００、２００  電子制御装置（電子制御装置）
【図１】
2019020872.tif 000003
【図２】
2019020872.tif 000004
【図３】
2019020872.tif 000005
【図４】
2019020872.tif 000006