半導体装置およびそのブート方法
【課題】セキュリティレベルの高い半導体装置を提供する。
【解決手段】セキュアLSI1は、ブートプログラムを記憶するブートROM60を備えている。ブートプログラムは、モードIDが示す現在の動作モードに応じて、そのシーケンスが制御される。モードIDがプログラムを開発するための開発モードを示すときは、外部メモリ100に記憶された任意の外部プログラムの実行が可能である。一方、モードIDが商品としての商品モードを示すときは、正当性が証明された外部プログラムのみを実行する。
【解決手段】セキュアLSI1は、ブートプログラムを記憶するブートROM60を備えている。ブートプログラムは、モードIDが示す現在の動作モードに応じて、そのシーケンスが制御される。モードIDがプログラムを開発するための開発モードを示すときは、外部メモリ100に記憶された任意の外部プログラムの実行が可能である。一方、モードIDが商品としての商品モードを示すときは、正当性が証明された外部プログラムのみを実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、鍵実装システムに用いられるLSIのような半導体装置において、セキュリティを向上させる技術に属する。
【背景技術】
【0002】
本願と同一の出願人による特願2001−286881では、鍵実装システムにおいて、鍵の機密性および秘匿性を、従来よりも向上させる技術が示されている。
【0003】
しかし、かかる先行技術は、文献公知発明に係るものではないため、記載すべき先行技術文献情報はない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、セキュリティレベルの高い半導体装置を提供することを課題とする。
【課題を解決するための手段】
【0005】
本発明の第1態様は、半導体装置として、
ブートプログラムを記憶するブートROMと、
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちのいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段と、
外部メモリに記憶された外部プログラムの正当性を検証するためのプログラム検証部とを備え、
前記ブートプログラムは,前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードに応じて、そのシーケンスが制御されるものであり、かつ、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムの実行が可能である一方、前記モードIDが前記商品モードを示すときは、前記プログラム検証部によって正当性が証明された外部プログラムのみを実行するものである。
【0006】
本発明の第2態様は、商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段を有する半導体装置を、ブートする方法として、
前記半導体装置内のブートROMからブートプログラムを起動するステップと、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードを判定するステップと、
前記ブートプログラムの実行によって、外部メモリに記憶された外部プログラムの正当性を検証するステップとを備え、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムに処理が遷移する一方、前記モードIDが前記商品モードを示すときは、外部プログラムの正当性が証明された場合のみ、当該外部プログラムへと処理が遷移するものである。
【発明の効果】
【0007】
以上のように本発明によると、半導体装置には、現在の動作モードを示すモードIDを記憶するためのモードID記憶手段が設けられている。そして、モードIDがプログラムを開発するための開発モードを示すときは、外部メモリに記憶された外部プログラムの実行が可能である一方、モードIDが商品として動作するための商品モードを示すときは、正当性が証明された外部プログラムのみが実行される。このため、コンテンツの不正実行が防止される。したがって、セキュリティレベルが向上する。
【図面の簡単な説明】
【0008】
【図1】本発明の実施形態に係る半導体装置としてのセキュアLSIの構成を示すブロック図である。
【図2】図1のセキュアLSIを用いた開発および製品化の全体の流れを表す図である。
【図3】ブートプログラムの全体的な処理の流れを示すフローチャートである。
【図4】初期値設定処理SZ1のフローチャートである。
【図5】図1のセキュアLSIにおける暗号化部とその周辺の構成を示す図である。
【図6】図1のセキュアLSIにおけるコモンバスとプライベートバスの設定方法を示す図である。
【図7】図1のセキュアLSIにおける外部ホストI/Fとその周辺の構成を示す図である。
【図8】商品動作モードにおける外部ホストI/Fの動作を示す図である。
【図9】セキュアメモリのアクセス制御を示す図である。
【図10】商品動作モードにおける通常ブート処理のデータフローその1である。
【図11】商品動作モードにおける通常ブート処理のデータフローその2である。
【発明を実施するための形態】
【0009】
以下、本発明の実施の形態について、図面を参照して説明する。
【0010】
図1は本実施形態に係る半導体装置としてのセキュアLSIの内部構成を示すブロック図である。図1において、セキュアLSI1は外部バス120を介して、外部メモリ100(フラッシュメモリ101とRAM102)などと接続可能に構成されている。また、モードIDを与えることによって、その動作モードを設定することが可能になっている。
【0011】
本実施形態に関わる主な構成要素について、簡単に説明する。
【0012】
まず、セキュアLSI1は、書き換え不可領域11を含むセキュアメモリ(セキュアFlash)10を備えている。この書き換え不可領域11には、書き換え不可領域書き込みフラグ12が設けられている。書き換え不可領域書き込みフラグ12は、モードIDが一度セキュアメモリ10に書き込まれると、そのフラグ値が“可”から“済”になり、それ以降の書き換え不可領域11への書き込みを不能にする。なお、本実施形態では、セキュアメモリ10はフラッシュメモリによって構成されているが、もちろんこれに限定されるものではなく、不揮発性のメモリであればどのようなものであってもかまわない。
【0013】
また、暗号化部2はプログラムの暗号化や復号化を行うものであり、暗号化演算部としての秘密鍵演算処理部20と、暗号化制御部としての鍵生成・更新シーケンサ30と、プログラム暗号種を記憶する記憶部35とを備えている。秘密鍵演算処理部20は各種の鍵などを格納するレジスタを備えており、プログラムの暗号化処理または復号化処理を含む複数のシーケンスを実行可能である。鍵生成・更新シーケンサ30は秘密鍵演算処理部20が実行可能な各シーケンスについて実行の諾否を判断し、実行が許されないと判断したシーケンスについて秘密鍵演算処理部20の動作を禁止する。鍵生成・更新シーケンサ30はモードID格納レジスタ31を有しており、このモードID格納レジスタ31に格納されているモードIDの値に基づいて、各シーケンスの実行の諾否を判断する。また、鍵またはプログラムがどのようなアルゴリズムや鍵長で暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ32を備えている。暗号化部2の構成および動作の詳細については、後述する。
【0014】
モードシーケンサ40も、モードID格納レジスタ41を備えており、モードID格納レジスタ41に格納されているモードIDと、ジャンパ43の値に応じて、外部インターフェース(I/F)50の動作、すなわち、外部メモリ100に格納されたプログラムやデータをどのI/Fを介して読み込むか、が制御される。これにより、外部メモリ100に格納された平文プログラムが実行できるか否かを制御することができる。さらに、モードシーケンサ40は、鍵がどの手法によって暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ42を備えている。
【0015】
外部I/F50は、モードシーケンサ40の制御に従って、プログラム処理部51が有するスルー部52およびプログラム復号用暗号エンジン53、並びに、データ処理部55が有するスルー部56およびデータ暗復号用暗号エンジン58のうちのいずれかを介して、外部メモリ100との間でプログラムやデータの入出力を行う。
【0016】
ここで、後述するアドミニストレータモードとアプリプログラム開発を除いては、スルー部52を介して入力されたプログラムは、セキュアLSI1内部で実行されることはない。すなわち、スルー部52は、平文プログラムの暗号化、またはすでに暗号化されたプログラムを別の鍵を用いて再暗号化するときに有効とされるものであり、セキュアLSI1は、後述するアドミニストレータモードとアプリプログラム開発を除いては、スルー部52を介して入力されたプログラムへは動作を遷移しないように構成されている。したがって、例えば商品となったセキュアLSI1はスルー部52を介して平文プログラムを取り込んだとしても、これを実行することはできない。
【0017】
ブートROM60は、セキュアLSI1の起動動作を制御するブートプログラムを格納している。HASH演算部70は、セキュアLSI1に読み込まれたプログラムについてその正当性を検証するために、HASH値を演算する。
【0018】
また、外部メモリ100では、プログラムがフラッシュメモリ101に格納され、データ(コンテンツ)がRAM102に格納されている。外部ツール110には、セキュアLSI1の最初の起動時にセキュアメモリ10に格納する各種の初期値が格納されている。この初期値の種類は、設定される動作モードに応じて、異なったものになる。
【0019】
図2は図1のセキュアLSI1を用いた開発および製品化の全体の流れを表す図である。図2に示すように、セキュアLSI1は、アドミニストレータモード(モードID:00)、鍵生成モード(モードID:01)、開発モード(モードID:10)および商品動作モード(モードID:11)の4種類の動作モードで、動作する。
【0020】
まず、アドミニストレータモードに設定されたセキュアLSI1は、管理者用LSIとして、動作する。管理者用LSIでは、鍵生成プログラムが開発され(PA1)、また、その鍵生成プログラムが任意の鍵生成鍵を用いて暗号化される(PA2)。
【0021】
鍵生成モードに設定されたセキュアLSI1は、鍵生成用LSIとして、動作する。鍵生成用LSIでは、管理者用LSIにおいて生成された、暗号化された鍵生成プログラムが実装され(PB1)、この鍵生成プログラムを実行することによって、各種の鍵が生成される(PB2)。
【0022】
開発モードに設定されたセキュアLSI1は、開発用LSIとして、動作する。開発用LSIでは、実際の製品で実行されるアプリケーション用プログラムが開発される(PC1)。そして、このアプリケーション用プログラムが、プログラム共有鍵を用いて暗号化される(PC2)。
【0023】
商品動作モードに設定されたセキュアLSI1は、実際の商品LSIとして、動作する。商品LSIでは、開発用LSIにおいて生成された、プログラム共有鍵で暗号化されたアプリケーション用プログラムが実装され、その内部で、プログラム固有鍵で暗号化されたアプリケーション用プログラムに、変換される(PD1)。プログラム固有鍵で暗号化されたアプリケーションプログラムは通常の商品動作において実行される。なお、この変換処理は、開発用LSIでも、アプリケーション用プログラムのデバッグ(PC4)のために、実行可能になっている(PC3)。
【0024】
セキュアLSI1は、ブートROM60に格納されたブートプログラムを実行することによって、以下のような動作を行う。
【0025】
図3はブートプログラムの全体的な処理の流れを示すフローチャートである。セキュアLSI1に電源が投入されると、ブートROM60に格納されたブートプログラムがCPU65によって実行される。図3に示すように、まず、各ハードウェアを初期化する(SZ0)。そして、外部ツール110からさまざまな初期値を読み込み、セキュアメモリ10に設定する(SZ1)。
【0026】
図4は初期値設定処理SZ1のフローチャートである。まず、ジャンパ44で、セキュアメモリ10がLSI内に実装されているか否かの判定を行う(SZ11)。次に、書き換え不可領域書き込みフラグ12が“済”であるか否かを判定し(SZ12)、“済”であるときは(SZ12でYes)すでにセキュアメモリ10に初期値が設定されているので、処理SZ1を終了する。書き換え不可領域書き込みフラグ12が“可”であるときは(SZ12でNo)、セキュアメモリ10に初期値を書き込んでいく。モードIDに加えて、暗号化されたプログラム固有鍵、アドレス管理情報、データ固有鍵をセキュアメモリ10の書き換え不可領域11に書き込む(SZ13,SZ16〜SZ18)。なお、最初の判定の結果、セキュアメモリ10がLSIの外部にあると判定されたとき(SZ14でNo)は、モードIDは商品動作モードを表す値に上書きされる(SZ15)。これにより、セキュアメモリ10がLSIパッケージ外にあるような製品は、商品動作モードでしか動作できない。
【0027】
次に、書き込み不可領域書き込みフラグ12を“済”にセットする(SZ19)。これによって、以後の書き換え不可領域11の書き換えはできなくなる。さらに、通常領域13,14に暗号種別識別子および実装モードフラグを書き込む(SZ1A)。そして、モードIDがアドミニストレータモード以外のモードを示すときは(SZ1BでNo)、これらに加えて、暗号化された共有鍵/鍵生成鍵も通常領域13,14に書き込む(SZ1C)。
【0028】
その後、図3にもどり、前処理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に対応している。
【0029】
その後は、モードIDの値に応じて、それぞれのモードにおける動作を行う(SZ3)。
【0030】
モードIDが「00」のとき、セキュアLSI1はアドミニストレータモードになり、ジャンパ43の値に応じて(SA0)、平文プログラム実行処理SA1、またはプログラム暗号化処理SA2を実行する。鍵生成プログラム開発フェーズPA1では、平文プログラム実行処理SA1が行われ、ここで、鍵生成プログラムが生成される。この鍵生成プログラムは外部メモリ100に格納される。鍵生成プログラム暗号化フェーズPA2では、鍵生成プログラムを任意の鍵生成鍵で暗号化する。
【0031】
モードIDが「01」のとき、セキュアLSI1は鍵生成モードになり、実装モードフラグの値に応じて(SB0)、キージェネレータ製造処理SB1、または鍵管理・発行処理SB2を実行する。キージェネレータ製造フェーズPB1では、キージェネレータ製造処理SB1が実行され、任意の鍵生成鍵で暗号化された鍵生成プログラムをプログラム固有鍵で再暗号化する。鍵管理・発行フェーズPB2では、プログラム固有鍵で暗号化された鍵生成プログラムを実行させることによって、鍵管理・発行処理SB2が実行し、鍵を生成する。
【0032】
モードIDが「10」のとき、セキュアLSI1は開発モードになり、ジャンパ43の値に応じて(SC0)、プログラム暗号化処理SC1、平文プログラム実行処理SC2、プログラム実装処理SC3、または暗号化プログラム実行処理SC4を実行する。アプリケーションプログラム開発フェーズPC1では、平文プログラム実行処理SC2が行われ、アプリケーションプログラムが開発される。開発されたアプリケーションプログラムは、外部メモリ100に格納される。アプリケーションプログラム暗号化フェーズPC2では、プログラム暗号化処理SC1が実行される。また、アプリケーションプログラム実装フェーズPC3では、プログラム実装処理SC3が実行され、アプリケーションプログラムデバッグフェーズPC4では、暗号化プログラム実行処理SC4が実行される。これらの処理は、商品動作モードにおける各処理SD1,SD2と同様である
モードIDが「11」のとき、セキュアLSI1は商品動作モードになり、実装モードフラグの値に応じて(SD0)、プログラム実装処理SD1、または通常ブート処理SD2を実行する。商品実装フェーズPD1では、プログラム実装処理SD1が実行される。商品動作フェーズPD2では、通常ブート処理SD2が実行される。
【0033】
図5は暗号化部2とその周辺の構成を示す図である。図5に示すように、鍵生成・更新シーケンサ30はモードID格納レジスタ31および暗号種別識別子格納レジスタ32の他に、秘密演算処理部20を用いて実行される各シーケンスに対応して設けられ、その発行回数を格納するためのレジスタ33と、レジスタ31,33を参照して、各シーケンスを実行してよいか否か(ブートROM60中の各プログラムおよび外部のプログラムを実行してよいか否か)を判断し、秘密鍵演算処理部20の動作を制御する制御部34とを備えている。セキュアLSI1において、各シーケンスが1回発行されると、これに対応したレジスタ33に1が加算される。
【0034】
プログラム暗号種35は、鍵を復号するとき、または鍵を生成するときに用いられるものであり、共有鍵用と固有鍵用とがそれぞれ準備されている。
【0035】
そして、上述の商品動作モードや開発モードにおいては、セキュアメモリ10に格納された値を暗号化部2の各レジスタに設定するシーケンス(セキュアFlashローダー)や鍵を生成・復号するシーケンス(鍵シーケンサ)はそれぞれ1回ずつしか発行できないように、制御部34によって制限がかけられる。例えば、セキュアLSI1の起動時に一度、ブートプログラムによってセキュアメモリに記憶されたモードIDがモードID格納レジスタ31に格納されると、二度とモードIDを書き換えることができない。また、セキュアLSI起動時に共有鍵と固有鍵を復号し、秘密鍵演算処理部20内部のレジスタに格納すると、二度と鍵を生成・復号することはできない。したがって、外部メモリ100に鍵生成プログラムを実装したとしても、鍵は生成することはできない。一度復号された固有鍵は、外部I/F50内の固有鍵格納レジスタに格納され、暗号化プログラムの実行はこの固有鍵を用いて行われる。また、プログラムの更新は、秘密鍵演算処理部20内部のレジスタに格納された共有鍵や固有鍵を用いて行われる。
【0036】
なお、上述の鍵生成モードやアドミニストレータモードにおいては、鍵シーケンサに対する制限が外されるので、鍵を生成することができる。
【0037】
ここで、シーケンス発行回数格納レジスタ33の代わりに、プログラム暗号種に対応して設けられ、その使用回数を格納するプログラム暗号種使用回数格納レジスタを設けてもよい。鍵を生成・復号するときにはプログラム暗号種が用いられるので、例えば、モードIDによってその使用回数を制限しておけば、プログラム暗号種の使用回数を計数することによっても、鍵の生成・復号を制限することができる。
【0038】
また、プログラム暗号種は必ずしも共有鍵と固有鍵とをそれぞれ準備する必要はない。
【0039】
図6はコモンバスとプライベートバスの設定方法を示す図である。ここで、「プライベートバス」とは、外部からのアクセス(外部アクセス)ができないバスのことをいい、外部I/F50から必ずしも物理的に独立しているわけではない。すなわち、プライベートバス91につながっているとして設定されたレジスタ等は、外部アクセスでの読み出し・書き込みができない。
【0040】
セキュアLSI1の内部のレジスタ等には、アドレスがそれぞれ与えられている。コモンバスアドレス格納部82はそのアドレスのうち、コモンバス92につながったレジスタ等のアドレス(図6では“0X00000”〜“0X10000”)を記憶している。外部アクセスがあったときは、外部アクセスアドレス判定部83が、コモンバスアドレス格納部82を参照してコモンバス92へのアクセスか否かを判定し、そうであればこれを受け付ける。一方、外部アクセスがコモンバス92へのアクセスでないときは、プライベートバス91へのアクセスであるので、アクセスを拒否する。
【0041】
なお、CPU65からのアクセス(内部アクセス)のときは、このような判定は行われず、内部アクセスは受け付けられる。
【0042】
図7は外部I/F50とその周辺の構成を示す図である。図7において、アドレス区分格納レジスタ81は、外部メモリ100における各領域と、アドレスとの対応関係を表すアドレス管理情報を格納している。ここでは、外部メモリ100を、第1の領域(設定範囲内のプログラム)、第2の領域(設定範囲外のプログラム)、第3の領域(設定範囲内のデータ)および第4の領域(設定範囲外のデータ)という4つの領域に分けて、そのアドレスを記憶している。
【0043】
比較器85は、アドレス区分格納レジスタ81に格納されたアドレス管理情報を参照し、入出力しようとする情報のアドレスが上述の第1〜第4の領域のいずれに該当するかを判断し、その判断結果を入出力制御信号生成部84に送る。
【0044】
入出力制御信号生成部84は、モードシーケンサ40から出力されたモードIDとジャンパ判定結果、および比較器85の出力に基づいて、外部I/F50が有するどのインターフェースを有効にするかを判定し、その判定結果を入出力制御信号として外部入出力モード制御部54に送る。外部入出力モード制御部54は受けた入出力制御信号に従って、いずれかのインターフェースを有効にする。なお、モードIDが商品動作モードを示すときは、実行スルー部52bは必ず有効にはしない。これにより、外部メモリ100に格納された平文プログラムは実行されないように制限される。
【0045】
第1の領域に格納されたプログラムは、アドミニストレータモードや開発モードのデバッグ時は、プログラム処理部51の実行用スルー部52bを介して取り込まれ、鍵生成モード、商品動作モード、または開発モードでデバッグ時以外のときは、プログラム復号用暗号エンジン53を介して取り込まれる。これらのプログラムは実行可能である。一方、第2の領域に格納されたプログラムは、プログラム処理部51の暗号化用スルー部52aを介して取り込まれ、暗号化部2に供給され、暗号化または再暗号化される。これらのプログラムは実行不可能である。
【0046】
また、第3の領域に格納されたデータは、データ処理部55のデータ暗復号用暗号エンジン58を介して取り込まれ、第4の領域に格納されたデータは、データ処理部55のスルー部56を介して取り込まれる。
【0047】
暗号化用スルー部52aを介して取り込まれたプログラムは、暗号化部2の秘密鍵演算処理部20において暗号化または再暗号化された後、再び暗号化スルー部52aを介して、外部メモリ100の第1の領域に書き込まれる。これにより、以降は実行可能なプログラムとなる。
【0048】
なお、アドレス区分格納レジスタ81およびモードID格納レジスタ41は、プライベートバス91を介して、データが設定される。すなわち、内部からのアクセスによってデータ設定がなされる。また、このデータ設定は、セキュアLSI1のリセット後、1回のみ実行可能である。
【0049】
図8は外部I/F50の動作を示す図であり、商品動作モードを想定している。図8に示すとおり、実装前には、共有鍵で暗号化されたアプリケーションプログラムが外部メモリ100の第2の領域(設定範囲外)に格納されており、このため、このままでは実行することができない。すなわち、第2の領域に格納された,共有鍵で暗号化されたアプリケーションプログラムは、実装時に暗号化用スルー部52aを介してセキュアLSI1内部に取り込まれ、共有鍵で復号化された後、固有鍵で再暗号化され、再び暗号化用スルー部52aを介して、外部メモリ100の第1の領域(設定範囲内)に格納される。そして、この第1の領域に格納された,固有鍵で暗号化されたアプリケーションプログラムは、プログラム復号用暗号エンジン53を介してセキュアLSI1内部に取り込まれ、実行される。
【0050】
なお、開発モードでは、次のような動作を行う。まずデバッグ時には、実行したいプログラムを第1の領域(設定範囲内)に書き込んでおく。これにより、平文プログラムであっても、実行用スルー部52bを介して取り込まれ、実行される。暗号化時には、暗号化したいプログラムを第2の領域(設定範囲外)に書き込んでおく。これにより、セキュアLSI1を起動すると、暗号化シーケンスが実行され、共有鍵で暗号化されて外部メモリ100に格納される。デバッグ実装時には、再暗号化したいプログラムを第2の領域(設定範囲外)に書き込んでおく。さらには、暗号化デバッグ時には、デバッグしたい暗号化プログラムを第1の領域(設定範囲内)に書き込んでおく。これにより、復号されて実行される。
【0051】
図9はセキュアメモリ10のアクセス制御を示す図である。図9に示すように、アクセス制御部95は、書き換え不可領域11のアドレスを格納するレジスタ96と、書き換え不可領域書き込みフラグ12のアドレスを記憶するレジスタ97と、書き込み可/不可判定部98とを備えている。レジスタ96,97は、データが一度書き込まれると、フラグ管理などによって、さらなる書き込みができないように構成されている。
【0052】
アクセス制御は、次のように行われる。CPU65からセキュアメモリ10へのアクセスは、必ず、アクセス制御部95を介して実行される。コマンドが「リード」のときは、アクセス先のアドレスが、書き換え不可領域または通常領域のいずれであっても、セキュアメモリ10のデータはプライベートバス91に出力される。一方、コマンドが「ライト」のときは、書き込み可/不可判定部98が、アクセス先のアドレスとレジスタ96に格納されたアドレス、および書き換え不可領域書き込みフラグ12の値を参照して、書き込みを行うか否かを判定する。具体的には、次のような判断を行う。
(フラグ“済” かつ 書き込み不可領域)… 書き込み不可
(フラグ“済” かつ 通常領域) … 書き込み可
(フラグ“未” かつ 書き込み不可領域)… 書き込み可
(フラグ“未” かつ 通常領域) … 書き込み可
【0053】
なお、セキュアメモリ10には、「セクタ消去」や「チップ消去」などのコマンドも準備されている。書き換え不可領域書き込みフラグ12が“済”のとき、「セクタ消去」は通常領域については受け付けるが、書き込み不可領域については受け付けない。また「チップ消去」は受け付けない。
【0054】
また、コンテンツ(データ)の再生においても、次のような方法を採用することによって、セキュリティを向上させている。
【0055】
データは当初、外部RAM102における第4の領域(設定範囲外)に置かれている。第4の領域に置かれているとき、データは、データ共有鍵(プログラム共有鍵と異なる)によって暗号化された状態か、または平文の状態である。このため、他のLSIによって不正利用される可能性があり、セキュリティの面で問題がある。
【0056】
この問題を解決するために、不正利用を特に防止したい映像や音楽等のコンテンツについては、コンテンツを再生するプログラムを、外部RAM102の第3の領域(設定範囲内)に記憶されたコンテンツしか再生できないように作成する。第3の領域内に置かれたデータは、セキュアLSIに取り込まれるとき、データ暗復号用暗号エンジン58において復号化される。この復号化において用いられるデータ固有鍵は、固有IDと乱数によって作成されるので、セキュアLSI1毎に異なるだけでなく、起動毎にも異なっている。したがって、データは不正利用されにくくなり、セキュリティが向上する。なお、コンテンツを再生するプログラムも固有鍵で暗号化されているので、改竄されにくいと考えられる。
【0057】
図10および図11は商品動作モードにおける通常ブート処理のデータフローである。図10において、まず、セキュアメモリ10の書き込み不可領域11に格納されている、暗号化されたプログラム固有鍵Enc(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する。そして、この暗号化されたプログラム固有鍵を、実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る。得たプログラム固有鍵は、外部I/F50のプログラム復号用暗号エンジン53のプログラム固有鍵格納レジスタに設定する。その後、セキュアメモリ10の書き込み不可領域11に格納されているデータ固有IDを秘密鍵演算処理部20の固有ID格納レジスタに設定する。また、CPU65によって乱数を生成し、秘密鍵演算処理部20の乱数格納レジスタに設定する。そして、秘密鍵演算処理部20によって、データ固有IDと乱数からデータ固有鍵を生成する。生成されたデータ固有鍵は、外部I/F50のデータ暗復号用暗号エンジン58のデータ固有鍵格納レジスタに設定される。
【0058】
その後、図11において、外部メモリ100に格納されていた,プログラム固有鍵で暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)を、外部I/F50が有するプログラム処理部51のプログラム復号用暗号エンジン53を介して復号し、HASH演算部70に取り込み、HASH値を演算する。そして、この演算したHASH値と、セキュアメモリ10の通常領域13に格納されていたHASH値とを比較し、アプリケーションプログラムが改ざんされていないかどうかをチェックする。HASH値が一致していたとき、外部メモリ100に格納されていたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)に処理を遷移し、アプリケーションを実行する。なお、HASH値が一致していないときは、何らかの不正が行われたものと推定して、不正アクセス時制御による処理を実行する。
【0059】
アプリケーションプログラムは、CPU65によって実行される。すなわち、セキュアLSI1内部のCPU65がマスターとなってアクセス制御を行うので、以降の動作は内部アクセスとなり、したがって、外部アクセスアドレス判定部83は関与しない。アプリケーションプログラムによって、外部RAM102の第4の領域(再生不可領域)から、データ共有鍵で暗号化されたコンテンツ(原コンテンツ)がセキュアLSI1に取り込まれる。取り込まれたコンテンツは、セキュアメモリ10に書き込まれたデータ共有鍵を用いて、秘密鍵演算処理部20において復号化される。その後、外部I/F50のデータ処理部55におけるデータ暗復号用暗号エンジン58を介してデータ固有鍵で暗号化され、外部RAM102の第3の領域(再生可能領域)に書き込まれる。以降、このデータ固有鍵で暗号化されたコンテンツは再生可能となり、再生されるとき、外部I/F50のデータ処理部55におけるデータ暗復号用暗号エンジン58を介して、データ固有鍵で復号化される。
【符号の説明】
【0060】
1 セキュアLSI(半導体装置)
2 暗号化部
10 セキュアメモリ
11 書き換え不可領域
20 秘密鍵演算処理部(暗号化演算部)
30 鍵生成・更新シーケンサ(暗号化制御部)
31 モードID格納レジスタ
41 モードID格納レジスタ
50 外部インターフェース
60 ブートROM
100 外部メモリ
【技術分野】
【0001】
本発明は、鍵実装システムに用いられるLSIのような半導体装置において、セキュリティを向上させる技術に属する。
【背景技術】
【0002】
本願と同一の出願人による特願2001−286881では、鍵実装システムにおいて、鍵の機密性および秘匿性を、従来よりも向上させる技術が示されている。
【0003】
しかし、かかる先行技術は、文献公知発明に係るものではないため、記載すべき先行技術文献情報はない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、セキュリティレベルの高い半導体装置を提供することを課題とする。
【課題を解決するための手段】
【0005】
本発明の第1態様は、半導体装置として、
ブートプログラムを記憶するブートROMと、
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちのいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段と、
外部メモリに記憶された外部プログラムの正当性を検証するためのプログラム検証部とを備え、
前記ブートプログラムは,前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードに応じて、そのシーケンスが制御されるものであり、かつ、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムの実行が可能である一方、前記モードIDが前記商品モードを示すときは、前記プログラム検証部によって正当性が証明された外部プログラムのみを実行するものである。
【0006】
本発明の第2態様は、商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段を有する半導体装置を、ブートする方法として、
前記半導体装置内のブートROMからブートプログラムを起動するステップと、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードを判定するステップと、
前記ブートプログラムの実行によって、外部メモリに記憶された外部プログラムの正当性を検証するステップとを備え、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムに処理が遷移する一方、前記モードIDが前記商品モードを示すときは、外部プログラムの正当性が証明された場合のみ、当該外部プログラムへと処理が遷移するものである。
【発明の効果】
【0007】
以上のように本発明によると、半導体装置には、現在の動作モードを示すモードIDを記憶するためのモードID記憶手段が設けられている。そして、モードIDがプログラムを開発するための開発モードを示すときは、外部メモリに記憶された外部プログラムの実行が可能である一方、モードIDが商品として動作するための商品モードを示すときは、正当性が証明された外部プログラムのみが実行される。このため、コンテンツの不正実行が防止される。したがって、セキュリティレベルが向上する。
【図面の簡単な説明】
【0008】
【図1】本発明の実施形態に係る半導体装置としてのセキュアLSIの構成を示すブロック図である。
【図2】図1のセキュアLSIを用いた開発および製品化の全体の流れを表す図である。
【図3】ブートプログラムの全体的な処理の流れを示すフローチャートである。
【図4】初期値設定処理SZ1のフローチャートである。
【図5】図1のセキュアLSIにおける暗号化部とその周辺の構成を示す図である。
【図6】図1のセキュアLSIにおけるコモンバスとプライベートバスの設定方法を示す図である。
【図7】図1のセキュアLSIにおける外部ホストI/Fとその周辺の構成を示す図である。
【図8】商品動作モードにおける外部ホストI/Fの動作を示す図である。
【図9】セキュアメモリのアクセス制御を示す図である。
【図10】商品動作モードにおける通常ブート処理のデータフローその1である。
【図11】商品動作モードにおける通常ブート処理のデータフローその2である。
【発明を実施するための形態】
【0009】
以下、本発明の実施の形態について、図面を参照して説明する。
【0010】
図1は本実施形態に係る半導体装置としてのセキュアLSIの内部構成を示すブロック図である。図1において、セキュアLSI1は外部バス120を介して、外部メモリ100(フラッシュメモリ101とRAM102)などと接続可能に構成されている。また、モードIDを与えることによって、その動作モードを設定することが可能になっている。
【0011】
本実施形態に関わる主な構成要素について、簡単に説明する。
【0012】
まず、セキュアLSI1は、書き換え不可領域11を含むセキュアメモリ(セキュアFlash)10を備えている。この書き換え不可領域11には、書き換え不可領域書き込みフラグ12が設けられている。書き換え不可領域書き込みフラグ12は、モードIDが一度セキュアメモリ10に書き込まれると、そのフラグ値が“可”から“済”になり、それ以降の書き換え不可領域11への書き込みを不能にする。なお、本実施形態では、セキュアメモリ10はフラッシュメモリによって構成されているが、もちろんこれに限定されるものではなく、不揮発性のメモリであればどのようなものであってもかまわない。
【0013】
また、暗号化部2はプログラムの暗号化や復号化を行うものであり、暗号化演算部としての秘密鍵演算処理部20と、暗号化制御部としての鍵生成・更新シーケンサ30と、プログラム暗号種を記憶する記憶部35とを備えている。秘密鍵演算処理部20は各種の鍵などを格納するレジスタを備えており、プログラムの暗号化処理または復号化処理を含む複数のシーケンスを実行可能である。鍵生成・更新シーケンサ30は秘密鍵演算処理部20が実行可能な各シーケンスについて実行の諾否を判断し、実行が許されないと判断したシーケンスについて秘密鍵演算処理部20の動作を禁止する。鍵生成・更新シーケンサ30はモードID格納レジスタ31を有しており、このモードID格納レジスタ31に格納されているモードIDの値に基づいて、各シーケンスの実行の諾否を判断する。また、鍵またはプログラムがどのようなアルゴリズムや鍵長で暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ32を備えている。暗号化部2の構成および動作の詳細については、後述する。
【0014】
モードシーケンサ40も、モードID格納レジスタ41を備えており、モードID格納レジスタ41に格納されているモードIDと、ジャンパ43の値に応じて、外部インターフェース(I/F)50の動作、すなわち、外部メモリ100に格納されたプログラムやデータをどのI/Fを介して読み込むか、が制御される。これにより、外部メモリ100に格納された平文プログラムが実行できるか否かを制御することができる。さらに、モードシーケンサ40は、鍵がどの手法によって暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ42を備えている。
【0015】
外部I/F50は、モードシーケンサ40の制御に従って、プログラム処理部51が有するスルー部52およびプログラム復号用暗号エンジン53、並びに、データ処理部55が有するスルー部56およびデータ暗復号用暗号エンジン58のうちのいずれかを介して、外部メモリ100との間でプログラムやデータの入出力を行う。
【0016】
ここで、後述するアドミニストレータモードとアプリプログラム開発を除いては、スルー部52を介して入力されたプログラムは、セキュアLSI1内部で実行されることはない。すなわち、スルー部52は、平文プログラムの暗号化、またはすでに暗号化されたプログラムを別の鍵を用いて再暗号化するときに有効とされるものであり、セキュアLSI1は、後述するアドミニストレータモードとアプリプログラム開発を除いては、スルー部52を介して入力されたプログラムへは動作を遷移しないように構成されている。したがって、例えば商品となったセキュアLSI1はスルー部52を介して平文プログラムを取り込んだとしても、これを実行することはできない。
【0017】
ブートROM60は、セキュアLSI1の起動動作を制御するブートプログラムを格納している。HASH演算部70は、セキュアLSI1に読み込まれたプログラムについてその正当性を検証するために、HASH値を演算する。
【0018】
また、外部メモリ100では、プログラムがフラッシュメモリ101に格納され、データ(コンテンツ)がRAM102に格納されている。外部ツール110には、セキュアLSI1の最初の起動時にセキュアメモリ10に格納する各種の初期値が格納されている。この初期値の種類は、設定される動作モードに応じて、異なったものになる。
【0019】
図2は図1のセキュアLSI1を用いた開発および製品化の全体の流れを表す図である。図2に示すように、セキュアLSI1は、アドミニストレータモード(モードID:00)、鍵生成モード(モードID:01)、開発モード(モードID:10)および商品動作モード(モードID:11)の4種類の動作モードで、動作する。
【0020】
まず、アドミニストレータモードに設定されたセキュアLSI1は、管理者用LSIとして、動作する。管理者用LSIでは、鍵生成プログラムが開発され(PA1)、また、その鍵生成プログラムが任意の鍵生成鍵を用いて暗号化される(PA2)。
【0021】
鍵生成モードに設定されたセキュアLSI1は、鍵生成用LSIとして、動作する。鍵生成用LSIでは、管理者用LSIにおいて生成された、暗号化された鍵生成プログラムが実装され(PB1)、この鍵生成プログラムを実行することによって、各種の鍵が生成される(PB2)。
【0022】
開発モードに設定されたセキュアLSI1は、開発用LSIとして、動作する。開発用LSIでは、実際の製品で実行されるアプリケーション用プログラムが開発される(PC1)。そして、このアプリケーション用プログラムが、プログラム共有鍵を用いて暗号化される(PC2)。
【0023】
商品動作モードに設定されたセキュアLSI1は、実際の商品LSIとして、動作する。商品LSIでは、開発用LSIにおいて生成された、プログラム共有鍵で暗号化されたアプリケーション用プログラムが実装され、その内部で、プログラム固有鍵で暗号化されたアプリケーション用プログラムに、変換される(PD1)。プログラム固有鍵で暗号化されたアプリケーションプログラムは通常の商品動作において実行される。なお、この変換処理は、開発用LSIでも、アプリケーション用プログラムのデバッグ(PC4)のために、実行可能になっている(PC3)。
【0024】
セキュアLSI1は、ブートROM60に格納されたブートプログラムを実行することによって、以下のような動作を行う。
【0025】
図3はブートプログラムの全体的な処理の流れを示すフローチャートである。セキュアLSI1に電源が投入されると、ブートROM60に格納されたブートプログラムがCPU65によって実行される。図3に示すように、まず、各ハードウェアを初期化する(SZ0)。そして、外部ツール110からさまざまな初期値を読み込み、セキュアメモリ10に設定する(SZ1)。
【0026】
図4は初期値設定処理SZ1のフローチャートである。まず、ジャンパ44で、セキュアメモリ10がLSI内に実装されているか否かの判定を行う(SZ11)。次に、書き換え不可領域書き込みフラグ12が“済”であるか否かを判定し(SZ12)、“済”であるときは(SZ12でYes)すでにセキュアメモリ10に初期値が設定されているので、処理SZ1を終了する。書き換え不可領域書き込みフラグ12が“可”であるときは(SZ12でNo)、セキュアメモリ10に初期値を書き込んでいく。モードIDに加えて、暗号化されたプログラム固有鍵、アドレス管理情報、データ固有鍵をセキュアメモリ10の書き換え不可領域11に書き込む(SZ13,SZ16〜SZ18)。なお、最初の判定の結果、セキュアメモリ10がLSIの外部にあると判定されたとき(SZ14でNo)は、モードIDは商品動作モードを表す値に上書きされる(SZ15)。これにより、セキュアメモリ10がLSIパッケージ外にあるような製品は、商品動作モードでしか動作できない。
【0027】
次に、書き込み不可領域書き込みフラグ12を“済”にセットする(SZ19)。これによって、以後の書き換え不可領域11の書き換えはできなくなる。さらに、通常領域13,14に暗号種別識別子および実装モードフラグを書き込む(SZ1A)。そして、モードIDがアドミニストレータモード以外のモードを示すときは(SZ1BでNo)、これらに加えて、暗号化された共有鍵/鍵生成鍵も通常領域13,14に書き込む(SZ1C)。
【0028】
その後、図3にもどり、前処理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に対応している。
【0029】
その後は、モードIDの値に応じて、それぞれのモードにおける動作を行う(SZ3)。
【0030】
モードIDが「00」のとき、セキュアLSI1はアドミニストレータモードになり、ジャンパ43の値に応じて(SA0)、平文プログラム実行処理SA1、またはプログラム暗号化処理SA2を実行する。鍵生成プログラム開発フェーズPA1では、平文プログラム実行処理SA1が行われ、ここで、鍵生成プログラムが生成される。この鍵生成プログラムは外部メモリ100に格納される。鍵生成プログラム暗号化フェーズPA2では、鍵生成プログラムを任意の鍵生成鍵で暗号化する。
【0031】
モードIDが「01」のとき、セキュアLSI1は鍵生成モードになり、実装モードフラグの値に応じて(SB0)、キージェネレータ製造処理SB1、または鍵管理・発行処理SB2を実行する。キージェネレータ製造フェーズPB1では、キージェネレータ製造処理SB1が実行され、任意の鍵生成鍵で暗号化された鍵生成プログラムをプログラム固有鍵で再暗号化する。鍵管理・発行フェーズPB2では、プログラム固有鍵で暗号化された鍵生成プログラムを実行させることによって、鍵管理・発行処理SB2が実行し、鍵を生成する。
【0032】
モードIDが「10」のとき、セキュアLSI1は開発モードになり、ジャンパ43の値に応じて(SC0)、プログラム暗号化処理SC1、平文プログラム実行処理SC2、プログラム実装処理SC3、または暗号化プログラム実行処理SC4を実行する。アプリケーションプログラム開発フェーズPC1では、平文プログラム実行処理SC2が行われ、アプリケーションプログラムが開発される。開発されたアプリケーションプログラムは、外部メモリ100に格納される。アプリケーションプログラム暗号化フェーズPC2では、プログラム暗号化処理SC1が実行される。また、アプリケーションプログラム実装フェーズPC3では、プログラム実装処理SC3が実行され、アプリケーションプログラムデバッグフェーズPC4では、暗号化プログラム実行処理SC4が実行される。これらの処理は、商品動作モードにおける各処理SD1,SD2と同様である
モードIDが「11」のとき、セキュアLSI1は商品動作モードになり、実装モードフラグの値に応じて(SD0)、プログラム実装処理SD1、または通常ブート処理SD2を実行する。商品実装フェーズPD1では、プログラム実装処理SD1が実行される。商品動作フェーズPD2では、通常ブート処理SD2が実行される。
【0033】
図5は暗号化部2とその周辺の構成を示す図である。図5に示すように、鍵生成・更新シーケンサ30はモードID格納レジスタ31および暗号種別識別子格納レジスタ32の他に、秘密演算処理部20を用いて実行される各シーケンスに対応して設けられ、その発行回数を格納するためのレジスタ33と、レジスタ31,33を参照して、各シーケンスを実行してよいか否か(ブートROM60中の各プログラムおよび外部のプログラムを実行してよいか否か)を判断し、秘密鍵演算処理部20の動作を制御する制御部34とを備えている。セキュアLSI1において、各シーケンスが1回発行されると、これに対応したレジスタ33に1が加算される。
【0034】
プログラム暗号種35は、鍵を復号するとき、または鍵を生成するときに用いられるものであり、共有鍵用と固有鍵用とがそれぞれ準備されている。
【0035】
そして、上述の商品動作モードや開発モードにおいては、セキュアメモリ10に格納された値を暗号化部2の各レジスタに設定するシーケンス(セキュアFlashローダー)や鍵を生成・復号するシーケンス(鍵シーケンサ)はそれぞれ1回ずつしか発行できないように、制御部34によって制限がかけられる。例えば、セキュアLSI1の起動時に一度、ブートプログラムによってセキュアメモリに記憶されたモードIDがモードID格納レジスタ31に格納されると、二度とモードIDを書き換えることができない。また、セキュアLSI起動時に共有鍵と固有鍵を復号し、秘密鍵演算処理部20内部のレジスタに格納すると、二度と鍵を生成・復号することはできない。したがって、外部メモリ100に鍵生成プログラムを実装したとしても、鍵は生成することはできない。一度復号された固有鍵は、外部I/F50内の固有鍵格納レジスタに格納され、暗号化プログラムの実行はこの固有鍵を用いて行われる。また、プログラムの更新は、秘密鍵演算処理部20内部のレジスタに格納された共有鍵や固有鍵を用いて行われる。
【0036】
なお、上述の鍵生成モードやアドミニストレータモードにおいては、鍵シーケンサに対する制限が外されるので、鍵を生成することができる。
【0037】
ここで、シーケンス発行回数格納レジスタ33の代わりに、プログラム暗号種に対応して設けられ、その使用回数を格納するプログラム暗号種使用回数格納レジスタを設けてもよい。鍵を生成・復号するときにはプログラム暗号種が用いられるので、例えば、モードIDによってその使用回数を制限しておけば、プログラム暗号種の使用回数を計数することによっても、鍵の生成・復号を制限することができる。
【0038】
また、プログラム暗号種は必ずしも共有鍵と固有鍵とをそれぞれ準備する必要はない。
【0039】
図6はコモンバスとプライベートバスの設定方法を示す図である。ここで、「プライベートバス」とは、外部からのアクセス(外部アクセス)ができないバスのことをいい、外部I/F50から必ずしも物理的に独立しているわけではない。すなわち、プライベートバス91につながっているとして設定されたレジスタ等は、外部アクセスでの読み出し・書き込みができない。
【0040】
セキュアLSI1の内部のレジスタ等には、アドレスがそれぞれ与えられている。コモンバスアドレス格納部82はそのアドレスのうち、コモンバス92につながったレジスタ等のアドレス(図6では“0X00000”〜“0X10000”)を記憶している。外部アクセスがあったときは、外部アクセスアドレス判定部83が、コモンバスアドレス格納部82を参照してコモンバス92へのアクセスか否かを判定し、そうであればこれを受け付ける。一方、外部アクセスがコモンバス92へのアクセスでないときは、プライベートバス91へのアクセスであるので、アクセスを拒否する。
【0041】
なお、CPU65からのアクセス(内部アクセス)のときは、このような判定は行われず、内部アクセスは受け付けられる。
【0042】
図7は外部I/F50とその周辺の構成を示す図である。図7において、アドレス区分格納レジスタ81は、外部メモリ100における各領域と、アドレスとの対応関係を表すアドレス管理情報を格納している。ここでは、外部メモリ100を、第1の領域(設定範囲内のプログラム)、第2の領域(設定範囲外のプログラム)、第3の領域(設定範囲内のデータ)および第4の領域(設定範囲外のデータ)という4つの領域に分けて、そのアドレスを記憶している。
【0043】
比較器85は、アドレス区分格納レジスタ81に格納されたアドレス管理情報を参照し、入出力しようとする情報のアドレスが上述の第1〜第4の領域のいずれに該当するかを判断し、その判断結果を入出力制御信号生成部84に送る。
【0044】
入出力制御信号生成部84は、モードシーケンサ40から出力されたモードIDとジャンパ判定結果、および比較器85の出力に基づいて、外部I/F50が有するどのインターフェースを有効にするかを判定し、その判定結果を入出力制御信号として外部入出力モード制御部54に送る。外部入出力モード制御部54は受けた入出力制御信号に従って、いずれかのインターフェースを有効にする。なお、モードIDが商品動作モードを示すときは、実行スルー部52bは必ず有効にはしない。これにより、外部メモリ100に格納された平文プログラムは実行されないように制限される。
【0045】
第1の領域に格納されたプログラムは、アドミニストレータモードや開発モードのデバッグ時は、プログラム処理部51の実行用スルー部52bを介して取り込まれ、鍵生成モード、商品動作モード、または開発モードでデバッグ時以外のときは、プログラム復号用暗号エンジン53を介して取り込まれる。これらのプログラムは実行可能である。一方、第2の領域に格納されたプログラムは、プログラム処理部51の暗号化用スルー部52aを介して取り込まれ、暗号化部2に供給され、暗号化または再暗号化される。これらのプログラムは実行不可能である。
【0046】
また、第3の領域に格納されたデータは、データ処理部55のデータ暗復号用暗号エンジン58を介して取り込まれ、第4の領域に格納されたデータは、データ処理部55のスルー部56を介して取り込まれる。
【0047】
暗号化用スルー部52aを介して取り込まれたプログラムは、暗号化部2の秘密鍵演算処理部20において暗号化または再暗号化された後、再び暗号化スルー部52aを介して、外部メモリ100の第1の領域に書き込まれる。これにより、以降は実行可能なプログラムとなる。
【0048】
なお、アドレス区分格納レジスタ81およびモードID格納レジスタ41は、プライベートバス91を介して、データが設定される。すなわち、内部からのアクセスによってデータ設定がなされる。また、このデータ設定は、セキュアLSI1のリセット後、1回のみ実行可能である。
【0049】
図8は外部I/F50の動作を示す図であり、商品動作モードを想定している。図8に示すとおり、実装前には、共有鍵で暗号化されたアプリケーションプログラムが外部メモリ100の第2の領域(設定範囲外)に格納されており、このため、このままでは実行することができない。すなわち、第2の領域に格納された,共有鍵で暗号化されたアプリケーションプログラムは、実装時に暗号化用スルー部52aを介してセキュアLSI1内部に取り込まれ、共有鍵で復号化された後、固有鍵で再暗号化され、再び暗号化用スルー部52aを介して、外部メモリ100の第1の領域(設定範囲内)に格納される。そして、この第1の領域に格納された,固有鍵で暗号化されたアプリケーションプログラムは、プログラム復号用暗号エンジン53を介してセキュアLSI1内部に取り込まれ、実行される。
【0050】
なお、開発モードでは、次のような動作を行う。まずデバッグ時には、実行したいプログラムを第1の領域(設定範囲内)に書き込んでおく。これにより、平文プログラムであっても、実行用スルー部52bを介して取り込まれ、実行される。暗号化時には、暗号化したいプログラムを第2の領域(設定範囲外)に書き込んでおく。これにより、セキュアLSI1を起動すると、暗号化シーケンスが実行され、共有鍵で暗号化されて外部メモリ100に格納される。デバッグ実装時には、再暗号化したいプログラムを第2の領域(設定範囲外)に書き込んでおく。さらには、暗号化デバッグ時には、デバッグしたい暗号化プログラムを第1の領域(設定範囲内)に書き込んでおく。これにより、復号されて実行される。
【0051】
図9はセキュアメモリ10のアクセス制御を示す図である。図9に示すように、アクセス制御部95は、書き換え不可領域11のアドレスを格納するレジスタ96と、書き換え不可領域書き込みフラグ12のアドレスを記憶するレジスタ97と、書き込み可/不可判定部98とを備えている。レジスタ96,97は、データが一度書き込まれると、フラグ管理などによって、さらなる書き込みができないように構成されている。
【0052】
アクセス制御は、次のように行われる。CPU65からセキュアメモリ10へのアクセスは、必ず、アクセス制御部95を介して実行される。コマンドが「リード」のときは、アクセス先のアドレスが、書き換え不可領域または通常領域のいずれであっても、セキュアメモリ10のデータはプライベートバス91に出力される。一方、コマンドが「ライト」のときは、書き込み可/不可判定部98が、アクセス先のアドレスとレジスタ96に格納されたアドレス、および書き換え不可領域書き込みフラグ12の値を参照して、書き込みを行うか否かを判定する。具体的には、次のような判断を行う。
(フラグ“済” かつ 書き込み不可領域)… 書き込み不可
(フラグ“済” かつ 通常領域) … 書き込み可
(フラグ“未” かつ 書き込み不可領域)… 書き込み可
(フラグ“未” かつ 通常領域) … 書き込み可
【0053】
なお、セキュアメモリ10には、「セクタ消去」や「チップ消去」などのコマンドも準備されている。書き換え不可領域書き込みフラグ12が“済”のとき、「セクタ消去」は通常領域については受け付けるが、書き込み不可領域については受け付けない。また「チップ消去」は受け付けない。
【0054】
また、コンテンツ(データ)の再生においても、次のような方法を採用することによって、セキュリティを向上させている。
【0055】
データは当初、外部RAM102における第4の領域(設定範囲外)に置かれている。第4の領域に置かれているとき、データは、データ共有鍵(プログラム共有鍵と異なる)によって暗号化された状態か、または平文の状態である。このため、他のLSIによって不正利用される可能性があり、セキュリティの面で問題がある。
【0056】
この問題を解決するために、不正利用を特に防止したい映像や音楽等のコンテンツについては、コンテンツを再生するプログラムを、外部RAM102の第3の領域(設定範囲内)に記憶されたコンテンツしか再生できないように作成する。第3の領域内に置かれたデータは、セキュアLSIに取り込まれるとき、データ暗復号用暗号エンジン58において復号化される。この復号化において用いられるデータ固有鍵は、固有IDと乱数によって作成されるので、セキュアLSI1毎に異なるだけでなく、起動毎にも異なっている。したがって、データは不正利用されにくくなり、セキュリティが向上する。なお、コンテンツを再生するプログラムも固有鍵で暗号化されているので、改竄されにくいと考えられる。
【0057】
図10および図11は商品動作モードにおける通常ブート処理のデータフローである。図10において、まず、セキュアメモリ10の書き込み不可領域11に格納されている、暗号化されたプログラム固有鍵Enc(プログラム固有鍵、MK0),Enc(MK0,CK)を秘密鍵演算処理部20の暗号鍵格納レジスタに設定する。そして、この暗号化されたプログラム固有鍵を、実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る。得たプログラム固有鍵は、外部I/F50のプログラム復号用暗号エンジン53のプログラム固有鍵格納レジスタに設定する。その後、セキュアメモリ10の書き込み不可領域11に格納されているデータ固有IDを秘密鍵演算処理部20の固有ID格納レジスタに設定する。また、CPU65によって乱数を生成し、秘密鍵演算処理部20の乱数格納レジスタに設定する。そして、秘密鍵演算処理部20によって、データ固有IDと乱数からデータ固有鍵を生成する。生成されたデータ固有鍵は、外部I/F50のデータ暗復号用暗号エンジン58のデータ固有鍵格納レジスタに設定される。
【0058】
その後、図11において、外部メモリ100に格納されていた,プログラム固有鍵で暗号化されたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)を、外部I/F50が有するプログラム処理部51のプログラム復号用暗号エンジン53を介して復号し、HASH演算部70に取り込み、HASH値を演算する。そして、この演算したHASH値と、セキュアメモリ10の通常領域13に格納されていたHASH値とを比較し、アプリケーションプログラムが改ざんされていないかどうかをチェックする。HASH値が一致していたとき、外部メモリ100に格納されていたアプリケーションプログラムEnc(アプリケーションプログラム,プログラム固有鍵)に処理を遷移し、アプリケーションを実行する。なお、HASH値が一致していないときは、何らかの不正が行われたものと推定して、不正アクセス時制御による処理を実行する。
【0059】
アプリケーションプログラムは、CPU65によって実行される。すなわち、セキュアLSI1内部のCPU65がマスターとなってアクセス制御を行うので、以降の動作は内部アクセスとなり、したがって、外部アクセスアドレス判定部83は関与しない。アプリケーションプログラムによって、外部RAM102の第4の領域(再生不可領域)から、データ共有鍵で暗号化されたコンテンツ(原コンテンツ)がセキュアLSI1に取り込まれる。取り込まれたコンテンツは、セキュアメモリ10に書き込まれたデータ共有鍵を用いて、秘密鍵演算処理部20において復号化される。その後、外部I/F50のデータ処理部55におけるデータ暗復号用暗号エンジン58を介してデータ固有鍵で暗号化され、外部RAM102の第3の領域(再生可能領域)に書き込まれる。以降、このデータ固有鍵で暗号化されたコンテンツは再生可能となり、再生されるとき、外部I/F50のデータ処理部55におけるデータ暗復号用暗号エンジン58を介して、データ固有鍵で復号化される。
【符号の説明】
【0060】
1 セキュアLSI(半導体装置)
2 暗号化部
10 セキュアメモリ
11 書き換え不可領域
20 秘密鍵演算処理部(暗号化演算部)
30 鍵生成・更新シーケンサ(暗号化制御部)
31 モードID格納レジスタ
41 モードID格納レジスタ
50 外部インターフェース
60 ブートROM
100 外部メモリ
【特許請求の範囲】
【請求項1】
ブートプログラムを記憶するブートROMと、
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちのいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段と、
外部メモリに記憶された外部プログラムの正当性を検証するためのプログラム検証部とを備え、
前記ブートプログラムは,前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードに応じて、そのシーケンスが制御されるものであり、かつ、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムの実行が可能である一方、前記モードIDが前記商品モードを示すときは、前記プログラム検証部によって正当性が証明された外部プログラムのみを実行する
ことを特徴とする半導体装置。
【請求項2】
請求項1記載の半導体装置において、
前記ブートプログラムは、前記プログラム検証部によって正当性が証明された外部プログラムを、当該半導体装置内部に読み込むものである
ことを特徴とする半導体装置。
【請求項3】
請求項1記載の半導体装置において、
前記モードID記憶手段は、前記モードIDを書き換え不可能な状態で記憶する
ことを特徴とする半導体装置。
【請求項4】
請求項3記載の半導体装置において、
前記モードID記憶手段の書き換えの可否を制御するフラグをさらに備え、
前記モードID記憶手段にモードIDが書き込まれたとき、前記フラグのフラグ値が所定の値に設定され、前記モードID記憶手段が書き換え不可能な状態になる
ことを特徴とする半導体装置。
【請求項5】
請求項1記載の半導体装置において、
モードID格納レジスタをさらに備え、
前記ブートプログラムは、前記モードID記憶手段に記憶されたモードIDを、前記モードID格納レジスタに設定する
ことを特徴とする半導体装置。
【請求項6】
請求項5記載の半導体装置において、
前記ブートプログラムは、各動作モードで共通する第1のシーケンスと、動作モード毎に異なる第2のシーケンスとを有しており、
前記第1のシーケンスにおいて、前記モードID格納レジスタにモードIDが設定される
ことを特徴とする半導体装置。
【請求項7】
請求項1記載の半導体装置において、
前記商品モードにおいてプログラムまたはデータを復号化するために必要なパラメータを記憶する鍵処理部をさらに備え、
前記ブートプログラムは、前記鍵処理部への前記パラメータの設定を行う
ことを特徴とする半導体装置。
【請求項8】
請求項1記載の半導体装置において、
前記プログラム検証部は、外部プログラムのハッシュ値を演算し、予め記憶されているハッシュ値と当該演算されたハッシュ値との比較を行うことにより、当該外部プログラムの正当性を検証する
ことを特徴とする半導体装置。
【請求項9】
請求項1記載の半導体装置において、
前記外部メモリは、フラッシュメモリであり、
前記フラッシュメモリからプログラム及びデータを読み込むためのインターフェース部をさらに備えた
ことを特徴とする半導体装置。
【請求項10】
請求項1記載の半導体装置において、
前記商品モードにおいて、前記外部プログラムは、前記半導体装置毎に固有の固有鍵によって暗号化された状態で、前記外部メモリに記憶されている
ことを特徴とする半導体装置。
【請求項11】
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段を有する半導体装置を、ブートする方法であって、
前記半導体装置内のブートROMからブートプログラムを起動するステップと、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードを判定するステップと、
前記ブートプログラムの実行によって、外部メモリに記憶された外部プログラムの正当性を検証するステップとを備え、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムに処理が遷移する一方、前記モードIDが前記商品モードを示すときは、外部プログラムの正当性が証明された場合のみ、当該外部プログラムへと処理が遷移する
ことを特徴とする半導体装置のブート方法。
【請求項12】
請求項11記載の半導体装置のブート方法において、
正当性が証明された外部プログラムを、前記半導体装置内部に読み込むステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項13】
請求項11記載の半導体装置のブート方法において、
前記モードIDが、前記モードID記憶手段に書き換え不可能な状態で記憶される
ことを特徴とする半導体装置のブート方法。
【請求項14】
請求項13記載の半導体装置のブート方法において、
前記モードID記憶手段にモードIDが書き込まれたとき、前記モードID記憶手段の書き換えの可否を制御するフラグのフラグ値を所定の値に設定し、前記モードID記憶手段を書き換え不可能な状態にする
ことを特徴とする半導体装置のブート方法。
【請求項15】
請求項11記載の半導体装置のブート方法において、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDを、前記半導体装置内部のモードID格納レジスタに設定するステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項16】
請求項15記載の半導体装置のブート方法において、
前記ブートプログラムは、各動作モードで共通する第1のシーケンスと、動作モード毎に異なる第2のシーケンスとを有しており、
前記第1のシーケンスにおいて、前記モードID格納レジスタにモードIDを設定する
ことを特徴とする半導体装置のブート方法。
【請求項17】
請求項11記載の半導体装置のブート方法において、
前記モードIDが前記商品モードを示すとき、前記ブートプログラムの実行によって、プログラムまたはデータを復号化するために必要なパラメータを設定するステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項18】
請求項11記載の半導体装置のブート方法において、
外部プログラムの正当性の検証を、前記外部プログラムのハッシュ値を演算し、予め記憶されているハッシュ値と当該演算されたハッシュ値との比較を行うことにより,行う
ことを特徴とする半導体装置のブート方法。
【請求項19】
請求項11記載の半導体装置のブート方法において、
前記商品モードにおいて、前記外部プログラムは、前記半導体装置毎に固有の固有鍵によって暗号化された状態で、前記外部メモリに記憶されている
ことを特徴とする半導体装置のブート方法。
【請求項1】
ブートプログラムを記憶するブートROMと、
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちのいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段と、
外部メモリに記憶された外部プログラムの正当性を検証するためのプログラム検証部とを備え、
前記ブートプログラムは,前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードに応じて、そのシーケンスが制御されるものであり、かつ、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムの実行が可能である一方、前記モードIDが前記商品モードを示すときは、前記プログラム検証部によって正当性が証明された外部プログラムのみを実行する
ことを特徴とする半導体装置。
【請求項2】
請求項1記載の半導体装置において、
前記ブートプログラムは、前記プログラム検証部によって正当性が証明された外部プログラムを、当該半導体装置内部に読み込むものである
ことを特徴とする半導体装置。
【請求項3】
請求項1記載の半導体装置において、
前記モードID記憶手段は、前記モードIDを書き換え不可能な状態で記憶する
ことを特徴とする半導体装置。
【請求項4】
請求項3記載の半導体装置において、
前記モードID記憶手段の書き換えの可否を制御するフラグをさらに備え、
前記モードID記憶手段にモードIDが書き込まれたとき、前記フラグのフラグ値が所定の値に設定され、前記モードID記憶手段が書き換え不可能な状態になる
ことを特徴とする半導体装置。
【請求項5】
請求項1記載の半導体装置において、
モードID格納レジスタをさらに備え、
前記ブートプログラムは、前記モードID記憶手段に記憶されたモードIDを、前記モードID格納レジスタに設定する
ことを特徴とする半導体装置。
【請求項6】
請求項5記載の半導体装置において、
前記ブートプログラムは、各動作モードで共通する第1のシーケンスと、動作モード毎に異なる第2のシーケンスとを有しており、
前記第1のシーケンスにおいて、前記モードID格納レジスタにモードIDが設定される
ことを特徴とする半導体装置。
【請求項7】
請求項1記載の半導体装置において、
前記商品モードにおいてプログラムまたはデータを復号化するために必要なパラメータを記憶する鍵処理部をさらに備え、
前記ブートプログラムは、前記鍵処理部への前記パラメータの設定を行う
ことを特徴とする半導体装置。
【請求項8】
請求項1記載の半導体装置において、
前記プログラム検証部は、外部プログラムのハッシュ値を演算し、予め記憶されているハッシュ値と当該演算されたハッシュ値との比較を行うことにより、当該外部プログラムの正当性を検証する
ことを特徴とする半導体装置。
【請求項9】
請求項1記載の半導体装置において、
前記外部メモリは、フラッシュメモリであり、
前記フラッシュメモリからプログラム及びデータを読み込むためのインターフェース部をさらに備えた
ことを特徴とする半導体装置。
【請求項10】
請求項1記載の半導体装置において、
前記商品モードにおいて、前記外部プログラムは、前記半導体装置毎に固有の固有鍵によって暗号化された状態で、前記外部メモリに記憶されている
ことを特徴とする半導体装置。
【請求項11】
商品として動作するための商品モードとプログラムを開発するための開発モードとを含む複数の動作モードのうちいずれか一つを、現在の動作モードとして示すモードIDを記憶するためのモードID記憶手段を有する半導体装置を、ブートする方法であって、
前記半導体装置内のブートROMからブートプログラムを起動するステップと、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDが示す現在の動作モードを判定するステップと、
前記ブートプログラムの実行によって、外部メモリに記憶された外部プログラムの正当性を検証するステップとを備え、
前記モードIDが前記開発モードを示すときは、前記外部メモリに記憶された外部プログラムに処理が遷移する一方、前記モードIDが前記商品モードを示すときは、外部プログラムの正当性が証明された場合のみ、当該外部プログラムへと処理が遷移する
ことを特徴とする半導体装置のブート方法。
【請求項12】
請求項11記載の半導体装置のブート方法において、
正当性が証明された外部プログラムを、前記半導体装置内部に読み込むステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項13】
請求項11記載の半導体装置のブート方法において、
前記モードIDが、前記モードID記憶手段に書き換え不可能な状態で記憶される
ことを特徴とする半導体装置のブート方法。
【請求項14】
請求項13記載の半導体装置のブート方法において、
前記モードID記憶手段にモードIDが書き込まれたとき、前記モードID記憶手段の書き換えの可否を制御するフラグのフラグ値を所定の値に設定し、前記モードID記憶手段を書き換え不可能な状態にする
ことを特徴とする半導体装置のブート方法。
【請求項15】
請求項11記載の半導体装置のブート方法において、
前記ブートプログラムの実行によって、前記モードID記憶手段に記憶されたモードIDを、前記半導体装置内部のモードID格納レジスタに設定するステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項16】
請求項15記載の半導体装置のブート方法において、
前記ブートプログラムは、各動作モードで共通する第1のシーケンスと、動作モード毎に異なる第2のシーケンスとを有しており、
前記第1のシーケンスにおいて、前記モードID格納レジスタにモードIDを設定する
ことを特徴とする半導体装置のブート方法。
【請求項17】
請求項11記載の半導体装置のブート方法において、
前記モードIDが前記商品モードを示すとき、前記ブートプログラムの実行によって、プログラムまたはデータを復号化するために必要なパラメータを設定するステップをさらに備えた
ことを特徴とする半導体装置のブート方法。
【請求項18】
請求項11記載の半導体装置のブート方法において、
外部プログラムの正当性の検証を、前記外部プログラムのハッシュ値を演算し、予め記憶されているハッシュ値と当該演算されたハッシュ値との比較を行うことにより,行う
ことを特徴とする半導体装置のブート方法。
【請求項19】
請求項11記載の半導体装置のブート方法において、
前記商品モードにおいて、前記外部プログラムは、前記半導体装置毎に固有の固有鍵によって暗号化された状態で、前記外部メモリに記憶されている
ことを特徴とする半導体装置のブート方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2009−301571(P2009−301571A)
【公開日】平成21年12月24日(2009.12.24)
【国際特許分類】
【出願番号】特願2009−191595(P2009−191595)
【出願日】平成21年8月21日(2009.8.21)
【分割の表示】特願2009−112470(P2009−112470)の分割
【原出願日】平成14年9月4日(2002.9.4)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】
【公開日】平成21年12月24日(2009.12.24)
【国際特許分類】
【出願日】平成21年8月21日(2009.8.21)
【分割の表示】特願2009−112470(P2009−112470)の分割
【原出願日】平成14年9月4日(2002.9.4)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】
[ Back to top ]