(57)【要約】      （修正有）【課題】複数のプログラムをセキュアに扱うことのできるマイクロプロセッサ及びマイクロプロセッサ応用装置を提供する。【解決手段】マイクロプロセッサ１０は、データを暗号化すると共に、暗号化されたデータを復号化するための暗号鍵を複数記憶する鍵レジスタ１５と、メモリ３０及びＩ／Ｏ２０にデータを転送又は書き出す場合に暗号鍵を用いて当該データを暗号化すると共に当該データを暗号化する際に用いられた暗号鍵を用いて当該データを復号化する暗号／復号手段１４と、復号化されたデータを記憶し、外部からアクセス不可能なキャッシュ１２と、を備え、データを共有しない複数のプログラムを並行して処理する場合に、プログラム毎に異なる暗号鍵によるデータの暗号化を行う。【選択図】図１
2009278491.tif 000002
【特許請求の範囲】
【請求項１】
バスを介して接続された外部機器からのデータの転送と、前記外部機器に対するデータの転送が可能なマイクロプロセッサにおいて、
前記データを暗号化すると共に、暗号化されたデータを復号化するための暗号鍵を複数記憶する暗号鍵記憶部と、
前記外部機器に前記データを転送する場合に前記暗号鍵を用いて当該データを暗号化する暗号化手段と、
前記データを暗号化する際に用いられた暗号鍵を用いて暗号化された当該データを復号化する復号化手段と、
前記復号化手段によって復号化された前記データを記憶し、外部からアクセス不可能な復号化データ記憶部と、を備え、
前記データを共有しない複数のプログラムを並行して処理する場合に、プログラム毎に異なる暗号鍵による前記データの暗号化を行うことを特徴とするマイクロプロセッサ。
【請求項２】
一部又は全部の前記データを共有する複数のプログラムを並行して処理する場合に、共有する前記データに対して共通の暗号鍵による暗号化を行うことを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記複数の暗号鍵は個別に識別可能な識別情報を有し、
暗号化された前記データと当該データの暗号化に用いられた暗号鍵の識別情報とを関連付ける関連付けデータを記憶する関連付けデータ記憶部を備えることを特徴とする請求項１又は２に記載のマイクロプロセッサ。
【請求項４】
前記関連付けデータは、前記データの仮想アドレスと、前記データの物理アドレスとの関連付け情報とを含むことを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記復号化手段による前記データの復号化は、所定のブロック長ごとに行われ、
前記復号データ記憶部に一度に格納可能なデータ量の最小単位は、前記所定のブロック長の整数倍であることを特徴とする請求項１から４のいずれか一項に記載のマイクロプロセッサ。
【請求項６】
前記暗号化手段及び前記復号化手段を複数備えることを特徴とする請求項１から５のいずれか一項に記載のマイクロプロセッサ。
【請求項７】
耐タンパ性を有することを特徴とする請求項１から６のいずれか一項に記載のマイクロプロセッサ。
【請求項８】
乱数を生成する乱数生成手段と、
前記乱数生成手段によって生成された乱数に基づいて前記暗号鍵の作業鍵を生成する作業鍵生成手段と、
前記作業鍵を記憶可能な作業鍵記憶部と、を備え、
前記暗号化手段は暗号化に前記暗号鍵とその作業鍵とを用いることが可能であり、
前記復号化手段は復号化に前記暗号鍵とその作業鍵とを用いることが可能であることを特徴とする請求項１から７のいずれか一項に記載のマイクロプロセッサ。
【請求項９】
請求項８に記載のマイクロプロセッサを備えたマイクロプロセッサ応用装置であって、
前記外部機器は、前記マイクロプロセッサとの間で転送されるデータを暗号化すると共に、暗号化されたデータを復号化するための暗号鍵を一つ以上記憶する外部機器用暗号鍵記憶部と、
前記乱数生成手段によって生成された乱数に基づいて前記暗号鍵の作業鍵を生成する外部機器用作業鍵生成手段と、
前記暗号鍵の作業鍵を記憶する外部機器用作業鍵記憶部と、
前記外部機器から前記マイクロプロセッサへのデータ転送又は前記マイクロプロセッサによる前記外部機器のデータの読み込みを行う場合に前記暗号鍵とその作業鍵とを用いて前記データを暗号化する外部機器用暗号化手段と、
前記データを暗号化する際に用いられた暗号鍵及び作業鍵を用いて暗号化された当該データを復号化する外部機器用復号化手段と、を備え、
前記外部機器用暗号鍵記憶部に記憶される暗号鍵の少なくとも一つと、前記暗号鍵記憶部に記憶される複数の暗号鍵のいずれか一つとは同一であり、
前記作業鍵生成手段及び前記外部機器用作業鍵生成手段はそれぞれ、前記同一の暗号鍵の作業鍵を同一の乱数に基づいて生成し、
前記マイクロプロセッサが前記外部機器へデータを書き込み又は転送する場合、前記暗号化手段は前記同一の暗号鍵の作業鍵を用いてデータを暗号化し、
前記マイクロプロセッサが前記外部機器のデータを読み込み又は前記外部機器のデータが前記マイクロプロセッサへ転送される場合、前記外部機器用暗号化手段は前記同一の暗号鍵の作業鍵を用いてデータを暗号化することを特徴とするマイクロプロセッサ応用装置。
【請求項１０】
前記外部機器は、読み取り可能な情報を有する媒体から情報を取得する読取部を備え、
前記マイクロプロセッサは、前記読取部によって取得された情報に基づいてプログラムによる処理を行うことを特徴とする請求項９に記載のマイクロプロセッサ応用装置。
【請求項１１】
複数のプログラムを記憶するプログラム記憶部を備え、
前記読取部は、異なる情報を有する複数の前記媒体の情報を読み取り可能であって、
前記複数のプログラムは、複数の前記媒体の異なる情報にそれぞれ対応し、
前記マイクロプロセッサは、前記読取部によって取得された情報に対応するプログラムによる処理を行うことを特徴とする請求項１０に記載のマイクロプロセッサ応用装置。
【請求項１２】
前記複数のプログラムは決済処理が可能なアプリケーションであり、
前記媒体は前記決済処理が可能なアプリケーションの処理によって行われる決済処理に使用可能な情報を有することを特徴とする請求項１０又は１１に記載のマイクロプロセッサ応用装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ及びマイクロプロセッサ応用装置に関する。
【背景技術】
【０００２】
近年のコンピュータ利用技術の進展により、プログラムの解析や改ざん等を容易に行いうる状況が生じている。このため、プログラム及びプログラムの扱うデータ等（以下、プログラム等とする）をより確実に保護すべく、プログラム等の解析の困難性（耐タンパ性）を高める技術が求められている。当該技術のひとつとして、プログラム等の暗号化がある。
【０００３】
しかしながら、暗号化されたプログラム等の読み出しに際し、当該暗号化されたプログラムは復号化されるが、このとき復号化されたプログラム等をメモリに平文で格納すると、メモリに格納された内容に対する解析や改ざん等が行えることとなり、プログラム等を確実に保護できない。そこで、暗号化されたプログラム等をマイクロプロセッサのキャッシュ内でのみ復号化し、外部からの読み出しを禁止するマイクロプロセッサがある（例えば特許文献１）。
【特許文献１】特許第３８０１８３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載のマイクロプロセッサではプログラム等の保護を十分に行えない場合がある。例えば、従来のマイクロプロセッサに対応した公開鍵を用いて暗号化された複数のプログラムが並行して処理される場合を考える。当該複数のプログラムのいずれかが他のプログラムのメモリアドレスを参照する命令を含んでおり、当該命令の際に他のプログラムによる復号化情報のキャッシュにヒットした場合、そのプログラムは他のプログラム等による復号化情報を参照することが可能となる。従って、従来のマイクロプロセッサでは、並列処理において十分にプログラム等の保護をすることができないことがある。
【０００５】
本発明の課題は、よりセキュアなマイクロプロセッサ又はマイクロプロセッサ応用装置を提供することである。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、請求項１記載の発明は、バスを介して接続された外部機器からのデータの転送と、前記外部機器に対するデータの転送が可能なマイクロプロセッサにおいて、前記データを暗号化すると共に、暗号化されたデータを復号化するための暗号鍵を複数記憶する暗号鍵記憶部と、前記外部機器に前記データを転送する場合に前記暗号鍵を用いて当該データを暗号化する暗号化手段と、前記データを暗号化する際に用いられた暗号鍵を用いて暗号化された当該データを復号化する復号化手段と、前記復号化手段によって復号化された前記データを記憶し、外部からアクセス不可能な復号化データ記憶部と、を備え、前記データを共有しない複数のプログラムを並行して処理する場合に、プログラム毎に異なる暗号鍵による前記データの暗号化を行うことを特徴とする。
【０００７】
請求項２記載の発明は、請求項１に記載のマイクロプロセッサにおいて、前記データを共有する複数のプログラムを並行して処理する場合に実行されたプログラム毎に共通の暗号鍵による暗号化を行うことを特徴とする。
【０００８】
請求項３記載の発明は、請求項１又は２に記載のマイクロプロセッサにおいて、前記複数の暗号鍵は個別に識別可能な識別情報を有し、暗号化された前記データと当該データの暗号化に用いられた暗号鍵の識別情報とを関連付ける関連付けデータを記憶する関連付けデータ記憶部を備えることを特徴とする。
【０００９】
請求項４記載の発明は、請求項３に記載のマイクロプロセッサにおいて、前記データの仮想アドレスと、前記データの物理アドレスとの関連付け情報とを含むことを特徴とする。
【００１０】
請求項５記載の発明は、請求項１から４のいずれか一項に記載のマイクロプロセッサにおいて、前記復号化手段による前記データの復号化は、所定のブロック長ごとに行われ、前記復号データ記憶部に一度に格納可能なデータ量の最小単位は、前記所定のブロック長の整数倍であることを特徴とする。
【００１１】
請求項６記載の発明は、請求項１から５のいずれか一項に記載のマイクロプロセッサにおいて、前記暗号化手段及び前記復号化手段を複数備えることを特徴とする。
【００１２】
請求項７記載の発明は、請求項１から６のいずれか一項に記載のマイクロプロセッサにおいて、耐タンパ性を有することを特徴とする。
なお、「耐タンパ性を有する」とは、他の技術によって得られる耐タンパ性を有することをいい、例えば特許庁公開の標準技術集「クライアント上の情報セキュリティ技術」の「セキュリティ機能保護」、Ｆ−１「ハードウェア」のＦ−１−２「要素技術」等により、マイクロプロセッサの構成の一部又は全部が耐タンパ性を有することをいう。
【００１３】
請求項８記載の発明は、請求項１から７のいずれか一項に記載のマイクロプロセッサにおいて、乱数を生成する乱数生成手段と、前記乱数生成手段によって生成された乱数に基づいて前記暗号鍵の作業鍵を生成する作業鍵生成手段と、記作業鍵を記憶可能な作業鍵記憶部と、を備え、前記暗号化手段は暗号化に前記暗号鍵とその作業鍵とを用いることが可能であり、前記復号化手段は復号化に前記暗号鍵とその作業鍵とを用いることが可能であることを特徴とする。
なお、「暗号鍵の作業鍵」とは、あるアルゴリズム、方式その他による暗号鍵方式の鍵値に対して補正を加える補正値をいう。つまり、暗号鍵である鍵値と、当該鍵値の補正値としての作業鍵とを用いることで、暗号化及び復号化に用いられる暗号鍵の鍵値は作業鍵の補正を加えられた鍵値となる。
【００１４】
請求項９記載の発明は、請求項８に記載のマイクロプロセッサを備えたマイクロプロセッサ応用装置において、請求項８のマイクロプロセッサを備えたマイクロプロセッサ応用装置であって、前記外部機器は、前記マイクロプロセッサとの間で転送されるデータを暗号化すると共に、暗号化されたデータを復号化するための暗号鍵を一つ以上記憶する外部機器用暗号鍵記憶部と、前記乱数生成手段によって生成された乱数に基づいて前記暗号鍵の作業鍵を生成する外部機器用作業鍵生成手段と、前記暗号鍵の作業鍵を記憶する外部機器用作業鍵記憶部と、前記外部機器から前記マイクロプロセッサへのデータ転送又は前記マイクロプロセッサによる前記外部機器のデータの読み込みを行う場合に前記暗号鍵とその作業鍵とを用いて前記データを暗号化する外部機器用暗号化手段と、前記データを暗号化する際に用いられた暗号鍵及び作業鍵を用いて暗号化された当該データを復号化する外部機器用復号化手段と、を備え、前記外部機器用暗号鍵記憶部に記憶される暗号鍵の少なくとも一つと、前記暗号鍵記憶部に記憶される複数の暗号鍵のいずれか一つとは同一であり、前記作業鍵生成手段及び前記外部機器用作業鍵生成手段はそれぞれ、前記同一の暗号鍵の作業鍵を同一の乱数に基づいて生成し、前記マイクロプロセッサが前記外部機器へデータを書き込み又は転送する場合、前記暗号化手段は前記同一の暗号鍵の作業鍵を用いてデータを暗号化し、前記マイクロプロセッサが前記外部機器のデータを読み込み又は前記外部機器のデータが前記マイクロプロセッサへ転送される場合、前記外部機器用暗号化手段は前記同一の暗号鍵の作業鍵を用いてデータを暗号化することを特徴とする。
【００１５】
請求項１０記載の発明は、請求項９に記載のマイクロプロセッサ応用装置において、前記外部機器は、読み取り可能な情報を有する媒体から情報を取得する読取部を備え、前記マイクロプロセッサは、前記読取部によって取得された情報に基づいてプログラムによる処理を行うことを特徴とする。
【００１６】
請求項１１記載の発明は、請求項１０に記載のマイクロプロセッサ応用装置において、  複数のプログラムを記憶するプログラム記憶部を備え、前記読取部は、異なる情報を有する複数の前記媒体の情報を読み取り可能であって、前記複数のプログラムは、複数の前記媒体の異なる情報にそれぞれ対応し、前記マイクロプロセッサは、前記読取部によって取得された情報に対応するプログラムによる処理を行うことを特徴とする。
【００１７】
請求項１２記載の発明は、請求項１０又は１１に記載のマイクロプロセッサ応用装置において、前記複数のプログラムは決済処理が可能なアプリケーションであり、前記媒体は前記決済処理が可能なアプリケーションの処理によって行われる決済処理に使用可能な情報を有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、複数のプログラムをセキュアに扱うことのできるマイクロプロセッサ又はマイクロプロセッサ応用装置を提供できる。
【発明を実施するための最良の形態】
【００１９】
（第1の実施の形態）
以下、図１及至図１１を参照して本発明の第１の実施の形態を詳細に説明する。
図１は、第１の実施の形態によるマイクロプロセッサ応用装置１を示すブロック図である。マイクロプロセッサ応用装置１は、マイクロプロセッサ１０と、Ｉ／Ｏ２０を備える。また、マイクロプロセッサ１０は、バスインタフェース１６を介してＩ／Ｏ２０及びメモリ３０と接続されている。なお、Ｉ／Ｏ２０はマイクロプロセッサ１０に対する入力、マイクロプロセッサ１０からの出力又はその両方を行いうる外部機器又は外部機器との接続を実現する接続部分であり、そのような外部機器として例えば外部ストレージ、キーボード、表示装置、情報読取装置、通信装置又はそれらのいずれかとバスインタフェース１６とを接続する回線等が挙げられる。また、メモリ３０は所謂主記憶装置であり、書き込みはＲＡＭに対して、読み込みはＲＡＭ又はＲＯＭから行われる。メモリ３０の容量が不足する場合、別途接続された補助記憶装置等の記憶領域を用いることも可能であるが、以下の記載においては主記憶装置に補助記憶装置等による記憶領域を含んだものをメモリ３０として扱う。以下、マイクロプロセッサ応用装置１の各部について説明する。
【００２０】
まず、マイクロプロセッサ１０について説明する。図１に示すように、マイクロプロセッサ１０は、実行ユニット１１と、キャッシュ１２と、トランスレーション・ルックアサイド・バッファ（Translation Look-aside Buffer、以下の記載及び図面においてはＴＬＢと称する）１３と、暗号／復号手段１４と、鍵レジスタ１５と、バスインタフェース１６と、乱数生成手段１７と、を備えている。
【００２１】
実行ユニット１１は、外部機器その他の記憶領域からプログラム等を読み込み、読み込んだプログラムに含まれる命令を解釈して個々の処理を実行する。実行ユニット１１の行う処理としては、例えばメモリ３０からの読み込み、読み込んだデータの四則演算、メモリ３０への書き出し等が挙げられる。実行ユニット１１の処理により、マイクロプロセッサ１０はメモリ３０またはＩ／Ｏ２０との間で入出力を行う。
【００２２】
キャッシュ１２は、メモリ３０から読み込んだ内容を格納する。実行ユニット１１は、キャッシュ１２にメモリ３０から読み込んだ内容を格納し、解読する。メモリ３０から読み込む内容が暗号化されている場合、実行ユニット１１は当該内容をキャッシュ１２に格納する際に復号化する。キャッシュ１２に対するアクセスは、当該キャッシュ１２を有するマイクロプロセッサ１０の実行ユニット１１によってのみ行われ、他の構成によるアクセスは不可能である。
【００２３】
キャッシュ１２においてひとつの命令に対応するデータ格納領域をキャッシュラインという。キャッシュラインの記憶容量をキャッシュラインサイズという。各キャッシュラインにはそれぞれ対応するエントリアドレスが設けられている。各キャッシュラインのエントリアドレス、ページ属性（後述）及びデータを対応付けたキャッシュエントリが設けられており、実行ユニット１１はキャッシュエントリから各キャッシュラインに格納されたデータの有無やその内容を把握できる。キャッシュエントリについては従来と同様であるので説明を省略する。
【００２４】
ＴＬＢ１３は、仮想記憶におけるメモリ空間のアドレス（仮想アドレス）を物理メモリ空間のアドレス又はＩ／Ｏ２０やその他の周辺機器を示すアドレス（物理アドレス）に変換するためのＴＬＢエントリを記憶する。物理メモリ空間とはキャッシュ１２及びメモリ３０の記憶領域をいう。実行ユニット１１は、仮想アドレスを指定してＴＬＢ１３から物理アドレスを決定する。仮想記憶については従来と同様であるので説明を省略する。
【００２５】
図２はＴＬＢエントリの構成例を示す説明図である。ＴＬＢエントリは、仮想アドレス、コンテキスト、物理アドレス、ページ属性及び鍵番号を有する。このうち、仮想アドレス及び物理アドレスは上述の通りである。
コンテキストは、オペレーティング・システムが決定する任意の番号であり、マイクロプロセッサ１０の処理するプロセス毎に異なる番号が設定される。つまり、同一のプロセスによるデータのコンテキストは同一である。
【００２６】
ページ属性は上述の仮想アドレス、コンテキスト及び物理アドレスによって指定されたメモリアドレスをどのような用途で使用可能かを規定する。ページ属性が規定するメモリの用途として、例えば「読み書き可能」、「読出し専用」「命令として実行不可能」等がある。
【００２７】
鍵番号は、後述する鍵レジスタファイルに含まれる鍵番号のうちいずれかひとつを指定する。実行ユニット１１は、ＴＬＢエントリに設定された鍵番号に対応する暗号鍵を用いてデータの暗号化／復号化を行う。データの暗号化／復号化については後述する。
【００２８】
暗号／復号手段１４は、メモリ３０またはＩ／Ｏ２０との間で行われる入出力の際に、出力するデータを暗号化し、入力されるデータが暗号化されている場合に復号化する。当該暗号化及び復号化は、後述する鍵レジスタ１５に記憶された暗号鍵又は作業鍵を用いて行われる。
【００２９】
鍵レジスタ１５は、鍵レジスタファイル並びに鍵レジスタファイルのいずれかの鍵番号と対応する暗号鍵、作業鍵又はその両方を記憶する。図３は鍵レジスタファイルの構成例を示す説明図である。鍵レジスタファイルは、鍵番号、暗号アルゴリズム、初期ベクタ、鍵値、作業鍵値のパラメータを持つテーブル形式のデータである。
鍵番号は、暗号アルゴリズム、初期ベクタ、鍵値、作業鍵値の組み合わせに対してそれぞれ設けられる固有の番号である。なお、図３に示す鍵レジスタファイルの鍵番号は初期値０の通し番号であるが、鍵番号は暗号鍵の各組み合わせを個別に識別可能な符号であれば何でもよく、通し番号でなくともよい。また、番号に限らず、例えばアルファベット等を個別に付するようにしてもよい。
【００３０】
暗号アルゴリズムは、暗号化及び復号化における方式、モードその他のルールを指定する。例えば、ＲＣ４、ＤＥＳ、ＡＥＳといった暗号方式、ＣＢＣ、ＥＢＣといった暗号モード、暗号方式がＡＥＳの場合における鍵長、作業鍵の使用有無等がある。
初期ベクタは一部の暗号アルゴリズム（例えばＡＥＳ等）において必要となる数値であり、必要に応じて設定される。
鍵値は、暗号化又は復号化に用いられる暗号鍵の鍵値である。作業鍵値は、鍵値に対する補正値であり、必要に応じて設定される。上述の暗号アルゴリズム、初期ベクタによって決定した暗号方式その他のルールに対して指定された鍵値又は鍵値に作業鍵値の補正を加えたものが、その鍵番号によって指定される固有の暗号鍵となる。暗号／復号手段１４は、鍵番号に対応する暗号アルゴリズム、初期ベクタ、鍵値、作業鍵値に基づいて暗号化及び復号化を行う。また、暗号／復号手段１４に対する鍵番号の指定はＴＬＢエントリによる。
【００３１】
以後の記載において「作業鍵を用いて暗号化／復号化を行う」とは、作業鍵を有する暗号鍵の鍵値に作業鍵による補正を加えた鍵値の暗号鍵を用いて暗号化／復号化を行うことをいう。鍵値及び作業鍵値はあらかじめ設定されていてもよいし、実行ユニット１１によって設定されてもよい。作業鍵値の生成は、後述する乱数生成手段１７による乱数の生成に基づいてもよい。
【００３２】
バスインタフェース１６は、マイクロプロセッサ１０とＩ／Ｏ２０、メモリ３０を接続し、マイクロプロセッサ１０とメモリ３０またはＩ／Ｏ２０との間で行われる入出力の伝送経路となる。
乱数生成手段１７は、作業鍵値となる乱数を生成する。マイクロプロセッサ１０は、鍵レジスタファイルの作業鍵値を設定する場合、乱数生成手段１７によって生成された乱数を作業鍵値とする。
【００３３】
次に、Ｉ／Ｏ２０について説明する。図１に示すように、Ｉ／Ｏ２０は、暗号／復号手段２１と、鍵レジスタ２２と、作業鍵レジスタ２３と、を備えている。
【００３４】
暗号／復号手段２１は、マイクロプロセッサ１０から出力された暗号化データを復号化すると共に、マイクロプロセッサ１０によって読み込まれるデータを暗号化する。当該暗号化及び復号化は、後述する作業鍵レジスタ２３に記憶された作業鍵を用いて行われる。
また、暗号／復号手段２１は、後述するチャレンジ＆レスポンスにより、マイクロプロセッサ１０との間の転送に用いる作業鍵を生成する。
【００３５】
鍵レジスタ２２は、鍵レジスタファイル並びに当該鍵レジスタファイルに対応する鍵番号の暗号鍵を記憶する。なお、鍵レジスタ２２の鍵レジスタファイルは、作業鍵値を有しないが、それ以外については上述の鍵レジスタ１５の鍵レジスタファイルと同様である。鍵レジスタ２２は、書き換え可能なＲＡＭ等で構成されてもよいし、書き換え不可能なＲＯＭ等で構成されてもよい。
鍵レジスタ２２の鍵レジスタファイルに記憶される鍵番号並びにその鍵番号に対応する暗号鍵を構成する暗号アルゴリズム、初期ベクタ及び鍵値は、鍵レジスタ１５の鍵レジスタファイルに記憶された鍵番号並びにその鍵番号に対応する暗号鍵を構成する暗号アルゴリズム、初期ベクタ及び鍵値と対応する。
【００３６】
作業鍵レジスタ２３は、暗号／復号手段２１の暗号化及び復号化において用いられる作業鍵を記憶する。作業鍵は、鍵レジスタ２２に記憶された暗号鍵の鍵値に対する補正値である。当該補正値は、マイクロプロセッサ１０とＩ／Ｏ２０との間のチャレンジ＆レスポンス処理によって生成される。当該チャレンジ＆レスポンス処理については後述する。
【００３７】
次に、マイクロプロセッサ１０によるデータの読み込み、書き出し処理及びそれに伴うデータの暗号化／復号化処理について説明する。あるプロセスによる処理のためにマイクロプロセッサ１０がデータの読み込みを行う場合、まず実行ユニット１１が当該データに対応する仮想アドレスを出力する。実行ユニット１１は、キャッシュエントリからいずれかのキャッシュライン上に当該データが格納されているかどうか検索する。このとき、例えば当該データに対するアクセスが生じていない場合や当該データに最後にアクセスした後、一定以上の他データに関する処理が行われていた場合等にはいずれのキャッシュラインにもまだ当該データは格納されていない状態が生じ得る。従って、この場合の検索は「当該データはキャッシュラインにない」旨を示す結果（キャッシュミス）を生ずる。キャッシュミスとなった場合、実行ユニット１１はＴＬＢエントリを参照し、当該データに対応する仮想アドレスから当該データを記憶する物理アドレスを決定する。
【００３８】
その後、実行ユニット１１は、決定された物理アドレスから当該データを読み出し、キャッシュ１２のいずれかのキャッシュラインに格納する。このとき、当該データの仮想アドレスを有するＴＬＢエントリに、当該キャッシュラインの物理アドレスが設定される。また、当該データの仮想アドレスを有するＴＬＢエントリに、鍵レジスタ１５に記憶された暗号鍵の鍵番号のいずれかひとつが設定される。このとき設定される鍵番号の選定ルールはあらかじめ定められていてもよいし、ランダムに選ばれてもよいが、鍵番号は複数のプロセス間におけるデータの共有の可否に応じた所定の関係を有する。当該関係については後述する。
また、暗号鍵は、鍵番号の設定の際に当該鍵番号を有する暗号鍵を生成して鍵レジスタ１５に設定、記憶するようにしてもよいし、あらかじめ鍵レジスタ１５に記憶された暗号鍵のうちひとつを用いるようにしてもよい。
その後、実行ユニット１１はキャッシュラインに格納したデータを解読し、要求された処理（例えば四則演算等）を行う。
【００３９】
その後、当該データがキャッシュライン上に格納されている間に再度読み込まれる場合、実行ユニット１１は当該キャッシュライン上のデータを読み込んで処理を行う（キャッシュヒット）。また、キャッシュ１２の容量には限りがあるので、別のプロセスによるデータの読み込み及び処理を行うため、キャッシュライン上のデータを退避させる必要が生じることがある。従って、実行ユニット１１はキャッシュライン上のデータをメモリ３０に書き出す処理を行う。
【００４０】
キャッシュライン上のデータをメモリ３０に書き出す際、実行ユニット１１は当該データを暗号化して書き出す。暗号化の際、実行ユニット１１が直接又は暗号／復号手段１４を介して当該データのＴＬＢエントリに設定された鍵番号に対応する暗号鍵を鍵レジスタ１５に要求する。その暗号鍵を用いて暗号／復号手段１４が当該データを暗号化する。
当該データを暗号化して書き出した後、当該データの仮想アドレスを有するＴＬＢエントリの物理アドレスを書き出し先の物理アドレスに置き換える。
【００４１】
その後、当該データについてキャッシュミスを生じた場合、実行ユニット１１はＴＬＢエントリを参照し、暗号化された当該データを格納しているメモリ３０の物理アドレスから当該データをキャッシュ１２に読み込む。このとき、実行ユニットは暗号化された当該データを復号化してキャッシュライン上に読み込む。復号化の際、実行ユニット１１が直接又は暗号／復号手段１４を介して当該データのＴＬＢエントリに設定された鍵番号に対応する暗号鍵を鍵レジスタ１５に要求する。その暗号鍵を用いて暗号／復号手段１４が当該データを復号化する。
当該データを暗号化して書き出した後、当該データの仮想アドレスを有するＴＬＢエントリの物理アドレスを読み込み先のキャッシュラインに対応した物理アドレスに置き換える。
【００４２】
暗号化／復号化は上述に例示した各方式、アルゴリズムを含めその方法を問わないが、ブロック暗号方式の場合、キャッシュラインのデータ容量単位（キャッシュラインサイズ）を暗号化データ及び復号化データのブロックサイズの整数倍とすることにより、キャッシュラインのデータ容量に端数を生じずキャッシュ１２を有効活用することが可能となる。
【００４３】
次に、複数のプロセスのデータを並行して処理する場合の暗号化／復号化及び各プロセスに用いられる鍵番号の関係について説明する。まず、互いにデータを参照しない複数のプロセスを並行して処理する場合について説明する。図４は互いにデータを参照しない複数のプロセスを並行処理する場合の物理メモリ空間に対するデータの格納例を示す図である。アプリケーションＡ１とアプリケーションＡ２とは異なるアプリケーションであり、かつ、互いにデータを参照しないアプリケーションである。ここでは、メモリ３０の物理メモリ空間との混同を避けるため、マイクロプロセッサは、図示しない記憶装置からアプリケーションＡ１，Ａ２を読み込むものとする。アプリケーションＡ１，Ａ２はメモリ３０を構成する記憶装置の一部に記憶されていてもよい。
図４に示すように、アプリケーションＡ１の実行に伴うデータと、アプリケーションＡ２の実行に伴うデータは、メモリ３０のそれぞれ異なる物理メモリ空間に格納される。このとき、上述のようにメモリ３０に格納されるデータは暗号化される。当該暗号化に用いられた暗号鍵の鍵番号は各ＴＬＢエントリに設定される。
【００４４】
このとき、図４に示すように、アプリケーションＡ１のデータの暗号化に用いられる暗号鍵（例えば暗号鍵Ｋ１する）と、アプリケーションＡ２のデータの暗号化に用いられる暗号鍵（例えば暗号鍵Ｋ２とする）とはそれぞれ異なる暗号鍵である。復号化の際には、当該データに対応したＴＬＢエントリから暗号鍵の鍵番号が指定されて復号化が行われる。つまり、互いにデータを参照しない複数のプロセス、例えば複数のアプリケーションの並行処理において、各プロセスのデータは異なる暗号鍵によって暗号化／復号化される。このため、何らかの方法でアプリケーションＡ１がアプリケーションＡ２のデータをメモリ３０から読み出そうとしても、メモリ３０に格納されたデータは暗号化されており、かつ、アプリケーションＡ１とアプリケーションＡ２の暗号鍵は異なるので、アプリケーションＡ１からアプリケーションＡ２のデータを復号化して解読することはできない。
上述の例は複数のアプリケーションによるものであるが、本発明の実施形態において互いにデータを参照しない複数のプロセスは上述のアプリケーションＡ１とアプリケーションＡ２の関係と同様の関係を持つ。例えば、同一アプリケーション上で互いにデータを参照しない複数のプロセスを有する場合も同様である。また、３つ以上のプロセスを並行処理する場合も、それぞれ異なる暗号鍵によるデータの暗号化／復号化を行う。
【００４５】
次に、複数のプロセス間で互いのデータを参照可能な場合について説明する。図５は、複数のプロセス間で一部のデータを参照可能な場合の物理メモリ空間に対するデータの格納例を示す図である。なお、アプリケーションＡ３とアプリケーションＡ４とは異なるアプリケーションであり、かつ、一部のデータを互いに参照可能な関係にあるアプリケーションである。
図５に示すように、アプリケーションＡ１の実行に伴うデータと、アプリケーションＡ２の実行に伴うデータのうち、互いに参照しないデータはメモリ３０のそれぞれ異なる物理メモリ空間に格納される。互いに参照しないデータの暗号化／復号化については、上述のアプリケーションＡ１、アプリケーションＡ２の場合と同様である。
【００４６】
一方、互いに参照するデータは共有する物理メモリ空間（図５に示す共有メモリ。以下同様）に格納される。このとき、共有メモリに格納されるデータは暗号化されるが、その暗号鍵はアプリケーションＡ３とアプリケーションＡ４とで共通の暗号鍵（例えば暗号鍵Ｋ５とする）を用いる。つまり、図５に示すように、各アプリケーションにおいて設定されるＴＬＢエントリにおいて、共有メモリのデータを示すＴＬＢエントリで設定される暗号鍵は共通である。従って、アプリケーションＡ３とアプリケーションＡ４とによるＴＬＢエントリの構成例は、例えば図６のようになる。この場合、共有メモリに格納された暗号化データについては、共通の暗号鍵による暗号化であるので、双方のアプリケーションによる復号化及び解読を行える。
複数のプロセス間で全部のデータを参照可能な場合、当該複数のプロセスは共通の暗号鍵を用いることとなる。また、上述の例は複数のアプリケーションによるものであるが、本発明において互いにデータを参照可能な複数のプロセスは上述のアプリケーションＡ３とアプリケーションＡ４の共有メモリに関する記載と同様の関係を持つ。また、３つ以上のプロセスで共通の暗号鍵によるデータの暗号化／復号化を行うことも可能である。
【００４７】
次に、マイクロプロセッサ１０と、Ｉ／Ｏ２０との転送について説明する。マイクロプロセッサ１０とＩ／Ｏ２０との間で転送を行う場合、Ｉ／Ｏ２０の鍵レジスタ２２に記憶される暗号鍵から生成可能な作業鍵をマイクロプロセッサ１０及びＩ／Ｏ２０がお互いに持つことで暗号転送を行う。この作業鍵の生成は、マイクロプロセッサ１０とＩ／Ｏ２０との間のチャレンジ＆レスポンス処理によって行われる。以下、その仕組みについて説明する。
【００４８】
マイクロプロセッサ１０がＩ／Ｏ２０からデータを読み込む転送を行う場合、まずマイクロプロセッサ１０の実行ユニット１１が当該データに対応する仮想アドレスを出力し、当該データを要求する。このとき、当該データの仮想アドレスからＴＬＢエントリを選択し、当該データの物理アドレスと鍵番号とが決定する。この場合、物理アドレスはＩ／Ｏ２０を示す。また、鍵番号はＩ／Ｏ２０の鍵レジスタ２２の鍵レジスタファイルに設定された鍵番号のいずれかである。
【００４９】
次に、実行ユニット１１はマイクロプロセッサ１０とＩ／Ｏ２０との間での暗号転送のための作業鍵を生成済みであるかどうか判定する。以下、作業鍵が生成されていない場合について説明する。
実行ユニット１１は、乱数生成手段１７によって乱数を生成し、Ｉ／Ｏ２０に出力する。出力された乱数はＩ／Ｏ２０の作業鍵レジスタ２３に書き込まれる。Ｉ／Ｏ２０は、書き込まれた当該乱数を鍵レジスタ２２に記憶された暗号鍵で暗号化し、作業鍵レジスタ２３に格納する。その後、実行ユニット１１は作業鍵レジスタ２３に格納された暗号化された乱数（以下、暗号化乱数と記載）を読み出す。その後、実行ユニット１１は暗号化乱数を暗号／復号手段１４に復号させ、復号化された乱数を解読する。また、実行ユニットは復号化された乱数とＩ／Ｏ２０に出力した乱数とを比較し、一致するかどうか判定する。
【００５０】
当該比較において一致しなかった場合、Ｉ／Ｏ２０で乱数を暗号化した暗号鍵とマイクロプロセッサ１０で暗号化乱数を復号化した暗号鍵とは同一ではない。従って、実行ユニット１１は暗号転送が成立しない旨を示すエラー処理を行う。当該比較において一致した場合、Ｉ／Ｏ２０で乱数を暗号化した暗号鍵とマイクロプロセッサ１０で暗号化乱数を復号化した暗号鍵とは同一である。従って、実行ユニット１１は暗号転送が成立する旨を示す出力をＩ／Ｏ２０に対して行う。実行ユニット１１は暗号化乱数を暗号／復号手段１４でさらに暗号化し、得た値を当該データのＴＬＢエントリの鍵番号の作業鍵として鍵レジスタ１５に格納する。また、暗号転送が成立する旨を示す出力を受けたＩ／Ｏ２０は、作業鍵レジスタ２３に格納された暗号化乱数をさらに暗号化して得た値を作業鍵として作業鍵レジスタ２３に格納する。このとき、マイクロプロセッサ１０及びＩ／Ｏ２０で暗号化乱数をさらに暗号化する暗号鍵は、上述の比較の結果一致した場合に同一であると判定された暗号鍵によってそれぞれ行われる。従って、暗号化乱数をさらに暗号化して得た値の作業鍵は同一となる。生成された作業鍵は一致した暗号鍵に対応する鍵番号の作業鍵として設定される。以上でチャレンジ＆レスポンス処理は終了する。
【００５１】
チャレンジ＆レスポンス処理終了後、マイクロプロセッサ１０とＩ／Ｏ２０との転送は当該作業鍵による暗号化／復号化を経て行われる。つまり、マイクロプロセッサ１０からＩ／Ｏ２０へ出力されるデータはマイクロプロセッサ１０の作業鍵を用いて暗号化されて出力され、Ｉ／Ｏ２０の作業鍵で復号化される。また、Ｉ／Ｏ２０からマイクロプロセッサ１０に読み出されるデータはＩ／Ｏ２０の作業鍵を用いて暗号化された状態でマイクロプロセッサ１０に読み出され、マイクロプロセッサ１０の作業鍵で復号化される。
【００５２】
次に、マイクロプロセッサ１０による暗号化データの読み込み、データの更新及びマイクロプロセッサ１０とＩ／Ｏ２０との間の転送処理の処理フローについて説明する。なお、以下に示すフローとその説明においては、データの読み込み／書き出しに伴うＴＬＢエントリの物理アドレス書き換え処理については省略する。
【００５３】
まず、図７のフローを用いてマイクロプロセッサ１０による暗号化データの読み込みの処理フローを示す。実行ユニット１１はあるプロセスにおけるデータの読み出しを行う際に、当該データに対応する仮想アドレスを出力し（ステップＳ１）、キャッシュエントリによる検索を通じて当該データをキャッシュ１２に要求する（ステップＳ２）。ここで、キャッシュミスの場合（ステップＳ３：ＮＯ）、実行ユニット１１は仮想アドレスを検索キーとしてＴＬＢエントリから当該データの格納された物理アドレスと当該データを暗号化した暗号鍵の鍵番号とを決定する（ステップＳ４）。
【００５４】
その後、実行ユニット１１はキャッシュラインに空きがあるかどうか判定する（ステップＳ５）。キャッシュラインに空きがある場合（ステップＳ５：ＹＥＳ）、ステップＳ４で得た物理アドレスから当該データの暗号ブロックを読み込む（ステップＳ６）。そして、ステップＳ６で得た暗号ブロックをステップＳ４で得た鍵番号の暗号鍵で復号化する（ステップＳ７）。その後、復号化したデータを空いているキャッシュラインに格納し（ステップＳ８）、実行ユニット１１は要求するデータワードを復号したデータブロックから取得する（ステップＳ９）。以上で処理は終了する。なお、ステップＳ３でキャッシュヒットした場合（ステップＳ３：ＹＥＳ）、ステップＳ９の処理へ移行する。
【００５５】
一方、ステップＳ５においてキャッシュラインに空きがない場合（ステップＳ５：ＮＯ）、実行ユニット１１はキャッシュエントリのメモリ退避処理（ステップＳ１０）を行った後、上述のステップＳ６以降の処理を行う。
【００５６】
図８のフローを用いて上述のステップＳ１０に示すキャッシュエントリのメモリ退避処理について説明する。
まず、実行ユニット１１は所定の置換アルゴリズム（後述）によりデータを空にするキャッシュラインを決定する（ステップＳ１１）。その後、空にするキャッシュラインの物理アドレスを有するＴＬＢエントリを検索する（ステップＳ１２）。その後、ステップＳ１２の検索で得られたＴＬＢエントリから決定された鍵番号の暗号鍵を用いて空にするキャッシュラインに格納されているデータを暗号化する（ステップＳ１３）。その後、ステップＳ１３で暗号化したデータをメモリ３０に書き出す（ステップＳ１４）。そして、空にするキャッシュラインのデータを消去する（ステップＳ１５）。以上で処理は終了する。
【００５７】
なお、本実施の形態においては、所定の置換アルゴリズムとしてLeast Recently Used（ＬＲＵ）を用いているが、これの派生アルゴリズム（例えばＬＲＵ−ＫやＡＲＣ等）又は他のアルゴリズムでもよい。例えば、Not Recently Used（ＮＲＵ）、First-In First-Out（ＦＩＦＯ）、Not Frequently Used（ＮＦＵ）等が挙げられる。また、これらの派生アルゴリズムでもよい。
【００５８】
次に、図９のフローを用いてマイクロプロセッサ１０による暗号化／復号化を伴うデータの更新処理フローを示す。
実行ユニット１１はあるプロセスにおけるデータの更新を行う際に、更新対象となるデータに対応する仮想アドレスを出力すると共に更新後のデータを出力する（ステップＳ２１）。また、キャッシュエントリによる検索を通じて更新対象となるデータをキャッシュ１２に要求する（ステップＳ２２）。ここで、キャッシュミスの場合（ステップＳ２３：ＮＯ）、実行ユニット１１は仮想アドレスを検索キーとしてＴＬＢエントリから当該データの格納された物理アドレスと当該データを暗号化した暗号鍵の鍵番号とを決定する（ステップＳ２４）。
【００５９】
その後、実行ユニット１１はキャッシュラインに空きがあるかどうか判定する（ステップＳ２５）。キャッシュラインに空きがある場合（ステップＳ２５：ＹＥＳ）、ステップＳ２４で得た物理アドレスから当該データの暗号ブロックを読み込む（ステップＳ２６）。そして、ステップＳ２６で得た暗号ブロックをステップＳ２４で得た鍵番号の暗号鍵で復号化する（ステップＳ２７）。その後、復号化したデータを空いているキャッシュラインに格納する（ステップＳ２８）。そして、キャッシュラインに格納された更新対象のデータをステップＳ２１で出力したデータによって更新する（ステップＳ２９）。以上で処理は終了する。なお、ステップＳ２３においてキャッシュヒットした場合（ステップＳ２３：ＹＥＳ）、ステップＳ２９の処理へと移行する。
【００６０】
また、ステップＳ２５においてキャッシュラインに空きがない場合（ステップＳ２５：ＮＯ）、実行ユニット１１は上述と同様のキャッシュエントリのメモリ退避処理（ステップＳ１０）を行った後、上述のステップＳ２５以降の処理を行う。
【００６１】
次に、マイクロプロセッサ１０とＩ／Ｏ２０との間の転送処理の処理フローについて説明する。なお、以後の説明において、空きキャッシュラインの判定と上述のキャッシュエントリのメモリ退避処理については省略するが、キャッシュラインへのデータ格納がある場合にはこれらの処理が必要に応じて行われる。
【００６２】
まず、図１０のフローを用いてマイクロプロセッサ１０がＩ／Ｏ２０のデータを読み込む際の転送に伴う処理について説明する。実行ユニット１１は、Ｉ／Ｏ２０からデータの読み出しを行う際に、当該データに対応する仮想アドレスを出力する（ステップＳ３１）。また、実行ユニット１１は仮想アドレスを検索キーとしてＴＬＢエントリから当該データの格納された物理アドレスと当該データを暗号化した暗号鍵の鍵番号とを決定する（ステップＳ３２）。このとき、物理アドレスはＩ／Ｏ２０を示す。また、鍵番号は、Ｉ／Ｏ２０の鍵レジスタ２２の記憶する暗号鍵と対応する。
【００６３】
次に、実行ユニット１１はマイクロプロセッサ１０とＩ／Ｏ２０との間での暗号転送のための作業鍵を生成済みであるかどうか判定する（ステップＳ３３）。未生成である場合（ステップＳ３３：ＮＯ）、実行ユニット１１は、乱数生成手段１７によって乱数を生成し、Ｉ／Ｏ２０に出力して作業鍵レジスタ２３に書き込む（ステップＳ３４）。その後、Ｉ／Ｏ２０は、書き込まれた当該乱数を鍵レジスタ２２に記憶された暗号鍵で暗号化し、作業鍵レジスタ２３に格納する（ステップＳ３５）。その後、実行ユニット１１は作業鍵レジスタ２３に格納された暗号化乱数を読み出し、復号する（ステップＳ３６）。
【００６４】
そして、実行ユニットは復号化された乱数とＩ／Ｏ２０に出力した乱数とを比較し、一致するかどうか判定する（ステップＳ３７）。一致しなかった場合（ステップＳ３７：ＮＯ）、実行ユニット１１はエラー処理を行う（ステップＳ３８）。一方、ステップＳ３７の比較において一致した場合（ステップＳ３７：ＹＥＳ）、実行ユニット１１及びＩ／Ｏ２０はそれぞれ暗号化乱数をさらに暗号化して得た値を作業鍵とする（ステップＳ３９）。
【００６５】
作業鍵の生成後、Ｉ／Ｏ２０はマイクロプロセッサ１０によって読み出されるデータを当該作業鍵で暗号化する（ステップＳ４０）。なお、ステップＳ３３において作業鍵を生成済みである場合（ステップＳ３３：ＹＥＳ）、ステップＳ４０の処理へと移行する。
【００６６】
その後、実行ユニットはステップＳ３２で得たＴＬＢエントリの物理アドレスを用いてステップＳ４０で暗号化されたデータをＩ／Ｏ２０から読み込む（ステップＳ４１）。そして、実行ユニット１１は暗号／復号手段１４を介し、ステップＳ３９又はそれ以前に生成済みの作業鍵を用いてステップＳ４０で得たデータを復号化してキャッシュラインに格納する。（ステップＳ４２）。そして、実行ユニットは要求するデータワードを復号したデータブロックから取得する（ステップＳ４３）。以上で処理は終了する。
【００６７】
次に、図１１のフローを用いてマイクロプロセッサ１０がＩ／Ｏ２０へデータを送る（書き込む）際の転送に伴う処理について説明する。まず、実行ユニット１１は、書き込むデータを復号化してキャッシュ１２に読み込む（ステップＳ５１）。ステップＳ５１の処理は、例えば上述の図７、図９又は図１０のフローとその説明によるキャッシュラインへのデータ格納による。次に、実行ユニット１１はマイクロプロセッサ１０とＩ／Ｏ２０との間での暗号転送のための作業鍵を生成済みであるかどうか判定する（ステップＳ５２）。生成済みの場合（ステップＳ５２：ＹＥＳ）、実行ユニット１１は当該データを暗号ブロック単位に分割（パティング）する（ステップＳ５３）。その後、実行ユニット１１は生成済みの作業鍵を用い、暗号／復号手段１４を介してパティングされた当該データを暗号化する（ステップＳ５４）。そして、実行ユニット１１はステップＳ５４で暗号化されたデータ（暗号データブロック）をＩ／Ｏ２０に転送する（ステップＳ５５）。Ｉ／Ｏ２０は、暗号／復号手段２１を介して転送された暗号データブロックを復号化する（ステップＳ５６）。以上で処理は終了する。
なお、ステップＳ５２において作業鍵が未生成である場合（ステップＳ５２：ＮＯ）、上述のステップＳ３４〜３９と同様の処理を行った後、ステップＳ５３以降の処理を行う。
【００６８】
第１の実施の形態によれば、マイクロプロセッサ１０からＩ／Ｏ２０及びメモリ３０に対して転送又は書き込みされるデータは暗号化される。さらに、互いにデータを共有しない複数のプロセス（例えば上述のアプリケーションＡ１，２）による処理においては、異なる暗号鍵によってデータの暗号化が行われる。これによって、データを共有しないプログラムは他のプログラムのデータを復号化できない。さらに、キャッシュ１２はマイクロプロセッサ外からのアクセスが不可能である。従って、プログラム等をより確実に保護するマイクロプロセッサを実現できる。
【００６９】
また、互いにデータの一部又は全部を共有可能な複数のプロセス（例えば上述のアプリケーションＡ３，４）による処理においては、共有可能なデータについて共通の暗号鍵によってデータの暗号化が行われる。これによって、データの共有を行わない又は不可能とすべき部分については異なる暗号鍵を用いた暗号化／復号化によってプログラム等の確実な保護を行いつつ、共有可能な一部又は全部のデータについては各プログラム間で相互運用すること可能となる。
【００７０】
また、暗号鍵は鍵レジスタファイルの鍵番号によって管理され、暗号化／復号化されるデータと当該データの暗号鍵を示す鍵番号とはＴＬＢエントリによって対応付けられる。これによって、ＴＬＢエントリの参照により当該データの暗号化／復号化を行うための暗号鍵を容易に特定可能となる。従って、データ処理に伴う暗号化／復号化処理を効率的に行える。
【００７１】
また、ＴＬＢエントリにはデータの仮想アドレスと物理アドレスとを含む。これによって、マイクロプロセッサ１０が行うデータの読み込み／書き出しその他の処理に伴うデータへのアクセスとそれに伴う暗号化／復号化のための暗号鍵の特定とを一括して行うことができる。従って、データ処理に伴う暗号化／復号化処理を一層効率的に行える。
【００７２】
また、キャッシュラインサイズを暗号化データ及び復号化データのブロックサイズの整数倍とすることにより、キャッシュラインのデータ容量に端数を生じずキャッシュ１２を有効活用することが可能となる。
【００７３】
また、作業鍵を用いることにより、暗号鍵に設定された固有の鍵値による暗号化／復号化処理に比して鍵値のパターン即ち生成可能な暗号鍵の数を大幅に増加できる。これにより、作業鍵を用いない場合に比して暗号の解析をより困難とすることが可能となる。従って、プログラム等をより確実に保護するマイクロプロセッサを実現できる。
【００７４】
さらに、マイクロプロセッサ（例えばマイクロプロセッサ１０）と外部機器（例えばＩ／Ｏ２０）との間のデータ転送において、転送されるデータは暗号化される。これによって、マイクロプロセッサと外部機器の間のバスから不正な方法等によりデータを取得しようとしても、転送されるデータは暗号化されているので、データを確実に保護できる。加えて、転送されるデータはチャレンジ＆レスポンスにより生成された作業鍵を用いて暗号化されるので、データはより確実に保護される。
【００７５】
（第２の実施の形態）
次に、本発明のマイクロプロセッサ応用装置の第２の実施の形態である決済装置２について図１２及至図１４を用いて説明する。なお、第１の実施の形態と同様の構成については同じ符号を付して説明を省略する。
図１２は、本発明の第２の実施の形態による決済装置２の構成を示すブロック図である。決済装置２は、決済装置２の行う各種動作に伴う処理演算その他の制御を行うマイクロプロセッサ（ＭＰＵ）５１と、主記憶装置としてのＲＡＭ５２と、補助記憶装置としてのＲＯＭ５３と、後述するＩ／Ｏ６０等のカード読取機器を接続可能なカードインタフェース５４と、決済装置２の動作に伴う表示出力を行う表示部５５と、決済装置２に各種操作入力を行うための操作部５６と、他の機器と通信を行うための通信部５７と、カード読取機器としてのＩ／Ｏ６０と、を備えている。このうち表示部５５、操作部５６、通信部５７については従来の決済装置２が備えるこれらの構成と同様であるので、説明を省略する。
【００７６】
ＭＰＵ５１は、上述のマイクロプロセッサ１０と同様の構成を備えており、上述と同様の暗号化／復号化機能を有する。ＭＰＵ５１は、さらにリセット回路動作を行う構成を有する。具体的には、ＴＬＢエントリにリセットベクタのアドレス（物理アドレス）とリセットベクタ専用の暗号鍵（例えば暗号鍵Ｋ０とする）の鍵番号とが対応付けられている。なお、リセットベクタとはマイクロプロセッサ起動時に最初に読み込まれるデータの格納領域である。ＭＰＵ５１は、起動時に初期動作としてＴＬＢエントリからリセットベクタのアドレスから制御モジュール（後述）を読み出して処理する。また、制御モジュールをＲＡＭ５２に展開する場合には暗号鍵Ｋ０で暗号化する。なお、暗号鍵Ｋ０の鍵レジスタファイルはＭＰＵ５１の鍵レジスタがあらかじめ記憶しており、初期動作時に自動的にセットされる。
【００７７】
なお、初期動作に用いられるＴＬＢエントリの物理アドレスはＲＯＭ５３であるが、ＲＡＭ５２に展開する際にＲＡＭ５２の物理アドレスに拡張される。このとき、ＴＬＢエントリの物理アドレスを拡張する代わりにＴＬＢエントリを初期動作用と拡張後とで別に設け、差し替えるようにしてもよい。
【００７８】
ＲＡＭ５２は一般的な主記憶装置であり、ＲＯＭ５３は一般的な補助記憶装置（例えばフラッシュメモリ等）である。また、ＲＯＭ５３はＭＰＵ５１の初期動作で読み込まれる制御モジュールを記憶する。つまり、リセットベクタのアドレスはＲＯＭ５３の制御モジュールを記憶する記憶領域の先頭アドレスである。また、制御モジュールはあらかじめ暗号鍵Ｋ０で暗号化された状態で記憶されている。ＭＰＵ５１は、初期動作において暗号かさされた制御モジュールを読み出して暗号鍵Ｋ０を用いて復号化しながら命令を解釈し、実行する。
【００７９】
また、ＲＯＭ５３はＩＣカード等による決済処理を決済装置２で行うための決済処理用アプリケーション（以後、決済アプリと記載）を記憶する。決済アプリは一種類でも複数種類でもよいが、本実施の形態では二種類（ここでは決済アプリＳ１、決済アプリＳ２とする）を用いた例を示す。決済アプリＳ１、決済アプリＳ２はそれぞれ異なるＩＣカード等を用いた決済処理を行うためのアプリケーションである。ここでは、決済アプリＳ１に対応したＩＣカード等をカードＣ１、決済アプリＳ２に対応したＩＣカード等をカードＣ２とする。
なお、ＩＣカード等とは、通信機能を有するＩＣカード（例えばFeliCa（登録商標）等）やそれに類する通信機器（ＩＣカード機能を有する携帯電話機等）等をいう。
【００８０】
なお、本実施の形態では制御モジュール、決済アプリＳ１、決済アプリＳ２の順にそれぞれのブートイメージがＲＯＭ５３の連続した物理アドレスに記憶されている。これによって初期動作時に制御モジュールの先頭アドレスにプログラムカウンタを設定した後、順次読み出すことで制御モジュール、決済アプリＳ１、決済アプリＳ２の順にロードできる。
ＲＯＭ５３上における各ブートイメージの物理アドレスは上述の例に限定されないことは言うまでも無く、何らかの方法でＭＰＵ５１が各ブートイメージをロードできればよい。
【００８１】
カードインタフェース５４は所謂周辺機器を接続可能なインタフェースであり、周辺機器との接続を行うインタフェースとして例えばＵＳＢ、ＩＥＥＥ１３９４、ＳＣＳＩ、ＲＳ−２３２その他のシリアルポート又はパラレルポートインタフェースや、ネットワーク回線等による接続等が挙げられる。また、その接続は有線、無線又はその混在のどの形態をとってもよい。カードインタフェース５４にはカード読取機器であるＩ／Ｏ６０が接続されている。Ｉ／Ｏ６０は、暗号／復号手段２１と、鍵レジスタ２２と、作業鍵レジスタ２３と、カードインタフェース回路６４と、を備えている。このうち、暗号／復号手段２１、鍵レジスタ２２及び作業鍵レジスタ２３は上述のＩ／Ｏ２０の各構成と同様であるので、説明を省略する。ＭＰＵ５１とＩ／Ｏ６０との間の転送における暗号化／復号化についても、上述のマイクロプロセッサ１０とＩ／Ｏ２０との関係と同様である。
【００８２】
カードインタフェース回路６４は、ＩＣカード等との通信を行い、当該通信に伴い生じたデータを決済装置２へ入力する。このとき生じるデータは、カードインタフェース回路６４と通信を行ったカードの種類毎に識別可能となっている。また、カードインタフェース回路６４は、決済装置２から転送（書き出し）されたデータに基づいてＩＣカード等と通信を行う。ＩＣカード等との通信は接触通信又は非接触通信によって行われる。
【００８３】
次に、決済装置２の起動及び決済処理が行われるまでの動作について説明する。図１３は、決済装置２の動作に伴う物理メモリ空間におけるデータの配置及び当該データに対するアクセスの例を示す図である。
決済装置２が起動すると、まずＭＰＵ５１が初期動作を行う。具体的には、ＭＰＵ５１の実行ユニットが暗号／復号手段が暗号化／復号化に用いる暗号鍵として暗号鍵Ｋ０をセットする。また、リセットベクタのアドレスを含むＴＬＢエントリをＴＬＢに要求する。そして、ＴＬＢエントリに設定された物理アドレスからＲＯＭ５３の制御モジュールの先頭アドレスをプログラムカウンタにセットし、読み込みを開始して制御モジュールをロードする。
その後、決済装置２の各部がセルフテスト等の初期動作を行う。セルフテストについては従来と同様であるので説明を省略する。
【００８４】
次に、ロードした制御モジュールをＲＡＭ５２に展開する。このとき、ＲＡＭ５２に展開された制御モジュールのコード・データは暗号鍵Ｋ０で暗号化される。また、この処理に伴い、ＴＬＢエントリの物理アドレス範囲をＲＡＭ５２に拡張する。制御モジュールをＲＡＭ５２に展開する処理を完了した後に制御モジュールによる処理を行う場合、ＭＰＵ５１はＲＡＭ５２に展開された制御モジュールに対するアクセスを行う。この場合、制御モジュールの読み込み、書き出しに伴う暗号化／復号化には暗号鍵Ｋ０を用いる。
【００８５】
また、ＭＰＵ５１は三種のＴＬＢエントリ群（ここではＴＬＢエントリ群Ｔ１、ＴＬＢエントリ群Ｔ２、ＴＬＢエントリ群Ｔ３とする）を設定する。このうちＴＬＢエントリ群Ｔ１は決済アプリＳ１のブートイメージをＲＡＭ５２に展開するための一連のＴＬＢエントリである。また、ＴＬＢエントリ群Ｔ２は決済アプリＳ２のブートイメージをＲＡＭ５２に展開するための一連のＴＬＢエントリである。また、ＴＬＢエントリ群Ｔ３はＲＡＭ５２に展開された決済アプリＳ１、２それぞれのコード・データに対して制御モジュールからの参照があった場合に各決済アプリのデータにアクセスするための一連のＴＬＢエントリである。つまり、ＴＬＢエントリ群Ｔ１はＲＡＭ５２に展開された決済アプリＳ１のコード・データのみを、ＴＬＢエントリ群Ｔ２はＲＡＭ５２に展開された決済アプリＳ２のコード・データのみを対象とする一方、ＴＬＢエントリ群Ｔ３は決済アプリＳ１，２の両方のコード・データを対象に含む。
【００８６】
また、ＴＬＢエントリ群Ｔ１、２にはそれぞれ異なる鍵番号の暗号鍵が設定される。ここでは、ＴＬＢエントリ群Ｔ１に暗号鍵Ｋ６を、ＴＬＢエントリ群Ｔ２に暗号鍵Ｋ７を設定するものとして記載する。
一方、ＴＬＢエントリ群Ｔ３のうち決済アプリＳ１のコード・データに対応するＴＬＢエントリには暗号鍵Ｋ６が、ＴＬＢエントリ群Ｔ３のうち決済アプリＳ２のコード・データに対応するＴＬＢエントリには暗号鍵Ｋ７が設定される。さらに、ＴＬＢエントリ群Ｔ３のうち制御モジュールのコード・データの読み込みに対応する部分には暗号鍵Ｋ０が設定される。
【００８７】
その後、ＭＰＵ５１は決済アプリＳ１のブートイメージをロードして、ＴＬＢエントリ群Ｔ１に対応するＲＡＭ５２の物理メモリ空間に展開する。このとき、ＲＡＭ５２に展開された決済アプリＳ１のコード・データは暗号鍵Ｋ６で暗号化される。また、ＭＰＵ５１は決済アプリＳ２のブートイメージをロードして、ＴＬＢエントリ群Ｔ２に対応するＲＡＭ５２の物理メモリ空間に展開する。このとき、ＲＡＭ５２に展開された決済アプリＳ２のコード・データは暗号鍵Ｋ７で暗号化される。以上で決済装置２の起動が完了する。
【００８８】
その後、決済装置２は決済指示待ちの待機モードとなる。決済指示とは、カードインタフェース回路６４によるＩＣカード等との通信に伴うデータの入力や、操作部５６による入力操作等であるが、ここではＩＣカード等との通信に伴うデータの入力について記載する。カードインタフェース回路６４とＩＣカード等との通信があった場合、ＭＰＵ５１にそのＩＣカード等に対応するデータが転送される。このとき転送されるデータは上述のマイクロプロセッサ１０とＩ／Ｏ２０との関係と同様の方法で暗号化／復号化される。
【００８９】
また、このときカードインタフェース回路６４を含んだＩ／Ｏ６０その他各部の制御は制御モジュールのコード・データの処理による。従って、Ｉ／Ｏ６０の制御に伴いＭＰＵ５１の実行ユニットが要求するコードはＲＡＭ５２に展開された制御モジュールから読み込まれる。よって、この読み込みに伴う処理ではＴＬＢエントリ群Ｔ３のＴＬＢエントリから対象となるデータ・コードの物理アドレスの決定が行われる。読み込まれたデータ・コードは暗号鍵Ｋ０で復号化され、要求されたデータ・コードが実行ユニットに渡される。
一方で、Ｉ／Ｏ６０から転送されたデータは、対応する決済アプリに渡される。つまり、カードＣ１との通信に伴う転送の場合は決済アプリＳ１に、カードＣ２との通信に伴う転送の場合は決済アプリＳ２にデータが渡される。このとき、ＭＰＵ５１は対応する決済アプリのコード・データに対して当該転送に伴うデータを渡す（書き込む）。具体的には、ＭＰＵ５１はＴＬＢエントリ群Ｔ３からカードの種類に対応した決済アプリの該当するコード・データの物理アドレスと鍵番号を決定する。そして、その鍵番号の暗号鍵で暗号化し、その物理アドレスに書き込む。つまり、カードインタフェース回路６４によるＩＣカード等との通信に伴う転送で生じるデータの読み書きにおいて、ＭＰＵ５１はＲＡＭ５２からの制御モジュールのコード・データの読み込みの際に暗号鍵Ｋ０で復号化を行い、各決済アプリのコード・データに対する書き込みにはその決済アプリのＴＬＢエントリに対応した暗号鍵（暗号鍵Ｋ６又は暗号鍵Ｋ７）で暗号化を行う。
【００９０】
上述のように、ＭＰＵ５１は待機モード中にカードインタフェース回路６４とＩＣカード等との通信があった場合、各カードに対応する決済アプリに対する書き込み処理を行うことで各カードの決済庶路を行うよう制御する。具体的には、カードＣ１との通信が行われた場合、ＭＰＵ５１は決済アプリＳ１のコード・データに対する書き込みを行い、決済アプリＳ１による決済処理を行うよう制御する。また、カードＣ２との通信が行われた場合、ＭＰＵ５１は決済アプリＳ２のコード・データに対する書き込みを行い、決済アプリＳ２による決済処理を行うよう制御する。決済処理については従来と同様であるので説明を省略する。かようにして、決済装置２は各カードに対応した決済処理を行う。
【００９１】
なお、ＲＯＭ５３の制御モジュールや各決済アプリは圧縮されていてもよい。その場合、圧縮されたイメージを展開しながら処理を進める。
【００９２】
次に、図１４を用いて決済装置２の動作フローを示す。なお、データの読み込み／書き出しに伴う暗号化／復号化処理については記載を省略する。
まず、ＭＰＵ５１の実行ユニットが暗号／復号手段が暗号化／復号化に用いる暗号鍵として暗号鍵Ｋ０をセットする（ステップＳ７１）。また、リセットベクタのアドレスを含むＴＬＢエントリをＴＬＢに要求する（ステップＳ７２）。そして、ＴＬＢエントリに設定された物理アドレスからＲＯＭ５３の制御モジュールの先頭アドレスをプログラムカウンタにセットし、読み込みを開始して制御モジュールをロードする（ステップＳ７３）。その後、決済装置２の各部がセルフテスト等の初期動作を行う（ステップＳ７４）。
【００９３】
次に、ＲＯＭ５３からロードした制御モジュールのブートイメージをＲＡＭ５２に展開する（ステップＳ７５）。また、この処理に伴い、ＴＬＢエントリの物理アドレス範囲をＲＡＭ５２に拡張し、制御モジュールに関するアクセスをＲＡＭ５２に移行する（ステップＳ７６）。
【００９４】
その後、ＭＰＵ５１は決済アプリＳ１を展開するＲＡＭ５２の物理アドレス範囲を決定すると共に、ＴＬＢエントリ群Ｔ３に決済アプリＳ１の展開される物理アドレスの一部又は全部をセットする（ステップＳ７７）。そして、ＲＯＭ５３から決済アプリＳ１のブートイメージを読み出し、ステップＳ７７で決定されたＲＡＭ５２の物理アドレス範囲に展開する（ステップＳ７８）。このとき、ＴＬＢエントリ群Ｔ１に決済アプリＳ１の物理アドレスがセットされる。
その後、ＭＰＵ５１は決済アプリＳ２を展開するＲＡＭ５２の物理アドレス範囲を決定すると共に、ＴＬＢエントリ群Ｔ３に決済アプリＳ２の展開される物理アドレスの一部又は全部をセットする（ステップＳ７９）。そして、ＲＯＭ５３から決済アプリＳ２のブートイメージを読み出し、ステップＳ７９で決定されたＲＡＭ５２の物理アドレス範囲に展開する（ステップＳ８０）。このとき、ＴＬＢエントリ群Ｔ２に決済アプリＳ２の物理アドレスがセットされる。
【００９５】
その後、決済装置２は決済指示待ちの待機モードとなる（ステップＳ８１）。待機モード中に決済指示が生じると（ステップＳ８１：ＹＥＳ）、カードの種類の判定が行われる（ステップＳ８２）。カードＣ１による決済指示の場合（ステップＳ８１：Ｃ１）、ＭＰＵ５１は決済アプリＳ１のコード・データに対する書き込みを行い、決済アプリＳ１を実行する（ステップＳ８３）。カードＣ２による決済指示の場合（ステップＳ８１：Ｃ２）、ＭＰＵ５１は決済アプリＳ２のコード・データに対する書き込みを行い、決済アプリＳ２を実行する（ステップＳ８４）。ステップＳ８１の待機、及び決済指示が生じた場合のステップＳ８〜８４の処理は決済装置２の終了処理（例えば電源ＯＦＦ等）まで行われ（ステップＳ８５：ＮＯ）、決済装置２の終了処理によって（ステップＳ８５：ＹＥＳ）終了する。
【００９６】
第２の実施の形態によれば、外部機器（例えばＩ／Ｏ６０）の読取部（例えばカードインタフェース回路６４）が読み取り可能な情報を有する媒体（例えばＩＣカード等）から情報を読み取った場合、マイクロプロセッサ（例えばＭＰＵ５１）が読取部によって読み取られた情報に基づいたプログラム等による処理、例えばカードＣ１に対応する決済アプリＳ１による決済処理を行う。従って、読取部によって取得される情報とマイクロプロセッサによって行われる処理とを対応付けることができる。
【００９７】
さらに、第２の実施の形態によれば、ＩＣカード等の種類（例えばカードＣ１、カードＣ２）に応じた各プログラム（例えば決済アプリＳ１，２）による処理（例えば決済処理等）を行うことができる。このとき、マイクロプロセッサ（例えばＭＰＵ５１）は各プログラムのデータ・コードを異なる暗号鍵で暗号化／復号化する。従って、読取部による外部からの情報取得に応じた処理と、プログラム等の確実な保護を可能とするセキュアなマイクロプロセッサ応用装置の機能とを両立させることができる。
【００９８】
さらに、第２の実施の形態によれば、決済アプリＳ１、Ｓ２は決済処理が可能なアプリケーションであり、カードＣ１，Ｃ２はそれぞれ決済アプリＳ１，Ｓ２での決済処理に用いることができるＩＣカード等であるので、上述の構成によるセキュアなマイクロプロセッサ応用装置を用いた決済装置を提供できる。
【００９９】
なお、第２の実施の形態は、上述の第１の実施の形態の効果も発揮することは言うまでもない。
【０１００】
（その他）
なお、その他の実施の形態として、暗号／復号手段を複数設けることも可能である。この場合、各暗号／復号手段が個別にデータの暗号化／復号化を行うことで、暗号化／復号化を伴う処理についてマイクロプロセッサ１０が並列処理を行うことが可能となり、マイクロプロセッサの処理性能が大幅に向上する。
また、暗号／復号手段は暗号化手段と復号化手段とを個別に設けることも可能である。
【０１０１】
また、マイクロプロセッサはさらに他の方法による耐タンパ性を有するようにしてもよい。「耐タンパ性を有する」とは、他の技術によって得られる耐タンパ性を有することをいい、例えば特許庁公開の標準技術集「クライアント上の情報セキュリティ技術」の「セキュリティ機能保護」、Ｆ−１「ハードウェア」のＦ−１−２「要素技術」等により、マイクロプロセッサの構成の一部又は全部が耐タンパ性を有することをいう。この場合、マイクロプロセッサが処理するプログラム等について外部からの不正な情報取得等又をより確実に防止できる。また、マイクロプロセッサ応用装置１や決済装置２の各部又は全体耐タンパ性を有するようにしてもよい。
【０１０２】
また、上述の決済装置２では二つの決済アプリによる処理を行っているが、一つまたは三つ以上の決済アプリを処理する場合であってもその処理方法は二つの決済アプリによる場合と同様である。また、マイクロプロセッサ及びマイクロプロセッサ応用装置が行う処理において用いるプログラム等は、決済アプリに限らず、他の処理を行うアプリケーションプログラムでもよい。また、ＩＣカード等に限らず、他の媒体（例えば磁気による情報の読取が可能な媒体や、光センサー等の光学デバイスで情報の読取が可能な媒体等）を用いてもよい。その場合、当該他の媒体の情報を読み取り可能な構成（磁気読取装置や光センサー等）を備えるＩ／Ｏを用いることとなる。
【０１０３】
また、マイクロプロセッサ（例えばマイクロプロセッサ１０やＭＰＵ５１等）が記憶する暗号鍵は、外部から書き換え可能に設けてもよい。外部から書き換える方法としては、例えば暗号鍵記憶部（例えば鍵レジスタ１５等）に接続可能であって外部からアクセスするためのインタフェース（例えばＪＴＡＧポート等）を設け、周知のフラッシュＲＯＭライタ等の書き込み装置により暗号鍵を書き込む方法等が挙げられる。
【０１０４】
また、上述の各種プログラム等（例えばアプリケーションＡ１〜Ａ４、決済アプリＳ１，Ｓ２等）はマイクロプロセッサによるメモリ３０の格納前にあらかじめ暗号化されていてもよい。その場合、マイクロプロセッサは、あらかじめ各種プログラムの暗号化に用いられた暗号鍵を保有し、当該アプリケーションを読み込む際に対応する暗号鍵を用いて復号化を行い、処理する。
【０１０５】
なお、本発明の実施の形態は、今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１０６】
【図１】本発明の第１の実施の形態によるマイクロプロセッサ応用装置を示すブロック図である。
【図２】ＴＬＢエントリの構成例を示す説明図である。
【図３】鍵レジスタファイルの構成例を示す説明図である。
【図４】互いにデータを参照しない複数のプロセスを並行処理する場合の物理メモリ空間に対するデータの格納例を示す図である。
【図５】複数のプロセス間で一部のデータを参照可能な場合の物理メモリ空間に対するデータの格納例を示す図である。
【図６】複数のプロセス間で一部のデータを参照可能な場合のＴＬＢエントリの構成例を示す図である。
【図７】マイクロプロセッサによる暗号化データの読み込みの処理フローである。
【図８】キャッシュエントリのメモリ退避処理を示すフローである。
【図９】マイクロプロセッサによる暗号化／復号化を伴うデータの更新処理フローである。
【図１０】マイクロプロセッサがＩ／Ｏのデータを読み込む際の転送に伴う処理を示すフローである。
【図１１】マイクロプロセッサがＩ／Ｏへデータを送る（書き込む）際の転送に伴う処理を示すフローである。
【図１２】本発明の第２の実施の形態による決済装置の構成を示すブロック図である。
【図１３】決済装置の動作に伴う物理メモリ空間におけるデータの配置及び当該データに対するアクセスの例を示す図である。
【図１４】決済装置の動作フローである。
【符号の説明】
【０１０７】
１０  マイクロプロセッサ
１１  実行ユニット
１２  キャッシュ
１３  ＴＬＢ
１４、２１  暗号／復号手段
１５、２２  鍵レジスタ
１６  バスインタフェース
１７  乱数生成手段
２３  作業鍵レジスタ
３０  メモリ
５１  ＭＰＵ
５２  ＲＡＭ
５３  ＲＯＭ
６４  カードインタフェース回路
【図１】
2009278491.tif 000003
【図２】
2009278491.tif 000004
【図３】
2009278491.tif 000005
【図４】
2009278491.tif 000006
【図５】
2009278491.tif 000007
【図６】
2009278491.tif 000008
【図７】
2009278491.tif 000009
【図８】
2009278491.tif 000010
【図９】
2009278491.tif 000011
【図１０】
2009278491.tif 000012
【図１１】
2009278491.tif 000013
【図１２】
2009278491.tif 000014
【図１３】
2009278491.tif 000015
【図１４】
2009278491.tif 000016