(57)【要約】      （修正有）【課題】不正な改竄、解析を防止し、セキュアにプログラムを実行する情報処理装置を提供する。【解決手段】第１セキュア処理プログラムは、デバッガ無効化回路へ「無効」を示すデバッガ制御信号を出力することにより、デバッガによる解析を無効にした上で、第２セキュア処理プログラムから受け取ったハッシュ値を用いて、第２セキュア処理プログラムの改竄の有無を判定する。第２セキュア処理プログラムが改竄されていない場合には、第１セキュア処理プログラムは、第２セキュア処理プログラムへプログラム鍵を出力する。第２セキュア処理プログラムは、受け取ったプログラム鍵を用いて、暗号化プログラムを復号し、セキュアプログラムを実行する。【選択図】図１３
2011253558.tif 000002
【特許請求の範囲】
【請求項１】
暗号デジタルコンテンツ再生装置であって、
前記第１のセキュリティレベルにおける動作状態を示す第１モードと、前記第１のセキュリティレベルより低い第２のセキュリティレベルにおける動作状態を示す第２モードとを切替えながら、プログラムを実行するプログラム実行手段と、
前記第１のモードで実行中は、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備え、
第１セキュアプログラムは、前記第１のセキュリティレベルにおける動作状態を示す第１モードで実行され、
第２セキュアプログラムは、前記第１セキュアプログラムとは異なる前記第２セキュアプログラムであって、前記第１のセキュリティレベルより低い前記第２のセキュリティレベルで実行され、
アプリケーションプログラムは、ユーザのデジタルコンテンツ再生指示に応じて、前記第２セキュア処理プログラムを起動し、前記第１のセキュアプログラムは、前記第２セキュアプログラムの指示に応じて、暗号デジタルコンテンツを復号するためのコンテンツ鍵の取得し、前記取得は、前記外部接続無効化手段によって、外部装置からの接続を切り離した後に行われ、
前記第２セキュアプログラムは、バッファを用いながら、デジタルコンテンツの再生を行う
ことを特徴とする暗号デジタルコンテンツ再生装置。
【請求項２】
前記第１セキュアプログラムは、前記第２セキュアプログラムで用いられる秘密情報を保持しており、前記プログラム実行手段は、前記第１セキュアプログラムに従い動作することにより、前記第２セキュアプログラムとの間で相互認証を行い、セッション鍵を共有し、前記セッション鍵を用いて、前記秘密情報を暗号化し、暗号化した前記秘密情報を前記第２セキュアプログラムへ送る
ことを特徴とする請求項１に記載の暗号デジタルコンテンツ再生装置。
【請求項３】
前記第１セキュアプログラムが保持する前記秘密情報は、外部記録媒体のセキュアな領域から取得した鍵情報である
ことを特徴とする請求項２に記載の暗号デジタルコンテンツ再生装置。
【請求項４】
前記プログラム実行手段は、前記第１セキュアプログラムに従い動作することにより、前記第２プログラムの少なくとも一部を対象として、秘密鍵を用いてハッシュ演算を行い、第１改竄検出値を取得し、前記第２セキュアプログラムが生成されたときに前記第２セキュアプログラムの少なくとも一部に基づいて算出された第２改竄検出値と、前記第１改竄検出値とを比較し、前記比較の結果、一致しない場合は動作を終了し、一致する場合は動作を継続する
ことを特徴とする請求項２に記載の暗号デジタルコンテンツ再生装置。
【請求項５】
前記第２セキュアプログラムは、前記第１セキュアプログラムを呼び出す呼出命令を含み、
前記プログラム実行手段は、前記呼出命令を実行することにより、前記第２改竄検出値、当該第２セキュアプログラムの先頭アドレス、及び当該第２セキュアプログラムのサイズを、前記第１セキュアプログラムに送る
ことを特徴とする請求項４に記載の暗号デジタルコンテンツ再生装置。
【請求項６】
前記プログラム実行手段は、前記第２セキュアプログラムに含まれる前記呼出命令を実行することにより、暗号化されたプログラム鍵を前記第１セキュアプログラムへ送り、前記第１セキュアプログラムを実行することにより、前記第２セキュアプログラムの改竄が検出されない場合には、前記第２セキュアプログラムから受け取った前記暗号化されたプログラム鍵を、当該第１セキュアプログラムに含まれるマスタ鍵で復号し、復号したプログラム鍵を、前記第２セキュアプログラムへ送り、前記第２セキュアプログラムを実行することにより、前記第１セキュアプログラムから取得したプログラム鍵を用いて、当該第２セキュアプログラムの暗号化部分を復号し、前記プログラム鍵を消去し、
前記暗号デジタルコンテンツ再生装置は、さらに、
前記プログラム実行手段により前記呼出命令が実行される前に、前記プログラム実行手段が割込み処理を行うことを禁止し、前記プログラム実行手段により前記プログラム鍵が消去されたのち、前記プログラム実行手段が割込み処理を行うことを許可する保護手段を備える
ことを特徴とする請求項５に記載の暗号デジタルコンテンツ再生装置。
【請求項７】
前記暗号デジタルコンテンツ再生装置は、更に、
割込みの発生を検出する割込検出手段を備え、
前記保護手段は、前記プログラム実行手段が前記第２セキュアプログラムに従い動作しているときにデータを書き込む記憶領域を備え、
前記プログラム実行手段が前記第２セキュアプログラムに従い動作しているときに前記割込検出手段が割込みを検出すると前記記憶領域に書き込んだデータを暗号化し、前記プログラム実行手段による割り込み処理が終了すると、前記プログラム実行手段が、前記第２セキュアプログラムの実行に戻る前に、暗号化した前記データを復号する
ことを特徴とする請求項６に記載の暗号デジタルコンテンツ再生装置。
【請求項８】
前記第１セキュアプログラムは、前記第２セキュアプログラムの実行に必要な情報である実行用情報を前記第２セキュアプログラムへ送る
ことを特徴とする請求項１に記載の暗号デジタルコンテンツ再生装置。
【請求項９】
前記第２セキュアプログラムの少なくとも一部は暗号化されており、前記第１セキュアプログラムが保持する前記実行用情報は、前記第２セキュアプログラムの暗号部分の復号に用いられるプログラム鍵であり、前記プログラム実行手段は、前記第１セキュアプログラムを実行することにより、前記プログラム鍵を前記第２セキュアプログラムへ送り、前記第２セキュアプログラムを実行することにより、前記第１セキュアプログラムから取得したプログラム鍵を用いて、当該第２セキュアプログラムの暗号化部分を復号して実行する
ことを特徴とする請求項８に記載の暗号デジタルコンテンツ再生装置。
【請求項１０】
暗号デジタルコンテンツ再生装置で用いられるセキュアプログラムであって、
前記暗号デジタルコンテンツ再生装置は、
前記第１のセキュリティレベルにおける動作状態を示す第１モードと、前記第２のセキュリティレベルにおける動作状態を示す第２モードとを切替えながら、前記第１モードにおいて前記第１セキュアプログラムを実行し、前記第２モードにおいて前記第２セキュアプログラムを実行するプログラム実行手段と、
前記第１セキュアプログラムを実行する場合に、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、
前記セキュアプログラムは、第１のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第１セキュアプログラムと、前記第１のセキュリティレベルより低い第２のセキュリティレベルで実行される第２セキュアプログラムとを含み、
前記第１セキュアプログラムと前記第２セキュアプログラムとは、連携しながら１つのアプリケーションとして動作し、
前記セキュアプログラムは、
前記第１セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、
前記外部装置から前記プログラム実行手段が切り離された後に、前記第１セキュアプログラムにより、前記第２セキュアプログラムに対する改竄の有無を確認するステップと、
前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第２セキュアプログラムの一部を実行するステップとを含む
ことを特徴とするセキュアプログラム。
【請求項１１】
暗号デジタルコンテンツ再生装置で用いられるセキュアプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記暗号デジタルコンテンツ再生装置は、
前記第１のセキュリティレベルにおける動作状態を示す第１モードと、前記第２のセキュリティレベルにおける動作状態を示す第２モードとを切替えながら、前記第１モードにおいて前記第１セキュアプログラムを実行し、前記第２モードにおいて前記第２セキュアプログラムを実行するプログラム実行手段と、
前記第１セキュアプログラムによる指示に従い、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、
前記セキュアプログラムは、
第１のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第１セキュアプログラムと、前記第１のセキュリティレベルより低い第２のセキュリティレベルで実行される第２セキュアプログラムとを含み、
前記第１セキュアプログラムと前記第２セキュアプログラムとは、連携しながら１つのアプリケーションとして動作し、
前記セキュアプログラムは、
前記第１セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、
前記外部装置から前記プログラム実行手段が切り離された後に、前記第１セキュアプログラムにより、前記第２セキュアプログラムに対する改竄の有無を確認するステップと、
前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第２セキュアプログラムの一部を実行するステップとを含む
ことを特徴とする記録媒体。
【請求項１２】
第１のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第１セキュアプログラムと、前記第１のセキュリティレベルより低い第２のセキュリティレベルで実行される第２セキュアプログラムとを実行する暗号デジタルコンテンツ再生装置で用いられるプログラム実行方法であって、
前記暗号デジタルコンテンツ再生装置は、
前記第１のセキュリティレベルにおける動作状態を示す第１モードと、前記第２のセキュリティレベルにおける動作状態を示す第２モードとを切替えながら、前記第１モードにおいて前記第１セキュアプログラムを実行し、前記第２モードにおいて前記第２セキュアプログラムを実行するプログラム実行手段と、
前記第１セキュアプログラムによる指示に従い、外部装置から前記プログラム実行手段を切り離す外部接続無効化手段とを備えており、
前記セキュアプログラムは、
第１のセキュリティレベルで実行され他のプログラムに対する改竄の有無を確認する第１セキュアプログラムと、前記第１のセキュリティレベルより低い第２のセキュリティレベルで実行される第２セキュアプログラムとを含み、
前記第１セキュアプログラムと前記第２セキュアプログラムとは、連携しながら１つのアプリケーションとして動作し、
前記プログラム実行方法は、
前記第１セキュアプログラムにより、前記外部接続無効化手段に対し、外部装置から前記プログラム実行手段を切り離すよう指示するステップと、
前記外部装置から前記プログラム実行手段が切り離された後に、前記第１セキュアプログラムにより、前記第２セキュアプログラムに対する改竄の有無を確認するステップと、
前記改竄の有無の確認の結果、改竄が無いと確認された場合のみ前記第２セキュアプログラムの一部を実行するステップとを含む
ことを特徴とするプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改竄や解析を防止する技術に関する。
【背景技術】
【０００２】
近年、PCやインターネットの普及に伴い、デジタルコンテンツを容易にコピーや編集することが可能となっている。このようなソフトウェアに対する不正な解析や改竄を防止するために、耐タンパー技術が必要不可欠となっている。
耐タンパー技術については以前から研究されており、非特許文献１には、ソフトウェアの解析を防ぐための基本原則や具体的手法に関して記述されている。また、非特許文献２にはソフトウェアの解析防止について、技術的課題と対策について記述されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「逆解析や改変からソフトを守る」日経エレクトロニクス１９９８．１．５（２０９〜２２０ページ）
【非特許文献２】「ソフトウェアの耐タンパー化技術」富士ゼロックス  テクニカルレポート  Ｎｏ．１３（２０〜２８ページ）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、悪意のある利用者からプログラムを保護するためには、多様な保護技術の提供が要望されている。
【課題を解決するための手段】
【０００５】
そこで本発明はかかる問題点に鑑みてなされたものであり、不正な改竄、解析を防止し、セキュアにプログラムを実行するプログラム実行装置を提供することを目的とする。
上記目的を達成するために本発明は、プログラム実行装置であって、第１及び第２コンピュータプログラムに従って動作する，また、外部装置からの指示に従って前記動作を制御する処理手段と、前記処理手段が前記第１コンピュータプログラムに従って動作する場合に、前記外部装置から前記処理手段を切り離す第１保護手段と、前記処理手段が前記第２コンピュータプログラムに従って動作する場合に、前記第１コンピュータプログラムを保護する第２保護手段とを備えることを特徴とするプログラム実行装置である。
【０００６】
これによって、外部からのハードウェアによる攻撃と、ソフトウェアによる攻撃との両方からプログラムを保護することが出来る。
【発明の効果】
【０００７】
本発明は、上記構成のプログラム実行装置である。
この構成によると、外部からのハードウェアによる攻撃と、ソフトウェアによる攻撃との両方からプログラムを保護することが出来る。また、外部装置から切り離すので、高いセキュリティを保つことが出来る。
ここで、前記第２保護手段は、前記処理手段が前記第１コンピュータプログラムに従って動作している場合に、前記処理手段がデータを書き込む記憶領域を含み、前記処理手段が、前記第１コンピュータプログラムから第２コンピュータプログラムに切り替える直前に、前記記憶領域に書き込まれているデータを暗号化し、前記第２コンピュータプログラムから第１コンピュータプログラムに切り替えると、前記暗号化したデータを復号するとしても良い。
【０００８】
また、前記第１コンピュータプログラムは、更に、前記第２コンピュータプログラムを呼び出す呼出命令を含み、前記第２保護手段は、前記処理手段が前記呼出命令を実行して前記第２コンピュータプログラムに切り替える直前に、前記記憶領域に書き込まれているデータを暗号化するとしても良い。
この構成によると、第１コンピュータプログラムの実行中に、他のプログラムへ制御が移る場合に、記憶領域に書き込まれているデータを暗号化するので、第１コンピュータプログラムで扱うデータを他のプログラムから保護することが出来、第１コンピュータプログラムの解析を防止することが出来る。また、領域内のデータを暗号化するので、少ないメモリ使用量で処理を実行可能となる。これにより、携帯電話機やPDAなど、CPUの処理速度やメモリ容量などのリソースが限られている機器においても、高いセキュリティを保つことが出来る。
【０００９】
ここで、前記プログラム実行装置は、更に、割り込みの発生を検出する割込検出手段を備え、前記第２コンピュータプログラムは、割り込みが発生した場合に行う処理を示し、前記第２保護手段は、前記処理手段が前記第１コンピュータプログラム実行中に前記割込検出手段が割り込みを検出すると、前記記憶領域に書き込まれているデータを暗号化し、暗号化後に、前記処理手段が前記第2コンピュータプログラムに従って動作することを許可するとしても良い。
【００１０】
この構成によると、割り込みが発生した場合に、割り込み処理である第２コンピュータの実行前に、第１コンピュータプログラムで扱うデータを暗号化するので、割り込み処理を用いたソフトウェアによる解析から第１コンピュータプログラムを保護することが出来る。
ここで、前記プログラム実行装置は、更に、割り込みの発生を検出する割込検出手段を備え、前記第１コンピュータプログラムを暗号化して生成される暗号化プログラムを記憶する記憶手段を備え、前記第２コンピュータプログラムは、割り込みが発生した場合に行う処理を示し、前記第２保護手段は、前記処理手段が前記第２コンピュータプログラムに従って動作することを禁止し、プログラム復号鍵を取得し、取得したプログラム復号鍵を用いて前記暗号化プログラムを復号して前記第１コンピュータプログラムを生成し、前記プログラム復号鍵を消去し、前記プログラム復号鍵を消去した後に、前記処理手段が前記第２コンピュータプログラムに従って動作することを許可するとしても良い。
【００１１】
この構成によると、暗号化プログラムを復号するプログラム鍵を保持している間は、割り込みを受け付けないので、割り込みを利用した解析からプログラム復号鍵を保護することが出来るので、第１コンピュータプログラムを不正な解析から防ぐこと出来る。
ここで、前記第２保護手段は、前記第１コンピュータプログラムを含む処理プログラムが生成されたときに少なくとも一部に基づいて生成される第１改竄検出値を取得し、前記処理手段が前記第１コンピュータプログラムを実行する前に、前記処理プログラムの少なくとも一部に基づいて第２改竄検出値を生成し、前記第１改竄検出値と前記第２改竄検出値とが異なる場合、前記処理手段が前記第１コンピュータプログラムに従って動作することを抑制するとしても良い。
【００１２】
この構成によると、第２保護手段は、保護プログラムの改竄が検出された場合に、前記処理手段が第１コンピュータプログラムを実行することを禁止するので、仮に第１コンピュータプログラムが改竄されたとしても、改竄された第１コンピュータプログラムを実行することは無く、被害を少なくすることが出来る。
ここで、前記処理プログラムは、前記第1改竄検出値を含み、前記第２保護手段は、前記処理プログラムから、前記第１改竄検出値を取得するとしても良い。
【００１３】
この構成によると、処理プログラムの少なくとも一部に基づいて生成される改竄検出値を、処理プログラムが保持しているので、処理プログラムが改竄された場合など、処理プログラムに変更が必要になった場合に、プログラム実行装置の他の処理手段に変更を加えることなく、処理プログラムのみを変更することが出来る。
【図面の簡単な説明】
【００１４】
【図１】セキュア処理システム１の全体の構成を示す図である。
【図２】認証局装置１００の構成を示すブロック図である。
【図３】コンパイラの処理内容を示すフローチャートである。
【図４】メモリカード４００の構成を示すブロック図である。
【図５】携帯端末３００の構成を示すブロック図である。
【図６】メモリ３０５に記録されているプログラムを示す図である。
【図７】第２セキュア処理プログラムのデータ構成を示す図である。
【図８】呼出プログラムのデータ構成を示す図である。
【図９】割込ハンドラの処理内容を示すフローチャートである。
【図１０】第１セキュア処理プログラム５０１のデータ構成を示す図である。
【図１１】ベクタテーブルの構成を示す図である。
【図１２】CPU３０１の動作を示す図である。
【図１３】音楽データ再生処理を示すフローチャートである。図１４に続く。
【図１４】音楽データ再生処理を示すフローチャートである。図１５に続く。
【図１５】音楽データ再生処理を示すフローチャートである。図１６に続く。
【図１６】音楽データ再生処理を示すフローチャートである。図１７に続く。
【図１７】音楽データ再生処理を示すフローチャートである。
【図１８】認証処理を示すフローチャートである。
【図１９】割り込み発生時のCPU３０１の動作を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
１．セキュア処理システム１の構成
セキュア処理システム１は、図１に示すように、認証局装置１００、ＲＯＭライター２００、携帯端末３００及びメモリカード４００から構成される。
セキュア処理システム１は、携帯端末３００によって実行されるプログラムを不正な解析や改竄から保護するシステムである。保護対象のプログラムは、認証局装置１００において生成され、ROMライター２００によってROMに書き込まれる。プログラムが書き込まれたROMは携帯端末３００に組み込まれる。
【００１６】
ここで、保護対象のプログラムは、メモリカード４００に記録されている暗号化された音楽データを復号する暗号化音楽データ復号プログラムである場合を例として説明する。
１．１  認証局装置１００
認証局装置１００は、領域確保プログラム、割込禁止プログラム、呼出プログラム、鍵受信プログラム、実行フラグ、割込ハンドラ、復号プログラム及びセキュアプログラムから成る第２セキュア処理プログラムを生成する装置である。セキュアプログラムは保護対象となる暗号化音楽データ復号プログラムを含む。
【００１７】
生成した第2セキュア処理プログラムは、ROMライター２００でROMに記録され、携帯端末３００に組み込まれる。
各プログラムについては後述する。
認証局装置１００は、図２に示すように、コンパイラ１０１、プログラム暗号化部１０２、鍵暗号化部１０３、ハッシュ値算出部１０４、データ埋込部１０５、記憶部１０６及び送信部１０７から構成される。
【００１８】
認証局装置１００は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボードなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、認証局装置１００は、その機能を達成する。
（１）コンパイラ１０１
コンパイラ１０１は、領域確保プログラム、割込禁止プログラム、鍵受信プログラム、実行フラグ及び割込ハンドラから成る保護プログラム、呼出プログラム、復号プログラム及びセキュアプログラムのソースコードを入力として受け付ける。呼出プログラムは、第２セキュア処理プログラムを実行する際に、改竄されているか否かを検出する際に利用するデータを送信するプログラムであり、TRS領域先頭アドレスを含む。TRS領域プログラムは、第２セキュア処理プログラムの復号プログラム５１６及び暗号化プログラム５１７の部分に相当する。TRS領域先頭アドレスは、携帯端末３００に組み込まれた後のメモリ上での先頭アドレスである。
【００１９】
コンパイラ１０１は、呼出プログラム、復号プログラム、セキュアプログラム及び保護プログラムのソースコードを受け付けると、図３に示すように、各プログラムをコンパイルする。まず、字句解析を行い（ステップＳ６２１）、構文解析を行い（ステップＳ６２２）、実行形式のプログラムであるバイナリデータを生成する（ステップＳ６２３）。
コンパイラ１０１は、生成した呼出プログラムバイナリデータ及び保護プログラムバイナリデータをデータ埋込部１０５へ出力する。また、復号プログラムバイナリデータ及びセキュアプログラムバイナリデータをプログラム暗号化部１０２へ出力する。
（２）プログラム暗号化部１０２
プログラム暗号化部１０２は、復号プログラムバイナリデータ及びセキュアプログラムバイナリデータを受け取る。また、プログラム鍵の入力を受け付ける。プログラム暗号化部１０２は、プログラム鍵を用いて、セキュアプログラムに暗号化アルゴリズムE1を施して暗号化プログラムを生成する。暗号化アルゴリズムE1は、一例としてAES（Advanced Encryption Standard）である。AESについては公知であるので、説明を省略する。なお、他の暗号化アルゴリズムを用いても良いのは勿論である。
【００２０】
プログラム暗号化部１０２は、復号プログラムと暗号化プログラムとを、TRS領域プログラムとしてデータ埋込部１０５へ出力する。
また、生成したTRS領域プログラムをハッシュ値算出部１０４へ出力する。
（３）鍵暗号化部１０３
鍵暗号化部１０３は、プログラム鍵とマスタ鍵との入力を受け付ける。
【００２１】
鍵暗号化部１０３は、マスタ鍵を用いてプログラム鍵に暗号化アルゴリズムE1を施して暗号化し、暗号化鍵を生成する。生成した暗号化鍵をデータ埋込部１０５へ出力する。
（４）ハッシュ値算出部１０４
ハッシュ値算出部１０４は、第２セキュア処理プログラムの少なくとも一部に対してハッシュ値を算出する。
【００２２】
ここでは、TRS領域プログラムと、秘密鍵とを入力として受け付け、秘密鍵を用いてTRS領域プログラムに対するハッシュ値を算出する。
ハッシュ値の算出には一例として、HMAC（Keyed-Hashing for Message Authentication）で用いられるアルゴリズムを使用するものとする。
ここで、Hをハッシュ関数、Kを秘密鍵とし、textをハッシュ対象となるデータ、opadは、バイト値Ox36を６４回繰り返した文字列、ipadは、バイト値Ox５Cを６４回繰り返した文字列とすると、ハッシュ値算出のアルゴリズムは、H（K XOR opad ,H(K XOR ipad, text)）のように表される。
【００２３】
また、ハッシュ値算出部１０４は、TRS領域プログラムのバイナリサイズを導出する。
ハッシュ値算出部１０４は、生成したハッシュ値と、ハッシュ値算出の対象となったTRS領域プログラムのバイナリサイズとをデータ埋込部１０５へ出力する。
（５）データ埋込部１０５
データ埋込部１０５は、コンパイラ１０１から呼出プログラムバイナリデータと保護プログラムバイナリデータとを受け取り、ハッシュ値算出部１０４からハッシュ値及びバイナリサイズを受け取る。また、鍵暗号化部１０３から暗号化鍵を受け取り、プログラム暗号化部１０２からTRS領域プログラムを受け取る。
【００２４】
データ埋込部１０５は、ハッシュ値算出部１０４から受け取ったハッシュ値を改竄検出値として呼出プログラムに埋め込む。また、バイナリサイズ及び暗号化鍵を呼出プログラムに埋め込む。また、データを埋め込んだ呼出プログラムを保護プログラムに含め、保護プログラムと、プログラム暗号化部１０２から受け取るTRS領域プログラムとを合わせて第２セキュア処理プログラムを生成し、記憶部１０６へ書き込む。
（６）記憶部１０６
記憶部１０６は、データ埋込部１０５によって書き込まれる第２セキュア処理プログラムを記憶する。
（７）送信部１０７
送信部１０７は、記憶部１０６に記憶している第２セキュア処理プログラムをROMライターへ出力する。
１．２  ROMライター２００
ＲＯＭライターは、認証局装置１００に接続されており、認証局装置１００から受け取る第２セキュア処理プログラムをROMに書き込む。ROMライター２００によってプログラムが書き込まれたROMは、携帯端末３００へ組み込まれる。
１．３  メモリカード４００
メモリカード４００は、図４に示すように、制御部４０１、入出力部４０２、認証部４０３及び情報記憶部４０４から構成される。
（１）入出力部４０２
入出力部４０２は、メモリカード４００が他の機器に接続された場合に、他の機器と制御部４０１との間でデータの入出力を行う。
（２）情報記憶部４０４
また、情報記憶部４０４は、データ領域４１０とセキュア領域４２０とを含む。
【００２５】
データ領域４１０は、暗号化音楽データ４１１を記憶している。暗号化音楽データ４１１は、MP３形式の音楽データに、タイトル鍵４２１を用いて暗号化アルゴリズムE1を施して生成される。
セキュア領域４２０は、タイトル鍵４２１を記憶しており、認証部４０３との相互認証に成功した機器のみが読み出すことが出来る。
【００２６】
なお、情報記憶部４０４にデータを記録する際には、メモリカード４００に固有の情報に基づいて暗号化して記録するなどとしても良い。
（３）認証部４０３
認証部４０３は、携帯端末３００とCPRM（Content Protection for Recordable Media）の仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を制御部４０１へ出力する。なお、CPRMについては、公知であるので説明を省略する。また、他の認証方法に従って認証するとしても良い。
（４）制御部４０１
制御部４０１は、入出力部４０２を介して他の機器と情報の入出力を行う。セキュア領域４２０に記憶されているデータは、認証部４０３による認証に成功した機器にのみアクセスを許可する。なお、セキュア領域４２０に記憶されているデータを出力する場合には、認証部４０３による認証で生成した共有鍵を用いて暗号化して出力する。
【００２７】
データ領域４１０に記憶されているデータは、認証を行わずに、他の機器からのアクセスを許可する。
１．４  携帯端末３００
携帯端末３００は、図５に示すように、CPU３０１、デバッガインターフェース３０２、デバッガ無効化回路３０３、割り込みコントローラ３０４、メモリ３０５、メモリカードインターフェース３０６、入力部３０７、表示部３０８、スピーカ３０９、デコーダ３１０、マイク３１２、変換部３１３、無線制御部３１４、無線部３１５及びアンテナ３１６から構成され、これらがバス３１７によって接続されており、割込コントローラ３０４からCPU３０１へは割込線３１８が接続されている。
【００２８】
以下、各構成について説明する。
（１）デバッガ無効化回路３０３、デバッガインターフェース３０２
デバッガ無効化回路３０３は、CPU３０１とデバッガインターフェース３０２との間に設けられ、CPU３０１とデバッガインターフェース３０２とを接続又は切断することができる。
【００２９】
デバッガ無効化回路３０３は、CPU３０１から「有効」を示すデバッガ制御信号を受け取ると、CPU３０１とデバッガインターフェース３０２とを接続し、CPU３０１から「無効」を示すデバッガ制御信号を受け取ると、CPU３０１とデバッガインターフェース３０２とを切断する。
CPU３０１とデバッガインターフェース３０２とが接続されているときは、デバッガインターフェース３０２の外部に接続されるデバッガが有効であり、CPU３０１とデバッガインターフェース３０２とが切断されているときは、デバッガインターフェース３０２の外部に接続されるデバッガが無効である。具体例として、デバッガ無効化回路３０３は、スイッチにより実現される。なお、スイッチ回路のように物理的に接続を切るとしても良いし、電気的に切断するとしても良い。
【００３０】
デバッガインターフェース３０２は、携帯端末３００と外部のデバッガとを接続するためのインターフェースである。
（２）メモリ３０５
メモリ３０５は、図６に示す、第１セキュア処理プログラム５０１、第２セキュア処理プログラム５０２、ベクタテーブル５０３、音楽再生プログラム５０４及びアプリケーション５０５を記憶している。
【００３１】
（A）第２セキュア処理プログラム５０２
第２セキュア処理プログラム５０２は、前述の認証局装置１００によって生成されROMに記録されたプログラムであり、図７に示す各プログラムによって構成される。
以下、各プログラムについて説明する。
（領域確保プログラム５１１）
領域確保プログラム５１１は、認証通信プログラム５２３及び暗号化音楽データ復号プログラム５２４の実行中に使用する動的メモリを確保するためのメモリ領域を確保する。
【００３２】
（割込禁止プログラム５１２）
割込禁止プログラム５１２は、割り込みをマスクすることにより、割り込みの処理を禁止する。
（呼出プログラム５１３）
呼出プログラム５１３は、第１セキュア処理プログラム５０１を呼び出して起動する。
【００３３】
呼出プログラム５１３は、図８に示す改竄検出値５４１、TRS領域先頭アドレス５４２、バイナリサイズ５４３及び暗号化鍵５４４から成る改竄検出データを含む。第１セキュア処理プログラム５０１を呼び出すと共に改竄検出データを送信する。改竄検出データは、認証局装置１００のデータ埋込部１０５にて埋め込まれたデータである。
改竄検出値５４１は、認証局装置１００によって、第２セキュア処理プログラム５０２のTRS領域の範囲に対して算出されたハッシュ値である。
【００３４】
TRS領域先頭アドレス５４２は、ハッシュ値算出の対象となるデータの、メモリ３０５における先頭アドレスを示す。
バイナリサイズ５４３は、ハッシュ値算出の対象となるデータのバイナリサイズを示す。
暗号化鍵５４４は、認証局装置１００の鍵暗号化部１０３によって、マスタ鍵を用いてプログラム鍵を暗号化して生成されたものである。
【００３５】
（鍵受信プログラム５１４）
鍵受信プログラム５１４は、第１セキュア処理プログラム５０１から送信されるプログラム鍵を受信し、復号プログラム５１６へ送信する。
（実行フラグ５１５）
実行フラグ５１５は、セキュアプログラムが実行中であるか否かを示す。復号プログラム５１６が暗号化プログラム５１７を復号する前に、セキュアプログラムを実行中であることを示す「ON」の状態にし、セキュアプログラムの実行が終了するときに「OFF」の状態にする。
【００３６】
（復号プログラム５１６）
復号プログラム５１６は、鍵受信プログラム５１４からプログラム鍵を受け取り、プログラム鍵を用いて暗号化プログラム５１７に復号アルゴリズムD1を施して復号し、セキュアプログラムを生成する。
ここで、暗号化プログラムの復号には、WO04/013744 (2004.02.12)で公開されている技術を用いる。この技術は、暗号化プログラムを少しずつメモリにロードして実行していく。そのため、復号後のプログラム全体がメモリ上に存在するわけではないので、外部からメモリ内のデータを不正に読み込まれてもプログラムを解析されない。
【００３７】
（暗号化プログラム５１７）
暗号化プログラム５１７は、セキュアプログラムが暗号化されて生成されたものである。セキュアプログラムは、図７に示す割込禁止解除プログラム５２１、領域初期化プログラム５２２、認証通信プログラム５２３、暗号化音楽データ復号プログラム５２４、領域鍵５２５、領域暗号化プログラム５２６、領域復号プログラム５２７及び領域終了処理プログラム５２８から構成される。割込禁止解除プログラム５２１、領域初期化プログラム５２２、認証通信プログラム５２３、領域鍵５２５、領域暗号化プログラム５２６、領域復号プログラム５２７及び領域終了処理プログラム５２８は、暗号化音楽データ復号プログラム５２４を他のプログラムから保護する。
【００３８】
（ａ）割込禁止解除プログラム５２１
割込禁止解除プログラム５２１は、上記割込禁止プログラム５１２で行った割込禁止を解除する。
（ｂ）領域初期化プログラム５２２
領域初期化プログラム５２２は、上記領域確保プログラム５１１によって確保されたメモリ領域を初期化し、暗号化対象となる記憶領域を確保する。
【００３９】
記憶領域は、認証通信プログラム５２３及び暗号化音楽データ復号プログラム５２４によって利用される記憶領域であり、実行中に使用するデータが書き込まれる。
（ｂ）認証通信プログラム５２３
認証通信プログラム５２３は、認証鍵５３１を保持する。
認証通信プログラム５２３は、第１セキュア処理プログラム５０１が正当なプログラムであるか否かの片方向認証を行う。
【００４０】
（ｃ）暗号化音楽データ復号プログラム５２４
暗号化音楽データ復号プログラム５２４は、メモリカード４００に記録されている暗号化音楽データ４１１に対して、タイトル鍵を用い、復号アルゴリズムＤ１を施して復号し、音楽データを生成する。なお、復号アルゴリズムＤ１は、暗号化アルゴリズムＥ１の逆の処理を行うアルゴリズムである。
【００４１】
（ｄ）領域鍵５２５
領域鍵５２５は、下記領域暗号化プログラム５２６において、記憶領域内のデータを暗号化する際、及び、暗号化されたデータを領域復号プログラム５２７において復号する際に用いられる。
（ｅ）領域暗号化プログラム５２６
領域暗号化プログラム５２６は、領域鍵５２５を用いて、上記記憶領域内のデータに暗号化アルゴリズムＥ２を施して暗号化する。なお、暗号化アルゴリズムＥ２は、暗号化アルゴリズムＥ１よりも高速に処理を行うことが出来るアルゴリズムであり、一例としてXOR演算である。なお、暗号化アルゴリズムE2は、XOR演算に限定されず、他の暗号化アルゴリズムを用いても良く、要求されるセキュリティ強度やCPUの処理能力によって決定される。
【００４２】
領域暗号化プログラム５２６は、第２セキュア処理プログラム５０２から、第１セキュア処理プログラム５０１を呼び出す場合、第１セキュア処理プログラム５０１に制御が移る前に記憶領域内のデータを暗号化する。
（ｆ）領域復号プログラム５２７
領域復号プログラム５２７は、第１セキュア処理プログラム５０１から第２セキュア処理プログラム５０２に制御が戻ると、記憶領域内の暗号化されているデータに復号アルゴリズムD2を施して復号し、平文のデータに戻す。
【００４３】
（ｇ）領域終了処理プログラム５２８
領域終了処理プログラム５２８は、領域初期化プログラム５２２で確保した記憶領域を開放し、第１セキュア処理プログラム５０１の終了関数を呼び出し、音楽データ再生処理を終了する。
（割込ハンドラ５１８）
割込ハンドラ５１８は、第2セキュア処理プログラム５０２の実行中に割り込みが発生した場合に実行される。割込ハンドラ５１８は、図示していない暗号復号鍵を保持する。
【００４４】
図９に割込ハンドラ５１８の処理を示す。なお、割込ハンドラ５１８は、実際にはコンピュータプログラムであるが、図９では簡単のため、フローチャートを用いて説明する。
実行フラグ５１５を読み込む（ステップＳ６１１）。次に、読み込んだ実行フラグ５１５が「ON」を示すか「OFF」を示すかを判断し（ステップＳ６１２）、「ON」を示す場合（ステップＳ６１２でON）、暗号復号鍵を用い  、記憶領域内のデータに暗号化アルゴリズムE2を施して暗号化する（ステップＳ６１３）。その後、割り込み処理へ移る。また、読み込んだ実行フラグが「OFF」を示す場合（ステップＳ６１２でOFF）、記憶領域内のデータの暗号化は行わずに、割り込み処理へ移る。
【００４５】
割り込み処理が終了すると、実行フラグが「ON」を示す場合（ステップＳ６１４でON）、暗号復号鍵を用い、記憶領域内のデータに復号アルゴリズムD2を施して復号し（ステップＳ６１５）、元の処理に戻る。実行フラグが「OFF」を示す場合（ステップＳ６１４でOFF）、復号処理は行わずに元の処理へ戻る。
（B）第１セキュア処理プログラム５０１
第１セキュア処理プログラム５０１は、図１０に示すように、回路切断プログラム５５１、改竄検出プログラム５５２、鍵復号プログラム５５３、鍵送信プログラム５５４及び認証通信プログラム５５５、データ読出プログラム５５６及び回路接続プログラム５５７から構成され、CPU３０１のセキュア処理モードにて実行される。セキュア処理モードについては後述する。
【００４６】
（回路切断プログラム５５１）
第１セキュア処理プログラム５０１が起動されると、回路切断プログラム５５１は、デバッガ無効化回路３０３へ「無効」を示すデバッガ制御信号を出力する。
（改竄検出プログラム５５２）
改竄検出プログラム５５２は、秘密鍵５６２を含み、第２セキュア処理プログラム５０２の改竄検出を行う。改竄検出プログラム５５２は、第2セキュア処理プログラム５０２から改竄検出データを取得する。
【００４７】
改竄検出プログラム５５２は、メモリ３０５の、取得したTRS領域先頭アドレスが示す位置から、バイナリサイズが示すサイズのデータを、ハッシュ値算出の対象となるTRS領域プログラムであるとして読み出す。読み出したTRS領域プログラムに、秘密鍵５６２を用いてハッシュ関数を施してハッシュ値を算出する。算出したハッシュ値と、取得した改竄検出値とを比較し、同一の場合、改竄されていないと判断する。同一でない場合、改竄されていると判断し、以降の処理を禁止する。
【００４８】
（鍵復号プログラム５５３）
鍵復号プログラム５５３は、マスタ鍵５６３を含む。鍵復号プログラム５５３は、改竄検出プログラム５５２によって、第２セキュア処理プログラム５０２の改竄が検出されなかった場合、マスタ鍵５６３を用いて暗号化鍵５４４に復号アルゴリズムD1を施して復号し、プログラム鍵を生成する。生成したプログラム鍵を、鍵送信プログラム５５４へ送信する。
【００４９】
（鍵送信プログラム５５４）
鍵送信プログラム５５４は、鍵復号プログラム５５３からプログラム鍵を受信し、第２セキュア処理プログラム５０２へ送信する。
（認証通信プログラム５５５）
認証通信プログラム５５５は、認証鍵５６５を含み、認証鍵５６５を用いて第２セキュア処理プログラム５０２と認証を行う。また、認証に成功した場合、セッション鍵を共有する。以降、第２セキュア処理プログラム５０２とデータの送受信を行う場合には、セッション鍵を用いて暗号通信を行う。
【００５０】
（データ読出プログラム５５６）
データ読出プログラム５５６は、メモリカード４００との間でCPRMの方法に従って相互認証を行い、認証に成功した場合に、メモリカード４００のセキュア領域４２０にアクセスしてタイトル鍵４２１を取得する。  
（回路接続プログラム５５７）
回路接続プログラム５５７は、デバッガ無効化回路３０３へ「有効」を示すデバッガ制御信号を出力する。
【００５１】
（C）ベクタテーブル５０３
ベクタテーブル５０３は、図１１に示すように、ソフトウェア割り込み、例外、ハードウェア割り込み発生時の処理先が記述されている。
（D）音楽再生プログラム５０４
音楽再生プログラム５０４は、第２セキュア処理プログラム５０２によって復号された音楽データを再生処理を行うプログラムであり、再生する音楽データをバッファ３１１に送る。
【００５２】
（E）アプリケーション５０５
アプリケーション５０５は、ユーザの操作による入力を受け付ける。また、入力に従い、第２セキュア処理プログラム５０２を起動する。
（３）CPU３０１
CPU３０１は、メモリ３０５に記憶しているプログラムに従って動作する。また、デバッガインターフェース３０２を介して接続されるデバッガの指示によって動作を制御する。CPU３０１は、図１２に示すように、メモリ３０５に記憶しているプログラムの命令をフェッチし（ステップＳ６０１）、読み出した命令を解釈し（ステップＳ６０２）、実行する（ステップＳ６０３）。また、プログラムカウンタのアドレスを進めて（ステップＳ６０４）、次の命令をフェッチし、処理を繰り返す。
【００５３】
ここで、CPU３０１は、セキュア処理モード及び通常処理モードの何れかのモードで処理を行う。通常処理モードは、CPU３０１が通常処理を行っている状態を示し、セキュア処理モードは、高いセキュリティを持ち、メモリ内のデータを外部から観察できないように、高いセキュリティを保ちながら処理を行うモードである。
CPU３０１は、セキュア処理モードで第１セキュア処理プログラム５０１を実行し、通常モードで第２セキュア処理プログラム５０２を実行する。
【００５４】
また、CPU３０１は、割り込みコントローラ３０４から割込線３１８を介して割り込み信号を受け付ける。CPU３０１は、第２セキュア処理プログラム５０２の割込禁止プログラム５１２を実行している場合には、割り込みを受け付けない。割込禁止が解除された場合に割り込み信号を受け付けると、図１１のベクタテーブルを参照し、受け付けた割り込み信号の処理に該当するアドレスを読み込む。読み込んだアドレスの割り込みハンドラに従って処理を行い、割り込み処理が終了すると、元の処理へ戻る。
【００５５】
第２セキュア処理プログラム５０２実行中に割り込み信号を受け付けると、CPU３０１は、ベクタテーブル５０３を参照し、図９に示す割込ハンドラ５１８を実行する。
（４）入力部３０７
入力部３０７は、ユーザによる外部からの入力を受け付ける。
入力部３０７は、外部からの入力を受け付けると、割込みコントローラ３０４へ割り込みの発生を通知する。
（５）割り込みコントローラ３０４
割り込みコントローラ３０４は、入力部３０７又は無線制御部３１４から、メール受信や着信、ユーザによる操作などの割り込みの発生を通知されると、割込線３１８により、CPU３０１へ割り込み信号を出力する。
（６）スピーカ３０９、デコーダ３１０
デコーダ３１０は、バッファ３１１を含み、バッファ３１１は、CPU３０１から受け取る音声データをバッファし、スピーカ３０９は、バッファ３１１に記憶されている音声データから音声信号を生成して出力する。
（７）メモリカードインターフェース３０６
メモリカードインターフェース３０６は、携帯端末３００とメモリカード４００とを接続するためのインターフェースであり、CPU３０１の制御の下、メモリカード４００へデータを出力し、メモリカード４００からデータを受け取ると、CPU３０１へ出力する。
（８）無線制御部３１４、無線部３１５、アンテナ３１６
アンテナ３１６、無線部３１５及び無線制御部３１４は、無線基地局及び携帯電話網を介して、接続された相手の装置との間で、音声又は情報の送受信を行う。
【００５６】
ここで、無線制御部３１４は、アンテナ３１６及び無線部３１５を介してメールを受信する場合、及び着信がある場合に、割込みコントローラ３０４へ割り込みを通知する。
（９）マイク３１２、変換部３１３
変換部３１３は、マイク３１２から受け取る音声を電気信号に変換し、無線制御部３１４へ出力する。
２．  セキュア処理システムの動作
２．１  認証局装置１００の動作
コンパイラ１０１は、呼出プログラムソースコード及び保護プログラムソースコードの入力を受け付けると、コンパイルして呼出プログラムバイナリデータ及び保護プログラムバイナリデータを生成し、生成したバイナリデータをデータ埋込部１０５へ出力する。また、復号プログラムソースコード及びセキュアプログラムソースコードの入力を受け付け、コンパイルして各プログラムのバイナリデータを生成し、生成したバイナリデータをプログラム暗号化部１０２へ出力する。
【００５７】
プログラム暗号化部１０２は、復号プログラム及びセキュアプログラムのバイナリデータを受け取り、プログラム鍵を受け取ると、プログラム鍵を用いてセキュアプログラムを暗号化し、暗号化プログラムを生成する。復号プログラム及び生成した暗号化プログラムをTRS領域プログラムとしてデータ埋込部１０５及びハッシュ値算出部１０４へ出力する。
【００５８】
ハッシュ値算出部１０４は、TRS領域プログラムを受け取り、秘密鍵を受け取ると、ハッシュ関数を施して、TRS領域プログラムに対するハッシュ値を算出する。また、TRS領域プログラムバイナリデータのサイズを導出する。ハッシュ値算出部１０４は、ハッシュ値及びバイナリサイズをデータ埋込部１０５へ出力する。
鍵暗号化部１０３は、プログラム鍵及びマスタ鍵の入力を受け付けると、マスタ鍵を用いてプログラム鍵を暗号化し、暗号化鍵を生成する。生成した暗号化鍵をデータ埋込部１０５へ出力する。
【００５９】
データ埋込部１０５は、呼出プログラムバイナリデータを受け取り、ハッシュ値、バイナリサイズ及び暗号化鍵を受け取ると、ハッシュ値を改竄検出値として呼出プログラムに埋め込み、更にバイナリサイズ及び暗号化鍵を呼出プログラムバイナリデータに埋め込む。また、コンパイラから保護プログラムバイナリデータを受け取り、プログラム暗号化部１０２からTRS領域プログラムを受け取ると、呼出プログラムを含めた保護プログラムと、TRS領域プログラムとを合わせて第２セキュア処理プログラムを生成し記憶部１０６に書き込む。
【００６０】
送信部１０７は、記憶部１０６から第２セキュア処理プログラムを読み出してROMライター２００へ出力する。
２．２  携帯端末３００における音楽データ再生処理の動作
（１）携帯端末３００がメモリカード４００に記録されている音楽データを再生する際の動作について、図１３〜図１７を参照して説明する。
【００６１】
ユーザの操作により携帯端末３００の入力部３０７から、メモリカード４００に記録されている音楽データを再生する旨の入力を受け付けると、アプリケーション５０５は、第２セキュア処理プログラム５０２を起動する（ステップＳ７０１）。
第２セキュア処理プログラム５０２は、領域確保プログラム５１１を実行することによって、TRS領域プログラムを実行中に動的にメモリ確保を行うための仮想メモリ空間の確保を行う（ステップＳ７０２）。また、割込禁止プログラム５１２を実行して割り込みを禁止し、割り込みを用いたプログラムの解析行為を無効とする（ステップＳ７０３）。以降、割込禁止を解除するまで割り込みをマスクする。次に、呼出プログラム５１３を実行し、改竄検出データを送信して第１セキュア処理プログラム５０１を呼び出す（ステップＳ７０４）。
【００６２】
第１セキュア処理プログラム５０１は、第2セキュア処理プログラム５０２から改竄検出データとして、改竄検出値、TRS領域先頭アドレス、バイナリサイズ及び暗号化鍵を受信する（ステップＳ７０５）。また、回路切断プログラム５５１を実行してデバッガ無効化回路３０３へ「無効」を示すデバッガ制御信号を出力する（ステップＳ７０６）。これにより、デバッガ無効化回路３０３はスイッチの接続を切り、デバッガによる解析を無効化する。
【００６３】
また、以下のように改竄検出プログラム５５２を実行する。
改竄検出プログラム５５２は、ステップＳ７０５で受信したTRS領域先頭アドレスが示す位置から、バイナリサイズが示す範囲のデータをハッシュ値算出の対象データとして読み出す。また、秘密鍵を用いて、取り出した対象データに対するハッシュ値を算出する（ステップＳ７０９）。
【００６４】
算出したハッシュ値と、ステップＳ７０８で受信した改竄検出値とを比較し、一致するか否かを判断する（ステップＳ７１０）。一致しない場合（ステップＳ７１０でNO）、改竄されているものとして、以降の処理を抑制する。また、回路接続プログラム５５７を実行して、デバッガ無効化回路３０３へ、「有効」を示すデバッガ制御信号を出力し（ステップＳ７３７）、処理を終了する。
【００６５】
ステップＳ７０９で算出したハッシュ値と改竄検出値とが一致する場合（ステップＳ７１０YES）、改竄されていないものとして、以降の処理を継続する。第１セキュア処理プログラム５０１は、鍵復号プログラム５５３を実行する。鍵復号プログラム５５３は、マスタ鍵５６３を用いて、ステップＳ７０８で受信した暗号化鍵を復号し、プログラム鍵を生成する（ステップＳ７１１）。生成したプログラム鍵を鍵送信プログラム５５４へ送信する。鍵送信プログラム５５４は、受信したプログラム鍵を、第２セキュア処理プログラム５０２へ送信する（ステップＳ７１２）。
【００６６】
第２セキュア処理プログラム５０２は、鍵受信プログラム５１４を実行することによって、プログラム鍵を受信する（ステップＳ７１３）。また、実行フラグを「ON」にする（ステップＳ７１４）。次に、復号プログラム５１６を実行する。復号プログラム５１６は、受信したプログラム鍵を用いて暗号化プログラム５１７を復号し、セキュアプログラムを生成する（ステップＳ７１５）。セキュアプログラムを生成すると、復号に用いたプログラム鍵を消去する（ステップＳ７１６）。
【００６７】
第２セキュア処理プログラム５０２は、セキュアプログラムの実行を開始する（ステップＳ７１７）。
まず、割込禁止解除プログラム５２１を実行する。割込禁止解除プログラム５２１は、ステップＳ７０３で行った割込禁止を解除する（ステップＳ７１８）。以降、割り込みが発生した場合は、セキュアプログラムを中断して割り込み処理を実行することになる。割り込みが発生した場合の処理については後述する。
【００６８】
次に、領域初期化プログラム５２２を実行して、メモリ空間に暗号化の対象となる記憶領域を確保する（ステップＳ７１９）。
第２セキュア処理プログラム５０２は、認証通信プログラム５２３を実行し、後述の処理を行って第１セキュア処理プログラム５０１を認証する（ステップＳ７２０）。また、第１セキュア処理プログラム５０１は、認証通信プログラム５５５を実行して認証を受ける。第２セキュア処理プログラム５０２は、認証に失敗した場合、以降の処理を抑制する。認証に失敗した場合、第１セキュア処理プログラム５０１は、デバッガ無効化回路３０３へ「有効」を示すデバッガ制御信号を出力して（ステップＳ７３７）処理を終了する。
【００６９】
認証に成功した場合、第２セキュア処理プログラム５０２及び第１セキュア処理プログラム５０１は、セッション鍵を共有する。以降、第２セキュア処理プログラム５０２及び第１セキュア処理プログラム５０１の間で通信を行う場合には、共有したセッション鍵を用いて暗号通信を行う。
第２セキュア処理プログラム５０２は、認証に成功した場合に、音楽再生プログラムへ制御を移す。
【００７０】
音楽再生プログラム５０４は、メモリカード４００から暗号化音楽データ４１１を読み出す（ステップＳ７２１）。また、音楽再生プログラム５０４は、暗号化音楽データ４１１の復号を第２セキュア処理プログラム５０２へ要求する（ステップＳ７２２）。
第２セキュア処理プログラム５０２は、暗号化音楽データ４１１の復号を要求されると、領域暗号化プログラム５２６を実行する。領域暗号化プログラム５２６は、ステップＳ７１９で確保した記憶領域内のデータを、領域鍵５２５を用いて暗号化する（ステップＳ７２３）。記憶領域が暗号化されると、第２セキュア処理プログラム５０２は、第１セキュア処理プログラム５０１に、タイトル鍵の取得を要求する（ステップＳ７２４）。
【００７１】
第１セキュア処理プログラム５０１は、データ読出プログラム５５６を実行する。データ読出プログラム５５６は、メモリカード４００の認証部４０３と相互認証を行い（ステップＳ７２５）、認証に成功した場合に（ステップＳ７２６でYES）、メモリカード４００の情報記憶部４０４にアクセスしてタイトル鍵を取得する。なお、認証に失敗した場合は、タイトル鍵を取得できず、第１セキュア処理プログラム５０１は、デバッガ無効化回路３０３へ「有効」を示すデバッガ制御信号を出力して（ステップＳ７３７）処理を終了する。
【００７２】
第１セキュア処理プログラム５０１は、メモリカード４００との相互認証に成功してタイトル鍵を取得すると（ステップＳ７２７）、ステップＳ７２０で共有したセッション鍵を用いてタイトル鍵を暗号化し、暗号化タイトル鍵を生成する（ステップＳ７２８）。生成した暗号化タイトル鍵を第２セキュア処理プログラム５０２へ送信する。
第２セキュア処理プログラム５０２は、領域復号プログラム５２７を実行する。領域復号プログラム５２７は、領域鍵５２５を用いて暗号化された記憶領域を復号し、元の状態に戻す（ステップＳ７２９）。また、認証通信プログラム５２３は、第１セキュア処理プログラム５０１から受信した暗号化タイトル鍵を、セッション鍵を用いて復号し、タイトル鍵を得る（ステップＳ７３０）。次に、第２セキュア処理プログラム５０２は、暗号化音楽データ復号プログラム５２４を実行する。暗号化音楽データ復号プログラム５２４は、タイトル鍵を用いて、音楽再生プログラムがメモリカード４００から読み出した暗号化音楽データ４１１を復号し（ステップＳ７３１）、音楽データを生成する。生成した音楽データは、音楽再生プログラムへ送信する。
【００７３】
音楽再生プログラムは、受信する音楽データを再生する（ステップＳ７３２）。
音楽データの再生が終了すると（ステップＳ７３３）、第２セキュア処理プログラム５０２に制御を移し、第２セキュア処理プログラム５０２は、領域終了処理プログラム５２８を実行する。領域終了処理プログラム５２８は、ステップＳ７１９で確保した記憶領域を開放し（ステップＳ７３４）、第１セキュア処理プログラム５０１の終了関数を呼び出す（ステップＳ７３５）。また、実行フラグを「OFF」にする（ステップＳ７３６）。
【００７４】
第１セキュア処理プログラム５０１は、回路接続プログラム５５７を実行し、デバッガ無効化回路３０３へ「有効」を示すデバッガ制御信号を出力し（ステップＳ７３７）、処理を終了する。
（２）認証
上述のステップＳ７２０で第２セキュア処理プログラム５０２が第１セキュア処理プログラム５０１を認証する際の処理について、図１８を参照して説明する。
【００７５】
第２セキュア処理プログラム５０２は、乱数R0を生成し、第１セキュア処理プログラム５０１へ送信する（ステップＳ７５１）。
第１セキュア処理プログラム５０１は、乱数R0を受信し、認証鍵５６５を用いて受信した乱数R0を暗号化し、認証値R1を生成する（ステップＳ７５２）。生成した認証値R1を第２セキュア処理プログラム５０２へ送信する（ステップＳ７５３）。
【００７６】
第２セキュア処理プログラム５０２は、第１セキュア処理プログラム５０１から認証値R1を受信する。また、認証鍵５３１を用いて生成した乱数R0を暗号化し、認証値R2を生成する（ステップＳ７５４）。第２セキュア処理プログラム５０２は、受信した認証値R1と、生成した認証値R2とを比較し（ステップＳ７５５）、一致しない場合（ステップＳ７５５でNO）、第１セキュア処理プログラム５０１へ「異なる」を示す判断結果を送信し、処理を終了する。また、ステップＳ７５５での比較結果が一致する場合（ステップＳ７５５でYES）、第１セキュア処理プログラム５０１へ「同じ」を示す判断結果を送信する。また、生成した乱数R0と認証鍵５３１とから、一方向性関数を用いてセッション鍵を生成する（ステップＳ７５９）。
【００７７】
第１セキュア処理プログラム５０１は、受信する判断結果が「異なる」を示す場合（ステップＳ７５８で異）、処理を終了する。また、受信する判断結果が「同じ」を示す場合（ステップＳ７５８で同）、乱数R0と認証鍵５６５とから、一方向性関数を用いてセッション鍵を生成する（ステップＳ７６０）。
このようにして、第２セキュア処理プログラム５０２は第１セキュア処理プログラム５０１を認証し、認証に成功した場合にはセッション鍵を共有する。以降、第２セキュア処理プログラム５０２と第１セキュア処理プログラム５０１との間でデータの送受信を行う場合は、このセッション鍵を用いて暗号化して通信する。
（３）割り込み
割り込みがあった場合のCPU３０１の動作について、図１９を参照して説明する。なお、ここではメールを受信した場合を一例として説明する。
【００７８】
CPU３０１は、割込みコントローラ３０４から割込信号を受け取ると（ステップＳ７７１）、ベクタテーブルを読み込む（ステップＳ７７２）。また、ベクタテーブルに従って、割り込みハンドラを実行する（ステップＳ７７３）。
まず、実行フラグを読み込み（ステップＳ７７４）、「ON」であるか「OFF」であるかを判断する（ステップＳ７７５）。「ON」の場合（ステップＳ７７５でON）、領域鍵５２５を用いて記憶領域内のデータを暗号化する（ステップＳ７７６）。また、コンテキストを退避し（ステップＳ７７７）、メール受信の処理を行う（ステップＳ７７８）。実行フラグが「OFF」である場合は（ステップＳ７７５でOFF）、記憶領域内の暗号化を行わずに、ステップＳ７７７、７７８の処理を行う。
【００７９】
メール受信処理が終了すると、実行フラグが「ON」の場合は（ステップＳ７７９でON）、記憶領域内のデータを復号し（ステップＳ７８０）、元の処理に戻る。実行フラグが「OFF」の場合は（ステップＳ７７９でOFF）、復号処理を行わずに元の処理へ戻る。
３．その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）本実施の形態では、携帯端末で実行される暗号化音楽データ復号プログラムを保護する場合を一例として説明したが、本発明がこれに限定されないのは勿論である。
【００８０】
保護対象となるプログラムを実行する装置は、DVDプレーヤ、DVDレコーダ、PC、PDAなどであっても良い。
また、保護対象となるプログラムは、携帯端末で映像コンテンツやゲームなどを実行する際に利用する復号プログラムであっても良いし、DVDレコーダでコンテンツを記録する際に利用する記録プログラムであっても良く、不正な解析、改竄を防止したいプログラムであれば良い。
（２）本実施の形態では、改竄検出値としてハッシュ値を用いるとしたが、改竄検出値は、TRS領域プログラムに対して一意に定まる値であれば良く、TRS領域プログラムに対するディジタル署名であっても良いし、TRS領域プログラムを暗号化して生成される暗号化データを改竄検出値として用いるとしても良い。また、ハッシュ値の算出は他のアルゴリズムを利用するとしても良い。
【００８１】
また、改竄検出値はTRS領域プログラムに対して生成されるとしたが、TRS領域プログラムの少なくとも一部に対して生成されるとしても良く、また、第２セキュア処理プログラムの少なくとも一部に対して生成されるとしても良い。
また、第２セキュア処理プログラム又はTRS領域プログラムの一部若しくは全部を対象としたマッチングや、擬似乱数の埋め込みによる改竄の検出などでも良く、実行するプログラムが生成時と同一であるか否かを検出可能な方法であれば、他の改竄検出方法を用いても良い。
【００８２】
また、本実施の形態では、改竄検出を、デバッガ無効化回路の切断後に行っているが、デバッガ無効化回路の切断前に改竄検出を行い、改竄が検出されなかった場合にデバッガ無効化回路を切断し、以降の処理を行うとしても良い。
（３）改竄検出データは、第2セキュア処理プログラムの呼出プログラムが第１セキュア処理プログラム５０１に送信するとしたが、第２セキュア処理プログラムとは別のプログラムが送信するとしても良い。この場合、呼出プログラムは、第１セキュア処理プログラム５０１の呼び出しのみを行い、改竄検出データの送信処理を行う送信プログラムがメモリ３０５に記憶されており、第１セキュア処理プログラム５０１は、第2セキュア処理プログラムに呼び出されて起動すると、送信プログラムに改竄検出データの送信を要求する。送信プログラムは、要求に応じて改竄検出データを送信する。
【００８３】
この場合、認証局装置１００は、送信プログラムを保護プログラムに含めず、第2セキュア処理プログラムとは別のプログラムとして生成する。
また、第１セキュア処理プログラム５０１が第２セキュア処理プログラムの改竄検出データを予め保持しているとしても良い。
（４）本実施の形態では、第２セキュア処理プログラムが第１セキュア処理プログラム５０１の認証を行う片方向認証としたが、双方向に認証を行うとしても良い。また、チャレンジ・レスポンス型の認証を行うとしたが、これに限定されず、通信相手の正当性を認証可能であれば他の認証方法を利用するとしても良い。
【００８４】
また、認証値R1及びR2は、乱数R0を認証鍵を用いて暗号化して生成するとしたが、乱数R0に一方向性関数を施して生成するとしても良い。
また、乱数R0と認証鍵とから、一方向性関数を用いてセッション鍵を生成するとしたが、暗号化方式を用いて生成するとしても良い。
（５）領域暗号化プログラム５２６は、第２セキュア処理プログラムから第１セキュア処理プログラム５０１を呼び出す場合に、記憶領域を暗号化するとしたが、第２セキュア処理プログラムから外部関数を呼び出す場合など、第２セキュア処理プログラム以外のプログラムに制御が移る場合に、記憶領域を暗号化して、記憶領域内のデータを保護する。
【００８５】
また、領域復号プログラム５２７は、他のプログラムから第２セキュア処理プログラムに制御が戻った場合に、記憶領域内のデータを復号して、元のデータに戻す。
（６）マスタ鍵は、保護対象となるプログラムを実行する装置毎に固有であるとしても良い。この場合、不正なユーザにマスタ鍵を奪われたとしても、鍵を奪われた装置以外は、他の鍵を用いて暗号化されている為、不正なマスタ鍵を用いても他の装置は正常に動作しない。よって、不正に行為による被害を少なくすることが出来る。
（７）認証鍵は、第１セキュア処理プログラム５０１及び第２セキュア処理プログラムが保持する構成としたが、プログラム鍵や改竄検出値に基づいて算出されるものであっても良い。
【００８６】
また、認証局装置１００はマスタ鍵を用いて認証鍵を暗号化するとしても良い。この場合、暗号化プログラムを復号するプログラム鍵は、認証鍵に基づいて算出される。
このように、認証に利用する鍵と暗号化プログラムの復号に用いる鍵とが依存関係にあれば、何れの鍵を暗号化するとしても良い。また、暗号化された鍵を更に他の鍵を用いて暗号化するなど、更に多くの鍵を用いて暗号化の階層を深くしても良い。
（８）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【００８７】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD（Blu−ray  Disc）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【００８８】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【００８９】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（９）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【００９０】
映画や音楽などの著作物がデジタル化されたコンテンツやコンピュータプログラムなどのソフトウェアを提供するソフトウェア産業において、本発明は、経営的に、また反復的、継続的に使用することが出来る。また、本発明のプログラム実行装置は、電器製品等の製造産業において、生産し、販売することが出来る。
【符号の説明】
【００９１】
１    セキュア処理システム
１００    認証局装置
１０１    コンパイラ
１０２    プログラム暗号化部
１０３    鍵暗号化部
１０４    ハッシュ値算出部
１０５    データ埋込部
２００    ＲＯＭライター
３００    携帯端末
３０３    デバッガ無効化回路
３０４    割込コントローラ
３０５    メモリ
３０６    メモリカードインターフェース
３１７    バス
３１８    割込線
４００    メモリカード
４２１    タイトル鍵
５０１    セキュア処理プログラム
５０２    セキュア処理プログラム
【図１】
2011253558.tif 000003
【図２】
2011253558.tif 000004
【図３】
2011253558.tif 000005
【図４】
2011253558.tif 000006
【図５】
2011253558.tif 000007
【図６】
2011253558.tif 000008
【図７】
2011253558.tif 000009
【図８】
2011253558.tif 000010
【図９】
2011253558.tif 000011
【図１０】
2011253558.tif 000012
【図１１】
2011253558.tif 000013
【図１２】
2011253558.tif 000014
【図１３】
2011253558.tif 000015
【図１４】
2011253558.tif 000016
【図１５】
2011253558.tif 000017
【図１６】
2011253558.tif 000018
【図１７】
2011253558.tif 000019
【図１８】
2011253558.tif 000020
【図１９】
2011253558.tif 000021