説明

プログラム実装方法および情報処理装置

【課題】鍵実装システムについて、セキュリティレベルの高い開発環境を提供する。
【解決手段】セキュアメモリを備えたLSIを有するシステムについて、構成が共通のLSIを、<商品動作モード>とは異なる<開発モード>に設定して、プログラムの開発を行う。また、<アドミニストレータモード>に設定して鍵生成プログラムの開発および暗号化を行い、<鍵生成モード>に設定して、暗号化された鍵生成プログラムを実行させて各種の鍵を生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、鍵実装されたシステムやこれに用いるLSIのプログラム開発やプログラム実装に関する技術に属する。
【背景技術】
【0002】
特願2001−286881では、鍵実装システムにおいて、鍵の機密性および秘匿性を、従来よりも向上させる技術が示されている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
上述のようなシステムでは、そのプログラム開発工程や実装工程においても、いかにしてセキュリティを維持するか、ということが大きな課題となる。
【0004】
本発明は、上述のようなシステムについて、セキュリティレベルの高い、プログラム開発の方法や環境、またはプログラム実装の方法を提案するものである。
【課題を解決するための手段】
【0005】
請求項1の発明が講じた解決手段は、セキュアメモリを有するLSIと外部メモリとを有する鍵実装システムに暗号化プログラムを実装する方法として、前記セキュアメモリに、生共有鍵に係る共有鍵鍵情報と、生固有鍵に係る固有鍵鍵情報とを格納する初期値設定処理と、前記LSIにおいて、前記セキュアメモリに格納された共有鍵鍵情報から生共有鍵を得る第1のステップと、前記LSIにおいて、前記外部メモリから与えられた共有鍵暗号化プログラムを前記第1のステップで得られた生共有鍵を用いて復号する第2のステップと、前記LSIにおいて、前記セキュアメモリに格納された固有鍵鍵情報から生固有鍵を得る第3のステップと、前記LSIにおいて、前記第2のステップで得られた平文プログラムを前記第3のステップで得られた生固有鍵を用いて暗号化する第4のステップとを備え、前記第4のステップで得られた固有鍵暗号化プログラムを前記外部メモリに実装するものである。
【0006】
請求項1の発明によると、LSIに与えられた共有鍵暗号化プログラムは、セキュアメモリに格納された共有鍵鍵情報から得られた生共有鍵を用いて、復号される。そして復号された平文プログラムは、セキュアメモリに格納された固有鍵鍵情報から得られた生固有鍵を用いて、暗号化される。すなわち、共有鍵暗号化プログラムが、暗号化する鍵が共有鍵から固有鍵に変換されて、システムに実装されることになる。このため、ユーザの持つ各製品では、互いに異なる固有鍵によって暗号化されたプログラムが実装されることになり、秘匿性が向上する。また、万一、暗号を破られた場合でも、被害を受ける製品の数が限定されることになり、従来よりもセキュリティが高まる。
【0007】
請求項2の発明では、請求項1におけるLSIは、ブートプログラムを格納するブートROMを備え、前記ブートROMに格納されたブートプログラムを前記LSIに実行させることによって、前記第1〜第4のステップを実行するものとする。
【0008】
請求項3の発明では、請求項1における固有鍵鍵情報は、前記セキュアメモリの書き換え不可領域に格納されているものとする。
【0009】
請求項4の発明では、請求項1における共有鍵鍵情報は、生共有鍵を生第1中間鍵で暗号化した暗号化共有鍵と、前記生第1中間鍵を生第2中間鍵で暗号化した暗号化第1中間鍵とを含むものとし、前記生第2中間鍵は、前記LSIに実装されたプログラム暗号種を、前記暗号化共有鍵を用いて一方向関数により変換することによって生成されるものであって、前記第1のステップは、前記暗号化共有鍵および暗号化第1中間鍵と前記プログラム暗号種とを用いて前記生共有鍵を復号するものとする。
【0010】
請求項5の発明では、請求項1における固有鍵鍵情報は、生固有鍵を生第1中間鍵で暗号化した暗号化固有鍵と、前記生第1中間鍵を生第2中間鍵で暗号化した暗号化第1中間鍵とを含むものとし、前記生第2中間鍵は、前記LSIに実装されたプログラム暗号種を、前記暗号化固有鍵を用いて一方向関数により変換することによって生成されるものであって、前記第3のステップは、前記暗号化固有鍵および暗号化第1中間鍵と前記プログラム暗号種とを用いて前記生固有鍵を復号するものとする。
【0011】
請求項6の発明では、請求項1における固有鍵鍵情報は、当該LSIに固有の固有IDであるものとする。
【0012】
請求項7の発明が講じた解決手段は、情報処理装置として、前記情報処理装置の動作状態には、実装処理状態と商品動作状態とがあり、前記実装処理状態は、所定の情報を変換して、前記情報処理装置の前記商品動作状態の起動に必要な変換情報を生成する動作状態であり、前記商品動作状態は、前記変換情報を用いて、前記情報処理装置を起動させる動作状態であり、前記情報処理装置は、前記所定の情報および/または前記変換情報を格納する格納手段と、前記格納手段から前記所定の情報を読み出す読出手段と、前記所定の情報を変換して、前記変換情報を生成する変換手段と、生成された前記変換情報を、前記格納手段に書き出す書出手段と、前記格納手段に格納された前記変換情報を用いて前記情報処理装置を起動させる起動手段と、前記情報処理装置の電源が、前記情報処理装置が前記実装処理状態のときに投入された場合には、前記読出手段と前記書出手段および前記変換手段を動作させ、前記電源が、前記情報処理装置が前記商品動作状態のときに投入された場合には、起動手段を動作させる状態制御手段とを備えたものである。
【0013】
請求項8の発明では、請求項7の発明において、前記変換手段は、前記情報の変換に鍵情報を使用し、前記情報処理装置は、さらに、前記鍵情報を記録する鍵記録手段を備え、前記鍵記録手段は、前記鍵情報を、前記情報処理装置外からのアクセスから保護された状態で記録するものとする。
【0014】
請求項9の発明では、請求項7の発明において、前記書出手段による書き出しの処理が完了したとき、前記情報処理装置の動作状態を前記商品動作状態に設定する状態設定手段を備えたものとする。
【0015】
請求項10の発明では、請求項9の発明において、前記状態設定手段は、前記情報処理装置の動作状態が前記商品動作状態であるか否かを示す状態情報を記録する状態情報記録部と、前記書出手段による前記変換情報の書き出しが完了したとき、前記状態情報を、前記商品動作状態であることを示す情報に更新する状態更新部とを備えたものとする。
【0016】
請求項11の発明では、請求項10の発明において、前記状態情報記録部は、前記情報処理装置内に設けられたセキュアメモリであるものとする。
【0017】
請求項12の発明では、請求項7の発明において、前記書出手段による前記格納手段への前記変換情報の書き出しが完了したとき、前記格納手段から前記所定の情報を削除する削除手段を備えたものとする。
【発明の効果】
【0018】
以上のように本発明によると、書き換え不可領域を含むセキュアメモリを有し、高い秘匿性を持つLSIを、その動作モードを実装モードから開発モードに変えて、プログラム開発環境として用いることによって、プログラム開発環境におけるセキュリティを、従来よりも高めることができる。
【図面の簡単な説明】
【0019】
【図1】本発明の実施形態に係るセキュアLSIの構成を示すブロック図である。
【図2】図1のセキュアLSIを用いた開発および製品化の全体の流れを表す図である。
【図3】ブートプログラムの全体的な処理の流れを示すフローチャートである。
【図4】前処理SZ2のデータフローである。
【図5】鍵生成鍵の暗号化のデータフローである。
【図6】プログラム暗号化処理SA2のフローチャートである。
【図7】プログラム暗号化処理SA2のデータフローである。
【図8】鍵生成モードにおけるキージェネレータ製造処理SB1のフローチャートである。
【図9】キージェネレータ製造処理SB1のデータフローである。
【図10】キージェネレータ製造処理SB1のデータフローである。
【図11】鍵生成モードにおける鍵管理・発行処理SB2のフローチャートである。
【図12】鍵管理・発行処理SB2のデータフローである。
【図13】鍵管理・発行処理SB2のデータフローである。
【図14】開発モードにおけるプログラム暗号化処理SC1のフローチャートである。
【図15】プログラム暗号化処理SC1のデータフローである。
【図16】商品動作モードにおけるプログラム実装処理SD1のフローチャートである。
【図17】プログラム実装処理SD1のデータフローである。
【図18】プログラム実装処理SD1のデータフローである。
【図19】商品動作モードにおける通常ブート処理SD2のフローチャートである。
【図20】通常ブート処理SD2のデータフローである。
【図21】通常ブート処理SD2のデータフローである。
【図22】初期値設定処理SZ1のフローチャートである。
【発明を実施するための形態】
【0020】
以下、本発明の実施の形態について、図面を参照して説明する。なお、以下の説明では、X(鍵またはプログラム)を鍵Yを用いて暗号化して得た、暗号化された鍵またはプログラムのことを、Enc(X,Y)と表すものとする。
【0021】
図1は本実施形態に係るセキュアLSIの内部構成を示すブロック図である。図1において、セキュアLSI1は外部バス120を介して、外部メモリ(フラッシュメモリ)100や外部ツール110などと接続可能に構成されている。また、モードIDを与えることによって、その動作モードを設定することが可能になっている。
【0022】
本実施形態に関わる主な構成要素について、簡単に説明する。
【0023】
まず、セキュアLSI1は、書き換え不可領域11を含むセキュアメモリ(セキュアFlash)10を備えている。この書き換え不可領域11には、書き換え不可領域書き込みフラグ12が設けられている。書き換え不可領域書き込みフラグ12は、モードIDが一度セキュアメモリ10に書き込まれると、そのフラグ値が“可”から“済”になり、それ以降の書き換え不可領域への書き込みが不能になる。なお、本実施形態では、セキュアメモリ10および外部メモリ100はフラッシュメモリによって構成されているが、もちろんこれに限定されるものではなく、不揮発性のメモリであればどのようなものであってもかまわない。
【0024】
また、秘密鍵演算処理部20は各種の鍵、およびプログラム暗号種を格納するレジスタを備えており、暗号化処理を実行する。鍵生成・更新シーケンサ30はモードID格納レジスタ31を有し、このモードID格納レジスタ31に格納されているモードIDに応じて、秘密鍵演算処理部20の動作、すなわち、各種の鍵を生成できるか否かを制御する。また、鍵またはプログラムがどのようなアルゴリズムや鍵長で暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ32を備えている。さらに、プログラム暗号種33が実装されている。
【0025】
モードシーケンサ40も、モードID格納レジスタ41を備えており、モードID格納レジスタ41に格納されているモードIDと、ジャンパー43の値に応じて、外部ホストインターフェース(I/F)50の動作、すなわち、外部メモリ100に格納されたプログラムやデータをどのI/Fを介して読み込むか、を制御する。これにより、外部メモリ100に格納された平文プログラムが実行できるか否かを制御することができる。さらに、モードシーケンサ40は、鍵がどの手法によって暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ42を備えている。
【0026】
外部ホストI/F50は、モードシーケンサ40の制御に従って、プログラム処理部51が有するスルー部52、遅延部53およびプログラム復号用暗号エンジン54、並びに、データ処理部55が有するスルー部56およびコンテンツ暗号・復号用暗号エンジン57のうちのいずれかを介して、外部メモリ100や外部ツール110との間でプログラムやデータの入出力を行う。
【0027】
ここで、後述するアドミニストレータモードを除いては、スルー部52を介して入力されたプログラムは、セキュアLSI1内部では実行されることはない。すなわち、スルー部52は、平文プログラムの暗号化、またはすでに暗号化されたプログラムを別の鍵を用いて再暗号化するときに有効とされるものであり、セキュアLSI1は、後述するアドミニストレータモードを除いては、スルー部52を介して入力されたプログラムへは動作を遷移しないように構成されている。したがって、例えば商品となったセキュアLSI1はスルー部52を介して平文プログラムを取り込んだとしても、これを実行することはできない。なお、平文プログラムを実行するときは、セキュアLSI1は遅延部53を介してプログラムをその内部に入力する。
【0028】
ブートROM60は、セキュアLSI1の起動動作を制御するブートプログラムを格納している。HASH演算部70は、セキュアLSI1に読み込まれたプログラムについてその正当性を検証するために、HASH値を演算する。
【0029】
また、外部メモリ100には、プログラムやコンテンツが格納されている。外部ツール110には、セキュアLSI1の最初の起動時にセキュアメモリ10に格納する各種の初期値が格納されている。この初期値の種類は、設定される動作モードに応じて、異なったものになる。
【0030】
図2は図1のセキュアLSI1を用いた開発および製品化の全体の流れを表す図である。図2に示すように、セキュアLSI1は、アドミニストレータモード(モードID:00)、鍵生成モード(モードID:01)、開発モード(モードID:10)および商品動作モード(モードID:11)の4種類の動作モードで、動作する。
【0031】
まず、アドミニストレータモードに設定されたセキュアLSI1は、管理者用LSIとして、動作する。管理者用LSIでは、鍵生成プログラムが開発され、また、その鍵生成プログラムが任意の鍵生成鍵を用いて暗号化される。
【0032】
鍵生成モードに設定されたセキュアLSI1は、鍵生成用LSIとして、動作する。鍵生成用LSIでは、管理者用LSIにおいて生成された、暗号化された鍵生成プログラムが実装され、この鍵生成プログラムを実行することによって、各種の鍵が生成される。
【0033】
開発モードに設定されたセキュアLSI1は、開発用LSIとして、動作する。開発用LSIでは、実際の製品で実行されるアプリケーション用プログラムが開発される。そして、このアプリケーション用プログラムが、プログラム共有鍵を用いて暗号化される。
【0034】
商品動作モードに設定されたセキュアLSI1は、実際の商品LSIとして、動作する。商品LSIでは、開発用LSIにおいて生成された、プログラム共有鍵で暗号化されたアプリケーション用プログラムが実装され、その内部で、プログラム固有鍵で暗号化されたアプリケーション用プログラムに、変換される。なお、この変換処理は、開発用LSIでも、アプリケーション用プログラムのデバッグのために、実行可能になっている。
【0035】
以下、各モードにおけるセキュアLSI1の動作の詳細について、フローチャートおよびデータフローを参照して、説明する。セキュアLSI1は、ブートROM60に格納されたブートプログラムを実行することによって、以下のような動作を行う。
【0036】
図3はブートプログラムの全体的な処理の流れを示すフローチャートである。セキュアLSI1に電源が投入されると、ブートROM60に格納されたブートプログラムがCPU65によって実行される。図3に示すように、まず、各ハードウェアを初期化する(SZ0)。そして、外部ツール110からさまざまな初期値を読み込み、セキュアメモリ10に設定する(SZ1)。
【0037】
図22は初期値設定処理SZ1のフローチャートである。まず、ジャンパー44で、セキュアメモリ10がLSI内に実装されているか否かの判定を行う。次に、書き換え不可領域書き込みフラグ12が“済”であるか否かを判定し、“済”であるときはすでにセキュアメモリ10に初期値が設定されているので、処理SZ1を終了する。書き換え不可領域書き込みフラグ12が“可”であるときは、セキュアメモリ10に初期値を書き込んでいく。モードIDに加えて、暗号化されたプログラム固有鍵、アドレス管理情報、データ固有鍵をセキュアメモリ10の書き換え不可領域11に書き込む。なお、最初の判定の結果、セキュアメモリ10がLSIの外部にあると判定されたときは、モードIDは商品動作モードを表す値に上書きされる。これにより、セキュアメモリ10がLSIパッケージ外にあるような不正な製品は、商品動作モードでしか動作できない。
【0038】
次に、書き込み不可領域書き込みフラグ12を“済”にセットする。これによって、以後の書き換え不可領域11の書き換えはできなくなる。さらに、通常領域13,14に暗号種別識別子および実装モードフラグを書き込む。そして、モードIDがアドミニストレータモード以外のモードを示すときは、これらに加えて、暗号化された共有鍵/鍵生成鍵も通常領域13,14に書き込む。
【0039】
その後、前処理SZ2を実行する。図4は前処理SZ2のデータフローである。ここでは、セキュアメモリ10の書き込み不可領域11に設定されたモードIDが、鍵生成・更新シーケンサ30のモードID格納レジスタ31と、モードシーケンサ40のモードID格納レジスタ41とに設定される。また、セキュアメモリ10の第1の通常領域13に設定された暗号種別識別子が、鍵生成・更新シーケンサ30の暗号種別識別子格納レジスタ32と、モードシーケンサ40の暗号種別識別子格納レジスタ42とに設定される。さらに、セキュアメモリ10の書き換え不可領域11に格納されたアドレス管理情報が、MEMC80の暗号アドレス区分格納レジスタ81に設定される。ここまでの動作は、図2における初期値設定フェーズPA0,PB0,PC0,PD0に対応している。
【0040】
その後は、モードIDの値に応じて、それぞれのモードにおける動作を行う(SZ3)。
【0041】
<アドミニストレータモード>
モードIDが「00」のとき、セキュアLSI1はアドミニストレータモードになり、ジャンパー43の値に応じて(SA0)、平文プログラム実行処理SA1、またはプログラム暗号化処理SA2を実行する。
【0042】
鍵生成プログラム開発フェーズPA1では、平文プログラム実行処理SA1が行われ、ここで、鍵生成プログラムが生成される。この鍵生成プログラムは外部メモリ100に格納される。
【0043】
鍵生成プログラム暗号化フェーズPA2では、まず、図5のデータフローのように、鍵生成プログラムを実行させることによって、与えられた任意の鍵生成鍵を暗号化する。すなわち、外部ホストI/F50では、モードシーケンサ40によって、プログラム処理部51のスルー部52が有効化される。そして、外部メモリ100に格納された鍵生成プログラムが、スルー部52を介してCPU65に与えられ、実行される。この鍵生成プログラムを実行することによって、外部メモリ100に格納された鍵生成鍵が、秘密鍵演算処理部20によって、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて暗号化される。
【0044】
なお、本実施形態では、鍵の暗号化は、第1中間鍵と第2中間鍵とを用いて行う。すなわち、暗号化の結果、平文鍵(ここでは鍵生成鍵)を第1中間鍵(ここではMK1)で暗号化した暗号化鍵(ここではEnc(鍵生成鍵、MK1))と、第1中間鍵を第2中間鍵(ここではCK)で暗号化した暗号化第1中間鍵(ここではEnc(MK1,CK))とが得られる。もちろん、本発明は、このような鍵の暗号化手法に限定されるものではない。
【0045】
その後、プログラム暗号化処理SA2が実行される。図6はこのプログラム暗号化処理SA2のフローチャート、図7はデータフローである。まず、外部メモリ100に格納されている、暗号化された鍵生成鍵Enc(鍵生成鍵,MK1),Enc(MK1,CK)を、外部ホストI/F50のスルー部52を介して、秘密鍵演算処理部20に設定する(SA21)。そして、この暗号化された鍵生成鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、鍵生成鍵を得る(SA22)。その後、外部メモリ100に格納されていた平文の鍵生成プログラムを取り込み、これをSA22で復号した鍵生成鍵を用いて暗号化し、外部メモリ100に書き込む(SA23)。さらに、外部メモリ100の平文の鍵生成プログラムに対して、HASH演算部70によってHASH演算を行い、算出したHASH値を外部メモリ100に書き込む(SA24)。
【0046】
このような動作によって、アドミニストレータモードでは、鍵生成鍵で暗号された鍵生成プログラムEnc(鍵生成プログラム,鍵生成鍵)と、暗号化された鍵生成鍵Enc(鍵生成鍵,MK1),Enc(MK1,CK)と、鍵生成プログラムのHASH値とが、生成される。
【0047】
<鍵生成モード>
モードIDが「01」のとき、セキュアLSI1は鍵生成モードになり、実装モードフラグの値に応じて(SB0)、キージェネレータ製造処理SB1、または鍵管理・発行処理SB2を実行する。
【0048】
キージェネレータ製造フェーズPB1では、キージェネレータ製造処理SB1が実行される。図8はこの処理SB1のフローチャート、図9および図10はデータフローである。ここでは、モードIDと実装モードフラグの値によって、外部ホストI/F部50が有するプログラム処理部51においてスルー部52が有効に設定されている。
【0049】
まず、セキュアメモリ10の書き込み不可領域11に格納されている、暗号化されたプログラム固有鍵Enc(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する(SB11)。そして、この暗号化されたプログラム固有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る(SB12)。次に、初期値設定フェーズPB0において設定された,暗号化された鍵生成鍵Enc(鍵生成鍵,MK1),Enc(MK1,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定し(SB13)、この暗号化された鍵生成鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、鍵生成鍵を得る(SB14)。
【0050】
その後、外部メモリ100に格納されていた,鍵生成鍵で暗号化された鍵生成プログラムEnc(鍵生成プログラム,鍵生成鍵)を、外部ホストI/F50が有するプログラム処理部51のスルー部52を介して、秘密鍵演算処理部20に取り込む(SB15)。そして、取り込んだ暗号化された鍵生成プログラムを、鍵生成鍵で復号した後、プログラム固有鍵で暗号化し、暗号化された鍵生成プログラムEnc(鍵生成プログラム,プログラム固有鍵)を得る(SB16)。そして、外部メモリ100に書き込む(SB17)。次に、外部メモリ100に格納されていたHASH値を、スルー部52を介して、セキュアメモリ10の通常領域13に設定する(SB18)。
【0051】
また、セキュアメモリ10の通常領域13に格納された実装モードフラグの値を、CPU65によって“OFF”に設定する(SB19)。そして、セキュアメモリ10の通常領域13に格納されている,暗号化された鍵生成鍵Enc(鍵生成鍵,MK1),Enc(MK1,CK)を削除する(SB1A)とともに、外部メモリ100に格納されていた,暗号化された鍵生成プログラムEnc(鍵生成鍵プログラム,鍵生成鍵)およびHASH値を削除する(SB1B)。
【0052】
鍵管理・発行フェーズPB2では、鍵管理・発行処理SB2が実行される。図11はこの処理SB2のフローチャート、図12および図13はデータフローである。ここでは、モードIDと実装モードフラグの値によって、外部ホストI/F部50が有するプログラム復号用暗号エンジン54が有効に設定されている。 まず、セキュアメモリ10の書き込み不可領域11に格納されている、暗号化されたプログラム固有鍵Enc(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する(SB21)。そして、この暗号化されたプログラム固有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る(SB22)。得たプログラム固有鍵は、外部ホストI/F50のプログラム復号用暗号エンジン54のプログラム固有鍵格納レジスタに設定される(SB23)。
【0053】
その後、外部メモリ100に格納されていた,プログラム固有鍵で暗号化された鍵生成プログラムEnc(鍵生成プログラム,プログラム固有鍵)を、外部ホストI/F50が有するプログラム処理部51のプログラム復号用暗号エンジン54を介して復号し、HASH演算部70に取り込み、HASH値を演算する(SB24)。そして、この演算したHASH値と、セキュアメモリ10の通常領域13に格納されていたHASH値とを比較し、鍵生成プログラムが改ざんされていないかどうかをチェックする(SB25)。HASH値が一致していたとき(SB26でNo)、外部メモリ100に格納されていた鍵生成プログラムEnc(鍵生成プログラム,プログラム固有鍵)に処理を遷移し、鍵の生成を実行する(SB27)。一方、HASH値が一致していないとき(SB26でYes)は、何らかの不正が行われたものと推定して、不正アクセス時制御による処理を実行する(SB28)。
【0054】
鍵生成モードにおいては、スルー部52を有効にしてプログラムを入力する、またはプログラム復号用暗号エンジン54を有効にして暗号化されたプログラムを復号して入力するのみであるので、平文プログラムを実行することができないように、セキュアLSI1の動作が制限される。
【0055】
<開発モード>
モードIDが「10」のとき、セキュアLSI1は開発モードになり、ジャンパー43の値に応じて(SC0)、プログラム暗号化処理SC1、平文プログラム実行処理SC2、プログラム実装処理SC3、または暗号化プログラム実行処理SC4を実行する。
【0056】
アプリケーションプログラム開発フェーズPC1では、遅延部53を有効として、平文プログラム実行処理SC2が行われ、アプリケーションプログラムが開発される。開発されたアプリケーションプログラムは、外部メモリ100に格納される。
【0057】
アプリケーションプログラム暗号化フェーズPC2では、プログラム暗号化処理SC1が実行される。図14はこのプログラム暗号化処理SC1のフローチャート、図15はデータフローである。まず、セキュアメモリ10の通常領域14に格納された共有鍵鍵情報としての暗号化されたプログラム共有鍵Enc(プログラム共有鍵,MK2),Enc(MK2,CK)を秘密鍵演算処理部20に設定する(SC11)。そして、この暗号化されたプログラム共有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム共有鍵を得る(SC12)。その後、外部メモリ100に格納された平文のアプリケーションプログラムを取り込み、これをSC12で復号したプログラム共有鍵を用いて暗号化し、外部メモリ100に書き込む(SC13)。さらに、外部メモリ100の平文のアプリケーションプログラムに対して、HASH演算部70によってHASH演算を行い、算出したHASH値を外部メモリ100に書き込む(SC14)。
【0058】
このような動作によって、プログラム共有鍵で暗号されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム共有鍵)と、アプリケーションプログラムのHASH値とが、生成される。
【0059】
次に、アプリケーションプログラム実装フェーズPC3では、プログラム実装処理SC3が実行され、アプリケーションプログラムデバッグフェーズPC4では、暗号化プログラム実行処理SC4が実行される。これらの処理は、商品動作モードにおける各処理SD1,SD2と同様であるので、詳細は後述する。
【0060】
このように、書き換え不可領域11を含むセキュアメモリ10を有し、高い秘匿性を持つLSI1を、その動作モードを実装モードから開発モードに変えてプログラム開発環境として用いることによって、プログラム開発環境におけるセキュリティを、従来よりも高めることができる。
【0061】
また、セキュアメモリ10に格納された共有鍵鍵情報としての暗号化された共有鍵から生共有鍵が復号され、そしてこの生共有鍵を用いて平文プログラムの暗号化が実行されるので、プログラム開発者に生共有鍵を知られることなく、平文プログラムの暗号化を実行することができる。
【0062】
また、生共有鍵の復号と、この生共有鍵を用いた平文プログラムの暗号化とが、外部からの指示ではなく、ブートプログラムによって実行されるので、平文プログラムの暗号化を、プログラム開発者に生共有鍵を知られることを確実に防止しつつ、実行することができる。
【0063】
<商品動作モード>
モードIDが「11」のとき、セキュアLSI1は商品動作モードになり、実装モードフラグの値に応じて(SD0)、プログラム実装処理SD1、または通常ブート処理SD2を実行する。
【0064】
商品実装フェーズPD1では、プログラム実装処理SD1が実行される。図16はこの処理SD1のフローチャート、図17および図18はデータフローである。ここでは、モードIDと実装モードフラグの値によって、外部ホストI/F部50が有するプログラム処理部51においてスルー部52が有効に設定されている。
【0065】
まず、セキュアメモリ10の書き込み不可領域11に格納された、固有鍵鍵情報としての暗号化されたプログラム固有鍵(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する(SD11)。そして、この暗号化されたプログラム固有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る(SD12)。次に、初期値設定フェーズPD0において設定された,共有鍵鍵情報としての暗号化されたプログラム共有鍵Enc(プログラム共有鍵,MK2),Enc(MK2,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定し(SD13)、この暗号化されたプログラム共有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム共有鍵を得る(SD14)。
【0066】
その後、外部メモリ100に格納されていた,プログラム共有鍵で暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム共有鍵)を、外部ホストI/F50が有するプログラム処理部51のスルー部52を介して、秘密鍵演算処理部20に取り込む(SD15)。そして、取り込んだ暗号化されたアプリケーションプログラムを、プログラム共有鍵で復号した後、プログラム固有鍵で暗号化し、暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)を得る(SD16)。そして、外部メモリ100に書き込む(SD17)。次に、外部メモリ100に格納されていたHASH値を、スルー部52を介して、セキュアメモリ10の通常領域13に設定する(SD18)。
【0067】
また、セキュアメモリ10の通常領域13に格納された実装モードフラグの値を、CPU65によって“OFF”に設定する(SD19)。そして、セキュアメモリ10の通常領域13に格納されている,暗号化されたプログラム共有鍵Enc(プログラム共有鍵,MK1),Enc(MK1,CK)を削除する(SD1A)とともに、外部メモリ100に格納されていた,暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム共有鍵)およびHASH値を削除する(SD1B)。
【0068】
すなわち、共有鍵暗号化プログラムが、暗号化する鍵が共有鍵から固有鍵に変換されて、システムに実装されることになる。このため、ユーザの持つ各製品では、互いに異なる固有鍵によって暗号化されたプログラムが実装されることになり、秘匿性が向上する。また、万一、暗号を破られた場合でも、被害を受ける製品の数が限定されることになり、従来よりもセキュリティが高まる。
【0069】
なお、固有鍵の生成は、固有IDを基にして行ってもよい。すなわち、セキュアLSI1毎に、個別の固有IDを固有鍵鍵情報としてセキュアメモリ10に実装しておき、この商品実装フェーズPD1において、ブートプログラムによって、実装された固有IDから固有鍵を生成するようにしてもよい。
【0070】
商品動作フェーズPD2では、通常ブート処理SD2が実行される。図19はこの処理SD2のフローチャート、図20および図21はデータフローである。ここでは、モードIDと実装モードフラグの値によって、外部ホストI/F部50が有するプログラム復号用暗号エンジン54が有効に設定されている。
【0071】
まず、セキュアメモリ10の書き込み不可領域11に格納されている、暗号化されたプログラム固有鍵Enc(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する(SD21)。そして、この暗号化されたプログラム固有鍵を、鍵生成・更新シーケンサ30に実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る(SD22)。得たプログラム固有鍵は、外部ホストI/F50のプログラム復号用暗号エンジン54のプログラム固有鍵格納レジスタに設定する(SD23)。
【0072】
その後、セキュアメモリ10の書き込み不可領域11に格納されているデータ固有IDを秘密鍵演算処理部20の固有ID格納レジスタに設定する(SD24)。また、CPU65によって乱数を生成し、秘密鍵演算処理部20の乱数格納レジスタに設定する(SD25)。そして、秘密鍵演算処理部20によって、データ固有IDと乱数からデータ固有鍵を生成する(SD26)。
【0073】
その後、外部メモリ100に格納されていた,プログラム固有鍵で暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)を、外部ホストI/F50が有するプログラム処理部51のプログラム復号用暗号エンジン54を介して復号し、HASH演算部70に取り込み、HASH値を演算する(SD27)。そして、この演算したHASH値と、セキュアメモリ10の通常領域13に格納されていたHASH値とを比較し、アプリケーションプログラムが改ざんされていないかどうかをチェックする(SD28)。HASH値が一致していたとき(SD29でNo)、外部メモリ100に格納されていたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)に処理を遷移し、アプリケーションを実行する(SD2A)。一方、HASH値が一致していないとき(SD29でYes)は、何らかの不正が行われたものと推定して、不正アクセス時制御による処理を実行する(SD2B)。
【0074】
商品動作モードにおいては、スルー部52を有効にしてプログラムを入力する、またはプログラム復号用暗号エンジン54を有効にして暗号化されたプログラムを復号して入力するのみであるので、平文プログラムを実行することができないように、セキュアLSI1の動作が制限される。
【0075】
なお、開発モードおよび商品動作モードにおいては、外部から、秘密鍵演算処理部20を用いて鍵を生成する処理を実行させようとしても、鍵生成・更新シーケンサ30によって判別されて実行されない。すなわち、鍵生成・更新シーケンサ30は、開発モードおよび商品動作モードにおいては、起動時以外にプログラム暗号種を用いることができないように動作を制限するので、鍵を生成する処理は実行することができない。
【0076】
なお、本実施形態では、外部メモリ100にプログラムやデータが格納されており、外部ツール110に、セキュアメモリ10に実装される初期値が格納されているが、これらはどちらに格納されていてもかまわない。例えば、プログラムやデータが外部ツール110から読み込まれ、再暗号化されたとしても何ら問題はない。
【0077】
なお、本実施形態では、ブートプログラムによって、各処理を実行するものとしたが、本発明はこれに限られるものではなく、処理の一部または全部を、他の手段によって実行してもかまわない。ただし、外部からの指示ではなく、ブートプログラムによって処理を実行させることによって、セキュリティをより高めることができる。
【符号の説明】
【0078】
10 セキュアメモリ
11 書き換え不可領域
12 書き換え不可領域書き込みフラグ
20 秘密鍵演算処理部
30 鍵生成・更新シーケンサ
31 モードID格納レジスタ
32 暗号種別識別子格納レジスタ
33 プログラム暗号種
40 モードシーケンサ
41 モードID格納レジスタ
42 暗号種別識別子格納レジスタ
50 外部ホストI/F
51 プログラム処理部
52 スルー部
53 遅延部
54 プログラム復号用暗号エンジン
55 データ処理部
56 スルー部
57 コンテンツ暗号・復号用暗号エンジン
60 ブートROM
70 HASH演算部
100 外部メモリ

