(57)【要約】携帯電話１０は、ＯＳ、ノンセキュアプログラム、切替デバイスドライバ及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するＣＰＵ１０２と、管理領域及び管理外領域から構成されるメモリ１０７とを備える。ＯＳは、管理領域のみをアクセス空間として、ノンセキュアプログラムに対して管理領域へのアクセスを仲介する命令と、切替デバイスドライバに対して、セキュアプログラムへの切替を指示する命令とを含む。ノンセキュアプログラムは、ＯＳを介して、管理領域にアクセスする命令を含む。切替デバイスドライバは、ＯＳの指示により、ＯＳからセキュアプログラムへの実行の切替えを行う命令を含む。セキュアプログラムは、管理外領域のみをアクセス空間とし、管理外領域へアクセスする命令を含む。【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とするコンピュータシステム。
【請求項２】
前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、
前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、
前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出す
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含む
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、
前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、
前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、
前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含む
ことを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
前記セキュアプログラムは、難読化が施されている
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項７】
前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われる
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項８】
前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行される
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行される
ことを特徴とする請求項８に記載のコンピュータシステム。
【請求項１０】
一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、
セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行される
ことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
集積回路であって、
基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とする集積回路。
【請求項１２】
プログラム生成装置であって、
オペレーティングシステムを構成するソースコードから、実行対象の装置が有する管理領域にのみアクセスする第１オブジェクトを生成する第１オブジェクト生成部と、
秘匿情報を使う処理のソースコードから、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域にのみアクセスする第２オブジェクトを生成する第２オブジェクト生成部と
を備えることを特徴とするプログラム生成装置。
【請求項１３】
基本プログラム及びセキュアプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記基本プログラムは、オペレーティングシステムを構成し、前記オペレーティングシステムの管理下で動作する通常プログラムに対して、実行対象の装置が有する管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、プログラムの不正な改ざんや解析を防止する技術に関する。
【背景技術】
【０００２】  プログラムの不正な改ざんや解析を防止する技術については従来から研究されている。
例えば、パッケージとして売られているソフトウェアには、違法コピーによる使用を防ぐために、利用者に対してパスワードの入力を要求するものがある。このようなソフトウェアには、パスワードが正しいかどうかをチェックするコード（コンピュータプログラム）が含まれている。不正な利用者が、このソフトウェア内において、何らかの方法により、このチェックを行うコードが存在する場所を特定し、このチェックを無効にするようにこのコードに改ざんを加えたとするならば、この不正な利用者は、パスワードを知らなくてもこのソフトウェアを使用することができてしまう。【０００３】  また、近年、ＰＣ（パーソナルコンピュータ）で視聴できる有料のデジタルコンテンツが提供されるようになってきている。この有料のデジタルコンテンツは不正にコピーされることを防ぐために暗号化されており、これを視聴するためのソフトウェアは、暗号を解くための復号アルゴリズム及び復号鍵を含んでいる。もしも、悪意のあるユーザが、視聴用のソフトウェアを解析して、復号鍵を特定することができれば、デジタルコンテンツを不正にコピーすることができるソフトウェアを作成することが可能になる。【０００４】  以上のように、ソフトウェアの内容が解析されると、そのソフトウェアやデジタルコンテンツによるビジネスが成り立たなくなる。そのため、これらのソフトウェアの解析を防止する技術は必要不可欠である。
例えば、非特許文献１では、ソフトウェアの解析を防ぐための基本原則や具体的手法が記述されている。また、非特許文献２では、ソフトウェアの解析を防ぐためのツールとして開発されたＴＲＣＳ（Ｔａｍｐｅｒ  Ｒｅｓｉｓｔａｎｔ  Ｃｏｄｉｎｇ  Ｓｙｓｔｅｍ）の技術課題とその対策が記述されている。また、非特許文献３では、ソフトウェアの違法コピーを防ぐためのソフトウェア的な保護手段（コピープロテクト技術）を無効化されないようにする技術が解説されている。【０００５】  このようなソフトウェアの不正な解析や改ざんを防ぐ技術を「耐タンパ技術」と呼ぶ．
【非特許文献１】「逆解析や改変からソフトを守る」日経エレクトロニクス  １９９８．１．５（Ｐ２０９−２２０）
【非特許文献２】「ソフトウェアの耐タンパー化技術」富士ゼロックス  テクニカルレポート  Ｎｏ．１３
【非特許文献３】「ザ・プロテクト」秀和システム出版  １９８５年
【特許文献１】特開平１１−１５７０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】  複数のＯＳが普及している現在において、ＯＳ上で動作するソフトウェアデバッガなどの解析ツールが比較的容易に入手できるようになってきている。
そのため、ＯＳに依存するライブラリを利用して、ＯＳ上で動作するソフトウェアが、秘匿情報を第三者に知られることなく、安全に処理するように、当該ソフトウェアについてセキュアな実装をした場合であっても、当該ソフトウェアについて、ＯＳ上で動作するデバッガに対して耐性が低いという問題点がある。すなわち、不正解析者により、ＯＳ上で動作するデバッガを用いて、ＯＳに依存するライブラリを呼び出している部分が特定され、さらに、秘密情報が特定される危険性がある。【０００７】  本発明は、上記問題点に鑑み、不正解析者による秘密の処理の特定を困難にすることができるコンピュータシステム、集積回路及びプログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】  前記目的を達成するために、本発明は、コンピュータシステムであって、基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含むことを特徴とする。
【発明の効果】
【０００９】  この構成によると、セキュアプログラムは、オペレーティングシステムである基本プログラムに依存することなく、オペレーティングシステムの管理外領域にアクセスすることが可能である。一方、通常プログラムは、オペレーティングシステムである基本プログラムを介して、オペレーティングシステムの管理領域にアクセス可能であるが、オペレーティングシステムの管理外領域に対してはアクセスできないので、通常プログラムが、例えばソフトウェアデバッガである場合に、ソフトウェアデバッガは、管理外領域にアクセスできず、セキュアプログラムによる管理外領域へのアクセスについての安全性を保つことができるという優れた効果を奏する。【００１０】  ここで、前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出すとしてもよい。【００１１】  この構成によると、セキュアプログラムは、オペレーティングシステムの管理外領域に記憶されているので、上記のソフトウェアデバッガは、管理外領域に記憶されているセキュアプログラムにアクセスできず、セキュアプログラム自身の内容を安全に保つことができる。
ここで、前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含むとしてもよい。【００１２】  この構成によると、上記のソフトウェアデバッガは、前記セキュアプログラムにより、オペレーティングシステムの管理外領域において格納される秘匿すべき情報にアクセスできず、これらの秘匿すべき情報の内容を安全に保つことができる。
ここで、前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含むとしてもよい。【００１３】  この構成によると、基本プログラムから秘匿処理が必要な時等に、切替プログラムを介して、本来アクセスできないセキュアプログラムに一時的に処理を移すことができ、また、秘匿処理の終了後、再度オペレーティングシステムである基本プログラムに処理を戻すことができる。これにより、基本プログラムからでも、セキュアプログラムの安全性を確保したまま、セキュアプログラムの秘匿処理を利用することができる。【００１４】  ここで、前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含むとしてもよい。
この構成によると、セキュアプログラムから基本プログラムへの切り替えの際、スタックポインタの設定を基本プログラムが利用するものに戻すので、基本プログラムの処理を続行することができる。また、基本プログラムからセキュアプログラムへの切り替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻すので、セキュアプログラムの処理を続行することができる。【００１５】  ここで、前記セキュアプログラムは、難読化が施されているとしてもよい。
この構成によると、難読化により、セキュアプログラムの解析が困難となるので、セキュアプログラムの安全性をさらに高めることができる。
また、一般にソフトウェアの処理が実行される前に、実行対象となるソフトウェアが利用するデータは初期化される。不正解析者は、解析対象のソフトウェアの解析を、ソフトウェア初期化シーケンスから行おうとする。この場合、不正解析者が、データ初期化処理に注目し、秘密情報の利用場所を特定する可能性がある。【００１６】  ここで、前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われるとしてもよい。
この構成によると、複数の初期化プログラムを用いて、それぞれの初期化処理が行われることにより、初期化処理が分割・分散し、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を困難にすることができる。【００１７】  ここで、前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行されるとしてもよい。
この構成によると、セキュアプログラムによる秘匿処理に先行して、各初期化プログラムに実行により、各初期化処理が行われるので、秘匿処理において、誤った初期値が使われて、誤った処理が行われることはない。【００１８】  ここで、前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行されるとしてもよい。
この構成によると、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を、さらに、困難にすることができる。
さらに、携帯電話などの電子機器においても耐タンパ技術を適用する場合、耐タンパ化されたソフトウェアが、利用するメモリサイズは増加する。そのため、前記耐タンパ化されたソフトウェアの初期化処理に要する時間が大きくなってしまい、即応性の求められる電子機器においては、ユーザによる所望の処理要求から、実際にソフトウェアが処理を開始するまでの初期化処理に多大な時間を要することになってしまう。【００１９】  メモリの初期化処理の高速化に関する文献として、特許文献１に示されているメモリ管理方法がある。しかし、この方法ではプログラムのデータ初期化処理の高速化やセキュリティの向上に対する効果は得られない。
ここで、一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行されるとしてもよい。【００２０】  この構成によると、ＯＳに依存しない環境で動作可能なセキュアソフトウェアの初期化処理を分割・分散することで、ユーザによる所望の処理要求から、実際にセキュアソフトウェアが処理を開始するまでの処理時間を短縮するとともに、さらに悪意のある解析者に対する耐性を向上させることができる。
以上説明したように、本発明によると、セキュアプログラムが実行するコード（ＲＯＭ上に存在する）およびセキュアプログラムが利用するワークメモリ（ＲＡＭ上に存在する）は、ＯＳ管理外の領域としているため、ＯＳ上で動作するソフトウェアデバッガからの解析を防ぐことが可能となる。【００２１】  さらに、セキュアプログラムのＲＡＭデータの初期化処理を分割しているため、ユーザによるセキュアプログラム処理要求発生からセキュアプログラムの起動までの処理時間を短縮することができる。
さらに、分割した初期化処理を分散して実行することにより、セキュアプログラムの初期化処理から解析を行う悪意のある解析者に対して、解析対象範囲を拡大させることが可能となるため、解析を困難にし、セキュリティレベルを向上させることができる。【００２２】  また、セキュアプログラムがＯＳに依存しない環境で動作するものであるので、セキュアプログラムの他ＯＳへの移植性が非常に高い。さらに、他ＯＳへ移植する際にもセキュアプログラムのＯＳ向けの変更が発生しないため、セキュリティレベルを落とすことなく移植することが可能となる。
【図面の簡単な説明】
【００２３】
【図１】セキュア処理システム１の構成を示すシステム構成図である。
【図２】コンパイル装置３０の構成を示すブロック図である。
【図３】コンパイル装置４０の構成を示すブロック図である。
【図４】メモリカード２０及び携帯電話１０の構成を示すブロック図である。
【図５】メモリ１０７のデータの配置を示す配置図である。
【図６】バイナリデータの各セクションの配置を示す配置図である。
【図７】メモリ１０７における物理アドレスと論理アドレスとの対応関係を示す図である。
【図８】セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２の内容を示す配置図である。
【図９】ＡＰＩ分岐テーブル８００のデータ構造を示すデータ構造図である。
【図１０】リセットの後、ＯＳプログラム２１０を起動し、ＯＳ上で動作するアプリケーションソフトが起動されるまでのシーケンスを示す図である。
【図１１】セキュアプログラム２０２のＺＩセクションの初期化処理が完了するまでのシーケンスを示す図である。
【図１２】セキュアプログラム２０２のＺＩセクションの初期化完了後、セキュアＡＰＩの起動までのシーケンスを示す図である。
【図１３】セキュアプログラム２０２の実行中に割込みが発生した場合のシーケンスを示す図である。
【符号の説明】
【００２４】  １０  携帯電話
２０  メモリカード
３０  コンパイル装置
４０  コンパイル装置
１０１  デバッガＩ／Ｆ
１０２  ＣＰＵ
１０３  ＭＭＵ
１０４  割込コントローラ
１０５  入力部
１０６  表示部
１０７  メモリ
１０８  入出力部
１０９  バッファ
１１０  符号処理部
１１１  Ｄ／Ａ変換部
１１２  無線通信制御部
１１３  スピーカ
１１４  マイク
１１５  通信部
１１６  アンテナ
１１７  バス
１２０  通常領域
１２２  入出力部
１３０  セキュア領域
１３２  セキュア処理部
２０１  ＩＰＬプログラム
２０２  セキュアプログラム
２１０  ＯＳプログラム
２１１  ノンセキュアプログラム
２１２  セキュアプログラム呼出部
２１３  切替デバイスドライバ
３１０  ＯＳ依存コンパイル部
３２０  ＯＳ依存リンク部
３３０  形式変換部
３５０  情報記憶部
４１０  ＯＳ非依存コンパイル部
４２０  ＯＳ非依存リンク部
４３０  形式変換部
４５０  情報記憶部
【発明を実施するための最良の形態】
【００２５】  １．実施の形態
以下、本発明に係る１の実施の形態としてのセキュア処理システム１について、図面を参照しながら説明する。
１．１  セキュア処理システム１の構成
セキュア処理システム１は、図１に示すように、コンパイル装置３０、コンパイル装置４０、携帯電話１０及びメモリカード２０から構成されている。メモリカード２０は、携帯電話１０に装着される。【００２６】  コンパイル装置３０は、携帯電話１０に導入されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ。基本ソフトウェア又は基本プログラムとも呼ぶ。）のカーネルの動作について記述しているソースプログラム、及び当該ＯＳに依存するその他の動作を記述しているソースプログラムから、１個以上の実行形式のコンピュータプログラム（ＯＳ依存バイナリデータと呼ぶ。）を生成する。また、コンパイル装置４０は、前記ＯＳに依存しないその他の動作を記述しているソースプログラムから、１個以上の実行形式のコンピュータプログラム（ＯＳ非依存バイナリデータと呼ぶ。）を生成する。【００２７】  携帯電話１０は、後述するように、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などを含んで構成されるコンピュータシステムである。上記において生成されたＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータは、ＲＯＭライタにより、携帯電話１０が備えるＲＯＭに書き込まれる。こうして、ＲＯＭは、コンピュータプログラムであるＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータを記憶し、前記ＣＰＵが、前記コンピュータプログラムに従って動作することにより、携帯電話１０は、その一部の機能を達成する。ＯＳ依存バイナリデータであるコンピュータプログラムの一部は、ＯＳを構成しており、他の部分は、当該ＯＳの制御の元に動作する。【００２８】  メモリカード２０は、一例として、音楽又は映像のコンテンツが暗号化されて生成された暗号化コンテンツ及び前記暗号化コンテンツを復号するために用いられるコンテンツ鍵を記憶している。
携帯電話１０は、ＲＯＭに書き込まれたＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータに従って動作することにより、メモリカード２０から暗号化コンテンツを読み出し、読み出した暗号化コンテンツを前記コンテンツ鍵を用いて復号し、復号コンテンツを生成し、生成した復号コンテンツを音楽又は映像として出力する。【００２９】  １．２  コンパイル装置３０の構成
コンパイル装置（プログラム生成装置とも呼ぶ。）３０は、図２に示すように、ＯＳ依存コンパイル部３１０、ＯＳ依存リンク部３２０、形式変換部３３０及び情報記憶部３５０から構成されている。コンパイル装置３０は、携帯電話１０の後述するメモリ１０７のＯＳの管理領域に配置するバイナリデータを生成する。【００３０】  コンパイル装置３０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置３０を構成するＯＳ依存コンパイル部３１０、ＯＳ依存リンク部３２０、形式変換部３３０は、その機能を達成する。【００３１】  （１）情報記憶部３５０
情報記憶部３５０は、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・、アドレス指定ファイル３２２、ＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・を記憶している。また、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、３４０ｃ、・・・を記憶するための領域を備えている。【００３２】  ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、それぞれ、携帯電話１０に導入されるＯＳの各種処理を記述しているソースコード（ソースプログラム）の一部分であるコンピュータプログラムであってコンピュータ命令を含み、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、これらのソースコード全体で、当該ＯＳ処理を記述している。また、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、全体として、携帯電話１０のメモリ１０７上にＯＳプログラム２１０（後述する）として記憶されるバイナリデータに対応している。【００３３】  ノンセキュアプログラムソース（通常プログラムとも呼ぶ。）３０２ａ、３０２ｂ、３０２ｃ、・・・は、それぞれ、ノンセキュアな処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、ノンセキュアプログラムソース３０２ａは、携帯電話１０のメモリ１０７上にノンセキュアプログラム２１１（後述する）として記憶されるバイナリデータに対応している。【００３４】  セキュアプログラム呼出部ソース３０３ａは、携帯電話１０のメモリ１０７上に記憶されているセキュアプログラム２０２（後述する）を呼び出すように切替デバイスドライバ２１３（後述する）に依頼する処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、メモリ１０７上にはノンセキュアプログラム２１１（後述する）として記憶されるバイナリデータに対応する。切替デバイスドライバ２１３に依頼する処理は、本実施の形態では、ＯＳプログラム２１０のライブラリコールで行うものとする。セキュアプログラム呼出部ソース３０３ｂ、３０３ｃ、・・・についても同様である。【００３５】  切替デバイスドライバソース３０４ａは、メモリ１０７上のセキュアプログラム呼出部２１２から依頼されたセキュアプログラム２０２の処理へ分岐させる処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、メモリ１０７上には切替デバイスドライバ２１３（後述する）として記憶されるバイナリデータに対応する。【００３６】  アドレス指定ファイル３２２は、ＯＳ依存リンク部３２０によって作成されるバイナリのＲＯＭデータやＲＡＭデータの配置アドレスを指定するファイルである。例えば、アドレス指定ファイル３２２は、ＯＳ依存リンク部３２０により生成される各ＯＳ依存バイナリデータについて、ターゲット装置（つまり、携帯電話１０）のメモリにおいて、配置されるべき位置を示す物理アドレスを含む��【００３７】  （２）ＯＳ依存コンパイル部３１０
ＯＳ依存コンパイル部３１０は、これらのＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・を入力とし、高級言語で記述されたプログラムコードを低レベルなマシンコード（オブジェクトコード）、つまり、実行形式のコンピュータプログラムに変換して、それぞれ、オブジェクトファイルを生成する。【００３８】  （３）ＯＳ依存リンク部３２０
ＯＳ依存リンク部３２０は、ＯＳ依存コンパイル部３１０で生成された各オブジェクトファイルに対し、再配置とシンボルの解決を行い、各オブジェクトファイル内にＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・の関数シンボルが存在するのであれば、関連するＯＳ依存ライブラリをリンクして、ＯＳ依存バイナリデータを生成する。【００３９】  ＯＳ依存リンク部３２０は、アドレス指定ファイル３２２が指定されると、アドレス指定ファイル３２２内に記載された論理アドレスにおいてＲＯＭデータ、ＲＡＭデータを配置する。
（４）形式変換部３３０
形式変換部３３０は、ＯＳ依存リンク部３２０により生成された各ＯＳ依存バイナリデータを、ＲＯＭライターにより実際のＲＯＭメモリに書き込み可能な形式に変換して、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・を生成し、生成したＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・を情報記憶部３５０へ書き込む。形式変換部３３０により生成されるデータ形式には、インテルＨＥＸ形式やモトローラＳレコード形式などがある。【００４０】  （５）ＯＳ管理外のＲＯＭ／ＲＡＭの設定
コンパイル装置３０は、以下に示すようにして、ＯＳ管理外のＲＯＭ／ＲＡＭの設定を行う。
（ａ）ＯＳ管理外のＲＡＭ領域の確保
例えば、物理アドレス「０ｘ１０００００００」から物理アドレス「０ｘ１１ＦＦＦＦＦＦ」までをアクセス対象のメモリ空間として扱うことができるＯＳに対して、物理アドレス「０ｘ１０００００００」から物理アドレス「０ｘ１１Ｅ０００００」までをＯＳ管理のＲＡＭ領域として割り当て、物理アドレス「０ｘ１１Ｆ０００００」から物理アドレス「０ｘ１１ＦＦＦＦＦＦ」までをＯＳ管理外のＲＡＭ領域として割り当てる場合には、カーネル起動時に必要なＲＡＭメモリパラメタのサイズを「０ｘ１Ｅ０００００」（バイト）と指定して、コンパイルする。【００４１】  これにより、物理アドレス「０ｘ１０００００００」から、指定されたサイズ「０ｘ１Ｅ０００００」の領域が、ＯＳ管理のＲＡＭ領域となり、その他の領域が、ＯＳ管理外のＲＡＭ領域となる。
（ｂ）セキュアプログラム用のＯＳ管理外のＲＯＭ領域とＯＳ管理外のＲＡＭ領域の物理−論理のマッピングの設定
セキュアプログラム用のＯＳ管理外のＲＯＭ領域とＯＳ管理外のＲＡＭ領域の物理−論理のマッピングを設定する場合には、以下に示すようにする。【００４２】  ＯＳカーネルのメモリマッピングを指定するソースファイルにおいては、メモリマップを指定する構造体が存在する。Ｌｉｎｕｘの場合は、メモリマップ指定の構造体として、
ｍａｐ＿ｄｅｓｃ  ｓｔａｎｄａｒｄ＿ｉｏ＿ｄｅｓｃ［］＿ｉｎｉｔｄａｔａ
が用意されている。
ｓｔａｔｉｃ  ｓｔｒｕｃｔ  ｍａｐ＿ｄｅｓｃ＿ｓｔａｎｄａｒｄ＿ｉｏ＿ｄｅｓｃ［］＿ｉｎｉｔｄａｔａ＝｛
ＭＡＰ＿ＤＥＳＣ（論理アドレス、物理アドレス、サイズ、ドメイン属性、
ＲＥＡＤ属性、ＷＲＩＴＥ属性、ＣＡＣＨＥ属性、ＢＵＦＦＥＲ属性）；
｝；
ここで、論理アドレスでは、物理アドレスに対応付けたい論理アドレスを指定し、物理アドレスでは、論理アドレスに対応付けたい物理アドレスを指定し、サイズでは、上記アドレスから論理・物理アドレスの対応付けを行いたいサイズを指定する。ドメイン属性では、カーネル領域かユーザ領域なのかを指定し、ＲＥＡＤ属性では、ＲＥＡＤ可なら「１」を設定し、ＲＥＡＤ不可なら「０」を設定し、ＷＲＩＴＥ属性では、ＷＲＩＴＥ可なら「１」を設定し、ＷＲＩＴＥ不可なら「０」を設定し、ＣＡＣＨＥ属性では、キャッシュ有効なら「１」を設定し、キャッシュ無効なら「０」を設定し、ＢＵＦＦＥＲ属性では、ＢＵＦＦＥＲ有効なら「１」を設定し、ＢＵＦＦＥＲ無効なら「０」を設定する。【００４３】  後述する図７に示すように、ＯＳ管理外のＲＯＭ、ＲＡＭを指定する場合には、この構造体に対して、以下のように、ソースファイルに記述し、このソースファイルを含むカーネルソースファイルをコンパイルする。
ｓｔａｔｉｃ  ｓｔｒｕｃｔ  ｍａｐ＿ｄｅｓｃ＿ｓｔａｎｄａｒｄ＿ｉｏ＿ｄｅｓｃ［］＿ｉｎｉｔｄａｔａ＝｛
ＭＡＰ＿ＤＥＳＣ（０ｘＦＦＢ０００００，０ｘ１１Ｆ０００００，０ｘ０００ＦＦＦＦＦ，ＤＯＭＡＩＮ＿ＫＥＲＮＥＬ，０，１，１，１），
／＊セキュアプログラム用ＲＡＭ＊／
ＭＡＰ＿ＤＥＳＣ（０ｘＦＦＡ０００００，０ｘ００２６００００，０ｘ０００ＦＦＦＦＦ，ＤＯＭＡＩＮ＿ＫＥＲＮＥＬ，０，０，１，１），
／＊セキュアプログラム用ＲＯＭ＊／
｝；
なお、セキュアプログラムのドメイン属性は、カーネルドメインとし、ＯＳ上で動作する通常ソフトウェアからのアクセスを禁止する。【００４４】  さらに、セキュアプログラムのメモリへのアクセスは、切替デバイスドライバ経由で実行されるため、デバイスドライバから、ＲＥＡＤ／ＷＲＩＴＥ実行可能かつＣＰＵキャッシュが有効であることか必要である。
（６）まとめ
以上説明したように、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・は、それぞれ、ＯＳ依存コンパイル部３１０によりコンパイルされ、コンパイルによって作成されたオブジェクトファイルはＯＳ依存リンク部３２０によりリンク処理が行われる。ＯＳ依存リンク部３２０によって生成されたＯＳ依存バイナリデータは、形式変換部３３０により、ＲＯＭに書き込める形式に変換され、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・が情報記憶部３５０に書き込まれる。【００４５】  ＯＳ（基本プログラム）は、前記管理領域のみをアクセス空間とし、ノンセキュアプログラム（通常プログラム）に対して前記管理領域へのアクセスを仲介する命令と、切替デバイスドライバ（切替プログラム）に対して、セキュアプログラムへの切替を指示する命令とを含む。
ノンセキュアプログラム（通常プログラム）は、ＯＳ（基本プログラム）を介して、前記管理領域にアクセスする命令を含む。【００４６】  切替デバイスドライバ（切替プログラム）は、ＯＳ（基本プログラム）の指示により、ＯＳ（基本プログラム）セキュアプログラムへの実行の切替えを行う命令を含む。
セキュアプログラムは、前記管理外領域のみをアクセス空間とし、前記管理外領域へアクセスする命令を含む。また、セキュアプログラムの対象処理、例えば、暗号化コンテンツの前記コンテンツ鍵を用いた復号の処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む。【００４７】  １．３  コンパイル装置４０の構成
コンパイル装置（プログラム生成装置とも呼ぶ。）４０は、図３に示すように、ＯＳ非依存コンパイル部４１０、ＯＳ非依存リンク部４２０、形式変換部４３０及び情報記憶部４５０から構成されている。コンパイル装置４０は、携帯電話１０の後述するメモリ１０７のＯＳの管理外領域に配置するバイナリデータを生成する。【００４８】  コンパイル装置４０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置４０を構成するＯＳ非依存コンパイル部４１０、ＯＳ非依存リンク部４２０、形式変換部４３０は、その機能を達成する。【００４９】  情報記憶部４５０は、セキュアプログラムソース４０１ａ、４０１ｂ、４０１ｃ、・・・、アドレス指定ファイル４２２、ＯＳ非依存ライブラリ４２１ａ、４２１ｂ、４２１ｃ、・・・を記憶している。また、ＯＳ非依存バイナリデータ４４０ａ、４４０ｂ、４４０ｃ、・・・を記憶するための領域を備えている。
セキュアプログラムソース４０１ａは、秘密情報を利用した処理が記述されているソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含む。このセキュアプログラムソース４０１ａは、本実施の形態では、暗号化コンテンツを復号するための復号処理が記述されたコードであり、メモリ１０７上にセキュアプログラム２０２（後述する）として記憶されるバイナリデータに対応している。セキュアプログラムソース４０１ｂ、４０１ｃ、・・・についても同様である。【００５０】  アドレス指定ファイル４２２は、図２で説明したアドレス指定ファイル３２２同じであるので説明を省略する。ただし、セキュアプログラムソース４０１ａ、４０１ｂ、４０１ｃ、・・・、に対応して生成されるセキュアプログラム２０２等を、ＯＳプログラム２１０の管理外領域に配置するため、アドレス指定ファイル４２２は、管理外領域のアドレスを指定する。【００５１】  ＯＳ非依存コンパイル部４１０は、ＯＳ非依存な処理が記述されたソースコードを高級言語から低レベルなマシンコード（オブジェクト）に変換する。ＯＳ非依存コンパイル部４１０は、ＣＰＵ１０２のアーキテクチャに合ったマシンコードを作成する。
ＯＳ非依存リンク部４２０は、再配置とシンボル解決を行い、必要であればＯＳ非依存ライブラリをリンクしＣＰＵ１０２で実行可能なバイナリデータを作成する。ＯＳ非依存とは、ＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・をリンクしないことを示している。【００５２】  形式変換部４３０は、図２で説明した形式変換部３３０と同じであるので説明を省略する。
１．４  メモリカード２０の構成
メモリカード２０は、図４に示すように、通常領域１２０、セキュア領域１３０、入出力部１２２、セキュア処理部１３２から構成される。【００５３】  メモリカード２０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、メモリカード２０は、その一部の機能を達成する。
通常領域１２０は、外部機器により自由にアクセスできる記憶領域であり、本実施の形態では暗号化コンテンツ１２１が記憶されている。【００５４】  セキュア領域１３０は、許可された外部機器のみがアクセスできる領域であり、コンテンツ鍵１３１が記憶されている。
暗号化コンテンツ１２１は、暗号化された音楽データまたは動画データであり、コンテンツ鍵１３１を暗号鍵として暗号アルゴリズムを用いて暗号化されたデータである。各暗号化データは、コンテンツＩＤにより識別される。なお、本実施の形態では、暗号化コンテンツ１２１は共通鍵方式で暗号化されているものとし、コンテンツ鍵１３１を復号鍵として用いることにより、復号されたコンテンツ、すなわち音楽データまたは動画データを取得可能であるものとする。【００５５】  入出力部１２２は、外部機器と通常領域１２０とセキュア処理部１３２との間での各種データを入出力する。
セキュア処理部１３２は、外部機器との間で、ＣＰＲＭ（Ｃｏｎｔｅｎｔ  Ｐｒｏｔｅｃｔｉｏｎ  ｆｏｒ  Ｒｅｃｏｒｄａｂｌｅ  Ｍｅｄｉａ）の仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を用いて、外部機器との間で安全にデータの入出力を行う。なお、ＣＰＲＭは公知であるので説明を省略する。【００５６】  １．５  携帯電話１０の構成
携帯電話１０は、図４に示すように、デバッガＩＦ１０１、ＣＰＵ１０２、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）１０３、割込コントローラ１０４、入力部１０５、表示部１０６、メモリ１０７、入出力部１０８、バッファ１０９、符号処理部１１０、Ｄ／Ａ変換部１１１、無線通信制御部１１２、スピーカ１１３、マイク１１４、通信部１１５、アンテナ１１６から構成され、各回路はバス１１７で接続されている。【００５７】  （１）携帯電話１０の各構成要素
メモリ１０７は、ＲＯＭおよびＲＡＭから構成され、ＣＰＵ１０２により実行される各種プログラムを記憶している。
ＣＰＵ１０２は、命令フェッチ部、命令デコーダ、演算器、プログラムカウンタ、リンクレジスタ、スタックポインタなどを備え、メモリ１０７上のプログラムから命令をフェッチし、フェッチした命令を解読し、解読した命令を実行する。【００５８】  ＭＭＵ１０３は、論理アドレスを物理アドレスに変換する仮想記憶機能を実現する。
デバッガＩＦ１０１は、携帯電話１０と外部のデバッガとを接続するためのインターフェースである。
割込コントローラ１０４は、ＦＩＱ、ＩＲＱなどのハードウェア割込みやソフトウェア割込み（ＳＷＩ）、プリフェッチアボート、データアボート、リセットなどの各種割込みを検知し、ＣＰＵ１０２の割込検出用のレジスタへ割込み発生通知を出力する。【００５９】  通信部１１５は、無線通信制御部１１２と、携帯電話網、インターネットに接続された外部機器との間でアンテナ１１６を介して情報の送受信を行う。
無線通信制御部１１２は、ベースバンド部、変復調部、増幅部などを備えており、通信部およびアンテナ１１６を介して送受信される各種情報の信号処理を行う。
符号処理部１１０は、バッファ１０９に記憶されている音楽データにＭＰ３などの符号化技術に従った復号処理を施し、Ｄ／Ａ変換部１１１へ出力する。【００６０】  Ｄ／Ａ変換部１１１は、符号処理部１１０により復号された音楽データをアナログ音声信号に変換し、スピーカ１１３へ出力する。
入力部１０５は、テンキー、決定ボタンなどの各種ボタンを備え、利用者によるこれらの操作を受け付ける。
表示部１０６は、ＶＲＡＭ、液晶画面を備え、各種の画面を表示する。【００６１】  マイク１１４は、音を電気信号に変換し、生成した電気信号を無線通信制御部１１２へ出力する。
スピーカ１１３は、無線通信制御部１１２およびＤ／Ａ変換部１１１から、アナログ信号を受け取り、受け取ったアナログ信号を音に変換して出力する。
（２）メモリ１０７の構成
メモリ１０７の構成を図５に示す。メモリ１０７は、ＲＯＭとＲＡＭから構成される。図５では、ＲＯＭとＲＡＭとを区別して図示していないが、ＲＯＭとＲＡＭとの区別は、図７において図示している。【００６２】  一例として図５に示すように、メモリ１０７は、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３、セキュアプログラム２０２、ＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌｏａｄｅｒ）プログラム２０１を記憶している。
さらに、本実施の形態では、メモリ１０７に、ＯＳが管理する管理領域とＯＳの管理外である管理外領域との２つを割り当てて利用する。ＯＳ上で動作するノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３は、ＯＳの管理領域に記憶される。一方、ＩＰＬプログラム２０１、セキュアプログラム２０２はＯＳの管理外領域に記憶される。この割り当て方法については、後述する。【００６３】  このようにセキュアプログラム２０２は、ＯＳの管理外の管理外領域で動作するため、ＯＳ上で動作するソフトウェアデバッガからの解析が不可能となり、セキュア状態でセキュアプログラムの実行が可能となる。
（各プログラムの説明）
ＩＰＬプログラム２０１は、アセンブラで書かれたコード（コンピュータプログラム）であり、ＯＳが起動するために必要なハードウェアの初期化を行い、ＯＳのカーネル初期化処理へ分岐する命令を含む。また、ＩＰＬプログラム２０１は、後述するＺＩセクションＡ７１１のデータの初期化を実施する命令を含む。【００６４】  ＯＳプログラム２１０は、オペレーティングシステムであり、カーネル初期化時にＯＳが利用するハードウェアの初期化、ＭＭＵ１０３の設定やメモリ管理やファイルの管理、ユーザーインターフェースの提供等を行う基本ソフトウェアである。
ノンセキュアプログラム２１１とセキュアプログラム呼出部２１２と切替デバイスドライバ２１３は、ＯＳが管理するメモリで動作するプログラム群である。【００６５】  ノンセキュアプログラム２１１は、セキュア環境での実行を必要としないアプリケーションである。例えば、携帯電話１０のＧＵＩを管理するアプリケーションや個人のスケジュールを管理するプログラムや音楽再生アプリケーション等である。コンテンツ再生時、メモリカード２０に記憶されている暗号化コンテンツ１２１に対して、メモリカード２０に記憶されているコンテンツ鍵１３１を用いて、セキュアに復号処理を施す必要がある。音楽再生アプリケーションは、セキュアプログラム呼出部２１２を呼び出す復号処理要求を含む。この復号処理要求は、コンテンツ鍵１３１を用いた暗号化コンテンツ１２１の復号処理の要求を示す。【００６６】  セキュアプログラム呼出部２１２は、セキュアプログラム２０２を実行するための呼出プログラムであり、切替デバイスドライバ２１３にセキュアプログラム２０２の実行を依頼する。
切替デバイスドライバ２１３は、管理外領域に記憶されたセキュアプログラム２０２へ処理を移すインターフェースの役割をする。【００６７】  セキュアプログラム２０２は、秘密情報を扱って処理を行うプログラムである。本実施の形態では、セキュアプログラム２０２は、暗号化コンテンツ１２１をコンテンツ鍵１３１を用いて復号する復号プログラムである。また、セキュアプログラム２０２は、当該セキュアプログラム２０２の起動直後に、後述するＺＩセクションＢ７１２のゼロ初期化処理を実行する。【００６８】  なお、本実施の形態において、メモリ１０７は、ＲＯＭとＲＡＭとから構成されるとしているが、これに限定するわけではない。メモリ１０７は、プログラムが記憶できるプログラム記憶部と、プログラム動作時に利用するワークメモリが記憶できるワークメモリ記憶手段とを備えていればよい。例えば、プログラム記憶手段として、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）やＦｌａｓｈＲＯＭなどを利用してもよいし、ワークメモリ記憶手段として、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ）、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）などを利用してもよい。【００６９】  上述したＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、コンパイル装置３０において、１個以上のＯＳ依存バイナリデータとして生成され、セキュアプログラム２０２は、コンパイル装置４０において、１個以上のＯＳ非依存バイナリデータとして生成される。
こうして生成された１個以上のＯＳ依存バイナリデータと１個以上のＯＳ非依存バイナリデータとが、ＲＯＭライタにより、ＲＯＭに書き込まれる。図５は、こうしてＲＯＭに書き込まれた結果を示している。【００７０】  （各バイナリデータのセクション構成）
ここで、コンパイル装置３０におけるコンパイル及びリンクにより生成された各ＯＳ依存バイナリデータのセクション構成について説明する。
各ＯＳ依存バイナリデータは、図６に示すように、ＺＩセクション５０１、ＲＷセクション５０２及びＲＯセクション５０３から構成されている。【００７１】  ＺＩセクション５０１は、ゼロ初期化対象データ領域である。各プログラムの初期化の段階で、このセクション内のデータは、ゼロで初期化されなければならない。
ＲＷセクション５０２は、読み書き可能なセクションであり、読み書き可能なデータが配置されるセクションである。
ＲＯセクション５０３は、読み込みのみ可能なセクションであり、実行可能なコード（命令）が配置されるセクションである。【００７２】  図５では、メモリ１０７内をＲＯＭとＲＡＭに区別して記述していないが、実際は、図６に示すように、各ＯＳ依存バイナリデータのＺＩセクションとＲＷセクションはＲＡＭに配置され、ＲＯセクションに対応するものはＲＯＭに配置される。
また、コンパイル装置４０におけるコンパイル及びリンクにより生成された各ＯＳ非依存バイナリデータ４４０ａ、４４０ｂ、・・・も、それぞれ、図６に示すように、ＺＩセクション、ＲＷセクション及びＲＯセクションから構成されている。【００７３】  セキュアプログラム２０２が起動する前に、セキュアプログラム２０２を構成するＺＩセクションは、ゼロで初期化されなければならない。しかし、ＺＩセクションのサイズが大きいと、ゼロ初期化処理に時間を要することになる。端末の応答性能が重要とされる電子機器においては、初期化処理の時間をなるべく削減して、セキュアプログラム２０２の起動を高速に行いたい。【００７４】  この高速化のために、ＺＩセクションを複数のサブセクションに分割し、セキュアプログラム２０２が起動される以前に、一部のサブセクションのゼロ初期化処理を行い、セキュアプログラム２０２が起動された直後に、残りのサブセクションのゼロ初期化処理を行う。このように、初期化処理を分割することにより、セキュアプログラム２０２における初期化処理の高速化が可能となる。このシーケンスについては、図１０及び図１１を用いて、後述する。【００７５】  （メモリ１０７の論理アドレスと物理アドレス）
次に、メモリ１０７の論理アドレスと物理アドレスの関係について簡単に説明をする。
各プログラム中において用いられるアドレスは、論理アドレスであり、これをＭＭＵ１０３が物理アドレスに変換して実際にメモリ１０７にアクセスする。つまり、上述したＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３及びセキュアプログラム２０２において、メモリ１０７が形成する記憶空間を指し示すアドレスは、論理アドレスであり、ＭＭＵ１０３は、これらのプログラムにおいて用いられる論理アドレスを物理アドレスへ変更し、物理アドレスにより、メモリ１０７が形成する記憶空間を指し示す領域へのアクセスが行われる。【００７６】  携帯電話１０の電源が投入された直後であって、ＭＭＵ１０３の初期化が行われていない場合には、各プログラムには、論理アドレスは割り当てられない。また、物理アドレスと論理アドレスの変換作業が可能となるのは、ＭＭＵ１０３が有効な状態にあるときである。
（メモリ１０７のメモリマップ）
メモリ１０７における物理アドレスと論理アドレスとの対応関係を図７に示す。【００７７】  メモリ１０７には、上述したように、セキュアプログラム２０２、ＩＰＬプログラム２０１、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３が配置され、また、ＯＳ用メインメモリ６０１及びセキュアプログラム用ワークメモリ６０２が配置されている。
ここで、セキュアプログラム２０２は、ＲＯＭ上におけるＯＳの管理外領域６５１に配置され、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、ＲＯＭ上におけるＯＳの管理領域６５２に配置されている。また、ＯＳ用メインメモリ６０１は、ＲＡＭ上におけるＯＳの管理領域６５３に配置され、セキュアプログラム用ワークメモリ６０２は、ＲＡＭ上におけるＯＳの管理外領域６５４に配置されている。【００７８】  物理アドレス０ｘ０８００００００から０ｘ０８０Ｃ００００により示されるＲＯＭ内の領域に、ＩＰＬプログラム２０１が存在する。ＩＰＬプログラム２０１は、ＯＳプログラム２１０が起動する前に実行されるコード（プログラム命令）であり、ＩＰＬプログラム２０１には、論理アドレスは割り当てられていない。なお、本明細書において、０ｘに続く文字列は、１６進数による表現である。【００７９】  ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、物理アドレス０ｘ０８０Ｄ００００から０ｘ０ＢＥ１００００により示されるＲＯＭ内の領域に存在し、この領域には、論理アドレス０ｘＤ０００００００から０ｘＤ３Ｄ４００００がＯＳにより割り当てられる。
ＯＳ用メインメモリ６０１は、ＯＳやＯＳ上で動作するプログラムが利用するワークメモリであり、物理アドレスが０ｘ１０００００００から０ｘ１１Ｅ０００００のＲＡＭ内の領域に存在し、この領域には、論理アドレス０ｘＣ０００００００から０ｘＣ１Ｅ０００００が割り当てられる。【００８０】  セキュアプログラム２０２は、セキュアプログラムの実行コード（プログラム命令）が書かれており、物理アドレス０ｘ００２６００００から０ｘ００３５００００のＲＯＭ内の領域に存在し、この領域には、論理アドレス０ｘＦＦＡ０００００から０ｘＦＦＡＦＦＦＦＦが割り当てられる。
セキュアプログラム用ワークメモリ６０２は、セキュアプログラム２０２が利用するワークメモリであり、物理アドレス０ｘ１１Ｆ０００００から０ｘ１１ＦＦＦＦＦＦのＲＡＭ内の領域に存在し、この領域には、論理アドレス０ｘＦＦＢ０００００から０ｘＦＦＢＦＦＦＦＦが割り当てられる。【００８１】  上述したような論理アドレスの指定は、ＯＳプログラム２１０のカーネルの初期化処理において行われる。
なお、コンパイル装置３０が記憶しＯＳ依存リンク部３２０において用いられるアドレス指定ファイル３２２、及びコンパイル装置４０が記憶しＯＳ非依存リンク部４２０において用いられるアドレス指定ファイル４２２においては、上述したようにアドレスが割り当てられるように記述されている。【００８２】  なお、本実施の形態では、上述したように物理アドレス及び論理アドレスを割り当てているが、実装対象の機器によって変わるものであり、本発明が、このアドレス値に限定されるわけではない。
（セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２）
次に、セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２の内容について、図８を用いて、さらに詳しく説明する。【００８３】  セキュアプログラム用ワークメモリ６０２は、ＺＩセクションを２個に分割したＺＩセクションＡ７１１、ＺＩセクションＢ７１２及びＲＷセクション７１３から構成されている。
ＺＩセクションＡ７１１及びＺＩセクションＢ７１２は、セキュアプログラム２０２が実行される前にゼロ初期化され、セキュアプログラム２０２により利用されるデータが格納されるデータ格納セクションである。本実施の形態では、セキュアプログラム２０２の初期化処理を高速にするために、ＺＩセクションは、ＺＩセクションＡ７１１及びＺＩセクションＢ７１２に分割されている。【００８４】  セキュアプログラム用ワークメモリ６０２のＺＩセクションのゼロ初期化処理においては、携帯電話１０の電源が投入された直後に、ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム２０２の起動直後に、セキュアプログラム２０２により、ＺＩセクションＢ７１２のゼロ初期化処理が実行される。【００８５】  このようにユーザによるコンテンツ再生要求がされるよりも前に、ＺＩセクションＡ７１１のゼロ初期化処理を行っておくことにより、ユーザによるコンテンツ再生要求後からセキュアプログラム２０２の初期化処理が完了するまでの時間を短縮することができ、ユーザの待ち時間を短縮することが可能となる。また、ＺＩセクションの初期化処理を分散させることにより、不正解析者によるセキュアプログラム２０２の解析を困難にさせることも可能となる
ＲＷセクション７１３は、セキュアプログラム２０２が利用する読み書き可能なデータが格納される領域である。【００８６】  なお、セキュアプログラム用ワークメモリ６０２は、セキュアプログラム２０２のスタック領域として利用してもよい。
セキュアプログラム２０２は、セキュアＡＰＩ分岐処理７０１、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４から構成される。【００８７】  セキュアＡＰＩ分岐処理７０１、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４は、図８に示すように、それぞれ、論理アドレス「０ｘＦＦＡ０００００」、「０ｘＦＦＡ０１０００」、「０ｘＦＦＡ０２０００」及び「０ｘＦＦＡ０３０００」により開始位置が示されるセキュアプログラム２０２内の領域に格納されている。
セキュアＡＰＩ分岐処理７０１は、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４のそれぞれへの分岐先アドレス情報を含むＡＰＩ分岐テーブル８００（後述する）を格納している。【００８８】  セキュアプログラム２０２の各ＡＰＩを識別する識別子は、セキュアプログラム呼出部２１２から、切替デバイスドライバ２１３を経由し、セキュアＡＰＩ分岐処理７０１へ出力される。セキュアＡＰＩ分岐処理７０１は、切替デバイスドライバ２１３より識別子を受け取り、ＡＰＩ分岐テーブル８００から受け取った識別子に対応する分岐先アドレスを抽出し、抽出した分岐先アドレスへ実行を分岐する。【００８９】  ＺＩセクションＢ初期化ＡＰＩ７０２は、ＺＩセクションＢ７１２のゼロ初期化処理を行う実行コード（プログラム命令）である。
セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４は、それぞれ、セキュアプログラムのＡＰＩ処理を行う実行コード（プログラム命令）である。
なお、本実施の形態１では、セキュアプログラムのセキュアなＡＰＩをセキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４の２個として説明しているが、２個に限定するわけではなく、２個以上存在してもよい。【００９０】  （ＡＰＩ分岐テーブル８００のデータ構造）
ＡＰＩ分岐テーブル８００のデータ構造を図９に示す。
ＡＰＩ分岐テーブル８００は、複数の分岐先アドレス情報８１１、８１２及び８１３から構成されており、分岐先アドレス情報８１１、８１２及び８１３は、それぞれ、セキュアプログラム２０２に含まれているＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４に対応しており、各分岐先アドレス情報は、識別子と分岐先アドレスとを含む。【００９１】  ここで、識別子は、当該識別子を含む分岐先アドレス情報に対応しているＡＰＩを識別する識別情報である。また、分岐先アドレスは、当該分岐先アドレスを含む分岐先アドレス情報に対応しているＡＰＩがセキュアプログラム２０２内において格納されている位置を示す論理アドレスである。
次に、分岐先アドレス情報８１１、８１２及び８１３についてさらに説明する。【００９２】  分岐先アドレス情報８１１は、図９に示すように、識別子８０１「１」と分岐先アドレス８０２「０ｘＦＦＡ０１０００」とを含む。分岐先アドレス情報８１１は、ＺＩセクションＢ初期化ＡＰＩ７０２に対して、識別子８０１「１」が割り当てられ、論理アドレス「０ｘＦＦＡ０１０００」により開始位置が示されるセキュアプログラム２０２内の領域において、ＺＩセクションＢ初期化ＡＰＩ７０２の実行コード（プログラム命令）が記憶されていることを示している。【００９３】  従って、識別子として「１」が指定され、セキュアＡＰＩ分岐処理７０１により、「０ｘＦＦＡ０１０００」に分岐すると、ＺＩセクションＢ初期化ＡＰＩ７０２が実行される。
また、分岐先アドレス情報８１２は、図９に示すように、識別子８０３「２」と分岐先アドレス８０４「０ｘＦＦＡ０２０００」とを含む。分岐先アドレス情報８１２は、セキュアＡＰＩ＿Ａ７０３に対して、識別子８０３「２」が割り当てられ、論理アドレス「０ｘＦＦＡ０２０００」により開始位置が示されるセキュアプログラム２０２内の領域において、セキュアＡＰＩ＿Ａ７０３の実行コード（プログラム命令）が記憶されていることを示している。【００９４】  従って、識別子として「２」が指定され、セキュアＡＰＩ分岐処理７０１により、「０ｘＦＦＡ０２０００」に分岐すると、セキュアＡＰＩ＿Ａ７０３が実行される。
さらに、分岐先アドレス情報８１３は、図９に示すように、識別子８０５「３」と分岐先アドレス８０６「０ｘＦＦＡ０３０００」とを含む。分岐先アドレス情報８１３は、セキュアＡＰＩ＿Ｂ７０４に対して、識別子８０５「３」が割り当てられ、論理アドレス「０ｘＦＦＡ０３０００」により開始位置が示されるセキュアプログラム２０２内の領域において、セキュアＡＰＩ＿Ｂ７０４の実行コード（プログラム命令）が記憶されていることを示している。【００９５】  従って、識別子として「３」が指定され、セキュアＡＰＩ分岐処理７０１により、「０ｘＦＦＡ０３０００」に分岐すると、セキュアＡＰＩ＿Ｂ７０４が実行される。
なお、本実施の形態では、ＡＰＩ分岐テーブル８００は、識別子と分岐先アドレスとを含む複数個の分岐先アドレス情報から構成されているが、この構成に限定されるわけではなく、所望のＡＰＩに分岐する処理を行うるためのアドレス情報が格納されていればよい。【００９６】  （３）セキュアＡＰＩの実行のシーケンス
次に、セキュアプログラム２０２のセキュアＡＰＩが実行されるまでのシーケンスについて説明する。
（ａ）アプリケーションソフト起動までのシーケンス
ここでは、リセットの後、ＯＳプログラム２１０を起動し、ＯＳ上で動作するアプリケーションソフトが起動されるまでのシーケンスについて、図１０を用いて説明する。【００９７】  本実施の形態においては、セキュアプログラム２０２が、メモリ１０７内のＯＳの管理外領域においてワークメモリ（ＲＡＭ）として利用するセキュアプログラム用ワークメモリ６０２内のＺＩセクションのデータの初期化処理に係る時間を短縮するために、上述したように、セキュアプログラムのＲＡＭデータの初期化処理を分割している。具体的には、ＺＩセクションの初期化処理を２段階に分割している。【００９８】  携帯電話１０は、利用者による電源投入などにより、リセットを受け付ける（ステップＳ９００）。
リセット後、ＩＰＬプログラム２０１は、ＯＳの起動に必要なハードウェアを初期化する。（ステップＳ９０１）
次に、ＩＰＬプログラム２０１は、ＺＩセクションＡ７１１のデータの初期化を実施する。（ステップＳ９０２）
ＺＩセクションＡ７１１のデータの初期化が終了すると、カーネルに分岐する（ステップＳ９０３〜Ｓ９０４）。【００９９】  カーネルに分岐後、以下に示すカーネルの初期化処理が実行される。まず、カーネルの初期化処理としては、ＭＭＵ１０３の初期化が実行され（ステップＳ９０５）、次に、携帯電話１０が備え、ＯＳが利用する各種デバイスの初期化が実行される（ステップＳ９０６）。
カーネルの初期化が終了すると、ＯＳが起動されたことになり、その後、各アプリケーションソフトが起動される（ステップＳ９０７）。【０１００】  ここで、アプリケーションソフトのうち、ユーザによる操作により起動されるものが存在してもよい。ステップＳ９０７が実行されると、携帯電話としての機能が有効となり、着信、発信等が行える状態となり、ユーザが携帯電話上の各種操作を行える状態となる。
（ｂ）セキュアプログラム２０２の実行までのシーケンス
ここでは、セキュアプログラム２０２が実行されるまでのシーケンスを、図１１及び図１２を用いて、説明する。【０１０１】  ここで、図１１は、セキュアプログラム２０２のＺＩセクションの初期化処理が完了するまでのシーケンスを示し、図１２は、セキュアプログラム２０２のＺＩセクションの初期化完了後、セキュアＡＰＩの起動までのシーケンスを示している。
ユーザによる音楽再生のボタン操作が行われると（ステップＳ１０００）、ＯＳは、セキュアプログラム呼出部２１２へ処理を移す（ステップＳ１００１〜ステップＳ１００２）。【０１０２】  次に、セキュアプログラム呼出部２１２は、切替デバイスドライバ２１３をオープンし（ステップＳ１００３）、識別子として「１」を指定して、切替デバイスドライバ２１３に対し、ライブラリコールし、切替デバイスドライバ２１３へ処理が移る（ステップＳ１００４〜ステップＳ１００５）。
次に識別子「１」を受け取った切替デバイスドライバ２１３は、セキュアＡＰＩ分岐処理７０１に分岐し、セキュアＡＰＩ分岐処理７０１へ処理が移る（ステップＳ１００６〜ステップＳ１００７）。【０１０３】  セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し（ステップＳ１００８）、ＡＰＩ分岐テーブル８００から、識別子「１」に対応する分岐先アドレスを取得する。ここでは、識別子「１」に対応するＺＩセクションＢ初期化ＡＰＩ７０２の分岐先アドレス８０２「０ｘＦＦＡ０１０００」が取得され、論理アドレス「０ｘＦＦＡ０１０００」により示される格納位置に格納されている実行コード、つまり、ＺＩセクションＢ初期化ＡＰＩ７０２に分岐する（ステップＳ１００９〜ステップＳ１０１０）。【０１０４】  「０ｘＦＦＡ０１０００」に処理が分岐すると、ＺＩセクションＢ初期化ＡＰＩ７０２が実行される（ステップＳ１０１１）。これにより、ＺＩセクションＢ７１２の初期化が完了する。
ＺＩセクションＢ７１２の初期化が完了すると、セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、ＯＳが利用するものに戻す（ステップＳ１０１２）。
その後、ＯＳ上で動作するセキュアプログラム呼出部２１２へ処理が移る（ステップＳ１０１３〜ステップＳ１０１４）。【０１０５】  以上により、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４が利用するＺＩセクションＡ７１１及びＺＩセクションＢ７１２の初期化が完了する。
次に、セキュアプログラム呼出部２１２は、セキュアＡＰＩの識別子を指定し、切替デバイスドライバ２１３に対し、ライブラリコールし、切替デバイスドライバ２１３へ処理が移る（ステップＳ１０１５〜ステップＳ１０１６）。【０１０６】  切替デバイスドライバ２１３は、指定された識別子をセキュアＡＰＩ分岐処理７０１へ出力し、セキュアＡＰＩ分岐処理７０１へ分岐する（ステップＳ１０１７〜ステップＳ１０１８）。
セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し（ステップＳ１０１９）、次に、ＡＰＩ分岐テーブル８００から、受け取った識別子に対応する分岐先アドレスを取得し、取得した分岐先アドレスへ分岐する（ステップＳ１０２０〜ステップＳ１０２１）。【０１０７】  次に、分岐先アドレスで示される位置に格納されるセキュアプログラム２０２のＡＰＩ処理が実行される（ステップＳ１０２２）。
セキュアＡＰＩの処理が終了すると、スタックポインタの設定を、ＯＳが利用するものに戻し（ステップＳ１０２３）、その後、セキュアプログラム呼出部２１２及びＯＳへ処理が移る（ステップＳ１０２４〜ステップＳ１０２６）。【０１０８】  図１２に示すステップＳ１０１５からステップＳ１０２６までの処理は、図１１に示すステップＳ１０００からステップＳ１０１４までの処理が完了した後、複数回実行されてもよい。図１１に示す全てのステップが完了していることは、セキュアプログラムが実行する際に初期化されるべきＺＩセクションの初期化処理完了を意味しているからである。
なお、本実施の形態では、セキュアＡＰＩ＿Ａ７０３は、コンテンツ鍵取得を行うコンピュータプログラムであり、セキュアＡＰＩ＿Ｂ７０４は、暗号化コンテンツ１２１をコンテンツ鍵１３１を用いて復号するコンピュータプログラムである。【０１０９】  この場合、まず図１１に示す全てのステップが実行されＺＩセクションの初期化が完了する。次に、識別子を「２」として、図１２に示す全てのステップが実行されることにより、コンテンツ鍵１３１が取得される。次に、識別子を「３」として、図１２に示す全てのステップが実行されることにより、コンテンツ鍵１３１を用いて暗号化コンテンツ１２１が復号される。【０１１０】  ２．その他の変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）セキュアプログラム２０２は、セキュアプログラム２０２の実行中に、ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生した場合に、セキュアプログラム２０２による処理を一時的に中断し、セキュアプログラム２０２による処理対象のセキュアデータを暗号化し、割込みに対応する処理が完了した後に、暗号化セキュアデータを復号し、セキュアプログラム２０２による処理を一時的に中断した点から、セキュアプログラム２０２による処理を継続して実行するとしてもよい。具体的には、以下に示す通りである。【０１１１】  ＩＰＬで初期化される領域であるＺＩセクションＡ７１１又はセキュアプログラム２０２により初期化される領域であるＺＩセクションＢ７１２に、セキュアプログラム２０２の初期化完了フラグを設ける。初期化完了フラグは、セキュアプログラム２０２によるＺＩセクションＢ７１２の初期化完了後、「１」に設定され、セキュアプログラム２０２が実行されている間は、常に、「１」となっている。【０１１２】  このように、初期化完了フラグをＺＩセクションに設けてもよい。しかしＺＩセクションに限定されることなく、ＲＷセクションに初期化完了フラグを設けるとしてもよい。
一般的に、コンピュータシステムにおいては、ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生すると、ＣＰＵの例外ベクタテーブルに分岐する。例外ベクタテーブルには、割込み要因毎に割込み処理ルーチンが登録されており、例外ベクタテーブルにより、割込み要因毎に、割込み処理ルーチンへ分岐し、所望の割込み処理が行われる。【０１１３】  本変形例においては、例外ベクタテーブルにおいて、予め、割込みが発生するとセキュアプログラム２０２に分岐するように登録しておく。このようにすることで、割込みが発生するたびに、セキュアプログラム２０２へ一旦処理が移るようになる。
セキュアプログラム２０２の実行中に割込みが発生した場合のシーケンスを、図１３を用いて、説明する。【０１１４】  セキュアプログラム２０２は、ＺＩセクションＢの初期化を完了すると（ステップＳ１０１１）、次に、初期化完了フラグを「１」にセットする（ステップＳ１２０１）。
セキュアプログラム２０２が、実行されている間は、初期化完了フラグは、常に、「１」となっている。
セキュアプログラム２０２は、セキュアＡＰＩの実行を開始する（ステップＳ１０２２）。【０１１５】  ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生すると（ステップＳ１２０２）、ＣＰＵの例外ベクタテーブルに処理が移る。例外ベクタテーブルには、あらかじめセキュアプログラム２０２へ分岐するように、ベクタが登録されているので、セキュアプログラム２０２に分岐する（ステップＳ１２０３）。
セキュアプログラム２０２に分岐後、セキュアプログラム２０２は、初期化完了フラグが「１」であるか否かを判断する（ステップＳ１２０４）。【０１１６】  初期化完了フラグが、「１」であれば（ステップＳ１２０４でＹＥＳ）、セキュアプログラム２０２の対象となる処理が実行中であるので、セキュアプログラム２０２は、割込み発生時のポイントを退避し（ステップＳ１２０６）、セキュアプログラム２０２が実行中に利用しているセキュアな情報に関連するセキュアデータ（ランタイムデータ）を暗号化して暗号化セキュアデータを生成する（ステップＳ１２０７）。暗号化セキュアデータの生成後、ＯＳへ処理を移し（ステップＳ１２０８）、ＯＳは、割込み処理を実施し（ステップＳ１２０９）、割込み処理が終了したら、セキュアプログラム２０２へ処理を移す（ステップＳ１２１０）。セキュアプログラム２０２は、初期化完了フラグが「１」であるか否かを判断する（ステップＳ１２１１）。初期化完了フラグが、「１」であれば（ステップＳ１２１１でＹＥＳ）、セキュアプログラム２０２は、暗号化セキュアデータを復号して復号セキュアデータを生成し（ステップＳ１２１３）、割込みが発生してセキュアプログラム２０２の処理が中断していたポイントに復帰し（ステップＳ１２１４）、セキュアプログラム２０２の処理を継続する（ステップＳ１２１５）。【０１１７】  セキュアプログラム２０２の対象である処理の実行が終了する直前に、セキュアプログラム２０２は、初期化完了フラグを「０」に設定し（ステップＳ１２１６）、その後、セキュアプログラム２０２の実行が終了する。
初期化完了フラグが、「１」でなければ（ステップＳ１２０４でＮＯ、又はステップＳ１２１１でＮＯ）、ＯＳへ処理を移す（ステップＳ１２０５、又はステップＳ１２１２）。【０１１８】  （２）本実施の形態では、セキュアプログラム２０２は、暗号化コンテンツを復号する復号プログラムであるとしているが、これに限定されることなく、秘密情報を扱うプログラムであるとしてもよい。
（３）本実施の形態では、切替デバイスドライバ２１３が、ＯＳ依存バイナリデータからＯＳ非依存バイナリデータへの切替インターフェースの働きをしているが、切替デバイスドライバ２１３を利用することなく、セキュアプログラム呼出部２１２からセキュアＡＰＩ分岐処理７０１へ直接分岐するようにしてもよい。【０１１９】  （４）本実施の形態では、セキュアＡＰＩ分岐処理７０１が、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し、また、スタックポインタの設定を、ＯＳが利用するものに戻すとしているが、これには、限定されない。
切替デバイスドライバ２１３は、ＯＳからセキュアプログラムへの切替の際に、切替の時点でＯＳが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたセキュアプログラム用のスタックポインタへ戻す命令を含むとしてもよい。また、切替デバイスドライバ２１３は、セキュアプログラムからＯＳへの切替の際に、切替の時点でセキュアプログラムが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたＯＳ用のスタックポインタへ戻す命令を含むとしてもよい。【０１２０】  また、セキュアＡＰＩ分岐処理７０１が上記を行うとしてもよい。
（５）上述したセキュアプログラムは、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）を構成するその一部のプログラムであるとしてもよい。ＢＩＯＳとは、一般的に、コンピュータに接続されたディスクドライブ、キーボード、ビデオカードなどの周辺機器を制御するプログラム群である。【０１２１】  （６）上記の実施の形態では、コンパイル装置３０及びコンパイル装置４０は、別々の装置であるとしているが、これには限定されない。コンパイル装置３０及びコンパイル装置４０のそれぞれが有する構成要素を備えた１台のコンパイル装置から構成されるとしてもよい。
このコンパイル装置は、オペレーティングシステムを構成するソースコードにコンパイルを施して、第１オブジェクトを生成する第１コンパイル部と、前記第１オブジェクトのシンボル解決と再配置と第１ライブラリに含まれるプログラムとのリンクとを行って、オペレーティングシステムである実行可能形式の第１ソフトウェアを生成する第１リンク部と、秘匿情報を利用する処理を構成するソースコードにコンパイルを施して、第２オブジェクトを生成する第２コンパイル部と、前記第２オブジェクトのシンボル解決と再配置と第２ライブラリに含まれるプログラムとのリンクを行って、秘匿情報を利用する処理からなる実行可能形式の第２ソフトウェアを生成する第２リンク部とを備える。【０１２２】  （７）本実施の形態では、セキュアプログラムソースに対して耐タンパ化するような例を示していないが、セキュアプログラムソースに対して耐タンパ化手法を施してもよい。
耐タンパ化手法とは、オリジナルコード（プログラム命令）に対して、実行に影響のない不要な冗長コードの追加、ある命令コードの別の等価な命令コードへの置換え、制御構造の複雑化、１つのモジュール（プログラム命令の集合）の複数のモジュールへの分割化などの難読化をしておくこと、又はオリジナルコードを予め暗号化しておき、実行時に復号することである。耐タンパ化手法を適用させることでセキュアプログラム２０２のセキュリティレベルを向上させてもよい。コード暗号化を施す場合は、復号したコードを展開するＲＡＭ領域は、ＯＳがアクセス不可能なエリア、つまり、管理外領域とする。【０１２３】  この技術に関しては、非特許文献１、非特許文献２、非特許文献３に詳細に述べられているので説明は省略する。
（８）上記の実施の形態では、ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム２０２の起動直後に、セキュアプログラム２０２により、ＺＩセクションＢ７１２のゼロ初期化処理が実行されるとしているが、これには、限定されない。【０１２４】  ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１の中の一部の変数のゼロ初期化処理が実行され、セキュアプログラム２０２により、ＺＩセクションＢ７１２の一部の変数のゼロ初期化処理が実行されるとしてもよい。
また、上記の実施の形態及び変形例においては、ＺＩセクションを、ゼロ値で初期するとしているが、これには限定されない。ゼロ値以外の固定値、例えば、「０ｘｆｆｆｆ」などを、ＺＩセクションに書き込むとしてもよい。【０１２５】  （９）以上説明したように、本発明は、プログラム記憶部とデータ記憶部を備え、前記プログラム記憶部は、第一ソフトウェアと第二ソフトウェアを記憶し、前記データ記憶部は、第一データ記憶部と第二データ記憶部からなり、前記第一データ記憶部は、前記第一ソフトウェアがアクセス可能なエリアであり、前記第二データ記憶部は、前記第二ソフトウェアがアクセス可能なエリアであり、前記第一ソフトウェアは、前記第二データ記憶部にアクセス不可能であることを特徴とするセキュア処理装置である。【０１２６】  ここで、前記第一ソフトウェアは、オペレーティングシステムであり、前記第二ソフトウェアは、秘密情報を利用するソフトウェアであるとしてもよい。
ここで、第一コンパイラは、第一ソフトウェアのソースコードを入力とし、第一オブジェクトを出力し、第一リンカは、前記第一オブジェクトのシンボル解決と再配置と第一ライブラリをリンクする機能を有し、前記第一オブジェクトを入力とし、前記第一ソフトウェアを出力し、前記第一ソフトウェアは、前記第一コンパイラおよび前記第一リンカで作成された実行可能データであり、第二コンパイラは、前記第一コンパイラとは異なるコンパイラであって、前記第二ソフトウェアのソースコードを入力とし、第二オブジェクトを出力し、第二リンカは、前記第一リンカとは異なるリンカであり、前記第二オブジェクトのシンボル解決と再配置と第二ライブラリ群をリンクする機能を有し、前記第二オブジェクトを入力とし、前記第二ソフトウェアを出力し、前記第二ソフトウェアは、前記第二コンパイラおよび前記第二リンカで作成された実行可能データであるとしてもよい。【０１２７】  ここで、前記第二ソフトウェアは、改ざんや解析に対して耐性をもったソフトウェアであるとしてもよい。
ここで、前記第二ソフトウェアが利用する前記第二データ記憶部の初期化処理を少なくとも１つ以上の分割初期化処理に分割するとしてもよい。
ここで、前記分割初期化処理のうち、少なくとも１つ以上の分割初期化処理は、前記第二ソフトウェアの実行要求が発生するよりも前に実行されるとしてもよい。【０１２８】  ここで、前記分割初期化処理は、前記第二ソフトウェアの実行前に処理されるように分散して前記プログラム記憶部に記憶されているとしてもよ。
ここで、前記プログラム記憶部は、さらにＩＰＬを含み、前記ＩＰＬが少なくとも１つ以上の前記分割初期化処理を実行するとしてもよい。
ここで、前記プログラム記憶部は、さらに切替デバイスドライバを含み、前記切替デバイスドライバが、前記第一ソフトウェアから第二ソフトウェアに処理を移すとしてもよい。【０１２９】  ここで、前記切替デバイスドライバは、前記第一ソフトウェアが利用する第一スタックポインタと前記第二ソフトウェアが利用する第二スタックポインタを管理し、前記第一ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第一スタックポインタに設定し、前記第二ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第二スタックポインタに設定するとしてもよい。【０１３０】  （１０）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。【０１３１】  （１１）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。【０１３２】  また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されてもよい。また、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。【０１３３】  さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
（１２）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。【０１３４】  （１３）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。【０１３５】  また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。【０１３６】  また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１４）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１３７】  本発明にかかるセキュア処理装置および方法は、秘密情報を利用したプログラムをＯＳ管理外のメモリ上で動作させることで、ＯＳ上で動作するソフトウェアデバッガからの解析を防止する効果と、さらにＯＳ管理外で動作するプログラムのＲＡＭデータの初期化処理を分割して行うことで、ユーザ要求発生後から前記プログラム起動までの処理を短縮する効果とを有し、セキュアなソフトウェアの処理方法として有用である。【０１３８】  本発明を構成する各装置は、コンテンツを制作し、配給するコンテンツ配給産業において、また、その他の秘密を維持する必要がある情報を扱う産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図１】
2006129641.tif 000002
【図２】
2006129641.tif 000003
【図３】
2006129641.tif 000004
【図４】
2006129641.tif 000005
【図５】
2006129641.tif 000006
【図６】
2006129641.tif 000007
【図７】
2006129641.tif 000008
【図８】
2006129641.tif 000009
【図９】
2006129641.tif 000010
【図１０】
2006129641.tif 000011
【図１１】
2006129641.tif 000012
【図１２】
2006129641.tif 000013
【図１３】
2006129641.tif 000014
【手続補正書】
【提出日】平成19年3月10日(2007.3.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とするコンピュータシステム。
【請求項２】
前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、
前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、
前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出す
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含む
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、
前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、
前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、
前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含む
ことを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
前記セキュアプログラムは、難読化が施されている
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項７】
前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われる
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項８】
前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行される
ことを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行される
ことを特徴とする請求項８に記載のコンピュータシステム。
【請求項１０】
一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、
セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行される
ことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
集積回路であって、
基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とする集積回路。
【請求項１２】
プログラム生成装置であって、
オペレーティングシステムを構成するソースコードから、実行対象の装置が有する管理領域にのみアクセスする第１オブジェクトを生成する第１オブジェクト生成部と、
秘匿情報を使う処理のソースコードから、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域にのみアクセスする第２オブジェクトを生成する第２オブジェクト生成部と
を備えることを特徴とするプログラム生成装置。
【請求項１３】
基本プログラム及びセキュアプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
前記基本プログラムは、オペレーティングシステムを構成し、前記オペレーティングシステムの管理下で動作する通常プログラムに対して、実行対象の装置が有する管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域のみをアクセス空間としてアクセスする命令を含む
ことを特徴とする記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改ざんや解析を防止する技術に関する。
【背景技術】
【０００２】
プログラムの不正な改ざんや解析を防止する技術については従来から研究されている。
例えば、パッケージとして売られているソフトウェアには、違法コピーによる使用を防ぐために、利用者に対してパスワードの入力を要求するものがある。このようなソフトウェアには、パスワードが正しいかどうかをチェックするコード（コンピュータプログラム）が含まれている。不正な利用者が、このソフトウェア内において、何らかの方法により、このチェックを行うコードが存在する場所を特定し、このチェックを無効にするようにこのコードに改ざんを加えたとするならば、この不正な利用者は、パスワードを知らなくてもこのソフトウェアを使用することができてしまう。
【０００３】
また、近年、ＰＣ（パーソナルコンピュータ）で視聴できる有料のデジタルコンテンツが提供されるようになってきている。この有料のデジタルコンテンツは不正にコピーされることを防ぐために暗号化されており、これを視聴するためのソフトウェアは、暗号を解くための復号アルゴリズム及び復号鍵を含んでいる。もしも、悪意のあるユーザが、視聴用のソフトウェアを解析して、復号鍵を特定することができれば、デジタルコンテンツを不正にコピーすることができるソフトウェアを作成することが可能になる。
【０００４】
以上のように、ソフトウェアの内容が解析されると、そのソフトウェアやデジタルコンテンツによるビジネスが成り立たなくなる。そのため、これらのソフトウェアの解析を防止する技術は必要不可欠である。
例えば、非特許文献１では、ソフトウェアの解析を防ぐための基本原則や具体的手法が記述されている。また、非特許文献２では、ソフトウェアの解析を防ぐためのツールとして開発されたＴＲＣＳ（Tamper Resistant Coding System）の技術課題とその対策が記述されている。また、非特許文献３では、ソフトウェアの違法コピーを防ぐためのソフトウェア的な保護手段（コピープロテクト技術）を無効化されないようにする技術が解説されている。
【０００５】
このようなソフトウェアの不正な解析や改ざんを防ぐ技術を「耐タンパ技術」と呼ぶ．
【非特許文献１】「逆解析や改変からソフトを守る」  日経エレクトロニクス  １９９８．１．５  （Ｐ２０９−２２０）
【非特許文献２】「ソフトウェアの耐タンパー化技術」富士ゼロックス  テクニカルレポート  Ｎｏ．１３
【非特許文献３】「ザ・プロテクト」秀和システム出版  １９８５年
【特許文献１】特開平１１−１５７０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
複数のＯＳが普及している現在において、ＯＳ上で動作するソフトウェアデバッガなどの解析ツールが比較的容易に入手できるようになってきている。
そのため、ＯＳに依存するライブラリを利用して、ＯＳ上で動作するソフトウェアが、秘匿情報を第三者に知られることなく、安全に処理するように、当該ソフトウェアについてセキュアな実装をした場合であっても、当該ソフトウェアについて、ＯＳ上で動作するデバッガに対して耐性が低いという問題点がある。すなわち、不正解析者により、ＯＳ上で動作するデバッガを用いて、ＯＳに依存するライブラリを呼び出している部分が特定され、さらに、秘密情報が特定される危険性がある。
【０００７】
本発明は、上記問題点に鑑み、不正解析者による秘密の処理の特定を困難にすることができるコンピュータシステム、集積回路及びプログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記目的を達成するために、本発明は、コンピュータシステムであって、基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含むことを特徴とする。
【発明の効果】
【０００９】
この構成によると、セキュアプログラムは、オペレーティングシステムである基本プログラムに依存することなく、オペレーティングシステムの管理外領域にアクセスすることが可能である。一方、通常プログラムは、オペレーティングシステムである基本プログラムを介して、オペレーティングシステムの管理領域にアクセス可能であるが、オペレーティングシステムの管理外領域に対してはアクセスできないので、通常プログラムが、例えばソフトウェアデバッガである場合に、ソフトウェアデバッガは、管理外領域にアクセスできず、セキュアプログラムによる管理外領域へのアクセスについての安全性を保つことができるという優れた効果を奏する。
【００１０】
ここで、前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出すとしてもよい。
【００１１】
この構成によると、セキュアプログラムは、オペレーティングシステムの管理外領域に記憶されているので、上記のソフトウェアデバッガは、管理外領域に記憶されているセキュアプログラムにアクセスできず、セキュアプログラム自身の内容を安全に保つことができる。
ここで、前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含むとしてもよい。
【００１２】
この構成によると、上記のソフトウェアデバッガは、前記セキュアプログラムにより、オペレーティングシステムの管理外領域において格納される秘匿すべき情報にアクセスできず、これらの秘匿すべき情報の内容を安全に保つことができる。
ここで、前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含むとしてもよい。
【００１３】
この構成によると、基本プログラムから秘匿処理が必要な時等に、切替プログラムを介して、本来アクセスできないセキュアプログラムに一時的に処理を移すことができ、また、秘匿処理の終了後、再度オペレーティングシステムである基本プログラムに処理を戻すことができる。これにより、基本プログラムからでも、セキュアプログラムの安全性を確保したまま、セキュアプログラムの秘匿処理を利用することができる。
【００１４】
ここで、前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含むとしてもよい。
この構成によると、セキュアプログラムから基本プログラムへの切り替えの際、スタックポインタの設定を基本プログラムが利用するものに戻すので、基本プログラムの処理を続行することができる。また、基本プログラムからセキュアプログラムへの切り替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻すので、セキュアプログラムの処理を続行することができる。
【００１５】
ここで、前記セキュアプログラムは、難読化が施されているとしてもよい。
この構成によると、難読化により、セキュアプログラムの解析が困難となるので、セキュアプログラムの安全性をさらに高めることができる。
また、一般にソフトウェアの処理が実行される前に、実行対象となるソフトウェアが利用するデータは初期化される。不正解析者は、解析対象のソフトウェアの解析を、ソフトウェア初期化シーケンスから行おうとする。この場合、不正解析者が、データ初期化処理に注目し、秘密情報の利用場所を特定する可能性がある。
【００１６】
ここで、前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われるとしてもよい。
この構成によると、複数の初期化プログラムを用いて、それぞれの初期化処理が行われることにより、初期化処理が分割・分散し、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を困難にすることができる。
【００１７】
ここで、前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行されるとしてもよい。
この構成によると、セキュアプログラムによる秘匿処理に先行して、各初期化プログラムに実行により、各初期化処理が行われるので、秘匿処理において、誤った初期値が使われて、誤った処理が行われることはない。
【００１８】
ここで、前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行されるとしてもよい。
この構成によると、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を、さらに、困難にすることができる。
さらに、携帯電話などの電子機器においても耐タンパ技術を適用する場合、耐タンパ化されたソフトウェアが、利用するメモリサイズは増加する。そのため、前記耐タンパ化されたソフトウェアの初期化処理に要する時間が大きくなってしまい、即応性の求められる電子機器においては、ユーザによる所望の処理要求から、実際にソフトウェアが処理を開始するまでの初期化処理に多大な時間を要することになってしまう。
【００１９】
メモリの初期化処理の高速化に関する文献として、特許文献１に示されているメモリ管理方法がある。しかし、この方法ではプログラムのデータ初期化処理の高速化やセキュリティの向上に対する効果は得られない。
ここで、一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行されるとしてもよい。
【００２０】
この構成によると、ＯＳに依存しない環境で動作可能なセキュアソフトウェアの初期化処理を分割・分散することで、ユーザによる所望の処理要求から、実際にセキュアソフトウェアが処理を開始するまでの処理時間を短縮するとともに、さらに悪意のある解析者に対する耐性を向上させることができる。
以上説明したように、本発明によると、セキュアプログラムが実行するコード（ＲＯＭ上に存在する）およびセキュアプログラムが利用するワークメモリ（ＲＡＭ上に存在する）は、ＯＳ管理外の領域としているため、ＯＳ上で動作するソフトウェアデバッガからの解析を防ぐことが可能となる。
【００２１】
さらに、セキュアプログラムのＲＡＭデータの初期化処理を分割しているため、ユーザによるセキュアプログラム処理要求発生からセキュアプログラムの起動までの処理時間を短縮することができる。
さらに、分割した初期化処理を分散して実行することにより、セキュアプログラムの初期化処理から解析を行う悪意のある解析者に対して、解析対象範囲を拡大させることが可能となるため、解析を困難にし、セキュリティレベルを向上させることができる。
【００２２】
また、セキュアプログラムがＯＳに依存しない環境で動作するものであるので、セキュアプログラムの他ＯＳへの移植性が非常に高い。さらに、他ＯＳへ移植する際にもセキュアプログラムのＯＳ向けの変更が発生しないため、セキュリティレベルを落とすことなく移植することが可能となる。
【発明を実施するための最良の形態】
【００２３】
１．実施の形態
以下、本発明に係る１の実施の形態としてのセキュア処理システム１について、図面を参照しながら説明する。
１．１  セキュア処理システム１の構成
セキュア処理システム１は、図１に示すように、コンパイル装置３０、コンパイル装置４０、携帯電話１０及びメモリカード２０から構成されている。メモリカード２０は、携帯電話１０に装着される。
【００２４】
コンパイル装置３０は、携帯電話１０に導入されるＯＳ（Operating System。基本ソフトウェア又は基本プログラムとも呼ぶ。）のカーネルの動作について記述しているソースプログラム、及び当該ＯＳに依存するその他の動作を記述しているソースプログラムから、１個以上の実行形式のコンピュータプログラム（ＯＳ依存バイナリデータと呼ぶ。）を生成する。また、コンパイル装置４０は、前記ＯＳに依存しないその他の動作を記述しているソースプログラムから、１個以上の実行形式のコンピュータプログラム（ＯＳ非依存バイナリデータと呼ぶ。）を生成する。
【００２５】
携帯電話１０は、後述するように、ＣＰＵ（Central Processing Unit）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）などを含んで構成されるコンピュータシステムである。上記において生成されたＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータは、ＲＯＭライタにより、携帯電話１０が備えるＲＯＭに書き込まれる。こうして、ＲＯＭは、コンピュータプログラムであるＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータを記憶し、前記ＣＰＵが、前記コンピュータプログラムに従って動作することにより、携帯電話１０は、その一部の機能を達成する。ＯＳ依存バイナリデータであるコンピュータプログラムの一部は、ＯＳを構成しており、他の部分は、当該ＯＳの制御の元に動作する。
【００２６】
メモリカード２０は、一例として、音楽又は映像のコンテンツが暗号化されて生成された暗号化コンテンツ及び前記暗号化コンテンツを復号するために用いられるコンテンツ鍵を記憶している。
携帯電話１０は、ＲＯＭに書き込まれたＯＳ依存バイナリデータ及びＯＳ非依存バイナリデータに従って動作することにより、メモリカード２０から暗号化コンテンツを読み出し、読み出した暗号化コンテンツを前記コンテンツ鍵を用いて復号し、復号コンテンツを生成し、生成した復号コンテンツを音楽又は映像として出力する。
【００２７】
１．２  コンパイル装置３０の構成
コンパイル装置（プログラム生成装置とも呼ぶ。）３０は、図２に示すように、ＯＳ依存コンパイル部３１０、ＯＳ依存リンク部３２０、形式変換部３３０及び情報記憶部３５０から構成されている。コンパイル装置３０は、携帯電話１０の後述するメモリ１０７のＯＳの管理領域に配置するバイナリデータを生成する。
【００２８】
コンパイル装置３０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置３０を構成するＯＳ依存コンパイル部３１０、ＯＳ依存リンク部３２０、形式変換部３３０は、その機能を達成する。
【００２９】
（１）情報記憶部３５０
情報記憶部３５０は、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・、アドレス指定ファイル３２２、ＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・を記憶している。また、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、３４０ｃ、・・・を記憶するための領域を備えている。
【００３０】
ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、それぞれ、携帯電話１０に導入されるＯＳの各種処理を記述しているソースコード（ソースプログラム）の一部分であるコンピュータプログラムであってコンピュータ命令を含み、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、これらのソースコード全体で、当該ＯＳ処理を記述している。また、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・は、全体として、携帯電話１０のメモリ１０７上にＯＳプログラム２１０（後述する）として記憶されるバイナリデータに対応している。
【００３１】
ノンセキュアプログラムソース（通常プログラムとも呼ぶ。）３０２ａ、３０２ｂ、３０２ｃ、・・・は、それぞれ、ノンセキュアな処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、ノンセキュアプログラムソース３０２ａは、携帯電話１０のメモリ１０７上にノンセキュアプログラム２１１（後述する）として記憶されるバイナリデータに対応している。
【００３２】
セキュアプログラム呼出部ソース３０３ａは、携帯電話１０のメモリ１０７上に記憶されているセキュアプログラム２０２（後述する）を呼び出すように切替デバイスドライバ２１３（後述する）に依頼する処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、メモリ１０７上にはノンセキュアプログラム２１１（後述する）として記憶されるバイナリデータに対応する。切替デバイスドライバ２１３に依頼する処理は、本実施の形態では、ＯＳプログラム２１０のライブラリコールで行うものとする。セキュアプログラム呼出部ソース３０３ｂ、３０３ｃ、・・・についても同様である。
【００３３】
切替デバイスドライバソース３０４ａは、メモリ１０７上のセキュアプログラム呼出部２１２から依頼されたセキュアプログラム２０２の処理へ分岐させる処理が記述されたソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含み、メモリ１０７上には切替デバイスドライバ２１３（後述する）として記憶されるバイナリデータに対応する。
【００３４】
アドレス指定ファイル３２２は、ＯＳ依存リンク部３２０によって作成されるバイナリのＲＯＭデータやＲＡＭデータの配置アドレスを指定するファイルである。例えば、アドレス指定ファイル３２２は、ＯＳ依存リンク部３２０により生成される各ＯＳ依存バイナリデータについて、ターゲット装置（つまり、携帯電話１０）のメモリにおいて、配置されるべき位置を示す物理アドレスを含む。
【００３５】
（２）ＯＳ依存コンパイル部３１０
ＯＳ依存コンパイル部３１０は、これらのＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・を入力とし、高級言語で記述されたプログラムコードを低レベルなマシンコード（オブジェクトコード）、つまり、実行形式のコンピュータプログラムに変換して、それぞれ、オブジェクトファイルを生成する。
【００３６】
（３）ＯＳ依存リンク部３２０
ＯＳ依存リンク部３２０は、ＯＳ依存コンパイル部３１０で生成された各オブジェクトファイルに対し、再配置とシンボルの解決を行い、各オブジェクトファイル内にＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・の関数シンボルが存在するのであれば、関連するＯＳ依存ライブラリをリンクして、ＯＳ依存バイナリデータを生成する。
【００３７】
ＯＳ依存リンク部３２０は、アドレス指定ファイル３２２が指定されると、アドレス指定ファイル３２２内に記載された論理アドレスにおいてＲＯＭデータ、ＲＡＭデータを配置する。
（４）形式変換部３３０
形式変換部３３０は、ＯＳ依存リンク部３２０により生成された各ＯＳ依存バイナリデータを、ＲＯＭライターにより実際のＲＯＭメモリに書き込み可能な形式に変換して、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・を生成し、生成したＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・を情報記憶部３５０へ書き込む。形式変換部３３０により生成されるデータ形式には、インテルＨＥＸ形式やモトローラＳレコード形式などがある。
【００３８】
（５）ＯＳ管理外のＲＯＭ／ＲＡＭの設定
コンパイル装置３０は、以下に示すようにして、ＯＳ管理外のＲＯＭ／ＲＡＭの設定を行う。
（ａ）ＯＳ管理外のＲＡＭ領域の確保
例えば、物理アドレス「0x10000000」から物理アドレス「0x11FFFFFF」までをアクセス対象のメモリ空間として扱うことができるＯＳに対して、物理アドレス「0x10000000」から物理アドレス「0x11E00000」までをＯＳ管理のＲＡＭ領域として割り当て、物理アドレス「0x11F00000」から物理アドレス「0x11FFFFFF」までをＯＳ管理外のＲＡＭ領域として割り当てる場合には、カーネル起動時に必要なＲＡＭメモリパラメタのサイズを「0x1E00000」（バイト）と指定して、コンパイルする。
【００３９】
これにより、物理アドレス「0x10000000」から、指定されたサイズ「0x1E00000」の領域が、ＯＳ管理のＲＡＭ領域となり、その他の領域が、ＯＳ管理外のＲＡＭ領域となる。
（ｂ）セキュアプログラム用のＯＳ管理外のＲＯＭ領域とＯＳ管理外のＲＡＭ領域の物理−論理のマッピングの設定
セキュアプログラム用のＯＳ管理外のＲＯＭ領域とＯＳ管理外のＲＡＭ領域の物理−論理のマッピングを設定する場合には、以下に示すようにする。
【００４０】
ＯＳカーネルのメモリマッピングを指定するソースファイルにおいては、メモリマップを指定する構造体が存在する。Ｌｉｎｕｘの場合は、メモリマップ指定の構造体として、
map＿desc standard＿io＿desc[]＿initdata
が用意されている。
static struct map＿desc standard＿io＿desc[]＿initdata＝｛
MAP＿DESC(論理アドレス、物理アドレス、サイズ、ドメイン属性、
READ属性、WRITE属性、CACHE属性、BUFFER属性);
};
ここで、論理アドレスでは、物理アドレスに対応付けたい論理アドレスを指定し、物理アドレスでは、論理アドレスに対応付けたい物理アドレスを指定し、サイズでは、上記アドレスから論理・物理アドレスの対応付けを行いたいサイズを指定する。ドメイン属性では、カーネル領域かユーザ領域なのかを指定し、READ属性では、READ可なら「１」を設定し、READ不可なら「０」を設定し、WRITE属性では、WRITE可なら「１」を設定し、WRITE不可なら「０」を設定し、CACHE属性では、キャッシュ有効なら「１」を設定し、キャッシュ無効なら「０」を設定し、BUFFER属性では、BUFFER有効なら「１」を設定し、BUFFER無効なら「０」を設定する。
【００４１】
後述する図７に示すように、ＯＳ管理外のＲＯＭ、ＲＡＭを指定する場合には、この構造体に対して、以下のように、ソースファイルに記述し、このソースファイルを含むカーネルソースファイルをコンパイルする。
static struct map＿desc standard＿io＿desc[]＿initdata＝｛
MAP＿DESC(0xFFB00000,0x11F00000,0x000FFFFF,DOMAIN＿KERNEL,0,1,1,1),
/*セキュアプログラム用ＲＡＭ*/
MAP＿DESC(0xFFA00000,0x00260000,0x000FFFFF,DOMAIN＿KERNEL,0,0,1,1),
/*セキュアプログラム用ＲＯＭ*/
};
なお、セキュアプログラムのドメイン属性は、カーネルドメインとし、ＯＳ上で動作する通常ソフトウェアからのアクセスを禁止する。
【００４２】
さらに、セキュアプログラムのメモリへのアクセスは、切替デバイスドライバ経由で実行されるため、デバイスドライバから、READ/WRITE実行可能かつＣＰＵキャッシュが有効であることか必要である。
（６）まとめ
以上説明したように、ＯＳカーネルソース３０１ａ、３０１ｂ、３０１ｃ、・・・、ノンセキュアプログラムソース３０２ａ、３０２ｂ、３０２ｃ、・・・、セキュアプログラム呼出部ソース３０３ａ、３０３ｂ、３０３ｃ、・・・、切替デバイスドライバソース３０４ａ、３０４ｂ、３０４ｃ、・・・は、それぞれ、ＯＳ依存コンパイル部３１０によりコンパイルされ、コンパイルによって作成されたオブジェクトファイルはＯＳ依存リンク部３２０によりリンク処理が行われる。ＯＳ依存リンク部３２０によって生成されたＯＳ依存バイナリデータは、形式変換部３３０により、ＲＯＭに書き込める形式に変換され、ＯＳ依存バイナリデータ３４０ａ、３４０ｂ、・・・が情報記憶部３５０に書き込まれる。
【００４３】
ＯＳ（基本プログラム）は、前記管理領域のみをアクセス空間とし、ノンセキュアプログラム（通常プログラム）に対して前記管理領域へのアクセスを仲介する命令と、切替デバイスドライバ（切替プログラム）に対して、セキュアプログラムへの切替を指示する命令とを含む。
ノンセキュアプログラム（通常プログラム）は、ＯＳ（基本プログラム）を介して、前記管理領域にアクセスする命令を含む。
【００４４】
切替デバイスドライバ（切替プログラム）は、ＯＳ（基本プログラム）の指示により、ＯＳ（基本プログラム）セキュアプログラムへの実行の切替えを行う命令を含む。
セキュアプログラムは、前記管理外領域のみをアクセス空間とし、前記管理外領域へアクセスする命令を含む。また、セキュアプログラムの対象処理、例えば、暗号化コンテンツの前記コンテンツ鍵を用いた復号の処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む。
【００４５】
１．３  コンパイル装置４０の構成
コンパイル装置（プログラム生成装置とも呼ぶ。）４０は、図３に示すように、ＯＳ非依存コンパイル部４１０、ＯＳ非依存リンク部４２０、形式変換部４３０及び情報記憶部４５０から構成されている。コンパイル装置４０は、携帯電話１０の後述するメモリ１０７のＯＳの管理外領域に配置するバイナリデータを生成する。
【００４６】
コンパイル装置４０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置４０を構成するＯＳ非依存コンパイル部４１０、ＯＳ非依存リンク部４２０、形式変換部４３０は、その機能を達成する。
【００４７】
情報記憶部４５０は、セキュアプログラムソース４０１ａ、４０１ｂ、４０１ｃ、・・・、アドレス指定ファイル４２２、ＯＳ非依存ライブラリ４２１ａ、４２１ｂ、４２１ｃ、・・・を記憶している。また、ＯＳ非依存バイナリデータ４４０ａ、４４０ｂ、４４０ｃ、・・・を記憶するための領域を備えている。
セキュアプログラムソース４０１ａは、秘密情報を利用した処理が記述されているソースコード（ソースプログラム）であるコンピュータプログラムであってコンピュータ命令を含む。このセキュアプログラムソース４０１ａは、本実施の形態では、暗号化コンテンツを復号するための復号処理が記述されたコードであり、メモリ１０７上にセキュアプログラム２０２（後述する）として記憶されるバイナリデータに対応している。セキュアプログラムソース４０１ｂ、４０１ｃ、・・・についても同様である。
【００４８】
アドレス指定ファイル４２２は、図２で説明したアドレス指定ファイル３２２同じであるので説明を省略する。ただし、セキュアプログラムソース４０１ａ、４０１ｂ、４０１ｃ、・・・、に対応して生成されるセキュアプログラム２０２等を、ＯＳプログラム２１０の管理外領域に配置するため、アドレス指定ファイル４２２は、管理外領域のアドレスを指定する。
【００４９】
ＯＳ非依存コンパイル部４１０は、ＯＳ非依存な処理が記述されたソースコードを高級言語から低レベルなマシンコード（オブジェクト）に変換する。ＯＳ非依存コンパイル部４１０は、ＣＰＵ１０２のアーキテクチャに合ったマシンコードを作成する。
ＯＳ非依存リンク部４２０は、再配置とシンボル解決を行い、必要であればＯＳ非依存ライブラリをリンクしＣＰＵ１０２で実行可能なバイナリデータを作成する。ＯＳ非依存とは、ＯＳ依存ライブラリ３２１ａ、３２１ｂ、３２１ｃ、・・・をリンクしないことを示している。
【００５０】
形式変換部４３０は、図２で説明した形式変換部３３０と同じであるので説明を省略する。
１．４  メモリカード２０の構成
メモリカード２０は、図４に示すように、通常領域１２０、セキュア領域１３０、入出力部１２２、セキュア処理部１３２から構成される。
【００５１】
メモリカード２０は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、メモリカード２０は、その一部の機能を達成する。
通常領域１２０は、外部機器により自由にアクセスできる記憶領域であり、本実施の形態では暗号化コンテンツ１２１が記憶されている。
【００５２】
セキュア領域１３０は、許可された外部機器のみがアクセスできる領域であり、コンテンツ鍵１３１が記憶されている。
暗号化コンテンツ１２１は、暗号化された音楽データまたは動画データであり、コンテンツ鍵１３１を暗号鍵として暗号アルゴリズムを用いて暗号化されたデータである。各暗号化データは、コンテンツＩＤにより識別される。なお、本実施の形態では、暗号化コンテンツ１２１は共通鍵方式で暗号化されているものとし、コンテンツ鍵１３１を復号鍵として用いることにより、復号されたコンテンツ、すなわち音楽データまたは動画データを取得可能であるものとする。
【００５３】
入出力部１２２は、外部機器と通常領域１２０とセキュア処理部１３２との間での各種データを入出力する。
セキュア処理部１３２は、外部機器との間で、ＣＰＲＭ（Content Protection forRecordable Media）の仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を用いて、外部機器との間で安全にデータの入出力を行う。なお、ＣＰＲＭは公知であるので説明を省略する。
【００５４】
１．５  携帯電話１０の構成
携帯電話１０は、図４に示すように、デバッガＩＦ１０１、ＣＰＵ１０２、ＭＭＵ（MemoryManagement Unit ）１０３、割込コントローラ１０４、入力部１０５、表示部１０６、メモリ１０７、入出力部１０８、バッファ１０９、符号処理部１１０、Ｄ／Ａ変換部１１１、無線通信制御部１１２、スピーカ１１３、マイク１１４、通信部１１５、アンテナ１１６から構成され、各回路はバス１１７で接続されている。
【００５５】
（１）携帯電話１０の各構成要素
メモリ１０７は、ＲＯＭおよびＲＡＭから構成され、ＣＰＵ１０２により実行される各種プログラムを記憶している。
ＣＰＵ１０２は、命令フェッチ部、命令デコーダ、演算器、プログラムカウンタ、リンクレジスタ、スタックポインタなどを備え、メモリ１０７上のプログラムから命令をフェッチし、フェッチした命令を解読し、解読した命令を実行する。
【００５６】
ＭＭＵ１０３は、論理アドレスを物理アドレスに変換する仮想記憶機能を実現する。
デバッガＩＦ１０１は、携帯電話１０と外部のデバッガとを接続するためのインターフェースである。
割込コントローラ１０４は、ＦＩＱ、ＩＲＱなどのハードウェア割込みやソフトウェア割込み（ＳＷＩ）、プリフェッチアボート、データアボート、リセットなどの各種割込みを検知し、ＣＰＵ１０２の割込検出用のレジスタへ割込み発生通知を出力する。
【００５７】
通信部１１５は、無線通信制御部１１２と、携帯電話網、インターネットに接続された外部機器との間でアンテナ１１６を介して情報の送受信を行う。
無線通信制御部１１２は、ベースバンド部、変復調部、増幅部などを備えており、通信部およびアンテナ１１６を介して送受信される各種情報の信号処理を行う。
符号処理部１１０は、バッファ１０９に記憶されている音楽データにＭＰ３などの符号化技術に従った復号処理を施し、Ｄ／Ａ変換部１１１へ出力する。
【００５８】
Ｄ／Ａ変換部１１１は、符号処理部１１０により復号された音楽データをアナログ音声信号に変換し、スピーカ１１３へ出力する。
入力部１０５は、テンキー、決定ボタンなどの各種ボタンを備え、利用者によるこれらの操作を受け付ける。
表示部１０６は、ＶＲＡＭ、液晶画面を備え、各種の画面を表示する。
【００５９】
マイク１１４は、音を電気信号に変換し、生成した電気信号を無線通信制御部１１２へ出力する。
スピーカ１１３は、無線通信制御部１１２およびＤ／Ａ変換部１１１から、アナログ信号を受け取り、受け取ったアナログ信号を音に変換して出力する。
（２）メモリ１０７の構成
メモリ１０７の構成を図５に示す。メモリ１０７は、ＲＯＭとＲＡＭから構成される。図５では、ＲＯＭとＲＡＭとを区別して図示していないが、ＲＯＭとＲＡＭとの区別は、図７において図示している。
【００６０】
一例として図５に示すように、メモリ１０７は、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３、セキュアプログラム２０２、ＩＰＬ（Initial Program Loader）プログラム２０１を記憶している。
さらに、本実施の形態では、メモリ１０７に、ＯＳが管理する管理領域とＯＳの管理外である管理外領域との２つを割り当てて利用する。ＯＳ上で動作するノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３は、ＯＳの管理領域に記憶される。一方、ＩＰＬプログラム２０１、セキュアプログラム２０２はＯＳの管理外領域に記憶される。この割り当て方法については、後述する。
【００６１】
このようにセキュアプログラム２０２は、ＯＳの管理外の管理外領域で動作するため、ＯＳ上で動作するソフトウェアデバッガからの解析が不可能となり、セキュア状態でセキュアプログラムの実行が可能となる。
（各プログラムの説明）
ＩＰＬプログラム２０１は、アセンブラで書かれたコード（コンピュータプログラム）であり、ＯＳが起動するために必要なハードウェアの初期化を行い、ＯＳのカーネル初期化処理へ分岐する命令を含む。また、ＩＰＬプログラム２０１は、後述するＺＩセクションＡ７１１のデータの初期化を実施する命令を含む。
【００６２】
ＯＳプログラム２１０は、オペレーティングシステムであり、カーネル初期化時にＯＳが利用するハードウェアの初期化、ＭＭＵ１０３の設定やメモリ管理やファイルの管理、ユーザーインターフェースの提供等を行う基本ソフトウェアである。
ノンセキュアプログラム２１１とセキュアプログラム呼出部２１２と切替デバイスドライバ２１３は、ＯＳが管理するメモリで動作するプログラム群である。
【００６３】
ノンセキュアプログラム２１１は、セキュア環境での実行を必要としないアプリケーションである。例えば、携帯電話１０のＧＵＩを管理するアプリケーションや個人のスケジュールを管理するプログラムや音楽再生アプリケーション等である。コンテンツ再生時、メモリカード２０に記憶されている暗号化コンテンツ１２１に対して、メモリカード２０に記憶されているコンテンツ鍵１３１を用いて、セキュアに復号処理を施す必要がある。音楽再生アプリケーションは、セキュアプログラム呼出部２１２を呼び出す復号処理要求を含む。この復号処理要求は、コンテンツ鍵１３１を用いた暗号化コンテンツ１２１の復号処理の要求を示す。
【００６４】
セキュアプログラム呼出部２１２は、セキュアプログラム２０２を実行するための呼出プログラムであり、切替デバイスドライバ２１３にセキュアプログラム２０２の実行を依頼する。
切替デバイスドライバ２１３は、管理外領域に記憶されたセキュアプログラム２０２へ処理を移すインターフェースの役割をする。
【００６５】
セキュアプログラム２０２は、秘密情報を扱って処理を行うプログラムである。本実施の形態では、セキュアプログラム２０２は、暗号化コンテンツ１２１をコンテンツ鍵１３１を用いて復号する復号プログラムである。また、セキュアプログラム２０２は、当該セキュアプログラム２０２の起動直後に、後述するＺＩセクションＢ７１２のゼロ初期化処理を実行する。
【００６６】
なお、本実施の形態において、メモリ１０７は、ＲＯＭとＲＡＭとから構成されるとしているが、これに限定するわけではない。メモリ１０７は、プログラムが記憶できるプログラム記憶部と、プログラム動作時に利用するワークメモリが記憶できるワークメモリ記憶手段とを備えていればよい。例えば、プログラム記憶手段として、ＨＤＤ（Hard Disk Drive ）やＥＥＰＲＯＭ（ElectricallyErasable Programmable ROM ）やＦｌａｓｈＲＯＭなどを利用してもよいし、ワークメモリ記憶手段として、ＳＤＲＡＭ（Synchronous DRAM ）、ＳＲＡＭ（Static RAM ）などを利用してもよい。
【００６７】
上述したＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、コンパイル装置３０において、１個以上のＯＳ依存バイナリデータとして生成され、セキュアプログラム２０２は、コンパイル装置４０において、１個以上のＯＳ非依存バイナリデータとして生成される。
こうして生成された１個以上のＯＳ依存バイナリデータと１個以上のＯＳ非依存バイナリデータとが、ＲＯＭライタにより、ＲＯＭに書き込まれる。図５は、こうしてＲＯＭに書き込まれた結果を示している。
【００６８】
（各バイナリデータのセクション構成）
ここで、コンパイル装置３０におけるコンパイル及びリンクにより生成された各ＯＳ依存バイナリデータのセクション構成について説明する。
各ＯＳ依存バイナリデータは、図６に示すように、ＺＩセクション５０１、ＲＷセクション５０２及びＲＯセクション５０３から構成されている。
【００６９】
ＺＩセクション５０１は、ゼロ初期化対象データ領域である。各プログラムの初期化の段階で、このセクション内のデータは、ゼロで初期化されなければならない。
ＲＷセクション５０２は、読み書き可能なセクションであり、読み書き可能なデータが配置されるセクションである。
ＲＯセクション５０３は、読み込みのみ可能なセクションであり、実行可能なコード（命令）が配置されるセクションである。
【００７０】
図５では、メモリ１０７内をＲＯＭとＲＡＭに区別して記述していないが、実際は、図６に示すように、各ＯＳ依存バイナリデータのＺＩセクションとＲＷセクションはＲＡＭに配置され、ＲＯセクションに対応するものはＲＯＭに配置される。
また、コンパイル装置４０におけるコンパイル及びリンクにより生成された各ＯＳ非依存バイナリデータ４４０ａ、４４０ｂ、・・・も、それぞれ、図６に示すように、ＺＩセクション、ＲＷセクション及びＲＯセクションから構成されている。
【００７１】
セキュアプログラム２０２が起動する前に、セキュアプログラム２０２を構成するＺＩセクションは、ゼロで初期化されなければならない。しかし、ＺＩセクションのサイズが大きいと、ゼロ初期化処理に時間を要することになる。端末の応答性能が重要とされる電子機器においては、初期化処理の時間をなるべく削減して、セキュアプログラム２０２の起動を高速に行いたい。
【００７２】
この高速化のために、ＺＩセクションを複数のサブセクションに分割し、セキュアプログラム２０２が起動される以前に、一部のサブセクションのゼロ初期化処理を行い、セキュアプログラム２０２が起動された直後に、残りのサブセクションのゼロ初期化処理を行う。このように、初期化処理を分割することにより、セキュアプログラム２０２における初期化処理の高速化が可能となる。このシーケンスについては、図１０及び図１１を用いて、後述する。
【００７３】
（メモリ１０７の論理アドレスと物理アドレス）
次に、メモリ１０７の論理アドレスと物理アドレスの関係について簡単に説明をする。
各プログラム中において用いられるアドレスは、論理アドレスであり、これをＭＭＵ１０３が物理アドレスに変換して実際にメモリ１０７にアクセスする。つまり、上述したＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２、切替デバイスドライバ２１３及びセキュアプログラム２０２において、メモリ１０７が形成する記憶空間を指し示すアドレスは、論理アドレスであり、ＭＭＵ１０３は、これらのプログラムにおいて用いられる論理アドレスを物理アドレスへ変更し、物理アドレスにより、メモリ１０７が形成する記憶空間を指し示す領域へのアクセスが行われる。
【００７４】
携帯電話１０の電源が投入された直後であって、ＭＭＵ１０３の初期化が行われていない場合には、各プログラムには、論理アドレスは割り当てられない。また、物理アドレスと論理アドレスの変換作業が可能となるのは、ＭＭＵ１０３が有効な状態にあるときである。
（メモリ１０７のメモリマップ）
メモリ１０７における物理アドレスと論理アドレスとの対応関係を図７に示す。
【００７５】
メモリ１０７には、上述したように、セキュアプログラム２０２、ＩＰＬプログラム２０１、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３が配置され、また、ＯＳ用メインメモリ６０１及びセキュアプログラム用ワークメモリ６０２が配置されている。
ここで、セキュアプログラム２０２は、ＲＯＭ上におけるＯＳの管理外領域６５１に配置され、ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、ＲＯＭ上におけるＯＳの管理領域６５２に配置されている。また、ＯＳ用メインメモリ６０１は、ＲＡＭ上におけるＯＳの管理領域６５３に配置され、セキュアプログラム用ワークメモリ６０２は、ＲＡＭ上におけるＯＳの管理外領域６５４に配置されている。
【００７６】
物理アドレス0x08000000から0x080C0000により示されるＲＯＭ内の領域に、ＩＰＬプログラム２０１が存在する。ＩＰＬプログラム２０１は、ＯＳプログラム２１０が起動する前に実行されるコード（プログラム命令）であり、ＩＰＬプログラム２０１には、論理アドレスは割り当てられていない。なお、本明細書において、０ｘに続く文字列は、１６進数による表現である。
【００７７】
ＯＳプログラム２１０、ノンセキュアプログラム２１１、セキュアプログラム呼出部２１２及び切替デバイスドライバ２１３は、物理アドレス0x080D0000から0x0BE10000により示されるＲＯＭ内の領域に存在し、この領域には、論理アドレス0xD0000000から0xD3D40000がＯＳにより割り当てられる。
ＯＳ用メインメモリ６０１は、ＯＳやＯＳ上で動作するプログラムが利用するワークメモリであり、物理アドレスが0x10000000から0x11E00000のＲＡＭ内の領域に存在し、この領域には、論理アドレス0xC0000000から0xC1E00000が割り当てられる。
【００７８】
セキュアプログラム２０２は、セキュアプログラムの実行コード（プログラム命令）が書かれており、物理アドレス0x00260000から0x00350000のＲＯＭ内の領域に存在し、この領域には、論理アドレス0xFFA00000から0xFFAFFFFFが割り当てられる。
セキュアプログラム用ワークメモリ６０２は、セキュアプログラム２０２が利用するワークメモリであり、物理アドレス0x11F00000から0x11FFFFFFのＲＡＭ内の領域に存在し、この領域には、論理アドレス0xFFB00000から0xFFBFFFFFが割り当てられる。
【００７９】
上述したような論理アドレスの指定は、ＯＳプログラム２１０のカーネルの初期化処理において行われる。
なお、コンパイル装置３０が記憶しＯＳ依存リンク部３２０において用いられるアドレス指定ファイル３２２、及びコンパイル装置４０が記憶しＯＳ非依存リンク部４２０において用いられるアドレス指定ファイル４２２においては、上述したようにアドレスが割り当てられるように記述されている。
【００８０】
なお、本実施の形態では、上述したように物理アドレス及び論理アドレスを割り当てているが、実装対象の機器によって変わるものであり、本発明が、このアドレス値に限定されるわけではない。
（セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２）
次に、セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２の内容について、図８を用いて、さらに詳しく説明する。
【００８１】
セキュアプログラム用ワークメモリ６０２は、ＺＩセクションを２個に分割したＺＩセクションＡ７１１、ＺＩセクションＢ７１２及びＲＷセクション７１３から構成されている。
ＺＩセクションＡ７１１及びＺＩセクションＢ７１２は、セキュアプログラム２０２が実行される前にゼロ初期化され、セキュアプログラム２０２により利用されるデータが格納されるデータ格納セクションである。本実施の形態では、セキュアプログラム２０２の初期化処理を高速にするために、ＺＩセクションは、ＺＩセクションＡ７１１及びＺＩセクションＢ７１２に分割されている。
【００８２】
セキュアプログラム用ワークメモリ６０２のＺＩセクションのゼロ初期化処理においては、携帯電話１０の電源が投入された直後に、ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム２０２の起動直後に、セキュアプログラム２０２により、ＺＩセクションＢ７１２のゼロ初期化処理が実行される。
【００８３】
このようにユーザによるコンテンツ再生要求がされるよりも前に、ＺＩセクションＡ７１１のゼロ初期化処理を行っておくことにより、ユーザによるコンテンツ再生要求後からセキュアプログラム２０２の初期化処理が完了するまでの時間を短縮することができ、ユーザの待ち時間を短縮することが可能となる。また、ＺＩセクションの初期化処理を分散させることにより、不正解析者によるセキュアプログラム２０２の解析を困難にさせることも可能となる
ＲＷセクション７１３は、セキュアプログラム２０２が利用する読み書き可能なデータが格納される領域である。
【００８４】
なお、セキュアプログラム用ワークメモリ６０２は、セキュアプログラム２０２のスタック領域として利用してもよい。
セキュアプログラム２０２は、セキュアＡＰＩ分岐処理７０１、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４から構成される。
【００８５】
セキュアＡＰＩ分岐処理７０１、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４は、図８に示すように、それぞれ、論理アドレス「0xFFA00000」、「0xFFA01000」、「0xFFA02000」及び「0xFFA03000」により開始位置が示されるセキュアプログラム２０２内の領域に格納されている。
セキュアＡＰＩ分岐処理７０１は、ＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４のそれぞれへの分岐先アドレス情報を含むＡＰＩ分岐テーブル８００（後述する）を格納している。
【００８６】
セキュアプログラム２０２の各ＡＰＩを識別する識別子は、セキュアプログラム呼出部２１２から、切替デバイスドライバ２１３を経由し、セキュアＡＰＩ分岐処理７０１へ出力される。セキュアＡＰＩ分岐処理７０１は、切替デバイスドライバ２１３より識別子を受け取り、ＡＰＩ分岐テーブル８００から受け取った識別子に対応する分岐先アドレスを抽出し、抽出した分岐先アドレスへ実行を分岐する。
【００８７】
ＺＩセクションＢ初期化ＡＰＩ７０２は、ＺＩセクションＢ７１２のゼロ初期化処理を行う実行コード（プログラム命令）である。
セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４は、それぞれ、セキュアプログラムのＡＰＩ処理を行う実行コード（プログラム命令）である。
なお、本実施の形態１では、セキュアプログラムのセキュアなＡＰＩをセキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４の２個として説明しているが、２個に限定するわけではなく、２個以上存在してもよい。
【００８８】
（ＡＰＩ分岐テーブル８００のデータ構造）
ＡＰＩ分岐テーブル８００のデータ構造を図９に示す。
ＡＰＩ分岐テーブル８００は、複数の分岐先アドレス情報８１１、８１２及び８１３から構成されており、分岐先アドレス情報８１１、８１２及び８１３は、それぞれ、セキュアプログラム２０２に含まれているＺＩセクションＢ初期化ＡＰＩ７０２、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４に対応しており、各分岐先アドレス情報は、識別子と分岐先アドレスとを含む。
【００８９】
ここで、識別子は、当該識別子を含む分岐先アドレス情報に対応しているＡＰＩを識別する識別情報である。また、分岐先アドレスは、当該分岐先アドレスを含む分岐先アドレス情報に対応しているＡＰＩがセキュアプログラム２０２内において格納されている位置を示す論理アドレスである。
次に、分岐先アドレス情報８１１、８１２及び８１３についてさらに説明する。
【００９０】
分岐先アドレス情報８１１は、図９に示すように、識別子８０１「１」と分岐先アドレス８０２「0xFFA01000」とを含む。分岐先アドレス情報８１１は、ＺＩセクションＢ初期化ＡＰＩ７０２に対して、識別子８０１「１」が割り当てられ、論理アドレス「0xFFA01000」により開始位置が示されるセキュアプログラム２０２内の領域において、ＺＩセクションＢ初期化ＡＰＩ７０２の実行コード（プログラム命令）が記憶されていることを示している。
【００９１】
従って、識別子として「１」が指定され、セキュアＡＰＩ分岐処理７０１により、「0xFFA01000」に分岐すると、ＺＩセクションＢ初期化ＡＰＩ７０２が実行される。
また、分岐先アドレス情報８１２は、図９に示すように、識別子８０３「２」と分岐先アドレス８０４「0xFFA02000」とを含む。分岐先アドレス情報８１２は、セキュアＡＰＩ＿Ａ７０３に対して、識別子８０３「２」が割り当てられ、論理アドレス「0xFFA02000」により開始位置が示されるセキュアプログラム２０２内の領域において、セキュアＡＰＩ＿Ａ７０３の実行コード（プログラム命令）が記憶されていることを示している。
【００９２】
従って、識別子として「２」が指定され、セキュアＡＰＩ分岐処理７０１により、「0xFFA02000」に分岐すると、セキュアＡＰＩ＿Ａ７０３が実行される。
さらに、分岐先アドレス情報８１３は、図９に示すように、識別子８０５「３」と分岐先アドレス８０６「0xFFA03000」とを含む。分岐先アドレス情報８１３は、セキュアＡＰＩ＿Ｂ７０４に対して、識別子８０５「３」が割り当てられ、論理アドレス「0xFFA03000」により開始位置が示されるセキュアプログラム２０２内の領域において、セキュアＡＰＩ＿Ｂ７０４の実行コード（プログラム命令）が記憶されていることを示している。
【００９３】
従って、識別子として「３」が指定され、セキュアＡＰＩ分岐処理７０１により、「0xFFA03000」に分岐すると、セキュアＡＰＩ＿Ｂ７０４が実行される。
なお、本実施の形態では、ＡＰＩ分岐テーブル８００は、識別子と分岐先アドレスとを含む複数個の分岐先アドレス情報から構成されているが、この構成に限定されるわけではなく、所望のＡＰＩに分岐する処理を行うるためのアドレス情報が格納されていればよい。
【００９４】
（３）セキュアＡＰＩの実行のシーケンス
次に、セキュアプログラム２０２のセキュアＡＰＩが実行されるまでのシーケンスについて説明する。
（ａ）アプリケーションソフト起動までのシーケンス
ここでは、リセットの後、ＯＳプログラム２１０を起動し、ＯＳ上で動作するアプリケーションソフトが起動されるまでのシーケンスについて、図１０を用いて説明する。
【００９５】
本実施の形態においては、セキュアプログラム２０２が、メモリ１０７内のＯＳの管理外領域においてワークメモリ（ＲＡＭ）として利用するセキュアプログラム用ワークメモリ６０２内のＺＩセクションのデータの初期化処理に係る時間を短縮するために、上述したように、セキュアプログラムのＲＡＭデータの初期化処理を分割している。具体的には、ＺＩセクションの初期化処理を２段階に分割している。
【００９６】
携帯電話１０は、利用者による電源投入などにより、リセットを受け付ける（ステップＳ９００）。
リセット後、ＩＰＬプログラム２０１は、ＯＳの起動に必要なハードウェアを初期化する。（ステップＳ９０１）
次に、ＩＰＬプログラム２０１は、ＺＩセクションＡ７１１のデータの初期化を実施する。（ステップＳ９０２）
ＺＩセクションＡ７１１のデータの初期化が終了すると、カーネルに分岐する（ステップＳ９０３〜Ｓ９０４）。
【００９７】
カーネルに分岐後、以下に示すカーネルの初期化処理が実行される。まず、カーネルの初期化処理としては、ＭＭＵ１０３の初期化が実行され（ステップＳ９０５）、次に、携帯電話１０が備え、ＯＳが利用する各種デバイスの初期化が実行される（ステップＳ９０６）。
カーネルの初期化が終了すると、ＯＳが起動されたことになり、その後、各アプリケーションソフトが起動される（ステップＳ９０７）。
【００９８】
ここで、アプリケーションソフトのうち、ユーザによる操作により起動されるものが存在してもよい。ステップＳ９０７が実行されると、携帯電話としての機能が有効となり、着信、発信等が行える状態となり、ユーザが携帯電話上の各種操作を行える状態となる。
（ｂ）セキュアプログラム２０２の実行までのシーケンス
ここでは、セキュアプログラム２０２が実行されるまでのシーケンスを、図１１及び図１２を用いて、説明する。
【００９９】
ここで、図１１は、セキュアプログラム２０２のＺＩセクションの初期化処理が完了するまでのシーケンスを示し、図１２は、セキュアプログラム２０２のＺＩセクションの初期化完了後、セキュアＡＰＩの起動までのシーケンスを示している。
ユーザによる音楽再生のボタン操作が行われると（ステップＳ１０００）、ＯＳは、セキュアプログラム呼出部２１２へ処理を移す（ステップＳ１００１〜ステップＳ１００２）。
【０１００】
次に、セキュアプログラム呼出部２１２は、切替デバイスドライバ２１３をオープンし（ステップＳ１００３）、識別子として「１」を指定して、切替デバイスドライバ２１３に対し、ライブラリコールし、切替デバイスドライバ２１３へ処理が移る（ステップＳ１００４〜ステップＳ１００５）。
次に識別子「１」を受け取った切替デバイスドライバ２１３は、セキュアＡＰＩ分岐処理７０１に分岐し、セキュアＡＰＩ分岐処理７０１へ処理が移る（ステップＳ１００６〜ステップＳ１００７）。
【０１０１】
セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し（ステップＳ１００８）、ＡＰＩ分岐テーブル８００から、識別子「１」に対応する分岐先アドレスを取得する。ここでは、識別子「１」に対応するＺＩセクションＢ初期化ＡＰＩ７０２の分岐先アドレス８０２「0xFFA01000」が取得され、論理アドレス「0xFFA01000」により示される格納位置に格納されている実行コード、つまり、ＺＩセクションＢ初期化ＡＰＩ７０２に分岐する（ステップＳ１００９〜ステップＳ１０１０）。
【０１０２】
「0xFFA01000」に処理が分岐すると、ＺＩセクションＢ初期化ＡＰＩ７０２が実行される（ステップＳ１０１１）。これにより、ＺＩセクションＢ７１２の初期化が完了する。
ＺＩセクションＢ７１２の初期化が完了すると、セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、ＯＳが利用するものに戻す（ステップＳ１０１２）。
その後、ＯＳ上で動作するセキュアプログラム呼出部２１２へ処理が移る（ステップＳ１０１３〜ステップＳ１０１４）。
【０１０３】
以上により、セキュアＡＰＩ＿Ａ７０３及びセキュアＡＰＩ＿Ｂ７０４が利用するＺＩセクションＡ７１１及びＺＩセクションＢ７１２の初期化が完了する。
次に、セキュアプログラム呼出部２１２は、セキュアＡＰＩの識別子を指定し、切替デバイスドライバ２１３に対し、ライブラリコールし、切替デバイスドライバ２１３へ処理が移る（ステップＳ１０１５〜ステップＳ１０１６）。
【０１０４】
切替デバイスドライバ２１３は、指定された識別子をセキュアＡＰＩ分岐処理７０１へ出力し、セキュアＡＰＩ分岐処理７０１へ分岐する（ステップＳ１０１７〜ステップＳ１０１８）。
セキュアＡＰＩ分岐処理７０１は、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し（ステップＳ１０１９）、次に、ＡＰＩ分岐テーブル８００から、受け取った識別子に対応する分岐先アドレスを取得し、取得した分岐先アドレスへ分岐する（ステップＳ１０２０〜ステップＳ１０２１）。
【０１０５】
次に、分岐先アドレスで示される位置に格納されるセキュアプログラム２０２のＡＰＩ処理が実行される（ステップＳ１０２２）。
セキュアＡＰＩの処理が終了すると、スタックポインタの設定を、ＯＳが利用するものに戻し（ステップＳ１０２３）、その後、セキュアプログラム呼出部２１２及びＯＳへ処理が移る（ステップＳ１０２４〜ステップＳ１０２６）。
【０１０６】
図１２に示すステップＳ１０１５からステップＳ１０２６までの処理は、図１１に示すステップＳ１０００からステップＳ１０１４までの処理が完了した後、複数回実行されてもよい。図１１に示す全てのステップが完了していることは、セキュアプログラムが実行する際に初期化されるべきＺＩセクションの初期化処理完了を意味しているからである。
なお、本実施の形態では、セキュアＡＰＩ＿Ａ７０３は、コンテンツ鍵取得を行うコンピュータプログラムであり、セキュアＡＰＩ＿Ｂ７０４は、暗号化コンテンツ１２１をコンテンツ鍵１３１を用いて復号するコンピュータプログラムである。
【０１０７】
この場合、まず図１１に示す全てのステップが実行されＺＩセクションの初期化が完了する。次に、識別子を「２」として、図１２に示す全てのステップが実行されることにより、コンテンツ鍵１３１が取得される。次に、識別子を「３」として、図１２に示す全てのステップが実行されることにより、コンテンツ鍵１３１を用いて暗号化コンテンツ１２１が復号される。
【０１０８】
２．その他の変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）セキュアプログラム２０２は、セキュアプログラム２０２の実行中に、ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生した場合に、セキュアプログラム２０２による処理を一時的に中断し、セキュアプログラム２０２による処理対象のセキュアデータを暗号化し、割込みに対応する処理が完了した後に、暗号化セキュアデータを復号し、セキュアプログラム２０２による処理を一時的に中断した点から、セキュアプログラム２０２による処理を継続して実行するとしてもよい。具体的には、以下に示す通りである。
【０１０９】
ＩＰＬで初期化される領域であるＺＩセクションＡ７１１又はセキュアプログラム２０２により初期化される領域であるＺＩセクションＢ７１２に、セキュアプログラム２０２の初期化完了フラグを設ける。初期化完了フラグは、セキュアプログラム２０２によるＺＩセクションＢ７１２の初期化完了後、「１」に設定され、セキュアプログラム２０２が実行されている間は、常に、「１」となっている。
【０１１０】
このように、初期化完了フラグをＺＩセクションに設けてもよい。しかしＺＩセクションに限定されることなく、ＲＷセクションに初期化完了フラグを設けるとしてもよい。
一般的に、コンピュータシステムにおいては、ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生すると、ＣＰＵの例外ベクタテーブルに分岐する。例外ベクタテーブルには、割込み要因毎に割込み処理ルーチンが登録されており、例外ベクタテーブルにより、割込み要因毎に、割込み処理ルーチンへ分岐し、所望の割込み処理が行われる。
【０１１１】
本変形例においては、例外ベクタテーブルにおいて、予め、割込みが発生するとセキュアプログラム２０２に分岐するように登録しておく。このようにすることで、割込みが発生するたびに、セキュアプログラム２０２へ一旦処理が移るようになる。
セキュアプログラム２０２の実行中に割込みが発生した場合のシーケンスを、図１３を用いて、説明する。
【０１１２】
セキュアプログラム２０２は、ＺＩセクションＢの初期化を完了すると（ステップＳ１０１１）、次に、初期化完了フラグを「１」にセットする（ステップＳ１２０１）。
セキュアプログラム２０２が、実行されている間は、初期化完了フラグは、常に、「１」となっている。
セキュアプログラム２０２は、セキュアＡＰＩの実行を開始する（ステップＳ１０２２）。
【０１１３】
ＩＲＱ、ＦＩＱ、ソフトウェア割込み等の割込みが発生すると（ステップＳ１２０２）、ＣＰＵの例外ベクタテーブルに処理が移る。例外ベクタテーブルには、あらかじめセキュアプログラム２０２へ分岐するように、ベクタが登録されているので、セキュアプログラム２０２に分岐する（ステップＳ１２０３）。
セキュアプログラム２０２に分岐後、セキュアプログラム２０２は、初期化完了フラグが「１」であるか否かを判断する（ステップＳ１２０４）。
【０１１４】
初期化完了フラグが、「１」であれば（ステップＳ１２０４でＹＥＳ）、セキュアプログラム２０２の対象となる処理が実行中であるので、セキュアプログラム２０２は、割込み発生時のポイントを退避し（ステップＳ１２０６）、セキュアプログラム２０２が実行中に利用しているセキュアな情報に関連するセキュアデータ（ランタイムデータ）を暗号化して暗号化セキュアデータを生成する（ステップＳ１２０７）。暗号化セキュアデータの生成後、ＯＳへ処理を移し（ステップＳ１２０８）、ＯＳは、割込み処理を実施し（ステップＳ１２０９）、割込み処理が終了したら、セキュアプログラム２０２へ処理を移す（ステップＳ１２１０）。セキュアプログラム２０２は、初期化完了フラグが「１」であるか否かを判断する（ステップＳ１２１１）。初期化完了フラグが、「１」であれば（ステップＳ１２１１でＹＥＳ）、セキュアプログラム２０２は、暗号化セキュアデータを復号して復号セキュアデータを生成し（ステップＳ１２１３）、割込みが発生してセキュアプログラム２０２の処理が中断していたポイントに復帰し（ステップＳ１２１４）、セキュアプログラム２０２の処理を継続する（ステップＳ１２１５）。
【０１１５】
セキュアプログラム２０２の対象である処理の実行が終了する直前に、セキュアプログラム２０２は、初期化完了フラグを「０」に設定し（ステップＳ１２１６）、その後、セキュアプログラム２０２の実行が終了する。
初期化完了フラグが、「１」でなければ（ステップＳ１２０４でＮＯ、又はステップＳ１２１１でＮＯ）、ＯＳへ処理を移す（ステップＳ１２０５、又はステップＳ１２１２）。
【０１１６】
（２）本実施の形態では、セキュアプログラム２０２は、暗号化コンテンツを復号する復号プログラムであるとしているが、これに限定されることなく、秘密情報を扱うプログラムであるとしてもよい。
（３）本実施の形態では、切替デバイスドライバ２１３が、ＯＳ依存バイナリデータからＯＳ非依存バイナリデータへの切替インターフェースの働きをしているが、切替デバイスドライバ２１３を利用することなく、セキュアプログラム呼出部２１２からセキュアＡＰＩ分岐処理７０１へ直接分岐するようにしてもよい。
【０１１７】
（４）本実施の形態では、セキュアＡＰＩ分岐処理７０１が、スタックポインタの設定を、セキュアプログラム２０２が利用するものに戻し、また、スタックポインタの設定を、ＯＳが利用するものに戻すとしているが、これには、限定されない。
切替デバイスドライバ２１３は、ＯＳからセキュアプログラムへの切替の際に、切替の時点でＯＳが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたセキュアプログラム用のスタックポインタへ戻す命令を含むとしてもよい。また、切替デバイスドライバ２１３は、セキュアプログラムからＯＳへの切替の際に、切替の時点でセキュアプログラムが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたＯＳ用のスタックポインタへ戻す命令を含むとしてもよい。
【０１１８】
また、セキュアＡＰＩ分岐処理７０１が上記を行うとしてもよい。
（５）上述したセキュアプログラムは、ＢＩＯＳ（Basic Input/Output System）を構成するその一部のプログラムであるとしてもよい。BIOSとは、一般的に、コンピュータに接続されたディスクドライブ、キーボード、ビデオカードなどの周辺機器を制御するプログラム群である。
【０１１９】
（６）上記の実施の形態では、コンパイル装置３０及びコンパイル装置４０は、別々の装置であるとしているが、これには限定されない。コンパイル装置３０及びコンパイル装置４０のそれぞれが有する構成要素を備えた１台のコンパイル装置から構成されるとしてもよい。
このコンパイル装置は、オペレーティングシステムを構成するソースコードにコンパイルを施して、第１オブジェクトを生成する第１コンパイル部と、前記第１オブジェクトのシンボル解決と再配置と第１ライブラリに含まれるプログラムとのリンクとを行って、オペレーティングシステムである実行可能形式の第１ソフトウェアを生成する第１リンク部と、秘匿情報を利用する処理を構成するソースコードにコンパイルを施して、第２オブジェクトを生成する第２コンパイル部と、前記第２オブジェクトのシンボル解決と再配置と第２ライブラリに含まれるプログラムとのリンクを行って、秘匿情報を利用する処理からなる実行可能形式の第２ソフトウェアを生成する第２リンク部とを備える。
【０１２０】
（７）本実施の形態では、セキュアプログラムソースに対して耐タンパ化するような例を示していないが、セキュアプログラムソースに対して耐タンパ化手法を施してもよい。
耐タンパ化手法とは、オリジナルコード（プログラム命令）に対して、実行に影響のない不要な冗長コードの追加、ある命令コードの別の等価な命令コードへの置換え、制御構造の複雑化、１つのモジュール（プログラム命令の集合）の複数のモジュールへの分割化などの難読化をしておくこと、又はオリジナルコードを予め暗号化しておき、実行時に復号することである。耐タンパ化手法を適用させることでセキュアプログラム２０２のセキュリティレベルを向上させてもよい。コード暗号化を施す場合は、復号したコードを展開するＲＡＭ領域は、ＯＳがアクセス不可能なエリア、つまり、管理外領域とする。
【０１２１】
この技術に関しては、非特許文献１、非特許文献２、非特許文献３に詳細に述べられているので説明は省略する。
（８）上記の実施の形態では、ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム２０２の起動直後に、セキュアプログラム２０２により、ＺＩセクションＢ７１２のゼロ初期化処理が実行されるとしているが、これには、限定されない。
【０１２２】
ＩＰＬプログラム２０１により、ＺＩセクションＡ７１１の中の一部の変数のゼロ初期化処理が実行され、セキュアプログラム２０２により、ＺＩセクションＢ７１２の一部の変数のゼロ初期化処理が実行されるとしてもよい。
また、上記の実施の形態及び変形例においては、ＺＩセクションを、ゼロ値で初期するとしているが、これには限定されない。ゼロ値以外の固定値、例えば、「0xffff」などを、ＺＩセクションに書き込むとしてもよい。
【０１２３】
（９）以上説明したように、本発明は、プログラム記憶部とデータ記憶部を備え、前記プログラム記憶部は、第一ソフトウェアと第二ソフトウェアを記憶し、前記データ記憶部は、第一データ記憶部と第二データ記憶部からなり、前記第一データ記憶部は、前記第一ソフトウェアがアクセス可能なエリアであり、前記第二データ記憶部は、前記第二ソフトウェアがアクセス可能なエリアであり、前記第一ソフトウェアは、前記第二データ記憶部にアクセス不可能であることを特徴とするセキュア処理装置である。
【０１２４】
ここで、前記第一ソフトウェアは、オペレーティングシステムであり、前記第二ソフトウェアは、秘密情報を利用するソフトウェアであるとしてもよい。
ここで、第一コンパイラは、第一ソフトウェアのソースコードを入力とし、第一オブジェクトを出力し、第一リンカは、前記第一オブジェクトのシンボル解決と再配置と第一ライブラリをリンクする機能を有し、前記第一オブジェクトを入力とし、前記第一ソフトウェアを出力し、前記第一ソフトウェアは、前記第一コンパイラおよび前記第一リンカで作成された実行可能データであり、第二コンパイラは、前記第一コンパイラとは異なるコンパイラであって、前記第二ソフトウェアのソースコードを入力とし、第二オブジェクトを出力し、第二リンカは、前記第一リンカとは異なるリンカであり、前記第二オブジェクトのシンボル解決と再配置と第二ライブラリ群をリンクする機能を有し、前記第二オブジェクトを入力とし、前記第二ソフトウェアを出力し、前記第二ソフトウェアは、前記第二コンパイラおよび前記第二リンカで作成された実行可能データであるとしてもよい。
【０１２５】
ここで、前記第二ソフトウェアは、改ざんや解析に対して耐性をもったソフトウェアであるとしてもよい。
ここで、前記第二ソフトウェアが利用する前記第二データ記憶部の初期化処理を少なくとも１つ以上の分割初期化処理に分割するとしてもよい。
ここで、前記分割初期化処理のうち、少なくとも１つ以上の分割初期化処理は、前記第二ソフトウェアの実行要求が発生するよりも前に実行されるとしてもよい。
【０１２６】
ここで、前記分割初期化処理は、前記第二ソフトウェアの実行前に処理されるように分散して前記プログラム記憶部に記憶されているとしてもよ。
ここで、前記プログラム記憶部は、さらにＩＰＬを含み、前記ＩＰＬが少なくとも１つ以上の前記分割初期化処理を実行するとしてもよい。
ここで、前記プログラム記憶部は、さらに切替デバイスドライバを含み、前記切替デバイスドライバが、前記第一ソフトウェアから第二ソフトウェアに処理を移すとしてもよい。
【０１２７】
ここで、前記切替デバイスドライバは、前記第一ソフトウェアが利用する第一スタックポインタと前記第二ソフトウェアが利用する第二スタックポインタを管理し、前記第一ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第一スタックポインタに設定し、前記第二ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第二スタックポインタに設定するとしてもよい。
【０１２８】
（１０）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
【０１２９】
（１１）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Large ScaleIntegration：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。
【０１３０】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されてもよい。また、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Field Programmable Gate Array）やＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０１３１】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
（１２）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０１３２】
（１３）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０１３３】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０１３４】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１４）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１３５】
本発明にかかるセキュア処理装置および方法は、秘密情報を利用したプログラムをＯＳ管理外のメモリ上で動作させることで、ＯＳ上で動作するソフトウェアデバッガからの解析を防止する効果と、さらにＯＳ管理外で動作するプログラムのＲＡＭデータの初期化処理を分割して行うことで、ユーザ要求発生後から前記プログラム起動までの処理を短縮する効果とを有し、セキュアなソフトウェアの処理方法として有用である。
【０１３６】
本発明を構成する各装置は、コンテンツを制作し、配給するコンテンツ配給産業において、また、その他の秘密を維持する必要がある情報を扱う産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図面の簡単な説明】
【０１３７】
【図１】セキュア処理システム１の構成を示すシステム構成図である。
【図２】コンパイル装置３０の構成を示すブロック図である。
【図３】コンパイル装置４０の構成を示すブロック図である。
【図４】メモリカード２０及び携帯電話１０の構成を示すブロック図である。
【図５】メモリ１０７のデータの配置を示す配置図である。
【図６】バイナリデータの各セクションの配置を示す配置図である。
【図７】メモリ１０７における物理アドレスと論理アドレスとの対応関係を示す図である。
【図８】セキュアプログラム２０２とセキュアプログラム用ワークメモリ６０２の内容を示す配置図である。
【図９】ＡＰＩ分岐テーブル８００のデータ構造を示すデータ構造図である。
【図１０】リセットの後、ＯＳプログラム２１０を起動し、ＯＳ上で動作するアプリケーションソフトが起動されるまでのシーケンスを示す図である。
【図１１】セキュアプログラム２０２のＺＩセクションの初期化処理が完了するまでのシーケンスを示す図である。
【図１２】セキュアプログラム２０２のＺＩセクションの初期化完了後、セキュアＡＰＩの起動までのシーケンスを示す図である。
【図１３】セキュアプログラム２０２の実行中に割込みが発生した場合のシーケンスを示す図である。
【符号の説明】
【０１３８】
１０  携帯電話
２０  メモリカード
３０  コンパイル装置
４０  コンパイル装置
１０１  デバッガＩ／Ｆ
１０２  ＣＰＵ
１０３  ＭＭＵ
１０４  割込コントローラ
１０５  入力部
１０６  表示部
１０７  メモリ
１０８  入出力部
１０９  バッファ
１１０  符号処理部
１１１  Ｄ／Ａ変換部
１１２  無線通信制御部
１１３  スピーカ
１１４  マイク
１１５  通信部
１１６  アンテナ
１１７  バス
１２０  通常領域
１２２  入出力部
１３０  セキュア領域
１３２  セキュア処理部
２０１  ＩＰＬプログラム
２０２  セキュアプログラム
２１０  ＯＳプログラム
２１１  ノンセキュアプログラム
２１２  セキュアプログラム呼出部
２１３  切替デバイスドライバ
３１０  ＯＳ依存コンパイル部
３２０  ＯＳ依存リンク部
３３０  形式変換部
３５０  情報記憶部
４１０  ＯＳ非依存コンパイル部
４２０  ＯＳ非依存リンク部
４３０  形式変換部
４５０  情報記憶部
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2006129641.tif 000015
【図２】
2006129641.tif 000016
【図３】
2006129641.tif 000017
【図４】
2006129641.tif 000018
【図５】
2006129641.tif 000019
【図６】
2006129641.tif 000020
【図７】
2006129641.tif 000021
【図８】
2006129641.tif 000022
【図９】
2006129641.tif 000023
【図１０】
2006129641.tif 000024
【図１１】
2006129641.tif 000025
【図１２】
2006129641.tif 000026
【図１３】
2006129641.tif 000027
【国際調査報告】
2006129641.tif 000028
2006129641.tif 000029