(58)【調査した分野】(Int.Cl.,DB名)
前記アドレス登録領域への前記アドレス範囲の登録及び変更は、前記コア部の実行アドレスが前記アドレス登録領域に登録されるアドレス範囲内である場合に実行されることを特徴とする請求項1又は2記載のプロセッサ。
前記暗号処理部は、前記コア部の実行アドレスと前記コア部によりアクセスするアドレスが前記アドレス登録領域に登録されている同じアドレス範囲内である場合、暗号化された前記起動プログラム及び前記秘匿データを復号して転送し、異なるアドレス範囲である場合、暗号化された前記起動プログラム及び前記秘匿データを復号せずに転送することを特徴とする請求項5記載のプロセッサ。
【発明を実施するための形態】
【0013】
以下、本発明の実施形態を図面に基づいて説明する。
【0014】
(第1の実施形態)
本発明の第1の実施形態について説明する。
図1は、第1の実施形態におけるプロセッサシステムの構成例を示す図である。第1の実施形態におけるプロセッサシステムは、CPU(Central Processing Unit)コア110、暗号処理部120、メモリA130、メモリB140、及びメモリC150を有する。
【0015】
CPUコア110、暗号処理部120、及びメモリC150は、バス161によって相互に接続されており、暗号処理部120、メモリA130、及びメモリB140は、バス161とは異なるバス162によって相互に接続されている。また、
図1に示した例では、CPUコア110、暗号処理部120、及びメモリB
140が、1つのチップ(プロセッサチップ)100に実装されている。CPUコア110は、プログラムの命令コードに従って処理を実行する。
【0016】
暗号処理部120は、メモリA130に格納されている暗号化されたデータを復号したり、メモリA130に格納するデータを暗号化したりする機能を有する。本実施形態では、メモリA130に格納されているデータは、暗号化及び復号に共通の鍵を使用する共通鍵暗号方式におけるAES(Advanced Encryption Standard)暗号方式で、すなわちAES共通鍵を用いて暗号化されているものとする。
【0017】
暗号処理部120は、鍵やアドレス情報が登録されるメモリ領域であるアドレス登録領域121を有する。アドレス登録領域121には、
図2に一例を示すように、暗号化処理や復号処理に用いるAES共通鍵201、及びアクセス制限する(秘匿するデータが格納されている)アドレス範囲を示すアドレス情報202が登録される。アドレス情報202は、アクセス制限するアドレス範囲のアドレス(先頭アドレス)、サイズ、及び有効/無効情報を含む。
【0018】
後述するように登録番号1の登録用レジスタに登録されるアドレス情報は、システムの起動時に実行される起動プログラムの領域を示すアドレス情報である。したがって、本実施形態では、登録番号1のアドレス情報は、予め登録されている消去不可なアドレス情報であり、常に有効状態とする。登録番号2以降の登録用レジスタに登録されるアドレス情報は、起動プログラムや秘匿プログラム等の実行時に追加登録されるアドレス情報である。登録番号2以降のアドレス情報は、例えば秘匿プログラム及び鍵情報の領域を示すアドレス情報である。なお、アドレス情報202として、アクセス制限するアドレス範囲の先頭アドレス、最終アドレス、及び有効/無効情報を含むようにしても良い。
【0019】
暗号処理部120は、CPUコア110が有するプログラムカウンタ(PC)111のPC値(実行アドレス)を監視する機能を有する。また、暗号処理部120は、メモリA130及びメモリB140に対するアクセスアドレスを監視する機能を有する。暗号処理部120は、プログラムカウンタ(PC)111のPC値(実行アドレス)、メモリA130及びメモリB140に対するアクセスアドレス、及びアドレス登録領域121に登録されているアドレス情報に応じて、データに対する暗号化処理や復号処理を行うか否かを切り替える。
【0020】
メモリA130には、AES共通鍵で暗号化された起動プログラム131、AES共通鍵で暗号化された制御プログラムなど132、及びAES共通鍵で暗号化された秘匿プログラム及び鍵情報133が格納される。メモリA130は、例えば外部ROM(Read Only Memory)である。外部ROMとしては、例えばマスクROMや、OTROM(One Time ROM)、EEPROM(Electrically Erasable Programmable ROM)、フラッシュメモリ等のPROM(Programmable ROM)が適用可能である。
【0021】
メモリB140は、秘匿プログラムの実行時のワーク領域として使用されるメモリである。メモリB140は、例えばプロセッサ100に内蔵されるRAM(Random Access Memory)である。メモリC150は、制御プログラムや外部プログラムの実行時のワーク領域として使用されるメモリである。
【0022】
本実施形態において、起動プログラム、及び制御プログラムから呼び出される秘匿プログラムは、メモリAでのみ実行を行うものとし、鍵情報は秘匿プログラムから読み出すものとする。また、制御プログラムと秘匿プログラム(暗号処理プログラム等)との間でのデータ入出力は、制御プログラム側のメモリ領域(メモリC150)を利用する。
【0023】
制御プログラムは、秘匿プログラムを呼び出す前に入出力領域を確保して入力データを格納した後、秘匿プログラムの処理呼び出し(関数アドレスなど)を行う。秘匿プログラムの呼び出し時には引数(レジスタやスタック等)を利用し、制御プログラムで確保したメモリ領域のアドレスやサイズの情報等を秘匿プログラムに渡す。秘匿プログラムは、入力データや鍵情報にアクセスし、データ内容に応じた処理(暗号処理等)を行った後、制御プログラムで確保した入出力領域に出力データを格納し、制御プログラムの呼び出し元へ戻る。なお、秘匿プログラムの実行中においては、メモリB140をワークメモリとして利用する。
【0024】
図3、
図4、及び
図5を参照して、第1の実施形態における暗号処理部120の動作について説明する。
図3は、第1の実施形態におけるアドレス登録処理の例を示すフローチャートである。アドレス登録処理は、暗号処理部120のアドレス登録領域121へのアドレス情報の登録や修正を行う処理である。CPUコア110からアドレス登録領域121へのアドレス情報の登録要求があると、ステップS301にて暗号処理部120は、アドレス登録領域121を参照して、CPUコア110のプログラムカウンタ111が示す現在の実行アドレス(PC値)が、アドレス登録領域121に登録されているアドレス範囲内にあるか否かを判断する。
【0025】
現在の実行アドレス(PC値)が、登録されているアドレス範囲内にあると判断した場合(S301のYES)、ステップS302にて、暗号処理部120は、アドレス登録領域121の登録用レジスタに登録されているアドレス、サイズ、有効/無効情報を読んで、登録要求に応じてアドレス登録領域121へのアドレス情報の登録や修正を行う。一方、現在の実行アドレス(PC値)が、登録されているアドレス範囲内にないと判断した場合(S301のNO)、暗号処理部120は、登録要求に応じた処理を行わずに処理を終了する。これにより、アドレス登録領域121に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードによって、アドレス登録領域121の登録情報が変更されることを防止することができる。
【0026】
図4は、第1の実施形態におけるメモリA130へのアクセス処理の例を示すフローチャートである。CPUコア110からメモリA130へのアクセス要求(リードアクセス)があると、ステップS401にて、暗号処理部120は、アドレス登録領域121を参照して、アクセス要求によってアクセスするアドレスが、アドレス登録領域121に登録されているアドレス範囲内にあるか否かを判断する。アクセスするアドレスが、登録されているアドレス範囲内にあると判断した場合(S401のYES)、暗号処理部120は、アドレス登録領域121を参照して、CPUコア110のプログラムカウンタ111が示す現在の実行アドレス(PC値)が、アドレス登録領域121に登録されているアドレス範囲内にあるか否かを判断する。
【0027】
ステップS401において、アクセスするアドレスが、登録されているアドレス範囲内にないと判断した場合(S401のNO)、又はステップS402において、現在の実行アドレス(PC値)が、登録されているアドレス範囲内にあると判断した場合(S402のYES)、ステップS403にて、暗号処理部120は、メモリA130から読み出されたデータをAES共通鍵を用いて復号してCPUコア110に転送する。
【0028】
また、ステップS402において、現在の実行アドレス(PC値)が、登録されているアドレス範囲内にないと判断した場合(S402のNO)、ステップS404にて、暗号処理部120は、メモリA130から読み出されたデータに対してAES共通鍵を用いた復号処理を施さずにCPUコア110に転送する。これにより、アドレス登録領域121に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードから、アドレス登録領域121に登録されているアドレス範囲内にアクセスがあった場合、暗号化されたデータを返し、復号されたデータを不正に取得されることを防止することができる。
【0029】
図5は、第1の実施形態におけるメモリB140へのアクセス処理の例を示すフローチャートである。前述したようにメモリB140は、秘匿プログラムの実行時のワーク領域として使用されるメモリ領域であり、暗号化されずにデータが記憶されている。CPUコア110からメモリB140へのアクセス要求(リードアクセス)があると、ステップS501にて、暗号処理部120は、アドレス登録領域121を参照して、CPUコア110のプログラムカウンタ111が示す現在の実行アドレス(PC値)が、アドレス登録領域121に登録されているアドレス範囲内にあるか否かを判断する。
【0030】
現在の実行アドレス(PC値)が、登録されているアドレス範囲内にあると判断した場合(S501のYES)、ステップS502にて、暗号処理部120は、メモリB140から読み出されたデータに対して復号処理を施さずにCPUコア110に転送する。一方、現在の実行アドレス(PC値)が、登録されているアドレス範囲内にないと判断した場合(S501のNO)、暗号処理部120は、アクセス不可とする(特定値を返す、又は例外処理とする)。これにより、アドレス登録領域121に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードから、メモリB140へのアクセスを防ぐことができる。
【0031】
次に、第1の実施形態におけるプロセッサシステムでの動作について説明する。まず、第1の実施形態におけるプロセッサシステムで実行するソフトウェアの準備について説明する。プロセッサシステムで実行するソフトウェアの準備は、秘匿プログラム及び鍵情報の作成、起動プログラムの作成、制御プログラムの作成、及びメモリA130への書き込みデータの作成に分けられる。
【0032】
秘匿プログラム及び鍵情報の作成では、秘匿プログラムは、制御プログラムから呼び出される処理のアドレス(関数アドレス等)を固定とし、メモリA130上で実行する形式でオブジェクトを作成する。鍵情報は、メモリA130での格納アドレスを固定として処理を作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成するようにし、秘匿プログラムの処理中に利用するワークメモリはメモリB140を利用するようにして作成する。
【0033】
起動プログラムの作成では、秘匿プログラム及び鍵情報のメモリA130での格納アドレスとサイズ情報とを予め取得しておく。そして、秘匿プログラム及び鍵情報のメモリA130での格納アドレスとサイズ情報とを暗号処理部120のアドレス登録領域121に登録する処理を実装し、メモリA130上で実行する形式でオブジェクトを作成する。
【0034】
制御プログラムの作成では、秘匿プログラムの先頭処理アドレス(関数アドレス等)や入出力領域の情報の取得に利用する引数の情報を予め取得しておく。そして、秘匿プログラムを呼び出す場合、入出力領域を確保して入力データを格納し、入出力領域の情報を引数を利用して渡すようにし、アドレス指定(関数アドレス等)で秘匿プログラムを呼び出すようにして制御プログラムを作成する。
【0035】
メモリA130への書き込みデータの作成では、秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムについて、暗号処理部120に格納されるAES共通鍵で暗号化し、それぞれのメモリA130での格納アドレスとサイズ情報を基に書き込みデータを作成して、メモリA130へ書き込みを行う。このようにして、秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムの暗号化されたデータをメモリA130に書き込み、
図6に示すような動作が行われる。
【0036】
図6は、第1の実施形態におけるプロセッサシステムでの秘匿プログラムの実行を含む動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップS601にて、プロセッサシステムは、起動プログラムを実行する。ステップS601での起動プログラムの実行では、CPUコア110及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、CPUコア110が、メモリA130に格納されている秘匿プログラム及び鍵情報のアドレス範囲を、暗号処理部120のアドレス登録領域121に登録し、制御プログラムを起動する(制御プログラムのアドレスへジャンプする)。
【0037】
続く、ステップS602にて、CPUコア110が、制御プログラムを実行する。制御プログラムの実行中には、例えば外部プログラムのダウンロードや外部プログラムの呼び出しなどが行われる。外部プログラムには、例えば制御プログラムの実行後にネットワーク等を介してダウンロードしたプログラムや端末を含む。また、制御プログラムの実行中には、例えば秘匿プログラムの呼び出し(関数アドレス等)が行われる。
【0038】
秘匿プログラムの呼び出しが行われると、ステップS603にて、CPUコア110が、秘匿プログラムを実行する。ステップS603での秘匿プログラムの実行では、例えばCPUコア110が、鍵情報にアクセスして暗号処理等を行う。そして、秘匿プログラムの処理が終了すると、制御プログラムに戻る。
【0039】
以上のように第1の実施形態では、
図7に示すようにメモリA130に起動プログラム701、制御プログラム702、秘匿プログラム(暗号処理等)及び鍵情報703の命令コード等を含むデータをAES共通鍵で暗号化して格納する。また、メモリA130に格納されている起動プログラム701、秘匿プログラム(暗号処理等)及び鍵情報703のアドレス範囲を暗号処理部120に登録する。
【0040】
プロセッサ100が、起動プログラム、制御プログラム、秘匿プログラムの処理を実行する際には、メモリA130から暗号化されたデータ721を読み出し、プロセッサ100内の暗号処理部120で復号処理を行う。そして、暗号処理部120で復号された平文データ722をCPUコア110に供給して処理を実行する。
【0041】
例えば、起動プログラムは、秘匿プログラム(暗号処理等)及び鍵情報703のアドレス範囲を暗号処理部120に登録し、その後に制御プログラムを起動する。制御プログラムは秘匿プログラム(暗号化処理や復号処理等)を呼び出し(P701)、呼び出された秘匿プログラムは鍵情報にアクセスして暗号処理等を行う。また、制御プログラムは外部プログラムを必要に応じて呼び出す(P702)ことがある。
【0042】
ここで第1の実施形態では、暗号化されたデータの復号において、暗号処理部120は、登録されているアドレス範囲(
図7に示す例では起動プログラム701、秘匿プログラム(暗号処理等)及び鍵情報703のアドレス範囲)に格納されている暗号化されたデータについては、現在の実行アドレス(PC値)が登録されているアドレス範囲内にある場合には復号処理を施し、登録されているアドレス範囲内にない場合には復号処理を施さない。すなわち、現在の実行アドレス(PC値)が登録されているアドレス範囲の範囲外である場合、登録されているアドレス範囲に格納されている暗号化されたデータは復号されずに暗号化された状態でCPUコア110に転送されることとなる。
【0043】
このように第1の実施形態では、各種プログラムや鍵情報等のデータをAES共通鍵で暗号化してメモリA130に格納する。したがって、メモリA130からのデータ読み取り等の物理攻撃が行われても、各種プログラムや鍵情報等のデータが漏洩することがない。
【0044】
また、暗号処理部120に、起動プログラムのアドレス範囲を事前に登録しておくとともに、登録されたアドレス範囲に格納されている起動プログラムや秘匿プログラムによって秘匿プログラムや鍵情報の秘匿データを格納するアドレス範囲を登録する。そして、現在の実行アドレス(PC値)が登録されているアドレス範囲の範囲外である場合、登録されているアドレス範囲に格納されている暗号化されたデータは復号されずに暗号化された状態でCPUコア110に転送する。これにより、外部プログラム711が、起動プログラム701や秘匿プログラム(暗号処理等)及び鍵情報703を読み出そうとした場合(P703)、外部プログラムの実行アドレス(PC値)が、登録されているアドレス範囲内にないため、起動プログラム701や秘匿プログラム(暗号処理等)及び鍵情報703のデータは暗号化された状態で読み出されるので漏洩することがない。
【0045】
このようにCPUコア110の実行アドレスやアクセスアドレスと登録されているアドレス範囲とを比較する回路等を設けることで、起動前から起動後まで起動プログラム701や秘匿プログラム(暗号処理等)及び鍵情報703のデータが漏洩することを防ぐことができ、実装及び開発のコストが増大することを抑制し、起動前から起動後まで起動プログラム701や秘匿プログラム(暗号処理等)及び鍵情報703のデータのセキュリティを確保することが可能となる。なお、制御プログラムに関しては、特に制約はなく、メモリA130やメモリC150に自由に配置して動作させることができるので、従来のプログラムとの親和性が高くコストの増大を抑制することができる。
【0046】
次に、メモリA130に格納される秘匿プログラム及び鍵情報の更新及び切り替えについて説明する。秘匿プログラム及び鍵情報を更新する場合、更新データの認証を行った後にメモリA130に書き込む必要がある。本実施形態では、更新データの認証を行う秘匿プログラムがメモリA130上で実行されるため、同じ領域への書き込みを行うことができない。そこで、本実施形態では、
図8に示すように秘匿プログラム及び鍵情報の更新及び切り替えを行う。
【0047】
図8は、第1の実施形態における秘匿プログラム及び鍵情報の更新方法を説明する図である。
図8(A)に示すように、メモリA130に、起動プログラム801、制御プログラム802、プログラム切り替え判断/更新処理プログラム803、秘匿プログラムA及び鍵情報A804の命令コード等を含むデータがAES共通鍵で暗号化されて格納されている。また、メモリA130に格納されている起動プログラム801、プログラム切り替え判断/更新処理プログラム803、秘匿プログラムA及び鍵情報A804のアドレス範囲が暗号処理部120に登録されている。
【0048】
秘匿プログラムB及び鍵情報B806に更新するとき、制御プログラム802がプログラム切り替え判断/更新処理プログラム803に対して更新依頼を行う(P801)。更新依頼を受けたプログラム切り替え判断/更新処理プログラム803は、現在有効な秘匿プログラムA804を呼び出し、秘匿プログラムAが鍵情報Aを使用して更新データ806の署名確認を行う(P803)。
【0049】
その結果、署名が正しければ、秘匿プログラムB及び鍵情報B806のデータをAES共通鍵で暗号化してメモリA130のブランク領域805Aに書き込む(P803)。なお、ブランク領域805Aのアドレス範囲については、秘匿プログラムB及び鍵情報B806の暗号化されたデータを書き込む前に、起動プログラム又は秘匿プログラムAによって暗号処理部120に登録しておけば良い。
【0050】
このようにして
図8(B)に示すように、さらに、秘匿プログラムB及び鍵情報B805の暗号化されたデータがメモリA130に格納され、秘匿プログラムB及び鍵情報B805のアドレス範囲が暗号処理部120に登録された状態での運用時について説明する。制御プログラム801から秘匿プログラムの呼び出し(P811)が行われると、プログラム切り替え判断/更新処理プログラム803が、メモリA130に格納されている秘匿プログラム及び鍵情報のいずれが最新のものであるかを判断する。そして、プログラム切り替え判断/更新処理プログラム803が、最新であると判断した秘匿プログラムを呼び出し(P812)、秘匿プログラムが実行される。
【0051】
図9は、第1の実施形態における秘匿プログラム及び鍵情報の更新処理の例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップS901にて、プロセッサシステムは、起動プログラムを実行する。ステップS901での起動プログラムの実行では、CPUコア110及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、CPUコア110が、メモリA130に格納されているプログラム切り替え判断/更新処理プログラム、秘匿プログラム及び鍵情報のアドレス範囲を暗号処理部120に登録し、制御プログラムを起動する(制御プログラムのアドレスへジャンプする)。
【0052】
続く、ステップS902にて、CPUコア110が、制御プログラムを実行する。制御プログラムの実行において、秘匿プログラム及び鍵情報の更新データを受信して、プログラム切り替え判断/更新処理プログラムの呼び出しを行う。プログラム切り替え判断/更新処理プログラムが呼び出され実行されると、ステップS903にて、CPUコア110が、どの秘匿プログラムが有効であるかを判断して、有効な秘匿プログラムの呼び出しを行う(本例では、秘匿プログラムAを呼び出すものとする)。
【0053】
秘匿プログラムAの呼び出しが行われると、ステップS904にて、CPUコア110が、秘匿プログラムAを実行する。ステップS904での秘匿プログラムAの実行では、CPUコア110が、鍵情報Aにアクセスして更新データの署名確認を行う。その結果、署名が正しければ、メモリA130に新たな秘匿プログラム及び鍵情報の暗号化されたデータを書き込み、制御プログラムに戻る。
【0054】
図10は、第1の実施形態における秘匿プログラム及び鍵情報の更新後の動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップS1001にて、プロセッサシステムは、起動プログラムを実行する。ステップS1001での起動プログラムの実行では、CPUコア110及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、CPUコア110が、メモリA130に格納されているプログラム切り替え判断/更新処理プログラム、秘匿プログラム及び鍵情報のアドレス範囲を暗号処理部120に登録し、制御プログラムを起動する(制御プログラムのアドレスへジャンプする)。
【0055】
続く、ステップS1002にて、CPUコア110が、制御プログラムを実行する。制御プログラムの実行において、プログラム切り替え判断/更新処理プログラムの呼び出しを行う。プログラム切り替え判断/更新処理プログラムが呼び出され実行されると、ステップS1003にて、CPUコア110が、どの秘匿プログラムが最新(有効)であるかを判断して、最新の秘匿プログラムの呼び出しを行う(本例では、秘匿プログラムBを呼び出すものとする)。
【0056】
秘匿プログラムBの呼び出しが行われると、ステップS1004にて、CPUコア110が、秘匿プログラムBを実行する。ステップS1004での秘匿プログラムBの実行では、例えばCPUコア110が、鍵情報Bにアクセスして暗号処理等を行う。そして、秘匿プログラムBの処理が終了すると、制御プログラムに戻る。
【0057】
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。
図11は、第2の実施形態におけるプロセッサシステムの構成例を示す図である。第2の実施形態におけるプロセッサシステムは、CPUコア1110、暗号処理部1120、メモリA1130、メモリB1140、及びデバイス1150を有する。暗号処理部1120、メモリA1130、及びメモリB1140は、バス1161によって相互に接続されている。なお、CPUコア1110は、図示しないバスを介して他の機能部等とも接続されている。CPUコア1110は、プログラムの命令コードに従って処理を実行する。
【0058】
暗号処理部1120は、メモリA1130やメモリB1140との間で入出力されるデータを暗号化したり復号したりする機能を有する。本実施形態では、メモリA1130やメモリB1140に格納されるデータの暗号化処理及び復号処理は、共通鍵暗号方式におけるAES暗号方式で行われるものとする。
【0059】
暗号処理部1120は、システム毎に異なるID情報1121を保持するとともに、鍵やアドレス情報が登録されるメモリ領域であるアドレス登録領域1122を有する。また、暗号処理部1120は、RSA(Rivest Shamir Adleman)秘密鍵1123及びRSA公開鍵1124を保持する。暗号処理部1120に保持されるRSA秘密鍵1123及びRSA公開鍵1124は、システムにおける初回の電源投入時に1度だけ生成されるものであり、暗号処理部1120に保持されたRSA秘密鍵1123及びRSA公開鍵1124は消去不可とされる。また、暗号処理部1120に保持されたRSA公開鍵1124については、読み込み専用でアクセス可能となっている。
【0060】
アドレス登録領域1122には、
図12に一例を示すように、アクセス制限するアドレス範囲に格納されたデータの暗号化に使用したAES共通鍵、鍵長、アドレス範囲のアドレス(先頭アドレス)、サイズ、及び有効/無効情報を含む。
図12に示した例において、登録番号1の登録用レジスタに登録される情報は、起動プログラムに対応する、予め登録されている消去不可な情報である。登録番号3以降の登録用レジスタに登録される情報は、起動プログラムや秘匿プログラム等の実行時に追加登録される情報である。なお、登録番号2に示すように、消去不可な情報を加えて登録しておくようにしても良い。
【0061】
暗号処理部1120は、CPUコア1110が有するプログラムカウンタ(PC)1111のPC値(実行アドレス)を監視する機能を有する。暗号処理部1120は、メモリA1130及びメモリB1140に対するアクセスアドレスを監視する機能を有する。また、暗号処理部1120は、例えばネットワークデバイスやキーボード等の特定のデバイス1150へのアクセスの有効/無効を制御する機能を有する。暗号処理部120は、プログラムカウンタ(PC)111のPC値(実行アドレス)、CPUコア1110からのアクセスアドレス、及びアドレス登録領域121に登録されているアドレス情報に応じて、データに対する暗号化処理や復号処理を行うか否かを切り替えたり、アクセスの有効/無効を制御したりする。
【0062】
メモリA1130には、AES共通鍵で暗号化された起動プログラム1131、AES共通鍵で暗号化された制御プログラムなど1132、及びAES共通鍵で暗号化された秘匿プログラム及び鍵情報1133が格納される。メモリA1130は、例えば外部ROMである。外部ROMとしては、例えばマスクROMや、OTROM、EEPROM、フラッシュメモリ等のPROMが適用可能である。メモリB1140は、各プログラムの実行時のワーク領域として使用されるとともに、システムの運用中にAES共通鍵で暗号化された秘匿プログラム及び鍵情報1141が格納可能となっている。
【0063】
本実施形態において、制御プログラムと秘匿プログラム(暗号処理プログラム等)との間でのデータ入出力は、メモリB
1140を利用する。制御プログラムは、秘匿プログラムを呼び出す前に入出力領域を確保して入力データを格納した後、秘匿プログラムの処理呼び出し(関数アドレスなど)を行う。秘匿プログラムの呼び出し時には引数(スタックやレジスタ等)を利用し、制御プログラムで確保したメモリ領域のアドレスやサイズの情報等を秘匿プログラムに渡す。秘匿プログラムは、入力データや鍵情報にアクセスし、データ内容に応じた処理(暗号処理等)を行った後、制御プログラムで確保した入出力領域に出力データを格納し、制御プログラムの呼び出し元へ戻る。
【0064】
図13及び
図14を参照して、第2の実施形態における暗号処理部1120の動作について説明する。
図13は、第2の実施形態におけるアドレス登録処理の例を示すフローチャートである。アドレス登録処理は、暗号処理部1120のアドレス登録領域1122への情報の登録や修正を行う処理である。CPUコア1110からアドレス登録領域1122へのアクセス要求があると、ステップS1301にて暗号処理部1120は、アドレス登録領域1122を参照して、CPUコア1110のプログラムカウンタ1111が示す現在の実行アドレス(PC値)が、アドレス登録領域1122に登録されているアドレス範囲内にあるか否かを判断する。
【0065】
現在の実行アドレス(PC値)が、登録されているアドレス範囲内にあると判断した場合(S1301のYES)、ステップS1302にて、暗号処理部1120は、アクセス要求がアドレス登録領域1122に登録されている情報の出力要求であるか否かを判断する。登録されている情報の出力要求であると判断した場合(S1302のYES)、ステップS1303にて、暗号処理部1120は、アドレス登録領域1122を参照して、登録されている情報(登録番号、AES共通鍵のハッシュ値、鍵長、アドレス、サイズ、有効/無効情報)を出力する。
【0066】
ステップS1302での判断の結果、登録されている情報の出力要求ではないと判断した場合(ステップS1302のNO)、ステップS1304にて、暗号処理部1120は、アクセス要求がRSA暗号化なしでの新規登録要求であるか否かを判断する。RSA暗号化なしでの新規登録要求であると判断した場合(S1304のYES)、ステップS1305にて、暗号処理部1120は、アドレス登録領域1122を参照して、新規登録する情報のアドレス範囲と登録されている情報のアドレス範囲とがオーバーラップしないかを判断する。
【0067】
そして、アドレス範囲がオーバーラップしないと判断した場合(S1305のYES)、ステップS1306にて、暗号処理部1120は、登録番号、コピーするAES共通鍵の登録番号、鍵長、アドレス、サイズ、有効/無効情報を読み込み、アドレス登録領域1122の所定の登録番号にAES共通鍵、鍵長、アドレス、サイズ、有効/無効情報を登録する。一方、アドレス範囲がオーバーラップすると判断した場合(S1305のNO)、ステップS1307にて、暗号処理部1120は、エラー情報を出力する。
【0068】
ステップS1304での判断の結果、RSA暗号化なしでの新規登録要求ではないと判断した場合(ステップS1304のNO)、ステップS1308にて、暗号処理部1120は、アクセス要求がRSA暗号化ありでの新規登録要求であるか否かを判断する。RSA暗号化ありでの新規登録要求であると判断した場合(S1308のYES)、ステップS1309にて、暗号処理部1120は、アドレス登録領域1122を参照して、新規登録する情報のアドレス範囲と登録されている情報のアドレス範囲とがオーバーラップしないかを判断する。
【0069】
そして、アドレス範囲がオーバーラップしないと判断した場合(S1309のYES)、ステップS1310にて、暗号処理部1120は、RSA公開鍵で暗号化された登録番号、AES共通鍵、鍵長、アドレス、サイズ、有効/無効情報を読み込んでRSA秘密鍵で復号し、アドレス登録領域1122の所定の登録情報にAES共通鍵、鍵長、アドレス、サイズ、有効/無効情報を登録する。一方、アドレス範囲がオーバーラップすると判断した場合(S
1309のNO)、ステップS1311にて、暗号処理部1120は、エラー情報を出力する。
【0070】
ステップS1308での判断の結果、RSA暗号化ありでの新規登録要求ではないと判断した場合(ステップS1308のNO)、ステップS1312にて、暗号処理部1120は、アクセス要求が登録されている情報の有効化又は無効化の要求であるか否かを判断する。情報の有効化又は無効化の要求であると判断した場合(S1312のYES)、ステップS1313にて、暗号処理部1120は、登録番号及び有効化するか又は無効化するかの情報を受け、その登録番号の情報を有効化又は無効化する。これにより、特定の登録番号に対応するAES復号機能の有効化、無効化を制御することが可能となる。
【0071】
ステップS1301で現在の実行アドレス(PC値)が、登録されているアドレス範囲内にないと判断した場合(S1301のNO)、又はステップS1312でアクセス要求が登録されている情報の有効化又は無効化の要求ではないと判断した場合、暗号処理部120は、要求に応じた処理を行わずに処理を終了する。このように処理を行うことで、アドレス登録領域121に登録されているアドレス範囲の範囲外で実行された外部プログラム等のコードによって、アドレス登録領域121の登録情報が変更されることを防止することができる。
【0072】
図14は、第2の実施形態における暗号処理部1120の暗号化/復号処理の例を示すフローチャートである。CPUコア1110からのアクセス要求があると、ステップS1401にて、暗号処理部1120は、アドレス登録領域1122を参照して、CPUコア1110のプログラムカウンタ1111が示す現在の実行アドレス(PC値)が、アドレス登録領域1122に登録されているアドレス範囲内にあるか否かを判断する。
【0073】
現在の実行アドレス(PC値)が、登録されているアドレス範囲内にあると判断した場合(S1401のYES)、ステップS1402にて、暗号処理部1120は、アクセス要求が読み込み要求であるか書き込み要求であるかを判断する。読み込み要求であると判断した場合、ステップS1403にて、暗号処理部1120は、アドレス登録領域1122を参照して、読み込み先アドレスが実行アドレスと同一のアドレス範囲内にあるか否かを判断する。
【0074】
読み込み先アドレスが実行アドレスと同一のアドレス範囲内にあると判断した場合(S1403のYES)、ステップS1404にて、暗号処理部1120は、読み込み先アドレスから読み出されたデータを、実行アドレスに対応するAES共通鍵を用いて復号してCPUコア1110に転送する。なお、ステップS1404においては、デバイス1150のアクセスである場合にはアクセス許可とする。一方、読み込み先アドレスが実行アドレスと同一のアドレス範囲内にないと判断した場合(S1403のNO)、ステップS1405にて、暗号処理部1120は、読み込み先アドレスから読み出されたデータに対してAES共通鍵を用いた復号処理を施さずにCPUコア1110に転送する。
【0075】
また、ステップS1402で書き込み要求であると判断した場合、ステップS1406にて、暗号処理部1120は、アドレス登録領域1122を参照して、書き込み先アドレスが実行アドレスと同一のアドレス範囲内にあるか否かを判断する。
【0076】
書き込み先アドレスが実行アドレスと同一のアドレス範囲内にあると判断した場合(S1406のYES)、ステップS1407にて、暗号処理部1120は、書き込み先アドレスへ書き込むデータを、実行アドレスに対応するAES共通鍵を用いて暗号化して書き込みを行う。一方、書き込み先アドレスが実行アドレスと同一のアドレス範囲内にないと判断した場合(S1406のNO)、ステップS1408にて、暗号処理部1120は、書き込み先アドレスへ書き込むデータに対してAES共通鍵を用いた暗号化処理を施さずに書き込みを行う。
【0077】
ステップS1401において、現在の実行アドレス(PC値)が、登録されているアドレス範囲内にないと判断した場合(S1401のNO)、ステップS1409にて、暗号処理部1120は、アドレス登録領域1122を参照して、読み込み先アドレス又は書き込み先アドレスがアドレス登録領域1122に登録されているアドレス範囲内にあるか否かを判断する。読み込み先アドレス又は書き込み先アドレスが、登録されているアドレス範囲内にあると判断した場合(S1409のYES)、ステップS1410にて、暗号処理部1120は、データに対する暗号化処理及び復号処理を施さずに転送する。なお、ステップS1410においては、デバイス1150のアクセスである場合にはアクセス不許可とする。読み込み先アドレス又は書き込み先アドレスが、登録されているアドレス範囲内にないと判断した場合(S1409のNO)、何もせずに処理を終了する。
【0078】
このように処理を行うことで、アドレス登録領域1122に登録されているアドレス範囲において、同じアドレス範囲からのアクセスによってのみデータに対する暗号化処理及び復号処理が施されるので、データの漏洩を防止することができる。
【0079】
次に、第2の実施形態におけるプロセッサシステムでの動作について説明する。まず、第2の実施形態におけるプロセッサシステムで実行するソフトウェアの準備について説明する。プロセッサシステムで実行するソフトウェアの準備は、秘匿プログラム及び鍵情報の作成(メモリA1130書き込み用)、制御プログラムの作成、起動プログラムの作成、秘匿プログラム及び鍵情報の作成(配信用)、及び新規登録情報の作成(配信用)に分けられる。
【0080】
秘匿プログラム及び鍵情報の作成(メモリA1130書き込み用)では、秘匿プログラム及び鍵情報は、制御プログラムから呼び出される処理のアドレス(関数アドレス等)を固定としてオブジェクトを作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成する。そして、暗号処理部1120に実装されたAES共通鍵(起動プログラムに対応する鍵以外の鍵)で暗号化する。
【0081】
制御プログラムの作成では、ネットワーク等を介して外部から新規登録情報(配信用)を受け取り、実装されたID情報と照合し一致した場合に、暗号処理部1120のアドレス登録領域1122へRSA暗号化ありで新規登録を行う処理を制御プログラムに実装する。また、ネットワーク等を介して外部から秘匿プログラム及び鍵情報(配信用)を受け取り、実装されたID情報と照合し一致した場合に、所定のアドレスに配置した後、秘匿プログラムを呼び出す処理を制御プログラムに実装する(処理の実行後に、ハッシュ情報を配信元へ返却する処理を合わせて実装するようにしても良い)。秘匿プログラム及び鍵情報(メモリA1130書き込み用)の秘匿プログラムを呼び出す処理や、暗号処理部1120からID情報やアドレス登録情報を取得して内部のアプリケーションや外部の配信者に送る処理を制御プログラムに実装する。そして、暗号処理部1120に実装されたAES共通鍵(起動プログラムに対応する鍵以外の鍵)で暗号化する。
【0082】
起動プログラムの作成では、秘匿プログラム及び鍵情報(メモリA1130書き込み用)及び制御プログラムについて、暗号処理部1120へRSA暗号化なしで新規登録を行う処理を起動プログラムに実装する。そして、暗号処理部1120に実装された、起動プログラムに対応するAES共通鍵で暗号化する。このようにして作成された秘匿プログラム、鍵情報、起動プログラム、及び制御プログラムの暗号化されたデータをメモリA1130に書き込む。
【0083】
秘匿プログラム及び鍵情報の作成(配信用)では、秘匿プログラム及び鍵情報は、制御プログラムから呼び出される処理のアドレス(関数アドレス等)を固定としてオブジェクトを作成する。また、制御プログラムとの間でデータ入出力を行うための入出力領域の情報は、引数を利用して取得し処理を作成する。自身の秘匿プログラム及び鍵情報のハッシュ値を取り、鍵情報で暗号化した上で制御プログラムへ返却する処理を作成する。そして、新規登録用のAES共通鍵を生成して暗号化する。
【0084】
また、新規登録情報の作成(配信用)では、秘匿プログラム及び鍵情報の作成(配信用)で作成したAES共通鍵と秘匿プログラムの実行アドレス、サイズ、有効/無効情報を暗号処理部1120で作成されたRSA公開鍵で暗号化する。秘匿プログラム及び鍵情報の作成(配信用)、及び新規登録情報の作成(配信用)で作成されたデータは、作成情報にID情報(配信者特定情報)を加え、セキュリティ保護されたネットワーク等を介して配信される。
【0085】
ここで、仮に起動プログラム用のAES共通鍵が漏洩した場合、起動プログラムについては解析可能となるが、本実施形態では起動プログラムにAES共通鍵を実装しておらず、秘匿プログラムは別のAES共通鍵で暗号化しているため解析されることはない。また、秘匿プログラム(メモリA1130書き込み用)の暗号化に用いたAES共通鍵が漏洩した場合、秘匿プログラム(メモリA1130書き込み用)については解析可能となるが、本実施形態では外部から安全に新規のAES共通鍵を登録して別の秘匿プログラムを実行することができるため、AES共通鍵の漏洩に対する対応が可能となる。
【0086】
図15は、第2の実施形態におけるプロセッサシステムでの秘匿プログラムの実行を含む動作例を示すフローチャートである。システムへ電源が投入されリセットが解除された後、まず、ステップS1501にて、プロセッサシステムは、起動プログラムを実行する。ステップS1501での起動プログラムの実行では、CPUコア1110及び周辺部の初期化処理等が行われる。そして、初期化処理等が終了した後、CPUコア1110が、メモリA1130に格納されている秘匿プログラム及び鍵情報について、暗号処理部1120のアドレス登録領域1122にRSA暗号化なしで登録し、制御プログラムを起動する。
【0087】
続く、ステップS1502にて、CPUコア1110が、制御プログラムを実行する。制御プログラムの実行中には、例えば外部プログラムのダウンロードや外部プログラムの呼び出しや秘匿プログラムの呼び出しなどが行われる。また、制御プログラムの実行中には、例えば外部から新規登録情報を受け取り、実装されたID情報と照合し一致した場合に、暗号処理部1120へRSA暗号化ありで新規登録を行ったり、外部から秘匿プログラム及び鍵情報を受け取り、実装されたID情報と照合し一致した場合に、所定のアドレスに配置した後、秘匿プログラムの呼び出しを行ったりする処理を行う。また、暗号処理部1120からID情報やアドレス登録情報を取得して内部のアプリケーションや外部の配信者に送る処理を行う。
【0088】
制御プログラムの実行において秘匿プログラム(メモリA1130書き込み用)の呼び出しが行われると、ステップS1503にて、CPUコア1110が秘匿プログラムを実行し、例えば鍵情報にアクセスして暗号処理等を行う。秘匿プログラム(メモリA1130書き込み用)の処理が終了すると、制御プログラムに戻る。
【0089】
また、制御プログラムの実行において秘匿プログラム(配信用)の呼び出しが行われると、ステップS1504にて、自身の秘匿プログラム及び鍵情報のハッシュ値を取り、鍵情報で暗号化した上で制御プログラムへ返却する。また、CPUコア1110が秘匿プログラムを実行し、例えば鍵情報にアクセスして暗号処理等を行う。秘匿プログラム(配信用)の処理が終了すると、制御プログラムに戻る。
【0090】
以上のように第2の実施形態において、
図7に示した第1の実施形態と同様にメモリA1130に起動プログラム、制御プログラム、秘匿プログラム(暗号処理等)及び鍵情報の命令コード等を含むデータをAES共通鍵で暗号化して格納し、メモリA1130に格納されている起動プログラム、秘匿プログラム(暗号処理等)及び鍵情報のアドレス範囲を暗号処理部1120に登録したとする。この場合には、各種プログラムや鍵情報等のデータをAES共通鍵で暗号化してメモリA1130に格納しているので、メモリA1130からのデータ読み取り等の物理攻撃が行われても、各種プログラムや鍵情報等のデータが漏洩することがない。また、登録されたアドレス範囲に格納されているデータを、同じアドレス範囲内ではないプログラム等によって読み出そうとした場合、データが暗号化された状態で読み出されて転送されるので漏洩することがない。
【0091】
また、
図16に示すようにメモリA1130に起動プログラム1601及び制御プログラム1602のデータを第1のAES共通鍵で暗号化して格納し、秘匿プログラム(暗号処理等)及び鍵情報1603のデータを第1のAES共通鍵とは異なる第2のAES共通鍵で暗号化してメモリB1140に格納する。そして、プロセッサ1100が、起動プログラム、制御プログラム、秘匿プログラムの処理を実行する際には、メモリA1130又はメモリB1140から暗号化されたデータ1621を読み出し、プロセッサ1100内の暗号処理部1120で復号処理を行う。そして、暗号処理部1120で復号された平文データ1622をCPUコア1110に供給して処理を実行する。
【0092】
例えば、秘匿プログラムをメモリA1130からメモリB1140に展開、又はネットワーク等を介してダウンロードしてメモリB1140に保持し、制御プログラムが秘匿プログラム(暗号化処理や復号処理等)を呼び出し(P1601)、呼び出された秘匿プログラムは鍵情報にアクセスして暗号処理等を行う。また、制御プログラムは外部プログラムを必要に応じて呼び出す(P1602)ことがある。
【0093】
第2の実施形態では、暗号化されたデータの復号において、暗号処理部1120は、登録されているアドレス範囲に格納されている暗号化されたデータについては、現在の実行アドレス(PC値)が登録されているアドレス範囲内にあり、かつ現在の実行アドレス(PC値)とアクセス先のアドレスが同じアドレス範囲である場合に暗号化処理や復号処理を施し、そうでない場合には暗号化処理や復号処理を施さない。したがって、外部プログラム1604が、秘匿プログラム(暗号処理等)及び鍵情報1603を読み出そうとしても(P1603)、データが漏洩することはない。
【0094】
このようにCPUコア1110の実行アドレスやアクセスアドレスと登録されているアドレス範囲とを比較する回路等を設けることで、起動前から起動後まで秘匿プログラム(暗号処理等)及び鍵情報のデータ等が漏洩することを防ぐことができ、実装及び開発のコストが増大することを抑制し、起動前から起動後まで秘匿するデータのセキュリティを確保することが可能となる。なお、制御プログラムに関しては自由に配置して動作させることができるので、従来のプログラムとの親和性が高くコストの増大を抑制することができる。
【0095】
次に、メモリA1130に格納される秘匿プログラム及び鍵情報の更新及び切り替えについて説明する。第2の実施形態においては、
図8に示した第1の実施形態と同様の方法で秘匿プログラム及び鍵情報の更新及び切り替えを行うことが可能である。また、第2の実施形態では、
図17に示すようにしても秘匿プログラム及び鍵情報の更新及び切り替えを行うことが可能である。
【0096】
図17は、第2の実施形態における秘匿プログラム及び鍵情報の他の更新方法を説明する図である。
図17(A)に示すように、秘匿プログラムB及び鍵情報B1705に更新するとき、メモリA1130に、起動プログラム1701及び制御プログラム1702のデータが第1のAES共通鍵で暗号化されて格納されており、メモリB1140に、秘匿プログラムA及び鍵情報A1704のデータが第2のAES共通鍵で暗号化されて格納されている状態とする。
【0097】
秘匿プログラムB及び鍵情報B1705に更新する際、制御プログラム1702は、現在有効な秘匿プログラムA1704を呼び出し(P1701)、秘匿プログラムAが鍵情報Aを使用して更新データ1705の署名確認を行う(P1702)。その結果、署名が正しければ、秘匿プログラムB及び鍵情報B1705のデータを第3のAES共通鍵で暗号化してメモリA1130のブランク領域1703Aに書き込む(P1703)。
【0098】
このようにして
図17(B)に示すように、第1のAES共通鍵で暗号化された起動プログラム1701及び制御プログラム1702のデータ、及び第3のAES共通鍵で暗号化された秘匿プログラムB及び鍵情報B1703Bの暗号化されたデータがメモリA1130に格納される。運用時において制御プログラム1701は、秘匿プログラムB1703Bの呼び出し(P1711)、秘匿プログラムが実行される。
【0099】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。