(57)【要約】【課題】データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にする。【解決手段】改竄や解読の防止が必要であるセキュリティ・ブロックは暗号化処理が施される。データが利用される際には、セキュリティ・ブロックはプロセッサと同一チップ内にある復号装置で復号されプロセッサに送られる。また、復号データはプロセッサと同一チップ内にあるセキュア・メモリに保管される。セキュア・メモリが不足した際、その内容をプロセッサ内の暗号装置により暗号化してプロセッサ外部メモリやハード・ディスクに保管する。【選択図】  図１
2004272594.tif 000002
【特許請求の範囲】
【請求項１】
データをメモリ空間に配置してデータを利用するデータ利用装置であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを１以上のブロックに再構成するデータ再構成手段と、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置手段と、
各メモリ領域に配置されたブロックを利用するブロック利用手段と、
を具備することを特徴とするデータ利用装置。
【請求項２】
前記メモリ空間の少なくとも１つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリであり、
前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項１に記載のデータ利用装置。
【請求項３】
前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、
前記セキュア・メモリは、
（１）前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリ
（２）暗号化が施された安全な通信路を介して前記プロセッサと接続されているプロセッサ外部メモリ
（３）解析の困難なプロトコルを利用した通信路を介して前記プロセット接続されているプロセッサ外部メモリ
のうちいずれかの形態で実装されている、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項４】
前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを安全な方法で前記セキュア・メモリに配置する、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項５】
前記エレメント配置手段は、所定の記憶装置に格納されたブロックを前記メモリ空間に配置し、
セキュリティ属性が付加されているブロックは暗号化処理又はその他の処理により実行不能形式で前記所定の記憶装置に格納されており、
セキュリティ属性が付加されたブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するデータ変換手段をさらに備える、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項６】
前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行する、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項７】
前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行し、
前記ブロック変換手段は、前記セキュア・メモリに配置されているブロックを交換する際に該ブロックを実行不能形式に再変換する、
ことを特徴とする請求項５に記載のデータ利用装置。
【請求項８】
前記セキュリティ属性は、
（１）改竄防止と秘匿性の確保が必要であることを示す情報
（２）利用頻度を示す情報
（３）改竄防止と秘匿性の確保の強度を示す情報
（４）改竄防止と秘匿性の確保の優先度を示す情報
（５）セキュア・エレメント外からの参照を許可するかどうかを示す情報
のうち少なくとも以下の１つの情報を持つ、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項９】
データを構成する各エレメントの属性は、
（１）プログラム・データのソースコードにおいてプログラム設計者が指定する（２）データベース又はその他の管理手段を利用して自動的に指定する
（３）プログラム・データの解析結果に基づいて自動的に指定する
のうちいずれかの方法により付与される
ことを特徴とする請求項１に記載のデータ利用装置。
【請求項１０】
前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、
前記ブロック配置手段は、所定の記憶装置に格納されているセキュリティ属性が付加されたブロックを、
（１）ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサと安全な通信路を介して接続された復号装置で暗号化ブロックを復号する
（２）ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサと同じチップ内に組み込まれている復号装置で暗号化ブロックを復号する
（３）ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサ内で暗号化ブロックを復号する
（４）ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）又はその他の暗号化が施された通信路を介して前記プロセッサへセキュリティ・ブロックを転送する
（５）ブロックが実行プログラム・コードである場合、ブロック供給元側でブロックを難読化してから前記プロセッサへブロックを転送する
のうちいずれかの方法により前記プロセッサに安全に配置する、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項１１】
前記ブロック配置手段は、
（１）セキュリティ属性が付加されているブロックを前記セキュリティ・メモリに配置し、それ以外のブロックはそれ以外のメモリに配置する
（２）セキュリティ属性が付加されているブロックが持つ改竄防止と秘匿性の確保の優先度を示す情報に基づいて、該優先度の高いブロックを優先的に前記セキュリティ・メモリに配置する
（３）セキュリティ属性が付加されているブロックが持つ利用頻度を示す情報に基づいて、利用頻度の高いブロックを優先的に前記セキュリティ・メモリに配置する
（４）セキュリティ属性が付加されているブロックを前記セキュリティ・メモリ以外に配置する場合には、該ブロックが持つ改竄防止と秘匿性の確保の強度を示す情報に基づいて暗号化の方法又は強度を選択的に使用する
のうちいずれかの手順に従い、セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項８に記載のデータ利用装置。
【請求項１２】
前記メモリ空間は、改竄や解析などの不正利用から保護されたセキュア・メモリと、それ以外のノーマル・メモリを含み、
前記ブロック配置手段は、前記セキュア・メモリが不足したことを検出する手段と、前記セキュア・メモリの不足に応答して前記セキュア・メモリ上のブロックを前記ノーマル・メモリに書き出す手段と、以前にセキュアメモリ上にあって前記ノーマル・メモリ上に退避したブロックへのアクセスを検出する手段と、アクセス検出に応答して前記ノーマル・メモリ上のブロックを前記セキュア・メモリに書き戻す手段とを備える、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項１３】
前記セキュア・メモリ上のブロックを前記ノーマル・メモリに書き出す際に該ブロックを暗号化する手段と、前記ノーマル・メモリ上のブロックを前記セキュア・メモリに書き戻す際に該ブロックを復号化する手段をさらに備える、
ことを特徴とする請求項１２に記載のデータ利用装置。
【請求項１４】
前記セキュア・メモリが不足したことを検出する手段及び／又は前記ノーマル・メモリ上に退避したブロックへのアクセスを検出する手段は、
（１）ページング方式による仮想記憶システム
（２）セグメント方式による仮想記憶システム
（３）ページング及びセグメントの両方式による仮想記憶システム
（４）データ参照前にブロックを前記セキュア・メモリにロードする指示を記述したプログラム
のうちいずれかにより構成される、
ことを特徴とする請求項１２に記載のデータ利用装置。
【請求項１５】
前記ノーマル・メモリから前記セキュア・メモリへの参照を禁止し、特定の条件下でのみ参照を許可する手段をさらに備える、
ことを特徴とする請求項１２に記載のデータ利用装置。
【請求項１６】
前記の特定の条件下でのみ参照を許可する手段は、
（１）前記セキュア・メモリ外からの参照を許可する条件を示す情報に基づいて、前記ノーマル・メモリ上で動作するコードから前記セキュア・メモリへの参照を行なう場合に、参照の識別子を指定し、識別子が登録されていることを確認して参照を許可する
（２）前記セキュア・メモリ外のブロックが改変されていないことを示す情報を付加して参照を行ない、該ブロックが不正に改変されていないことを確認して参照を許可する、
のうちいずれかの方法により参照を許可する、
ことを特徴とする請求項１５に記載のデータ利用装置。
【請求項１７】
セキュリティ属性とは独立な異なる属性がエレメントに対して与えられ、該独立な異なる属性に基づいてブロックが構成されている場合において、前記ブロック配置手段は、互いに独立な属性間の優先度を決定し、該優先度に基づいて前記セキュア・メモリに割り当てるブロックを決定する、
ことを特徴とする請求項２に記載のデータ利用装置。
【請求項１８】
前記のセキュリティ属性とは独立な異なる属性は、アクセス速度の速いメモリに割り当てることを指示する属性、又は、省電力を実現するためにメモリに割り当てることを指示する属性を含む、
ことを特徴とする請求項１７に記載のデータ利用装置。
【請求項１９】
データをメモリ空間に配置してデータを利用するデータ利用方法であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを１以上のブロックに再構成するデータ再構成ステップと、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするデータ利用方法。
【請求項２０】
前記メモリ空間の少なくとも１つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリであり、
前記ブロック配置ステップでは、セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項１９に記載のデータ利用方法。
【請求項２１】
前記ブロック利用ステップは、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサ上で実行され、
前記セキュア・メモリは、前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリ又は暗号化が施された安全な通信路を介して前記プロセッサと接続されているプロセッサ外部メモリの形態で実装されている、
ことを特徴とする請求項２０に記載のデータ利用方法。
【請求項２２】
前記ブロック配置ステップでは、セキュリティ属性が付加されているブロックを安全な方法で前記セキュア・メモリに配置する、
ことを特徴とする請求項２０に記載のデータ利用方法。
【請求項２３】
セキュリティ属性が付加されているブロックは暗号化処理又はその他の処理により実行不能形式で所定の記憶装置に格納されており、
セキュリティ属性が付加されたブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するデータ変換ステップをさらに備える、ことを特徴とする請求項２０に記載のデータ利用方法。
【請求項２４】
前記ブロック配置ステップでは、前記セキュア・メモリに配置されているブロックを交換する処理を実行し、
前記ブロック変換ステップでは、前記セキュア・メモリに配置されているブロックを交換する際に該ブロックを実行不能形式に再変換する、
ことを特徴とする請求項２３に記載のデータ利用方法。
【請求項２５】
改竄や解析などの不正利用から保護されたセキュア・メモリを含んだメモリ空間上にデータを配置して利用する処理をコンピュータ・システム上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
データは複数のエレメントの集合で構成され、且つ、各エレメントは不正利用からの保護形式に関する情報を記述した属性情報を持ち、
同じ属性が与えられているエレメントを１以上のブロックに再構成するデータ再構成ステップと、
セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムやコンピュータ・データなどを実行又は再生という形態で利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、改竄や解析など不正使用防止のために暗号化すなわち実行不能状態にしてハード・ディスク装置などの外部記憶装置に保存されているデータを利用する（あるいは、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も含む）データ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【０００２】
さらに詳しくは、本発明は、実行不能状態のデータをメモリ上で実行可能状態に展開してからデータを利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にするデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【０００３】
【従来の技術】
著作権は、著作物を利用し得る相対的な排他的独占権であり、無体財産権の１つに含まれる。ここで言う「著作物」とは、思想又は感情を創作的に表現したものであって、文芸、学術、美術又は音楽の範囲に属するものを指す。著作権は、各国の著作権法や、ベルヌ条約や万国著作権条約などの国際的な条約で保護されている。例えば、デジタル化されたテキストやコンピュータ・プログラム、デジタル化された音楽コンテンツ、映像コンテンツ、番組の放送コンテンツなど各種のメディアも著作物であり、著作権法制下で適正に保護を受けるべきである。
【０００４】
著作権者自身においてのみ著作物の利用が行われるのはごく稀であり、他人が著作権を利用することに対して著作権者が一定の対価を得て許諾するというのが一般的である。したがって、著作権の保護を担保するためには、他人が勝手に（許可なく）著作物を複製するなどの著作物の不正使用を防止する必要がある。
【０００５】
ところが、デジタル形式のデータやコンテンツの複製や改竄は極めて容易であり、著作権侵害の危険に無防備にさらされているとさえ言える。したがって、著作権法やその他の法規制を強化するだけでは不充分であり、情報技術の観点からも著作物の正当な利用を支援し若しくは不正利用を排除して、著作権の保護を拡充する必要があると思料される。
【０００６】
例えば、パーソナル・コンピュータ（ＰＣ）などのプログラムを実行する装置、あるいは、ＤＶＤ（デジタルビデオディスク（商標）あるいはデジタル・バーサタイル・ディスク）装置やデジタルＶＴＲやＭＤ（ミニディスク（商標））記録再生装置など、データを利用する装置において、著作権のある画像データや音楽データをソフトウェアで再生を行なう場合に、ソフトウェアを不正に改竄ができてしまうと、ソフトウェアを改変することにより、著作権のあるデータを不正にコピーできてしまうという問題がある。また、ソフトウェアの処理が技術開発の成果やノウハウとしての価値がある場合、それらが不正に解析されてしまうという問題がある。例えば、ゲーム・プログラムの場合その開発には多くの資金と技術開発が使用されているため、それらが不正にコピーされることが大きな問題となっている。この結果、プログラムやデータ（以下、単に「データ」とも呼ぶ）の値段も高くしなければならなくなり、普及の障壁となるという悪循環が起こっている。
【０００７】
例えば、暗号技術を用いることによって、通信路上に流れるデータを悪意のある第三者から保護することが可能となっている。しかしながら、データの配信・流通過程だけでなく、データが正規のユーザに提供された後に行なわれる不正コピーや不正利用も大きな問題となっている。
【０００８】
この種の問題への対策として、最近では権利管理方式（ＤＲＭ：Ｄｉｇｉｔａｌ  Ｒｉｇｈｔｓ  Ｍａｎａｇｅｍｅｎｔ）と呼ばれる方式が採用されている。権利情報管理方式（ＤＲＭ）によって、ユーザはコンテンツの利用許可（ライセンス）を得なければコンテンツを利用できない仕組みが実現される。
【０００９】
ＤＲＭのシステムは、典型的にはコンテンツ提供者とライセンス管理者とユーザという参加者で構成される。ユーザは、コンテンツの再生装置を所持し、それを使ってコンテンツを利用する。また、ライセンス管理者は、ユーザにライセンスの発行を行なう。また、コンテンツ提供者は、ユーザにコンテンツの提供を行なう。ＤＲＭでは、コンテンツのライセンス（利用許可）をユーザに与えることは、コンテンツ鍵をそのユーザの（特定の）正当な再生装置に与えることで実現される。ここで言う「正当性」とは、再生装置が暗号鍵やコンテンツ鍵、並びに復号されたコンテンツを外部に漏らさないで処理できることを意味する。
【００１０】
ＤＲＭを始めとするデータの保護方法は、基本的には、データを暗号化してデータを利用する装置のハード・ディスクなどに保存し、データの利用時には復号鍵を用いてデータを復号した後に利用するというものである。このような方法によれば、データは暗号化を行ないハード・ディスク上ではデータは暗号化すなわち利用不能な形式で保存されているため、データを見ただけでは容易にデータの改竄や解析が行なえなくなるという点で有効である。しかしながら、データの利用時には復号鍵を使用して復号が必ず行なわれるため、データ利用時に復号後のデータを見ることで改竄や解析が行なえてしまうという問題が依然として残っている。
【００１１】
例えば、メモリ上に復号されたデータを配置（ロード）して利用する場合、メモリ内容を見ることでデータの改竄や解析が行なえてしまう。また、復号されたデータは通常データ利用装置内のバスを通して転送が行なわれるが、バス・モニタやＩＣＥ（イン・サーキット・エミュレータ）などのツールを利用することで、比較的容易にデータの解析や改竄も行なえてしまう。例えば、パーソナル・コンピュータのように標準仕様のバスを使用している場合には、バス・モニタやＩＣＥなどのツールも、開発時におけるデバッグの容易さを実現するという本来の目的・用途のために、標準仕様のバスを容易に解析することができるようになってきている。このため、このようなツールを悪用することで、バス上で転送される実行可能形式のデータを解析又は改竄できてしまう。
【００１２】
他方、ページング方式による仮想記憶システムにおいて、ページインやページアウトの際に転送データに対してデータ変換を施すという技術が提案されている（例えば、特許文献１を参照のこと）。このような仮想記憶システムを応用して、ページアウトの際にページ単位で暗号化し、ページインの際に暗号化ページを復号することにより、バス転送時におけるデータの改竄や解析を防止することができると思料される。また、このバリエーションとして、１つのプログラムで１つの暗号方式又は暗号鍵を用いる方法や、例えばページ、プロセス、ドメインなどの単位毎に異なる暗号方式又は暗号鍵を用いる方法などが考えられる。
【００１３】
しかしながら、ページング時にページ単位で暗号化並びに複合化を行なう方法は、データ実行時に暗号化処理と復号処理のためのオーバヘッドが生じる。このため、比較的簡単なアルゴリズムの暗号化方式を使用すると、暗号強度が高められないという問題がある。また、データ参照時に必ず復号を行なう必要があるため、処理性能（スループット）が低下してしまうという問題がある。
【００１４】
すなわち、データを利用する装置でデータやプログラムを利用する場合に、そのデータやプログラムが不正に改ざん又は解析されてしまうという問題がある。また、従来のデータ保護方法では、バス・モニタやＩＣＥなどのツールによる解析に対して無力であったり、又は、暗号化の強度を弱める必要があったり、処理性能が低下するという問題がある。
【００１５】
また、データを利用する装置においてはプロセッサと安全な通信路で接続されたメモリを使用するが、このメモリの容量は限定されているために、効率的に使用する必要がある。
【００１６】
【発明が解決しようとする課題】
本発明の目的は、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【００１７】
本発明のさらなる目的は、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【００１８】
本発明のさらなる目的は、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【００１９】
本発明のさらなる目的は、暗号の強度を弱めることなく、暗号化を行なわない場合と処理性能を同程度に維持しながら、他のプログラムやバス・モニタやＩＣＥなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することにある。
【００２０】
【課題を解決するための手段及び作用】
本発明は、上記課題を参酌してなされたものであり、その第１の側面は、データをメモリ空間に配置してデータを利用するデータ利用装置であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを１以上のブロックに再構成するデータ再構成手段と、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置手段と、
各メモリ領域に配置されたブロックを利用するブロック利用手段と、
を具備することを特徴とするデータ利用装置である。
【００２１】
ここで、前記メモリ空間の少なくとも１つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリである。また、前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、前記セキュア・メモリは例えば前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリとして構成される。
【００２２】
また、再構成されたブロックは、例えばページング方式の仮想記憶システムにおいてページイン及びページアウトなどの際にデータ転送を行なう単位となるページに相当する。
【００２３】
エレメントに付加される属性とは、例えば、データに対して改竄防止と秘匿性の確保が必要であることを表わすセキュリティ属性のことである。
【００２４】
そして、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを前記セキュア・メモリに優先的に配置する。
【００２５】
また、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを安全な方法で前記セキュア・メモリに配置する。
【００２６】
例えば、セキュリティ属性が付加されているセキュリティ・ブロックは、暗号化処理又はその他の処理により実行不能形式でハード・ディスクなどの外部記憶装置あるいはセキュア・メモリ以外のメモリ領域に格納されており、セキュリティ・ブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するようにする。（本発明は、ＨＤＤやＤＶＤなどの外部記憶装置だけでなく、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も対象とする。）
【００２７】
また、セキュア・メモリが不足した状態などにおいて、前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行するが、前記セキュア・メモリに配置されているブロックを交換する際に該エレメントを実行不能形式に再変換することで、改竄や解析を防止する。
【００２８】
本発明の第１の側面に係るデータ利用装置においては、まずエレメントの集合として構成されるデータに関して、プログラムやデータの改竄や秘匿性に関する属性であるセキュリティ属性を付加する。そして、セキュリティ属性を基にデータの再構成を行ない、同一のセキュリティ属性が与えられたエレメントを１つのブロックとして、データを複数のブロックで構成する。
【００２９】
セキュリティ属性により、改竄や解読の防止が必要であると識別されたセキュリティ・ブロックは例えば暗号化を行なうなどの処理が施される。データ利用装置において、データが利用される際には、セキュリティ・ブロックはプロセッサと安全な通信路で接続された復号装置（例えばプロセッサと同一チップ内にある復号装置）で復号されプロセッサに送られる。そして、復号データはプロセッサと安全な通信路で接続されたセキュア・メモリ（例えばプロセッサと同一チップ内にあるメモリ）に保管される。
【００３０】
また、セキュア・メモリが不足した際には、その内容をプロセッサと安全な通信路で接続された暗号装置により暗号化したものをプロセッサ外部のメモリや記憶装置等に保管するとともに、必要になった際には逆に復号を行ないセキュア・メモリ内に再び配置を行なう。
【００３１】
したがって、本発明によれば、改ざんや解析を防止したいデータ部分はデータ利用装置内のセキュア・メモリに暗号化されずに安全に配置することができるので、処理性能を落とすことなく、改竄や解析を防止することができる。
【００３２】
また、セキュア・メモリが不足した場合のみプロセッサ外部のメモリや記憶装置に暗号化を行なった上で書き出し（ページアウト）が行なわれるので、暗号化及び復号の回数を非常に少なくすることができる。また、ページングの際に用いる暗号の強度を落とす必要がなくなる。
【００３３】
なお、データを構成する各エレメントに対して付加するセキュリティ属性として、例えば以下に示すような情報を記述することができる。
【００３４】
（１）改竄防止と秘匿性の確保が必要であることを示す情報、すなわち、安全な場所に配置することを要請する情報。
（２）利用頻度を示す情報。
この場合、利用頻度と他のセキュリティ属性を利用することで、セキュア・メモリが十分にない場合、頻度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに（必要があれば暗号化を行って）配置することで性能の向上を図るなどの使い方が考えられる。
（３）改竄防止と秘匿性の確保の強度を示す情報。
この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
（４）改竄防止と秘匿性の確保の優先度を示す情報。
この場合、セキュア・メモリが十分にない場合、優先度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに配置することで、少なくとも優先度の高い部分をセキュア・メモリに割り当てるなどの使い方が考えられる。
（５）セキュア・エレメント外からの参照を許可するかどうかを示す情報。
この場合、セキュア・メモリに配置された情報をそれ以外の外部メモリから参照する場合に、一定のチェックを行なうために使用することができる。
【００３５】
また、データを構成する各エレメントに対して、例えば以下に示すように方法によって属性を付与することができる。
【００３６】
（１）プログラム・データのソースコードにおいてプログラム設計者が指定する。
（２）データベース又はその他の管理手段を利用して自動的に指定する。
例えば、あらかじめセキュアにしなければならない関数名などが分っている場合などに利用することができる。
（３）プログラム・データの解析結果に基づいて自動的に指定する。
この場合、セキュリティ属性が付加されていない関数であっても、セキュリティ属性の付いた関数を直接呼び出す関数はやはりセキュア・メモリに配置したい場合などに使用することができる。
【００３７】
また、セキュリティ・ブロックをプロセッサへ安全に転送する方法として、以下に示すものが挙げられる。
【００３８】
（１）送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと安全な通信路で接続された復号装置で復号する方法。
（２）送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと同一のチップ内に組み込まれる復号装置で復号する方法。
（３）送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサ内部で復号する方法。
（４）ＳＳＬなどの暗号化の施された通信路を使用してデータ利用装置のプロセッサで受け取る方法。
（５）セキュリティ・ブロックが実行コードである場合、送信側でセキュリティ・ブロックを難読化して転送する方法。
【００３９】
また、セキュリティ・メモリの構成として、プロセッサと同一チップ内に組み込まれる内部メモリを用いる以外に、以下の実現形態を挙げることができる。
【００４０】
（１）暗号化の施された通信路でプロセッサと接続されたプロセッサ外部のメモリ。
（２）解析の困難なプロトコルを利用した通信路でプロセッサと接続されたプロセッサ外部のメモリ。
【００４１】
また、セキュア・メモリは改竄防止と秘匿性の確保のために、ノーマル・メモリなどセキュア・メモリ外からの参照が原則として禁止されているが、特定の条件下でのみ参照を許可するようにしてもよい。特定の条件下でのみ参照を許可する手段として、以下の例を挙げることができる。
【００４２】
（１）前記セキュア・メモリ外からの参照を許可する条件を示す情報に基づいて、前記ノーマル・メモリ上で動作するコードから前記セキュア・メモリへの参照を行なう場合に、参照の識別子（数字や名前など）を指定し、識別子が登録されていることを確認して参照を許可する。
（２）前記セキュア・メモリ外のブロックが改変されていないことを示す情報（例えば電子署名）を付加して参照を行ない、該ブロックが不正に改変されていないことを確認して参照を許可する。
【００４３】
また、本発明の第２の側面は、改竄や解析などの不正利用から保護されたセキュア・メモリを含んだメモリ空間上にデータを配置して利用する処理をコンピュータ・システム上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
データは複数のエレメントの集合で構成され、且つ、各エレメントは不正利用からの保護形式に関する情報を記述した属性情報を持ち、
同じ属性が与えられているエレメントを１以上のブロックに再構成するデータ再構成ステップと、
セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするコンピュータ・プログラムである。
【００４４】
本発明の第２の側面に係るコンピュータ・プログラムは、コンピュータ・システム上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第２の側面に係るコンピュータ・プログラムをコンピュータ・システムにインストールすることによって、コンピュータ・システム上では協働的作用が発揮され、本発明の第１の側面に係るデータ利用装置と同様の作用効果を得ることができる。
【００４５】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【００４６】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施形態について詳解する。
【００４７】
セキュリティ属性の設定
本実施例では、改竄及び解析を防止するデータとして、プログラムを扱う。そこで、まず、本発明が適用されるプログラムにおける、セキュリティ属性の設定方法について説明する。
【００４８】
本実施形態では、プログラムとして  Ｃ  言語で記述されたプログラムを取り上げる。図１には、Ｃ言語の関数とグローバル及びスタティック変数をプログラムを構成するエレメントとして使用する例を示している。同図に示すように、Ｃ言語とそのコンパイラは、キーワードｓｅｃｕｒｅとｅｘｐｏｒｔｅｄを受け付けるように拡張されている。
【００４９】
本実施形態では、このｓｅｃｕｒｅとｅｘｐｏｒｔｅｄを使い、各エレメントにセキュリティ属性を設定する。図１に示す例では、関数ｆｏｏにｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄのセキュリティ属性が、関数ｂａｒ  にｓｅｃｕｒｅのセキュリティ属性が、それぞれ付けられている。ｓｅｃｕｒｅの属性が付けられた関数や変数は、改竄防止や秘匿性の確保が要求されているセキュリティ・ブロックを構成する。後述するように、セキュリティ・ブロックは、プロセッサによるプログラム実行時においても改竄防止や秘匿性の確保が施されているセキュア・メモリ（本実施形態ではプロセッサと同一チップ内にある内部メモリ）に配置（ロード）される。
【００５０】
ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄは、ｓｅｃｕｒｅと同様にセキュア・メモリに配置されるが、セキュリティ属性が付けられていない関数から呼び出すことができるという点で相違する。図１に示す例では、関数ｆｏｏはセキュリティ属性のない通常の関数から呼び出すことができる。これに対し、ｂａｒはセキュリティ属性のない通常の関数から直接呼び出すことができず、ｆｏｏのようなｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄが指定された関数を経由して間接的にしか呼び出すことができない。なお、変数にはｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄを指定することはできない。
【００５１】
また、ｓｅｃｕｒｅ又はｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄの関数内で実行時に動的に確保するヒープメモリは、セキュア・メモリ内に割り当てられる。
【００５２】
なお、本明細書中では詳解しないが、他のセキュリティ属性としてエレメントの使用頻度やセキュリティに関する優先度を与えることもできる。これらは、セキュア・メモリに割り当てる際に、割り当ての優先度やセキュア・メモリが不足した際に、プロセッサ外部のメモリや記憶装置にページアウトを行なうページを決定する際に利用することができる。
【００５３】
あるいは、他のセキュリティ属性として改竄防止と秘匿性の確保の強度を示す情報を与えることができる。この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
【００５４】
リロケータブル形式のプログラムの構造
図１に示した方法でセキュリティ情報が設定されたソース・プログラムを、本実施形態に係るコンパイラでコンパイルを行なうと、リロケータブル形式のファイルが作成される。図２には、リロケータブル形式のプログラムの構造を例示している。本実施形態では、ＥＬＦ（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋｉｎｇ  Ｆｏｒｍａｔ）形式のファイルに本発明を適用した例を示している。
【００５５】
プログラムの先頭には、ＥＬＦヘッダが置かれる。ＥＬＦヘッダには、このファイルがＥＬＦの実行形式であることを示す識別子や形式のバージョン番号、この実行形式を実行できるプロセッサ情報などが記述されている。また、後述するプログラム・ヘッダ（Ｐｒｏｇｒａｍ  Ｈｅａｄｅｒ）やセクション・ヘッダ（Ｓｅｃｔｉｏｎ  Ｈｅａｄｅｒ）のファイル内の位置と個数が記述されている。このため、まずＥＬＦヘッダを参照することでプログラム・ヘッダやセクションを参照することができる。リロケータブル形式ではプログラム・ヘッダが存在しないので、これについては実行形式の構造で説明する。
【００５６】
セクション・ヘッダは、プログラムの中身であるセクション（Ｓｅｃｔｉｏｎ）に関連する情報を持つテーブルである。セクション・ヘッダには、セクション毎にエントリが設けられている。セクション・ヘッダの各エントリは、対応するセクションのファイル内での位置、大きさ、属性情報を保持している。セクションは、ファイル中でプログラムそのものを保持する領域であり、例えば．ｔｅｘｔ、．ｄａｔａ、．ｂｓｓなどがあり、各領域にはそれぞれプログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データが保持される。実際には、これら以外のセクションも存在するが、説明の簡素化のためここでは省略してある。．ｂｓｓ  は、セクション・ヘッダにはエントリが存在するが、ファイル内に対応するセクションは存在しない。これは、．ｂｓｓ  ｓｅｃｔｉｏｎはすべて０であることが分かっているので、不必要にファイル・サイズを大きくすることを防ぐために存在しない。プログラム・ファイルを実行する際、ＯＳなどによって、０で初期化されたメモリが割り当てられる。
【００５７】
本実施形態では、これら通常のセクションに加え、．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓのセクションが存在する。これらは、プログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データのうち、改竄又は解析の防止を行ないたいブロックをそれぞれ保持する。
【００５８】
具体的には、図１に示したソースコードにおいて、ｓｅｃｕｒｅ又はｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄのセキュリティ属性が付けられた関数又は変数が、コンパイラによりこれらのセクションに配置される。また、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄのセキュリティ属性が付けられた関数に対しては、スタブがコンパイラにより生成される。
【００５９】
ｓｅｃｕｒｅのセキュリティ属性が付けられた関数は、通常の関数から呼び出されない（ｓｅｃｕｒｅ又はｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄ  のセキュリティ属性が付けられた関数のみから呼び出される）。これに対し、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄ  のセキュリティ属性が付けられた関数は、ｓｅｃｕｒｅ又はｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄ  のセキュリティ属性が付けられた関数以外に、通常の関数から呼び出される。スタブは、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄ  のセキュリティ属性が付けられた関数が通常の関数から呼び出された際の、引数の受け渡し処理を安全に行なうためのコードである。スタブは、コンパイラにより自動生成され、．ｓｅｃｕｒｅ．ｔｅｘｔセクションに挿入される。スタブの動作については、ノーマル状態とセキュア状態の遷移の項で説明する。
【００６０】
なお、．ｂｓｓ  と同様に、．ｓｅｃｕｒｅ．ｂｓｓもセクション・テーブルには存在するが実際のセクションは存在しない。．ｓｅｃｕｒｅ．ｂｓｓセクションは、実行時にＯＳなどによってセキュア・メモリ内に０で初期化されて割り当てられる。
【００６１】
セクション・ヘッダの属性は、Ａ、Ｘ、Ｗ、Ｓの組み合わせで構成される。Ａは、対応する  セクションが割り当てられていることを示す。このため、．ｂｓｓ  や．ｓｅｃｕｒｅ．ｂｓｓにはＡの属性が付かない。また、Ｘは、実行可能を意味し、．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｔｅｘｔに付けられている。また、Ｗは、ｗｒｉｔｅ（書き込み）可能領域であることを示す。ＸもＷも、メモリ保護属性を決定する際に使用される。Ｓは、本発明により拡張された属性であり、対応するセクションを、改竄防止や秘匿性の確保が施されているセキュア・メモリに割り当てることを要請する。本実施形態では、．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓなどのセクションにこの属性Ｓが付いている。
【００６２】
リロケータブル形式には、リロケーション・セクションがある。リロケーション・セクションは、プログラムを実行形式にするためにリンカによってリンクを行う際に使用される。１つのリロケーション・セクションは１つのセクションに対応し、そのセクション内でリンク処理の必要な位置とその種類が記述されているテーブルである。例えば．ｒｅｌ．ｔｅｘｔは．ｔｅｘｔに対応している。本実施形態では、リロケーション・セクションも拡張され、．ｒｅｌ．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｒｅｌ．ｓｅｃｕｒｅ．ｄａｔａ、．ｒｅｌ．ｓｅｃｕｒｅ．ｂｓｓ、．ｒｅｌ．ｓｅｃｕｒｅ．ｂｓｓが追加されており、それぞれ順に．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓに対応している。
【００６３】
実行形式のプログラム構造
図２で示した構造を持つ複数のリロケータブル形式のプログラムをリンカによりリンクすることで、実行形式のプログラムを作成することができる。実行形式のプログラムの構造を図３に示す。リンクが完了しているためリロケータブル・セクションが存在しない点と、プログラム・ヘッダが追加された点で図２に示したリロケータブル形式とは相違する。
【００６４】
プログラム・ヘッダは、ＯＳなどがプログラムをメモリ中にロードし実行可能にする際に参照する情報である。プログラム・ヘッダは、セクション・ヘッダと同様に、テーブルになっていて、各エントリには複数のセクションが対応する。各エントリは、ロードするメモリ・アドレス、ファイルの位置、ファイル上でのサイズ、メモリ上でのサイズ、属性などの情報を保持している。属性はプログラム・ヘッダの１エントリに対応する複数のセクションのセクション・ヘッダの属性によって決定される。
【００６５】
図３に示す例では、プログラム・ヘッダの最初のエントリは、実際には．ｔｅｘｔ  セクション１つに対応している。２番目のエントリは．ｄａｔａ  と．ｂｓｓ  に対応している。このため、２番目のエントリはファイル上のサイズとメモリ上のサイズが異なっている。その理由は、上に説明したように、．ｂｓｓセクションはファイル内に存在しないためである。３番目のエントリは  ．ｓｅｃｕｒｅ．ｔｅｘｔ１つに対応している。１番目のエントリと比較して、属性にＳ  が付いているのは、このエントリに対応するすべてのエントリ（この場合  ．ｓｅｃｕｒｅ．ｔｅｘｔ  ただ１つ）が、Ｓの属性をセクション・ヘッダで持っているためであり、ＯＳなどがプログラムをメモリにロードする際には、実際にはプログラム・ヘッダのこの属性を参照して、セキュア・メモリに配置するようになっている。４番目のエントリは  ．ｓｅｃｕｒｅ．ｄａｔａと．ｓｅｃｕｒｅ．ｂｓｓである。
【００６６】
リンカは、リンク時にリロケーション・セクションを用いたリンクを行なうとともに、複数のリロケータブル・ファイルの同じセクションは１つにまとめる処理を通常行なう。つまり、複数のリロケータブル形式のファイル中の．ｔｅｘｔセクションは、リンカの出力する実行形式のファイルにおいて１つの．ｔｅｘｔセクションにまとめられる。また、複数のリロケータブル・ファイル中で定義されたｓｅｃｕｒｅ  ｂｌｏｃｋ  である、．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓも、実行形式ファイル中で１つの．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓ  にまとめられる。
【００６７】
本実施形態では、リンカはリンク時にこれらの処理に加えて、セキュア・エントリポイントを作成して．ｓｅｃｕｒｅ．ｔｅｘｔに挿入する。セキュア・エントリポイントは、ノーマル状態からセキュア状態に遷移する入り口のコードである。セキュア・エントリポイントの動作についてはノーマル状態とセキュア状態の遷移の項で説明する。
【００６８】
そして、プログラム・ヘッダを作成後、プログラム・ヘッダでＳの属性が付けられた部分を共通鍵暗号方式で暗号化を行なう。ここで使う暗号化の鍵を「コンテンツ鍵」と呼ぶことにする。本実施例で使用する暗号化は一部を改竄して置き換えることができないような方式の暗号方式が使用されているものとする。
【００６９】
暗号方式によっては、復号はできなくとも暗号化されたデータの一部分を別のデータに置き換えることができる。置き換えられたデータも問題なく復号できてしまうので、改竄が可能である。また、別の方法では、電子署名を添付することでも改竄を防止することができる。
【００７０】
これにより、図２で示された構造をとる複数のリロケータブル・ファイルは、リンカのリンク処理により、図３で示すような構造の実行形式をとる。
【００７１】
また、関連する複数のリロケータブル・ファイルは、アーカイブ・コマンドによりまとめられ、１つのライブラリを構成することができる。
【００７２】
ライブラリ中に含まれる各リロケータブル・ファイルを図２に示すような構造にすることにより、ライブラリをリンクしてアプリケーションの開発を行なう場合においても、アプリケーション独自に改竄や解析から保護したい部分に加えて、アプリケーション開発者が利用するライブラリの保護したい部分もアプリケーション開発者には透過的に、１つのセキュア・ブロックとしてリンカによってリンク処理されることになる。
【００７３】
通常、アプリケーション開発者は自身が利用するライブラリについてはそれの提供するインタフェース仕様のみしか知り得ないため、このような透過的な処理が行なえることは重要である。
【００７４】
ハードウェアの構成
図４には、本発明が適用されるプログラム利用装置のハードウェア構成の一例を示している。
【００７５】
このシステムは、プロセッサ１０を中心に構成されている。プロセッサ１０は、メモリに記憶されたプログラムに基づいて各種の処理を実行する。また、プロセッサは、外部バス・インターフェース１４及びバス３０を介して接続されている各種の周辺機器を制御している。バス３０に接続された周辺機器は次のようなものである。
【００７６】
外部メモリ２０は、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリで構成され、プロセッサ１０において実行されるプログラム・コードをロードしたり、実行プログラムの作業データを一時格納したりするために使用される。
【００７７】
外部メモリ２０は、プロセッサ１０と同じチップ内に組み込まれている内部メモリ（図示しない）とともに、プロセッサ１０のメモリ空間を構成する。内部メモリは、プロセッサ・チップ内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ２０は、バス・モニタやＩＣＥなどのツールを用いて解析や改竄が可能なバス３０上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【００７８】
ディスプレイ・コントローラ２１は、プロセッサ１０から送られてくる描画命令に従って表示画像を生成し、表示装置２２に送る。ディスプレイ・コントローラに接続された表示装置２２は、ディスプレイ・コントローラ２１から送られた表示画像情報に従い、その画像を画面に表示出力する。
【００７９】
入出力インタフェース２３は、キーボード２４やマウス２５が接続されており、キーボード２４やマウス２５からの入力信号をプロセッサ１０へ転送する。
【００８０】
ネットワーク・インタフェース２６は、ＬＡＮやインターネットなどの外部ネットワークに接続されており、インターネットを介したデータ通信を制御する。すなわち、プロセッサ１０から送られたデータをインターネット上の他の装置へ転送するとともに、インターネットを介して送られてきたデータを受け取りプロセッサ１０に渡す。
【００８１】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び／又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをネットワーク経由でダウンロードすることができる。
【００８２】
ハード・ディスク装置（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）コントローラ２７には、ＨＤＤなどの大容量外部記憶装置２８が接続されており、ＨＤＤ  コントローラ２７が接続されたＨＤＤ２８へのデータの入出力を制御する。ＨＤＤ２８には、プロセッサが実行すべきオペレーティング・システム（ＯＳ）のプログラム、アプリケーション・プログラム、ドライバ・プログラム、さらにはプログラムによって参照又は再生処理が行なわれるデータやコンテンツなどが格納されている。
【００８３】
本実施形態では、各プログラムは、ＨＤＤ２８上に実行可能形式でインストールされる他、暗号化やその他の実行不能形式のまま保存されている。また、プログラム中のセキュリティ・ブロックのみが暗号化されて保存されている。
【００８４】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び／又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをＨＤＤ２８上に格納することができる。
【００８５】
なお、パーソナル・コンピュータなどのプログラム利用装置を構成するためには、図４に示した以外にも多くの電気回路などが必要である。但し、これらは当業者には周知であり、また、本発明の要旨を構成するものではないので、本明細書中では省略している。また、図面の錯綜を回避するため、図中の各ハードウェア・ブロック間の接続も一部しか図示していない点を了承されたい。
【００８６】
本実施形態では、アプリケーション・プログラムはプログラム開発者により、図１に示した方法によりエレメントにセキュリティ属性が設定され、コンパイルされる。さらに、コンパイルされた複数のリロケータブル形式のプログラムやライブラリはリンカによりリンクされ、図３で示した構造の実行形式のアプリケーション・プログラムになる。
【００８７】
実行形式のアプリケーション・プログラムのプログラム・ヘッダの属性でＳが付加された部分は、暗号強度の高い共通鍵方式で暗号化が行なわれている。この鍵をコンテンツ鍵と呼ぶ（前述）。アプリケーション・プログラムは例えばインターネット上のサーバに蓄積され、プログラム利用装置のユーザは、インターネットでｗｅｂなどを通じてプログラムを購入することができる。そして、購入したプログラムはインターネットを通じてプログラム利用システムにダウンロードされ、ＨＤＤ２８に記録される。
【００８８】
このとき、アプリケーション・プログラムを暗号化したコンテンツ鍵は、購入後にプロセッサ１０内でプロセッサ１０の持つ共通鍵方式のプロセッサ１０に固有の秘密鍵（以後プロセッサ固有鍵）で暗号化された後、  ＨＤＤ２８に記録される。これにより、アプリケーション・プログラムを不正に解読又は改竄されるのを防止する。
【００８９】
また、本実施形態でプログラム実行環境を提供するＯＳは、暗号強度の高い共通鍵方式で暗号化が行なわれ、ＨＤＤ２８に記録されている。この鍵を本明細書中では「ＯＳ鍵」と呼ぶことにする。ＯＳ鍵は、プロセッサ固有鍵で暗号化されてＨＤＤ２８に記録されている。また、ＯＳをＨＤＤ２８から読み出すブート・ローダはプロセッサ１０と同一チップ内にあるＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ：図示しない）に焼き込まれているものとする。このため、ブート・ローダを改変することはできない。
【００９０】
ブート・ローダは、ＨＤＤ２８から暗号化されたＯＳ鍵を読み込むと、プロセッサ１０内部でプロセッサ固有鍵を用いて復号してＯＳ鍵を取り出す。そして、得られたＯＳ鍵を使って  ＨＤＤ２８から暗号化されたＯＳを読み込んで、プロセッサ１０内部で復号を行ないながら、ＯＳの起動を行なうようになっている。これにより、ＯＳが解読又は改竄されるのを防止することができる。
【００９１】
アプリケーション・プログラムのプログラム・ヘッダの属性でＳが付加されたセクションやＯＳの暗号化とその鍵の管理方式にはさまざまな方法がある。本実施形態では、これらの暗号化にコンテンツ鍵やＯＳ鍵を使い、さらにそれらの鍵をプロセッサ固有鍵で暗号化する方法を採用する。
【００９２】
プロセッサの構造
図５には、図４に示したプロセッサ１０の内部構造をより詳細に示している。
【００９３】
プロセッサ１０内部には、命令の解釈と実行を行なうプロセッサ・コア１１を中心に構成されている。プロセッサ・コア１１は、命令のフェッチやデータの参照のためにメモリの内容が必要になると、該当するデータの仮想アドレスをＭＭＵ（Ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ：メモリ管理ユニット）１２に出力する。
【００９４】
ＭＭＵ１２は、仮想アドレスから物理アドレスへの変換を行なう。ＭＭＵ１２は、アドレス変換早見表としてのページ・テーブルを保持するために、カーネル・ページ・レジスタ１２Ａとユーザ・ページ・レジスタ１２Ｂという２種類のレジスタをその内部に備えている。
【００９５】
仮想アドレスの変換は、カーネル・ページ・レジスタ１２Ａ又はユーザ・ページ・レジスタ１２Ｂが保持するページ・テーブルを用いて行なう。本実施形態のプロセッサ１０は、動作モードとして、カーネル・モードとユーザ・モードを持っている。そして、ユーザ・モードはさらにセキュア状態とノーマル状態に分けられる。このモードと状態の組み合わせにより、ＭＭＵ１２は、アクセスできるアドレス領域を決定し、ページ・テーブルを用いて仮想アドレスを物理アドレスに変換する。アクセスできるアドレス領域については、プロセッサ１０のメモリ・マップの項で説明する。ＭＭＵ１２によって変換された物理アドレスはキャッシュ１３に渡される。
【００９６】
キャッシュ１３は、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）などの高速動作メモリで構成され、頻繁にアクセスされるプログラム・コードやデータの一時的な保管場所として利用される。本実施形態では、キャッシュ１３は、ＭＭＵ１２から入力された物理アドレスに対応するデータをその内部に保持している場合は（キャッシュ・ヒット）、それをプロセッサ・コア１１に返すようになっている。また、キャッシュに対応するデータが見つからなかった場合には（キャッシュ・ミス）、物理アドレスはその先の内部メモリ１５又は外部バス・インターフェース１４に出力される。物理アドレスが内部メモリ１５に対応する場合は、そこからデータが取り出され、キャッシュ１３に保存されるとともに、プロセッサ・コア１１に渡される。また、物理アドレスが外部メモリに対応する場合は、外部バス・インターフェース１４を介して外部メモリ２０からデータが取り出され、キャッシュ１３に保存されるとともに、プロセッサ・コア１１に渡される。
【００９７】
プロセッサ・コア１１は、特別な命令  ＬｏａｄＰａｇｅやＳｔｏｒｅＰａｇｅ  を実行した際に、ＭＭＵ１２の管理する情報に基づいて、暗号処理ユニット１６に対して暗号化又は復号の指示を出す。このとき、暗号処理ユニット１６は指定された鍵に基づいて外部バス・インターフェース１４経由で入ってきたデータ（ページインされたデータ）を復号して内部メモリ１５に保存したり、内部メモリ１５のデータ（ページアウトするデータ）を暗号化して外部バス・インターフェース１４を介して外部メモリ２０に書き出したりすることができる。
【００９８】
ＬｏａｄＰａｇｅは外部メモリ２０上のデータを内部メモリ１５にロードするための命令であり、ＳｔｏｒｅＰａｇｅは内部メモリ１５上のデータを外部メモリに書き出すための命令であるが、これらの命令実行時の動作の詳細については後述に譲る。
【００９９】
暗号処理ユニット１６は、その内部に乱数発生器１６Ｂを持ち、上述したデータの暗号化及び復号を行なうための共通鍵の生成に使用する。また、暗号処理ユニット１６は、共通鍵暗号方式のプロセッサに固有の秘密鍵であるプロセッサ固有鍵１６Ｃを保持する。プロセッサ固有鍵１６Ｃは、各プロセッサ毎に異なる鍵となっている。また、暗号処理ユニット１６は、暗号テーブルを保持するための暗号テーブル・レジスタ１６Ａをその内部に持っている。
【０１００】
キャッシュ１３は、物理アドレスをタグとして内部に保存されているキャッシュ・ラインに対応するものがあるかどうかを検索し、あればキャッシュ・ライン上のデータを返すようになっている。また、ＳｔｏｒｅＰａｇｅ命令を実行したときには、内部メモリ１５の指定された物理アドレスのタグに対応するキャッシュ・ライン上のデータがあればそれを無効化する。
【０１０１】
プロセッサ１０と同じチップ内に組み込まれている内部メモリ１５は、外部バス・インターフェース１４を介して接続されている外部メモリ２０とともに、プロセッサ１０のメモリ空間を構成する。内部メモリ１５は、プロセッサ１０内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ２０は、バス・モニタやＩＣＥなどのツールを用いて解析や改竄が可能なバス３０上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【０１０２】
最近のＤＲＡＭ混載プロセッサの実装技術の発達により、比較的大容量の内部メモリ１５をプロセッサ１０内部に搭載することが可能となってきている。
【０１０３】
プロセッサのメモリ・マップ
図６には、図４及び図５で示したプロセッサ１０の定義するメモリ・マップを模式的に示している。
【０１０４】
プロセッサ１０は、動作モードとしてカーネル・モードとユーザ・モードを持つ。そして、ユーザ・モードはさらにセキュア状態とノーマル状態がある。このモードと状態の組み合わせにより、ＭＭＵ１２はアクセスできるアドレス領域を決定する。
【０１０５】
カーネル・モードはＯＳの実行時に使用され、ユーザ・モードはアプリケーション・プログラムの実行時に使用される。そして、ユーザ・モードでノーマル状態のときに、アプリケーション・プログラムがｓｃａｌｌ命令を実行することでセキュア状態に遷移し、セキュア状態の時にｓｒｅｔ命令を実行することでノーマル状態に遷移するようになっている。それぞれのモードと状態の組み合わせによってアクセスできるメモリ領域が異なり、アクセスできない領域をアクセスした場合には、ＭＭＵ１２からプロセッサ・コア１１に例外が発生するようになっている。
【０１０６】
図６に示す例では、プロセッサ１０のメモリ・マップは５つの領域に分けられている。
【０１０７】
１つのメモリ領域は、物理アドレス内部メモリ領域すなわち内部メモリ１５にマッピングされた領域であり、このメモリ空間を参照した場合には、ＭＭＵ１２は仮想アドレスから物理アドレスへの変換は行なわず、指定した仮想アドレスをそのまま物理アドレスとして出力する。この物理アドレスは、プロセッサ１０の内部メモリ１５を参照することのみに使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。ＭＭＵ１２の持つカーネル・ページ・レジスタ１２Ａの保持するアドレスは、この物理アドレス内部メモリ領域を指すように設定される。
【０１０８】
物理メモリ外部メモリ領域は、同様に、外部メモリ２０にマッピングされた領域であり、このメモリ空間を参照した場合には、ＭＭＵ１２による仮想アドレスから物理アドレスへの変換は行なわれず、指定した仮想アドレスがそのまま物理アドレスとして利用される。この物理アドレスはプロセッサ１０の外部メモリ２０を参照することのみに使用される。このメモリ領域は、ＯＳによって、ＭＭＵ１２による変換なしに直接外部メモリ２０を参照したい場合に使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。
【０１０９】
仮想アドレス・カーネル領域は、ＭＭＵ１２によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モードで実行している場合のみ参照が可能な領域である。
【０１１０】
仮想アドレス・カーネル領域がアクセスされると、ＭＭＵ１２は、カーネル・ページ・レジスタ１２Ａに保持されるカーネル・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。ＭＭＵ１２が持つユーザ・ページ・レジスタ１２Ｂに保持されるユーザ・ページ・テーブルはこの仮想アドレス・カーネル領域に置かれる。また、このメモリ領域は、内部メモリ１５の物理アドレスに変換されるように、ＯＳによってカーネル・ページ・テーブルが作成される。これにより、ＯＳの使用するメモリ領域の秘匿性が確保されている。
【０１１１】
仮想アドレス・セキュア・ユーザ領域は、ＭＭＵ１２によって仮想アドレスから物理アドレスへの変換が行なわれる領域である。このメモリ領域は、カーネル・モード、あるいはユーザ・モードでセキュア状態のいずれかの場合のみに参照が可能な領域である。ユーザ・モード下でノーマル状態においてアクセスが試みられた場合には、アドレス変換は行なわれず、例外がプロセッサ・コア１１に通知される。
【０１１２】
仮想アドレス・セキュア・ユーザ領域がアクセスされると、ＭＭＵ１２は、ユーザ・ページ・レジスタ１２Ｂが保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスが内部メモリ１５の物理アドレスになるように、ＯＳによってユーザ・ページ・テーブルが作成される。
【０１１３】
仮想アドレス・セキュア・ユーザ領域には、アプリケーション・プログラムのセキュア・ブロック、すなわち、図３に示した例で言えば、プログラム・ヘッダのＡｔｔｒｉｂｕｔｅでＳ属性が付けられた部分が暗号を復号した後に配置される。また、セキュア・ブロック内の関数でアロケートされるヒープ領域やスタックも、このメモリ領域に配置される。
【０１１４】
なお、セキュア状態ではプロセッサ・コア１１のセキュア・スタック・レジスタ１１Ａが利用可能となる。セキュア・スタック・レジスタ１１ＡはＯＳによって仮想アドレス・セキュア・ユーザ領域に確保されるようになっている。
【０１１５】
仮想アドレス・ユーザ領域は、ＭＭＵ１２によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モード、あるいはユーザ・モードのセキュア状態又はノーマル状態のどちらで実行している場合でも、参照が可能な領域である。
【０１１６】
仮想アドレス・ユーザ領域がアクセスされると、ＭＭＵ１２は、ユーザ・ページ・レジスタ１２Ｂの保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスは、外部メモリ２０の物理アドレスになるように、ＯＳによってユーザ・ページ・テーブルが作成される。このメモリ領域には、アプリケーション・プログラムのセキュア・ブロック以外の部分、すなわち、図３に示した例で言えば、プログラム・ヘッダのＡｔｔｒｉｂｕｔｅでＳ属性が付けられていない部分が配置される。また、セキュア・ブロック外の関数でアロケートされるヒープ領域やスタックもこの領域に配置される。
【０１１７】
本実施形態では、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域は、アプリケーションを実行するプロセス毎に異なる空間が使用される。すなわち、同じ仮想アドレスでも、異なるプロセスでは別の物理アドレスが使用されるし、仮想記憶システムにより異なるプロセスの仮想アドレスは参照できない。このため、異なるプロセスからの参照はできないようになっている。
【０１１８】
上述したように、アプリケーションの利用可能な領域を仮想アドレス・セキュア・ユーザ領域と仮想アドレス・ユーザ領域の２つに分けることで、アプリケーション・プログラムのうち、解析又は改竄を防止したい部分のみを安全な内部メモリ１５に（優先的に）配置することができる。
【０１１９】
また、仮想アドレス・セキュア・ユーザ領域は、仮想アドレス・ユーザ領域で実行中のノーマル状態での命令からは直接アクセスすることができないようになっているので、バス・モニタなどのツールを使用して外部メモリ２０上に配置されたアプリケーション・プログラムの一部を不正に書き換えたとしても、セキュア・ブロックの内容を解析したり改竄したりすることを防止することができる。
【０１２０】
また、実行時に確保されるヒープ領域とスタックについても、セキュア・ブロック内の関数で確保された部分は仮想アドレス・セキュア・ユーザ領域に配置されるため、同様に不正な解析及び改竄を防止することができる。
【０１２１】
また、セキュア状態からノーマル状態に戻ったときに、キャッシュ１３中にまだセキュア状態で参照した内部メモリ１５の内容が残っていたとしても、それを参照するための仮想アドレス・セキュア・ユーザ領域への参照はＭＭＵ１２により拒否されるので、  セキュア状態からノーマル状態に遷移する際にキャッシュ１３のフラッシュと無効化を行なう必要がなく、高速に遷移できる。
【０１２２】
また、ページ・テーブルを作成するために使用する命令、キャッシュ１３のコントロールを行なう命令、ＬｏａｄＰａｇｅ、ＳｔｏｒｅＰａｇｅといった特権命令は、カーネル・モードでのみ実行できるようになっているので、これらの命令を不正に利用して、内部メモリの内容を解析や改竄することもできないようになっている。
【０１２３】
メモリ管理の構成
ＯＳとＭＭＵ１２によって構成されるメモリ管理の構成について、図７を参照しながら説明する。本実施形態では、当業界で周知のページ方式の仮想記憶を用いてメモリ管理を実現している。以下にその構成と本実施形態での拡張部分について説明する。
【０１２４】
仮想アドレスから物理アドレスへの変換は、ページ・テーブルを参照して行なわれる。本実施形態では、カーネル・ページ・テーブルとユーザ・ページ・テーブルという２種類のページ・テーブルが存在する（前述）。
【０１２５】
カーネル・ページ・テーブルは、プロセッサ１０のメモリ・マップの物理アドレス内部メモリ領域に配置されており、その先頭アドレスがＭＭＵ１２のカーネル・ページ・レジスタ１２Ａにより保持されている。このページ・テーブルは、プロセッサ１０のメモリ・マップの仮想アドレス・カーネル領域のアドレスを物理アドレスに変換するために使用される。カーネル・ページ・テーブルは物理アドレス内部メモリ領域に存在するので、ページアウトが発生することはなく常にアクセス可能である。
【０１２６】
一方、ユーザ・ページ、テーブルは、プロセッサ１０のメモリ・マップの仮想アドレス・カーネル領域に配置されており、その先頭アドレスがＭＭＵ１２のユーザ・ページ・レジスタ１２Ｂにより保持されている。このページ・テーブルは、プロセッサ１０のメモリ・マップの仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のアドレスを物理アドレスに変換するために使用される。
【０１２７】
ユーザ・ページ・テーブルは、アプリケーションの実行毎に複数存在する。そして、個々のユーザ・ページ・テーブルは、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域に置かれる対応するアプリケーション・プログラムのアドレス変換を定義する。ユーザ・ページ・テーブルは複数存在するので、メモリ領域を有効に活用するために、物理メモリ領域ではなく仮想アドレス・カーネル領域にユーザ・ページ・テーブルは置かれ、カーネル・ページ・テーブルを使って管理されるという構造になっている。したがって、カーネル・ページ・テーブルを適切に変更することで、複数の多くのユーザ・ページ・テーブルを持つことができる。
【０１２８】
カーネル・ページ・テーブルとユーザ・ページ・テーブルのエントリは、図７に示すように同じ構成をとる。
【０１２９】
同エントリ中のＤは、ダーティ・ビット（ｄｉｒｔｙ  ｂｉｔ）であり、当該ビットが１の場合対応するページが書き込まれたことを示す。
【０１３０】
Ｒ／Ｗは、このページのアクセス設定であり、１の場合読み込みと書き込みが可能、０の場合読み込みのみが可能であることを示す。指定された以外の参照が発生すると、プロセッサに例外が通知されるが、この処理については一般のページ方式の仮想記憶システムと同様の処理であり、本発明の要旨には直接関連しないので、ここでは説明を省略する。
【０１３１】
Ｌは、ページ・ロックであり、このページをページアウトの対象から外すことができる。
【０１３２】
Ｖは、有効ビット（ｖａｌｉｄ  ｂｉｔ）であり、このページ・エントリが有効であることを示す。当該ビットが１の場合このページは有効で、通常のアドレス変換が行なわれるが、０の場合は無効で、ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ  （ページ失敗例外）が発生する。本実施形態では、ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ  が発生すると、ＯＳの持つページャが動作するように構成されている。
【０１３３】
ＤｅｖＩＤはＶが０のときに意味を持ち、ページアウト先のデバイスを特定するのにページャによって使用される。
【０１３４】
Ｓは、セキュア・ビット（ｓｅｃｕｒｅ  ｂｉｔ）であり、当該ビットが１の場合、対応するページが内部メモリ１５でのみ有効であること（すなわち、セキュリティ属性が付加されていること）を示す。また、当該ビットが０の場合は外部メモリ２０で有効となる。このビットはまた、参照するメモリ領域のチェックにも使用される。現在のモードと状態がユーザ・モードでノーマル状態の場合に、Ｓが１のページを参照しようとすると、ＭＭＵ１２は、アドレス変換を行なわずに、プロセッサ・コア１１に例外を通知するようになっている。これにより、アプリケーション・プログラムがセキュア状態とノーマル状態のどちらであっても、同じページ・テーブルを使用することができ、また、状態遷移時にページ・テーブルを切り替えたり、キャッシュ１３上の内部メモリ１５をフラッシュしたりする必要がなくなり、高速な状態遷移を実現することができる。
【０１３５】
ＫｅｙＩｎｄｅｘは、暗号テーブルへのインデックスであり、このページのセキュア・ビットＳが１（すなわちセキュリティ属性が付加されている）で且つＶが０のときのみ意味を持ち、対応するページの暗号化に使われた情報を指している。
【０１３６】
ＰＦＮは、Ｖが１のときは、このページに対応する物理アドレスの上位部分である。仮想アドレスの下位部分とこのＰＦＮを上位アドレスとして組み合わせることで、ページの物理アドレスが決定される。また、Ｖが０のときは、ＰＦＮは、ＤｅｖＩＤで指定されるデバイス内で対応するページが保存されている位置を示す情報が格納される。本実施形態では、ＤｅｖＩＤが外部メモリ１５を指す場合にはその物理アドレスの上位部分が保持され、ＤｅｖＩＤがＨＤＤ２８を指す場合にはＨＤＤ２８内のページを保存しているセクタ番号が保持される。
【０１３７】
なお、カーネル・ページ・テーブルはすべてＳが１（すなわちセキュリティ属性が付加されている）として設定される。したがって、ユーザ・ぺージ・テーブルはすべて内部メモリ１５に置かれ、内部メモリ１５が不足した場合には暗号化されて外部メモリ２０又はＨＤＤ２８にページアウトされるようになっている。これにより、頻繁に使用されるユーザ・ページ・テーブルのアクセスの高速化と改竄や解読の防止を実現している。
【０１３８】
また、メモリ管理のために、暗号テーブルが設けられている。このテーブルのエントリは図７に示すように共通鍵と参照カウントの組み合わせからなる構造であり、暗号処理ユニット１６の暗号テーブル・レジスタ１６Ａによりその先頭アドレスが保持される。このテーブルは、共通鍵方式の共有鍵を保持するようになっている。暗号テーブルのエントリは、ページ・テーブルのＫｅｙＩｎｄｅｘにより参照される。
【０１３９】
本実施形態では暗号テーブルは固定のエントリ数としたため、参照カウントも持っている。参照カウントが０のエントリは空きエントリであるため、新たに暗号化の必要が生じた際にはその空きエントリに新たに共有鍵が設定され、参照カウントは１に設定される。これは、復号化により鍵を利用した場合には、１だけ引き算される。新たに暗号化の必要が生じた際に、暗号テーブルに空きエントリがない場合には、ランダムに１つのエントリを選びその暗号鍵を利用するとともに、参照カウントを１だけ増やす。暗号テーブルもカーネル・ページ・テーブルと同じく物理アドレス内部メモリ領域に配置される。
【０１４０】
ノーマル状態とセキュア状態の遷移
既に述べたように、ユーザ・モードにはセキュア状態とノーマル状態の２つの状態がある。ノーマル状態にあるときのアプリケーション・プログラムは、仮想アドレス・ユーザ領域への参照のみが許可され、仮想アドレス・セキュア・ユーザ領域へのアクセスはできない。アプリケーションが仮想アドレス・セキュア・ユーザ領域に配置された関数や変数を参照する場合には、セキュア状態に移行する必要がある。これには特別な命令ｓｃａｌｌを使用する。
【０１４１】
図８には、仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順をフローチャートの形式で示している。
【０１４２】
まず、呼び出す関数セレクト番号と引数をスタック上にプッシュする（ステップＳ１）。ここで、関数セレクト番号とは、ソースコードでｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄのセキュリティ属性が付けられたすべての関数に対してリンカにより自動的に割り振られる番号である。引数は、通常の関数呼び出し同様、関数へ入力される値である。
【０１４３】
次いで、ｓｃａｌｌ命令を実行する（ステップＳ２）。これにより、まず、関数呼び出しからの戻り先のアドレスがスタックにプッシュされる。ここまでの実行で使用されたスタックはノーマル状態で使用可能なノーマル・スタック・レジスタ１１Ｂに保持されるスタックである。
【０１４４】
次に、状態がノーマル状態からセキュア状態に変更される。既に説明したように、セキュア状態では、仮想アドレス・セキュア・ユーザ領域への参照が許可される。また、セキュア・スタック・レジスタ１１Ａの使用も許可される。セキュア・スタック・レジスタ１１Ａには、アプリケーションの起動時にＯＳによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・スタックのアドレスが保持されている。
【０１４５】
さらに、セキュア・エントリ・レジスタ１１Ｃの使用も許可される。セキュア・エントリ・レジスタ１１Ｃは、やはりアプリケーションの起動時にＯＳによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・エントリポイントのアドレスが保持されている。セキュア状態でのセキュア・エントリ・レジスタ１１Ｃの使用とは、ｓｃａｌｌによりセキュア・エントリ・レジスタ１１Ｃにより指示されたアドレス（すなわちセキュア・エントリポイント）に実行が遷移することであって、セキュア・エントリ・レジスタ１１Ｃの値を読んだり書いたりすることはできない。これら読み書きはカーネル・モードでのみ許可される。
【０１４６】
ｓｃａｌｌによりセキュア状態に変更された後、セキュア・エントリ・レジスタ１１Ｃの示すアドレスから実行が継続される（ステップＳ３）。上述したように、セキュア・エントリ・レジスタ１１Ｃは、仮想アドレス・セキュア・ユーザ領域のセキュア・エントリポイントのアドレスが保持されているので、リンカによって生成されたセキュア・エントリポイントの実行が行われる。
【０１４７】
セキュア・エントリポイントでは、ノーマル・スタックから関数セレクト番号を取り出し、その番号の値をチェックする。関数セレクト番号がこのアプリケーションで定義された番号以外であった場合、例外が発生する。関数セレクト番号が正しい値であった場合には、関数セレクト番号で指定されたｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数に対応するスタブのアドレスに実行を遷移する。
【０１４８】
スタブは、コンパイラにより自動生成されたコードで、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数に対して１つずつ存在する。スタブでは、ノーマル・スタックから引数をセキュア・スタック上にコピーをする（ステップＳ４）。そして、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数を呼び出す。
【０１４９】
ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数は、セキュア・スタック上から引数を取り出し、関数の処理を実行する（ステップＳ５）。ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数は、ｓｅｃｕｒｅセキュリティ属性の付けられた関数からも関数呼び出しをされることがある。どちらの場合も引数の受け渡しは、セキュア・スタック上で行われる。スタブはノーマル状態からの呼び出しをセキュア状態からの呼び出しと等価にするための処理を行なっているとも言える。
【０１５０】
ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数の実行が終わると、スタブに実行が戻ってくる（ステップＳ６）。スタブは、関数の戻り値をセキュア・スタックからノーマル・スタックにコピーする。
【０１５１】
そして、ｓｒｅｔ命令を実行する（ステップＳ７）。ｓｒｅｔ命令は、戻り先のアドレスをノーマル・スタックから取り出す。そして、スタックやプログラム・カウンタといった特殊なレジスタを除きすべてのレジスタの値を０にクリアした後で、ノーマル状態に遷移をして、戻り先アドレスから実行を再開する。レジスタの値をクリアするのは、レジスタの値をセキュアではない関数の実行により参照することで、セキュアな関数の情報がレジスタを通して漏れることを防ぐためである。
【０１５２】
図９には、内部メモリ１５上に展開されているアプリケーションのセキュア部分（．ｓｅｃｕｒｅ．ｔｅｘｔ）の構成を模式的に示している。
【０１５３】
セキュア部分の先頭アドレスすなわちセキュア・エントリポイントは、セキュア・エントリ・レジスタ１１Ｃに保持されており、ｓｃａｌｌによりセキュア・エントリポイントに実行が遷移する。
【０１５４】
アプリケーションのセキュア部分に含まれる関数には、ｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄ又はｓｅｃｕｒｅいずれかのセキュリティ属性が付加されている。リンカによるリンク時に、ソースコードでｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄのセキュリティ属性が付けられたすべての関数に対して、関数セレクト番号が割り振られる。
【０１５５】
また、コンパイラによりｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた各関数に対して１つずつスタブが自動生成される。スタブは、ノーマル状態からセキュア状態に遷移するときに、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理を行ない、逆にセキュア状態からノーマル状態に戻るときにセキュア・スタック上の返り値をノーマル・スタックにコピーする処理を行なう。
【０１５６】
ｓｃａｌｌによりセキュア・エントリポイントに実行が遷移すると、まず関数セレクト番号に対応するスタブが起動して、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理が行なわれる。その後、関数セレクト番号に該当するｓｅｃｕｒｅ  ｅｘｐｏｒｔｅｄセキュリティ属性の付けられた関数が起動し、その実行が開始される。そして、同関数の実行が終わると、スタブに実行が戻り、セキュア・スタック上の返り値をノーマル・スタックにコピーする処理が行なわれる。その後、ｓｒｅｔ命令の実行によりノーマル状態に遷移をして、戻り先アドレスから実行を再開する。
【０１５７】
アプリケーション・プログラムのロード実行
アプリケーション・プログラムを実行する際、ＯＳは、ＨＤＤ２８に保存されているアプリケーション・プログラムを読み出し、そのプログラム・ヘッダを参照してメモリに配置していく。
【０１５８】
プログラム・ヘッダのエントリの属性にＳが付いていないセクションは、外部メモリ２０を物理アドレスとして配置し、セキュアでないことを示すようにセキュア・ビットＳを０とし、仮想アドレスは仮想アドレス・ユーザ領域を使用するようにユーザ・ページ・テーブルのエントリを作成する。
【０１５９】
また、プログラム・ヘッダのエントリの属性にＳ属性が付いているセクションは、暗号化されているので復号する。まず、ＨＤＤ２８から暗号化されたコンテンツ鍵をプロセッサ１０内に読み込み、プロセッサ１０内部でプロセッサ固有鍵１６Ｃを使用して復号を行ない、コンテンツ鍵を得る。このコンテンツ鍵を使用して、プログラム・ヘッダのエントリの属性にＳ属性が付いているセクションをプロセッサ１０内部に読み込んだ後、プロセッサ１０内で復号し内部メモリ１５を物理アドレスとして配置していく。復号後のセクション・データはプロセッサ外部には一切出ない。そして、セキュア・ビットＳを１とし、仮想アドレスは仮想アドレス・セキュア・ユーザ領域を使用するように、対応するユーザ・ページ・テーブルのエントリを作成する。
【０１６０】
以上の処理により、セキュリティ属性Ｓが付けられたセキュア・ブロックは内部メモリ１５に（優先的に）配置され、それ以外のブロックは外部メモリ２０に配置される。そして、作成されたユーザ・ページ・テーブルの先頭アドレスは、このアプリケーションの実行時にはＭＭＵ１２内のユーザ・ページ・レジスタ１２Ｂに、ＯＳによって設定される。
【０１６１】
また、セキュア・スタックとノーマル・スタックをそれぞれ仮想アドレス・セキュア・ユーザ領域及び仮想アドレス・ユーザ領域に確保して、セキュア・スタック・レジスタ１１Ａ及びノーマル・スタック・レジスタ１１Ｂに設定する。また、セキュア・エントリポイントのアドレスをセキュア・エントリ・レジスタ１１Ｃに設定する。
【０１６２】
ページインの動作
上述したように、アプリケーション・プログラムの実行は、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域上で行なわれる。本実施形態に係るプログラム利用装置では、アプリケーション・プログラムの実行がある仮想アドレス・ユーザ領域又は仮想アドレス・セキュア・ユーザ領域を参照すると、プロセッサ・コア１１からＭＭＵ１２に出力される仮想アドレスの上位部分を、ＭＭＵ１２内のユーザ・ページ・レジスタ１２Ｂが保持しているユーザ・ページ・テーブルのインデックスとして使用することで、ユーザ・ページ・テーブルのエントリが１つ選択されるようになっている。この参照された仮想アドレスに対応するユーザ・ページ・テーブルのエントリの有効ビットＶが０である場合、このページが無効であることを示していて、ページ失敗例外（ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ  ）がＭＭＵ１２からプロセッサ・コア１１に通知され、プロセッサ・コア１１はページャのページインの処理を実行する。
【０１６３】
図１０には、ページャのページインの動作をフローチャートの形式で示している。
【０１６４】
本実施形態では、ページが無効になっている状態（すなわち有効ビットＶ＝０）は、ページ・テーブル・エントリのＳの値に応じて２種類存在する。すなわち、セキュア・ビットＳが１のページであれば、内部メモリ１５にはなく、暗号化されて外部メモリ２０又はＨＤＤ２８にページアウトしている場合と、Ｓが０のページであれば、外部メモリ２０上になくＨＤＤ２８にページアウトしている場合の２通りである。
【０１６５】
このため、図１０に示すページイン処理手順では、Ｖ＝０のページへの参照を検出すると（ステップＳ１１）、まず、セキュア・ビットＳの値をチェックする（ステップＳ１２）。
【０１６６】
そして、セキュア・ビットＳが１の場合は、セキュア・ページのページイン処理を実行し（ステップＳ１３）、Ｓが０の場合は、ノーマル・ページのページイン処理を実行する（ステップＳ１４）。
【０１６７】
いずれのページイン処理が終了しても、例外を発生させたページは内部メモリ１５又は外部メモリ２０上に参照可能な状態で配置されるので、ページインの処理終了後、例外発生時点からアプリケーション・プログラムを実行再開することができる。
【０１６８】
なお、本明細書中では、アプリケーション・プログラムの実行による仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のページインの動作を説明するが、仮想アドレス・カーネル領域を参照した場合にも同様の例外の発生とページインの処理が行なわれる。
【０１６９】
例えば、ユーザ・ページ・テーブルは仮想アドレス・カーネル領域に配置されるので、ページャのページイン処理の実行でページャがＭＭＵ１２のユーザ・ページ・レジスタ１２Ａを使用してページ・テーブル・エントリを選択した場合、そのページ・テーブル・エントリが存在する仮想アドレス・カーネル領域のページがさらに無効になっている場合がある。この場合、さらに別のカーネル・ページ失敗例外（ｋｅｒｎｅｌ  ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ）が  ＭＭＵ１２からプロセッサ・コア１１に通知される。この例外が発生すると  、また別のページインの処理が実行されるが、この処理は上述したページイン処理とほぼ同様である。但し、ＭＭＵ１２のカーネル・ページ・レジスタ１２Ａの指すカーネル・ページ・テーブルを使用する点とカーネル・ページ・テーブルが物理アドレス内部メモリ１５に配置されることから、これ以上のページ例外は発生しないという点が相違する。
【０１７０】
セキュア・ページのページイン動作
ここでは、セキュア・ページのページイン動作について、図１１を参照しながら説明する。これは、図１０に示したフローチャートにおいてページ失敗例外（ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ）を発生させたページのページ・テーブルがＳ＝１であった場合に行われる処理（ステップＳ１３）に相当する。
【０１７１】
まず、内部メモリ１５に空きページがあるかどうかが検索される（ステップＳ２１）。内部メモリに空きがない場合には、セキュア・ページのページアウトが行なわれ（ステップＳ２２）、内部メモリに空きページが作られる。
【０１７２】
次いで、ページ・テーブル・エントリのＤｅｖＩＤとＰＦＮの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置が特定される（ステップＳ２３）。本実施形態では、ページアウトされているデバイスとして外部メモリ２０とＨＤＤ２８の２つの場合があることになる。どちらの場合もページは暗号化されてページアウトされている。ページアウト先がＨＤＤ２８であった場合には、外部メモリ２０のバッファにページが読み込まれる。
【０１７３】
次いで、ページ・テーブル・エントリのＰＦＮに内部メモリ１５の空きページの物理アドレスを設定する（ステップＳ２４）。そして、ページアウト先の外部メモリ１５のアドレスとページ・テーブルのインデックスをオペランドとしてＬｏａｄＰａｇｅ命令を実行する（ステップＳ２５）。
【０１７４】
ＬｏａｄＰａｇｅ命令は、プロセッサ１０により実行される命令で、次の手順に従い、暗号処理されているセキュア・ページを内部メモリ１５にロードする動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブルのＫｅｙＩｎｄｅｘの値をインデックスとして使い、暗号処理ユニット１６の暗号テーブル・レジスタ１６Ａにより指定される暗号テーブルのエントリから共通鍵方式の復号鍵を取り出し、オペランドで指定された外部メモリ２０のアドレスの内容についての復号処理をプロセッサ１０内部の暗号処理ユニット１６により行なう。復号されたページは、オペランドで指定されたページ・テーブルのＰＦＮで指定される内部メモリ１５に配置される。また、復号に使用した暗号テーブルエントリの参照カウントが１つ減らされる。
【０１７５】
最後に、この処理では該当するページ・テーブル・エントリの有効ビットＶを１に設定するとともに、同エントリのＤｅｖＩＤを内部メモリ１５を示す値に変更する（ステップＳ２６）。
【０１７６】
図１２には、図１１に示したセキュア・ページのページイン処理において、暗号処理されているセキュア・ページを内部メモリ１５にロードする動作を行なうＬｏａｄＰａｇｅ処理の詳細な手順をフローチャートの形式で示している。
【０１７７】
まず、インデックスで指定されたページ・テーブル・エントリのＫｅｙＩｎｄｅｘを使い、暗号テーブルのエントリから共通暗号鍵の鍵を取り出す（ステップＳ３１）。
【０１７８】
次いで、オペランドで指定された外部メモリ２０のアドレスの内容を暗号処理ユニット１６に読み込み（ステップＳ３２）、その復号処理を、共通暗号鍵を用いてプロセッサ１０内部の暗号処理ユニット１６により行なう（ステップＳ３３）。
【０１７９】
そして、復号されたページを、ページ・テーブル・エントリのＰＦＮで指定される内部メモリ１５に配置する（ステップＳ３４）。
【０１８０】
また、復号に使用した暗号テーブルエントリの参照カウントを１つ減らす（ステップＳ３５）。
【０１８１】
本実施形態では、暗号化及び復号処理をプロセッサ１０内部のハードウェアで実行することにより、暗号及び復号処理による処理性能の低下を少なくするようになっている。また、本発明の目的である内部メモリ１５の有効活用により、暗号化および復号の実行そのものが必要最小限にしか行なわれないことと併せ、高速な処理性能を実現することができる。
【０１８２】
セキュア・ページのページアウト動作
ここでは、セキュア・ページのページアウト動作について、図１３を参照しながら説明する。これは、図１１で示したセキュア・ページのページイン処理において、内部メモリ１５に空きページがない場合に実行される処理（ステップＳ２２）に相当する。
【０１８３】
まず、内部メモリ１５からページアウトするページを選択する（ステップＳ４１）。この選択方法には、ランダムに選択する方法やＬＲＵ  （Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）  などの手法がある。また、ページアウトするページの選択方法は多くのＯＳにより既に実装されているので、ここではこれ以上説明しない。なお、本実施形態では、ページ・テーブル・エントリにページ・ロックを表わすＬビットが存在し、Ｌ＝１となっているページはページアウトの対象ページとはならない。
【０１８４】
次いで、外部メモリ２０に空きページがあるかどうかが検索される（ステップＳ４２）。外部メモリ２０に空きがない場合には、ノーマル・ページのページアウトが行なわれ（ステップＳ４３）、外部メモリ２０に空きページが作られる。
【０１８５】
そして、ページアウト先の外部メモリのアドレスとページ・テーブルのインデックスをオペランドとしてＳｔｏｒｅＰａｇｅ  命令を実行する（ステップＳ４４）。
【０１８６】
ＳｔｏｒｅＰａｇｅ  命令は、プロセッサ１０により実行される命令で、次の手順に従い、内部メモリ１５上の復号されたページを暗号処理して外部メモリ２０に書き出す動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのＰＦＮにより指定される内部ページの物理アドレスに相当する内容を保持するキャッシュ・ラインがキャッシュ内に存在するかが検索される。存在した場合で、そのキャッシュ・ラインに書き込みが発生していたならば、その内容を対応する内部メモリ１５に書き込み、そのキャッシュ・ラインを無効化する。書き込みが発生していない場合には、単にそのキャッシュ・ラインを無効化する。次に、暗号テーブルに空きがあるかどうかが検索され、空きがあった場合には乱数発生器１６Ｂで共通鍵暗号の鍵を生成し、暗号テーブルのエントリに登録してその参照カウントを１に設定する。暗号テーブルに空きがなかった場合には、ランダムに選択した暗号テーブルのエントリに登録された共通鍵暗号の鍵を利用する。このとき、そのエントリの参照カウントを１つ増加させる。このようにして得た共通鍵暗号の鍵を使用して、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのＰＦＮにより指定される内部ページの内容の暗号化を行なう。暗号化されたページの内容は、オペランドで指定された外部メモリ２０のアドレスに配置される。上述した動作により、指定した内部メモリ１５はプロセッサ１０により暗号化され外部メモリ２０に書き出される。
【０１８７】
最後に、ページアウトを行ったページ・テーブル・エントリの有効ビットＶを０に、ＤｅｖＩＤを外部メモリ２０を示す値に、ＰＦＮを外部メモリ２０中のページアウトした内容の保存先を示す物理アドレスに設定する（ステップＳ４５）。
【０１８８】
図１４には、図１３に示したセキュア・ページのページアウト処理において、内部メモリ１５上の復号されたページを暗号処理して外部メモリ２０に書き出すＳｔｏｒｅＰａｇｅ処理の詳細な手順をフローチャートの形式で示している。
【０１８９】
まず、インデックスで指定されたページ・テーブル・エントリのＰＦＮに対応するアドレスの内容を保持するキャッシュ・ラインの書き戻しと無効化する（ステップＳ５１）。そして、暗号テーブルに空きがあるかどうかを検索する（ステップＳ５２）。
【０１９０】
暗号テーブルに空きがない場合には、ランダムに暗号テーブルのエントリを選択して（ステップＳ５３）、参照カウントを１つ増やす（ステップＳ５４）。
【０１９１】
一方、暗号テーブルに空きがある場合には、乱数発生器で１６Ｂ共通暗号鍵の鍵を生成し、暗号テーブルに登録する（ステップＳ５５）。参照カウントは１に設定する。
【０１９２】
次いで、ページ・テーブル・エントリのＫｅｙＩｎｄｅｘに暗号テーブル・エントリのインデックスを設定する（ステップＳ５６）。
【０１９３】
次いで、ページ・テーブル・エントリのＰＦＮで指定される内部メモリ１５の内容を暗号化する（ステップＳ５７）。
【０１９４】
最後に、暗号化されたページの内容を、オペランドで指定された外部メモリ２０のアドレスに配置する（ステップＳ５８）。
【０１９５】
ノーマル・ページのページイン動作
ここでは、図１５に示したフローチャートを参照しながら、ノーマル・ページのページインの動作について説明する。この動作は、図１０に示したページャのページインの動作において、ページ失敗例外（ｐａｇｅ  ｆａｕｌｔ  ｅｘｃｅｐｔｉｏｎ  ）を発生させたページのページ・テーブルがＳ＝０であった場合に行なわれる処理（ステップＳ１４）である。
【０１９６】
まず、外部メモリ２０に空きページがあるかどうかが検索される（ステップＳ６１）。外部メモリに空きがない場合には、ノーマル・ページのページアウトが行われ（ステップＳ６２）、外部メモリに空きページが作られる。
【０１９７】
次いで、ページ・テーブル・エントリの  ＤｅｖＩＤ  とＰＦＮの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置を特定する（ステップＳ６３）。本実施形態では、ＤｅｖＩＤはＨＤＤ２８を示す値に設定されていることになり、ＰＦＮからＨＤＤ２８内でのページのページアウト先が決定される。
【０１９８】
そして、ページの内容が外部ページの空きページに読み込まれる（ステップＳ６４）。
【０１９９】
最後に、該当するページ・テーブル・エントリの有効ビットＶを１に、ＤｅｖＩＤを外部メモリ２０を示す値に、ＰＦＮを外部メモリ２０のページが読み込まれた物理アドレスに設定する（ステップＳ６５）。
【０２００】
ノーマル・ページのページアウト動作
ここでは、図１６に示したフローチャートを参照しながら、ノーマル・ページのページアウトの動作について説明する。この動作は、図１３に示したセキュア・ページのページアウト処理において外部メモリ２０に空きがなかった場合や、図１４で示したノーマル・ページのページイン処理において外部メモリ２０に空きがなかった場合に行なわれる処理である。
【０２０１】
まず、外部メモリからページアウトするページを選択する（ステップＳ７１）。このときも、セキュア・ページのページアウト処理の場合と同様に、ページ・ロックがＬ＝１となっているページはページアウトの対象ページとはならない。
【０２０２】
次いで、ＨＤＤ２８に空きがあるかどうかが検索される（ステップＳ７２）。ＨＤＤ２８に空きがない場合にはエラーとなる。
【０２０３】
ＨＤＤ２８に空きがある場合には、ページアウトするページの内容をＨＤＤ２８に書き込む（ステップＳ７３）。
【０２０４】
最後に、該当するページ・テーブル・エントリの有効ビットＶを０に、ＤｅｖＩＤをＨＤＤ２８を示す値に、ＰＦＮをＨＤＤ２８のページが書き込まれた位置を示す値に設定する（ステップＳ７４）。
【０２０５】
本明細書で詳解した実施形態では、プログラムを構成するエレメントとして関数、グローバル及びファイル・スコープの変数を使用し、それらに対してセキュリティ属性を付加する。セキュリティ属性の付加されたエレメントは本来の属性である、命令、初期済みデータ、未初期化データとの組み合わせから、それぞれ．ｓｅｃｕｒｅ．ｔｅｘｔ、．ｓｅｃｕｒｅ．ｄａｔａ、．ｓｅｃｕｒｅ．ｂｓｓに再構成されたセキュア・ブロックを構成する。
【０２０６】
プログラム利用装置においては、ページ方式の仮想記憶機構のページ・テーブルにセキュア・ブロックを意味するＳビットを追加し、Ｓビットの値に応じて内部メモリ１５と外部メモリ２０を使い分けるとともに、暗号化を行なうかどうかの選択も行なうことで、セキュア・ブロックを可能な限り安全な内部ブロックに配置することと、内部メモリ１５が不足した場合に限って暗号化の伴うページアウト処理を行なうこと、そして、セキュア・ブロック外からセキュア・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、プログラムの改竄及び解読の防止と、処理性能の向上の最適化を実現する。
【０２０７】
［追補］
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【０２０８】
【発明の効果】
以上詳記したように、本発明によれば、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【０２０９】
また、本発明によれば、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【０２１０】
また、本発明によれば、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【０２１１】
また、本発明によれば、暗号の強度を弱めることなく、処理性能を暗号化を行なわない場合と同程度に維持しながら、他のプログラムやバス・モニタやＩＣＥなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することができる。
【０２１２】
本発明によれば、プログラムを本来改竄や解析を防止したい部分をセキュア・ブロックとして明確に分離させ、セキュア・ブロックのみをセキュア・メモリである内部メモリに配置することで、改竄や解析防止の機能を持つが限られた資源である内部メモリを効率的に利用することが可能となる。
【０２１３】
また、本明細書中で説明したように、リロケータブル形式のプログラム・ファイルにおいても明確にセキュリティ・ブロックの分離を行なうことで、ライブラリなど複数の開発者が独立して作成した各プログラム・モジュールからなるセキュリティ・ブロックも、リンク時においてセキュリティ・ブロックの統合が行うことができる。したがって、複数の独立した開発者が作成したプログラムに対しても開発者に透過的に効率的なセキュリティ・ブロックの統合を行なうことができる。
【０２１４】
また、本発明によれば、セキュリティ・ブロックに対してのみ内部メモリを使用することで、ページアウトやページインの回数を効率的に削減することができるため、これらに伴う暗号化及び復号処理による性能の低下を防ぐことができ、また、強度の高い暗号アルゴリズムや鍵を使用することも可能となる。プロセッサ外部にセキュア・ブロックが書き出される頻度が減少することと、たとえ書き出した場合においても性能低下を伴うことなく強度の高い暗号化を行なうことができるので、バス・モニタやＩＣＥなどのツールを使用した解析や改竄を困難にすることができる。
【０２１５】
また、本発明によれば、セキュリティ・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、外部メモリ上のプログラムの一部分がバス・モニタやＩＣＥなどのツールを使用して不正アクセスが行なわれた場合であっても、セキュア・ブロックの解析や改ざんを困難にすることができる。
【図面の簡単な説明】
【図１】Ｃ言語で記述されたプログラムについてセキュリティ属性の設定方法を説明するための図である。
【図２】リロケータブル形式のプログラムの構造を例示した図である。
【図３】図２に示したリロケータブル形式のプログラムを隣家によりリンクして生成された実行形式プログラムの構造を示した図である。
【図４】本発明が適用されるプログラム利用装置のハードウェア構成の一例を示した図である。
【図５】図４に示したプロセッサ１０の内部構造をより詳細に示した図である。
【図６】図４及び図５で示したプロセッサ１０が定義するメモリ・マップを模式的に示した図である。
【図７】ＯＳとＭＭＵ１２によって構成されるメモリ管理の構成を説明するための図である。
【図８】仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順を示したフローチャートである。
【図９】内部メモリ１５上に展開されているアプリケーションのセキュア部分（．ｓｅｃｕｒｅ．ｔｅｘｔ）の構成を模式的に示した図である。
【図１０】ページャのページインの動作を示したフローチャートである。
【図１１】セキュア・ページのページイン動作を示したフローチャートである。
【図１２】ＬｏａｄＰａｇｅ処理の詳細な手順を示したフローチャートである。
【図１３】セキュア・ページのページアウト動作を示したフローチャートである。
【図１４】内部メモリ１５上の復号されたページを暗号処理して外部メモリ２０に書き出すＳｔｏｒｅＰａｇｅ処理の詳細な手順を示したフローチャートである。
【図１５】ノーマル・ページのページイン処理の手順を示したフローチャートである。
【図１６】ノーマル・ページのページアウト処理の手順を示したフローチャートである。
【符号の説明】
１０…プロセッサ
１１…プロセッサ・コア
１２…ＭＭＵ
１３…キャッシュ
１４…外部バス・インターフェース
１５…内部メモリ
１６…暗号化処理ユニット
２０…外部メモリ
２１…ディスプレイ・コントローラ
２２…表示装置
２３…入出力インターフェース
２４…キーボード
２５…マウス
２６…ネットワーク・インターフェース
２７…ＨＤＤコントローラ
２８…ＨＤＤ
３０…バス
【図１】
2004272594.tif 000003
【図２】
2004272594.tif 000004
【図３】
2004272594.tif 000005
【図４】
2004272594.tif 000006
【図５】
2004272594.tif 000007
【図６】
2004272594.tif 000008
【図７】
2004272594.tif 000009
【図８】
2004272594.tif 000010
【図９】
2004272594.tif 000011
【図１０】
2004272594.tif 000012
【図１１】
2004272594.tif 000013
【図１２】
2004272594.tif 000014
【図１３】
2004272594.tif 000015
【図１４】
2004272594.tif 000016
【図１５】
2004272594.tif 000017
【図１６】
2004272594.tif 000018