(57)【要約】【課題】複数のアプリが実装されたマイコンにおいて、アプリがデータの変更を検出できる情報処理装置を提供すること。【解決手段】複数のアプリケーションが記憶されたアプリケーション記憶手段１２と、複数の前記アプリケーションが共通にデータを読み書きするメモリ１４と、を有する情報処理装置１００であって、各アプリケーションに固有のアプリケーション識別情報が記述されているアプリケーション識別情報記憶手段２４と、アプリケーションがデータを前記メモリに書き込む際、データ及び該アプリケーションに固有のアプリケーション識別情報を前記メモリに書き込む書き込み手段２３と、アプリケーションがデータを前記メモリから読み出す際、データ及びアプリケーション識別情報を前記メモリから読み出し、アプリケーション識別情報が自身のアプリケーション識別情報と一致しない場合は、読み出したデータを破棄する読み出し手段２２と、を有する。【選択図】図１
2013171467.tif 000002
【特許請求の範囲】
【請求項１】
複数のアプリケーションが記憶されたアプリケーション記憶手段と、
複数の前記アプリケーションが共通にデータを読み書きするメモリと、を有する情報処理装置であって、
各アプリケーションに固有のアプリケーション識別情報が記述されているアプリケーション識別情報記憶手段と、
アプリケーションがデータを前記メモリに書き込む際、データ及び該アプリケーションに固有のアプリケーション識別情報を前記メモリに書き込む書き込み手段と、
アプリケーションがデータを前記メモリから読み出す際、データ及びアプリケーション識別情報を前記メモリから読み出し、アプリケーション識別情報が自身のアプリケーション識別情報と一致しない場合は、読み出したデータを破棄する読み出し手段と、
を有する情報処理装置。
【請求項２】
アプリケーションがデータを前記メモリに書き込む際、データ及びアプリケーション識別情報から第１のＣＲＣ値を計算するＣＲＣ計算手段を有し、
前記書き込み手段は、データ及び前記第１のＣＲＣ値を前記メモリに書き込み、
アプリケーションがデータを前記メモリから読み出す際、前記読み出し手段は、データ及び前記第１のＣＲＣ値を前記メモリから読み出し、前記ＣＲＣ計算手段が前記メモリから読み出されたデータ及びアプリケーション識別情報から作成した第２のＣＲＣ値と、前記メモリから読み出された前記第１のＣＲＣ値が一致しない場合は、読み出したデータを破棄する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
アプリケーションがデータを書き込む際、乱数を作成する乱数作成手段と、
データ及び前記乱数作成手段が作成した乱数から第１のＣＲＣ値を計算するＣＲＣ計算手段と、を有し、
前記書き込み手段は、データ、前記第１のＣＲＣ値、及び、前記乱数作成手段が作成した乱数を前記メモリに書き込み、
アプリケーションがデータを前記メモリから読み出す際、前記読み出し手段は、データ、前記第１のＣＲＣ値及び乱数を前記メモリから読み出し、前記ＣＲＣ計算手段が前記メモリから読み出されたデータ及び乱数から作成した第２のＣＲＣ値と、前記メモリから読み出された前記第１のＣＲＣ値が一致しない場合は、読み出したデータを破棄する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項４】
アプリケーションがデータを書き込む際、乱数を作成する乱数作成手段と、
データ、前記乱数作成手段が作成した乱数及びアプリケーション識別情報から第１のＣＲＣ値を計算するＣＲＣ計算手段を有し、
前記書き込み手段は、データ、前記第１のＣＲＣ値、及び、前記乱数作成手段が作成した乱数を前記メモリに書き込み、
アプリケーションがデータを前記メモリから読み出す際、前記読み出し手段は、データ、前記第１のＣＲＣ値及び乱数を前記メモリから読み出し、前記ＣＲＣ計算手段が前記メモリから読み出されたデータ、乱数、及び、アプリケーション識別情報から作成した第２のＣＲＣ値と、前記メモリから読み出された前記第１のＣＲＣ値が一致しない場合は、読み出したデータを破棄する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項５】
車両の状態を検出するセンサ、及び、車両の状態を制御するアクチュエータと接続されるインタフェースと、
アナログ信号をデジタル信号に変換するＡ／Ｄ変換回路と、
他の情報処理装置と通信する通信装置と、
を有する請求項１〜４いずれか１項記載の情報処理装置。
【請求項６】
請求項１〜５いずれか１項記載の情報処理装置が搭載された車両用電子制御装置。
【請求項７】
複数のアプリケーションが記憶されたアプリケーション記憶手段と、
複数の前記アプリケーションが共通にデータを読み書きするメモリと、
各アプリケーションに固有のアプリケーション識別情報が記述されているアプリケーション識別情報記憶手段と、を有する情報処理装置のデータ読み書き方法であって、
書き込み手段が、アプリケーションがデータを前記メモリに書き込む際、データ及び該アプリケーションに固有のアプリケーション識別情報を前記メモリに書き込むステップと、
アプリケーションがデータを前記メモリから読み出す際、読み出し手段が、データ及びアプリケーション識別情報を前記メモリから読み出し、アプリケーション識別情報が自身のアプリケーション識別情報と一致しない場合は、読み出したデータを破棄するステップと、
を有するデータ読み書き方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のアプリケーションがそれぞれメモリにデータを読み書きする情報処理装置に関する。
【背景技術】
【０００２】
複数のアプリケーションが１つのマイコンに混在して実装される場合がある。各アプリケーション（以下、アプリという）は１つの物理メモリ（例えばＲＡＭ）にアクセスするが、この場合、例えばＭＭＵ（Memory  Management  Unit）のようなメモリ保護機構が、アプリ２がアプリ１の領域にアクセスしないように制御している。しかしながら、アプリ２に想定外の不具合が生じたり、電気的なノイズが生じたりすることで、アプリ２がアプリ１の領域に全くアクセスしないとは限らない。アプリ２がアプリ１の領域にアクセスしても、すぐにマイコンが不具合を生じさせることはないが、アプリ２がアプリ１の領域にアクセスすることは回避することが好ましい。
【０００３】
例えば、アプリ１が書き込んだデータをアプリ２が書き換えてしまった場合、アプリ１がデータを読み出して処理を行っても所望の結果は得られない。このような書き換えを検出する技術として、冗長符号を負荷することが知られている（例えば、特許文献１参照。）。特許文献１には、ＲＯＭの異なる領域に同一データを記憶しておき、それぞれの領域のサムチェック又はＣＲＣ（Cyclic  Redundancy  Check）を計算することでデータの同一性を判定するチェック方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−２８８０４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、各アプリがＣＲＣのような冗長符号をデータと共に記録する場合、単に冗長符号を記録するだけでは、アプリ側ではデータの書き換えを検出できないという問題がある。
【０００６】
図１４は、冗長符号の記録による不都合を説明する図の一例である。図１４（ａ）はアプリ１がデータを読み書きする手順を模式的に示す。アプリ１は、データをＲＡＭに書き込む際、データのＣＲＣ値を計算しデータと共に記録する。アプリ１がデータを読み出す際、データを読み出しＣＲＣ値を計算し、データと共に記録されているＣＲＣ値と比較する。ＣＲＣ値が一致しなければ、データの破損や書き換えがあることを検出できる。
【０００７】
しかしながら、マイコンに複数のアプリが実装された場合、他のアプリ２も同様にデータと共にＣＲＣ値を記録する。図１４（ｂ）はアプリ２が誤ってアプリ１のデータを書き換えた場合の不都合を模式的に示す。アプリ１がデータとＣＲＣ値を書き込んだ後、アプリ２がデータ´とＣＲＣ値´とを書き込む。アプリ１はデータ´を読み出す際、データ´から計算されたＣＲＣ値´と、データ´と共に記憶されているＣＲＣ値´とを比較する。しかし、データ´とＣＲＣ値´が共に書き換えられているので、一致していると判定してしまい、データの破損や書き換えを検出できない。この場合、アプリ１はデータ´を使用して処理を行ってしまう。
【０００８】
このように、複数のアプリ１，２が冗長符号を記録する場合、単に冗長符号を記録するだけでは、各アプリがデータの書き換えを検出することが困難である。
【０００９】
本発明は、上記課題に鑑み、複数のアプリが実装されたマイコンにおいて、アプリがデータの変更を検出できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、複数のアプリケーションが記憶されたアプリケーション記憶手段と、複数の前記アプリケーションが共通にデータを読み書きするメモリと、を有する情報処理装置であって、各アプリケーションに固有のアプリケーション識別情報が記述されているアプリケーション識別情報記憶手段と、アプリケーションがデータを前記メモリに書き込む際、データ及び該アプリケーションに固有のアプリケーション識別情報を前記メモリに書き込む書き込み手段と、アプリケーションがデータを前記メモリから読み出す際、データ及びアプリケーション識別情報を前記メモリから読み出し、アプリケーション識別情報が自身のアプリケーション識別情報と一致しない場合は、読み出したデータを破棄する読み出し手段と、を有する。
【発明の効果】
【００１１】
複数のアプリが実装されたマイコンにおいて、アプリがデータの変更を検出できる情報処理装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】マイコンに実装された各アプリによるデータの書き込み説明する図の一例である。
【図２】マイコンの概略構成図の一例である。
【図３】ＡＳＩＬ−Ｄのアプリ１と他のアプリの関係を模式的に説明する図の一例である。
【図４】マイコンがアプリ１，２を実行する手順を示すフローチャート図の一例である。
【図５】アプリ１の機能ブロック部の一例を示す図である。
【図６】マイコンの動作手順を示すフローチャート図の一例である。
【図７】アプリ１の機能ブロック部の一例を示す図である（実施例２）。
【図８】ＣＲＣの計算を模式的に説明する図の一例である（実施例２）。
【図９】マイコンの動作手順を示すフローチャート図の一例である（実施例２）。
【図１０】アプリ１の機能ブロック部の一例を示す図である（実施例３）。
【図１１】マイコンの動作手順を示すフローチャート図の一例である（実施例３）。
【図１２】アプリ１の機能ブロック部の一例を示す図である（実施例４）。
【図１３】マイコンの動作手順を示すフローチャート図の一例である（実施例４）。
【図１４】冗長符号の記録による不都合を説明する図の一例である
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【実施例１】
【００１４】
図１は、マイコンに実装された各アプリによるデータの書き込み説明する図の一例である。本実施例では、各アプリに固有の書き込み者ナンバーが予め定められている。例えば、アプリ１の書き込み者ナンバーは“０１”、アプリ２の書き込み者ナンバーは“０２”とする。
【００１５】
図１（ａ）に示すように、本実施例の各アプリは、データを書き込む際、データと共に書き込み者ナンバーを記録する。すなわち、アプリ１は、データと書き込み者ナンバー（０１）を記録する。
【００１６】
アプリ１がデータを読み出す際、読み出した書き込み者ナンバー（０１）と、予め与えられている書き込み者ナンバー（０１）とを比較する。一致すれば、データの書き換えがないことを検出できる。
【００１７】
図１（ｂ）はアプリ２によるデータの書き換えを模式的に示す図の一例である。アプリ１がデータと書き込み者ナンバー（０１）を書き込んだ後、アプリ２がデータ´と書き込み者ナンバー（０２）を書き込む。
【００１８】
アプリ１はデータ´を読み出す際、読み出した書き込み者ナンバー（０２）と、予め与えられている書き込み者ナンバー（０１）とを比較する。書き換えにより書き込み者ナンバーが一致しないので、アプリ１はデータ´が書き換えられたものであることを検出できる。
【００１９】
したがって、本実施例のマイコンでは、各アプリが固有の書き込み者ナンバーをデータと共に記録することで、各アプリが他のアプリによるデータの書き換えを検出することができる。
【００２０】
〔構成例〕
図２は、本実施例のマイコン１００の概略構成図の一例を示す。マイコン１００は、ＣＰＵ１１、ＲＡＭ１４、フラッシュＲＯＭ１２、Ｉ／Ｏ１５、ＣＡＮコントローラ１３及びＡ／Ｄ変換回路１６を有している。本実施例ではマイコン１００は、ＣＰＵ１１がプログラムを実行する一般的な構成を備えていればどのようなマイコンでもよい。
【００２１】
ＣＰＵ１１は１つ以上のコアを有し、フラッシュＲＯＭ１２に記憶されているプログラムを実行する。マイコン１００がＣＰＵ自体を複数、有していてもよい（マルチＣＰＵ構成）。ＣＰＵ１１はＲＡＭ１４を作業メモリに使用してプログラムを実行するが、主にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がプログラムの一部をＲＡＭ１４に読み出して実行する。ＲＡＭ１４におけるプログラムのアドレスは、ＭＭＵ（Memory  Management  Unit）がページテーブルなどを用いて管理しており、ＣＰＵ１１がＲＡＭ１４にアクセスする際、ＭＭＵが適切にアドレス変換（論理アドレスと物理アドレスの変換）してＲＡＭ１４にアクセスする。
【００２２】
このプログラムには、単体のアプリケーション（以下、アプリという）が、複数個、含まれている。アプリはそれぞれの固有のイベントで実行されたり、マイコン１００の起動と共に自動的に実行される。アプリが実行されると、ＭＭＵはＯＳからの指示によりアプリ毎にページテーブルを別に管理するなどして、異なるアプリがＲＡＭ１４の同じアドレスにアクセスしないようにメモリ保護を行う。
【００２３】
Ｉ／Ｏ１５には、各種の周辺機器が接続される。例えば、アクチュエータの駆動回路、各種のセンサ、ドライバ回路などである。またＡ／Ｄ変換回路１６には特にアナログで検出信号を提供するセンサ類が接続される。ＣＡＮコントローラ１３は、ＣＡＮバスに接続して他のマイコン１００と通信する通信装置である。
【００２４】
マイコン１００は電子制御装置に搭載される。車両には種々の電子制御装置が搭載されているが本実施例のマイコン１００は搭載される電子制御装置を制限しない。例えば、エンジン制御用の電子制御装置に搭載されたマイコン１００は、各種のセンサの検出結果に基づき、燃料噴射量の演算、点火タイミングの決定、インジェクタの制御、及び、イグナイタの制御等を行う。
【００２５】
また、車輪の制動力を制御する電子制御装置に搭載されたマイコン１００は、ブレーキＡＣＴ（アクチューエータ）を制御して、運転者のブレーキペダル操作がなくても車両の制動力を各輪毎に制御する。また、各輪の回転速度を監視しロックした車輪があるとその車輪のホイルシリンダ圧を低減するＡＢＳ（Anti−locked  Braking  System）制御、同様に発進時の車輪のロックを抑制するＴＲＣ（Ｔｒａｃｔｉｏｎ  Ｃｏｎｔｏｒｏｌ）制御等を行う。また、走行中の車両のヨーレート、Ｇセンサによる減速度などから車両が横滑りしていることを検出すると、旋回方向に対する外側・内側、及び、前輪・後輪の車輪のホイルシリンダ圧を個別に制御して車両の横滑りを低減するＶＳＣ制御をおこなう。
【００２６】
また、ナビゲーションシステムを制御する電子制御装置に搭載されたマイコン１００は、位置情報の取得、道路地図の表示、経路案内などの処理を行う。この他、ＡＶ系の機能が統合されている電子制御装置では、音楽データや映像データの再生、外部の通信網との通信などを行う。
【００２７】
車両にはこの他にも多くの電子制御装置が搭載されるが、１つの電子制御装置（マイコン）には上記のようなメインの機能を提供するアプリの他に、操作性を向上させたり、運転者を支援するアプリが実装されることが多い。本実施例のマイコン１００は、１つのマイコン１００に実装される複数のアプリがメモリに書き込んだデータが、他のアプリから保護されている（以下、メモリ保護という）ことが特徴となっている。
【００２８】
〔アプリについて〕
このように車両は電子制御化が進んでいるが、電子制御されても車両は安全が確保されていることが要請される。このような安全を保証する装置は安全装置と呼ばれ、有形無形を問わず電子制御装置に搭載される。安全装置はマイコン１００や車載装置の機能が仕様にしたがって動作しているか否かを監視し、故障などが検出されると機能を停止したり、外部に通知するなどのフェールセーフ機能を提供する。このような安全性の確保や得られる安全性そのものを機能安全と呼ぶ。
【００２９】
車両の機能安全については、ＩＥＣ６１５０８／ＩＳＯ２６２６２等に規格化されており、ＩＳＯ２６２６２には自動車の安全要求と安全対策を指定する指標としてＡＳＩＬ（Automotive  Safety  Integrity  Level）が定められている。ＡＳＩＬには５段階の安全性レベルを定められており、安全性の基準が高い順にＤ，Ｃ，Ｂ，Ａ、ＱＭとなっている。ＡＳＩＬは、ハザード（障害）によって生じる被害の大きさ、ハザードの生じる頻度、及び、ハザードが生じた場合の制御難易度を検討し、車両メーカ等が決定する。
【００３０】
車両メーカ等は、決定したＡＳＩＬに応じて、ハザードが生じてもその実害を許容できる程度に抑制するための措置を施す必要がある。そして、上記の規格の認証機関に対し、ＡＳＩＬに応じた措置が施されていることの資料を提出するなどして、認証機関から認証を受ける。当然ながら、ＡＳＩＬが高いほどハザードの影響を低減するために多くの措置が必要になり（開発プロセスが複雑になる）、また措置が施されていることを説明するために多くの資料が必要になる。
【００３１】
アプリにおいても、上述した電子制御装置のメインの機能を提供するアプリは高いＡＳＩＬ（例えばＤ、Ｃ）になる傾向があり、その他のアプリは低いＡＳＩＬ（例えばＱＭ）になる傾向がある。例えば、ブレーキを制御するアプリ、パワーステアリングを制御するアプリ等はＡＳＩＬが高く、直接、走行制御に影響しにくいアプリのＡＳＩＬは低くなる。
【００３２】
アプリ１はＡＳＩＬ−Ｄ、アプリ２はＡＳＩＬ−ＱＭであるとし、アプリ１，２がＲＡＭ１４にアクセスする場合を考える。この場合、アプリ１とアプリ２が物理的に別体のＲＡＭ１４にアクセスする場合、アプリ１とアプリ２の間でメモリ保護が確保されていることを認証機関に主張することは容易である。しかしながら、実際にはアプリの数だけマイコン１００にＲＡＭ１４を搭載することは困難である。
【００３３】
そこで、マイコン１００に複数のアプリが実装される場合、ソフトウェアの安全性を説明する方法として、パーティショニングという考え方を利用することが多い。パーティショニングとは、アプリ１とアプリ２が互いに独立して実行されていること（メモリについていえばデータに干渉が生じない）を説明する手法である。
【００３４】
仮に、パーティショニングという手法を使用しない場合、１つでもＡＳＩＬ−Ｄのアプリがマイコン１００に実装されていると、ＡＳＩＬ−ＱＭのアプリ２が、ＡＳＩＬ−Ｄのアプリ１を同じプロセスで開発される必要があることを意味する（すなわち、メモリ保護を確実に行うための必要な措置を施すために複雑なプロセスで開発しなければならない）。
【００３５】
これに対し、パーティショニングによりメモリ保護を説明する場合、ＡＳＩＬ−ＱＭのアプリ２がアプリ１のメモリ領域にデータを書き込まないことを証明すればよい（逆に、ＡＳＩＬ−Ｄのアプリ１がアプリ２のメモリ領域にデータを書き込まないことは、アプリ１がＡＳＩＬ−Ｄのプロセスで開発される過程で証明される）。すなわち、アプリ１のメモリ領域がアプリ２から保護されていることを証明すればよいので、アプリ２の開発プロセスのコストを大きく低減できる。
【００３６】
図３は、ＡＳＩＬ−Ｄのアプリ１と他のアプリの関係を模式的に説明する図の一例である。ＡＳＩＬ−Ｄのアプリ１が、ＡＳＩＬ−ＱＭの他のアプリ２，３から保護されるべきアプリとなる。本実施例によれば、アプリ２，３がアプリ１のメモリ領域にデータを書き込んでもアプリ１はそれを検出することができる。
【００３７】
なお、このように複数のアプリが実装されても、アプリ１が他のアプリ２，３から保護されていることが保証されれば、電子制御装置の機能統合も容易になる。すなわち、アプリ１〜３が、元々、別々の電子制御装置に実装されていても、機能統合時にアプリ１がＡＳＩＬ−Ｄのプロセスで開発されており、本実施例のメモリ保護機能を有することを説明すればよい。
【００３８】
〔アプリ１，２の実行〕
図４は、マイコン１００がアプリ１，２を実行する手順を示すフローチャート図の一例である。アプリは３つ以上でも処理手順は同様である。
【００３９】
マイコン１００がＯＳのようなシステムソフトを有していない場合、マイコン１００はアプリ１，２を例えば順番に実行する。マイコン１００はＲＡＭ１４のアドレス順にプログラムを読み出すことでアプリ１，２の実行を機械的に繰り返す。または、タイマを利用して、タイマ割込みによりアプリ１，２がそれぞれ実行開始されてもよい。
【００４０】
また、マイコン１００がシステムソフトを有する場合、システムソフトがアプリ１、２をＣＰＵ１１などのリソースに割り当てることで、アプリ１、２を独立に実行することができる。この場合、アプリ１の全体を実行した後，アプリ２を実行させて、それを繰り返すことができる。また、所定のスライスタイム毎にアプリ１のコンテキストの退避とアプリ２のコンテキストの復帰を行い、同様にスライスタイム毎にアプリ２のコンテキストの退避とアプリ１のコンテキストの復帰を行うことで、時分割に実行してもよい。
【００４１】
図５は、アプリ１の機能ブロック部の一例を示す図である。アプリ１は、処理部２１、読み出し部２２、及び、メモリ書き込み部２３を有している。また、書き込み者ナンバー２４を記憶している（以下、書き込み者ナンバー２４の符号は省略する）これらの機能ブロックは、ＣＰＵ１１がアプリ１を実行することで実現される。なお、アプリ２も同様の機能を有しているが図示は省略した。
【００４２】
処理部２１は、アプリ１に特有の処理を行う機能でありどのような処理を行うかは搭載される電子制御装置によって様々である。アプリ１は処理の過程で種々のデータを生成しＲＡＭ１４に保存する場合があり、また、ＲＡＭ１４に書き込んだデータを後の処理で使用する場合がある。データを書き込む場合、処理部２１はメモリ書き込み部２３を呼び出すと共にデータを送出し、データを読み出す場合、データ名（変数名）と共に読み出し部２２を呼び出す。
【００４３】
メモリ書き込み部２３はデータを書き込む際、書き込み者ナンバー（０１）を読み出し、データと共にＲＡＭ１４に記憶する。例えば、データの次のアドレスに書き込み者ナンバーを記憶してもよいし、書き込み者ナンバーを記憶する領域を確保して先頭アドレスから順番に書き込み者ナンバーを記憶してもよい。いずれにしても、データと書き込み者ナンバーとが１対１に対応づけられる。
【００４４】
なお、書き込み者ナンバー（０１）はフラッシュＲＯＭ１２に記憶されている。フラッシュＲＯＭ１２の特定の領域に記憶されていてもよいが、アドレスが既知になると他のアプリが読み出すことが可能となってしまうおそれがある。このため、例えば、各アプリのコードの一部にアプリに特有の書き込み者ナンバー（０１）が記憶されていることが好適となる。アプリのどの部分に書き込み者ナンバー（０１）が記述されているかを特定することは困難なので、アプリ２がアプリ１の書き込み者ナンバー（０１）を探し出すことは困難である。
【００４５】
読み出し部２２はデータ名で指定されたデータと書き込み者ナンバー（０１）をＲＡＭ１４から読み出すと、予め記憶している書き込み者ナンバー（０１）とＲＡＭ１４から読み出した書き込み者ナンバー（０１）を比較する。一致する場合は、データが書き換えられていないものとして処理部２１にデータを送出する。一致しなかった場合、読み出し部２２はデータを破棄すると共に処理部２１に通知する。これにより処理部２１は予め定められているフェールセーフ処理を行う。処理部２１は、例えばデフォルト値に置き換えて処理を継続する。デフォルト値は該当するデータの例えば初期値のように制御に大きな影響を与えないデータである。また、エラーが生じたことと変数名などを記録してもよい。また、処理部２１はマイコン１００そのものを再起動してもよいし、アプリ１を再起動してもよい。どのようなフェールセーフ処理を行うかはデータの重要度に依存するものであり、データ毎に予め定められている。
【００４６】
〔動作手順〕
図６は、本実施例のマイコン１００の動作手順を示すフローチャート図の一例である。図６（ａ）は書き込み時の処理手順を、図６（ｂ）は読み出し時の処理手順をそれぞれ示す。図６（ａ）（ｂ）の処理は各アプリが独立にそれぞれ実行する。
【００４７】
まず、処理部２１がアプリに特有の処理を行うことで書き込み用のデータが発生する（Ｓ１０）。
【００４８】
メモリ書き込み部２３は、書き込み者ナンバーを読み出す（Ｓ１８）。
【００４９】
メモリ書き込み部２３はＲＡＭ１４にデータと書き込み者ナンバーを対応づけて書き込む（Ｓ２８）。
【００５０】
続いて、マイコン１００がＲＡＭ１４に書き込んだデータを読み出す処理が発生する。読み出し部２２はデータと書き込み者ナンバーをＲＡＭ１４から読み出す（Ｓ１０８）。
【００５１】
読み出し部２２は、予め記憶している書き込み者ナンバーとＲＡＭ１４から読み出した書き込み者ナンバーが一致するか否かを判定する（Ｓ１３０）。この判定により、ＲＡＭ１４に書き込まれたデータが書き換えられていることを検出できる。
【００５２】
書き込み者ナンバーが一致した場合（Ｓ１３０のＹｅｓ）、読み出し部２２はデータを処理部２１に送出するので、処理部２１は読み出したデータを処理に使用する（Ｓ１４０）。
【００５３】
書き込み者ナンバーが一致しない場合（Ｓ１３０のＮｏ）、処理部２１はフェールセーフ処理を行う（Ｓ１５０）。フェールセーフ処理は、例えば、デフォルト値へ置き換えることであるが、どのようなフェールセーフ処理かはデータに応じて予め定められている。
【００５４】
以上のような処理により、例えば、アプリ１がデータを書き込んだ後、同じアドレスにアプリ２がデータを書き込んでしまった場合、書き込み者ナンバーはアプリ２の書き込み者ナンバー（０２）になっている。このため、アプリ１が書き込み者ナンバー（０２）を読み出しても、自身の書き込み者ナンバー（０１）と一致しない。よって、アプリ１はデータの書き換えを検出して適切なフェールセーフ処理を行うことができる。
【００５５】
以上説明したように、本実施例のマイコン１００は複数のアプリが実装されていても、各アプリがデータの書き換えを検出することができ、メモリ保護を確実に行うことができる。特に、車両メーカ等が、ＡＳＩＬ−Ｃ，ＡＳＩＬ−Ｄのような高いＡＳＩＬのアプリの認証を受ける場合、ＡＳＩＬ−Ｃ，ＡＳＩＬ−Ｄのアプリが、他のアプリからパーティショニングされていることを証明できる。したがって、ＡＳＩＬの低いアプリ２については、最大ＡＳＩＬのアプリ１と同じプロセスで開発する必要がなくなり、コスト増を抑制できる。
【実施例２】
【００５６】
本実施例では、書き込み者ナンバーを単に書き込むのでなくＣＲＣ値に含まれる態様で書き込むマイコン１００について説明する。データと書き込み者ナンバーからＣＲＣ値を作成するので、データだけが書き換わったことも検出できる。
【００５７】
図７は、アプリ１の機能ブロック部の一例を示す図である。図７において図５と同一部には同一の符号付しその説明は省略する。本実施例では、アプリ１は新たにＣＲＣ計算部２５を有している。
【００５８】
データを書き込む場合、処理部２１はメモリ書き込み部２３を呼び出すと共にデータを送出し、データを読み出す場合、データ名（変数名）と共に読み出し部２２を呼び出す。メモリ書き込み部２３はデータをＣＲＣ計算部２５に送出してＣＲＣ値の計算を要求する。ＣＲＣ計算部２５はデータと書き込み者ナンバー（０１）とを用いてＣＲＣ値を計算する。
【００５９】
図８はＣＲＣ値の計算を模式的に説明する図の一例である。ＣＲＣ計算部２５は、データと書き込み者ナンバーから計算対象のビット列を作成する。図では、８bitの上位ビットにデータを、下位ビットに書き込み者ナンバーを合成している。こうすることで、ＣＲＣ値はデータだけでなくデータと書き込み者ナンバーの組により定まる値となる。なお、８bitの下位ビットにデータを、上位ビットに書き込み者ナンバーを合成してもよい。また、全体のビット数はマイコン１００のバス幅などに応じて設定される。
【００６０】
ＣＲＣ値の求め方について簡単に説明する。ＣＲＣ値は検査対象のデータを素数で除した場合の余りとして定義される。コンピュータ上は、取り扱いを容易にするためＣＲＣ値と検査対象を１つとして扱い、多項式表現を用いる。この場合、ＣＲＣ値は、符号多項式Ｆ（ｘ）を生成多項式Ｇ（ｘ）で除した場合の余りＲ（ｘ）として表すことができる。Ｑ（ｘ）は商である。符号多項式Ｆ（ｘ）とはＣＲＣ値に対応する検査ビットと計算対象に対応する情報ビットを各係数に対応させることで得られる多項式である。Ｇ（ｘ）は素数に対応する多項式である。Ｆ（ｘ）、Ｇ（ｘ）、Ｑ（ｘ）には以下の関係がある。ｍは検査ビットのビット数である。
Ｆ（ｘ）＝Ｇ（ｘ）・Ｑ（ｘ）
＝Ｒ（ｘ）＋ｘｍＰ（ｘ）
Ｒ（ｘ）の次数はＧ（ｘ）の次数未満なので、ｘｍＰ（ｘ）をＧ（ｘ）で除することでＲ（ｘ）が得られる。
【００６１】
全体の符号長をｎ＝７ビット、情報ビットをｋ＝３ビット、検査ビット（ＣＲＣ値）をｍ＝ｎ−ｋ＝４ビットとする。計算を簡略化するため、計算対象の情報ビットを“０１１”とすると、Ｐ（ｘ）は以下のようになる。
Ｐ（ｘ）＝ｘ＋ｘ２
ｘ４Ｐ（ｘ）＝ｘ５＋ｘ６
このｘ４Ｐ（ｘ）をＧ（ｘ）で除した場合の余りがＣＲＣ値である。生成多項式Ｇ（ｘ）がＧ（ｘ）＝ｘ４＋ｘ３＋ｘ２＋１  とする。
【００６２】
ｘｍＰ（ｘ）／Ｇ（ｘ）＝ｘ２＋１  余り  ｘ３＋１
したがって、Ｒ（ｘ）＝ｘ３＋１が得られる。以上からＦ（ｘ）を求めると以下のようになる。
Ｆ（ｘ）＝ｘ４Ｐ（ｘ）＋Ｒ（ｘ）
＝ｘ６＋ｘ５＋ｘ３＋１
符号長が７ビットなので、生成多項式はＦ（ｘ）＝１＋０・ｘ＋０・ｘ２＋ｘ３＋０・ｘ４＋ｘ５＋ｘ６  である。このうちの３ビットがＣＲＣ値になる。
【００６３】
なお、ＣＲＣ値の計算に使用される生成多項式は、いくつか定められておりＣＲＣ−ＩＴＵにはｘ１６＋ｘ１２＋ｘ５＋１（＝１１０２１ｈ）が規定されている。この生成多項式により１６bitのＣＲＣ値を作成できる。この場合、例えば、全体の符号長ｎはｎ＝３２ビット、情報ビットと検査ビット（ＣＲＣ値）は共に１６ビットとなる。検査対象のデータの上位又は下位に０のビットを追加するなどして１６ビットの長さに整えることで同様の計算でＣＲＣ値を得られる。
【００６４】
メモリ書き込み部２３はＣＲＣ計算部２５が計算したＣＲＣ値を取得して、データと共にＲＡＭ１４に記憶する。例えば、データの次のアドレスにＣＲＣ値を記憶してもよいし、ＣＲＣ値を記憶する領域を確保して先頭アドレスから順番にＣＲＣ値を記憶してもよい。いずれにしても、データとＣＲＣ値とが１対１に対応づけられる。
【００６５】
なお、ＣＲＣ値は冗長符号の一例であり、書き込み者ナンバー（０１）とデータのパリティビットを冗長符号として付加してもよい。また、書き込み者ナンバー（０１）とデータのチェックサムを冗長符号として付加してもよい。
【００６６】
読み出し部２２はデータ名で指定されたデータとＣＲＣ値をＲＡＭ１４から読み出すと、データをＣＲＣ計算部２５に送出してＣＲＣ値の計算を要求する。ＣＲＣ計算部２５は同様の手順でデータと書き込み者ナンバー（０１）とを用いてＣＲＣ値を計算する。
【００６７】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値と、ＲＡＭ１４から読み出したＣＲＣ値を比較して一致する場合は、データが書き換えられていないものとして処理部２１に送出する。一致しなかった場合、読み出し部２２はデータを破棄すると共に処理部２１に通知する。これにより処理部２１は予め定められているフェールセーフ処理を行う。
【００６８】
〔動作手順〕
図９は、本実施例のマイコン１００の動作手順を示すフローチャート図の一例である。図９（ａ）は書き込み時の処理手順を、図９（ｂ）は読み出し時の処理手順をそれぞれ示す。図９（ａ）（ｂ）の処理は各アプリが独立にそれぞれ実行する。
【００６９】
まず、処理部２１がアプリに特有の処理を行うことで書き込み用のデータが発生する（Ｓ１０）。メモリ書き込み部２３は、データをＣＲＣ計算部２５に送出する。
【００７０】
ＣＲＣ計算部２５はアプリに特有の書き込み者ナンバー（０１）とデータからＣＲＣ値を計算する（Ｓ２０）。
【００７１】
メモリ書き込み部２３はＲＡＭ１４にデータとＣＲＣ値を書き込む（Ｓ３０）。
【００７２】
続いて、マイコン１００がＲＡＭ１４に書き込んだデータを読み出す処理が発生する。読み出し部２２はデータとＣＲＣ値をＲＡＭ１４から読み出す（Ｓ１１０）。
【００７３】
データを読み出すとＣＲＣ計算部２５が、ＲＡＭ１４から読み出したデータと書き込み者ナンバーからＣＲＣ値を計算する（Ｓ１２０）。
【００７４】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値とＲＡＭ１４から読み出したＣＲＣ値が一致するか否かを判定する（Ｓ１３０）。この判定により、ＲＡＭ１４に書き込まれたデータの書き換えを検出できる。
【００７５】
ＣＲＣ値が一致した場合（Ｓ１３０のＹｅｓ）、読み出し部２２はデータを処理部２１に送出するので、処理部２１は読み出したデータを処理に使用する（Ｓ１４０）。
【００７６】
ＣＲＣ値が一致しない場合（Ｓ１３０のＮｏ）、処理部２１はフェールセーフ処理を行う（Ｓ１５０）。フェールセーフ処理は、例えば、デフォルト値へ置き換えることであるが、どのようなフェールセーフ処理かはデータに応じて予め定められている。
【００７７】
例えば、アプリ１がデータを書き込んだ後、同じアドレスにアプリ２がデータとＣＲＣ値を書き込んでしまった場合、ＣＲＣ値はアプリ２の書き込み者ナンバー（０２）の影響を受ける。このため、アプリ１のＣＲＣ計算部２５がアプリ１の書き込み者ナンバー（０１）とデータから作成したＣＲＣ値と、ＲＡＭから読み出したＣＲＣ値が一致しない。よって、アプリ１はデータの書き換えを検出して適切なフェールセーフ処理を行うことができる。
【００７８】
また、本実施例のアプリ１は、アプリ１がデータを書き込んだ後、同じアドレスにアプリ２がデータだけを書き込んでしまったことも検出できる（ＣＲＣ値は変更されていない）。ＲＡＭのデータが書き換わっているので、アプリ１のＣＲＣ計算部２５がアプリ１の書き込み者ナンバー（０１）とデータから作成したＣＲＣ値は、ＲＡＭに記憶されているＣＲＣ値と一致しない。よって、アプリ１はデータだけが書き換えられてもそれを検出して適切なフェールセーフを行うことができる。ＣＲＣ値だけが書き換えられている場合も同様に検出できる。
【００７９】
以上説明したように、本実施例のマイコン１００は実施例１の効果に加え、データ又はＣＲＣ値のどちらか一方だけが書き換えられた場合もそれらの書き換えを検出できる。
【実施例３】
【００８０】
実施例２ではアプリが固有の書き込み者ナンバーを用いてＣＲＣ値を計算したが、書き込み者ナンバーは静的なデータであった。このため、書き込み者ナンバーが偶然一致するアプリが存在したり、第三者により解析されるおそれがないわけではない。そこで、本実施例では、アプリがＣＲＣ値の計算に使用する情報（これが書き込み者ナンバーに相当する）を動的に変更するマイコン１００について説明する。
【００８１】
図１０は、本実施例のアプリ１の機能ブロック部の一例を示す図である。図１０において図５と同一部には同一の符号を付しその説明は省略する。本実施例ではアプリ1が乱数作成部２６を有する。乱数作成部２６は、予め定められたビット長の乱数を作成する。本実施例ではこの乱数とデータからＣＲＣ値が作成される。したがって、本実施例の乱数は実施例２の書き込み者ナンバーに相当する。
【００８２】
メモリ書き込み部２３がＣＲＣ計算部２５にデータを送出すると、ＣＲＣ計算部２５は乱数作成部２６に乱数を作成させる。ＣＲＣ計算部２５はデータと乱数からＣＲＣ値を計算し、ＣＲＣ値と乱数をメモリ書き込み部２３に送出する。
【００８３】
メモリ書き込み部２３はデータとＣＲＣ値をＲＡＭ１４に書き込むが、さらに、乱数（書き込み者ナンバー）をＲＡＭ１４に記憶する。これは、乱数は生成される度に異なるため、記録しておかないとデータの読み出し時にＣＲＣ値が一致するかどうかを判定できないためである。乱数はデータ及びＣＲＣ値とは別に記憶される（例えば、アプリ１の乱数専用のスタック）ことが好適となる。これは、乱数がアプリ２により書き換えられると、ＣＲＣ値による検証が困難になるためである。
【００８４】
読み出し部２２はデータ名で指定されたデータを読み出す際、ＣＲＣ値及び乱数をＲＡＭ１４から読み出す。そして、データと乱数をＣＲＣ計算部２５に送出してＣＲＣ値の計算を要求する。ＣＲＣ計算部２５は同様の手順でデータと乱数とを用いてＣＲＣ値を計算する。
【００８５】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値と、ＲＡＭ１４から読み出したＣＲＣ値を比較して一致する場合は、データが書き換えられていないものとして処理部２１に送出する。一致しなかった場合、読み出し部２２はデータを破棄すると共に処理部２１に通知する。これにより処理部２１は予め定められているフェールセーフ処理を行う。
【００８６】
アプリ２がデータを書き換えた場合、ＣＲＣ値はアプリ２のデータと乱数作成部２６が作成した乱数から計算されたものとなるが、ＲＡＭにおいて乱数は、アプリ１が作成したものが保持されている。したがって、アプリ１は、アプリ２がデータを書き換えたことを検出できる。
【００８７】
実施例２のように静的な書き込み者ナンバーからＣＲＣ値を作成すると、書き込み者ナンバーが一致するアプリが存在したり、書き込み者ナンバーが偶然一致した場合に、アプリがデータの書き換えを検出できない。しかしながら、本実施例のように書き込み者ナンバーに乱数を使用した場合、アプリ１，２が作成した乱数が一致することはないとしてよいので、書き換えの検出精度を向上できる。仮にアプリ１，２が作成した乱数が一致したとしても、連続して一致することはない。よって、少なくともアプリ１が２回、連続してアプリ２による書き換えを見逃すことをなくすことができる。
【００８８】
〔動作手順〕
図１１は、本実施例のマイコン１００の動作手順を示すフローチャート図の一例である。図１１（ａ）は書き込み時の処理手順を、図１１（ｂ）は読み出し時の処理手順をそれぞれ示す。図１１（ａ）（ｂ）の処理は各アプリが独立にそれぞれ実行する。
【００８９】
まず、処理部２１がアプリに特有の処理を行うことで書き込み用のデータが発生する（Ｓ１０）。メモリ書き込み部２３は、データをＣＲＣ計算部２５に送出する。
【００９０】
ＣＲＣ計算部２５は乱数作成部２６に乱数の作成を要求するので、乱数作成部２６が乱数を作成する（Ｓ１５）。
【００９１】
ＣＲＣ計算部２５は、乱数とデータからＣＲＣ値を計算する（Ｓ２２）。
【００９２】
メモリ書き込み部２３はＲＡＭ１４にデータ、ＣＲＣ値及び乱数を書き込む（Ｓ３２）。
【００９３】
続いて、マイコン１００がＲＡＭ１４に書き込んだデータを読み出す処理が発生する。読み出し部２２はデータ、ＣＲＣ値及び乱数をＲＡＭ１４から読み出す（Ｓ１１２）。
【００９４】
ＣＲＣ計算部２５は、読み出し部２２が読み出したデータと乱数からＣＲＣ値を計算する（Ｓ１２２）。
【００９５】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値とＲＡＭ１４から読み出したＣＲＣ値が一致するか否かを判定する（Ｓ１３０）。この判定により、ＲＡＭ１４に書き込まれたデータの書き換えを検出できる。
【００９６】
ＣＲＣ値が一致した場合（Ｓ１３０のＹｅｓ）、読み出し部２２はデータを処理部２１に送出するので、処理部２１は読み出したデータを処理に使用する（Ｓ１４０）。
【００９７】
ＣＲＣ値が一致しない場合（Ｓ１３０のＮｏ）、処理部２１はフェールセーフ処理を行う（Ｓ１５０）。フェールセーフ処理は、例えば、デフォルト値へ置き換えることであるが、どのようなフェールセーフ処理かはデータに応じて予め定められている。
【００９８】
したがって、本実施例のマイコン１００によれば、実施例２の効果に加え、書き込み者ナンバーがＲＡＭ１４への書き込みの度に変わるので、データの書き換えの検出率をさらに向上させることができる。
【実施例４】
【００９９】
本実施例では実施例２と３を組み合わせ、ＣＲＣ計算部２５が、データ、書き込み者ナンバー及び乱数からＣＲＣ値を計算するマイコン１００について説明する。本実施例によれば、他のアプリ２が使用する書き込み者ナンバー及び乱数が一致しない限り、アプリ１がデータの書き換えを検出できる。
【０１００】
図１２は、本実施例のアプリ１の機能ブロック部の一例を示す図である。図１２において図１０と同一部には同一の符号を付しその説明は省略する。本実施例ではアプリ１が書き込み者ナンバー（０１）及び乱数作成部２６を有する。
【０１０１】
メモリ書き込み部２３がＣＲＣ計算部２５にデータを送出すると、ＣＲＣ計算部２５は乱数作成部２６に乱数を作成させる。ＣＲＣ計算部２５はデータ、書き込み者ナンバー及び乱数からＣＲＣ値を計算し、ＣＲＣ値と乱数をメモリ書き込み部２３に送出する。
【０１０２】
メモリ書き込み部２３はデータ、ＣＲＣ値及び乱数をＲＡＭ１４に記憶する。乱数を書き込む理由は実施例３と同様であるが、本実施例では乱数はデータと共に（例えば連続したアドレスに）記憶できる。これは、乱数がアプリ２により書き換えられても、ＣＲＣ値に書き込み者ナンバー（０１）が含まれているため、データの書き換えの検出が可能なためである。
【０１０３】
読み出し部２２はデータ名で指定されたデータを読み出す際、ＣＲＣ値及び乱数をＲＡＭ１４から読み出す。そして、データと乱数をＣＲＣ計算部２５に送出してＣＲＣ値の計算を要求する。ＣＲＣ計算部２５はデータ、乱数及び書き込み者ナンバーを用いてＣＲＣ値を計算する。
【０１０４】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値と、ＲＡＭ１４から読み出したＣＲＣ値を比較して一致する場合は、データが書き換えられていないものとして処理部２１に送出する。一致しなかった場合、処理部２１は予め定められているフェールセーフ処理を行う。
【０１０５】
このように、ＣＲＣ値が乱数によって変わるので実施例３と同様にデータの書き換えの検出率を向上できる。また、ＣＲＣ値は書き込み者ナンバーによっても変わるので、ＲＡＭに記憶された乱数が書き換えられても、書き込み者ナンバーが一致しない限りデータの書き換えを検出できる。すなわち、乱数と書き込み者ナンバーが一致しない限り、データの書き換えを検出できる。
【０１０６】
〔動作手順〕
図１３は、本実施例のマイコン１００の動作手順を示すフローチャート図の一例である。図１３（ａ）は書き込み時の処理手順を、図１３（ｂ）は読み出し時の処理手順をそれぞれ示す。図１３（ａ）（ｂ）の処理は各アプリが独立にそれぞれ実行する。
【０１０７】
まず、処理部２１がアプリに特有の処理を行うことで書き込み用のデータが発生する（Ｓ１０）。メモリ書き込み部２３は、データをＣＲＣ計算部２５に送出する。
【０１０８】
ＣＲＣ計算部２５は乱数作成部２６に乱数の作成を要求するので、乱数作成部２６が乱数を作成する（Ｓ１５）。
【０１０９】
ＣＲＣ計算部２５は、データ、書き込み者ナンバー（０１）及び乱数からＣＲＣ値を計算する（Ｓ２４）。
【０１１０】
メモリ書き込み部２３はＲＡＭ１４にデータ、ＣＲＣ値及び乱数を書き込む（Ｓ３２）。
【０１１１】
続いて、マイコン１００がＲＡＭ１４に書き込んだデータを読み出す処理が発生する。読み出し部２２はデータ、ＣＲＣ値及び乱数をＲＡＭ１４から読み出す（Ｓ１１２）。
【０１１２】
ＣＲＣ計算部２５は、読み出し部２２が読み出したデータ、乱数、及び、書き込み者ナンバー（０１）からＣＲＣ値を計算する（Ｓ１２４）。
【０１１３】
読み出し部２２は、ＣＲＣ計算部２５が計算したＣＲＣ値とＲＡＭ１４から読み出したＣＲＣ値が一致するか否かを判定する（Ｓ１３０）。この判定により、ＲＡＭ１４に書き込まれたデータの書き換えを検出できる。以降の処理は実施例３と同様である。
【０１１４】
したがって、本実施例のマイコン１００によれば、実施例３の効果に加え、乱数と書き込み者ナンバーが一致しない限りデータの書き換えを検出でき、データの書き換えの検出率をさらに向上できる。
【符号の説明】
【０１１５】
１１    ＣＰＵ
１２    フラッシュＲＯＭ
１４    ＲＡＭ
２１    処理部
２２    読み出し部
２３    メモリ書き込み部
２４    書き込み者ナンバー
２５    ＣＲＣ計算部
２６    乱数作成部
１００  マイコン
【図１】
2013171467.tif 000003
【図２】
2013171467.tif 000004
【図３】
2013171467.tif 000005
【図４】
2013171467.tif 000006
【図５】
2013171467.tif 000007
【図６】
2013171467.tif 000008
【図７】
2013171467.tif 000009
【図８】
2013171467.tif 000010
【図９】
2013171467.tif 000011
【図１０】
2013171467.tif 000012
【図１１】
2013171467.tif 000013
【図１２】
2013171467.tif 000014
【図１３】
2013171467.tif 000015
【図１４】
2013171467.tif 000016