(57)【要約】【課題】ブロック毎にデータを書き換え可能な複数のブロックを有する不揮発性メモリに記憶されている全領域のデータの正当性を検証するために要する処理時間を短縮する。【解決手段】不揮発性メモリは、ブロック毎にデータを書き換え可能な複数のブロックを有している。書き換え可能な不揮発性の記憶部は、複数のブロックの全領域のデータの正当性の検証に使用される全領域電子署名を記憶する。Ｓ４１４において第１の算出部は、全領域のデータから第１の全領域ダイジェストを算出する。Ｓ４１６において第２の算出部は、記憶部に記憶されている全領域電子署名から検証鍵を使用して第２の全領域ダイジェストを算出する。Ｓ４１８において検証部は、所定のタイミングで、第１の算出部が算出する第１の全領域ダイジェストと、第２の算出部が算出する第２の全領域ダイジェストとが一致しているか否かの判定結果に基づいて、全領域のデータの正当性を検証する。【選択図】図２
2018078373.tif 000002
【特許請求の範囲】
【請求項１】
ブロック毎にデータを書き換え可能な複数のブロックを有する不揮発性メモリ（７０）と、
前記複数のブロックの全領域のデータの正当性の検証に使用される全領域電子署名（９６、１０２）を記憶する書き換え可能な不揮発性の記憶部（７０、１００）と、
前記全領域のデータから第１の全領域ダイジェストを算出する第１の算出部（Ｓ４１４、Ｓ４８０）と、
前記記憶部に記憶されている前記全領域電子署名から検証鍵（６４）を使用して第２の全領域ダイジェストを算出する第２の算出部（Ｓ４１６、Ｓ４８２）と、
所定のタイミングで、前記第１の算出部が算出する前記第１の全領域ダイジェストと、前記第２の算出部が算出する前記第２の全領域ダイジェストとが一致しているか否かの判定結果に基づいて、前記全領域のデータの正当性を検証する検証部（Ｓ４１８、Ｓ４８４）と、
を備える電子制御装置（２、４）。
【請求項２】
請求項１に記載の電子制御装置において、
外部の書き換えツール（２００）と通信する通信部（１０、Ｓ４５０、Ｓ４５８、Ｓ４６４、Ｓ４６６、Ｓ４７２、Ｓ４７４、Ｓ４９４、Ｓ４９６）をさらに備え、
さらに前記第１の算出部（Ｓ４６０）は、前記複数のブロックのうち書き換え対象のブロックに対する書き換えデータを前記書き換えツールから前記通信部が受信すると、書き換え対象以外の前記ブロックのデータと、前記通信部が前記書き換えツールから受信する前記書き換えデータとから第３の全領域ダイジェストを算出し、
前記第１の算出部が算出する前記第３の全領域ダイジェストから前記書き換えツールまたは当該電子制御装置が秘密鍵（２２０）を使用して生成する電子署名で前記全領域電子署名を書き換える署名書き換え部（Ｓ４６８、Ｓ４９８）と、
前記書き換えデータで書き換え対象の前記ブロックのデータを書き換えるデータ書き換え部（Ｓ４６８、Ｓ５００）と、をさらに備える、
電子制御装置。
【請求項３】
請求項１に記載の電子制御装置において、
外部の書き換えツール（２００）と通信する通信部（１０）をさらに備え、
前記書き換えツールは、これまで前記書き換えツールが前記通信部に送信した書き換え対象のブロックに対する書き換えデータに基づいて書き換え前の前記全領域のデータの内容を管理しており、
前記通信部は、今回の前記書き換えデータにより書き換え対象の前記ブロックが書き換えられた場合の前記全領域のデータに基づいて前記書き換えツールが秘密鍵（２２０）を使用して生成する電子署名と今回の前記書き換えデータとを前記書き換えツールから受信し、
前記通信部が受信する前記電子署名で前記全領域電子署名を書き換える署名書き換え部（Ｓ４６８、Ｓ４９８）と、
前記通信部が受信する前記書き換えデータで書き換え対象の前記ブロックのデータを書き換えるデータ書き換え部（Ｓ４６８、Ｓ５００）と、をさらに備える、
電子制御装置。
【請求項４】
請求項２または３に記載の電子制御装置において、
さらに前記第１の算出部（Ｓ４５２）は、前記書き換えデータから第１のブロックダイジェストを算出し、
さらに前記第２の算出部（Ｓ４５４）は、前記書き換えデータとともに前記書き換えツールから受信する前記書き換えデータのデータ電子署名から前記検証鍵を使用して第２のブロックダイジェストを算出し、
さらに前記検証部（Ｓ４５６）は、前記第１の算出部が算出する前記第１のブロックダイジェストと、前記第２の算出部が算出する前記第２のブロックダイジェストとが一致しているか否かの判定結果に基づいて、前記書き換えデータの正当性を検証し、
前記第１のブロックダイジェストと前記第２のブロックダイジェストとが一致していると前記検証部が判定すると、前記データ書き換え部は、前記書き換えデータで書き換え対象の前記ブロックのデータを書き換え、前記署名書き換え部は、前記秘密鍵を使用して算出される前記電子署名で前記全領域電子署名を書き換える、
電子制御装置。
【請求項５】
請求項２、または請求項２を引用する請求項４に記載の電子制御装置であって、
前記通信部（Ｓ４６４、Ｓ４６６、Ｓ４９４、Ｓ４９６）は、前記第３の全領域ダイジェストを前記書き換えツールに送信し、前記第３の全領域ダイジェストから前記秘密鍵を使用して前記書き換えツールが算出する前記電子署名を前記書き換えツールから受信し、
前記署名書き換え部は、前記書き換えツールから受信する前記電子署名で前記全領域電子署名を書き換える、
電子制御装置。
【請求項６】
請求項５に記載の電子制御装置であって、
前記第３の全領域ダイジェストを暗号化する暗号化部（Ｓ４６２、Ｓ４９２）をさらに備え、
前記通信部は、前記暗号化部が暗号化した前記第３の全領域ダイジェストを前記書き換えツールに送信し、前記書き換えツールが復号化した前記第３の全領域ダイジェストから前記秘密鍵を使用して生成する電子署名を前記書き換えツールから受信する、
電子制御装置。
【請求項７】
請求項２、または請求項２を引用する請求項４に記載の電子制御装置であって、
さらに前記署名書き換え部は、前記第３の全領域ダイジェストから前記秘密鍵を使用して電子署名を生成し、生成した前記電子署名で前記全領域電子署名を書き換える、
電子制御装置。
【請求項８】
請求項１から７のいずれか一項に記載の電子制御装置であって、
前記不揮発性メモリは前記全領域電子署名を記憶する前記記憶部を前記ブロック毎に有し、
前記第２の算出部は、前記ブロック毎に記憶されている前記全領域電子署名のいずれが最新であるかを判別する判別情報（９８）に基づいて、最新の前記全領域電子署名から前記検証鍵を使用して前記第２の全領域ダイジェストを算出する、
電子制御装置。
【請求項９】
請求項８に記載の電子制御装置であって、
前記記憶部は、前記全領域電子署名に加えて前記判別情報を記憶しており、
前記署名書き換え部は、書き換え対象の前記ブロックに対応する前記記憶部の前記全領域電子署名を書き換えるときに、書き換え対象の前記ブロックに対応する前記判別情報を最新情報に書き換える、
電子制御装置。
【請求項１０】
請求項１から７のいずれか一項に記載の電子制御装置であって、
前記不揮発性メモリ（７０）と前記記憶部（１００）とは異なるメモリである、
電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、電子制御装置が備える書き換え可能な不揮発性メモリに対する書き換えを管理する技術に関する。
【背景技術】
【０００２】
電子制御装置には、プログラムとデータとを、フラッシュメモリ等の書き換え可能な不揮発性メモリに記憶しているものがある。不揮発性メモリに記憶されているデータは、プログラムのバージョンアップ、データの更新により書き換えられることがある。以下、プログラムとデータとを単にデータとも言う。
【０００３】
不揮発性メモリのデータの書き換えは、例えば電子制御装置に接続される書き換えツールにより行われる。不揮発性メモリのデータを書き換える場合、不揮発性メモリの記憶領域を複数のブロックに分け、書き換え対象のデータを含むブロックだけを書き換えることが知られている。
【０００４】
ここで、不揮発性メモリのデータが書き換えられる場合、正当な書き換えではなく、悪意のある第３者によって不正な書き換えが行われる可能性がある。このような不正な書き換えを検証するため、不揮発性メモリに記憶されているデータが正当であるか否かを、所定のタイミングで検証する技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−５５８９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
不揮発性メモリのデータを検証する場合、例えば、不揮発性メモリの複数のブロックのブロック毎にブロックのデータのダイジェストを算出し、予めブロック毎に記憶している電子署名から算出するダイジェストと一致するか否かにより各ブロックのデータを検証することが考えられる。
【０００７】
しかし、この検証方法では、ブロックの数だけダイジェストを算出することになるので、ブロック数が増加するほど検証に要する処理時間が増加するという問題がある。
本開示の一側面は、ブロック毎にデータを書き換え可能な複数のブロックを有する不揮発性メモリに記憶されている全領域のデータの正当性を検証するために要する処理時間を短縮する技術を提供する。
【課題を解決するための手段】
【０００８】
本開示の一態様は、不揮発性メモリ（７０）と、書き換え可能な不揮発性の記憶部（７０、１００）と、第１の算出部（Ｓ４１４、Ｓ４８０）と、第２の算出部（Ｓ４１６、Ｓ４８２）と、検証部（Ｓ４１８、Ｓ４８４）と、を備えている。
【０００９】
不揮発性メモリは、ブロック毎にデータを書き換え可能な複数のブロックを有している。書き換え可能な不揮発性の記憶部は、複数のブロックの全領域のデータの正当性の検証に使用される全領域電子署名（９６、１０２）を記憶する。
【００１０】
第１の算出部は、全領域のデータから第１の全領域ダイジェストを算出する。第２の算出部は、記憶部に記憶されている全領域電子署名から検証鍵（６４）を使用して第２の全領域ダイジェストを算出する。検証部は、所定のタイミングで、第１の算出部が算出する第１の全領域ダイジェストと、第２の算出部が算出する第２の全領域ダイジェストとが一致しているか否かの判定結果に基づいて、全領域のデータの正当性を検証する。
【００１１】
この構成によれば、ブロック毎にダイジェストを算出せず全領域のデータから一つの第１の全領域ダイジェストを算出する。そして、全領域電子署名から算出された一つの第２の全領域ダイジェストと、第１の全領域ダイジェストとが一致しているか否かの判定結果に基づいて、不揮発性メモリの複数のブロックについて全領域のデータの正当性を検証する。
【００１２】
不揮発性メモリの全領域のデータの正当性を検証するときに、第１の全領域ダイジェストと第２の全領域ダイジェストとを一つずつ算出すればよいので、検証に要する処理時間を短縮できる。
【００１３】
尚、この欄および特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態の電子制御装置を示すブロック図。
【図２】検証処理を示すフローチャート。
【図３】書き換え処理を示すフローチャート。
【図４】書き換え処理の過程を示す説明図。
【図５】第２実施形態の電子制御装置を示すブロック図。
【図６】検証処理を示すフローチャート。
【図７】書き換え処理を示すフローチャート。
【発明を実施するための形態】
【００１５】
以下、本開示が適用された実施形態を図に基づいて説明する。
［１．第１実施形態］
［１−１．構成］
図１に示す電子制御装置２は、通信部１０と、ＣＰＵ２０と、ＲＡＭ３０と、ＲＯＭ４０と、フラッシュメモリ７０とを備えるマイクロコンピュータを搭載している。以下、電子制御装置をＥＣＵとも言う。
【００１６】
通信部１０は、通信部１０に接続する外部の書き換えツール２００と通信する。ＥＣＵ２と書き換えツール２００との通信は、有線でもよいし無線でもよい。ＣＰＵ２０は、ＲＯＭ４０またはフラッシュメモリ７０に記憶されているプログラムを実行する。ＲＡＭ３０は、ＣＰＵ２０がプログラムを実行するときに、一時的なデータの記憶領域として使用される。
【００１７】
ＲＯＭ４０は、セキュア領域５０とブート領域６０とを備えている。フラッシュメモリ７０は、ＯＳ領域８０とアプリケーションプログラム領域９０とを備えている。以下、アプリケーションプログラムを単にアプリとも言う。
【００１８】
セキュア領域５０には、セキュアプログラム５２と、ダイジェスト生成鍵５４と、ダイジェスト期待値５６とが記憶されている。セキュアプログラム５２は、ブートローダ６２の正当性を検証するプログラムである。ダイジェスト生成鍵５４は、ブートローダ６２のデータからダイジェストを算出するための秘密鍵である。ダイジェスト期待値５６は、正当なブートローダ６２のデータから算出されると期待されるダイジェストの値である。
【００１９】
ブート領域６０には、ブートローダ６２と、公開鍵である電子署名検証鍵６４とが記憶されている。ブートローダ６２は、ＯＳ８２の正当性を検証してＯＳ８２を起動する。電子署名検証鍵６４は、電子署名からダイジェストを算出したり、ダイジェストを暗号化したりするために使用される。
【００２０】
ＯＳ領域８０には、ＯＳ８２と、ブートローダ６２がＯＳ８２の正当性を検証するときに使用するＯＳ電子署名８４とが記憶されている。
アプリ領域９０は、複数のアプリを記憶する複数のブロックで構成されている。図１では、４個のアプリに対応して４個のブロックを例示しているが、アプリ領域９０のブロック数は４個に限るものではなく、複数であればよい。
【００２１】
アプリ領域９０の各ブロックには、アプリ９２と、アプリ電子署名９４と、全領域電子署名９６と、カウンタ９８とが記憶されている。
アプリ電子署名９４は、各アプリ９２のデータの正当性を検証するための電子署名である。アプリ電子署名９４は、該当するブロックのアプリ９２が書き換えられるときに、書き換えデータとともに書き換えツール２００から送信される電子署名により書き換えられる。
【００２２】
全領域電子署名９６は、アプリ領域９０の全領域のデータの正当性を検証するための電子署名である。全領域電子署名９６は、書き換え対象のブロックが書き換えられるときに、書き換えデータと、書き換えデータの電子署名と、書き換え対象以外のブロックから全領域電子署名９６とカウンタ９８とを除いたデータとから算出されたダイジェストから算出された電子署名により書き換えられる。
【００２３】
カウンタ９８は、各ブロックに記憶されている全領域電子署名９６のどれが最新であるかを判別するための判別情報である。例えば、最新の全領域電子署名９６が記憶されているブロックのカウンタ９８の値は、他のブロックよりも大きい最大値に設定される。
【００２４】
書き換えツール２００は、ＥＣＵ２と通信する通信部２１０を備えている。さらに、書き換えツール２００は、ＥＣＵ２から送信される暗号化されたダイジェストを復号化し、復号化したダイジェストから電子署名を算出するときに使用する秘密鍵である電子署名生成鍵２２０を記憶している。書き換えツール２００は、アプリ領域９０の書き換え対象のブロックを書き換えるときに、ＥＣＵ２に接続される。
【００２５】
［１−２．処理］
（１）検証処理
ＲＯＭ４０とフラッシュメモリ７０とのデータの検証処理について、図２のフローチャートに基づいて説明する。図２のフローチャートは、ＥＣＵ２の電源がオンになりＥＣＵ２が起動されると実行される。
【００２６】
Ｓ４００においてＣＰＵ２０は、セキュアプログラム５２を実行することにより、ダイジェスト生成鍵５４を使用してブートローダ６２のダイジェストを算出する。Ｓ４０２においてＣＰＵ２０は、Ｓ４００で算出したダイジェストと、セキュア領域５０に予め記憶されているブートローダ６２のダイジェスト期待値５６とが一致するか否かを判定する。
【００２７】
Ｓ４０２の判定がＮｏであり、Ｓ４００で算出したダイジェストとダイジェスト期待値５６とが一致しない場合、Ｓ４０４においてＣＰＵ２０は、異常判定処理を実行後、図２の検証処理を終了する。これにより、ＥＣＵ２は、アプリ９２が実行されないまま処理を終了する。Ｓ４０４の異常判定処理として、異常原因をエラーコード等でフラッシュメモリ７０のエラーコード領域に記憶することなどが実行される。
【００２８】
Ｓ４０２の判定がＹｅｓであり、Ｓ４００で算出したダイジェストとダイジェスト期待値５６とが一致する場合、セキュアプログラム５２はブートローダ６２を起動する。
そして、Ｓ４０６においてＣＰＵ２０は、ブートローダ６２を実行することにより、ＯＳ領域８０のデータのダイジェストをハッシュ関数等により算出する。
【００２９】
Ｓ４０８においてＣＰＵ２０は、公開鍵である電子署名検証鍵６４を使用して、ＯＳ領域８０に記憶されているＯＳ電子署名８４から、ＯＳ領域８０のデータのダイジェスト期待値を算出する。Ｓ４１０においてＣＰＵ２０は、Ｓ４０６で算出したダイジェストと、Ｓ４０８で算出したダイジェスト期待値とが一致するか否かを判定する。
【００３０】
Ｓ４１０の判定がＮｏであり、Ｓ４０６で算出したダイジェストとＳ４０８で算出したダイジェスト期待値とが一致しない場合、ＣＰＵ２０は、前述したＳ４０４の異常判定処理を実行後、検証処理を終了する。
【００３１】
Ｓ４１０の判定がＹｅｓであり、Ｓ４０６で算出したダイジェストとＳ４０８で算出したダイジェスト期待値とが一致する場合、ブートローダ６２はＯＳ８２を起動する。そして、Ｓ４１２〜Ｓ４２０においてＣＰＵ２０は、ＯＳ８２を実行することにより、アプリ領域９０のデータの検証を行う。
【００３２】
Ｓ４１２においてＣＰＵ２０は、各ブロックのカウンタ９８を参照し、最大値のカウンタ９８が記憶されているブロックの全領域電子署名９６が最新であると判断し、最新の全領域電子署名９６を抽出する。
【００３３】
例えば、書き換え対象のブロックのデータが書き換えられるときに、書き換え対象のブロックのカウンタ９８を、それまで最大であったカウンタ９８の値よりも、例えば＋１して更新する。これにより、各ブロックに記憶されているカウンタ９８の値を参照すれば、最新の全領域電子署名９６が記憶されているアプリ領域９０のブロックを見つけることができる。
【００３４】
ＣＰＵ２０は、Ｓ４１２で最新の全領域電子署名９６を抽出すると、Ｓ４１４において、アプリ領域９０の全領域のデータのダイジェストをハッシュ関数等から算出する。
尚、アプリ領域９０の全領域のデータを検証するためにダイジェストを算出するときに算出対象とする全領域のデータには、各ブロックにおいて、アプリ電子署名９４は含まれ、全領域電子署名９６とカウンタ９８とは除かれる。
【００３５】
これは、後述する書き換え処理において生成される最新の全領域電子署名９６は、最新の全領域電子署名９６を含んだデータから生成できないからである。カウンタ９８は最新の全領域電子署名９６を判別するための判別情報であり、全領域電子署名９６とセットのデータであるから、本実施形態では、アプリ領域９０の全領域のデータを検証するためにダイジェストを算出するときの対象データから除いている。
【００３６】
Ｓ４１６においてＣＰＵ２０は、ブート領域６０に記憶されている電子署名検証鍵６４を使用して、最新の全領域電子署名９６からアプリ領域９０の全領域データのダイジェスト期待値を算出する。
【００３７】
Ｓ４１８においてＣＰＵ２０は、Ｓ４１４で算出したダイジェストとＳ４１６で算出したダイジェスト期待値とが一致するか否かを判定する。
Ｓ４１８の判定がＮｏであり、Ｓ４１４で算出したダイジェストとＳ４１６で算出したダイジェスト期待値とが一致しない場合、ＣＰＵ２０は、前述したＳ４０４の異常判定処理を実行後、検証処理を終了する。
【００３８】
Ｓ４１８の判定がＹｅｓであり、Ｓ４１４で算出したダイジェストとＳ４１６で算出したダイジェスト期待値とが一致する場合、Ｓ４２０においてＣＰＵ２０は、正常判定処理を実行後、図２の検証処理を終了する。ＣＰＵ２０は、正常判定処理において、アプリ領域９０のアプリ９２を実行できる環境を整え、該当するアプリ９２に処理を移行する。
【００３９】
（２）書き換えツール２００の書き換え処理
フラッシュメモリ７０のアプリ領域９０に対する書き換え処理について、図３のフローチャートに基づいて説明する。図３のフローチャートは、ＥＣＵ２に書き換えツール２００が接続されると、ＥＣＵ２と書き換えツール２００とにより実行される。図３において、符号３００で表されるフローチャートは書き換えツール２００が実行し、符号３１０で表されるフローチャートはＥＣＵ２が実行する。
【００４０】
ＥＣＵ２に書き換えツール２００が接続されると、Ｓ４３０において書き換えツール２００は、書き換え対象のアプリ領域９０のブロックに対する書き換えデータと書き換えデータの電子署名とを通信部２１０からＥＣＵ２に送信する。そして、書き換えツール２００は、後述する暗号化されたダイジェストを通信部２１０がＥＣＵ２から受信するまで待機する。
【００４１】
ＥＣＵ２から受信する暗号化されたダイジェストは、アプリ領域９０において、書き換え対象のブロックの書き換えデータと、書き換えデータの電子署名と、書き換え対象以外のブロックから全領域電子署名９６とカウンタ９８とを除いたデータとから算出されている。
【００４２】
書き換えツール２００は、ＥＣＵ２が算出する暗号化したダイジェストをＳ４３２において受信すると、Ｓ４３４において、書き換えツール２００が記憶している秘密鍵である電子署名生成鍵２２０を使用して、Ｓ４３２で受信した暗号化されたダイジェストを復号化する。
【００４３】
Ｓ４３６において書き換えツール２００は、Ｓ４３４で復号化したダイジェストから電子署名生成鍵２２０を使用して電子署名を生成する。Ｓ４３８において書き換えツール２００は、Ｓ４３６で生成した電子署名をＥＣＵ２に送信し、通信部２１０がＥＣＵ２から書き換え結果を受信するまで待機する。
【００４４】
書き換えツール２００は、ＥＣＵ２から書き換え結果として書き換え正常終了を受信すると、Ｓ４４０において、正常終了を書き換えツール２００のディスプレイ、ランプ、スピーカ等から報知する書き換え正常終了処理を実行し、書き換え処理を終了する。
【００４５】
書き換えツール２００は、ＥＣＵ２から書き換え結果として書き換え異常終了を受信すると、Ｓ４４２において、異常終了を書き換えツール２００のディスプレイ、ランプ、スピーカ等から報知する書き換え異常終了処理を実行し、書き換え処理を終了する。
【００４６】
（３）ＥＣＵ２の書き換え処理
ＣＰＵ２０は、書き換えツール２００が接続されると、Ｓ４５０において書き換えツール２００から書き換え対象のアプリ領域９０のブロックに対する書き換えデータと書き換えデータの電子署名とを通信部１０が受信するまで、フローチャート３１０の実行を待機する。
【００４７】
Ｓ４５０において書き換えツール２００から書き換えデータと書き換えデータの電子署名とを通信部１０が受信すると、Ｓ４５２においてＣＰＵ２０は、受信した書き換えデータからハッシュ関数等によりダイジェストを算出する。Ｓ４５４においてＣＰＵ２０は、ブート領域６０に記憶されている電子署名検証鍵６４を使用して、受信した電子署名から書き換えデータのダイジェスト期待値を算出する。
【００４８】
Ｓ４５６においてＣＰＵ２０は、Ｓ４５２で算出したダイジェストとＳ４５４で算出したダイジェスト期待値とが一致するか否かを判定する。
Ｓ４５６の判定がＮｏであり、Ｓ４５２で算出したダイジェストとＳ４５４で算出したダイジェスト期待値とが一致しない場合、Ｓ４５８においてＣＰＵ２０は、書き換えデータが不正であることを書き換えツール２００に送信し、書き換え処理を終了する。
【００４９】
Ｓ４５６の判定がＹｅｓであり、Ｓ４５２で算出したダイジェストとＳ４５４で算出したダイジェスト期待値とが一致する場合、Ｓ４６０においてＣＰＵ２０は、書き換えデータと、書き換えデータの電子署名と、書き換え対象以外のブロックから全領域電子署名９６とカウンタ９８とを除いたデータとからハッシュ関数等によりダイジェストを算出する。
【００５０】
Ｓ４６０においてＣＰＵ２０はさらに、各ブロックのカウンタ９８の値を参照し、最大値のカウンタ９８の値を＋１してＲＡＭ３０に記憶しておく。
Ｓ４６２においてＣＰＵ２０は、Ｓ４６０で算出したダイジェストを電子署名検証鍵６４を使用して暗号化する。Ｓ４６４においてＣＰＵ２０は、Ｓ４６２で暗号化したダイジェストを書き換えツール２００に送信し、Ｓ４６６で書き換えツール２００から書き換えツール２００が生成した電子署名を受信するまで待機する。
【００５１】
ＣＰＵ２０は、Ｓ４６６で書き換えツール２００から電子署名を受信すると、Ｓ４６８において、Ｓ４５０で受信した書き換えデータと、Ｓ４５０で受信した書き換えデータの電子署名と、Ｓ４６０でＲＡＭ３０に記憶したカウンタ値と、Ｓ４６６で受信した電子署名とで、書き換え対象のブロックにおいて、アプリ９２と、アプリ電子署名９４と、カウンタ９８と、全領域電子署名９６とを書き換える。ＲＡＭ３０に記憶したカウンタ値で書き換え対象のブロックのカウンタ９８を書き換えることにより、カウンタ９８の値は最新情報になる。
【００５２】
例えば、図４に示すように、アプリ領域９０の全ブロックに最初にデータを書き込む場合、ＣＰＵ２０は、書き換えツール２００から受信する全領域電子署名と、カウンタ９８の初期値として例えば「１」とを、いずれかのブロックに書き込む。図４では、書き換えツール２００から受信した全領域電子署名とカウンタ９８の初期値とが、アプリ１のブロックに書き込まれている。他のアプリ２〜４の全領域電子署名９６とカウンタ９８とは「ＮＵＬＬ」である。
【００５３】
その後、アプリ３、アプリ２のデータが順に書き換えられると、アプリ３、アプリ２の全領域電子署名９６とカウンタ９８とが順に書き換えられる。
Ｓ４７０の判定がＹｅｓであり、書き換え対象のブロックに対する書き換えが正常に終了すると、Ｓ４７２においてＣＰＵ２０は、書き換え正常終了を書き換えツール２００に送信し、書き換え処理を終了する。
【００５４】
Ｓ４７０の判定がＮｏであり、書き換え対象のブロックに対する書き換えが正常に終了しなかった場合、Ｓ４７４においてＣＰＵ２０は、書き換え異常終了を書き換えツール２００に送信し、書き換え処理を終了する。
【００５５】
［１−３．効果］
以上説明した第１実施形態では、以下の効果を得ることができる。
（１）ＥＣＵ２の起動時に、アプリ領域９０の全領域のデータから一つのダイジェストを算出し、最新の全領域電子署名９６から算出した一つのダイジェスト期待値と一致するか否かにより、ＣＰＵ２０はアプリ領域９０のデータの正当性を検証する。
【００５６】
これにより、検証精度を低下させることなく、アプリ領域９０の各ブロックのデータからそれぞれダイジェストを算出し、各ブロックの電子署名からそれぞれダイジェスト期待値を算出してデータの正当性を検証するよりも、検証に要する処理時間を短縮できる。
【００５７】
（２）書き換え処理において、書き換えツール２００で記憶している電子署名生成鍵２２０を使用して書き換えツール２００が全領域電子署名９６に対応する電子署名を生成するので、書き換えツール２００がＥＣＵ２に電子署名生成鍵２２０を送信し、ＥＣＵ２側で全領域電子署名９６を生成する必要がない。これにより、秘密鍵である電子署名生成鍵２２０の漏洩の可能性を抑制できる。
【００５８】
（３）書き換え処理において、書き換えツール２００が全領域電子署名９６に対応する電子署名を生成するので、ＥＣＵ２と書き換えツール２００と以外のツールで予め全領域電子署名９６に対応する電子署名を生成しておく必要がない。
【００５９】
（４）書き換え処理のときに、ＥＣＵ２から書き換えツール２００にアプリ領域９０のデータのダイジェストを暗号化して送信するので、どのようなデータがＥＣＵ２から書き換えツール２００に送信されているかを第３者に検知されることを抑制できる。
【００６０】
（５）全領域電子署名９６とカウンタ９８とを、アプリと同じフラッシュメモリ７０に記憶しているので、全領域電子署名９６とカウンタ９８とを記憶するために、フラッシュメモリ７０とは別のメモリを用意する必要がない。
【００６１】
上記第１実施形態では、ＥＣＵ２が電子制御装置に対応し、通信部１０が通信部に対応し、フラッシュメモリ７０がブロック毎に書き換え可能な複数のブロックを有する不揮発性メモリに対応し、全領域電子署名９６を記憶しているフラッシュメモリ７０の領域が記憶部に対応し、書き換えツール２００が書き換えツールに対応する。
【００６２】
また、電子署名検証鍵６４が検証鍵に対応し、電子署名生成鍵２２０が秘密鍵に対応し、全領域電子署名９６が全領域電子署名に対応し、カウンタ９８が判別情報に対応する。
また、Ｓ４１４、Ｓ４５２、Ｓ４６０が第１の算出部の処理に対応し、Ｓ４１６、Ｓ４５４が第２の算出部の処理に対応し、Ｓ４１８、Ｓ４５６が検証部の処理に対応し、Ｓ４５０、Ｓ４５８、Ｓ４６４、Ｓ４６６、Ｓ４７２、Ｓ４７４が通信部の処理に対応し、Ｓ４６２が暗号化部の処理に対応し、Ｓ４６８がデータ書き換え部と署名書き換え部との処理に対応する。
【００６３】
また、Ｓ４１４で算出されるダイジェストが第１の全領域ダイジェストに対応し、Ｓ４１６で算出されるダイジェスト期待値が第２の全領域ダイジェストに対応し、Ｓ４５０で書き換えツール２００から受信する書き換えデータの電子署名がデータ電子署名に対応し、Ｓ４５２で算出されるダイジェストが第１のブロックダイジェストに対応し、Ｓ４５４で算出されるダイジェスト期待値が第２のブロックダイジェストに対応し、Ｓ４６０で算出されるダイジェストが第３の全領域ダイジェストに対応する。
【００６４】
［２．第２実施形態］
［２−１．第１実施形態との相違点］
次に、第２実施形態の不揮発性メモリの構成について説明する。尚、第１実施形態と同じ構成部分については同一符号を用いる。第１実施形態と同一符号については、先行する説明を参照する。
【００６５】
図５に示すように、第２実施形態のＥＣＵ４では、アプリ領域９０を備えるフラッシュメモリ７０とは異なるフラッシュメモリ１００に、アプリ領域９０の全領域に対する全領域電子署名１０２を一つ記憶している。尚、同じフラッシュメモリ７０のアプリ領域９０とは異なる領域に、一つの全領域電子署名１０２を記憶してもよい。
【００６６】
［２−２．処理］
（１）検証処理
ＲＯＭ４０とフラッシュメモリ７０とのデータの検証処理について、図６のフローチャートに基づいて説明する。図６のフローチャートは、ＥＣＵ４の電源がオンになりＥＣＵ４が起動されると実行される。図６のＳ４００〜Ｓ４１０、Ｓ４２０は、図２のＳ４００〜Ｓ４１０、Ｓ４２０と実質的に同じ処理である。
【００６７】
Ｓ４８０においてＣＰＵ２０は、アプリ領域９０の全領域のデータのダイジェストをハッシュ関数等から算出する。Ｓ４８２においてＣＰＵ２０は、ブート領域６０に記憶されている電子署名検証鍵６４を使用して、フラッシュメモリ１００に記憶されている全領域電子署名１０２からアプリ領域９０の全領域のデータのダイジェスト期待値を算出する。
【００６８】
Ｓ４８４においてＣＰＵ２０は、Ｓ４８０で算出したダイジェストとＳ４８２で算出したダイジェスト期待値とが一致するか否かを判定する。
（２）書き換え処理
フラッシュメモリ７０のアプリ領域９０に対する書き換え処理について、図７のフローチャートに基づいて説明する。図７のフローチャートは、ＥＣＵ２に書き換えツール２００が接続されると、ＥＣＵ２と書き換えツール２００とにより実行される。
【００６９】
図７のＳ４３０〜Ｓ４４２、Ｓ４５０〜Ｓ４５８、Ｓ４７０〜Ｓ４７４は、図３のＳ４３０〜Ｓ４４２、Ｓ４５０〜Ｓ４５８、Ｓ４７０〜Ｓ４７４と実質的に同じ処理である。
Ｓ４９０においてＣＰＵ２０は、書き換えデータと、書き換えデータの電子署名と、書き換え対象以外のブロックから全領域電子署名９６とカウンタ９８とを除いたデータとからハッシュ関数等によりダイジェストを算出する。
【００７０】
Ｓ４９２においてＣＰＵ２０は、Ｓ４９０で算出したダイジェストを電子署名検証鍵６４を使用して暗号化する。Ｓ４９４においてＣＰＵ２０は、Ｓ４９２で暗号化したダイジェストを書き換えツール２００に送信し、Ｓ４９６で書き換えツール２００から書き換えツール２００が生成した電子署名を受信するまで待機する。
【００７１】
Ｓ４９８においてＣＰＵ２０は、Ｓ４９６で書き換えツール２００から受信した電子署名で、フラッシュメモリ１００に記憶されている全領域電子署名１０２を書き換える。
Ｓ５００においてＣＰＵ２０は、Ｓ４５０で書き換えツール２００から受信した書き換えデータと書き換えデータの電子署名とで、書き換え対象のブロックのアプリ９２とアプリ電子署名９４とを書き換える。
【００７２】
［２−３．効果］
上記第２実施形態によると、第１実施形態の効果（１）において最新の全領域電子署名９６を全領域電子署名１０２に置き換えた効果と、第１実施形態の効果（２）〜（４）とを得ることができる。
【００７３】
さらに、第２実施形態によると、アプリ領域９０のブロック数に関わらず、全領域電子署名１０２を一つだけ記憶すればよいので、全領域電子署名１０２を記憶するためのメモリの使用量を低減できる。
【００７４】
上記第２実施形態では、全領域電子署名１０２が全領域電子署名に対応し、全領域電子署名１０２を記憶しているフラッシュメモリ１００の領域が記憶部に対応する。
また、第２実施形態では、Ｓ４８０、Ｓ４９０が第１の算出部の処理に対応し、Ｓ４８２が第２の算出部の処理に対応し、Ｓ４８４が検証部の処理に対応し、Ｓ４９２が暗号化部に対応し、Ｓ４９４、Ｓ４９６が通信部の処理に対応し、Ｓ４９８が署名書き換え部の処理に対応し、Ｓ５００がデータ書き換え部の処理に対応する。
【００７５】
［３．他の実施形態］
（１）上記実施形態では、ＥＣＵ２、４は、アプリ領域９０のデータから算出したダイジェストを暗号化して書き換えツール２００に送信した。これに対し、アプリ領域９０のデータから算出したダイジェストを暗号化せず、ダイジェストを直接、書き換えツール２００に送信してもよい。
【００７６】
（２）書き換え処理において、ＥＣＵ２、４が書き換えツール２００から書き換えデータと一緒に電子署名生成鍵２２０を受信し、アプリ領域９０の全領域のデータの全領域電子署名を生成してもよい。
【００７７】
この場合、ＥＣＵ２、４は、書き換えデータと書き換え対象以外のブロックのデータとから算出したダイジェストを暗号化して書き換えツール２００に送信する必要はなく、書き換え結果だけを書き換えツール２００に送信する。これにより、ＥＣＵ２、４と書き換えツール２００との通信量が低減するので、書き換え時間を短縮できる。
【００７８】
（３）書き換えツール２００において、これまでＥＣＵ２、４に送信した書き換えデータに基づいて、書き換え前のアプリ領域９０の全領域のデータの内容を記憶して管理しているのであれば、今回の書き換えデータにより書き換え対象のブロックが書き換えられた場合のアプリ領域９０の全領域のデータから、書き換えツール２００は秘密鍵である電子署名生成鍵２２０を使用して全領域電子署名を生成できる。
【００７９】
この構成では、書き換え処理において、書き換えツール２００は、書き換えデータと、書き換えデータの電子署名と、全領域電子署名とをＥＣＵ２、４に送信する。
（４）上記実施形態では、所定のタイミングとして、ＥＣＵ２、４の電源がオンになりＥＣＵ２、４が起動されると検証処理が実行される。これ以外にも、所定タイミングとして、例えば、所定の時間間隔で検証処理を実行してもよい。
【００８０】
（５）上記第１実施形態では、検証処理においてＣＰＵ２０は、各ブロックのカウンタ９８を参照し、最大値のカウンタ９８が記憶されているブロックの全領域電子署名９６を最新の全領域電子署名９６として抽出した。
【００８１】
これに対し、以下の方法で最新の全領域電子署名９６を抽出してもよい。まず、書き換え処理においてＣＰＵ２０は、書き換え回数をフラッシュメモリ７０等に記憶しておき、書き換え対象のブロックのカウンタ９８を書き換え処理の回数で書き換える。次に、検証処理においてＣＰＵ２０は、フラッシュメモリ７０等に記憶されている書き換え回数と一致するカウンタ９８が記憶されているブロックの全領域電子署名９６を最新の全領域電子署名９６として抽出する。
【００８２】
（６）上記実施形態における一つの構成要素が有する複数の機能を複数の構成要素によって実現したり、一つの構成要素が有する一つの機能を複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を一つの構成要素によって実現したり、複数の構成要素によって実現される一つの機能を一つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。尚、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【００８３】
（７）上述したＥＣＵ２、４の他、当該ＥＣＵ２、４を構成要素とする電子制御システム、当該ＥＣＵ２、４としてコンピュータを機能させるためのデータ検証プログラムおよびデータ書き換えプログラム、このデータ検証プログラムおよびデータ書き換えプログラムを記録した記録媒体、データ検証方法およびデータ書き換え方法など、種々の形態で本開示を実現することもできる。
【符号の説明】
【００８４】
２、４：ＥＣＵ（電子制御装置）、１０：通信部、２０：ＣＰＵ、６４：電子署名検証鍵（検証鍵）、７０：フラッシュメモリ（書き換え可能な不揮発性メモリ、記憶部）、９６、１０２：全領域電子署名、９８：カウンタ（判別情報）、１００：フラッシュメモリ（記憶部）、２００：書き換えツール、２２０：電子署名生成鍵（秘密鍵）
【図１】
2018078373.tif 000003
【図２】
2018078373.tif 000004
【図３】
2018078373.tif 000005
【図４】
2018078373.tif 000006
【図５】
2018078373.tif 000007
【図６】
2018078373.tif 000008
【図７】
2018078373.tif 000009