データ処理装置及びデータ処理方法
【課題】メモリ容量が少ない組込み環境において、プログラム更新を安全に行う方法を提供することを目的とする。
【解決手段】プログラム組込み装置201において、処理部206は暗号化された鍵K´をプログラムローダ装置101から受信し、プログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させて鍵K´を復号し、復号した鍵Kをデータ領域204に保存する。復号部208は鍵Kで暗号化されたアプリケーションプログラムP´をプログラムローダ装置101から受信し、データ領域204に保存された鍵KによりアプリケーションプログラムP´を復号してアプリケーションプログラムPを取得する。そして、アプリケーションプログラムPをプログラム領域205の鍵デカプセル化プログラムQが保存された領域に上書き保存する。
【解決手段】プログラム組込み装置201において、処理部206は暗号化された鍵K´をプログラムローダ装置101から受信し、プログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させて鍵K´を復号し、復号した鍵Kをデータ領域204に保存する。復号部208は鍵Kで暗号化されたアプリケーションプログラムP´をプログラムローダ装置101から受信し、データ領域204に保存された鍵KによりアプリケーションプログラムP´を復号してアプリケーションプログラムPを取得する。そして、アプリケーションプログラムPをプログラム領域205の鍵デカプセル化プログラムQが保存された領域に上書き保存する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置及びデータ処理方法に関するものである。本発明は、特に、メモリ容量が小さい組込み環境(組込みマイコン)においてプログラム更新(主に、オンデマンドプログラム更新)を安全に行う方式に関するものである。
【背景技術】
【0002】
従来のプログラム組込み装置では、限られたメモリ容量を効率的に利用するために、データ格納領域に更新データの格納領域を確保しプログラム更新を行うという処理方法がある(例えば、特許文献1参照)。
【0003】
また、従来のプログラム組込み装置では、復号装置又は認証装置を備えて内蔵されているプログラムやデータの安全な更新を実現するための方法がある(例えば、特許文献2参照)。
【特許文献1】特開2005−332301号公報
【特許文献2】特開2004−259077号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
従来のプログラム更新機能を備えたプログラム組込み装置では、更新データを装置へダウンロードする際に、その更新データが暗号化されていないために、ダウンロード処理中にデータを盗聴されたり、悪意のあるプログラムにすり替えられたり、という危険性があった。
【0005】
また、従来のプログラム更新機能を備えたプログラム組込み装置では、その更新データが暗号化されていても、全ての装置において同一の秘密鍵であるというケースが多く、セキュリティ上の課題(脆弱性)があった。
【0006】
従来のプログラム更新機能を備えたプログラム組込み装置では、全ての装置において同一の秘密鍵でないようにするために、それぞれに個別鍵を持たせようとすると、コストがかかる上に管理が煩雑になるという課題があった。
【0007】
また、従来のプログラム更新機能を備えたプログラム組込み装置では、全ての装置において同一の秘密鍵でないようにするため、あるいは後々に鍵更新ができるようにするために、ID(識別子)ベース暗号等の公開鍵暗号を用いようとすると、組込み環境においてはプログラムサイズが大きいことから実装することが困難であった。
【0008】
従来のプログラム組込み装置では、鍵更新ができない、あるいは容易に実施できないという課題があった。
【0009】
本発明は、より高いセキュリティを備えた効率のよいシステムを提供することを目的とする。本発明は、そのために、例えば、メモリ容量が少ない組込み環境において、プログラム更新を安全に行う方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明の一の態様に係るデータ処理装置は、
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部と、
前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存する処理部と、
前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存する復号部とを備え、
前記処理部は、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とする。
【発明の効果】
【0011】
本発明の一の態様によれば、データ処理装置において、処理部が、所定の方式で暗号化された鍵を外部装置から受信し、記憶部の第1記憶領域から復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存し、復号部が、前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存することにより、例えば、安全でメモリ使用効率のよいプログラム(前記平文データに相当)更新処理が可能なプログラム組込み装置(前記データ処理装置に相当)を提供することができる。
【発明を実施するための最良の形態】
【0012】
以下、本発明の実施の形態について、図を用いて説明する。なお、下記実施の形態により本発明が限定されるものではない。即ち、本発明は以下の記述に限定されるものではなく、本発明の要旨を逸脱しない範囲において適宜変更可能である。
【0013】
実施の形態1.
図1は、本実施の形態に係るシステムの構成例を示すブロック図である。
【0014】
図1において、1つのプログラムローダ装置101(プログラム書込み装置)に対し、複数のプログラム組込み装置201が複数存在する。プログラム組込み装置201はデータ処理装置の一例であり、プログラムローダ装置101は外部装置の一例である。プログラムローダ装置101は、各プログラム組込み装置201の工場製造時の書込み工程において、あるいは、製品出荷後のプログラム書換え時において、各プログラム組込み装置201のプログラム格納領域にプログラムをロードする。即ち、各プログラム組込み装置201は、プログラムローダ装置101からプログラムをダウンロードする。プログラムローダ装置101は、プログラム組込み装置201と1対1に有線あるいは無線で接続して、書込み処理を実行する。各プログラム組込み装置201には、ID(識別子)が割り当てられているものとする(図中、ID_1、ID_2、ID_3、・・・、ID_Kと示している)。
【0015】
図2は、本実施の形態に係るシステムの別の構成例を示すブロック図である。
【0016】
図1では、プログラムローダ装置101と各プログラム組込み装置201とを1対1に接続して、書込み処理を実行する構成を示したが、図2のように、LAN(Local・Area・Network)等のネットワーク(バス型ネットワークを図示しているが、その他の形態のネットワークであってもよい)にプログラムローダ装置101と複数のプログラム組込み装置201とを接続して、書込み処理を効率的に実行するという構成をとることも可能である。有線に限らず、無線ネットワークでも実現することが可能である。
【0017】
図3は、プログラム組込み装置201のハードウェア構成の一例を示す図である。
【0018】
いずれのIDを持つプログラム組込み装置201も同様の構成をとるものとする。図3において、CPU220(Central・Processing・Unit)は、フロー制御を行う汎用CPUである。CPU220は処理部の一例である。CPU220にはその製造の過程でCPUごとに固有のID224が付される。ID224はCPU220に内蔵される内部メモリ210に格納されている。ID224は各プログラム組込み装置201に割り当てられるID(ID_1、ID_2、ID_3、・・・、ID_K)として使用することができる。外部メモリユニット221は、プログラム及びデータ(プログラムローダ装置101からダウンロードされるものも含む)が格納される書換え可能な半不揮発性メモリ(フラッシュメモリ等)である。I/F(インタフェース)ユニット223は、外部とのインタフェースをつかさどる。具体的にはプログラムローダ装置101とのI/Fの他にも、プログラム組込み装置201のアプリケーションに応じて、例えばカードI/F、無線(RF)I/F等を含むこともある。CPU220、外部メモリユニット221、I/Fユニット223はシステムバス211を介して互いに通信する。図3ではCPU220、外部メモリユニット221、I/Fユニット223が、別々の素子のイメージで書かれているが、1チップマイコンあるいはSoC(System・on・a・Chip)チップのように1つのパッケージにこれらの構成要素が組み込まれていても構わない。
【0019】
次に、それぞれのプログラム組込み装置201に、プログラムローダ装置101から所定のアプリケーションプログラム(ダウンロードデータ)Pをダウンロードするプログラムダウンロード工程について説明する。
【0020】
図4は、プログラムローダ装置101及びプログラム組込み装置201の構成を示すブロック図である。
【0021】
図4において、プログラムローダ装置101は、記憶部102、鍵カプセル化部103、暗号化部104を備える。プログラム組込み装置201は、ID格納部202、記憶部203、処理部206、復号部208を備える。処理部206は、鍵デカプセル化部207を有する。記憶部203は、データ領域204、プログラム領域205を有する。データ領域204は第2記憶領域の一例であり、プログラム領域205は第1記憶領域の一例である。
【0022】
図5は、プログラムダウンロード工程の手順を示す図である。
【0023】
プログラムダウンロード工程の開始時には、プログラムローダ装置101の記憶部102にアプリケーションプログラムPが予め記憶されているものとする。また、プログラム組込み装置201のID格納部202にID224が予め格納されているものとする。
【0024】
プログラムローダ装置101の鍵カプセル化部103は、プログラム組込み装置201のID格納部202からID224を読み出す。ここでは、このID224がID_Kであるとする。プログラムローダ装置101の鍵カプセル化部103は、読み出したID224に対応する鍵Kを新たに生成して記憶部102に保存する。そして、プログラムローダ装置101の鍵カプセル化部103は、記憶部102に保存した鍵Kに対してプログラム組込み装置201の公開鍵を用いた鍵カプセル化処理を行い、カプセル化された鍵K´をプログラム組込み装置201へ送信する(S101)。ID224がID_1、ID_2、ID_3、・・・であれば、プログラムローダ装置101は、同様に、ID_1に対応する鍵1、ID_2に対応する鍵2、ID_3に対応する鍵3、・・・をカプセル化した鍵1´、鍵2´、鍵3´、・・・をプログラム組込み装置201へ送信することになる。そのために、プログラムローダ装置101は、例えば記憶部102に予め各プログラム組込み装置201の公開鍵を記憶しているものとする。
【0025】
プログラム組込み装置201の鍵デカプセル化部207は、カプセル化された鍵K´を受信し、受信した鍵K´に対してプログラム組込み装置201の秘密鍵を用いた鍵デカプセル化処理を実行して鍵Kを取得する。そして、プログラム組込み装置201の鍵デカプセル化部207は、取得した鍵Kを記憶部203のデータ領域204に保存する(S102)。プログラム組込み装置201は、例えば記憶部203のデータ領域204に予め自己の秘密鍵を記憶しているものとする。
【0026】
プログラムローダ装置101の暗号化部104は、記憶部102に記憶されているアプリケーションプログラムPに対して鍵Kを用いた暗号化処理を行い、暗号化されたアプリケーションプログラムP´をプログラム組込み装置201へ送信する(S103)。ここで、鍵Kはデータの暗号化処理にも復号処理にも使用できるものとする。即ち、鍵Kは共通鍵とする。
【0027】
プログラム組込み装置201の復号部208は、暗号化されたアプリケーションプログラムP´を受信し、受信したアプリケーションプログラムP´に対して鍵Kを用いた復号処理を実行してアプリケーションプログラムPを取得する(S104)。そして、プログラム組込み装置201の復号部208は、取得したアプリケーションプログラムPを記憶部203のプログラム領域205に保存する(S105)。
【0028】
図5に示すように、S101〜S102の処理は鍵を共有するためのプロセス(ステップ1)であり、S103〜S105の処理はステップ1で共有した鍵を用いて暗号化通信によるデータダウンロードを実行するプロセス(ステップ2)である。ステップ1で共有した鍵を使用する限り、ステップ1を繰り返し行う必要はない。つまり、既に鍵を共有していて、その鍵を更新する必要がなければ、ステップ2のみでプログラムのダウンロード(アプリケーション更新)を安全に行うことができる。
【0029】
図4に示したプログラム組込み装置201の構成において、ID格納部202は、図3に示した内部メモリ210に相当する。記憶部203は、図3に示した外部メモリユニット221に相当する。処理部206は、図3に示したCPU220に相当する。処理部206の鍵デカプセル化部207は、主にソフトウェアで実現される。具体的には、後述するように、鍵デカプセル化部207は、記憶部203のプログラム領域205に格納され、処理部206により読み出されて実行されるプログラムである(より正確にいえば、そのプログラムを実行したプロセスである)。復号部208は、ソフトウェア、ハードウェア、あるいは、ソフトウェアとハードウェアとの組み合わせで実現される。例えば、復号部208は、記憶部203の保護された領域(他のデータで上書き保存されない領域)等に格納され、処理部206により読み出されて実行されるプログラムであってもよいし、図3に示したシステムバス211に接続される暗号処理モジュール(回路)であってもよい。
【0030】
以下、プログラム組込み装置201の動作について説明する。
【0031】
図6は、プログラム組込み装置201による初期化手順を示すフローチャートである。
【0032】
初期化手順の開始時には、記憶部203のプログラム領域205に、鍵デカプセル化部207に相当する鍵デカプセル化プログラムQ(復号プログラムの一例)が予め保存されている。鍵デカプセル化プログラムQは、所定の方式(ここでは、公開鍵暗号方式とするが、共通鍵暗号方式等、他の方式でもよい)で暗号化された鍵を復号するプログラムである。一方、記憶部203のデータ領域204は、空き領域である。
【0033】
図6において、処理部206は、公開鍵暗号方式で(即ち、自己の公開鍵を用いて)暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S601)。鍵デカプセル化部207は、受信した鍵K´を復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S602)。
【0034】
図7は、プログラム組込み装置201によるプログラムダウンロード手順を示すフローチャートである。
【0035】
復号部208は、記憶部203のデータ領域204に鍵Kが保存されていれば(S701でYES)、プログラムローダ装置101に対し、アプリケーションプログラムPを鍵Kに対応する鍵(ここでは、鍵Kが共通鍵であるため、鍵Kに対応する鍵も鍵Kであるが、例えば鍵Kが公開鍵であれば、鍵Kに対応する鍵は秘密鍵となる)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化されたアプリケーションプログラムP´(暗号データの一例)をプログラムローダ装置101から受信する(S702)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵KによりアプリケーションプログラムP´を復号してアプリケーションプログラムP(平文データの一例)を取得する(S703)。復号部208は、取得したアプリケーションプログラムPを記憶部203のプログラム領域205の鍵デカプセル化プログラムQが保存された領域に上書き保存する(S704)。このとき、アプリケーションプログラムPのサイズが鍵デカプセル化プログラムQのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又は鍵デカプセル化プログラムQ以外のデータを記憶している領域)が必要であることはいうまでもない。記憶部203のプログラム領域205に保存されたアプリケーションプログラムPは、処理部206によって読み出され、実行され、所定の処理を行う。即ち、アプリケーションプログラムPは処理部206によって所定の処理を行うために用いられる。
【0036】
一方、S701において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S701でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S705)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S706)。その後、S701に戻る。
【0037】
図8は、プログラム組込み装置201による初期化手順及びプログラムダウンロード手順での記憶部203内のデータ遷移を示す図である。
【0038】
図6に示した初期化手順の開始時には、プログラム領域205の領域Aに、鍵デカプセル化部207に相当する鍵デカプセル化プログラムQ(図8の「鍵デカプセル」)が予め保存されている。また、プログラム領域205の領域Bに、復号部208に相当するプログラム(図8の「復号」)が予め保存されている。また、プログラム領域205の領域Cに、プログラムローダ装置101からデータを受信するためのプログラム(図8の「ダウンロード」)が予め保存されている。一方、データ領域204の領域Dは、空き領域である(P101)。データ領域204の領域D以外の領域は、空き領域であってもよいし、何らかのデータ(例えば、プログラム組込み装置201の秘密鍵)を保存していてもよい。
【0039】
図6に示した初期化手順において、プログラム組込み装置201では、鍵デカプセル化処理により、鍵K(図8の「鍵」)が生成され、データ領域204の領域Dに出力される(P102)。鍵Kは、アプリケーションプログラムPをダウンロードする際に用いるものであるので、ダウンロード処理を行う前に生成されている必要がある。鍵Kが生成されれば、鍵デカプセル化プログラムQは不要になるため、図7に示したプログラムダウンロード手順において、アプリケーションプログラムP(図8の「アプリケーション」)は鍵デカプセル化プログラムQが格納されていた領域Aに上書き保存される(P103)。
【0040】
図9は、プログラム組込み装置201によるプログラム更新手順での記憶部203内のデータ遷移を示す図である。
【0041】
プログラム更新手順は、図7に示したプログラムダウンロード手順と同様である。復号部208は、記憶部203のデータ領域204に鍵Kが保存されていれば(S701でYES)、プログラムローダ装置101に対し、新たなアプリケーションプログラムPnを鍵Kに対応する鍵(ここでは、鍵Kが共通鍵であるため、鍵Kに対応する鍵も鍵Kであるが、例えば鍵Kが公開鍵であれば、鍵Kに対応する鍵は秘密鍵となる)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された新たなアプリケーションプログラムPn´(暗号データの一例)をプログラムローダ装置101から受信する(S702)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵KによりアプリケーションプログラムPn´を復号して新たなアプリケーションプログラムPn(平文データの一例)を取得する(S703)。復号部208は、取得したアプリケーションプログラムPnを記憶部203のプログラム領域205の古いアプリケーションプログラムPが保存された領域に上書き保存する(S704)。このとき、新たなアプリケーションプログラムPnのサイズが古いアプリケーションプログラムPのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又は古いアプリケーションプログラムP以外のデータを記憶している領域)が必要であることはいうまでもない。記憶部203のプログラム領域205に保存された新たなアプリケーションプログラムPnは、処理部206によって読み出され、実行され、所定の処理を行う。即ち、新たなアプリケーションプログラムPnは処理部206によって所定の処理を行うために用いられる。
【0042】
プログラム更新手順の開始時には、記憶部203内は図8のP103の状態になっている。アプリケーションプログラムPの更新が必要な場合、プログラム更新手順において、プログラム組込み装置201では、鍵Kが生成済であれば、鍵Kを用いてダウンロード処理が行われ、古いアプリケーションプログラムPが格納されていた領域Aに、新しいアプリケーションプログラムPn(図9の「更新されたアプリケーション」)が上書き保存される(P104)。
【0043】
図10は、プログラム組込み装置201による鍵更新手順を示すフローチャートである。
【0044】
復号部208は、アプリケーションプログラムPを記憶部203のプログラム領域205に保存した後(図7のS704)、記憶部203のデータ領域204に鍵Kが保存されており(S801でYES)、記憶部203のプログラム領域205にアプリケーションプログラムPが保存されていれば(S802でYES)、プログラムローダ装置101に対し、鍵デカプセル化プログラムQを鍵Kに対応する鍵(前述したように、ここでは、鍵Kである)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された鍵デカプセル化プログラムQ´(暗号データの一例)をプログラムローダ装置101から受信する(S803)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵Kにより鍵デカプセル化プログラムQ´を復号して鍵デカプセル化プログラムQを取得する(S804)。復号部208は、取得した鍵デカプセル化プログラムQを記憶部203のプログラム領域205のアプリケーションプログラムPが保存された領域に上書き保存する(S805)。このとき、鍵デカプセル化プログラムQのサイズがアプリケーションプログラムPのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又はアプリケーションプログラムP以外のデータを記憶している領域)が必要であることはいうまでもない。ステップS805の後、処理部206は、公開鍵暗号方式で(即ち、自己の公開鍵を用いて)暗号化された新たな鍵Kn´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S806)。鍵デカプセル化部207は、受信した鍵Kn´を復号し、復号した新たな鍵Knを記憶部203のデータ領域204に保存する(S807)。即ち、鍵デカプセル化部207は、新たな鍵Knで記憶部203のデータ領域204に保存されている古い鍵Kを更新する。
【0045】
一方、S801において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S801でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S808)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S809)。その後、S801に戻る。また、S802において、記憶部203のプログラム領域205にアプリケーションプログラムPが保存されていなければ(S802でNO)、S806に進む。
【0046】
図11は、プログラム組込み装置201による鍵更新手順での記憶部203内のデータ遷移を示す図である。
【0047】
図10に示した鍵更新手順の開始時には、記憶部203内は図8のP103の状態になっている。鍵の更新が必要な場合には、図10に示した鍵更新手順において、プログラム組込み装置201では、アプリケーションプログラムPをダウンロードするのと同じ要領で、鍵デカプセル化プログラムQ(図11の「鍵デカプセル」)がダウンロードされ、アプリケーションプログラムPが格納されていた領域Aに上書き保存される(P105)。その後、新しい鍵Kn(図11の「更新された鍵」)の導出が行われ、データ領域204の領域Dの鍵Kが更新される(P106)。
【0048】
図12は、プログラム組込み装置201による別の鍵更新手順を示すフローチャートである。
【0049】
復号部208は、アプリケーションプログラムPを記憶部203のプログラム領域205に保存した後(図7のS704)、記憶部203のデータ領域204に鍵Kが保存されていれば(S901でYES)、プログラムローダ装置101に対し、新たな鍵Knを鍵Kに対応する鍵(前述したように、ここでは、鍵Kである)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された新たな鍵Kn´(暗号データの一例)をプログラムローダ装置101から受信する(S902)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵Kにより鍵Kn´を復号して新たな鍵Kn(平文データの一例)を取得し、取得した新たな鍵Knを記憶部203のデータ領域204に保存する(S903)。即ち、鍵デカプセル化部207は、新たな鍵Knで記憶部203のデータ領域204に保存されている古い鍵Kを更新する。
【0050】
一方、S901において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S901でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S904)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S905)。その後、S901に戻る。
【0051】
図13は、プログラム組込み装置201による別の鍵更新手順での記憶部203内のデータ遷移を示す図である。
【0052】
図12に示した鍵更新手順の開始時には、記憶部203内は図8のP103の状態になっている。鍵の更新が必要な場合には、図12に示した鍵更新手順において、プログラム組込み装置201では、古い鍵Kを基にして復号処理を行って新しい鍵Kn(図13の「更新された鍵」)が生成され、データ領域204の領域Dの鍵Kが更新される(P107)。
【0053】
上記のように、図12に示した鍵更新手順では、図10に示した鍵更新手順と異なり、鍵デカプセル化プログラムQの復帰を行わなくて済む。
【0054】
以上説明したように、本実施の形態に係るデータ処理装置は、
プログラムを更新するためにプログラムダウンロード機能を備えた装置であり、ダウンロードに用いる鍵を生成する鍵共有プロセス(図5のステップ1)と、暗号化通信によるダウンロードを行うダウンロードプロセス(図5のステップ2)とを実行することを特徴とする。
【0055】
前記データ処理装置は、
前記鍵共有プロセスによって、公開鍵暗号の仕組みを利用して、各装置が持つ固有のID情報を用いて、装置それぞれで異なる鍵を持つことが可能となることを特徴とする。
【0056】
前記データ処理装置は、
前記鍵共有プロセスの完了後には、前記鍵共有プロセスを実行するプログラムを消去するか、あるいは、外部からダウンロードしたアプリケーションプログラムで上書きすることを特徴とする。
【0057】
前記データ処理装置は、
前記鍵共有プロセスを実行して、前記ダウンロードプロセスで使用するのに有効な鍵を既に保持していれば、アプリケーションプログラムを動的に変更できることを特徴とする。
【0058】
前記データ処理装置は、
前記ダウンロードプロセスで使用する有効な鍵を保持している限り、前記鍵共有プロセスを実行する必要がないことを特徴とする。
【0059】
前記データ処理装置は、
前記鍵共有プロセスを実行するプログラムを、アプリケーションプログラムのダウンロードによって上書き消去した後に、アプリケーションプログラムのダウンロードと同様に鍵共有プロセスを実行するプログラムをダウンロードすることによって、再び鍵共有プロセスを復帰させて、鍵の更新を行うことができることを特徴とする。
【0060】
前記データ処理装置は、
鍵を更新するときに、ダウンロードデータを復号するときに用いる復号部を利用することもまた可能であることを特徴とする。
【0061】
上記のように、本実施の形態では、メモリ容量が少ない組込み環境において、プログラム更新を行うときに、初期状態において鍵デカプセル化モジュールのみをプログラム領域に展開し、鍵デカプセル化処理を実行して鍵を得た後に、その鍵を使用したセキュアダウンロード機能を用いて、鍵デカプセル化モジュールが配置されていた領域にアプリケーションプログラムを上書きするので、必要なプログラムサイズ(メモリ総容量)を大幅に小さくすることができる。
【0062】
また、本実施の形態では、鍵デカプセル化モジュールの消失後に、再び鍵デカプセル化処理を実行する必要がある場合には、ダウンロード機能を用いて初期状態のプログラム(鍵デカプセル化プログラム)をアプリケーションプログラムの1つとして、同様にダウンロードできるので、鍵デカプセル化機能を復帰させることが可能である。復帰を行う前に、その機器上では鍵デカプセル化処理は少なくとも一度実行されているので、既に生成されてメモリに保存されている鍵を用いてダウンロードを実行する。ダウンロード機能により、必要に応じて、プログラムを動的に変更できる。
【0063】
本実施の形態では、初回の鍵デカプセル化処理で導出された鍵を用いた暗号通信によって鍵の更新を行ってもよい。そうすることにより、同一鍵の使用の繰り返しを防ぐとともに簡易に鍵更新を実現することができる。
【0064】
本実施の形態では、アプリケーションを動的に変更可能なことから、ハードウェア資源を有効利用することができる。
【0065】
以上、メモリ容量が少ないプログラム組込み装置において、プログラム更新を安全に行うことができる方法を説明した。
【0066】
また、メモリ容量が少ないプログラム組込み装置において、例えばIDベース暗号等の公開鍵暗号アルゴリズムを用いて、個々に持つIDを利用して鍵を導出する方法を説明した。
【0067】
また、メモリ容量が少ないプログラム組込み装置において、鍵デカプセル化処理後に、鍵デカプセル化プログラムが格納された領域にアプリケーションプログラムをダウンロードして上書きすることができる方法を説明した。
【0068】
また、メモリ容量が少ないプログラム組込み装置において、容易に鍵を更新することができる方法を説明した。
【0069】
また、メモリ容量が少ないプログラム組込み装置において、鍵を更新する際に、消去した鍵デカプセル化プログラムを復帰することができる方法を説明した。
【図面の簡単な説明】
【0070】
【図1】実施の形態1に係るシステムの構成例を示すブロック図である。
【図2】実施の形態1に係るシステムの別の構成例を示すブロック図である。
【図3】実施の形態1に係るデータ処理装置のハードウェア構成の一例を示す図である。
【図4】実施の形態1に係る外部装置及びデータ処理装置の構成を示すブロック図である。
【図5】実施の形態1に係るプログラムダウンロード工程の手順を示す図である。
【図6】実施の形態1に係るデータ処理装置による初期化手順を示すフローチャートである。
【図7】実施の形態1に係るデータ処理装置によるプログラムダウンロード手順を示すフローチャートである。
【図8】実施の形態1に係るデータ処理装置による初期化手順及びプログラムダウンロード手順での記憶部内のデータ遷移を示す図である。
【図9】実施の形態1に係るデータ処理装置によるプログラム更新手順での記憶部内のデータ遷移を示す図である。
【図10】実施の形態1に係るデータ処理装置による鍵更新手順を示すフローチャートである。
【図11】実施の形態1に係るデータ処理装置による鍵更新手順での記憶部内のデータ遷移を示す図である。
【図12】実施の形態1に係るデータ処理装置による別の鍵更新手順を示すフローチャートである。
【図13】実施の形態1に係るデータ処理装置による別の鍵更新手順での記憶部内のデータ遷移を示す図である。
【符号の説明】
【0071】
101 プログラムローダ装置、102 記憶部、103 鍵カプセル化部、104 暗号化部、201 プログラム組込み装置、202 ID格納部、203 記憶部、204 データ領域、205 プログラム領域、206 処理部、207 鍵デカプセル化部、208 復号部、210 内部メモリ、211 システムバス、220 CPU、221 外部メモリユニット、223 I/Fユニット、224 ID。
【技術分野】
【0001】
本発明は、データ処理装置及びデータ処理方法に関するものである。本発明は、特に、メモリ容量が小さい組込み環境(組込みマイコン)においてプログラム更新(主に、オンデマンドプログラム更新)を安全に行う方式に関するものである。
【背景技術】
【0002】
従来のプログラム組込み装置では、限られたメモリ容量を効率的に利用するために、データ格納領域に更新データの格納領域を確保しプログラム更新を行うという処理方法がある(例えば、特許文献1参照)。
【0003】
また、従来のプログラム組込み装置では、復号装置又は認証装置を備えて内蔵されているプログラムやデータの安全な更新を実現するための方法がある(例えば、特許文献2参照)。
【特許文献1】特開2005−332301号公報
【特許文献2】特開2004−259077号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
従来のプログラム更新機能を備えたプログラム組込み装置では、更新データを装置へダウンロードする際に、その更新データが暗号化されていないために、ダウンロード処理中にデータを盗聴されたり、悪意のあるプログラムにすり替えられたり、という危険性があった。
【0005】
また、従来のプログラム更新機能を備えたプログラム組込み装置では、その更新データが暗号化されていても、全ての装置において同一の秘密鍵であるというケースが多く、セキュリティ上の課題(脆弱性)があった。
【0006】
従来のプログラム更新機能を備えたプログラム組込み装置では、全ての装置において同一の秘密鍵でないようにするために、それぞれに個別鍵を持たせようとすると、コストがかかる上に管理が煩雑になるという課題があった。
【0007】
また、従来のプログラム更新機能を備えたプログラム組込み装置では、全ての装置において同一の秘密鍵でないようにするため、あるいは後々に鍵更新ができるようにするために、ID(識別子)ベース暗号等の公開鍵暗号を用いようとすると、組込み環境においてはプログラムサイズが大きいことから実装することが困難であった。
【0008】
従来のプログラム組込み装置では、鍵更新ができない、あるいは容易に実施できないという課題があった。
【0009】
本発明は、より高いセキュリティを備えた効率のよいシステムを提供することを目的とする。本発明は、そのために、例えば、メモリ容量が少ない組込み環境において、プログラム更新を安全に行う方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明の一の態様に係るデータ処理装置は、
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部と、
前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存する処理部と、
前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存する復号部とを備え、
前記処理部は、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とする。
【発明の効果】
【0011】
本発明の一の態様によれば、データ処理装置において、処理部が、所定の方式で暗号化された鍵を外部装置から受信し、記憶部の第1記憶領域から復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存し、復号部が、前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存することにより、例えば、安全でメモリ使用効率のよいプログラム(前記平文データに相当)更新処理が可能なプログラム組込み装置(前記データ処理装置に相当)を提供することができる。
【発明を実施するための最良の形態】
【0012】
以下、本発明の実施の形態について、図を用いて説明する。なお、下記実施の形態により本発明が限定されるものではない。即ち、本発明は以下の記述に限定されるものではなく、本発明の要旨を逸脱しない範囲において適宜変更可能である。
【0013】
実施の形態1.
図1は、本実施の形態に係るシステムの構成例を示すブロック図である。
【0014】
図1において、1つのプログラムローダ装置101(プログラム書込み装置)に対し、複数のプログラム組込み装置201が複数存在する。プログラム組込み装置201はデータ処理装置の一例であり、プログラムローダ装置101は外部装置の一例である。プログラムローダ装置101は、各プログラム組込み装置201の工場製造時の書込み工程において、あるいは、製品出荷後のプログラム書換え時において、各プログラム組込み装置201のプログラム格納領域にプログラムをロードする。即ち、各プログラム組込み装置201は、プログラムローダ装置101からプログラムをダウンロードする。プログラムローダ装置101は、プログラム組込み装置201と1対1に有線あるいは無線で接続して、書込み処理を実行する。各プログラム組込み装置201には、ID(識別子)が割り当てられているものとする(図中、ID_1、ID_2、ID_3、・・・、ID_Kと示している)。
【0015】
図2は、本実施の形態に係るシステムの別の構成例を示すブロック図である。
【0016】
図1では、プログラムローダ装置101と各プログラム組込み装置201とを1対1に接続して、書込み処理を実行する構成を示したが、図2のように、LAN(Local・Area・Network)等のネットワーク(バス型ネットワークを図示しているが、その他の形態のネットワークであってもよい)にプログラムローダ装置101と複数のプログラム組込み装置201とを接続して、書込み処理を効率的に実行するという構成をとることも可能である。有線に限らず、無線ネットワークでも実現することが可能である。
【0017】
図3は、プログラム組込み装置201のハードウェア構成の一例を示す図である。
【0018】
いずれのIDを持つプログラム組込み装置201も同様の構成をとるものとする。図3において、CPU220(Central・Processing・Unit)は、フロー制御を行う汎用CPUである。CPU220は処理部の一例である。CPU220にはその製造の過程でCPUごとに固有のID224が付される。ID224はCPU220に内蔵される内部メモリ210に格納されている。ID224は各プログラム組込み装置201に割り当てられるID(ID_1、ID_2、ID_3、・・・、ID_K)として使用することができる。外部メモリユニット221は、プログラム及びデータ(プログラムローダ装置101からダウンロードされるものも含む)が格納される書換え可能な半不揮発性メモリ(フラッシュメモリ等)である。I/F(インタフェース)ユニット223は、外部とのインタフェースをつかさどる。具体的にはプログラムローダ装置101とのI/Fの他にも、プログラム組込み装置201のアプリケーションに応じて、例えばカードI/F、無線(RF)I/F等を含むこともある。CPU220、外部メモリユニット221、I/Fユニット223はシステムバス211を介して互いに通信する。図3ではCPU220、外部メモリユニット221、I/Fユニット223が、別々の素子のイメージで書かれているが、1チップマイコンあるいはSoC(System・on・a・Chip)チップのように1つのパッケージにこれらの構成要素が組み込まれていても構わない。
【0019】
次に、それぞれのプログラム組込み装置201に、プログラムローダ装置101から所定のアプリケーションプログラム(ダウンロードデータ)Pをダウンロードするプログラムダウンロード工程について説明する。
【0020】
図4は、プログラムローダ装置101及びプログラム組込み装置201の構成を示すブロック図である。
【0021】
図4において、プログラムローダ装置101は、記憶部102、鍵カプセル化部103、暗号化部104を備える。プログラム組込み装置201は、ID格納部202、記憶部203、処理部206、復号部208を備える。処理部206は、鍵デカプセル化部207を有する。記憶部203は、データ領域204、プログラム領域205を有する。データ領域204は第2記憶領域の一例であり、プログラム領域205は第1記憶領域の一例である。
【0022】
図5は、プログラムダウンロード工程の手順を示す図である。
【0023】
プログラムダウンロード工程の開始時には、プログラムローダ装置101の記憶部102にアプリケーションプログラムPが予め記憶されているものとする。また、プログラム組込み装置201のID格納部202にID224が予め格納されているものとする。
【0024】
プログラムローダ装置101の鍵カプセル化部103は、プログラム組込み装置201のID格納部202からID224を読み出す。ここでは、このID224がID_Kであるとする。プログラムローダ装置101の鍵カプセル化部103は、読み出したID224に対応する鍵Kを新たに生成して記憶部102に保存する。そして、プログラムローダ装置101の鍵カプセル化部103は、記憶部102に保存した鍵Kに対してプログラム組込み装置201の公開鍵を用いた鍵カプセル化処理を行い、カプセル化された鍵K´をプログラム組込み装置201へ送信する(S101)。ID224がID_1、ID_2、ID_3、・・・であれば、プログラムローダ装置101は、同様に、ID_1に対応する鍵1、ID_2に対応する鍵2、ID_3に対応する鍵3、・・・をカプセル化した鍵1´、鍵2´、鍵3´、・・・をプログラム組込み装置201へ送信することになる。そのために、プログラムローダ装置101は、例えば記憶部102に予め各プログラム組込み装置201の公開鍵を記憶しているものとする。
【0025】
プログラム組込み装置201の鍵デカプセル化部207は、カプセル化された鍵K´を受信し、受信した鍵K´に対してプログラム組込み装置201の秘密鍵を用いた鍵デカプセル化処理を実行して鍵Kを取得する。そして、プログラム組込み装置201の鍵デカプセル化部207は、取得した鍵Kを記憶部203のデータ領域204に保存する(S102)。プログラム組込み装置201は、例えば記憶部203のデータ領域204に予め自己の秘密鍵を記憶しているものとする。
【0026】
プログラムローダ装置101の暗号化部104は、記憶部102に記憶されているアプリケーションプログラムPに対して鍵Kを用いた暗号化処理を行い、暗号化されたアプリケーションプログラムP´をプログラム組込み装置201へ送信する(S103)。ここで、鍵Kはデータの暗号化処理にも復号処理にも使用できるものとする。即ち、鍵Kは共通鍵とする。
【0027】
プログラム組込み装置201の復号部208は、暗号化されたアプリケーションプログラムP´を受信し、受信したアプリケーションプログラムP´に対して鍵Kを用いた復号処理を実行してアプリケーションプログラムPを取得する(S104)。そして、プログラム組込み装置201の復号部208は、取得したアプリケーションプログラムPを記憶部203のプログラム領域205に保存する(S105)。
【0028】
図5に示すように、S101〜S102の処理は鍵を共有するためのプロセス(ステップ1)であり、S103〜S105の処理はステップ1で共有した鍵を用いて暗号化通信によるデータダウンロードを実行するプロセス(ステップ2)である。ステップ1で共有した鍵を使用する限り、ステップ1を繰り返し行う必要はない。つまり、既に鍵を共有していて、その鍵を更新する必要がなければ、ステップ2のみでプログラムのダウンロード(アプリケーション更新)を安全に行うことができる。
【0029】
図4に示したプログラム組込み装置201の構成において、ID格納部202は、図3に示した内部メモリ210に相当する。記憶部203は、図3に示した外部メモリユニット221に相当する。処理部206は、図3に示したCPU220に相当する。処理部206の鍵デカプセル化部207は、主にソフトウェアで実現される。具体的には、後述するように、鍵デカプセル化部207は、記憶部203のプログラム領域205に格納され、処理部206により読み出されて実行されるプログラムである(より正確にいえば、そのプログラムを実行したプロセスである)。復号部208は、ソフトウェア、ハードウェア、あるいは、ソフトウェアとハードウェアとの組み合わせで実現される。例えば、復号部208は、記憶部203の保護された領域(他のデータで上書き保存されない領域)等に格納され、処理部206により読み出されて実行されるプログラムであってもよいし、図3に示したシステムバス211に接続される暗号処理モジュール(回路)であってもよい。
【0030】
以下、プログラム組込み装置201の動作について説明する。
【0031】
図6は、プログラム組込み装置201による初期化手順を示すフローチャートである。
【0032】
初期化手順の開始時には、記憶部203のプログラム領域205に、鍵デカプセル化部207に相当する鍵デカプセル化プログラムQ(復号プログラムの一例)が予め保存されている。鍵デカプセル化プログラムQは、所定の方式(ここでは、公開鍵暗号方式とするが、共通鍵暗号方式等、他の方式でもよい)で暗号化された鍵を復号するプログラムである。一方、記憶部203のデータ領域204は、空き領域である。
【0033】
図6において、処理部206は、公開鍵暗号方式で(即ち、自己の公開鍵を用いて)暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S601)。鍵デカプセル化部207は、受信した鍵K´を復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S602)。
【0034】
図7は、プログラム組込み装置201によるプログラムダウンロード手順を示すフローチャートである。
【0035】
復号部208は、記憶部203のデータ領域204に鍵Kが保存されていれば(S701でYES)、プログラムローダ装置101に対し、アプリケーションプログラムPを鍵Kに対応する鍵(ここでは、鍵Kが共通鍵であるため、鍵Kに対応する鍵も鍵Kであるが、例えば鍵Kが公開鍵であれば、鍵Kに対応する鍵は秘密鍵となる)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化されたアプリケーションプログラムP´(暗号データの一例)をプログラムローダ装置101から受信する(S702)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵KによりアプリケーションプログラムP´を復号してアプリケーションプログラムP(平文データの一例)を取得する(S703)。復号部208は、取得したアプリケーションプログラムPを記憶部203のプログラム領域205の鍵デカプセル化プログラムQが保存された領域に上書き保存する(S704)。このとき、アプリケーションプログラムPのサイズが鍵デカプセル化プログラムQのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又は鍵デカプセル化プログラムQ以外のデータを記憶している領域)が必要であることはいうまでもない。記憶部203のプログラム領域205に保存されたアプリケーションプログラムPは、処理部206によって読み出され、実行され、所定の処理を行う。即ち、アプリケーションプログラムPは処理部206によって所定の処理を行うために用いられる。
【0036】
一方、S701において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S701でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S705)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S706)。その後、S701に戻る。
【0037】
図8は、プログラム組込み装置201による初期化手順及びプログラムダウンロード手順での記憶部203内のデータ遷移を示す図である。
【0038】
図6に示した初期化手順の開始時には、プログラム領域205の領域Aに、鍵デカプセル化部207に相当する鍵デカプセル化プログラムQ(図8の「鍵デカプセル」)が予め保存されている。また、プログラム領域205の領域Bに、復号部208に相当するプログラム(図8の「復号」)が予め保存されている。また、プログラム領域205の領域Cに、プログラムローダ装置101からデータを受信するためのプログラム(図8の「ダウンロード」)が予め保存されている。一方、データ領域204の領域Dは、空き領域である(P101)。データ領域204の領域D以外の領域は、空き領域であってもよいし、何らかのデータ(例えば、プログラム組込み装置201の秘密鍵)を保存していてもよい。
【0039】
図6に示した初期化手順において、プログラム組込み装置201では、鍵デカプセル化処理により、鍵K(図8の「鍵」)が生成され、データ領域204の領域Dに出力される(P102)。鍵Kは、アプリケーションプログラムPをダウンロードする際に用いるものであるので、ダウンロード処理を行う前に生成されている必要がある。鍵Kが生成されれば、鍵デカプセル化プログラムQは不要になるため、図7に示したプログラムダウンロード手順において、アプリケーションプログラムP(図8の「アプリケーション」)は鍵デカプセル化プログラムQが格納されていた領域Aに上書き保存される(P103)。
【0040】
図9は、プログラム組込み装置201によるプログラム更新手順での記憶部203内のデータ遷移を示す図である。
【0041】
プログラム更新手順は、図7に示したプログラムダウンロード手順と同様である。復号部208は、記憶部203のデータ領域204に鍵Kが保存されていれば(S701でYES)、プログラムローダ装置101に対し、新たなアプリケーションプログラムPnを鍵Kに対応する鍵(ここでは、鍵Kが共通鍵であるため、鍵Kに対応する鍵も鍵Kであるが、例えば鍵Kが公開鍵であれば、鍵Kに対応する鍵は秘密鍵となる)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された新たなアプリケーションプログラムPn´(暗号データの一例)をプログラムローダ装置101から受信する(S702)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵KによりアプリケーションプログラムPn´を復号して新たなアプリケーションプログラムPn(平文データの一例)を取得する(S703)。復号部208は、取得したアプリケーションプログラムPnを記憶部203のプログラム領域205の古いアプリケーションプログラムPが保存された領域に上書き保存する(S704)。このとき、新たなアプリケーションプログラムPnのサイズが古いアプリケーションプログラムPのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又は古いアプリケーションプログラムP以外のデータを記憶している領域)が必要であることはいうまでもない。記憶部203のプログラム領域205に保存された新たなアプリケーションプログラムPnは、処理部206によって読み出され、実行され、所定の処理を行う。即ち、新たなアプリケーションプログラムPnは処理部206によって所定の処理を行うために用いられる。
【0042】
プログラム更新手順の開始時には、記憶部203内は図8のP103の状態になっている。アプリケーションプログラムPの更新が必要な場合、プログラム更新手順において、プログラム組込み装置201では、鍵Kが生成済であれば、鍵Kを用いてダウンロード処理が行われ、古いアプリケーションプログラムPが格納されていた領域Aに、新しいアプリケーションプログラムPn(図9の「更新されたアプリケーション」)が上書き保存される(P104)。
【0043】
図10は、プログラム組込み装置201による鍵更新手順を示すフローチャートである。
【0044】
復号部208は、アプリケーションプログラムPを記憶部203のプログラム領域205に保存した後(図7のS704)、記憶部203のデータ領域204に鍵Kが保存されており(S801でYES)、記憶部203のプログラム領域205にアプリケーションプログラムPが保存されていれば(S802でYES)、プログラムローダ装置101に対し、鍵デカプセル化プログラムQを鍵Kに対応する鍵(前述したように、ここでは、鍵Kである)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された鍵デカプセル化プログラムQ´(暗号データの一例)をプログラムローダ装置101から受信する(S803)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵Kにより鍵デカプセル化プログラムQ´を復号して鍵デカプセル化プログラムQを取得する(S804)。復号部208は、取得した鍵デカプセル化プログラムQを記憶部203のプログラム領域205のアプリケーションプログラムPが保存された領域に上書き保存する(S805)。このとき、鍵デカプセル化プログラムQのサイズがアプリケーションプログラムPのサイズより大きければ、記憶部203のプログラム領域205に、その分の空き領域(又はアプリケーションプログラムP以外のデータを記憶している領域)が必要であることはいうまでもない。ステップS805の後、処理部206は、公開鍵暗号方式で(即ち、自己の公開鍵を用いて)暗号化された新たな鍵Kn´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S806)。鍵デカプセル化部207は、受信した鍵Kn´を復号し、復号した新たな鍵Knを記憶部203のデータ領域204に保存する(S807)。即ち、鍵デカプセル化部207は、新たな鍵Knで記憶部203のデータ領域204に保存されている古い鍵Kを更新する。
【0045】
一方、S801において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S801でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S808)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S809)。その後、S801に戻る。また、S802において、記憶部203のプログラム領域205にアプリケーションプログラムPが保存されていなければ(S802でNO)、S806に進む。
【0046】
図11は、プログラム組込み装置201による鍵更新手順での記憶部203内のデータ遷移を示す図である。
【0047】
図10に示した鍵更新手順の開始時には、記憶部203内は図8のP103の状態になっている。鍵の更新が必要な場合には、図10に示した鍵更新手順において、プログラム組込み装置201では、アプリケーションプログラムPをダウンロードするのと同じ要領で、鍵デカプセル化プログラムQ(図11の「鍵デカプセル」)がダウンロードされ、アプリケーションプログラムPが格納されていた領域Aに上書き保存される(P105)。その後、新しい鍵Kn(図11の「更新された鍵」)の導出が行われ、データ領域204の領域Dの鍵Kが更新される(P106)。
【0048】
図12は、プログラム組込み装置201による別の鍵更新手順を示すフローチャートである。
【0049】
復号部208は、アプリケーションプログラムPを記憶部203のプログラム領域205に保存した後(図7のS704)、記憶部203のデータ領域204に鍵Kが保存されていれば(S901でYES)、プログラムローダ装置101に対し、新たな鍵Knを鍵Kに対応する鍵(前述したように、ここでは、鍵Kである)で暗号化して送信することを要求する。これにより、復号部208は、鍵Kで暗号化された新たな鍵Kn´(暗号データの一例)をプログラムローダ装置101から受信する(S902)。そして、復号部208は、記憶部203のデータ領域204に保存された鍵Kにより鍵Kn´を復号して新たな鍵Kn(平文データの一例)を取得し、取得した新たな鍵Knを記憶部203のデータ領域204に保存する(S903)。即ち、鍵デカプセル化部207は、新たな鍵Knで記憶部203のデータ領域204に保存されている古い鍵Kを更新する。
【0050】
一方、S901において、記憶部203のデータ領域204に鍵Kが保存されていなければ(S901でNO)、処理部206が、プログラムローダ装置101に対し、鍵Kを公開鍵暗号方式で暗号化して送信することを要求する。これにより、処理部206は、プログラム組込み装置201の公開鍵で暗号化された鍵K´をプログラムローダ装置101から受信する。そして、処理部206は、記憶部203のプログラム領域205から鍵デカプセル化プログラムQを読み出して実行することにより鍵デカプセル化部207を動作させる(S904)。鍵デカプセル化部207は、受信した鍵K´をプログラム組込み装置201の秘密鍵で復号し、復号した鍵Kを記憶部203のデータ領域204に保存する(S905)。その後、S901に戻る。
【0051】
図13は、プログラム組込み装置201による別の鍵更新手順での記憶部203内のデータ遷移を示す図である。
【0052】
図12に示した鍵更新手順の開始時には、記憶部203内は図8のP103の状態になっている。鍵の更新が必要な場合には、図12に示した鍵更新手順において、プログラム組込み装置201では、古い鍵Kを基にして復号処理を行って新しい鍵Kn(図13の「更新された鍵」)が生成され、データ領域204の領域Dの鍵Kが更新される(P107)。
【0053】
上記のように、図12に示した鍵更新手順では、図10に示した鍵更新手順と異なり、鍵デカプセル化プログラムQの復帰を行わなくて済む。
【0054】
以上説明したように、本実施の形態に係るデータ処理装置は、
プログラムを更新するためにプログラムダウンロード機能を備えた装置であり、ダウンロードに用いる鍵を生成する鍵共有プロセス(図5のステップ1)と、暗号化通信によるダウンロードを行うダウンロードプロセス(図5のステップ2)とを実行することを特徴とする。
【0055】
前記データ処理装置は、
前記鍵共有プロセスによって、公開鍵暗号の仕組みを利用して、各装置が持つ固有のID情報を用いて、装置それぞれで異なる鍵を持つことが可能となることを特徴とする。
【0056】
前記データ処理装置は、
前記鍵共有プロセスの完了後には、前記鍵共有プロセスを実行するプログラムを消去するか、あるいは、外部からダウンロードしたアプリケーションプログラムで上書きすることを特徴とする。
【0057】
前記データ処理装置は、
前記鍵共有プロセスを実行して、前記ダウンロードプロセスで使用するのに有効な鍵を既に保持していれば、アプリケーションプログラムを動的に変更できることを特徴とする。
【0058】
前記データ処理装置は、
前記ダウンロードプロセスで使用する有効な鍵を保持している限り、前記鍵共有プロセスを実行する必要がないことを特徴とする。
【0059】
前記データ処理装置は、
前記鍵共有プロセスを実行するプログラムを、アプリケーションプログラムのダウンロードによって上書き消去した後に、アプリケーションプログラムのダウンロードと同様に鍵共有プロセスを実行するプログラムをダウンロードすることによって、再び鍵共有プロセスを復帰させて、鍵の更新を行うことができることを特徴とする。
【0060】
前記データ処理装置は、
鍵を更新するときに、ダウンロードデータを復号するときに用いる復号部を利用することもまた可能であることを特徴とする。
【0061】
上記のように、本実施の形態では、メモリ容量が少ない組込み環境において、プログラム更新を行うときに、初期状態において鍵デカプセル化モジュールのみをプログラム領域に展開し、鍵デカプセル化処理を実行して鍵を得た後に、その鍵を使用したセキュアダウンロード機能を用いて、鍵デカプセル化モジュールが配置されていた領域にアプリケーションプログラムを上書きするので、必要なプログラムサイズ(メモリ総容量)を大幅に小さくすることができる。
【0062】
また、本実施の形態では、鍵デカプセル化モジュールの消失後に、再び鍵デカプセル化処理を実行する必要がある場合には、ダウンロード機能を用いて初期状態のプログラム(鍵デカプセル化プログラム)をアプリケーションプログラムの1つとして、同様にダウンロードできるので、鍵デカプセル化機能を復帰させることが可能である。復帰を行う前に、その機器上では鍵デカプセル化処理は少なくとも一度実行されているので、既に生成されてメモリに保存されている鍵を用いてダウンロードを実行する。ダウンロード機能により、必要に応じて、プログラムを動的に変更できる。
【0063】
本実施の形態では、初回の鍵デカプセル化処理で導出された鍵を用いた暗号通信によって鍵の更新を行ってもよい。そうすることにより、同一鍵の使用の繰り返しを防ぐとともに簡易に鍵更新を実現することができる。
【0064】
本実施の形態では、アプリケーションを動的に変更可能なことから、ハードウェア資源を有効利用することができる。
【0065】
以上、メモリ容量が少ないプログラム組込み装置において、プログラム更新を安全に行うことができる方法を説明した。
【0066】
また、メモリ容量が少ないプログラム組込み装置において、例えばIDベース暗号等の公開鍵暗号アルゴリズムを用いて、個々に持つIDを利用して鍵を導出する方法を説明した。
【0067】
また、メモリ容量が少ないプログラム組込み装置において、鍵デカプセル化処理後に、鍵デカプセル化プログラムが格納された領域にアプリケーションプログラムをダウンロードして上書きすることができる方法を説明した。
【0068】
また、メモリ容量が少ないプログラム組込み装置において、容易に鍵を更新することができる方法を説明した。
【0069】
また、メモリ容量が少ないプログラム組込み装置において、鍵を更新する際に、消去した鍵デカプセル化プログラムを復帰することができる方法を説明した。
【図面の簡単な説明】
【0070】
【図1】実施の形態1に係るシステムの構成例を示すブロック図である。
【図2】実施の形態1に係るシステムの別の構成例を示すブロック図である。
【図3】実施の形態1に係るデータ処理装置のハードウェア構成の一例を示す図である。
【図4】実施の形態1に係る外部装置及びデータ処理装置の構成を示すブロック図である。
【図5】実施の形態1に係るプログラムダウンロード工程の手順を示す図である。
【図6】実施の形態1に係るデータ処理装置による初期化手順を示すフローチャートである。
【図7】実施の形態1に係るデータ処理装置によるプログラムダウンロード手順を示すフローチャートである。
【図8】実施の形態1に係るデータ処理装置による初期化手順及びプログラムダウンロード手順での記憶部内のデータ遷移を示す図である。
【図9】実施の形態1に係るデータ処理装置によるプログラム更新手順での記憶部内のデータ遷移を示す図である。
【図10】実施の形態1に係るデータ処理装置による鍵更新手順を示すフローチャートである。
【図11】実施の形態1に係るデータ処理装置による鍵更新手順での記憶部内のデータ遷移を示す図である。
【図12】実施の形態1に係るデータ処理装置による別の鍵更新手順を示すフローチャートである。
【図13】実施の形態1に係るデータ処理装置による別の鍵更新手順での記憶部内のデータ遷移を示す図である。
【符号の説明】
【0071】
101 プログラムローダ装置、102 記憶部、103 鍵カプセル化部、104 暗号化部、201 プログラム組込み装置、202 ID格納部、203 記憶部、204 データ領域、205 プログラム領域、206 処理部、207 鍵デカプセル化部、208 復号部、210 内部メモリ、211 システムバス、220 CPU、221 外部メモリユニット、223 I/Fユニット、224 ID。
【特許請求の範囲】
【請求項1】
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部と、
前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存する処理部と、
前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存する復号部とを備え、
前記処理部は、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とするデータ処理装置。
【請求項2】
前記復号部は、前記平文データとして、前記所定の処理を行うアプリケーションプログラムを取得し、取得したアプリケーションプログラムを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存し、
前記処理部は、前記記憶部の第1記憶領域に保存されたアプリケーションプログラムを読み出して実行することにより、前記所定の処理を行うことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記復号部は、前記平文データを前記記憶部の第1記憶領域に保存した後、前記暗号データとして、前記復号プログラムが前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化されたデータを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により当該データを復号して前記復号プログラムを取得し、取得した復号プログラムを前記記憶部の第1記憶領域の前記平文データが保存された領域に上書き保存し、
前記処理部は、前記所定の方式で暗号化された新たな鍵を前記外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した新たな鍵を復号し、復号した鍵で前記記憶部の第2記憶領域に保存した鍵を更新することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記復号部は、前記平文データとして、新たな鍵を取得し、取得した鍵で前記記憶部の第2記憶領域に保存した鍵を更新することを特徴とする請求項1から3までのいずれかに記載のデータ処理装置。
【請求項5】
前記所定の方式は、公開鍵暗号方式であり、
前記記憶部の第2記憶領域に保存される鍵及び当該鍵に対応する鍵は、共通鍵であることを特徴とする請求項1から4までのいずれかに記載のデータ処理装置。
【請求項6】
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部を用いるデータ処理方法であって、
処理部が、前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存し、
復号部が、前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存し、
前記処理部が、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とするデータ処理方法。
【請求項1】
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部と、
前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存する処理部と、
前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存する復号部とを備え、
前記処理部は、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とするデータ処理装置。
【請求項2】
前記復号部は、前記平文データとして、前記所定の処理を行うアプリケーションプログラムを取得し、取得したアプリケーションプログラムを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存し、
前記処理部は、前記記憶部の第1記憶領域に保存されたアプリケーションプログラムを読み出して実行することにより、前記所定の処理を行うことを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記復号部は、前記平文データを前記記憶部の第1記憶領域に保存した後、前記暗号データとして、前記復号プログラムが前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化されたデータを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により当該データを復号して前記復号プログラムを取得し、取得した復号プログラムを前記記憶部の第1記憶領域の前記平文データが保存された領域に上書き保存し、
前記処理部は、前記所定の方式で暗号化された新たな鍵を前記外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した新たな鍵を復号し、復号した鍵で前記記憶部の第2記憶領域に保存した鍵を更新することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記復号部は、前記平文データとして、新たな鍵を取得し、取得した鍵で前記記憶部の第2記憶領域に保存した鍵を更新することを特徴とする請求項1から3までのいずれかに記載のデータ処理装置。
【請求項5】
前記所定の方式は、公開鍵暗号方式であり、
前記記憶部の第2記憶領域に保存される鍵及び当該鍵に対応する鍵は、共通鍵であることを特徴とする請求項1から4までのいずれかに記載のデータ処理装置。
【請求項6】
所定の方式で暗号化された鍵を復号する復号プログラムが予め保存された第1記憶領域と、空き領域である第2記憶領域とを有する記憶部を用いるデータ処理方法であって、
処理部が、前記所定の方式で暗号化された鍵を外部装置から受信し、前記記憶部の第1記憶領域から前記復号プログラムを読み出して実行することにより、受信した鍵を復号し、復号した鍵を前記記憶部の第2記憶領域に保存し、
復号部が、前記記憶部の第2記憶領域に保存された鍵に対応する鍵で暗号化された暗号データを前記外部装置から受信し、前記記憶部の第2記憶領域に保存された鍵により前記暗号データを復号して平文データを取得し、取得した平文データを前記記憶部の第1記憶領域の前記復号プログラムが保存された領域に上書き保存し、
前記処理部が、前記記憶部の第1記憶領域に保存された平文データを用いて、所定の処理を行うことを特徴とするデータ処理方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2010−152852(P2010−152852A)
【公開日】平成22年7月8日(2010.7.8)
【国際特許分類】
【出願番号】特願2008−333226(P2008−333226)
【出願日】平成20年12月26日(2008.12.26)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
【公開日】平成22年7月8日(2010.7.8)
【国際特許分類】
【出願日】平成20年12月26日(2008.12.26)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
[ Back to top ]