(57)【要約】【課題】データの不正取得を抑制するとともに、データの書き込みと読み込みの処理時間を短縮する。【解決手段】マイコン１は、フラッシュメモリ３と、フラッシュコントローラ６と、ＣＰＵ２とを備える。フラッシュメモリ３は、記憶内容の書き換えが可能な不揮発性メモリであり、且つ、記憶された複数の記憶データのそれぞれに対して、ブランク状態であるか否かを、データ値ではない情報である非値情報として設定して記憶可能に構成される。フラッシュコントローラ６は、フラッシュメモリ３に記憶された複数の記憶データのそれぞれについて、記憶データに設定されている非値情報を特定する。ＣＰＵ２は、特定された複数の非値情報のそれぞれについて、非値情報が「ブランク状態」である場合には「０」に変換し、非値情報が「ブランク状態」でない場合には「１」に変換する。【選択図】図１
2020052181.tif 000002
【特許請求の範囲】
【請求項１】
記憶内容の書き換えが可能な不揮発性メモリであり、且つ、記憶された複数の記憶データのそれぞれに対して、データ値ではない情報である非値情報を設定して記憶可能に構成されたデータ記憶部（３）と、
前記データ記憶部に記憶された複数の前記記憶データのそれぞれについて、前記記憶データに設定されている前記非値情報を特定するように構成された特定部（６）と、
前記特定部により特定された複数の前記非値情報のそれぞれについて、前記非値情報を、前記非値情報に応じて予め設定された変換値に変換するように構成された変換部（Ｓ２５０〜Ｓ２７０）と
を備えるマイクロコンピュータ（１）。
【請求項２】
請求項１に記載のマイクロコンピュータであって、
前記非値情報は、対応する前記記憶データが消去されているブランク状態であるか、前記ブランク状態ではない非ブランク状態であるかを示す情報であるマイクロコンピュータ。
【請求項３】
請求項２に記載のマイクロコンピュータであって、
前記データ記憶部に記憶されている複数の前記記憶データを消去して、複数の前記記憶データのそれぞれを前記ブランク状態にするように構成された消去部（Ｓ１０）と、
前記消去部により消去された複数の前記記憶データの中から、前記データ記憶部に隠蔽する隠蔽データの値に基づいて、前記非ブランク状態を示す前記非値情報を割り当てられた前記記憶データを読み出し、読み出した前記記憶データが示す値を、読み出した前記記憶データを記憶していた領域に再度書き込むように構成された書込部（Ｓ６０，Ｓ７０）と
を備えるマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ書き換え可能な不揮発性メモリを有するマイクロコンピュータに関する。
【背景技術】
【０００２】
特許文献１には、メモリに格納された秘密データの漏洩を抑制するために、メモリに格納されたデータを暗号化することが記載されている。
電子制御装置に不正機器が接続されると、電子制御装置に搭載されたフラッシュメモリに記憶されているデータが不正に取得されてしまうおそれがある。このようなデータ不正取得を抑制するために、一般に、特許文献１に記載のようにデータを暗号化する技術が利用されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−２２４８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、電子制御装置に搭載されたフラッシュメモリに記憶されるデータを暗号化するためには、フラッシュメモリにデータを書き込む度に暗号処理を実行し、フラッシュメモリからデータを読み出す度に復号処理を実行する必要がある。このため、データの書き込みと読み込みにおいて、処理時間が長くなってしまうという問題があった。
【０００５】
本開示は、データの不正取得を抑制するとともに、データの書き込みと読み込みの処理時間を短縮することを目的とする。
【課題を解決するための手段】
【０００６】
本開示の一態様は、データ記憶部（３）と、特定部（６）と、変換部（Ｓ２５０〜Ｓ２７０）とを備えるマイクロコンピュータ（１）である。
データ記憶部は、記憶内容の書き換えが可能な不揮発性メモリであり、且つ、記憶された複数の記憶データのそれぞれに対して、データ値ではない情報である非値情報を設定して記憶可能に構成される。
【０００７】
特定部は、データ記憶部に記憶された複数の記憶データのそれぞれについて、記憶データに設定されている非値情報を特定するように構成される。
変換部は、特定部により特定された複数の非値情報のそれぞれについて、非値情報を、非値情報に応じて予め設定された変換値に変換するように構成される。
【０００８】
このように構成された本開示のマイクロコンピュータは、データ値ではない情報である非値情報を、非値情報に応じて予め設定された変換値に変換することにより、データ記憶部に隠蔽された隠蔽データを復元することができる。そして、本開示のマイクロコンピュータは、隠蔽データを復元するための情報を、データ値ではない情報で記憶する。このため、本開示のマイクロコンピュータに不正機器が接続された場合に、不正機器は、データ記憶部に記憶された複数の記憶データを取得することができても、データ値ではない情報である非値情報を取得することができない。これにより、本開示のマイクロコンピュータは、データの不正取得を抑制することができる。
【０００９】
さらに、本開示のマイクロコンピュータは、非値情報を変換値に変換することにより隠蔽データを復元することができるため、暗号処理および復号処理を実行する必要がない。これにより、本開示のマイクロコンピュータは、隠蔽データをデータ記憶部に隠蔽するために行われるデータの書き込みと読み込みの処理時間を短縮することができる。
なお、暗号・復号方式では、元データを計算して暗号データを作るため、時間をかければ、不正取得したデータから解読が可能である。これに対し、本開示のマイクロコンピュータでは、不正取得したデータと、隠蔽したデータとの間に関係がないため、不正取得したデータから解読が不可能である。
【図面の簡単な説明】
【００１０】
【図１】マイコンの構成を示すブロック図である。
【図２】ブランクチェックの原理を説明する図である。
【図３】データ書込処理を示すフローチャートである。
【図４】隠蔽データの書き込みを説明する図である。
【図５】データ読出処理を示すフローチャートである。
【図６】隠蔽データの読み出しを説明する図である。
【発明を実施するための形態】
【００１１】
以下に本開示の実施形態を図面とともに説明する。
本実施形態のマイクロコンピュータ１（以下、マイコン１）は、図１に示すように、ＣＰＵ２と、フラッシュメモリ３と、ＲＡＭ４と、入出力インターフェース５（以下、Ｉ／Ｏ５）と、フラッシュコントローラ６と、これらの構成を接続するバスライン７とを備える。
【００１２】
マイクロコンピュータの各種機能は、ＣＰＵ２が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、フラッシュメモリ３が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、ＣＰＵ２が実行する機能の一部または全部を、一つあるいは複数のＩＣ等によりハードウェア的に構成してもよい。
【００１３】
フラッシュメモリ３は、データ書き換え可能な不揮発性メモリである。フラッシュメモリ３の記憶領域は、所定データサイズ（例えば４Ｋ〜６４Ｋバイト程度）を有する複数のブロックに分割されており、ブロック毎にデータの書き換えと消去とを実行するように構成されている。以下、このブロックをセクタという。
【００１４】
ＲＡＭ４は、揮発性メモリであり、ＣＰＵ２の演算結果等を一時的に記憶する。またＲＡＭ４は、フラッシュメモリ３から読み出されたデータと、フラッシュメモリ３に書き込むデータとを一時的に記憶する。
【００１５】
Ｉ／Ｏ５は、マイコン１の外部とマイコン１との間で信号の入出力を行わせるための回路である。
フラッシュコントローラ６は、ＣＰＵ２から与えられる指令に基づいて、フラッシュメモリ３にデータを書き込む処理と、フラッシュメモリ３に記憶されているデータを消去する処理と、後述のブランクチェックとを実行する。
【００１６】
フラッシュメモリ３は、複数のメモリセルを備え、１ビットのデータの記憶のために、２個のメモリセルを用いる。以下、１ビットのデータを構成する２個のメモリセルのうち、一方のメモリセルを第１メモリセル、他方のメモリセルを第２メモリセルという。
【００１７】
各メモリセルは、フローティングゲートを備える。そしてフラッシュメモリ３は、フローティングゲートに電子を注入したり、フローティングゲートから電子を抜き取ったりすることにより、メモリセルの電位を、電位ＶＬと電位ＶＨの間で変化させる。
【００１８】
図２に示すように、１を記憶させる場合には、第１メモリセルの電位Ｖ１（以下、第１セル電位Ｖ１）を、電位ＶＨ付近に設定し、第２メモリセルの電位Ｖ２（以下、第２セル電位Ｖ２）を、電位ＶＬ付近に設定する。この場合には、第１セル電位Ｖ１が第２セル電位Ｖ２よりも高くなるため、１が記憶されていると判断することができる。
【００１９】
また、０を記憶させる場合には、第１セル電位Ｖ１を、電位ＶＬ付近に設定し、第２セル電位Ｖ２を、電位ＶＨ付近に設定する。この場合には、第２セル電位Ｖ２が第１セル電位Ｖ１よりも高くなるため、０が記憶されていると判断することができる。
【００２０】
また、データを消去する場合には、第１セル電位Ｖ１を、電位ＶＬ付近に設定し、第２メモリセルの電位Ｖ２を、電位ＶＬ付近に設定する。この場合には、第１メモリセルの電位Ｖ１と第２メモリセルの電位Ｖ２が予め設定されたブランク判定電位ＶＢＣ未満となるため、データが消去されている状態（以下、ブランク状態）であると判断することができる。ブランク状態である場合において、第１セル電位Ｖ１が第２セル電位Ｖ２より高い場合には、１が記憶されていると判断することができる。一方、ブランク状態である場合において、第２セル電位Ｖ２が第１セル電位Ｖ１より高い場合には、０が記憶されていると判断することができる。すなわち、ブランク状態において記憶されている値は、第１セル電位Ｖ１および第２セル電位Ｖ２に応じて変動し、不定である。
【００２１】
このように、第１セル電位Ｖ１と第２セル電位Ｖ２とに基づいて、ブランク状態であるか否かを判断するブランクチェックは、ＣＰＵ２から与えられる指令に基づいてフラッシュコントローラ６が実行することにより実現される。すなわち、マイコン１の外部からマイコン１のフラッシュメモリ３にアクセスしても、ブランク状態であるか否かを検出することはできない。
【００２２】
次に、ＣＰＵ２が実行するデータ書込処理の手順を説明する。データ書込処理は、隠蔽する必要があるデータ（以下、隠蔽データ）を書き込むときに実行される。
データ書込処理が実行されると、ＣＰＵ２は、図３に示すように、まずＳ１０にて、隠蔽データを書き込むセクタ（以下、対象セクタ）に記憶されている全データを消去する。
【００２３】
次にＳ２０にて、１６進数で表されている隠蔽データを２進数に変換する。例えば、隠蔽データが「ＡＡ」である場合には、隠蔽データは、「１０１０１０１０」に変換される。以下、２進数に変換されたデータを２進数変換データという。また、２進数変換データを構成する複数のビットのそれぞれを１ビット変換データという。例えば、上記の「１０１０１０１０」は２進数変換データである。また、「１０１０１０１０」を構成する「１」，「０」，「１」，「０」，「１」，「０」，「１」，「０」はそれぞれ、１ビット変換データである。
【００２４】
さらにＳ３０にて、対象セクタにおいて、１ビット変換データを最初に書き込む先頭アドレスを設定する。具体的には、ＲＡＭ４に設けられた書込指示アドレスＡＤｗに、上記先頭アドレスに対応する値を格納する。
【００２５】
そしてＳ４０にて、Ｓ２０で２進数に変換された１ビット変換データの全てが対象セクタに書き込まれたか否かを判断する。ここで、全ての１ビット変換データが書き込まれていない場合には、Ｓ５０にて、対象セクタに書き込まれていない１ビット変換データの中から、最も上位のビットの１ビット変換データを選択する。例えば、上記の「１０１０１０１０」では、左端の「１」が最も上位のビットであり、右端の「０」が最も下位のビットである。
【００２６】
さらにＳ６０にて、Ｓ５０で選択された１ビット変換データが「１」であるか否かを判断する。ここで、１ビット変換データが「１」である場合には、Ｓ７０にて、書込指示アドレスＡＤｗが示すアドレスにより特定される２バイト分の記憶領域から２バイトのデータを読み出し、読み出したデータを、読み出した時と同じ記憶領域に書き込み、Ｓ８０に移行する。一方、Ｓ５０で選択された１ビット変換データが「０」である場合には、Ｓ８０に移行する。
【００２７】
そしてＳ８０に移行すると、書込指示アドレスＡＤｗに格納されている値に、２バイトに相当する値を加算して、この加算値を書込指示アドレスＡＤｗに格納し、Ｓ４０に移行する。これにより、書込指示アドレスＡＤｗが示すアドレスは、２バイトだけ大きくなるように更新される。
【００２８】
またＳ４０にて、１ビット変換データの全てが対象セクタに書き込まれた場合には、データ書込処理を終了する。
例えば、図４に示すように、対象セクタに記憶されているデータを消去した場合に、対象セクタのデータは、アドレスが小さい順に、１６進数で、「０１３７」，「９７１Ｆ」，「１２９Ａ」，「８７ＢＤ」，「８４６１」，「０１ＡＡ」，「ＢＡ１７」，「３Ｃ８９」，「ＡＡＤＢ」，・・・となっているとする。なお、これらの「０１３７」，「９７１Ｆ」，「１２９Ａ」，「８７ＢＤ」，「８４６１」，「０１ＡＡ」，「ＢＡ１７」，「３Ｃ８９」，「ＡＡＤＢ」，・・・のデータに対してブランクチェックを実行すると、全てブランク状態であると判断される。
【００２９】
そして、隠蔽データが「ＡＡ」である場合には、隠蔽データは、「１０１０１０１０」に変換される。このため、「０１３７」，「１２９Ａ」，「８４６１」，「ＢＡ１７」となっている領域は、同一のデータが書き込まれる。これにより、「０１３７」，「１２９Ａ」，「８４６１」，「ＢＡ１７」が書き込まれている領域に対してブランクチェックを実行すると、ブランク状態でないと判断される。
【００３０】
一方、「９７１Ｆ」，「８７ＢＤ」，「０１ＡＡ」，「３Ｃ８９」となっている領域は、同一データの書き込みが行われない。これにより、「９７１Ｆ」，「８７ＢＤ」，「０１ＡＡ」，「３Ｃ８９」となっている領域に対してブランクチェックを実行すると、ブランク状態であると判断される。
【００３１】
次に、ＣＰＵ２が実行するデータ読出処理の手順を説明する。データ読出処理は、隠蔽データを読み出すときに実行される。
データ読出処理が実行されると、ＣＰＵ２は、図５に示すように、まずＳ２１０にて、対象セクタにおいて、ブランクチェックを実行する先頭アドレスを設定する。具体的には、ＲＡＭ４に設けられたチェック指示アドレスＡＤｃに、上記先頭アドレスに対応する値を格納する。
【００３２】
次にＳ２２０にて、対象セクタにおいて、読み出す隠蔽データが書き込まれている領域（以下、隠蔽データ書込領域）の全てについてブランクチェックが行われたか否かを判断する。ここで、隠蔽データ書込領域の全てについてブランクチェックが行われていない場合には、Ｓ２３０にて、チェック指示アドレスＡＤｃが示すアドレスにより特定される２バイト分の記憶領域を選択する。
【００３３】
次にＳ２４０にて、Ｓ２３０で選択した記憶領域に対して、フラッシュコントローラ６にブランクチェックを実行させる。そしてＳ２５０にて、Ｓ２４０の判断結果が「ブランク状態」であるか否かを判断する。ここで、「ブランク状態」である場合には、Ｓ２６０にて、ＲＡＭ４に設けられたブランクチェックバッファに、「０」を格納し、Ｓ２８０に移行する。一方、「ブランク状態」でない場合には、Ｓ２６０にて、ＲＡＭ４に設けられたブランクチェックバッファに、「１」を格納し、Ｓ２８０に移行する。なお、ブランクチェックバッファは、ブランクチェックバッファに格納された時刻が早い順にデータを格納する。
【００３４】
そしてＳ２８０に移行すると、チェック指示アドレスＡＤｃに格納されている値に、２バイトに相当する値を加算して、この加算値をチェック指示アドレスＡＤｃに格納し、Ｓ２２０に移行する。これにより、チェック指示アドレスＡＤｃが示すアドレスは、２バイトだけ大きくなるように更新される。
【００３５】
またＳ２２０にて、隠蔽データ書込領域の全てについてブランクチェックが行われた場合には、Ｓ２９０にて、ブランクチェックバッファに格納されている２進数のデータを１６進数に変換して、データ読出処理を終了する。
【００３６】
例えば、図６に示すように、データ書込処理が実行された後の対象セクタには、アドレスが小さい順に、１６進数で、「０１３７」，「９７１Ｆ」，「１２９Ａ」，「８７ＢＤ」，「８４６１」，「０１ＡＡ」，「ＢＡ１７」，「３Ｃ８９」，「ＡＡＤＢ」，・・・が記憶されているとする。なお、図６に示す対象セクタは、図４においてデータ書込処理が実行された後の対象セクタである。
【００３７】
その後、データ読出処理を実行すると、まず、「０１３７」に対してブランクチェックが実行されて、「ブランク状態」でないと判断される。これにより、ブランクチェックバッファに「１」が格納される。次に、「９７１Ｆ」に対してブランクチェックが実行されて、「ブランク状態」であると判断される。これにより、ブランクチェックバッファに「０」が格納される。同様に、「１２９Ａ」，「８７ＢＤ」，「８４６１」，「０１ＡＡ」，「ＢＡ１７」，「３Ｃ８９」に対して順次ブランクチェックが実行されて、ブランクチェックの結果に応じて、ブランクチェックバッファに「１」，「０」，「１」，「０」，「１」，「０」が順次格納される。
【００３８】
これにより、ブランクチェックバッファに格納されている２進数のデータは、「１０１０１０１０」となる。そして、「１０１０１０１０」を１６進数に変換すると、「ＡＡ」が得られる。
【００３９】
このように構成されたマイコン１は、フラッシュメモリ３と、フラッシュコントローラ６と、ＣＰＵ２とを備える。
フラッシュメモリ３は、記憶内容の書き換えが可能な不揮発性メモリであり、且つ、記憶された複数の記憶データのそれぞれに対して、ブランク状態であるか否かを、データ値ではない情報である非値情報として設定して記憶可能に構成される。
【００４０】
フラッシュコントローラ６は、フラッシュメモリ３に記憶された複数の記憶データのそれぞれについて、記憶データに設定されている非値情報を特定する。
ＣＰＵ２は、特定された複数の非値情報のそれぞれについて、非値情報が「ブランク状態」である場合には「０」に変換し、非値情報が「ブランク状態」でない場合には「１」に変換する。
【００４１】
このようにマイコン１は、データ値ではない情報である非値情報を、非値情報に応じて「０」または「１」に変換することにより、フラッシュメモリ３に隠蔽された隠蔽データを復元することができる。そしてマイコン１は、隠蔽データを復元するための情報を、「ブランク状態」であるか否かというデータ値ではない情報で記憶する。このため、マイコン１に不正機器が接続された場合に、不正機器は、フラッシュメモリ３に記憶された複数の記憶データを取得することができても、データ値ではない情報である非値情報を取得することができない。これにより、マイコン１は、データの不正取得を抑制することができる。
【００４２】
さらに、マイコン１は、非値情報を変換値に変換することにより隠蔽データを復元することができるため、暗号処理および復号処理を実行する必要がない。これにより、マイコン１は、隠蔽データをフラッシュメモリ３に隠蔽するために行われるデータの書き込みと読み込みの処理時間を短縮することができる。
なお、暗号・復号方式では、元データを計算して暗号データを作るため、時間をかければ、不正取得したデータから解読が可能である。これに対し、マイコン１では、不正取得したデータと、隠蔽したデータとの間に関係がないため、不正取得したデータから解読が不可能である。
【００４３】
またＣＰＵ２は、フラッシュメモリ３に記憶されている複数の記憶データを消去して、複数の記憶データのそれぞれをブランク状態にする。そしてＣＰＵ２は、消去された複数の記憶データの中から、フラッシュメモリ３に隠蔽する隠蔽データの値に基づいて、ブランク状態ではない状態（以下、非ブランク状態）を示す非値情報を割り当てられた記憶データを読み出し、読み出した記憶データが示す値を、読み出した記憶データを記憶していた領域に再度書き込む。
【００４４】
これにより、マイコン１は、新たな隠蔽データをフラッシュメモリ３に隠蔽する前と後とで、フラッシュメモリ３に記憶されている記憶データの値を同一にすることができる。このため、マイコン１は、マイコン１に接続された不正機器が、新たな隠蔽データがフラッシュメモリ３に隠蔽される前と後との両方において、フラッシュメモリ３に記憶されている記憶データを取得したとしても、隠蔽データが更新されたことを不正機器側で認識できないようにすることができる。
【００４５】
以上説明した実施形態において、フラッシュメモリ３はデータ記憶部に相当し、ブランク状態であるか否かを示す情報が非値情報に相当し、フラッシュコントローラ６は特定部に相当し、Ｓ２５０〜Ｓ２７０は変換部としての処理に相当する。
【００４６】
また、Ｓ１０は消去部としての処理に相当し、Ｓ６０，Ｓ７０は書込部としての処理に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
【００４７】
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を１つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。
【００４８】
上述したマイコン１の他、当該マイコン１を構成要素とするシステム、当該マイコン１としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、データ隠蔽方法など、種々の形態で本開示を実現することもできる。
【符号の説明】
【００４９】
１…マイコン、２…ＣＰＵ、３…フラッシュメモリ、６…フラッシュコントローラ
【図１】
2020052181.tif 000003
【図２】
2020052181.tif 000004
【図３】
2020052181.tif 000005
【図４】
2020052181.tif 000006
【図５】
2020052181.tif 000007
【図６】
2020052181.tif 000008