"暗号デジタルコンテンツ再生装置であって、前記第1のセキュリティレベルにおける動作状態を示す第1モードと、前記第1のセキュリティレベルより低い第2のセキュリティレベルにおける動作状態を示す第2モードとを切替えながら、プログラムを実行するプログラム実行手段と、前記第1のモードで実行中は、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備え、第1セキュアプログラムは、前記第1のセキュリティレベルにおける動作状態を示す第1モードで実行され、第2セキュアプログラムは、前記第1セキュアプログラムとは異なる前記第2セキュアプログラムであって、前記第1のセキュリティレベルより低い前記第2のセキュリティレベルで実行され、アプリケーションプログラムは、ユーザのデジタルコンテンツ再生指示に応じて、前記第2セキュア処理プログラムを起動し、前記第1のセキュアプログラムは、前記第2セキュアプログラムの指示に応じて、暗号デジタルコンテンツを復号するためのコンテンツ鍵の取得し、前記取得は、前記外部接続無効化手段によって、外部装置からの接続を切り離した後に行われ、前記第2セキュアプログラムは、バッファを用いながら、デジタルコンテンツの再生を行うことを特徴とする暗号デジタルコンテンツ再生装置。前記第1セキュアプログラムは、前記第2セキュアプログラムで用いられる秘密情報を保持しており、前記プログラム実行手段は、前記第1セキュアプログラムに従い動作することにより、前記第2セキュアプログラムとの間で相互認証を行い、セッション鍵を共有し、前記セッション鍵を用いて、前記秘密情報を暗号化し、暗号化した前記秘密情報を前記第2セキュアプログラムへ送ることを特徴とする請求項1に記載の暗号デジタルコンテンツ再生装置。前記第1セキュアプログラムが保持する前記秘密情報は、外部記録媒体のセキュアな領域から取得した鍵情報であることを特徴とする請求項2に記載の暗号デジタルコンテンツ再生装置。前記プログラム実行手段は、前記第1セキュアプログラムに従い動作することにより、前記第2プログラムの少なくとも一部を対象として、秘密鍵を用いてハッシュ演算を行い、第1改竄検出値を取得し、前記第2セキュアプログラムが生成されたときに前記第2セキュアプログラムの少なくとも一部に基づいて算出された第2改竄検出値と、前記第1改竄検出値とを比較し、前記比較の結果、一致しない場合は動作を終了し、一致する場合は動作を継続することを特徴とする請求項2に記載の暗号デジタルコンテンツ再生装置。前記第2セキュアプログラムは、前記第1セキュアプログラムを呼び出す呼出命令を含み、前記プログラム実行手段は、前記呼出命令を実行することにより、前記第2改竄検出値、当該第2セキュアプログラムの先頭アドレス、及び当該第2セキュアプログラムのサイズを、前記第1セキュアプログラムに送ることを特徴とする請求項4に記載の暗号デジタルコンテンツ再生装置。前記プログラム実行手段は、前記第2セキュアプログラムに含まれる前記呼出命令を実行することにより、暗号化されたプログラム鍵を前記第1セキュアプログラムへ送り、前記第1セキュアプログラムを実行することにより、前記第2セキュアプログラムの改竄が検出されない場合には、前記第2セキュアプログラムから受け取った前記暗号化されたプログラム鍵を、当該第1セキュアプログラムに含まれるマスタ鍵で復号し、復号したプログラム鍵を、前記第2セキュアプログラムへ送り、前記第2セキュアプログラムを実行することにより、前記第1セキュアプログラムから取得したプログラム鍵を用いて、当該第2セキュアプログラムの暗号化部分を復号し、前記プログラム鍵を消去し、前記暗号デジタルコンテンツ再生装置は、さらに、前記プログラム実行手段により前記呼出命令が実行される前に、前記プログラム実行手段が割込み処理を行うことを禁止し、前記プログラム実行手段により前記プログラム鍵が消去されたのち、前記プログラム実行手段が割込み処理を行うことを許可する保護手段を備えることを特徴とする請求項5に記載の暗号デジタルコンテンツ再生装置。前記暗号デジタルコンテンツ再生装置は、更に、割込みの発生を検出する割込検出手段を備え、前記保護手段は、前記プログラム実行手段が前記第2セキュアプログラムに従い動作しているときにデータを書き込む記憶領域を備え、前記プログラム実行手段が前記第2セキュアプログラムに従い動作しているときに前記割込検出手段が割込みを検出すると前記記憶領域に書き込んだデータを暗号化し、前記プログラム実行手段による割り込み処理が終了すると、前記プログラム実行手段が、前記第2セキュアプログラムの実行に戻る前に、暗号化した前記データを復号することを特徴とする請求項6に記載の暗号デジタルコンテンツ再生装置。前記第1セキュアプログラムは、前記第2セキュアプログラムの実行に必要な情報である実行用情報を前記第2セキュアプログラムへ送ることを特徴とする請求項1に記載の暗号デジタルコンテンツ再生装置。前記第2セキュアプログラムの少なくとも一部は暗号化されており、前記第1セキュアプログラムが保持する前記実行用情報は、前記第2セキュアプログラムの暗号部分の復号に用いられるプログラム鍵であり、前記プログラム実行手段は、前記第1セキュアプログラムを実行することにより、前記プログラム鍵を前記第2セキュアプログラムへ送り、前記第2セキュアプログラムを実行することにより、前記第1セキュアプログラムから取得したプログラム鍵を用いて、当該第2セキュアプログラムの暗号化部分を復号して実行することを特徴とする請求項8に記載の暗号デジタルコンテンツ再生装置。暗号デジタルコンテンツ再生装置で用いられるセキュアプログラムであって、前記暗号デジタルコンテンツ再生装置は、前記第1のセキュリティレベルにおける動作状態を示す第1モードと、前記第2のセキュリティレベルにおける動作状態を示す第2モードとを切替えながら、前記第1モードにおいて前記第1セキュアプログラムを実行し、前記第2モードにおいて前記第2セキュアプログラムを実行するプログラム実行手段と、前記第1セキュアプログラムを実行する場合に、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、前記セキュアプログラムは、第1のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第1セキュアプログラムと、前記第1のセキュリティレベルより低い第2のセキュリティレベルで実行される第2セキュアプログラムとを含み、前記第1セキュアプログラムと前記第2セキュアプログラムとは、連携しながら1つのアプリケーションとして動作し、前記セキュアプログラムは、前記第1セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、前記外部装置から前記プログラム実行手段が切り離された後に、前記第1セキュアプログラムにより、前記第2セキュアプログラムに対する改竄の有無を確認するステップと、前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第2セキュアプログラムの一部を実行するステップとを含むことを特徴とするセキュアプログラム。暗号デジタルコンテンツ再生装置で用いられるセキュアプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、前記暗号デジタルコンテンツ再生装置は、前記第1のセキュリティレベルにおける動作状態を示す第1モードと、前記第2のセキュリティレベルにおける動作状態を示す第2モードとを切替えながら、前記第1モードにおいて前記第1セキュアプログラムを実行し、前記第2モードにおいて前記第2セキュアプログラムを実行するプログラム実行手段と、前記第1セキュアプログラムによる指示に従い、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、前記セキュアプログラムは、第1のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第1セキュアプログラムと、前記第1のセキュリティレベルより低い第2のセキュリティレベルで実行される第2セキュアプログラムとを含み、前記第1セキュアプログラムと前記第2セキュアプログラムとは、連携しながら1つのアプリケーションとして動作し、前記セキュアプログラムは、前記第1セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、前記外部装置から前記プログラム実行手段が切り離された後に、前記第1セキュアプログラムにより、前記第2セキュアプログラムに対する改竄の有無を確認するステップと、前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第2セキュアプログラムの一部を実行するステップとを含むことを特徴とする記録媒体。第1のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第1セキュアプログラムと、前記第1のセキュリティレベルより低い第2のセキュリティレベルで実行される第2セキュアプログラムとを実行する暗号デジタルコンテンツ再生装置で用いられるプログラム実行方法であって、前記暗号デジタルコンテンツ再生装置は、前記第1のセキュリティレベルにおける動作状態を示す第1モードと、前記第2のセキュリティレベルにおける動作状態を示す第2モードとを切替えながら、前記第1モードにおいて前記第1セキュアプログラムを実行し、前記第2モードにおいて前記第2セキュアプログラムを実行するプログラム実行手段と、前記第1セキュアプログラムによる指示に従い、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、前記セキュアプログラムは、第1のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第1セキュアプログラムと、前記第1のセキュリティレベルより低い第2のセキュリティレベルで実行される第2セキュアプログラムとを含み、前記第1セキュアプログラムと前記第2セキュアプログラムとは、連携しながら1つのアプリケーションとして動作し、前記プログラム実行方法は、前記第1セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、前記外部装置から前記プログラム実行手段が切り離された後に、前記第1セキュアプログラムにより、前記第2セキュアプログラムに対する改竄の有無を確認するステップと、前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第2セキュアプログラムの一部を実行するステップとを含むことを特徴とするプログラム実行方法。しかしながら、悪意のある利用者からプログラムを保護するためには、多様な保護技術の提供が要望されている。そこで本発明はかかる問題点に鑑みてなされたものであり、不正な改竄、解析を防止し、セキュアにプログラムを実行するプログラム実行装置を提供することを目的とする。上記目的を達成するために本発明は、プログラム実行装置であって、第1及び第2コンピュータプログラムに従って動作する,また、外部装置からの指示に従って前記動作を制御する処理手段と、前記処理手段が前記第1コンピュータプログラムに従って動作する場合に、前記外部装置から前記処理手段を切り離す第1保護手段と、前記処理手段が前記第2コンピュータプログラムに従って動作する場合に、前記第1コンピュータプログラムを保護する第2保護手段とを備えることを特徴とするプログラム実行装置である。これによって、外部からのハードウェアによる攻撃と、ソフトウェアによる攻撃との両方からプログラムを保護することが出来る。本発明は、上記構成のプログラム実行装置である。この構成によると、外部からのハードウェアによる攻撃と、ソフトウェアによる攻撃との両方からプログラムを保護することが出来る。また、外部装置から切り離すので、高いセキュリティを保つことが出来る。ここで、前記第2保護手段は、前記処理手段が前記第1コンピュータプログラムに従って動作している場合に、前記処理手段がデータを書き込む記憶領域を含み、前記処理手段が、前記第1コンピュータプログラムから第2コンピュータプログラムに切り替える直前に、前記記憶領域に書き込まれているデータを暗号化し、前記第2コンピュータプログラムから第1コンピュータプログラムに切り替えると、前記暗号化したデータを復号するとしても良い。また、前記第1コンピュータプログラムは、更に、前記第2コンピュータプログラムを呼び出す呼出命令を含み、前記第2保護手段は、前記処理手段が前記呼出命令を実行して前記第2コンピュータプログラムに切り替える直前に、前記記憶領域に書き込まれているデータを暗号化するとしても良い。この構成によると、第1コンピュータプログラムの実行中に、他のプログラムへ制御が移る場合に、記憶領域に書き込まれているデータを暗号化するので、第1コンピュータプログラムで扱うデータを他のプログラムから保護することが出来、第1コンピュータプログラムの解析を防止することが出来る。また、領域内のデータを暗号化するので、少ないメモリ使用量で処理を実行可能となる。これにより、携帯電話機やPDAなど、CPUの処理速度やメモリ容量などのリソースが限られている機器においても、高いセキュリティを保つことが出来る。ここで、前記プログラム実行装置は、更に、割り込みの発生を検出する割込検出手段を備え、前記第2コンピュータプログラムは、割り込みが発生した場合に行う処理を示し、前記第2保護手段は、前記処理手段が前記第1コンピュータプログラム実行中に前記割込検出手段が割り込みを検出すると、前記記憶領域に書き込まれているデータを暗号化し、暗号化後に、前記処理手段が前記第2コンピュータプログラムに従って動作することを許可するとしても良い。この構成によると、割り込みが発生した場合に、割り込み処理である第2コンピュータの実行前に、第1コンピュータプログラムで扱うデータを暗号化するので、割り込み処理を用いたソフトウェアによる解析から第1コンピュータプログラムを保護することが出来る。ここで、前記プログラム実行装置は、更に、割り込みの発生を検出する割込検出手段を備え、前記第1コンピュータプログラムを暗号化して生成される暗号化プログラムを記憶する記憶手段を備え、前記第2コンピュータプログラムは、割り込みが発生した場合に行う処理を示し、前記第2保護手段は、前記処理手段が前記第2コンピュータプログラムに従って動作することを禁止し、プログラム復号鍵を取得し、取得したプログラム復号鍵を用いて前記暗号化プログラムを復号して前記第1コンピュータプログラムを生成し、前記プログラム復号鍵を消去し、前記プログラム復号鍵を消去した後に、前記処理手段が前記第2コンピュータプログラムに従って動作することを許可するとしても良い。この構成によると、暗号化プログラムを復号するプログラム鍵を保持している間は、割り込みを受け付けないので、割り込みを利用した解析からプログラム復号鍵を保護することが出来るので、第1コンピュータプログラムを不正な解析から防ぐこと出来る。ここで、前記第2保護手段は、前記第1コンピュータプログラムを含む処理プログラムが生成されたときに少なくとも一部に基づいて生成される第1改竄検出値を取得し、前記処理手段が前記第1コンピュータプログラムを実行する前に、前記処理プログラムの少なくとも一部に基づいて第2改竄検出値を生成し、前記第1改竄検出値と前記第2改竄検出値とが異なる場合、前記処理手段が前記第1コンピュータプログラムに従って動作することを抑制するとしても良い。この構成によると、第2保護手段は、保護プログラムの改竄が検出された場合に、前記処理手段が第1コンピュータプログラムを実行することを禁止するので、仮に第1コンピュータプログラムが改竄されたとしても、改竄された第1コンピュータプログラムを実行することは無く、被害を少なくすることが出来る。ここで、前記処理プログラムは、前記第1改竄検出値を含み、前記第2保護手段は、前記処理プログラムから、前記第1改竄検出値を取得するとしても良い。この構成によると、処理プログラムの少なくとも一部に基づいて生成される改竄検出値を、処理プログラムが保持しているので、処理プログラムが改竄された場合など、処理プログラムに変更が必要になった場合に、プログラム実行装置の他の処理手段に変更を加えることなく、処理プログラムのみを変更することが出来る。以下、本発明の実施の形態について図面を用いて詳細に説明する。1.セキュア処理システム1の構成セキュア処理システム1は、図1に示すように、認証局装置100、ROMライター200、携帯端末300及びメモリカード400から構成される。セキュア処理システム1は、携帯端末300によって実行されるプログラムを不正な解析や改竄から保護するシステムである。保護対象のプログラムは、認証局装置100において生成され、ROMライター200によってROMに書き込まれる。プログラムが書き込まれたROMは携帯端末300に組み込まれる。ここで、保護対象のプログラムは、メモリカード400に記録されている暗号化された音楽データを復号する暗号化音楽データ復号プログラムである場合を例として説明する。1.1認証局装置100認証局装置100は、領域確保プログラム、割込禁止プログラム、呼出プログラム、鍵受信プログラム、実行フラグ、割込ハンドラ、復号プログラム及びセキュアプログラムから成る第2セキュア処理プログラムを生成する装置である。セキュアプログラムは保護対象となる暗号化音楽データ復号プログラムを含む。生成した第2セキュア処理プログラムは、ROMライター200でROMに記録され、携帯端末300に組み込まれる。各プログラムについては後述する。認証局装置100は、図2に示すように、コンパイラ101、プログラム暗号化部102、鍵暗号化部103、ハッシュ値算出部104、データ埋込部105、記憶部106及び送信部107から構成される。認証局装置100は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボードなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、認証局装置100は、その機能を達成する。1コンパイラ101コンパイラ101は、領域確保プログラム、割込禁止プログラム、鍵受信プログラム、実行フラグ及び割込ハンドラから成る保護プログラム、呼出プログラム、復号プログラム及びセキュアプログラムのソースコードを入力として受け付ける。呼出プログラムは、第2セキュア処理プログラムを実行する際に、改竄されているか否かを検出する際に利用するデータを送信するプログラムであり、TRS領域先頭アドレスを含む。TRS領域プログラムは、第2セキュア処理プログラムの復号プログラム516及び暗号化プログラム517の部分に相当する。TRS領域先頭アドレスは、携帯端末300に組み込まれた後のメモリ上での先頭アドレスである。コンパイラ101は、呼出プログラム、復号プログラム、セキュアプログラム及び保護プログラムのソースコードを受け付けると、図3に示すように、各プログラムをコンパイルする。まず、字句解析を行いステップS621、構文解析を行いステップS622、実行形式のプログラムであるバイナリデータを生成するステップS623。コンパイラ101は、生成した呼出プログラムバイナリデータ及び保護プログラムバイナリデータをデータ埋込部105へ出力する。また、復号プログラムバイナリデータ及びセキュアプログラムバイナリデータをプログラム暗号化部102へ出力する。2プログラム暗号化部102プログラム暗号化部102は、復号プログラムバイナリデータ及びセキュアプログラムバイナリデータを受け取る。また、プログラム鍵の入力を受け付ける。プログラム暗号化部102は、プログラム鍵を用いて、セキュアプログラムに暗号化アルゴリズムE1を施して暗号化プログラムを生成する。暗号化アルゴリズムE1は、一例としてAESAdvancedEncryptionStandardである。AESについては公知であるので、説明を省略する。なお、他の暗号化アルゴリズムを用いても良いのは勿論である。プログラム暗号化部102は、復号プログラムと暗号化プログラムとを、TRS領域プログラムとしてデータ埋込部105へ出力する。また、生成したTRS領域プログラムをハッシュ値算出部104へ出力する。3鍵暗号化部103鍵暗号化部103は、プログラム鍵とマスタ鍵との入力を受け付ける。鍵暗号化部103は、マスタ鍵を用いてプログラム鍵に暗号化アルゴリズムE1を施して暗号化し、暗号化鍵を生成する。生成した暗号化鍵をデータ埋込部105へ出力する。4ハッシュ値算出部104ハッシュ値算出部104は、第2セキュア処理プログラムの少なくとも一部に対してハッシュ値を算出する。ここでは、TRS領域プログラムと、秘密鍵とを入力として受け付け、秘密鍵を用いてTRS領域プログラムに対するハッシュ値を算出する。ハッシュ値の算出には一例として、HMACKeyedHashingforMessageAuthenticationで用いられるアルゴリズムを使用するものとする。ここで、Hをハッシュ関数、Kを秘密鍵とし、textをハッシュ対象となるデータ、opadは、バイト値Ox36を64回繰り返した文字列、ipadは、バイト値Ox5Cを64回繰り返した文字列とすると、ハッシュ値算出のアルゴリズムは、HKXORopadHのように表される。また、ハッシュ値算出部104は、TRS領域プログラムのバイナリサイズを導出する。ハッシュ値算出部104は、生成したハッシュ値と、ハッシュ値算出の対象となったTRS領域プログラムのバイナリサイズとをデータ埋込部105へ出力する。5データ埋込部105データ埋込部105は、コンパイラ101から呼出プログラムバイナリデータと保護プログラムバイナリデータとを受け取り、ハッシュ値算出部104からハッシュ値及びバイナリサイズを受け取る。また、鍵暗号化部103から暗号化鍵を受け取り、プログラム暗号化部102からTRS領域プログラムを受け取る。データ埋込部105は、ハッシュ値算出部104から受け取ったハッシュ値を改竄検出値として呼出プログラムに埋め込む。また、バイナリサイズ及び暗号化鍵を呼出プログラムに埋め込む。また、データを埋め込んだ呼出プログラムを保護プログラムに含め、保護プログラムと、プログラム暗号化部102から受け取るTRS領域プログラムとを合わせて第2セキュア処理プログラムを生成し、記憶部106へ書き込む。6記憶部106記憶部106は、データ埋込部105によって書き込まれる第2セキュア処理プログラムを記憶する。7送信部107送信部107は、記憶部106に記憶している第2セキュア処理プログラムをROMライターへ出力する。1.2ROMライター200ROMライターは、認証局装置100に接続されており、認証局装置100から受け取る第2セキュア処理プログラムをROMに書き込む。ROMライター200によってプログラムが書き込まれたROMは、携帯端末300へ組み込まれる。1.3メモリカード400メモリカード400は、図4に示すように、制御部401、入出力部402、認証部403及び情報記憶部404から構成される。1入出力部402入出力部402は、メモリカード400が他の機器に接続された場合に、他の機器と制御部401との間でデータの入出力を行う。2情報記憶部404また、情報記憶部404は、データ領域410とセキュア領域420とを含む。データ領域410は、暗号化音楽データ411を記憶している。暗号化音楽データ411は、MP3形式の音楽データに、タイトル鍵421を用いて暗号化アルゴリズムE1を施して生成される。セキュア領域420は、タイトル鍵421を記憶しており、認証部403との相互認証に成功した機器のみが読み出すことが出来る。なお、情報記憶部404にデータを記録する際には、メモリカード400に固有の情報に基づいて暗号化して記録するなどとしても良い。3認証部403認証部403は、携帯端末300とCPRMContentProtectionforRecordableMediaの仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を制御部401へ出力する。なお、CPRMについては、公知であるので説明を省略する。また、他の認証方法に従って認証するとしても良い。4制御部401制御部401は、入出力部402を介して他の機器と情報の入出力を行う。セキュア領域420に記憶されているデータは、認証部403による認証に成功した機器にのみアクセスを許可する。なお、セキュア領域420に記憶されているデータを出力する場合には、認証部403による認証で生成した共有鍵を用いて暗号化して出力する。データ領域410に記憶されているデータは、認証を行わずに、他の機器からのアクセスを許可する。1.4携帯端末300携帯端末300は、図5に示すように、CPU301、デバッガインターフェース302、デバッガ無効化回路303、割り込みコントローラ304、メモリ305、メモリカードインターフェース306、入力部307、表示部308、スピーカ309、デコーダ310、マイク312、変換部313、無線制御部314、無線部315及びアンテナ316から構成され、これらがバス317によって接続されており、割込コントローラ304からCPU301へは割込線318が接続されている。以下、各構成について説明する。1デバッガ無効化回路303、デバッガインターフェース302デバッガ無効化回路303は、CPU301とデバッガインターフェース302との間に設けられ、CPU301とデバッガインターフェース302とを接続又は切断することができる。デバッガ無効化回路303は、CPU301から有効を示すデバッガ制御信号を受け取ると、CPU301とデバッガインターフェース302とを接続し、CPU301から無効を示すデバッガ制御信号を受け取ると、CPU301とデバッガインターフェース302とを切断する。CPU301とデバッガインターフェース302とが接続されているときは、デバッガインターフェース302の外部に接続されるデバッガが有効であり、CPU301とデバッガインターフェース302とが切断されているときは、デバッガインターフェース302の外部に接続されるデバッガが無効である。具体例として、デバッガ無効化回路303は、スイッチにより実現される。なお、スイッチ回路のように物理的に接続を切るとしても良いし、電気的に切断するとしても良い。デバッガインターフェース302は、携帯端末300と外部のデバッガとを接続するためのインターフェースである。2メモリ305メモリ305は、図6に示す、第1セキュア処理プログラム501、第2セキュア処理プログラム502、ベクタテーブル503、音楽再生プログラム504及びアプリケーション505を記憶している。A第2セキュア処理プログラム502第2セキュア処理プログラム502は、前述の認証局装置100によって生成されROMに記録されたプログラムであり、図7に示す各プログラムによって構成される。以下、各プログラムについて説明する。領域確保プログラム511領域確保プログラム511は、認証通信プログラム523及び暗号化音楽データ復号プログラム524の実行中に使用する動的メモリを確保するためのメモリ領域を確保する。割込禁止プログラム512割込禁止プログラム512は、割り込みをマスクすることにより、割り込みの処理を禁止する。呼出プログラム513呼出プログラム513は、第1セキュア処理プログラム501を呼び出して起動する。呼出プログラム513は、図8に示す改竄検出値541、TRS領域先頭アドレス542、バイナリサイズ543及び暗号化鍵544から成る改竄検出データを含む。第1セキュア処理プログラム501を呼び出すと共に改竄検出データを送信する。改竄検出データは、認証局装置100のデータ埋込部105にて埋め込まれたデータである。改竄検出値541は、認証局装置100によって、第2セキュア処理プログラム502のTRS領域の範囲に対して算出されたハッシュ値である。TRS領域先頭アドレス542は、ハッシュ値算出の対象となるデータの、メモリ305における先頭アドレスを示す。バイナリサイズ543は、ハッシュ値算出の対象となるデータのバイナリサイズを示す。暗号化鍵544は、認証局装置100の鍵暗号化部103によって、マスタ鍵を用いてプログラム鍵を暗号化して生成されたものである。鍵受信プログラム514鍵受信プログラム514は、第1セキュア処理プログラム501から送信されるプログラム鍵を受信し、復号プログラム516へ送信する。実行フラグ515実行フラグ515は、セキュアプログラムが実行中であるか否かを示す。復号プログラム516が暗号化プログラム517を復号する前に、セキュアプログラムを実行中であることを示すONの状態にし、セキュアプログラムの実行が終了するときにOFFの状態にする。復号プログラム516復号プログラム516は、鍵受信プログラム514からプログラム鍵を受け取り、プログラム鍵を用いて暗号化プログラム517に復号アルゴリズムD1を施して復号し、セキュアプログラムを生成する。ここで、暗号化プログラムの復号には、WO04013744で公開されている技術を用いる。この技術は、暗号化プログラムを少しずつメモリにロードして実行していく。そのため、復号後のプログラム全体がメモリ上に存在するわけではないので、外部からメモリ内のデータを不正に読み込まれてもプログラムを解析されない。暗号化プログラム517暗号化プログラム517は、セキュアプログラムが暗号化されて生成されたものである。セキュアプログラムは、図7に示す割込禁止解除プログラム521、領域初期化プログラム522、認証通信プログラム523、暗号化音楽データ復号プログラム524、領域鍵525、領域暗号化プログラム526、領域復号プログラム527及び領域終了処理プログラム528から構成される。割込禁止解除プログラム521、領域初期化プログラム522、認証通信プログラム523、領域鍵525、領域暗号化プログラム526、領域復号プログラム527及び領域終了処理プログラム528は、暗号化音楽データ復号プログラム524を他のプログラムから保護する。a割込禁止解除プログラム521割込禁止解除プログラム521は、上記割込禁止プログラム512で行った割込禁止を解除する。b領域初期化プログラム522領域初期化プログラム522は、上記領域確保プログラム511によって確保されたメモリ領域を初期化し、暗号化対象となる記憶領域を確保する。記憶領域は、認証通信プログラム523及び暗号化音楽データ復号プログラム524によって利用される記憶領域であり、実行中に使用するデータが書き込まれる。b認証通信プログラム523認証通信プログラム523は、認証鍵531を保持する。認証通信プログラム523は、第1セキュア処理プログラム501が正当なプログラムであるか否かの片方向認証を行う。c暗号化音楽データ復号プログラム524暗号化音楽データ復号プログラム524は、メモリカード400に記録されている暗号化音楽データ411に対して、タイトル鍵を用い、復号アルゴリズムD1を施して復号し、音楽データを生成する。なお、復号アルゴリズムD1は、暗号化アルゴリズムE1の逆の処理を行うアルゴリズムである。d領域鍵525領域鍵525は、下記領域暗号化プログラム526において、記憶領域内のデータを暗号化する際、及び、暗号化されたデータを領域復号プログラム527において復号する際に用いられる。e領域暗号化プログラム526領域暗号化プログラム526は、領域鍵525を用いて、上記記憶領域内のデータに暗号化アルゴリズムE2を施して暗号化する。なお、暗号化アルゴリズムE2は、暗号化アルゴリズムE1よりも高速に処理を行うことが出来るアルゴリズムであり、一例としてXOR演算である。なお、暗号化アルゴリズムE2は、XOR演算に限定されず、他の暗号化アルゴリズムを用いても良く、要求されるセキュリティ強度やCPUの処理能力によって決定される。領域暗号化プログラム526は、第2セキュア処理プログラム502から、第1セキュア処理プログラム501を呼び出す場合、第1セキュア処理プログラム501に制御が移る前に記憶領域内のデータを暗号化する。f領域復号プログラム527領域復号プログラム527は、第1セキュア処理プログラム501から第2セキュア処理プログラム502に制御が戻ると、記憶領域内の暗号化されているデータに復号アルゴリズムD2を施して復号し、平文のデータに戻す。g領域終了処理プログラム528領域終了処理プログラム528は、領域初期化プログラム522で確保した記憶領域を開放し、第1セキュア処理プログラム501の終了関数を呼び出し、音楽データ再生処理を終了する。割込ハンドラ518割込ハンドラ518は、第2セキュア処理プログラム502の実行中に割り込みが発生した場合に実行される。割込ハンドラ518は、図示していない暗号復号鍵を保持する。図9に割込ハンドラ518の処理を示す。なお、割込ハンドラ518は、実際にはコンピュータプログラムであるが、図9では簡単のため、フローチャートを用いて説明する。実行フラグ515を読み込むステップS611。次に、読み込んだ実行フラグ515がONを示すかOFFを示すかを判断しステップS612、ONを示す場合ステップS612でON、暗号復号鍵を用い、記憶領域内のデータに暗号化アルゴリズムE2を施して暗号化するステップS613。その後、割り込み処理へ移る。また、読み込んだ実行フラグがOFFを示す場合ステップS612でOFF、記憶領域内のデータの暗号化は行わずに、割り込み処理へ移る。割り込み処理が終了すると、実行フラグがONを示す場合ステップS614でON、暗号復号鍵を用い、記憶領域内のデータに復号アルゴリズムD2を施して復号しステップS615、元の処理に戻る。実行フラグがOFFを示す場合ステップS614でOFF、復号処理は行わずに元の処理へ戻る。B第1セキュア処理プログラム501第1セキュア処理プログラム501は、図10に示すように、回路切断プログラム551、改竄検出プログラム552、鍵復号プログラム553、鍵送信プログラム554及び認証通信プログラム555、データ読出プログラム556及び回路接続プログラム557から構成され、CPU301のセキュア処理モードにて実行される。セキュア処理モードについては後述する。回路切断プログラム551第1セキュア処理プログラム501が起動されると、回路切断プログラム551は、デバッガ無効化回路303へ無効を示すデバッガ制御信号を出力する。改竄検出プログラム552改竄検出プログラム552は、秘密鍵562を含み、第2セキュア処理プログラム502の改竄検出を行う。改竄検出プログラム552は、第2セキュア処理プログラム502から改竄検出データを取得する。改竄検出プログラム552は、メモリ305の、取得したTRS領域先頭アドレスが示す位置から、バイナリサイズが示すサイズのデータを、ハッシュ値算出の対象となるTRS領域プログラムであるとして読み出す。読み出したTRS領域プログラムに、秘密鍵562を用いてハッシュ関数を施してハッシュ値を算出する。算出したハッシュ値と、取得した改竄検出値とを比較し、同一の場合、改竄されていないと判断する。同一でない場合、改竄されていると判断し、以降の処理を禁止する。鍵復号プログラム553鍵復号プログラム553は、マスタ鍵563を含む。鍵復号プログラム553は、改竄検出プログラム552によって、第2セキュア処理プログラム502の改竄が検出されなかった場合、マスタ鍵563を用いて暗号化鍵544に復号アルゴリズムD1を施して復号し、プログラム鍵を生成する。生成したプログラム鍵を、鍵送信プログラム554へ送信する。鍵送信プログラム554鍵送信プログラム554は、鍵復号プログラム553からプログラム鍵を受信し、第2セキュア処理プログラム502へ送信する。認証通信プログラム555認証通信プログラム555は、認証鍵565を含み、認証鍵565を用いて第2セキュア処理プログラム502と認証を行う。また、認証に成功した場合、セッション鍵を共有する。以降、第2セキュア処理プログラム502とデータの送受信を行う場合には、セッション鍵を用いて暗号通信を行う。データ読出プログラム556データ読出プログラム556は、メモリカード400との間でCPRMの方法に従って相互認証を行い、認証に成功した場合に、メモリカード400のセキュア領域420にアクセスしてタイトル鍵421を取得する。回路接続プログラム557回路接続プログラム557は、デバッガ無効化回路303へ有効を示すデバッガ制御信号を出力する。Cベクタテーブル503ベクタテーブル503は、図11に示すように、ソフトウェア割り込み、例外、ハードウェア割り込み発生時の処理先が記述されている。D音楽再生プログラム504音楽再生プログラム504は、第2セキュア処理プログラム502によって復号された音楽データを再生処理を行うプログラムであり、再生する音楽データをバッファ311に送る。Eアプリケーション505アプリケーション505は、ユーザの操作による入力を受け付ける。また、入力に従い、第2セキュア処理プログラム502を起動する。3CPU301CPU301は、メモリ305に記憶しているプログラムに従って動作する。また、デバッガインターフェース302を介して接続されるデバッガの指示によって動作を制御する。CPU301は、図12に示すように、メモリ305に記憶しているプログラムの命令をフェッチしステップS601、読み出した命令を解釈しステップS602、実行するステップS603。また、プログラムカウンタのアドレスを進めてステップS604、次の命令をフェッチし、処理を繰り返す。ここで、CPU301は、セキュア処理モード及び通常処理モードの何れかのモードで処理を行う。通常処理モードは、CPU301が通常処理を行っている状態を示し、セキュア処理モードは、高いセキュリティを持ち、メモリ内のデータを外部から観察できないように、高いセキュリティを保ちながら処理を行うモードである。CPU301は、セキュア処理モードで第1セキュア処理プログラム501を実行し、通常モードで第2セキュア処理プログラム502を実行する。また、CPU301は、割り込みコントローラ304から割込線318を介して割り込み信号を受け付ける。CPU301は、第2セキュア処理プログラム502の割込禁止プログラム512を実行している場合には、割り込みを受け付けない。割込禁止が解除された場合に割り込み信号を受け付けると、図11のベクタテーブルを参照し、受け付けた割り込み信号の処理に該当するアドレスを読み込む。読み込んだアドレスの割り込みハンドラに従って処理を行い、割り込み処理が終了すると、元の処理へ戻る。第2セキュア処理プログラム502実行中に割り込み信号を受け付けると、CPU301は、ベクタテーブル503を参照し、図9に示す割込ハンドラ518を実行する。4入力部307入力部307は、ユーザによる外部からの入力を受け付ける。入力部307は、外部からの入力を受け付けると、割込みコントローラ304へ割り込みの発生を通知する。5割り込みコントローラ304割り込みコントローラ304は、入力部307又は無線制御部314から、メール受信や着信、ユーザによる操作などの割り込みの発生を通知されると、割込線318により、CPU301へ割り込み信号を出力する。6スピーカ309、デコーダ310デコーダ310は、バッファ311を含み、バッファ311は、CPU301から受け取る音声データをバッファし、スピーカ309は、バッファ311に記憶されている音声データから音声信号を生成して出力する。7メモリカードインターフェース306メモリカードインターフェース306は、携帯端末300とメモリカード400とを接続するためのインターフェースであり、CPU301の制御の下、メモリカード400へデータを出力し、メモリカード400からデータを受け取ると、CPU301へ出力する。8無線制御部314、無線部315、アンテナ316アンテナ316、無線部315及び無線制御部314は、無線基地局及び携帯電話網を介して、接続された相手の装置との間で、音声又は情報の送受信を行う。ここで、無線制御部314は、アンテナ316及び無線部315を介してメールを受信する場合、及び着信がある場合に、割込みコントローラ304へ割り込みを通知する。9マイク312、変換部313変換部313は、マイク312から受け取る音声を電気信号に変換し、無線制御部314へ出力する。2.セキュア処理システムの動作2.1認証局装置100の動作コンパイラ101は、呼出プログラムソースコード及び保護プログラムソースコードの入力を受け付けると、コンパイルして呼出プログラムバイナリデータ及び保護プログラムバイナリデータを生成し、生成したバイナリデータをデータ埋込部105へ出力する。また、復号プログラムソースコード及びセキュアプログラムソースコードの入力を受け付け、コンパイルして各プログラムのバイナリデータを生成し、生成したバイナリデータをプログラム暗号化部102へ出力する。プログラム暗号化部102は、復号プログラム及びセキュアプログラムのバイナリデータを受け取り、プログラム鍵を受け取ると、プログラム鍵を用いてセキュアプログラムを暗号化し、暗号化プログラムを生成する。復号プログラム及び生成した暗号化プログラムをTRS領域プログラムとしてデータ埋込部105及びハッシュ値算出部104へ出力する。ハッシュ値算出部104は、TRS領域プログラムを受け取り、秘密鍵を受け取ると、ハッシュ関数を施して、TRS領域プログラムに対するハッシュ値を算出する。また、TRS領域プログラムバイナリデータのサイズを導出する。ハッシュ値算出部104は、ハッシュ値及びバイナリサイズをデータ埋込部105へ出力する。鍵暗号化部103は、プログラム鍵及びマスタ鍵の入力を受け付けると、マスタ鍵を用いてプログラム鍵を暗号化し、暗号化鍵を生成する。生成した暗号化鍵をデータ埋込部105へ出力する。データ埋込部105は、呼出プログラムバイナリデータを受け取り、ハッシュ値、バイナリサイズ及び暗号化鍵を受け取ると、ハッシュ値を改竄検出値として呼出プログラムに埋め込み、更にバイナリサイズ及び暗号化鍵を呼出プログラムバイナリデータに埋め込む。また、コンパイラから保護プログラムバイナリデータを受け取り、プログラム暗号化部102からTRS領域プログラムを受け取ると、呼出プログラムを含めた保護プログラムと、TRS領域プログラムとを合わせて第2セキュア処理プログラムを生成し記憶部106に書き込む。送信部107は、記憶部106から第2セキュア処理プログラムを読み出してROMライター200へ出力する。2.2携帯端末300における音楽データ再生処理の動作1携帯端末300がメモリカード400に記録されている音楽データを再生する際の動作について、図13~図17を参照して説明する。ユーザの操作により携帯端末300の入力部307から、メモリカード400に記録されている音楽データを再生する旨の入力を受け付けると、アプリケーション505は、第2セキュア処理プログラム502を起動するステップS701。第2セキュア処理プログラム502は、領域確保プログラム511を実行することによって、TRS領域プログラムを実行中に動的にメモリ確保を行うための仮想メモリ空間の確保を行うステップS702。また、割込禁止プログラム512を実行して割り込みを禁止し、割り込みを用いたプログラムの解析行為を無効とするステップS703。以降、割込禁止を解除するまで割り込みをマスクする。次に、呼出プログラム513を実行し、改竄検出データを送信して第1セキュア処理プログラム501を呼び出すステップS704。第1セキュア処理プログラム501は、第2セキュア処理プログラム502から改竄検出データとして、改竄検出値、TRS領域先頭アドレス、バイナリサイズ及び暗号化鍵を受信するステップS705。また、回路切断プログラム551を実行してデバッガ無効化回路303へ無効を示すデバッガ制御信号を出力するステップS706。これにより、デバッガ無効化回路303はスイッチの接続を切り、デバッガによる解析を無効化する。また、以下のように改竄検出プログラム552を実行する。改竄検出プログラム552は、ステップS705で受信したTRS領域先頭アドレスが示す位置から、バイナリサイズが示す範囲のデータをハッシュ値算出の対象データとして読み出す。また、秘密鍵を用いて、取り出した対象データに対するハッシュ値を算出するステップS709。算出したハッシュ値と、ステップS708で受信した改竄検出値とを比較し、一致するか否かを判断するステップS710。一致しない場合ステップS710でNO、改竄されているものとして、以降の処理を抑制する。また、回路接続プログラム557を実行して、デバッガ無効化回路303へ、有効を示すデバッガ制御信号を出力しステップS737、処理を終了する。ステップS709で算出したハッシュ値と改竄検出値とが一致する場合ステップS710YES、改竄されていないものとして、以降の処理を継続する。第1セキュア処理プログラム501は、鍵復号プログラム553を実行する。鍵復号プログラム553は、マスタ鍵563を用いて、ステップS708で受信した暗号化鍵を復号し、プログラム鍵を生成するステップS711。生成したプログラム鍵を鍵送信プログラム554へ送信する。鍵送信プログラム554は、受信したプログラム鍵を、第2セキュア処理プログラム502へ送信するステップS712。第2セキュア処理プログラム502は、鍵受信プログラム514を実行することによって、プログラム鍵を受信するステップS713。また、実行フラグをONにするステップS714。次に、復号プログラム516を実行する。復号プログラム516は、受信したプログラム鍵を用いて暗号化プログラム517を復号し、セキュアプログラムを生成するステップS715。セキュアプログラムを生成すると、復号に用いたプログラム鍵を消去するステップS716。第2セキュア処理プログラム502は、セキュアプログラムの実行を開始するステップS717。まず、割込禁止解除プログラム521を実行する。割込禁止解除プログラム521は、ステップS703で行った割込禁止を解除するステップS718。以降、割り込みが発生した場合は、セキュアプログラムを中断して割り込み処理を実行することになる。割り込みが発生した場合の処理については後述する。次に、領域初期化プログラム522を実行して、メモリ空間に暗号化の対象となる記憶領域を確保するステップS719。第2セキュア処理プログラム502は、認証通信プログラム523を実行し、後述の処理を行って第1セキュア処理プログラム501を認証するステップS720。また、第1セキュア処理プログラム501は、認証通信プログラム555を実行して認証を受ける。第2セキュア処理プログラム502は、認証に失敗した場合、以降の処理を抑制する。認証に失敗した場合、第1セキュア処理プログラム501は、デバッガ無効化回路303へ有効を示すデバッガ制御信号を出力してステップS737処理を終了する。認証に成功した場合、第2セキュア処理プログラム502及び第1セキュア処理プログラム501は、セッション鍵を共有する。以降、第2セキュア処理プログラム502及び第1セキュア処理プログラム501の間で通信を行う場合には、共有したセッション鍵を用いて暗号通信を行う。第2セキュア処理プログラム502は、認証に成功した場合に、音楽再生プログラムへ制御を移す。音楽再生プログラム504は、メモリカード400から暗号化音楽データ411を読み出すステップS721。また、音楽再生プログラム504は、暗号化音楽データ411の復号を第2セキュア処理プログラム502へ要求するステップS722。第2セキュア処理プログラム502は、暗号化音楽データ411の復号を要求されると、領域暗号化プログラム526を実行する。領域暗号化プログラム526は、ステップS719で確保した記憶領域内のデータを、領域鍵525を用いて暗号化するステップS723。記憶領域が暗号化されると、第2セキュア処理プログラム502は、第1セキュア処理プログラム501に、タイトル鍵の取得を要求するステップS724。第1セキュア処理プログラム501は、データ読出プログラム556を実行する。データ読出プログラム556は、メモリカード400の認証部403と相互認証を行いステップS725、認証に成功した場合にステップS726でYES、メモリカード400の情報記憶部404にアクセスしてタイトル鍵を取得する。なお、認証に失敗した場合は、タイトル鍵を取得できず、第1セキュア処理プログラム501は、デバッガ無効化回路303へ有効を示すデバッガ制御信号を出力してステップS737処理を終了する。第1セキュア処理プログラム501は、メモリカード400との相互認証に成功してタイトル鍵を取得するとステップS727、ステップS720で共有したセッション鍵を用いてタイトル鍵を暗号化し、暗号化タイトル鍵を生成するステップS728。生成した暗号化タイトル鍵を第2セキュア処理プログラム502へ送信する。第2セキュア処理プログラム502は、領域復号プログラム527を実行する。領域復号プログラム527は、領域鍵525を用いて暗号化された記憶領域を復号し、元の状態に戻すステップS729。また、認証通信プログラム523は、第1セキュア処理プログラム501から受信した暗号化タイトル鍵を、セッション鍵を用いて復号し、タイトル鍵を得るステップS730。次に、第2セキュア処理プログラム502は、暗号化音楽データ復号プログラム524を実行する。暗号化音楽データ復号プログラム524は、タイトル鍵を用いて、音楽再生プログラムがメモリカード400から読み出した暗号化音楽データ411を復号しステップS731、音楽データを生成する。生成した音楽データは、音楽再生プログラムへ送信する。音楽再生プログラムは、受信する音楽データを再生するステップS732。音楽データの再生が終了するとステップS733、第2セキュア処理プログラム502に制御を移し、第2セキュア処理プログラム502は、領域終了処理プログラム528を実行する。領域終了処理プログラム528は、ステップS719で確保した記憶領域を開放しステップS734、第1セキュア処理プログラム501の終了関数を呼び出すステップS735。また、実行フラグをOFFにするステップS736。第1セキュア処理プログラム501は、回路接続プログラム557を実行し、デバッガ無効化回路303へ有効を示すデバッガ制御信号を出力しステップS737、処理を終了する。2認証上述のステップS720で第2セキュア処理プログラム502が第1セキュア処理プログラム501を認証する際の処理について、図18を参照して説明する。第2セキュア処理プログラム502は、乱数R0を生成し、第1セキュア処理プログラム501へ送信するステップS751。第1セキュア処理プログラム501は、乱数R0を受信し、認証鍵565を用いて受信した乱数R0を暗号化し、認証値R1を生成するステップS752。生成した認証値R1を第2セキュア処理プログラム502へ送信するステップS753。第2セキュア処理プログラム502は、第1セキュア処理プログラム501から認証値R1を受信する。また、認証鍵531を用いて生成した乱数R0を暗号化し、認証値R2を生成するステップS754。第2セキュア処理プログラム502は、受信した認証値R1と、生成した認証値R2とを比較しステップS755、一致しない場合ステップS755でNO、第1セキュア処理プログラム501へ異なるを示す判断結果を送信し、処理を終了する。また、ステップS755での比較結果が一致する場合ステップS755でYES、第1セキュア処理プログラム501へ同じを示す判断結果を送信する。また、生成した乱数R0と認証鍵531とから、一方向性関数を用いてセッション鍵を生成するステップS759。第1セキュア処理プログラム501は、受信する判断結果が異なるを示す場合ステップS758で異、処理を終了する。また、受信する判断結果が同じを示す場合ステップS758で同、乱数R0と認証鍵565とから、一方向性関数を用いてセッション鍵を生成するステップS760。このようにして、第2セキュア処理プログラム502は第1セキュア処理プログラム501を認証し、認証に成功した場合にはセッション鍵を共有する。以降、第2セキュア処理プログラム502と第1セキュア処理プログラム501との間でデータの送受信を行う場合は、このセッション鍵を用いて暗号化して通信する。3割り込み割り込みがあった場合のCPU301の動作について、図19を参照して説明する。なお、ここではメールを受信した場合を一例として説明する。CPU301は、割込みコントローラ304から割込信号を受け取るとステップS771、ベクタテーブルを読み込むステップS772。また、ベクタテーブルに従って、割り込みハンドラを実行するステップS773。まず、実行フラグを読み込みステップS774、ONであるかOFFであるかを判断するステップS775。ONの場合ステップS775でON、領域鍵525を用いて記憶領域内のデータを暗号化するステップS776。また、コンテキストを退避しステップS777、メール受信の処理を行うステップS778。実行フラグがOFFである場合はステップS775でOFF、記憶領域内の暗号化を行わずに、ステップS777、778の処理を行う。メール受信処理が終了すると、実行フラグがONの場合はステップS779でON、記憶領域内のデータを復号しステップS780、元の処理に戻る。実行フラグがOFFの場合はステップS779でOFF、復号処理を行わずに元の処理へ戻る。3.その他の変形例なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。1本実施の形態では、携帯端末で実行される暗号化音楽データ復号プログラムを保護する場合を一例として説明したが、本発明がこれに限定されないのは勿論である。保護対象となるプログラムを実行する装置は、DVDプレーヤ、DVDレコーダ、PC、PDAなどであっても良い。また、保護対象となるプログラムは、携帯端末で映像コンテンツやゲームなどを実行する際に利用する復号プログラムであっても良いし、DVDレコーダでコンテンツを記録する際に利用する記録プログラムであっても良く、不正な解析、改竄を防止したいプログラムであれば良い。2本実施の形態では、改竄検出値としてハッシュ値を用いるとしたが、改竄検出値は、TRS領域プログラムに対して一意に定まる値であれば良く、TRS領域プログラムに対するディジタル署名であっても良いし、TRS領域プログラムを暗号化して生成される暗号化データを改竄検出値として用いるとしても良い。また、ハッシュ値の算出は他のアルゴリズムを利用するとしても良い。また、改竄検出値はTRS領域プログラムに対して生成されるとしたが、TRS領域プログラムの少なくとも一部に対して生成されるとしても良く、また、第2セキュア処理プログラムの少なくとも一部に対して生成されるとしても良い。また、第2セキュア処理プログラム又はTRS領域プログラムの一部若しくは全部を対象としたマッチングや、擬似乱数の埋め込みによる改竄の検出などでも良く、実行するプログラムが生成時と同一であるか否かを検出可能な方法であれば、他の改竄検出方法を用いても良い。また、本実施の形態では、改竄検出を、デバッガ無効化回路の切断後に行っているが、デバッガ無効化回路の切断前に改竄検出を行い、改竄が検出されなかった場合にデバッガ無効化回路を切断し、以降の処理を行うとしても良い。3改竄検出データは、第2セキュア処理プログラムの呼出プログラムが第1セキュア処理プログラム501に送信するとしたが、第2セキュア処理プログラムとは別のプログラムが送信するとしても良い。この場合、呼出プログラムは、第1セキュア処理プログラム501の呼び出しのみを行い、改竄検出データの送信処理を行う送信プログラムがメモリ305に記憶されており、第1セキュア処理プログラム501は、第2セキュア処理プログラムに呼び出されて起動すると、送信プログラムに改竄検出データの送信を要求する。送信プログラムは、要求に応じて改竄検出データを送信する。この場合、認証局装置100は、送信プログラムを保護プログラムに含めず、第2セキュア処理プログラムとは別のプログラムとして生成する。また、第1セキュア処理プログラム501が第2セキュア処理プログラムの改竄検出データを予め保持しているとしても良い。4本実施の形態では、第2セキュア処理プログラムが第1セキュア処理プログラム501の認証を行う片方向認証としたが、双方向に認証を行うとしても良い。また、チャレンジレスポンス型の認証を行うとしたが、これに限定されず、通信相手の正当性を認証可能であれば他の認証方法を利用するとしても良い。また、認証値R1及びR2は、乱数R0を認証鍵を用いて暗号化して生成するとしたが、乱数R0に一方向性関数を施して生成するとしても良い。また、乱数R0と認証鍵とから、一方向性関数を用いてセッション鍵を生成するとしたが、暗号化方式を用いて生成するとしても良い。5領域暗号化プログラム526は、第2セキュア処理プログラムから第1セキュア処理プログラム501を呼び出す場合に、記憶領域を暗号化するとしたが、第2セキュア処理プログラムから外部関数を呼び出す場合など、第2セキュア処理プログラム以外のプログラムに制御が移る場合に、記憶領域を暗号化して、記憶領域内のデータを保護する。また、領域復号プログラム527は、他のプログラムから第2セキュア処理プログラムに制御が戻った場合に、記憶領域内のデータを復号して、元のデータに戻す。6マスタ鍵は、保護対象となるプログラムを実行する装置毎に固有であるとしても良い。この場合、不正なユーザにマスタ鍵を奪われたとしても、鍵を奪われた装置以外は、他の鍵を用いて暗号化されている為、不正なマスタ鍵を用いても他の装置は正常に動作しない。よって、不正に行為による被害を少なくすることが出来る。7認証鍵は、第1セキュア処理プログラム501及び第2セキュア処理プログラムが保持する構成としたが、プログラム鍵や改竄検出値に基づいて算出されるものであっても良い。また、認証局装置100はマスタ鍵を用いて認証鍵を暗号化するとしても良い。この場合、暗号化プログラムを復号するプログラム鍵は、認証鍵に基づいて算出される。このように、認証に利用する鍵と暗号化プログラムの復号に用いる鍵とが依存関係にあれば、何れの鍵を暗号化するとしても良い。また、暗号化された鍵を更に他の鍵を用いて暗号化するなど、更に多くの鍵を用いて暗号化の階層を深くしても良い。8本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、BDBlu-rayDisc、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。9上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。"