(57)【要約】【課題】固有鍵で暗号化されたプログラムを実行可能なＬＳＩについて、高いセキュリティを保ちつつ、プログラムを更新可能にする。【解決手段】セキュアＬＳＩ１を含むシステムは、サーバ３との通信路を確立し（ＵＤ１）、サーバ３から送信された，共有鍵で暗号化された共有鍵暗号化プログラムを受信する（ＵＤ６，ＵＤ７）。そして、受信した共有鍵暗号化プログラムを復号して平文プログラムを生成し、さらに、平文プログラムを固有鍵で再暗号化し、新たな固有鍵暗号化プログラムとして外部メモリに格納する。【選択図】図１１
2010044792.tif 000002
【特許請求の範囲】
【請求項１】
集積回路と、前記集積回路の外部に設けられた外部メモリとを含むセキュアデバイスであって、
前記集積回路は、
前記集積回路に固有の固有鍵を、生成して保持する固有鍵保持手段と、
前記集積回路の外部から受け取った情報を前記固有鍵を用いて暗号化することによって、固有鍵暗号化情報を生成する暗号手段と、
前記固有鍵暗号化情報を、前記外部メモリに出力する出力手段とを備え、
前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となる
ことを特徴とするセキュアデバイス。
【請求項２】
請求項１記載のセキュアデバイスにおいて、
前記固有鍵保持手段は、
前記固有鍵保持手段における固有鍵が保持される記録領域について書き換えが許されるか否かを示す情報の設定を受ける設定保持部と、
前記設定保持部に設定されている情報に応じて、前記固有鍵が保持される記録領域に対する書き換えの可否を切り替える書き換え制御部とを備え、
前記集積回路は、さらに、
前記固有鍵が前記固有鍵保持手段に書き込まれたとき、前記設定保持部に対して、前記記録領域の書き換えを禁止する情報を設定する書き込み不可設定手段を備えている
ことを特徴とするセキュアデバイス。
【請求項３】
請求項１記載のセキュアデバイスにおいて、
前記固有鍵暗号化情報は、固有鍵で暗号化されたデータである
ことを特徴とするセキュアデバイス。
【請求項４】
請求項１記載のセキュアデバイスにおいて、
前記固有鍵暗号化情報は、固有鍵で暗号化されたプログラムである
ことを特徴とするセキュアデバイス。
【請求項５】
請求項１記載のセキュアデバイスにおいて、
外部のサーバから、前記サーバが保持する共有鍵で暗号化された情報である共有鍵暗号化情報を受信する受信手段と、
前記サーバが保持する共有鍵と同一の共有鍵を保持する共有鍵保持手段と、
前記受信手段により受信した情報を変換する変換手段とを備え、
前記暗号手段は、さらに、前記共有鍵保持手段が保持する共有鍵を用いた復号処理を行うものであり、
前記変換手段は、
前記受信手段から前記共有鍵暗号化情報を受け取り、
前記暗号手段を用いて、受け取った前記共有鍵暗号化情報を前記共有鍵を用いて復号化して平文情報を生成し、前記平文情報を前記固有鍵を用いて暗号化して第２の固有鍵暗号化情報を生成し、
前記第２の固有鍵暗号化情報を、前記外部メモリに出力する
ことを特徴とするセキュアデバイス。
【請求項６】
請求項５記載のセキュアデバイスにおいて、
前記受信手段は、さらに、前記サーバから、前記平文情報が改竄されていない場合に計算されるべき認証ハッシュ値を含んだ付加情報を受信し、
前記集積回路は、さらに、
復号化によって生成された前記平文情報のハッシュ値を計算するハッシュ演算手段を備えており、
前記セキュアデバイスは、さらに、前記ハッシュ演算手段が計算した前記平文情報のハッシュ値と、前記認証ハッシュ値とを比較することによって、前記平文情報に対する改竄の有無を確認する確認手段とを備えている
ことを特徴とするセキュアデバイス。
【請求項７】
請求項５記載のセキュアデバイスにおいて、
前記第２の固有鍵暗号化情報が前記外部メモリに書き込まれたことを確認した後に、前記第２の固有鍵暗号化情報よりも前に前記外部メモリに書き込まれていた古い固有鍵暗号化情報を削除する削除手段を備えている
ことを特徴とするセキュアデバイス。
【請求項８】
請求項５記載のセキュアデバイスにおいて、
前記受信手段は、さらに、前記サーバから、前記第２の固有鍵暗号化情報に対応するハッシュ値を受信し、
前記セキュアデバイスは、さらに、
前記受信手段により受信した前記ハッシュ値と、前記第２の固有鍵暗号化情報から計算したハッシュ値とが等しいとき、前記第２の固有鍵暗号化情報の書き込みが完了したと判断する完了確認手段を備えている
ことを特徴とするセキュアデバイス。
【請求項９】
請求項５記載のセキュアデバイスにおいて、
前記集積回路は、さらに、
前記セキュアデバイスの起動処理を行うブートプログラムを記録した記録手段を備え、
前記変換手段は、前記ブートプログラムによって制御される
ことを特徴とするセキュアデバイス。
【請求項１０】
集積回路であって、
前記集積回路に固有の固有鍵を、生成して保持する固有鍵保持手段と、
前記固有鍵を用いて暗号化した情報である固有鍵暗号化情報を生成する暗号手段と、
前記固有鍵暗号化情報を、前記集積回路の外部に設けられた外部メモリに出力する出力手段とを備え、
前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となる
ことを特徴とする集積回路。
【請求項１１】
集積回路と、前記集積回路の外部に設けられた外部メモリとを含むセキュアデバイスにおける暗号化方法であって、
前記集積回路に固有の固有鍵を生成して、固有鍵保持手段に保持するステップと、
前記集積回路の外部から受け取った情報を前記固有鍵を用いて暗号化することによって、固有鍵暗号化情報を生成するステップと、
前記固有鍵暗号化情報を、前記外部メモリに出力するステップとを備え、
前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となる
ことを特徴とする暗号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鍵実装されたシステムやこれに用いるＬＳＩにおいて、セキュリティを保ちつつ、プログラムを更新する技術に関する。
【背景技術】
【０００２】
従来、ＬＳＩを動作させるプログラムを不正な処理から守るために、予め定まったメーカー鍵で暗号化したプログラムをメモリに記憶しておき、復号化して実行することが行われている。しかしながら、このようなシステムでは共通のメーカー鍵で暗号化されたプログラムを実行するＬＳＩが大量にあるため、たとえ１個の製品からでもメーカー鍵の情報が不正に漏洩すると、大量の製品においてプログラムを改ざん可能になってしまい、したがって、セキュリティを高めることができないという課題がある。
【０００３】
この課題を解決するために、ＬＳＩを動作させるプログラムをＬＳＩ毎に固有の固有鍵で暗号化し、製品としては固有鍵で暗号化されたプログラムのみを実行可能とする手法がある（特願２００２−２１５０９６、特願２００２−２５８４８１参照）。この手法を用いることにより、１個の製品で鍵情報が不正に漏洩したとしても、その他の製品への影響はないので、セキュリティを高めることができる。また、この手法の前提として、鍵を二重に暗号化する手法がある（特願２００１−２８６８８１参照。）。
【０００４】
なお、ここで挙げた特許出願はいずれも未だ出願公開されておらず、このため、記載すべき先行技術文献情報はない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に、製品となっているＬＳＩに実装されたプログラムのアップデート（更新）は、ＳＳＬ接続によって通信路を安全に確保し、平文プログラム、またはメーカー鍵で暗号化されたプログラムをサーバからＬＳＩへ送信することによって行われている。しかしながら、この手法では、通信路を不正にアクセスされると、大量の製品で実行可能なプログラムが不正に入手されてしまうので、プログラム更新におけるセキュリティを高めることができない。
【０００６】
これを解決するために、上述の手法を用いた場合、ＬＳＩは固有鍵で暗号化されたプログラムのみを実行するので、平文プログラムやメーカー鍵で暗号化されたプログラムを送信しても、そのままでは実行することができない。
【０００７】
また、ＬＳＩ毎に異なる鍵で暗号化されたプログラムをサーバ側で準備し、ＬＳＩ毎に鍵情報を管理した上で、サーバからＬＳＩへ、ＬＳＩ毎に異なる鍵で暗号化されたプログラムを送信する方法も考えられるが、この方法では、莫大な手間とコストを必要とするため、現実的ではない。
【０００８】
前記の問題に鑑み、本発明は、セキュリティの高い情報の暗号化を可能とするセキュアデバイス、集積回路、および暗号化方法を提供することを課題とする。
【課題を解決するための手段】
【０００９】
前記の課題を解決するために、本発明が講じた解決手段は、集積回路と、前記集積回路の外部に設けられた外部メモリとを含むセキュアデバイスとして、前記集積回路は、前記集積回路に固有の固有鍵を生成して保持する固有鍵保持手段と、前記集積回路の外部から受け取った情報を前記固有鍵を用いて暗号化することによって固有鍵暗号化情報を生成する暗号手段と、前記固有鍵暗号化情報を前記外部メモリに出力する出力手段とを備え、前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となるものである。
【００１０】
また、本発明が講じた解決手段は、集積回路として、前記集積回路に固有の固有鍵を生成して保持する固有鍵保持手段と、前記固有鍵を用いて暗号化した情報である固有鍵暗号化情報を生成する暗号手段と、前記固有鍵暗号化情報を前記集積回路の外部に設けられた外部メモリに出力する出力手段とを備え、前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となるものである。
【００１１】
また、本発明が講じた解決手段は、集積回路と、前記集積回路の外部に設けられた外部メモリとを含むセキュアデバイスにおける暗号化方法として、前記集積回路に固有の固有鍵を生成して固有鍵保持手段に保持するステップと、前記集積回路の外部から受け取った情報を前記固有鍵を用いて暗号化することによって固有鍵暗号化情報を生成するステップと、前記固有鍵暗号化情報を、前記外部メモリに出力するステップとを備え、前記固有鍵保持手段における前記固有鍵は、生成後、変更不可能となるものである。
【発明の効果】
【００１２】
本発明によると、プログラムをＬＳＩ毎の固有鍵で再暗号化して実行する秘匿性の高いセキュアＬＳＩにおいても、サーバから同一のプログラムを送信するだけで、プログラムの更新をすること可能となる。
【００１３】
また、サーバからセキュアＬＳＩへの通信路が不正にアクセスされて共有鍵暗号化プログラムが盗み出されたとしても、そのプログラムではセキュアＬＳＩを動作させることができないので、秘匿性が向上する。また、万一、暗号を破られた場合でも、被害を受ける製品の数が限定されることになり、従来よりもセキュリティが高まる。
【００１４】
さらに、サーバから受信した共有鍵やプログラムの正当性を平文状態のハッシュ値を用いて行うので、通信路における暗号化状態でのハッシュ値で行うよりもハッシュ値の改ざんが行いにくくなり、セキュリティは高まる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係るセキュアＬＳＩの構成を示すブロック図である。
【図２】図１のセキュアＬＳＩを用いた開発および製品化の全体の流れを表す図である。
【図３】ブートプログラムの全体的な処理の流れを示すフローチャートである。
【図４】セキュアメモリ初期値設定ＳＺ１のデータフローである。
【図５】商品動作モードにおけるプログラム実装処理ＳＤ１のフローチャートである。
【図６】プログラム実装処理ＳＤ１のデータフロー１である。
【図７】プログラム実装処理ＳＤ１のデータフロー２である。
【図８】商品動作モードにおける通常ブート処理ＳＤ２のフローチャートである。
【図９】通常ブート処理ＳＤ２のデータフロー１である。
【図１０】通常ブート処理ＳＤ２のデータフロー１である。
【図１１】プログラム更新におけるサーバとの通信を示すフローチャートである。
【図１２】外部メモリ１００に格納された，プログラム更新に係わるプログラムの構成を示す図である。
【図１３】プログラムの更新処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について、図面を参照して説明する。なお、以下の説明では、Ｘ（鍵またはプログラム）を鍵Ｙを用いて暗号化して得た、暗号化された鍵またはプログラムのことを、Ｅｎｃ（Ｘ，Ｙ）と表すものとする。
【００１７】
図１は本実施形態に係る半導体装置としてのセキュアＬＳＩの内部構成を示すブロック図である。図１において、セキュアＬＳＩ１は外部バス１２０を介して、外部メモリ（フラッシュメモリ）１００や外部ツール１１０などと接続可能に構成されている。また、モードＩＤを与えることによって、その動作モードを設定することが可能になっている。
【００１８】
本実施形態に関わる主な構成要素について、簡単に説明する。
【００１９】
まず、セキュアＬＳＩ１は、書き換え不可領域１１を含むセキュアメモリ（セキュアＦｌａｓｈ）１０を備えている。この書き換え不可領域１１には、書き換え不可領域書き込みフラグ１２が設けられている。書き換え不可領域書き込みフラグ１２は、モードＩＤが一度セキュアメモリ１０に書き込まれると、そのフラグ値が“可”から“済”になり、それ以降の書き換え不可領域への書き込みが不能になる。なお、本実施形態では、セキュアメモリ１０および外部メモリ１００はフラッシュメモリによって構成されているが、もちろんこれに限定されるものではなく、不揮発性のメモリであればどのようなものであってもかまわない。
【００２０】
また、暗号化部２はプログラムの暗号化や復号化を行うものであり、秘密鍵演算処理部２０と、鍵生成・更新シーケンサ３０とを備えている。秘密鍵演算処理部２０は各種の鍵、およびプログラム暗号種を格納するレジスタ（プログラム共有鍵格納レジスタ２１、プログラム固有鍵格納レジスタ２２、暗号鍵格納レジスタ２３等）を備えており、プログラムの暗号化処理又は復号化処理を含む複数のシーケンスを実行可能である。鍵生成・更新シーケンサ３０は秘密鍵演算処理部２０が実行可能な各シーケンスについて実行の諾否を判断し、実行が許されないと判断したシーケンスについて秘密鍵演算処理部２０の動作を禁止する。鍵生成更新シーケンサ３０はモードＩＤ格納レジスタ３１を有しており、このモードＩＤ格納レジスタ３１に格納されているモードＩＤに応じて、各シーケンスの実行の諾否を判断する。また、鍵またはプログラムがどのようなアルゴリズムや鍵長で暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ３２、およびプログラム暗号種を記憶する記憶部３３を備えている。
【００２１】
モードシーケンサ４０も、モードＩＤ格納レジスタ４１を備えており、モードＩＤ格納レジスタ４１に格納されているモードＩＤと、ジャンパ４３の値に応じて、外部ホストインターフェース（Ｉ／Ｆ）５０の動作、すなわち、外部メモリ１００に格納されたプログラムやデータをどのＩ／Ｆを介して読み込むか、を制御する。これにより、外部メモリ１００に格納された平文プログラムが実行できるか否かを制御することができる。さらに、モードシーケンサ４０は、鍵がどの手法によって暗号化されているかを示す暗号種別識別子を格納する暗号種別識別子格納レジスタ４２を備えている。
【００２２】
外部ホストＩ／Ｆ５０は、モードシーケンサ４０の制御に従って、プログラム処理部５１が有する暗号化用スルー部５２、実行用スルー部５３およびプログラム復号用暗号エンジン５４、並びに、データ処理部５５が有するスルー部５６およびコンテンツ暗号・復号用暗号エンジン５７のうちのいずれかを介して、外部メモリ１００や外部ツール１１０との間でプログラムやデータの入出力を行う。またプログラム復号用暗号エンジン５４は、プログラムの復号に用いるプログラム固有鍵を格納するためのプログラム固有鍵可能レジスタ５８を備えている。
【００２３】
ここで、後述する鍵生成モードと商品動作モードにおいては、実行用スルー部５３を介してプログラムを取り込むことが出来ないように構成されている。すなわち、セキュアＬＳＩ１は後述する鍵生成モードと商品動作モードにおいては、固有鍵で暗号化されたプログラム以外へは動作を遷移しないように構成されている。
【００２４】
ブートＲＯＭ６０は、セキュアＬＳＩ１の起動動作を制御するブートプログラムを格納している。ＨＡＳＨ演算部７０は、セキュアＬＳＩ１に読み込まれたプログラムについてその正当性を検証するために、ＨＡＳＨ値を演算する。
【００２５】
また、外部メモリ１００には、プログラムやコンテンツが格納されている。外部ツール１１０には、セキュアＬＳＩ１の最初の起動時にセキュアメモリ１０に格納する各種の初期値が格納されている。この初期値の種類は、設定される動作モードに応じて、異なったものになる。
【００２６】
図２は図１のセキュアＬＳＩ１を用いた開発および製品化の全体の流れを表す図である。図２に示すように、セキュアＬＳＩ１は、アドミニストレータモード（モードＩＤ：００）、鍵生成モード（モードＩＤ：０１）、開発モード（モードＩＤ：１０）および商品動作モード（モードＩＤ：１１）の４種類の動作モードで、動作する。
【００２７】
まず、アドミニストレータモードに設定されたセキュアＬＳＩ１は、管理者用ＬＳＩとして、動作する。管理者用ＬＳＩでは、鍵生成プログラムが開発され（ＰＡ１）、また、その鍵生成プログラムが任意の鍵生成鍵を用いて暗号化される（ＰＡ２）。
【００２８】
鍵生成モードに設定されたセキュアＬＳＩ１は、鍵生成用ＬＳＩとして、動作する。鍵生成用ＬＳＩでは、管理者用ＬＳＩにおいて生成された、暗号化された鍵生成プログラムが実装され（ＰＢ１）、この鍵生成プログラムを実行することによって、各種の鍵が生成される（ＰＢ２）。
【００２９】
開発モードに設定されたセキュアＬＳＩ１は、開発用ＬＳＩとして、動作する。開発用ＬＳＩでは、実際の製品で実行されるアプリケーション用プログラムが開発される（ＰＣ１）。そして、このアプリケーション用プログラムが、プログラム共有鍵を用いて暗号化される（ＰＣ２）。
【００３０】
商品動作モードに設定されたセキュアＬＳＩ１は、実際の商品ＬＳＩとして、動作する。商品ＬＳＩでは、開発用ＬＳＩにおいて生成された、プログラム共有鍵で暗号化されたアプリケーション用プログラムが実装され、その内部で、プログラム固有鍵で暗号化されたアプリケーション用プログラムに、変換される（ＰＤ１）。その後、通常の商品ＬＳＩとして動作する（ＰＤ２）。なお、この変換処理は、開発用ＬＳＩでも、アプリケーション用プログラムのデバッグのために、実行可能になっている（ＰＣ３）。
【００３１】
以下、上記のように構成されたセキュアＬＳＩ１の商品動作モードにおける通常動作およびセキュアアップデート動作の詳細について、フローチャートおよびデータフローを参照して、説明する。
【００３２】
図３はブートプログラムの全体的な処理の流れを示すフローチャートである。セキュアＬＳＩ１に電源が投入されると、ブートＲＯＭ６０に格納されたブートプログラムがＣＰＵ６５によって実行される。図３に示すように、まず、各ハードウェアを初期化する（ＳＺ０）。そして、外部ツール１１０からさまざまな初期値を読み込み、セキュアメモリ１０に設定する（ＳＺ１）。
【００３３】
図４は初期値設定処理ＳＺ１のフローチャートである。まず、ジャンパ４４で、セキュアメモリ１０がＬＳＩ内に実装されているか否かの判定を行う（ＳＺ１１）。次に、書き換え不可領域書き込みフラグ１２が“済”であるか否かを判定し（ＳＺ１２）、“済”であるときは（Ｙｅｓ）すでにセキュアメモリ１０に初期値が設定されているので、処理ＳＺ１を終了する。書き換え不可領域書き込みフラグ１２が“可”であるときは（Ｎｏ）、セキュアメモリ１０に初期値を書き込んでいく（ＳＺ１３〜ＳＺ１８）。モードＩＤに加えて、暗号化されたプログラム固有鍵、アドレス管理情報、データ固有鍵をセキュアメモリ１０の書き換え不可領域１１に書き込む。なお、最初の判定の結果、セキュアメモリ１０がＬＳＩの外部にあると判定されたときは（ＳＺ１４でＮｏ）、モードＩＤは商品動作モードを表す値に上書きされる（ＳＺ１５）。これにより、セキュアメモリ１０がＬＳＩパッケージ外にあるような不正な製品は、商品動作モードでしか動作できない。
【００３４】
次に、書き込み不可領域書き込みフラグ１２を“済”にセットする（ＳＺ１９）。これによって、以後の書き換え不可領域１１の書き換えはできなくなる。さらに、通常領域１３，１４に暗号種別識別子および実装モードフラグを書き込む（ＳＺ１Ａ）。そして、モードＩＤがアドミニストレータモード以外のモードを示すときは（ＳＺ１ＢでＮｏ）、これらに加えて、暗号化された共有鍵／鍵生成鍵も通常領域１３，１４に書き込む（ＳＺ１Ｃ）。
【００３５】
その後、前処理ＳＺ２を実行する。ここでは、セキュアメモリ１０の書き込み不可領域１１に設定されたモードＩＤが、鍵生成・更新シーケンサ３０のモードＩＤ格納レジスタ３１と、モードシーケンサ４０のモードＩＤ格納レジスタ４１とに設定される。また、セキュアメモリ１０の第１の通常領域１３に設定された暗号種別識別子が、鍵生成・更新シーケンサ３０の暗号種別識別子格納レジスタ３２と、モードシーケンサ４０の暗号種別識別子格納レジスタ４２とに設定される。さらに、セキュアメモリ１０の書き換え不可領域１１に格納されたアドレス管理情報が、ＭＥＭＣ８０の暗号アドレス区分格納レジスタ８１に設定される。ここまでの動作は、図２における初期値設定フェーズＰＡ０，ＰＢ０，ＰＣ０，ＰＤ０に対応している。
【００３６】
その後は、モードＩＤの値に応じて、それぞれのモードにおける動作を行う（ＳＺ３）。このようにモードＩＤの値に応じて、セキュアＬＳＩで行う動作を制限することによりプログラムの秘匿性を高めている。
【００３７】
次に通常の商品動作（通常ブート処理）について詳細に説明する。
【００３８】
モードＩＤが「１１」のとき、セキュアＬＳＩ１は商品動作モードになり、実装モードフラグの値に応じて（ＳＤ０）、プログラム実装処理ＳＤ１、または通常ブート処理ＳＤ２を実行する。
【００３９】
図５はプログラム実装処理ＳＤ１のフローチャート、図６、７はデータフローである。プログラム実装処理ＳＤ１においては、セキュアメモリ１０に格納された固有鍵情報を用いてプログラム固有鍵を（ＳＤ１１、ＳＤ１２）、共有鍵情報を用いてプログラム共有鍵を復号し（ＳＤ１３、ＳＤ１４）、復号されたプログラム共有鍵とプログラム固有鍵を用いて外部メモリ１００に格納されたプログラムＥｎｃ（プログラム、プログラム共有鍵）をＥｎｃ（プログラム、プログラム固有鍵）へと変換する（ＳＤ１５−ＳＤ１７）。その後、プログラムの正当性の検証を行い（ＳＤ１８）、正当であるならば実装モードフラグをＯＦＦに設定する（ＳＤ１９）。これにより次回の起動時からはプログラム実装処理ＳＤ１は行われない。そして最後にセキュアメモリ１０に格納されたプログラム共有鍵と、外部メモリ１００に格納されたプログラムＥｎｃ（プログラム、プログラム共有鍵）は削除される（ＳＤ１Ａ、ＳＤ１Ｂ）。
【００４０】
図８は通常ブート処理ＳＤ２のフローチャート、図９、１０はデータフローである。通常ブート処理ＳＤ２においては、まず、内部メモリとしてのセキュアメモリ１０の書き込み不可領域１１に格納された、固有鍵鍵情報としての暗号化されたプログラム固有鍵、すなわち、暗号化固有鍵Ｅｎｃ（プログラム固有鍵（平文）、ＭＫ０（平文第３中間鍵））および暗号化第２中間鍵Ｅｎｃ（ＭＫ０，ＣＫ０（平文第４中間鍵））を秘密鍵演算処理部２０の暗号鍵格納レジスタに設定する（ＳＤ２１）。そして、この暗号化されたプログラム固有鍵を、鍵生成・更新シーケンサ３０に実装されたプログラム暗号種を用いて復号し、プログラム固有鍵を得る（ＳＤ２２）。得られたプログラム固有鍵は秘密鍵演算処理部２０のプログラム固有鍵格納レジスタ２２と、外部ホストＩ／Ｆ５０のプログラム復号用暗号エンジン５４のプログラム固有鍵格納レジスタ５８に設定する（ＳＤ２３）。
【００４１】
その後、セキュアメモリ１０の書き込み不可領域１１に格納されているデータ固有ＩＤを秘密鍵演算処理部２０の固有ＩＤ格納レジスタに設定する（ＳＤ２４）。また、ＣＰＵ６５によって乱数を生成し、秘密鍵演算処理部２０の乱数格納レジスタに設定する（ＳＤ２５）。そして、秘密鍵演算処理部２０によって、データ固有ＩＤと乱数からデータ固有鍵を生成する（ＳＤ２６）。コンテンツの再生にはデータ固有鍵を用いて行う。データ固有鍵は乱数を用いて生成されるため、起動毎に異なることとなり、コンテンツ再生の安全性が高まる。
【００４２】
その後、外部メモリ１００に格納されていた，プログラム固有鍵で暗号化されたプログラムＥｎｃ（プログラム，プログラム固有鍵）を、外部ホストＩ／Ｆ５０が有するプログラム処理部５１のプログラム復号用暗号エンジン５４を介して復号し、ＨＡＳＨ演算部７０に取り込み、ＨＡＳＨ値を演算する（ＳＤ２７）。復号に用いられる鍵としては外部ホストＩ／Ｆのプログラム固有鍵格納レジスタ５８に格納されたプログラム固有鍵が用いられる。そして、この演算したＨＡＳＨ値と、セキュアメモリ１０の通常領域１３に格納されていたＨＡＳＨ値とを比較し、プログラムが改ざんされていないかどうかをチェックする（ＳＤ２８）。ＨＡＳＨ値が一致していたとき（ＳＤ２９でＮｏ）、外部メモリ１００に格納されていたプログラムＥｎｃ（プログラム，プログラム固有鍵）に処理を遷移し、アプリケーションを実行する（ＳＤ２Ａ）。一方、ＨＡＳＨ値が一致していないとき（ＳＤ２９でＹｅｓ）は、何らかの不正が行われたものと推定して、不正アクセス時制御による処理を実行する（ＳＤ２Ｂ）。
【００４３】
ここで、上述のように商品として動作するセキュアＬＳＩについて、プログラムの更新を行う処理について、図面を参照しながら説明する。図１１はプログラム更新の際に、サーバ３とセキュアＬＳＩ１を含むシステムとの間におけるデータのやり取りを示すフローである。
【００４４】
図１１に示すように、まず、セキュアＬＳＩ１がプログラム更新処理を起動すると、サーバ３はシステムからセキュアＬＳＩ１のＩＤを受信してＩＤ認証を行い、認証した場合は、セキュアＬＳＩ１とＳＳＬ接続する（ＵＤ１）。これにより、サーバ３とセキュアＬＳＩ１を含むシステムとの間の通信路の安全性が一応確保される。
【００４５】
通信路が確保されると、システムは、更新対象プログラムの識別情報であるアプリＩＤをサーバ３へ送信する（ＵＤ２）。サーバ３は、更新可能なプログラムのアプリＩＤと、プログラムを動作させて良いＬＳＩのＩＤとの対応関係を示す第１のテーブル４を管理しており、この第１のテーブル４に基づいて、プログラムを送信してよいか否かを判断する。セキュアＬＳＩ１のＩＤと、更新を要求されたプログラムのアプリＩＤとの対応が確認されると、サーバ３は、この更新対象プログラムの送信を開始する。
【００４６】
まず、サーバ３から、更新対象プログラムの付加情報をセキュアＬＳＩ１へ送信する（ＵＤ３）。ここでの付加情報は、セキュアＬＳＩ１側でプログラムを更新してよいか否かを認証させるための署名、更新対象プログラムのサイズ、および、更新対象プログラムのハッシュ値（平文での値）等を含む。セキュアＬＳＩ１は、付加情報として送信された署名を用いて認証を行い、また、送信されたプログラムサイズを基にして、外部メモリ１００に更新可能な空き領域があるか否かを判断する。そして、更新が可能であると判断した場合は、サーバ３に対して、共有鍵情報を送信するよう要求する（ＵＤ４）。
【００４７】
サーバ３は、要求を受信すると、共有鍵情報として、暗号化共有鍵Ｅｎｃ（プログラム共有鍵（平文），ＭＫ１（平文第１中間鍵））および暗号化第１中間鍵Ｅｎｃ（ＭＫ１，ＣＫ１（平文第２中間鍵））をセキュアＬＳＩ１へ送信する（ＵＤ５）。セキュアＬＳＩ１は、共有鍵情報を用いてプログラム共有鍵を復号し、復号された状態でハッシュ演算を行い、正当性の検証をする。プログラム共有鍵を正常に復号すると、システムはサーバ３に対して、共有鍵暗号化プログラムを送信するよう要求する（ＵＤ６）。サーバ３は、要求を受信すると、プログラムＥｎｃ（プログラム、プログラム共有鍵）をシステムへ送信する（ＵＤ７）。セキュアＬＳＩ１は、Ｅｎｃ（プログラム、プログラム共有鍵）をＥｎｃ（プログラム、プログラム固有鍵）へと変換する。さらに、変換されたＥｎｃ（プログラム、プログラム固有鍵）を平文プログラムに復号し、ハッシュ演算して、先に付加情報として受信したハッシュ値との比較によって、正当性を検証する。ここでの処理については、後で詳細に説明する。
【００４８】
共有鍵暗号化プログラムが固有鍵暗号化プログラムに正常に変換できたとき、セキュアＬＳＩ１を含むシステムはサーバ３へ、アプリ固有情報を送信するよう要求する（ＵＤ８）。アプリ固有情報はプログラムの実行に必要な情報を含んでおり、アプリ固有情報がないと、セキュアＬＳＩ１は更新したプログラムを実行できない。サーバ３は、アプリ固有情報の送信履歴とＬＳＩのＩＤとの対応関係を示す第２のテーブル５も管理しており、同一のセキュアＬＳＩには複数のアプリ固有情報を送信しないようにする。よって、同一のセキュアＬＳＩは複数回、同一のプログラムを更新することができない。
【００４９】
サーバ３は、アプリ固有情報を送信してよいと判断したとき、アプリ固有情報をセキュアＬＳＩ１を含むシステムへ送信し（ＵＤ９）、セキュアＬＳＩ１がこれをハッシュ演算して正当性を検証すると、プログラム更新が終了し、通信は切断される（ＵＤ１０）。
【００５０】
なお、本発明におけるサーバ３とセキュアＬＳＩを含むシステムとの間におけるデータのやり取りは上述のフローに限定されるものではない。例えば、サーバ３は、必ずしも、第２のテーブルを管理し、同一のセキュアＬＳＩに複数のアプリ固有情報を送信しないようにする必要はない。しかしながら、同一のセキュアＬＳＩに複数回、同一のプログラムを送信しないようにすることにより、プログラムの秘匿性はより高まる。
【００５１】
また、付加情報、共有鍵情報、共有鍵暗号化プログラムは、必ずしも、サーバ３からセキュアＬＳＩへと別々に送信する必要はなく、その一部、または全部をまとめたプログラムパッケージとして一度に送信してもよい。
【００５２】
セキュアＬＳＩ１における、共有鍵暗号化プログラムＥｎｃ（プログラム、プログラム共有鍵）から固有鍵暗号化プログラムＥｎｃ（プログラム、プログラム固有鍵）への変換について、図面を参照しながら詳述する。図１２は外部メモリ１００に格納された、プログラム更新に係わるプログラムの構成を示す図である。
【００５３】
図１２に示すように、外部メモリ１００には、固有鍵でそれぞれ暗号化された、暗号化制御プログラム２００（Ｅｎｃ（制御プログラム、プログラム固有鍵））、および暗号化アプリケーションプログラム２１０（Ｅｎｃ（アプリケーションプログラム、プログラム固有鍵））が格納されている。
【００５４】
暗号化制御プログラム２００はアプリケーション起動部２０１およびプログラム更新制御部２０５を備え、プログラム更新制御部２０５は共有鍵復号部２０６、プログラム固有鍵暗号化処理部２０７およびプログラム更新成否判定部２０８を備えている。
【００５５】
アプリケーション起動部２０１はブートＲＯＭ６０に格納されたブートプログラムからの指示を受けて、暗号化アプリケーションプログラム２１０を起動する。共有鍵復号部２０６はサーバ３から送信された共有鍵情報を基にして、鍵生成・更新シーケンサ３０を用いて、プログラム共有鍵を復号する。プログラム固有鍵暗号化処理部２０７は鍵生成・更新シーケンサ３０を用いて、共有鍵暗号化プログラムＥｎｃ（プログラム、プログラム共有鍵）から固有鍵暗号化プログラムＥｎｃ（プログラム、プログラム固有鍵）への変換を行う。プログラム更新成否判定部２０８は、固有鍵暗号化プログラムＥｎｃ（プログラム、プログラム固有鍵）を平文プログラムに復号し、ハッシュ検証によってプログラム更新の成否を判定する。そして、プログラム更新が成功したときは、古いプログラムを削除し、プログラム格納先・サイズなどの情報をセキュアメモリ１０に格納する。
【００５６】
暗号化アプリケーションプログラム２１０は、通常のアプリケーションプログラムである通常動作部２１１の他、サーバや記録媒体から新しいアプリケーションプログラムを取得するためのプログラム取得部２１２もアプリケーションプログラムとして備えている。プログラムの更新は、これらのような外部メモリ１００に格納されたプログラムを用いて行われる。
【００５７】
図１３は共有鍵暗号化プログラムから固有鍵暗号化プログラムへの変換処理を含む、プログラム更新処理を示すフローチャートである。
【００５８】
アプリケーションプログラムの実行中（ＳＸ１）に、ユーザの操作等の外部要因によってプログラムの更新が要求されると、システムはこれを検知し、プログラム更新を開始するために、通常動作部２１１が暗号化アプリケーションプログラム２１０の取得プログラムとしてのプログラム取得部２１２を起動する（ＳＸ２）。
【００５９】
プログラム取得部２１２はサーバ３と通信して、認証や、共有鍵情報・プログラムの取得を行う（ＳＸ３）。サーバ３から共有鍵情報を取得すると、共有鍵復号部２０６はプログラム共有鍵を復号する（ＳＸ４，ＳＸ５）。すなわち、共有鍵鍵情報としての暗号化されたプログラム共有鍵Ｅｎｃ（プログラム共有鍵，ＭＫ２）、Ｅｎｃ（ＭＫ２，ＣＫ）を秘密鍵演算処理部２０の暗号鍵格納レジスタ２３に設定し、この暗号化されたプログラム共有鍵を、鍵生成・更新シーケンサ３０に実装されたプログラム暗号種を用いて復号し、プログラム共有鍵を得る。得られたプログラム共有鍵は秘密鍵演算処理部２０のプログラム共有鍵格納レジスタ２１に格納される。
【００６０】
次に、プログラム固有鍵暗号化処理部２０７が、共有鍵暗号化プログラムから固有鍵暗号化プログラムへの変換を行う。すなわち、サーバ３から送信され外部メモリ１００に格納されていたプログラムＥｎｃ（プログラム，プログラム共有鍵）を、外部ホストＩ／Ｆ５０が有するプログラム処理部５１の暗号化用スルー部５２を介して、秘密鍵演算処理部２０に取り込む（ＳＸ６）。そして、取り込んだプログラムを、プログラム共有鍵格納レジスタ２１に格納されたプログラム共有鍵で復号した後、プログラム固有鍵格納レジスタ２２に格納されたプログラム固有鍵で暗号化し、プログラムＥｎｃ（プログラム，プログラム固有鍵）を得る。なお、上述したように、プログラム固有鍵はシステムの起動時にすでに復号されており、秘密鍵演算処理部２０のプログラム固有鍵格納レジスタ２２に格納されている。
【００６１】
最後に、プログラム更新成否判定部２０８が、プログラム更新の成否を判定する。すなわち、Ｅｎｃ（プログラム，プログラム固有鍵）を外部メモリ１００に書き込んだ（ＳＸ８）後、外部ホストＩ／Ｆ５０が有するプログラム処理部５１のプログラム復号用暗号エンジン５３を用いて、復号して取り込み（ＳＸ９）、平文状態でのハッシュ値を演算する（ＳＸ１０）。演算されたハッシュ値は、プログラム取得部２１２が暗号化プログラムとともに取得したハッシュ値と比較され、この比較によって更新の成否が判定される（ＳＸ１１）。更新が成功したときは、古いプログラムを消去する（ＳＸ１２）一方、更新が失敗したときは、送信されたプログラムを消去する（ＳＸ１３）。そしてプログラム格納先、サイズなどの情報をセキュアメモリ１０に書き込み（ＳＸ１４）、更新処理が終了する。
【００６２】
上述のプログラム更新方法を用いることによって、サーバからプログラム共有鍵暗号化プログラムを送信すると、セキュアＬＳＩにおいて、暗号化する鍵がプログラム共有鍵からプログラム固有鍵に変換されて、システムに実装される。このため、たとえサーバからセキュアＬＳＩへの通信路が不正にアクセスされプログラム共有鍵暗号化プログラムが盗み出されたとしても、このプログラムによってセキュアＬＳＩを動作させることは、できない。また更新の結果、ユーザの持つ各製品では、互いに異なる固有鍵によって暗号化されたプログラムが実装されることになり、秘匿性が向上する。また、万一、暗号を破られた場合でも、被害を受ける製品の数が限定されることになり、従来よりもセキュリティが高まる。
【００６３】
なお、本実施形態において、共有鍵情報をサーバから取得しているが、これは、商品動作モード「１１」におけるプログラム実装（ＳＤ１）の最後において、復号されたプログラム共有鍵およびセキュアメモリ１０上の共有鍵情報を削除しているためであり、これらを削除しない場合は、共有鍵情報はサーバから取得する必要はなく、セキュアメモリ１０から読み出して復号すればよい。
【００６４】
また、本実施形態では、外部要因によってプログラムの更新の開始が指示され、通常瞳サブ２１１がプログラム取得部２１２を起動し、プログラムの取得後はブートプログラムによって各処理を指示するものとしたが、本発明はこれに限られるものではない。例えば、ブートプログラムがプログラム取得部２１２を起動する構成にすることによって、さらにセキュリティを高めることができる。
【００６５】
また、プログラム固有鍵は必ずしも製品毎に固有である必要はなく、品種ごとまたは複数個毎に同一であっても良い。１個の製品において暗号を破られたときに被害を少なくするのが本願発明のねらいであり、同一の鍵で暗号化されたプログラムを有するＬＳＩの数を少しでも減らすだけで効果は充分に発揮できる。さらに言えば、プログラム固有鍵は全て共通であったとしても、通信路が破られ共有鍵暗号化プログラムが盗み出されたとしてもそのままではセキュアＬＳＩで動作できないので、鍵を共有鍵から固有鍵に書き換えるだけでも、効果は発揮できる。
【符号の説明】
【００６６】
１  セキュアＬＳＩ
３  サーバ
４  第１のテーブル
５  第２のテーブル
１０  セキュアメモリ（内部メモリ）
５８  プログラム固有鍵格納レジスタ
６０  ブートＲＯＭ
１００  外部メモリ
【図１】
2010044792.tif 000003
【図２】
2010044792.tif 000004
【図３】
2010044792.tif 000005
【図４】
2010044792.tif 000006
【図５】
2010044792.tif 000007
【図６】
2010044792.tif 000008
【図７】
2010044792.tif 000009
【図８】
2010044792.tif 000010
【図９】
2010044792.tif 000011
【図１０】
2010044792.tif 000012
【図１１】
2010044792.tif 000013
【図１２】
2010044792.tif 000014
【図１３】
2010044792.tif 000015