【特許請求の範囲】
【請求項1】
セキュアメモリを有するLSIと、外部メモリとを有する鍵実装システムに、暗号化プログラムを実装する方法であって、
前記セキュアメモリに、生共有鍵に係る共有鍵鍵情報と、生固有鍵に係る固有鍵鍵情報とを格納する初期値設定処理と、
前記LSIにおいて、前記セキュアメモリに格納された共有鍵鍵情報から、生共有鍵を得る第1のステップと、
前記LSIにおいて、前記外部メモリから与えられた共有鍵暗号化プログラムを、前記第1のステップで得られた生共有鍵を用いて、復号する第2のステップと、
前記LSIにおいて、前記セキュアメモリに格納された固有鍵鍵情報から、生固有鍵を得る第3のステップと、
前記LSIにおいて、前記第2のステップで得られた平文プログラムを、前記第3のステップで得られた生固有鍵を用いて、暗号化する第4のステップとを備え、
前記第4のステップで得られた固有鍵暗号化プログラムを、前記外部メモリに実装する
ことを特徴とするプログラム実装方法。
【請求項2】
請求項1において、
前記LSIは、ブートプログラムを格納するブートROMを備え、
前記ブートROMに格納されたブートプログラムを前記LSIに実行させることによって、前記第1〜第4のステップを実行する
ことを特徴とするプログラム実装方法。
【請求項3】
請求項1において、
前記固有鍵鍵情報は、前記セキュアメモリの書き換え不可領域に、格納されている
ことを特徴とするプログラム実装方法。
【請求項4】
請求項1において、
前記共有鍵鍵情報は、生共有鍵を生第1中間鍵で暗号化した暗号化共有鍵と、前記生第1中間鍵を生第2中間鍵で暗号化した暗号化第1中間鍵とを含むものであり、
前記生第2中間鍵は、前記LSIに実装されたプログラム暗号種を、前記暗号化共有鍵を用いて一方向関数により変換することによって生成されるものであって、
前記第1のステップは、前記暗号化共有鍵および暗号化第1中間鍵と、前記プログラム暗号種とを用いて、前記生共有鍵を復号するものである
ことを特徴とするプログラム実装方法。
【請求項5】
請求項1において、
前記固有鍵鍵情報は、生固有鍵を生第1中間鍵で暗号化した暗号化固有鍵と、前記生第1中間鍵を生第2中間鍵で暗号化した暗号化第1中間鍵とを含むものであり、
前記生第2中間鍵は、前記LSIに実装されたプログラム暗号種を、前記暗号化固有鍵を用いて一方向関数により変換することによって生成されるものであって、
前記第3のステップは、前記暗号化固有鍵および暗号化第1中間鍵と、前記プログラム暗号種とを用いて、前記生固有鍵を復号するものである
ことを特徴とするプログラム実装方法。
【請求項6】
請求項1において、
前記固有鍵鍵情報は、当該LSIに固有の固有IDである
ことを特徴とするプログラム実装方法。
【請求項7】
情報処理装置であって、
前記情報処理装置の動作状態には、実装処理状態と商品動作状態とがあり、
前記実装処理状態は、所定の情報を変換して、前記情報処理装置の前記商品動作状態の起動に必要な変換情報を生成する動作状態であり、
前記商品動作状態は、前記変換情報を用いて、前記情報処理装置を起動させる動作状態であり、
前記情報処理装置は、
前記所定の情報および/または前記変換情報を格納する格納手段と、
前記格納手段から前記所定の情報を読み出す読出手段と、
前記所定の情報を変換して、前記変換情報を生成する変換手段と、
生成された前記変換情報を、前記格納手段に書き出す書出手段と、
前記格納手段に格納された前記変換情報を用いて前記情報処理装置を起動させる起動手段と、
前記情報処理装置の電源が、前記情報処理装置が前記実装処理状態のときに投入された場合には、前記読出手段と前記書出手段および前記変換手段を動作させ、
前記電源が、前記情報処理装置が前記商品動作状態のときに投入された場合には、起動手段を動作させる状態制御手段とを備えた
ことを特徴とする情報処理装置。
【請求項8】
請求項7において、
前記変換手段は、前記情報の変換に鍵情報を使用し、
前記情報処理装置は、さらに、
前記鍵情報を記録する鍵記録手段を備え、
前記鍵記録手段は、前記鍵情報を、前記情報処理装置外からのアクセスから保護された状態で記録する
ことを特徴とする情報処理装置。
【請求項9】
請求項7において、
前記書出手段による書き出しの処理が完了したとき、前記情報処理装置の動作状態を前記商品動作状態に設定する状態設定手段を備えた
ことを特徴とする情報処理装置。
【請求項10】
請求項9において、
前記状態設定手段は、
前記情報処理装置の動作状態が前記商品動作状態であるか否かを示す状態情報を記録する状態情報記録部と、
前記書出手段による前記変換情報の書き出しが完了したとき、前記状態情報を、前記商品動作状態であることを示す情報に更新する状態更新部とを備えた
ことを特徴とする情報処理装置。
【請求項11】
請求項10において、
前記状態情報記録部は、前記情報処理装置内に設けられたセキュアメモリである
ことを特徴とする情報処理装置。
【請求項12】
請求項7において、
前記書出手段による前記格納手段への前記変換情報の書き出しが完了したとき、前記格納手段から前記所定の情報を削除する削除手段を備えた
ことを特徴とする情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate


【公開番号】特開2009−169989(P2009−169989A)
【公開日】平成21年7月30日(2009.7.30)
【国際特許分類】
【出願番号】特願2009−112759(P2009−112759)
【出願日】平成21年5月7日(2009.5.7)
【分割の表示】特願2007−121815(P2007−121815)の分割
【原出願日】平成14年7月24日(2002.7.24)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】