JP2004272594A - データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム - Google Patents
データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム Download PDFInfo
- Publication number
- JP2004272594A JP2004272594A JP2003062393A JP2003062393A JP2004272594A JP 2004272594 A JP2004272594 A JP 2004272594A JP 2003062393 A JP2003062393 A JP 2003062393A JP 2003062393 A JP2003062393 A JP 2003062393A JP 2004272594 A JP2004272594 A JP 2004272594A
- Authority
- JP
- Japan
- Prior art keywords
- block
- memory
- data
- secure
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にする。
【解決手段】改竄や解読の防止が必要であるセキュリティ・ブロックは暗号化処理が施される。データが利用される際には、セキュリティ・ブロックはプロセッサと同一チップ内にある復号装置で復号されプロセッサに送られる。また、復号データはプロセッサと同一チップ内にあるセキュア・メモリに保管される。セキュア・メモリが不足した際、その内容をプロセッサ内の暗号装置により暗号化してプロセッサ外部メモリやハード・ディスクに保管する。
【選択図】 図1
【解決手段】改竄や解読の防止が必要であるセキュリティ・ブロックは暗号化処理が施される。データが利用される際には、セキュリティ・ブロックはプロセッサと同一チップ内にある復号装置で復号されプロセッサに送られる。また、復号データはプロセッサと同一チップ内にあるセキュア・メモリに保管される。セキュア・メモリが不足した際、その内容をプロセッサ内の暗号装置により暗号化してプロセッサ外部メモリやハード・ディスクに保管する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、プログラムやコンピュータ・データなどを実行又は再生という形態で利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、改竄や解析など不正使用防止のために暗号化すなわち実行不能状態にしてハード・ディスク装置などの外部記憶装置に保存されているデータを利用する(あるいは、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も含む)データ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【0002】
さらに詳しくは、本発明は、実行不能状態のデータをメモリ上で実行可能状態に展開してからデータを利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にするデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【0003】
【従来の技術】
著作権は、著作物を利用し得る相対的な排他的独占権であり、無体財産権の1つに含まれる。ここで言う「著作物」とは、思想又は感情を創作的に表現したものであって、文芸、学術、美術又は音楽の範囲に属するものを指す。著作権は、各国の著作権法や、ベルヌ条約や万国著作権条約などの国際的な条約で保護されている。例えば、デジタル化されたテキストやコンピュータ・プログラム、デジタル化された音楽コンテンツ、映像コンテンツ、番組の放送コンテンツなど各種のメディアも著作物であり、著作権法制下で適正に保護を受けるべきである。
【0004】
著作権者自身においてのみ著作物の利用が行われるのはごく稀であり、他人が著作権を利用することに対して著作権者が一定の対価を得て許諾するというのが一般的である。したがって、著作権の保護を担保するためには、他人が勝手に(許可なく)著作物を複製するなどの著作物の不正使用を防止する必要がある。
【0005】
ところが、デジタル形式のデータやコンテンツの複製や改竄は極めて容易であり、著作権侵害の危険に無防備にさらされているとさえ言える。したがって、著作権法やその他の法規制を強化するだけでは不充分であり、情報技術の観点からも著作物の正当な利用を支援し若しくは不正利用を排除して、著作権の保護を拡充する必要があると思料される。
【0006】
例えば、パーソナル・コンピュータ(PC)などのプログラムを実行する装置、あるいは、DVD(デジタルビデオディスク(商標)あるいはデジタル・バーサタイル・ディスク)装置やデジタルVTRやMD(ミニディスク(商標))記録再生装置など、データを利用する装置において、著作権のある画像データや音楽データをソフトウェアで再生を行なう場合に、ソフトウェアを不正に改竄ができてしまうと、ソフトウェアを改変することにより、著作権のあるデータを不正にコピーできてしまうという問題がある。また、ソフトウェアの処理が技術開発の成果やノウハウとしての価値がある場合、それらが不正に解析されてしまうという問題がある。例えば、ゲーム・プログラムの場合その開発には多くの資金と技術開発が使用されているため、それらが不正にコピーされることが大きな問題となっている。この結果、プログラムやデータ(以下、単に「データ」とも呼ぶ)の値段も高くしなければならなくなり、普及の障壁となるという悪循環が起こっている。
【0007】
例えば、暗号技術を用いることによって、通信路上に流れるデータを悪意のある第三者から保護することが可能となっている。しかしながら、データの配信・流通過程だけでなく、データが正規のユーザに提供された後に行なわれる不正コピーや不正利用も大きな問題となっている。
【0008】
この種の問題への対策として、最近では権利管理方式(DRM:Digital Rights Management)と呼ばれる方式が採用されている。権利情報管理方式(DRM)によって、ユーザはコンテンツの利用許可(ライセンス)を得なければコンテンツを利用できない仕組みが実現される。
【0009】
DRMのシステムは、典型的にはコンテンツ提供者とライセンス管理者とユーザという参加者で構成される。ユーザは、コンテンツの再生装置を所持し、それを使ってコンテンツを利用する。また、ライセンス管理者は、ユーザにライセンスの発行を行なう。また、コンテンツ提供者は、ユーザにコンテンツの提供を行なう。DRMでは、コンテンツのライセンス(利用許可)をユーザに与えることは、コンテンツ鍵をそのユーザの(特定の)正当な再生装置に与えることで実現される。ここで言う「正当性」とは、再生装置が暗号鍵やコンテンツ鍵、並びに復号されたコンテンツを外部に漏らさないで処理できることを意味する。
【0010】
DRMを始めとするデータの保護方法は、基本的には、データを暗号化してデータを利用する装置のハード・ディスクなどに保存し、データの利用時には復号鍵を用いてデータを復号した後に利用するというものである。このような方法によれば、データは暗号化を行ないハード・ディスク上ではデータは暗号化すなわち利用不能な形式で保存されているため、データを見ただけでは容易にデータの改竄や解析が行なえなくなるという点で有効である。しかしながら、データの利用時には復号鍵を使用して復号が必ず行なわれるため、データ利用時に復号後のデータを見ることで改竄や解析が行なえてしまうという問題が依然として残っている。
【0011】
例えば、メモリ上に復号されたデータを配置(ロード)して利用する場合、メモリ内容を見ることでデータの改竄や解析が行なえてしまう。また、復号されたデータは通常データ利用装置内のバスを通して転送が行なわれるが、バス・モニタやICE(イン・サーキット・エミュレータ)などのツールを利用することで、比較的容易にデータの解析や改竄も行なえてしまう。例えば、パーソナル・コンピュータのように標準仕様のバスを使用している場合には、バス・モニタやICEなどのツールも、開発時におけるデバッグの容易さを実現するという本来の目的・用途のために、標準仕様のバスを容易に解析することができるようになってきている。このため、このようなツールを悪用することで、バス上で転送される実行可能形式のデータを解析又は改竄できてしまう。
【0012】
他方、ページング方式による仮想記憶システムにおいて、ページインやページアウトの際に転送データに対してデータ変換を施すという技術が提案されている(例えば、特許文献1を参照のこと)。このような仮想記憶システムを応用して、ページアウトの際にページ単位で暗号化し、ページインの際に暗号化ページを復号することにより、バス転送時におけるデータの改竄や解析を防止することができると思料される。また、このバリエーションとして、1つのプログラムで1つの暗号方式又は暗号鍵を用いる方法や、例えばページ、プロセス、ドメインなどの単位毎に異なる暗号方式又は暗号鍵を用いる方法などが考えられる。
【0013】
しかしながら、ページング時にページ単位で暗号化並びに複合化を行なう方法は、データ実行時に暗号化処理と復号処理のためのオーバヘッドが生じる。このため、比較的簡単なアルゴリズムの暗号化方式を使用すると、暗号強度が高められないという問題がある。また、データ参照時に必ず復号を行なう必要があるため、処理性能(スループット)が低下してしまうという問題がある。
【0014】
すなわち、データを利用する装置でデータやプログラムを利用する場合に、そのデータやプログラムが不正に改ざん又は解析されてしまうという問題がある。また、従来のデータ保護方法では、バス・モニタやICEなどのツールによる解析に対して無力であったり、又は、暗号化の強度を弱める必要があったり、処理性能が低下するという問題がある。
【0015】
また、データを利用する装置においてはプロセッサと安全な通信路で接続されたメモリを使用するが、このメモリの容量は限定されているために、効率的に使用する必要がある。
【0016】
【発明が解決しようとする課題】
本発明の目的は、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0017】
本発明のさらなる目的は、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0018】
本発明のさらなる目的は、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0019】
本発明のさらなる目的は、暗号の強度を弱めることなく、暗号化を行なわない場合と処理性能を同程度に維持しながら、他のプログラムやバス・モニタやICEなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することにある。
【0020】
【課題を解決するための手段及び作用】
本発明は、上記課題を参酌してなされたものであり、その第1の側面は、データをメモリ空間に配置してデータを利用するデータ利用装置であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成手段と、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置手段と、
各メモリ領域に配置されたブロックを利用するブロック利用手段と、
を具備することを特徴とするデータ利用装置である。
【0021】
ここで、前記メモリ空間の少なくとも1つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリである。また、前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、前記セキュア・メモリは例えば前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリとして構成される。
【0022】
また、再構成されたブロックは、例えばページング方式の仮想記憶システムにおいてページイン及びページアウトなどの際にデータ転送を行なう単位となるページに相当する。
【0023】
エレメントに付加される属性とは、例えば、データに対して改竄防止と秘匿性の確保が必要であることを表わすセキュリティ属性のことである。
【0024】
そして、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを前記セキュア・メモリに優先的に配置する。
【0025】
また、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを安全な方法で前記セキュア・メモリに配置する。
【0026】
例えば、セキュリティ属性が付加されているセキュリティ・ブロックは、暗号化処理又はその他の処理により実行不能形式でハード・ディスクなどの外部記憶装置あるいはセキュア・メモリ以外のメモリ領域に格納されており、セキュリティ・ブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するようにする。(本発明は、HDDやDVDなどの外部記憶装置だけでなく、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も対象とする。)
【0027】
また、セキュア・メモリが不足した状態などにおいて、前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行するが、前記セキュア・メモリに配置されているブロックを交換する際に該エレメントを実行不能形式に再変換することで、改竄や解析を防止する。
【0028】
本発明の第1の側面に係るデータ利用装置においては、まずエレメントの集合として構成されるデータに関して、プログラムやデータの改竄や秘匿性に関する属性であるセキュリティ属性を付加する。そして、セキュリティ属性を基にデータの再構成を行ない、同一のセキュリティ属性が与えられたエレメントを1つのブロックとして、データを複数のブロックで構成する。
【0029】
セキュリティ属性により、改竄や解読の防止が必要であると識別されたセキュリティ・ブロックは例えば暗号化を行なうなどの処理が施される。データ利用装置において、データが利用される際には、セキュリティ・ブロックはプロセッサと安全な通信路で接続された復号装置(例えばプロセッサと同一チップ内にある復号装置)で復号されプロセッサに送られる。そして、復号データはプロセッサと安全な通信路で接続されたセキュア・メモリ(例えばプロセッサと同一チップ内にあるメモリ)に保管される。
【0030】
また、セキュア・メモリが不足した際には、その内容をプロセッサと安全な通信路で接続された暗号装置により暗号化したものをプロセッサ外部のメモリや記憶装置等に保管するとともに、必要になった際には逆に復号を行ないセキュア・メモリ内に再び配置を行なう。
【0031】
したがって、本発明によれば、改ざんや解析を防止したいデータ部分はデータ利用装置内のセキュア・メモリに暗号化されずに安全に配置することができるので、処理性能を落とすことなく、改竄や解析を防止することができる。
【0032】
また、セキュア・メモリが不足した場合のみプロセッサ外部のメモリや記憶装置に暗号化を行なった上で書き出し(ページアウト)が行なわれるので、暗号化及び復号の回数を非常に少なくすることができる。また、ページングの際に用いる暗号の強度を落とす必要がなくなる。
【0033】
なお、データを構成する各エレメントに対して付加するセキュリティ属性として、例えば以下に示すような情報を記述することができる。
【0034】
(1)改竄防止と秘匿性の確保が必要であることを示す情報、すなわち、安全な場所に配置することを要請する情報。
(2)利用頻度を示す情報。
この場合、利用頻度と他のセキュリティ属性を利用することで、セキュア・メモリが十分にない場合、頻度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに(必要があれば暗号化を行って)配置することで性能の向上を図るなどの使い方が考えられる。
(3)改竄防止と秘匿性の確保の強度を示す情報。
この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
(4)改竄防止と秘匿性の確保の優先度を示す情報。
この場合、セキュア・メモリが十分にない場合、優先度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに配置することで、少なくとも優先度の高い部分をセキュア・メモリに割り当てるなどの使い方が考えられる。
(5)セキュア・エレメント外からの参照を許可するかどうかを示す情報。
この場合、セキュア・メモリに配置された情報をそれ以外の外部メモリから参照する場合に、一定のチェックを行なうために使用することができる。
【0035】
また、データを構成する各エレメントに対して、例えば以下に示すように方法によって属性を付与することができる。
【0036】
(1)プログラム・データのソースコードにおいてプログラム設計者が指定する。
(2)データベース又はその他の管理手段を利用して自動的に指定する。
例えば、あらかじめセキュアにしなければならない関数名などが分っている場合などに利用することができる。
(3)プログラム・データの解析結果に基づいて自動的に指定する。
この場合、セキュリティ属性が付加されていない関数であっても、セキュリティ属性の付いた関数を直接呼び出す関数はやはりセキュア・メモリに配置したい場合などに使用することができる。
【0037】
また、セキュリティ・ブロックをプロセッサへ安全に転送する方法として、以下に示すものが挙げられる。
【0038】
(1)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと安全な通信路で接続された復号装置で復号する方法。
(2)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと同一のチップ内に組み込まれる復号装置で復号する方法。
(3)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサ内部で復号する方法。
(4)SSLなどの暗号化の施された通信路を使用してデータ利用装置のプロセッサで受け取る方法。
(5)セキュリティ・ブロックが実行コードである場合、送信側でセキュリティ・ブロックを難読化して転送する方法。
【0039】
また、セキュリティ・メモリの構成として、プロセッサと同一チップ内に組み込まれる内部メモリを用いる以外に、以下の実現形態を挙げることができる。
【0040】
(1)暗号化の施された通信路でプロセッサと接続されたプロセッサ外部のメモリ。
(2)解析の困難なプロトコルを利用した通信路でプロセッサと接続されたプロセッサ外部のメモリ。
【0041】
また、セキュア・メモリは改竄防止と秘匿性の確保のために、ノーマル・メモリなどセキュア・メモリ外からの参照が原則として禁止されているが、特定の条件下でのみ参照を許可するようにしてもよい。特定の条件下でのみ参照を許可する手段として、以下の例を挙げることができる。
【0042】
(1)前記セキュア・メモリ外からの参照を許可する条件を示す情報に基づいて、前記ノーマル・メモリ上で動作するコードから前記セキュア・メモリへの参照を行なう場合に、参照の識別子(数字や名前など)を指定し、識別子が登録されていることを確認して参照を許可する。
(2)前記セキュア・メモリ外のブロックが改変されていないことを示す情報(例えば電子署名)を付加して参照を行ない、該ブロックが不正に改変されていないことを確認して参照を許可する。
【0043】
また、本発明の第2の側面は、改竄や解析などの不正利用から保護されたセキュア・メモリを含んだメモリ空間上にデータを配置して利用する処理をコンピュータ・システム上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
データは複数のエレメントの集合で構成され、且つ、各エレメントは不正利用からの保護形式に関する情報を記述した属性情報を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成ステップと、
セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするコンピュータ・プログラムである。
【0044】
本発明の第2の側面に係るコンピュータ・プログラムは、コンピュータ・システム上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第2の側面に係るコンピュータ・プログラムをコンピュータ・システムにインストールすることによって、コンピュータ・システム上では協働的作用が発揮され、本発明の第1の側面に係るデータ利用装置と同様の作用効果を得ることができる。
【0045】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【0046】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施形態について詳解する。
【0047】
セキュリティ属性の設定
本実施例では、改竄及び解析を防止するデータとして、プログラムを扱う。そこで、まず、本発明が適用されるプログラムにおける、セキュリティ属性の設定方法について説明する。
【0048】
本実施形態では、プログラムとして C 言語で記述されたプログラムを取り上げる。図1には、C言語の関数とグローバル及びスタティック変数をプログラムを構成するエレメントとして使用する例を示している。同図に示すように、C言語とそのコンパイラは、キーワードsecureとexportedを受け付けるように拡張されている。
【0049】
本実施形態では、このsecureとexportedを使い、各エレメントにセキュリティ属性を設定する。図1に示す例では、関数fooにsecure exportedのセキュリティ属性が、関数bar にsecureのセキュリティ属性が、それぞれ付けられている。secureの属性が付けられた関数や変数は、改竄防止や秘匿性の確保が要求されているセキュリティ・ブロックを構成する。後述するように、セキュリティ・ブロックは、プロセッサによるプログラム実行時においても改竄防止や秘匿性の確保が施されているセキュア・メモリ(本実施形態ではプロセッサと同一チップ内にある内部メモリ)に配置(ロード)される。
【0050】
secure exportedは、secureと同様にセキュア・メモリに配置されるが、セキュリティ属性が付けられていない関数から呼び出すことができるという点で相違する。図1に示す例では、関数fooはセキュリティ属性のない通常の関数から呼び出すことができる。これに対し、barはセキュリティ属性のない通常の関数から直接呼び出すことができず、fooのようなsecure exportedが指定された関数を経由して間接的にしか呼び出すことができない。なお、変数にはsecure exportedを指定することはできない。
【0051】
また、secure又はsecure exportedの関数内で実行時に動的に確保するヒープメモリは、セキュア・メモリ内に割り当てられる。
【0052】
なお、本明細書中では詳解しないが、他のセキュリティ属性としてエレメントの使用頻度やセキュリティに関する優先度を与えることもできる。これらは、セキュア・メモリに割り当てる際に、割り当ての優先度やセキュア・メモリが不足した際に、プロセッサ外部のメモリや記憶装置にページアウトを行なうページを決定する際に利用することができる。
【0053】
あるいは、他のセキュリティ属性として改竄防止と秘匿性の確保の強度を示す情報を与えることができる。この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
【0054】
リロケータブル形式のプログラムの構造
図1に示した方法でセキュリティ情報が設定されたソース・プログラムを、本実施形態に係るコンパイラでコンパイルを行なうと、リロケータブル形式のファイルが作成される。図2には、リロケータブル形式のプログラムの構造を例示している。本実施形態では、ELF(Executable and Linking Format)形式のファイルに本発明を適用した例を示している。
【0055】
プログラムの先頭には、ELFヘッダが置かれる。ELFヘッダには、このファイルがELFの実行形式であることを示す識別子や形式のバージョン番号、この実行形式を実行できるプロセッサ情報などが記述されている。また、後述するプログラム・ヘッダ(Program Header)やセクション・ヘッダ(Section Header)のファイル内の位置と個数が記述されている。このため、まずELFヘッダを参照することでプログラム・ヘッダやセクションを参照することができる。リロケータブル形式ではプログラム・ヘッダが存在しないので、これについては実行形式の構造で説明する。
【0056】
セクション・ヘッダは、プログラムの中身であるセクション(Section)に関連する情報を持つテーブルである。セクション・ヘッダには、セクション毎にエントリが設けられている。セクション・ヘッダの各エントリは、対応するセクションのファイル内での位置、大きさ、属性情報を保持している。セクションは、ファイル中でプログラムそのものを保持する領域であり、例えば.text、.data、.bssなどがあり、各領域にはそれぞれプログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データが保持される。実際には、これら以外のセクションも存在するが、説明の簡素化のためここでは省略してある。.bss は、セクション・ヘッダにはエントリが存在するが、ファイル内に対応するセクションは存在しない。これは、.bss sectionはすべて0であることが分かっているので、不必要にファイル・サイズを大きくすることを防ぐために存在しない。プログラム・ファイルを実行する際、OSなどによって、0で初期化されたメモリが割り当てられる。
【0057】
本実施形態では、これら通常のセクションに加え、.secure.text、.secure.data、.secure.bssのセクションが存在する。これらは、プログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データのうち、改竄又は解析の防止を行ないたいブロックをそれぞれ保持する。
【0058】
具体的には、図1に示したソースコードにおいて、secure又はsecure exportedのセキュリティ属性が付けられた関数又は変数が、コンパイラによりこれらのセクションに配置される。また、secure exportedのセキュリティ属性が付けられた関数に対しては、スタブがコンパイラにより生成される。
【0059】
secureのセキュリティ属性が付けられた関数は、通常の関数から呼び出されない(secure又はsecure exported のセキュリティ属性が付けられた関数のみから呼び出される)。これに対し、secure exported のセキュリティ属性が付けられた関数は、secure又はsecure exported のセキュリティ属性が付けられた関数以外に、通常の関数から呼び出される。スタブは、secure exported のセキュリティ属性が付けられた関数が通常の関数から呼び出された際の、引数の受け渡し処理を安全に行なうためのコードである。スタブは、コンパイラにより自動生成され、.secure.textセクションに挿入される。スタブの動作については、ノーマル状態とセキュア状態の遷移の項で説明する。
【0060】
なお、.bss と同様に、.secure.bssもセクション・テーブルには存在するが実際のセクションは存在しない。.secure.bssセクションは、実行時にOSなどによってセキュア・メモリ内に0で初期化されて割り当てられる。
【0061】
セクション・ヘッダの属性は、A、X、W、Sの組み合わせで構成される。Aは、対応する セクションが割り当てられていることを示す。このため、.bss や.secure.bssにはAの属性が付かない。また、Xは、実行可能を意味し、.text、.secure.textに付けられている。また、Wは、write(書き込み)可能領域であることを示す。XもWも、メモリ保護属性を決定する際に使用される。Sは、本発明により拡張された属性であり、対応するセクションを、改竄防止や秘匿性の確保が施されているセキュア・メモリに割り当てることを要請する。本実施形態では、.secure.text、.secure.data、.secure.bssなどのセクションにこの属性Sが付いている。
【0062】
リロケータブル形式には、リロケーション・セクションがある。リロケーション・セクションは、プログラムを実行形式にするためにリンカによってリンクを行う際に使用される。1つのリロケーション・セクションは1つのセクションに対応し、そのセクション内でリンク処理の必要な位置とその種類が記述されているテーブルである。例えば.rel.textは.textに対応している。本実施形態では、リロケーション・セクションも拡張され、.rel.secure.text、.rel.secure.data、.rel.secure.bss、.rel.secure.bssが追加されており、それぞれ順に.secure.text、.secure.data、.secure.bssに対応している。
【0063】
実行形式のプログラム構造
図2で示した構造を持つ複数のリロケータブル形式のプログラムをリンカによりリンクすることで、実行形式のプログラムを作成することができる。実行形式のプログラムの構造を図3に示す。リンクが完了しているためリロケータブル・セクションが存在しない点と、プログラム・ヘッダが追加された点で図2に示したリロケータブル形式とは相違する。
【0064】
プログラム・ヘッダは、OSなどがプログラムをメモリ中にロードし実行可能にする際に参照する情報である。プログラム・ヘッダは、セクション・ヘッダと同様に、テーブルになっていて、各エントリには複数のセクションが対応する。各エントリは、ロードするメモリ・アドレス、ファイルの位置、ファイル上でのサイズ、メモリ上でのサイズ、属性などの情報を保持している。属性はプログラム・ヘッダの1エントリに対応する複数のセクションのセクション・ヘッダの属性によって決定される。
【0065】
図3に示す例では、プログラム・ヘッダの最初のエントリは、実際には.text セクション1つに対応している。2番目のエントリは.data と.bss に対応している。このため、2番目のエントリはファイル上のサイズとメモリ上のサイズが異なっている。その理由は、上に説明したように、.bssセクションはファイル内に存在しないためである。3番目のエントリは .secure.text1つに対応している。1番目のエントリと比較して、属性にS が付いているのは、このエントリに対応するすべてのエントリ(この場合 .secure.text ただ1つ)が、Sの属性をセクション・ヘッダで持っているためであり、OSなどがプログラムをメモリにロードする際には、実際にはプログラム・ヘッダのこの属性を参照して、セキュア・メモリに配置するようになっている。4番目のエントリは .secure.dataと.secure.bssである。
【0066】
リンカは、リンク時にリロケーション・セクションを用いたリンクを行なうとともに、複数のリロケータブル・ファイルの同じセクションは1つにまとめる処理を通常行なう。つまり、複数のリロケータブル形式のファイル中の.textセクションは、リンカの出力する実行形式のファイルにおいて1つの.textセクションにまとめられる。また、複数のリロケータブル・ファイル中で定義されたsecure block である、.secure.text、.secure.data、.secure.bssも、実行形式ファイル中で1つの.secure.text、.secure.data、.secure.bss にまとめられる。
【0067】
本実施形態では、リンカはリンク時にこれらの処理に加えて、セキュア・エントリポイントを作成して.secure.textに挿入する。セキュア・エントリポイントは、ノーマル状態からセキュア状態に遷移する入り口のコードである。セキュア・エントリポイントの動作についてはノーマル状態とセキュア状態の遷移の項で説明する。
【0068】
そして、プログラム・ヘッダを作成後、プログラム・ヘッダでSの属性が付けられた部分を共通鍵暗号方式で暗号化を行なう。ここで使う暗号化の鍵を「コンテンツ鍵」と呼ぶことにする。本実施例で使用する暗号化は一部を改竄して置き換えることができないような方式の暗号方式が使用されているものとする。
【0069】
暗号方式によっては、復号はできなくとも暗号化されたデータの一部分を別のデータに置き換えることができる。置き換えられたデータも問題なく復号できてしまうので、改竄が可能である。また、別の方法では、電子署名を添付することでも改竄を防止することができる。
【0070】
これにより、図2で示された構造をとる複数のリロケータブル・ファイルは、リンカのリンク処理により、図3で示すような構造の実行形式をとる。
【0071】
また、関連する複数のリロケータブル・ファイルは、アーカイブ・コマンドによりまとめられ、1つのライブラリを構成することができる。
【0072】
ライブラリ中に含まれる各リロケータブル・ファイルを図2に示すような構造にすることにより、ライブラリをリンクしてアプリケーションの開発を行なう場合においても、アプリケーション独自に改竄や解析から保護したい部分に加えて、アプリケーション開発者が利用するライブラリの保護したい部分もアプリケーション開発者には透過的に、1つのセキュア・ブロックとしてリンカによってリンク処理されることになる。
【0073】
通常、アプリケーション開発者は自身が利用するライブラリについてはそれの提供するインタフェース仕様のみしか知り得ないため、このような透過的な処理が行なえることは重要である。
【0074】
ハードウェアの構成
図4には、本発明が適用されるプログラム利用装置のハードウェア構成の一例を示している。
【0075】
このシステムは、プロセッサ10を中心に構成されている。プロセッサ10は、メモリに記憶されたプログラムに基づいて各種の処理を実行する。また、プロセッサは、外部バス・インターフェース14及びバス30を介して接続されている各種の周辺機器を制御している。バス30に接続された周辺機器は次のようなものである。
【0076】
外部メモリ20は、例えばDRAM(Dynamic RAM)などの半導体メモリで構成され、プロセッサ10において実行されるプログラム・コードをロードしたり、実行プログラムの作業データを一時格納したりするために使用される。
【0077】
外部メモリ20は、プロセッサ10と同じチップ内に組み込まれている内部メモリ(図示しない)とともに、プロセッサ10のメモリ空間を構成する。内部メモリは、プロセッサ・チップ内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ20は、バス・モニタやICEなどのツールを用いて解析や改竄が可能なバス30上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【0078】
ディスプレイ・コントローラ21は、プロセッサ10から送られてくる描画命令に従って表示画像を生成し、表示装置22に送る。ディスプレイ・コントローラに接続された表示装置22は、ディスプレイ・コントローラ21から送られた表示画像情報に従い、その画像を画面に表示出力する。
【0079】
入出力インタフェース23は、キーボード24やマウス25が接続されており、キーボード24やマウス25からの入力信号をプロセッサ10へ転送する。
【0080】
ネットワーク・インタフェース26は、LANやインターネットなどの外部ネットワークに接続されており、インターネットを介したデータ通信を制御する。すなわち、プロセッサ10から送られたデータをインターネット上の他の装置へ転送するとともに、インターネットを介して送られてきたデータを受け取りプロセッサ10に渡す。
【0081】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び/又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをネットワーク経由でダウンロードすることができる。
【0082】
ハード・ディスク装置(HDD:Hard Disk Drive)コントローラ27には、HDDなどの大容量外部記憶装置28が接続されており、HDD コントローラ27が接続されたHDD28へのデータの入出力を制御する。HDD28には、プロセッサが実行すべきオペレーティング・システム(OS)のプログラム、アプリケーション・プログラム、ドライバ・プログラム、さらにはプログラムによって参照又は再生処理が行なわれるデータやコンテンツなどが格納されている。
【0083】
本実施形態では、各プログラムは、HDD28上に実行可能形式でインストールされる他、暗号化やその他の実行不能形式のまま保存されている。また、プログラム中のセキュリティ・ブロックのみが暗号化されて保存されている。
【0084】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び/又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをHDD28上に格納することができる。
【0085】
なお、パーソナル・コンピュータなどのプログラム利用装置を構成するためには、図4に示した以外にも多くの電気回路などが必要である。但し、これらは当業者には周知であり、また、本発明の要旨を構成するものではないので、本明細書中では省略している。また、図面の錯綜を回避するため、図中の各ハードウェア・ブロック間の接続も一部しか図示していない点を了承されたい。
【0086】
本実施形態では、アプリケーション・プログラムはプログラム開発者により、図1に示した方法によりエレメントにセキュリティ属性が設定され、コンパイルされる。さらに、コンパイルされた複数のリロケータブル形式のプログラムやライブラリはリンカによりリンクされ、図3で示した構造の実行形式のアプリケーション・プログラムになる。
【0087】
実行形式のアプリケーション・プログラムのプログラム・ヘッダの属性でSが付加された部分は、暗号強度の高い共通鍵方式で暗号化が行なわれている。この鍵をコンテンツ鍵と呼ぶ(前述)。アプリケーション・プログラムは例えばインターネット上のサーバに蓄積され、プログラム利用装置のユーザは、インターネットでwebなどを通じてプログラムを購入することができる。そして、購入したプログラムはインターネットを通じてプログラム利用システムにダウンロードされ、HDD28に記録される。
【0088】
このとき、アプリケーション・プログラムを暗号化したコンテンツ鍵は、購入後にプロセッサ10内でプロセッサ10の持つ共通鍵方式のプロセッサ10に固有の秘密鍵(以後プロセッサ固有鍵)で暗号化された後、 HDD28に記録される。これにより、アプリケーション・プログラムを不正に解読又は改竄されるのを防止する。
【0089】
また、本実施形態でプログラム実行環境を提供するOSは、暗号強度の高い共通鍵方式で暗号化が行なわれ、HDD28に記録されている。この鍵を本明細書中では「OS鍵」と呼ぶことにする。OS鍵は、プロセッサ固有鍵で暗号化されてHDD28に記録されている。また、OSをHDD28から読み出すブート・ローダはプロセッサ10と同一チップ内にあるROM(Read Only Memory:図示しない)に焼き込まれているものとする。このため、ブート・ローダを改変することはできない。
【0090】
ブート・ローダは、HDD28から暗号化されたOS鍵を読み込むと、プロセッサ10内部でプロセッサ固有鍵を用いて復号してOS鍵を取り出す。そして、得られたOS鍵を使って HDD28から暗号化されたOSを読み込んで、プロセッサ10内部で復号を行ないながら、OSの起動を行なうようになっている。これにより、OSが解読又は改竄されるのを防止することができる。
【0091】
アプリケーション・プログラムのプログラム・ヘッダの属性でSが付加されたセクションやOSの暗号化とその鍵の管理方式にはさまざまな方法がある。本実施形態では、これらの暗号化にコンテンツ鍵やOS鍵を使い、さらにそれらの鍵をプロセッサ固有鍵で暗号化する方法を採用する。
【0092】
プロセッサの構造
図5には、図4に示したプロセッサ10の内部構造をより詳細に示している。
【0093】
プロセッサ10内部には、命令の解釈と実行を行なうプロセッサ・コア11を中心に構成されている。プロセッサ・コア11は、命令のフェッチやデータの参照のためにメモリの内容が必要になると、該当するデータの仮想アドレスをMMU(Memory management Unit:メモリ管理ユニット)12に出力する。
【0094】
MMU12は、仮想アドレスから物理アドレスへの変換を行なう。MMU12は、アドレス変換早見表としてのページ・テーブルを保持するために、カーネル・ページ・レジスタ12Aとユーザ・ページ・レジスタ12Bという2種類のレジスタをその内部に備えている。
【0095】
仮想アドレスの変換は、カーネル・ページ・レジスタ12A又はユーザ・ページ・レジスタ12Bが保持するページ・テーブルを用いて行なう。本実施形態のプロセッサ10は、動作モードとして、カーネル・モードとユーザ・モードを持っている。そして、ユーザ・モードはさらにセキュア状態とノーマル状態に分けられる。このモードと状態の組み合わせにより、MMU12は、アクセスできるアドレス領域を決定し、ページ・テーブルを用いて仮想アドレスを物理アドレスに変換する。アクセスできるアドレス領域については、プロセッサ10のメモリ・マップの項で説明する。MMU12によって変換された物理アドレスはキャッシュ13に渡される。
【0096】
キャッシュ13は、SRAM(Static RAM)などの高速動作メモリで構成され、頻繁にアクセスされるプログラム・コードやデータの一時的な保管場所として利用される。本実施形態では、キャッシュ13は、MMU12から入力された物理アドレスに対応するデータをその内部に保持している場合は(キャッシュ・ヒット)、それをプロセッサ・コア11に返すようになっている。また、キャッシュに対応するデータが見つからなかった場合には(キャッシュ・ミス)、物理アドレスはその先の内部メモリ15又は外部バス・インターフェース14に出力される。物理アドレスが内部メモリ15に対応する場合は、そこからデータが取り出され、キャッシュ13に保存されるとともに、プロセッサ・コア11に渡される。また、物理アドレスが外部メモリに対応する場合は、外部バス・インターフェース14を介して外部メモリ20からデータが取り出され、キャッシュ13に保存されるとともに、プロセッサ・コア11に渡される。
【0097】
プロセッサ・コア11は、特別な命令 LoadPageやStorePage を実行した際に、MMU12の管理する情報に基づいて、暗号処理ユニット16に対して暗号化又は復号の指示を出す。このとき、暗号処理ユニット16は指定された鍵に基づいて外部バス・インターフェース14経由で入ってきたデータ(ページインされたデータ)を復号して内部メモリ15に保存したり、内部メモリ15のデータ(ページアウトするデータ)を暗号化して外部バス・インターフェース14を介して外部メモリ20に書き出したりすることができる。
【0098】
LoadPageは外部メモリ20上のデータを内部メモリ15にロードするための命令であり、StorePageは内部メモリ15上のデータを外部メモリに書き出すための命令であるが、これらの命令実行時の動作の詳細については後述に譲る。
【0099】
暗号処理ユニット16は、その内部に乱数発生器16Bを持ち、上述したデータの暗号化及び復号を行なうための共通鍵の生成に使用する。また、暗号処理ユニット16は、共通鍵暗号方式のプロセッサに固有の秘密鍵であるプロセッサ固有鍵16Cを保持する。プロセッサ固有鍵16Cは、各プロセッサ毎に異なる鍵となっている。また、暗号処理ユニット16は、暗号テーブルを保持するための暗号テーブル・レジスタ16Aをその内部に持っている。
【0100】
キャッシュ13は、物理アドレスをタグとして内部に保存されているキャッシュ・ラインに対応するものがあるかどうかを検索し、あればキャッシュ・ライン上のデータを返すようになっている。また、StorePage命令を実行したときには、内部メモリ15の指定された物理アドレスのタグに対応するキャッシュ・ライン上のデータがあればそれを無効化する。
【0101】
プロセッサ10と同じチップ内に組み込まれている内部メモリ15は、外部バス・インターフェース14を介して接続されている外部メモリ20とともに、プロセッサ10のメモリ空間を構成する。内部メモリ15は、プロセッサ10内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ20は、バス・モニタやICEなどのツールを用いて解析や改竄が可能なバス30上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【0102】
最近のDRAM混載プロセッサの実装技術の発達により、比較的大容量の内部メモリ15をプロセッサ10内部に搭載することが可能となってきている。
【0103】
プロセッサのメモリ・マップ
図6には、図4及び図5で示したプロセッサ10の定義するメモリ・マップを模式的に示している。
【0104】
プロセッサ10は、動作モードとしてカーネル・モードとユーザ・モードを持つ。そして、ユーザ・モードはさらにセキュア状態とノーマル状態がある。このモードと状態の組み合わせにより、MMU12はアクセスできるアドレス領域を決定する。
【0105】
カーネル・モードはOSの実行時に使用され、ユーザ・モードはアプリケーション・プログラムの実行時に使用される。そして、ユーザ・モードでノーマル状態のときに、アプリケーション・プログラムがscall命令を実行することでセキュア状態に遷移し、セキュア状態の時にsret命令を実行することでノーマル状態に遷移するようになっている。それぞれのモードと状態の組み合わせによってアクセスできるメモリ領域が異なり、アクセスできない領域をアクセスした場合には、MMU12からプロセッサ・コア11に例外が発生するようになっている。
【0106】
図6に示す例では、プロセッサ10のメモリ・マップは5つの領域に分けられている。
【0107】
1つのメモリ領域は、物理アドレス内部メモリ領域すなわち内部メモリ15にマッピングされた領域であり、このメモリ空間を参照した場合には、MMU12は仮想アドレスから物理アドレスへの変換は行なわず、指定した仮想アドレスをそのまま物理アドレスとして出力する。この物理アドレスは、プロセッサ10の内部メモリ15を参照することのみに使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。MMU12の持つカーネル・ページ・レジスタ12Aの保持するアドレスは、この物理アドレス内部メモリ領域を指すように設定される。
【0108】
物理メモリ外部メモリ領域は、同様に、外部メモリ20にマッピングされた領域であり、このメモリ空間を参照した場合には、MMU12による仮想アドレスから物理アドレスへの変換は行なわれず、指定した仮想アドレスがそのまま物理アドレスとして利用される。この物理アドレスはプロセッサ10の外部メモリ20を参照することのみに使用される。このメモリ領域は、OSによって、MMU12による変換なしに直接外部メモリ20を参照したい場合に使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。
【0109】
仮想アドレス・カーネル領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モードで実行している場合のみ参照が可能な領域である。
【0110】
仮想アドレス・カーネル領域がアクセスされると、MMU12は、カーネル・ページ・レジスタ12Aに保持されるカーネル・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。MMU12が持つユーザ・ページ・レジスタ12Bに保持されるユーザ・ページ・テーブルはこの仮想アドレス・カーネル領域に置かれる。また、このメモリ領域は、内部メモリ15の物理アドレスに変換されるように、OSによってカーネル・ページ・テーブルが作成される。これにより、OSの使用するメモリ領域の秘匿性が確保されている。
【0111】
仮想アドレス・セキュア・ユーザ領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域である。このメモリ領域は、カーネル・モード、あるいはユーザ・モードでセキュア状態のいずれかの場合のみに参照が可能な領域である。ユーザ・モード下でノーマル状態においてアクセスが試みられた場合には、アドレス変換は行なわれず、例外がプロセッサ・コア11に通知される。
【0112】
仮想アドレス・セキュア・ユーザ領域がアクセスされると、MMU12は、ユーザ・ページ・レジスタ12Bが保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスが内部メモリ15の物理アドレスになるように、OSによってユーザ・ページ・テーブルが作成される。
【0113】
仮想アドレス・セキュア・ユーザ領域には、アプリケーション・プログラムのセキュア・ブロック、すなわち、図3に示した例で言えば、プログラム・ヘッダのAttributeでS属性が付けられた部分が暗号を復号した後に配置される。また、セキュア・ブロック内の関数でアロケートされるヒープ領域やスタックも、このメモリ領域に配置される。
【0114】
なお、セキュア状態ではプロセッサ・コア11のセキュア・スタック・レジスタ11Aが利用可能となる。セキュア・スタック・レジスタ11AはOSによって仮想アドレス・セキュア・ユーザ領域に確保されるようになっている。
【0115】
仮想アドレス・ユーザ領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モード、あるいはユーザ・モードのセキュア状態又はノーマル状態のどちらで実行している場合でも、参照が可能な領域である。
【0116】
仮想アドレス・ユーザ領域がアクセスされると、MMU12は、ユーザ・ページ・レジスタ12Bの保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスは、外部メモリ20の物理アドレスになるように、OSによってユーザ・ページ・テーブルが作成される。このメモリ領域には、アプリケーション・プログラムのセキュア・ブロック以外の部分、すなわち、図3に示した例で言えば、プログラム・ヘッダのAttributeでS属性が付けられていない部分が配置される。また、セキュア・ブロック外の関数でアロケートされるヒープ領域やスタックもこの領域に配置される。
【0117】
本実施形態では、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域は、アプリケーションを実行するプロセス毎に異なる空間が使用される。すなわち、同じ仮想アドレスでも、異なるプロセスでは別の物理アドレスが使用されるし、仮想記憶システムにより異なるプロセスの仮想アドレスは参照できない。このため、異なるプロセスからの参照はできないようになっている。
【0118】
上述したように、アプリケーションの利用可能な領域を仮想アドレス・セキュア・ユーザ領域と仮想アドレス・ユーザ領域の2つに分けることで、アプリケーション・プログラムのうち、解析又は改竄を防止したい部分のみを安全な内部メモリ15に(優先的に)配置することができる。
【0119】
また、仮想アドレス・セキュア・ユーザ領域は、仮想アドレス・ユーザ領域で実行中のノーマル状態での命令からは直接アクセスすることができないようになっているので、バス・モニタなどのツールを使用して外部メモリ20上に配置されたアプリケーション・プログラムの一部を不正に書き換えたとしても、セキュア・ブロックの内容を解析したり改竄したりすることを防止することができる。
【0120】
また、実行時に確保されるヒープ領域とスタックについても、セキュア・ブロック内の関数で確保された部分は仮想アドレス・セキュア・ユーザ領域に配置されるため、同様に不正な解析及び改竄を防止することができる。
【0121】
また、セキュア状態からノーマル状態に戻ったときに、キャッシュ13中にまだセキュア状態で参照した内部メモリ15の内容が残っていたとしても、それを参照するための仮想アドレス・セキュア・ユーザ領域への参照はMMU12により拒否されるので、 セキュア状態からノーマル状態に遷移する際にキャッシュ13のフラッシュと無効化を行なう必要がなく、高速に遷移できる。
【0122】
また、ページ・テーブルを作成するために使用する命令、キャッシュ13のコントロールを行なう命令、LoadPage、StorePageといった特権命令は、カーネル・モードでのみ実行できるようになっているので、これらの命令を不正に利用して、内部メモリの内容を解析や改竄することもできないようになっている。
【0123】
メモリ管理の構成
OSとMMU12によって構成されるメモリ管理の構成について、図7を参照しながら説明する。本実施形態では、当業界で周知のページ方式の仮想記憶を用いてメモリ管理を実現している。以下にその構成と本実施形態での拡張部分について説明する。
【0124】
仮想アドレスから物理アドレスへの変換は、ページ・テーブルを参照して行なわれる。本実施形態では、カーネル・ページ・テーブルとユーザ・ページ・テーブルという2種類のページ・テーブルが存在する(前述)。
【0125】
カーネル・ページ・テーブルは、プロセッサ10のメモリ・マップの物理アドレス内部メモリ領域に配置されており、その先頭アドレスがMMU12のカーネル・ページ・レジスタ12Aにより保持されている。このページ・テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・カーネル領域のアドレスを物理アドレスに変換するために使用される。カーネル・ページ・テーブルは物理アドレス内部メモリ領域に存在するので、ページアウトが発生することはなく常にアクセス可能である。
【0126】
一方、ユーザ・ページ、テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・カーネル領域に配置されており、その先頭アドレスがMMU12のユーザ・ページ・レジスタ12Bにより保持されている。このページ・テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のアドレスを物理アドレスに変換するために使用される。
【0127】
ユーザ・ページ・テーブルは、アプリケーションの実行毎に複数存在する。そして、個々のユーザ・ページ・テーブルは、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域に置かれる対応するアプリケーション・プログラムのアドレス変換を定義する。ユーザ・ページ・テーブルは複数存在するので、メモリ領域を有効に活用するために、物理メモリ領域ではなく仮想アドレス・カーネル領域にユーザ・ページ・テーブルは置かれ、カーネル・ページ・テーブルを使って管理されるという構造になっている。したがって、カーネル・ページ・テーブルを適切に変更することで、複数の多くのユーザ・ページ・テーブルを持つことができる。
【0128】
カーネル・ページ・テーブルとユーザ・ページ・テーブルのエントリは、図7に示すように同じ構成をとる。
【0129】
同エントリ中のDは、ダーティ・ビット(dirty bit)であり、当該ビットが1の場合対応するページが書き込まれたことを示す。
【0130】
R/Wは、このページのアクセス設定であり、1の場合読み込みと書き込みが可能、0の場合読み込みのみが可能であることを示す。指定された以外の参照が発生すると、プロセッサに例外が通知されるが、この処理については一般のページ方式の仮想記憶システムと同様の処理であり、本発明の要旨には直接関連しないので、ここでは説明を省略する。
【0131】
Lは、ページ・ロックであり、このページをページアウトの対象から外すことができる。
【0132】
Vは、有効ビット(valid bit)であり、このページ・エントリが有効であることを示す。当該ビットが1の場合このページは有効で、通常のアドレス変換が行なわれるが、0の場合は無効で、page fault exception (ページ失敗例外)が発生する。本実施形態では、page fault exception が発生すると、OSの持つページャが動作するように構成されている。
【0133】
DevIDはVが0のときに意味を持ち、ページアウト先のデバイスを特定するのにページャによって使用される。
【0134】
Sは、セキュア・ビット(secure bit)であり、当該ビットが1の場合、対応するページが内部メモリ15でのみ有効であること(すなわち、セキュリティ属性が付加されていること)を示す。また、当該ビットが0の場合は外部メモリ20で有効となる。このビットはまた、参照するメモリ領域のチェックにも使用される。現在のモードと状態がユーザ・モードでノーマル状態の場合に、Sが1のページを参照しようとすると、MMU12は、アドレス変換を行なわずに、プロセッサ・コア11に例外を通知するようになっている。これにより、アプリケーション・プログラムがセキュア状態とノーマル状態のどちらであっても、同じページ・テーブルを使用することができ、また、状態遷移時にページ・テーブルを切り替えたり、キャッシュ13上の内部メモリ15をフラッシュしたりする必要がなくなり、高速な状態遷移を実現することができる。
【0135】
KeyIndexは、暗号テーブルへのインデックスであり、このページのセキュア・ビットSが1(すなわちセキュリティ属性が付加されている)で且つVが0のときのみ意味を持ち、対応するページの暗号化に使われた情報を指している。
【0136】
PFNは、Vが1のときは、このページに対応する物理アドレスの上位部分である。仮想アドレスの下位部分とこのPFNを上位アドレスとして組み合わせることで、ページの物理アドレスが決定される。また、Vが0のときは、PFNは、DevIDで指定されるデバイス内で対応するページが保存されている位置を示す情報が格納される。本実施形態では、DevIDが外部メモリ15を指す場合にはその物理アドレスの上位部分が保持され、DevIDがHDD28を指す場合にはHDD28内のページを保存しているセクタ番号が保持される。
【0137】
なお、カーネル・ページ・テーブルはすべてSが1(すなわちセキュリティ属性が付加されている)として設定される。したがって、ユーザ・ぺージ・テーブルはすべて内部メモリ15に置かれ、内部メモリ15が不足した場合には暗号化されて外部メモリ20又はHDD28にページアウトされるようになっている。これにより、頻繁に使用されるユーザ・ページ・テーブルのアクセスの高速化と改竄や解読の防止を実現している。
【0138】
また、メモリ管理のために、暗号テーブルが設けられている。このテーブルのエントリは図7に示すように共通鍵と参照カウントの組み合わせからなる構造であり、暗号処理ユニット16の暗号テーブル・レジスタ16Aによりその先頭アドレスが保持される。このテーブルは、共通鍵方式の共有鍵を保持するようになっている。暗号テーブルのエントリは、ページ・テーブルのKeyIndexにより参照される。
【0139】
本実施形態では暗号テーブルは固定のエントリ数としたため、参照カウントも持っている。参照カウントが0のエントリは空きエントリであるため、新たに暗号化の必要が生じた際にはその空きエントリに新たに共有鍵が設定され、参照カウントは1に設定される。これは、復号化により鍵を利用した場合には、1だけ引き算される。新たに暗号化の必要が生じた際に、暗号テーブルに空きエントリがない場合には、ランダムに1つのエントリを選びその暗号鍵を利用するとともに、参照カウントを1だけ増やす。暗号テーブルもカーネル・ページ・テーブルと同じく物理アドレス内部メモリ領域に配置される。
【0140】
ノーマル状態とセキュア状態の遷移
既に述べたように、ユーザ・モードにはセキュア状態とノーマル状態の2つの状態がある。ノーマル状態にあるときのアプリケーション・プログラムは、仮想アドレス・ユーザ領域への参照のみが許可され、仮想アドレス・セキュア・ユーザ領域へのアクセスはできない。アプリケーションが仮想アドレス・セキュア・ユーザ領域に配置された関数や変数を参照する場合には、セキュア状態に移行する必要がある。これには特別な命令scallを使用する。
【0141】
図8には、仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順をフローチャートの形式で示している。
【0142】
まず、呼び出す関数セレクト番号と引数をスタック上にプッシュする(ステップS1)。ここで、関数セレクト番号とは、ソースコードでsecure exportedのセキュリティ属性が付けられたすべての関数に対してリンカにより自動的に割り振られる番号である。引数は、通常の関数呼び出し同様、関数へ入力される値である。
【0143】
次いで、scall命令を実行する(ステップS2)。これにより、まず、関数呼び出しからの戻り先のアドレスがスタックにプッシュされる。ここまでの実行で使用されたスタックはノーマル状態で使用可能なノーマル・スタック・レジスタ11Bに保持されるスタックである。
【0144】
次に、状態がノーマル状態からセキュア状態に変更される。既に説明したように、セキュア状態では、仮想アドレス・セキュア・ユーザ領域への参照が許可される。また、セキュア・スタック・レジスタ11Aの使用も許可される。セキュア・スタック・レジスタ11Aには、アプリケーションの起動時にOSによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・スタックのアドレスが保持されている。
【0145】
さらに、セキュア・エントリ・レジスタ11Cの使用も許可される。セキュア・エントリ・レジスタ11Cは、やはりアプリケーションの起動時にOSによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・エントリポイントのアドレスが保持されている。セキュア状態でのセキュア・エントリ・レジスタ11Cの使用とは、scallによりセキュア・エントリ・レジスタ11Cにより指示されたアドレス(すなわちセキュア・エントリポイント)に実行が遷移することであって、セキュア・エントリ・レジスタ11Cの値を読んだり書いたりすることはできない。これら読み書きはカーネル・モードでのみ許可される。
【0146】
scallによりセキュア状態に変更された後、セキュア・エントリ・レジスタ11Cの示すアドレスから実行が継続される(ステップS3)。上述したように、セキュア・エントリ・レジスタ11Cは、仮想アドレス・セキュア・ユーザ領域のセキュア・エントリポイントのアドレスが保持されているので、リンカによって生成されたセキュア・エントリポイントの実行が行われる。
【0147】
セキュア・エントリポイントでは、ノーマル・スタックから関数セレクト番号を取り出し、その番号の値をチェックする。関数セレクト番号がこのアプリケーションで定義された番号以外であった場合、例外が発生する。関数セレクト番号が正しい値であった場合には、関数セレクト番号で指定されたsecure exportedセキュリティ属性の付けられた関数に対応するスタブのアドレスに実行を遷移する。
【0148】
スタブは、コンパイラにより自動生成されたコードで、secure exportedセキュリティ属性の付けられた関数に対して1つずつ存在する。スタブでは、ノーマル・スタックから引数をセキュア・スタック上にコピーをする(ステップS4)。そして、secure exportedセキュリティ属性の付けられた関数を呼び出す。
【0149】
secure exportedセキュリティ属性の付けられた関数は、セキュア・スタック上から引数を取り出し、関数の処理を実行する(ステップS5)。secure exportedセキュリティ属性の付けられた関数は、secureセキュリティ属性の付けられた関数からも関数呼び出しをされることがある。どちらの場合も引数の受け渡しは、セキュア・スタック上で行われる。スタブはノーマル状態からの呼び出しをセキュア状態からの呼び出しと等価にするための処理を行なっているとも言える。
【0150】
secure exportedセキュリティ属性の付けられた関数の実行が終わると、スタブに実行が戻ってくる(ステップS6)。スタブは、関数の戻り値をセキュア・スタックからノーマル・スタックにコピーする。
【0151】
そして、sret命令を実行する(ステップS7)。sret命令は、戻り先のアドレスをノーマル・スタックから取り出す。そして、スタックやプログラム・カウンタといった特殊なレジスタを除きすべてのレジスタの値を0にクリアした後で、ノーマル状態に遷移をして、戻り先アドレスから実行を再開する。レジスタの値をクリアするのは、レジスタの値をセキュアではない関数の実行により参照することで、セキュアな関数の情報がレジスタを通して漏れることを防ぐためである。
【0152】
図9には、内部メモリ15上に展開されているアプリケーションのセキュア部分(.secure.text)の構成を模式的に示している。
【0153】
セキュア部分の先頭アドレスすなわちセキュア・エントリポイントは、セキュア・エントリ・レジスタ11Cに保持されており、scallによりセキュア・エントリポイントに実行が遷移する。
【0154】
アプリケーションのセキュア部分に含まれる関数には、secure exported又はsecureいずれかのセキュリティ属性が付加されている。リンカによるリンク時に、ソースコードでsecure exportedのセキュリティ属性が付けられたすべての関数に対して、関数セレクト番号が割り振られる。
【0155】
また、コンパイラによりsecure exportedセキュリティ属性の付けられた各関数に対して1つずつスタブが自動生成される。スタブは、ノーマル状態からセキュア状態に遷移するときに、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理を行ない、逆にセキュア状態からノーマル状態に戻るときにセキュア・スタック上の返り値をノーマル・スタックにコピーする処理を行なう。
【0156】
scallによりセキュア・エントリポイントに実行が遷移すると、まず関数セレクト番号に対応するスタブが起動して、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理が行なわれる。その後、関数セレクト番号に該当するsecure exportedセキュリティ属性の付けられた関数が起動し、その実行が開始される。そして、同関数の実行が終わると、スタブに実行が戻り、セキュア・スタック上の返り値をノーマル・スタックにコピーする処理が行なわれる。その後、sret命令の実行によりノーマル状態に遷移をして、戻り先アドレスから実行を再開する。
【0157】
アプリケーション・プログラムのロード実行
アプリケーション・プログラムを実行する際、OSは、HDD28に保存されているアプリケーション・プログラムを読み出し、そのプログラム・ヘッダを参照してメモリに配置していく。
【0158】
プログラム・ヘッダのエントリの属性にSが付いていないセクションは、外部メモリ20を物理アドレスとして配置し、セキュアでないことを示すようにセキュア・ビットSを0とし、仮想アドレスは仮想アドレス・ユーザ領域を使用するようにユーザ・ページ・テーブルのエントリを作成する。
【0159】
また、プログラム・ヘッダのエントリの属性にS属性が付いているセクションは、暗号化されているので復号する。まず、HDD28から暗号化されたコンテンツ鍵をプロセッサ10内に読み込み、プロセッサ10内部でプロセッサ固有鍵16Cを使用して復号を行ない、コンテンツ鍵を得る。このコンテンツ鍵を使用して、プログラム・ヘッダのエントリの属性にS属性が付いているセクションをプロセッサ10内部に読み込んだ後、プロセッサ10内で復号し内部メモリ15を物理アドレスとして配置していく。復号後のセクション・データはプロセッサ外部には一切出ない。そして、セキュア・ビットSを1とし、仮想アドレスは仮想アドレス・セキュア・ユーザ領域を使用するように、対応するユーザ・ページ・テーブルのエントリを作成する。
【0160】
以上の処理により、セキュリティ属性Sが付けられたセキュア・ブロックは内部メモリ15に(優先的に)配置され、それ以外のブロックは外部メモリ20に配置される。そして、作成されたユーザ・ページ・テーブルの先頭アドレスは、このアプリケーションの実行時にはMMU12内のユーザ・ページ・レジスタ12Bに、OSによって設定される。
【0161】
また、セキュア・スタックとノーマル・スタックをそれぞれ仮想アドレス・セキュア・ユーザ領域及び仮想アドレス・ユーザ領域に確保して、セキュア・スタック・レジスタ11A及びノーマル・スタック・レジスタ11Bに設定する。また、セキュア・エントリポイントのアドレスをセキュア・エントリ・レジスタ11Cに設定する。
【0162】
ページインの動作
上述したように、アプリケーション・プログラムの実行は、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域上で行なわれる。本実施形態に係るプログラム利用装置では、アプリケーション・プログラムの実行がある仮想アドレス・ユーザ領域又は仮想アドレス・セキュア・ユーザ領域を参照すると、プロセッサ・コア11からMMU12に出力される仮想アドレスの上位部分を、MMU12内のユーザ・ページ・レジスタ12Bが保持しているユーザ・ページ・テーブルのインデックスとして使用することで、ユーザ・ページ・テーブルのエントリが1つ選択されるようになっている。この参照された仮想アドレスに対応するユーザ・ページ・テーブルのエントリの有効ビットVが0である場合、このページが無効であることを示していて、ページ失敗例外(page fault exception )がMMU12からプロセッサ・コア11に通知され、プロセッサ・コア11はページャのページインの処理を実行する。
【0163】
図10には、ページャのページインの動作をフローチャートの形式で示している。
【0164】
本実施形態では、ページが無効になっている状態(すなわち有効ビットV=0)は、ページ・テーブル・エントリのSの値に応じて2種類存在する。すなわち、セキュア・ビットSが1のページであれば、内部メモリ15にはなく、暗号化されて外部メモリ20又はHDD28にページアウトしている場合と、Sが0のページであれば、外部メモリ20上になくHDD28にページアウトしている場合の2通りである。
【0165】
このため、図10に示すページイン処理手順では、V=0のページへの参照を検出すると(ステップS11)、まず、セキュア・ビットSの値をチェックする(ステップS12)。
【0166】
そして、セキュア・ビットSが1の場合は、セキュア・ページのページイン処理を実行し(ステップS13)、Sが0の場合は、ノーマル・ページのページイン処理を実行する(ステップS14)。
【0167】
いずれのページイン処理が終了しても、例外を発生させたページは内部メモリ15又は外部メモリ20上に参照可能な状態で配置されるので、ページインの処理終了後、例外発生時点からアプリケーション・プログラムを実行再開することができる。
【0168】
なお、本明細書中では、アプリケーション・プログラムの実行による仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のページインの動作を説明するが、仮想アドレス・カーネル領域を参照した場合にも同様の例外の発生とページインの処理が行なわれる。
【0169】
例えば、ユーザ・ページ・テーブルは仮想アドレス・カーネル領域に配置されるので、ページャのページイン処理の実行でページャがMMU12のユーザ・ページ・レジスタ12Aを使用してページ・テーブル・エントリを選択した場合、そのページ・テーブル・エントリが存在する仮想アドレス・カーネル領域のページがさらに無効になっている場合がある。この場合、さらに別のカーネル・ページ失敗例外(kernel page fault exception)が MMU12からプロセッサ・コア11に通知される。この例外が発生すると 、また別のページインの処理が実行されるが、この処理は上述したページイン処理とほぼ同様である。但し、MMU12のカーネル・ページ・レジスタ12Aの指すカーネル・ページ・テーブルを使用する点とカーネル・ページ・テーブルが物理アドレス内部メモリ15に配置されることから、これ以上のページ例外は発生しないという点が相違する。
【0170】
セキュア・ページのページイン動作
ここでは、セキュア・ページのページイン動作について、図11を参照しながら説明する。これは、図10に示したフローチャートにおいてページ失敗例外(page fault exception)を発生させたページのページ・テーブルがS=1であった場合に行われる処理(ステップS13)に相当する。
【0171】
まず、内部メモリ15に空きページがあるかどうかが検索される(ステップS21)。内部メモリに空きがない場合には、セキュア・ページのページアウトが行なわれ(ステップS22)、内部メモリに空きページが作られる。
【0172】
次いで、ページ・テーブル・エントリのDevIDとPFNの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置が特定される(ステップS23)。本実施形態では、ページアウトされているデバイスとして外部メモリ20とHDD28の2つの場合があることになる。どちらの場合もページは暗号化されてページアウトされている。ページアウト先がHDD28であった場合には、外部メモリ20のバッファにページが読み込まれる。
【0173】
次いで、ページ・テーブル・エントリのPFNに内部メモリ15の空きページの物理アドレスを設定する(ステップS24)。そして、ページアウト先の外部メモリ15のアドレスとページ・テーブルのインデックスをオペランドとしてLoadPage命令を実行する(ステップS25)。
【0174】
LoadPage命令は、プロセッサ10により実行される命令で、次の手順に従い、暗号処理されているセキュア・ページを内部メモリ15にロードする動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブルのKeyIndexの値をインデックスとして使い、暗号処理ユニット16の暗号テーブル・レジスタ16Aにより指定される暗号テーブルのエントリから共通鍵方式の復号鍵を取り出し、オペランドで指定された外部メモリ20のアドレスの内容についての復号処理をプロセッサ10内部の暗号処理ユニット16により行なう。復号されたページは、オペランドで指定されたページ・テーブルのPFNで指定される内部メモリ15に配置される。また、復号に使用した暗号テーブルエントリの参照カウントが1つ減らされる。
【0175】
最後に、この処理では該当するページ・テーブル・エントリの有効ビットVを1に設定するとともに、同エントリのDevIDを内部メモリ15を示す値に変更する(ステップS26)。
【0176】
図12には、図11に示したセキュア・ページのページイン処理において、暗号処理されているセキュア・ページを内部メモリ15にロードする動作を行なうLoadPage処理の詳細な手順をフローチャートの形式で示している。
【0177】
まず、インデックスで指定されたページ・テーブル・エントリのKeyIndexを使い、暗号テーブルのエントリから共通暗号鍵の鍵を取り出す(ステップS31)。
【0178】
次いで、オペランドで指定された外部メモリ20のアドレスの内容を暗号処理ユニット16に読み込み(ステップS32)、その復号処理を、共通暗号鍵を用いてプロセッサ10内部の暗号処理ユニット16により行なう(ステップS33)。
【0179】
そして、復号されたページを、ページ・テーブル・エントリのPFNで指定される内部メモリ15に配置する(ステップS34)。
【0180】
また、復号に使用した暗号テーブルエントリの参照カウントを1つ減らす(ステップS35)。
【0181】
本実施形態では、暗号化及び復号処理をプロセッサ10内部のハードウェアで実行することにより、暗号及び復号処理による処理性能の低下を少なくするようになっている。また、本発明の目的である内部メモリ15の有効活用により、暗号化および復号の実行そのものが必要最小限にしか行なわれないことと併せ、高速な処理性能を実現することができる。
【0182】
セキュア・ページのページアウト動作
ここでは、セキュア・ページのページアウト動作について、図13を参照しながら説明する。これは、図11で示したセキュア・ページのページイン処理において、内部メモリ15に空きページがない場合に実行される処理(ステップS22)に相当する。
【0183】
まず、内部メモリ15からページアウトするページを選択する(ステップS41)。この選択方法には、ランダムに選択する方法やLRU (Least Recently Used) などの手法がある。また、ページアウトするページの選択方法は多くのOSにより既に実装されているので、ここではこれ以上説明しない。なお、本実施形態では、ページ・テーブル・エントリにページ・ロックを表わすLビットが存在し、L=1となっているページはページアウトの対象ページとはならない。
【0184】
次いで、外部メモリ20に空きページがあるかどうかが検索される(ステップS42)。外部メモリ20に空きがない場合には、ノーマル・ページのページアウトが行なわれ(ステップS43)、外部メモリ20に空きページが作られる。
【0185】
そして、ページアウト先の外部メモリのアドレスとページ・テーブルのインデックスをオペランドとしてStorePage 命令を実行する(ステップS44)。
【0186】
StorePage 命令は、プロセッサ10により実行される命令で、次の手順に従い、内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出す動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのPFNにより指定される内部ページの物理アドレスに相当する内容を保持するキャッシュ・ラインがキャッシュ内に存在するかが検索される。存在した場合で、そのキャッシュ・ラインに書き込みが発生していたならば、その内容を対応する内部メモリ15に書き込み、そのキャッシュ・ラインを無効化する。書き込みが発生していない場合には、単にそのキャッシュ・ラインを無効化する。次に、暗号テーブルに空きがあるかどうかが検索され、空きがあった場合には乱数発生器16Bで共通鍵暗号の鍵を生成し、暗号テーブルのエントリに登録してその参照カウントを1に設定する。暗号テーブルに空きがなかった場合には、ランダムに選択した暗号テーブルのエントリに登録された共通鍵暗号の鍵を利用する。このとき、そのエントリの参照カウントを1つ増加させる。このようにして得た共通鍵暗号の鍵を使用して、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのPFNにより指定される内部ページの内容の暗号化を行なう。暗号化されたページの内容は、オペランドで指定された外部メモリ20のアドレスに配置される。上述した動作により、指定した内部メモリ15はプロセッサ10により暗号化され外部メモリ20に書き出される。
【0187】
最後に、ページアウトを行ったページ・テーブル・エントリの有効ビットVを0に、DevIDを外部メモリ20を示す値に、PFNを外部メモリ20中のページアウトした内容の保存先を示す物理アドレスに設定する(ステップS45)。
【0188】
図14には、図13に示したセキュア・ページのページアウト処理において、内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出すStorePage処理の詳細な手順をフローチャートの形式で示している。
【0189】
まず、インデックスで指定されたページ・テーブル・エントリのPFNに対応するアドレスの内容を保持するキャッシュ・ラインの書き戻しと無効化する(ステップS51)。そして、暗号テーブルに空きがあるかどうかを検索する(ステップS52)。
【0190】
暗号テーブルに空きがない場合には、ランダムに暗号テーブルのエントリを選択して(ステップS53)、参照カウントを1つ増やす(ステップS54)。
【0191】
一方、暗号テーブルに空きがある場合には、乱数発生器で16B共通暗号鍵の鍵を生成し、暗号テーブルに登録する(ステップS55)。参照カウントは1に設定する。
【0192】
次いで、ページ・テーブル・エントリのKeyIndexに暗号テーブル・エントリのインデックスを設定する(ステップS56)。
【0193】
次いで、ページ・テーブル・エントリのPFNで指定される内部メモリ15の内容を暗号化する(ステップS57)。
【0194】
最後に、暗号化されたページの内容を、オペランドで指定された外部メモリ20のアドレスに配置する(ステップS58)。
【0195】
ノーマル・ページのページイン動作
ここでは、図15に示したフローチャートを参照しながら、ノーマル・ページのページインの動作について説明する。この動作は、図10に示したページャのページインの動作において、ページ失敗例外(page fault exception )を発生させたページのページ・テーブルがS=0であった場合に行なわれる処理(ステップS14)である。
【0196】
まず、外部メモリ20に空きページがあるかどうかが検索される(ステップS61)。外部メモリに空きがない場合には、ノーマル・ページのページアウトが行われ(ステップS62)、外部メモリに空きページが作られる。
【0197】
次いで、ページ・テーブル・エントリの DevID とPFNの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置を特定する(ステップS63)。本実施形態では、DevIDはHDD28を示す値に設定されていることになり、PFNからHDD28内でのページのページアウト先が決定される。
【0198】
そして、ページの内容が外部ページの空きページに読み込まれる(ステップS64)。
【0199】
最後に、該当するページ・テーブル・エントリの有効ビットVを1に、DevIDを外部メモリ20を示す値に、PFNを外部メモリ20のページが読み込まれた物理アドレスに設定する(ステップS65)。
【0200】
ノーマル・ページのページアウト動作
ここでは、図16に示したフローチャートを参照しながら、ノーマル・ページのページアウトの動作について説明する。この動作は、図13に示したセキュア・ページのページアウト処理において外部メモリ20に空きがなかった場合や、図14で示したノーマル・ページのページイン処理において外部メモリ20に空きがなかった場合に行なわれる処理である。
【0201】
まず、外部メモリからページアウトするページを選択する(ステップS71)。このときも、セキュア・ページのページアウト処理の場合と同様に、ページ・ロックがL=1となっているページはページアウトの対象ページとはならない。
【0202】
次いで、HDD28に空きがあるかどうかが検索される(ステップS72)。HDD28に空きがない場合にはエラーとなる。
【0203】
HDD28に空きがある場合には、ページアウトするページの内容をHDD28に書き込む(ステップS73)。
【0204】
最後に、該当するページ・テーブル・エントリの有効ビットVを0に、DevIDをHDD28を示す値に、PFNをHDD28のページが書き込まれた位置を示す値に設定する(ステップS74)。
【0205】
本明細書で詳解した実施形態では、プログラムを構成するエレメントとして関数、グローバル及びファイル・スコープの変数を使用し、それらに対してセキュリティ属性を付加する。セキュリティ属性の付加されたエレメントは本来の属性である、命令、初期済みデータ、未初期化データとの組み合わせから、それぞれ.secure.text、.secure.data、.secure.bssに再構成されたセキュア・ブロックを構成する。
【0206】
プログラム利用装置においては、ページ方式の仮想記憶機構のページ・テーブルにセキュア・ブロックを意味するSビットを追加し、Sビットの値に応じて内部メモリ15と外部メモリ20を使い分けるとともに、暗号化を行なうかどうかの選択も行なうことで、セキュア・ブロックを可能な限り安全な内部ブロックに配置することと、内部メモリ15が不足した場合に限って暗号化の伴うページアウト処理を行なうこと、そして、セキュア・ブロック外からセキュア・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、プログラムの改竄及び解読の防止と、処理性能の向上の最適化を実現する。
【0207】
[追補]
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【0208】
【発明の効果】
以上詳記したように、本発明によれば、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0209】
また、本発明によれば、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0210】
また、本発明によれば、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0211】
また、本発明によれば、暗号の強度を弱めることなく、処理性能を暗号化を行なわない場合と同程度に維持しながら、他のプログラムやバス・モニタやICEなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することができる。
【0212】
本発明によれば、プログラムを本来改竄や解析を防止したい部分をセキュア・ブロックとして明確に分離させ、セキュア・ブロックのみをセキュア・メモリである内部メモリに配置することで、改竄や解析防止の機能を持つが限られた資源である内部メモリを効率的に利用することが可能となる。
【0213】
また、本明細書中で説明したように、リロケータブル形式のプログラム・ファイルにおいても明確にセキュリティ・ブロックの分離を行なうことで、ライブラリなど複数の開発者が独立して作成した各プログラム・モジュールからなるセキュリティ・ブロックも、リンク時においてセキュリティ・ブロックの統合が行うことができる。したがって、複数の独立した開発者が作成したプログラムに対しても開発者に透過的に効率的なセキュリティ・ブロックの統合を行なうことができる。
【0214】
また、本発明によれば、セキュリティ・ブロックに対してのみ内部メモリを使用することで、ページアウトやページインの回数を効率的に削減することができるため、これらに伴う暗号化及び復号処理による性能の低下を防ぐことができ、また、強度の高い暗号アルゴリズムや鍵を使用することも可能となる。プロセッサ外部にセキュア・ブロックが書き出される頻度が減少することと、たとえ書き出した場合においても性能低下を伴うことなく強度の高い暗号化を行なうことができるので、バス・モニタやICEなどのツールを使用した解析や改竄を困難にすることができる。
【0215】
また、本発明によれば、セキュリティ・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、外部メモリ上のプログラムの一部分がバス・モニタやICEなどのツールを使用して不正アクセスが行なわれた場合であっても、セキュア・ブロックの解析や改ざんを困難にすることができる。
【図面の簡単な説明】
【図1】C言語で記述されたプログラムについてセキュリティ属性の設定方法を説明するための図である。
【図2】リロケータブル形式のプログラムの構造を例示した図である。
【図3】図2に示したリロケータブル形式のプログラムを隣家によりリンクして生成された実行形式プログラムの構造を示した図である。
【図4】本発明が適用されるプログラム利用装置のハードウェア構成の一例を示した図である。
【図5】図4に示したプロセッサ10の内部構造をより詳細に示した図である。
【図6】図4及び図5で示したプロセッサ10が定義するメモリ・マップを模式的に示した図である。
【図7】OSとMMU12によって構成されるメモリ管理の構成を説明するための図である。
【図8】仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順を示したフローチャートである。
【図9】内部メモリ15上に展開されているアプリケーションのセキュア部分(.secure.text)の構成を模式的に示した図である。
【図10】ページャのページインの動作を示したフローチャートである。
【図11】セキュア・ページのページイン動作を示したフローチャートである。
【図12】LoadPage処理の詳細な手順を示したフローチャートである。
【図13】セキュア・ページのページアウト動作を示したフローチャートである。
【図14】内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出すStorePage処理の詳細な手順を示したフローチャートである。
【図15】ノーマル・ページのページイン処理の手順を示したフローチャートである。
【図16】ノーマル・ページのページアウト処理の手順を示したフローチャートである。
【符号の説明】
10…プロセッサ
11…プロセッサ・コア
12…MMU
13…キャッシュ
14…外部バス・インターフェース
15…内部メモリ
16…暗号化処理ユニット
20…外部メモリ
21…ディスプレイ・コントローラ
22…表示装置
23…入出力インターフェース
24…キーボード
25…マウス
26…ネットワーク・インターフェース
27…HDDコントローラ
28…HDD
30…バス
【発明の属する技術分野】
本発明は、プログラムやコンピュータ・データなどを実行又は再生という形態で利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、改竄や解析など不正使用防止のために暗号化すなわち実行不能状態にしてハード・ディスク装置などの外部記憶装置に保存されているデータを利用する(あるいは、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も含む)データ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【0002】
さらに詳しくは、本発明は、実行不能状態のデータをメモリ上で実行可能状態に展開してからデータを利用するデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに係り、特に、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にするデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムに関する。
【0003】
【従来の技術】
著作権は、著作物を利用し得る相対的な排他的独占権であり、無体財産権の1つに含まれる。ここで言う「著作物」とは、思想又は感情を創作的に表現したものであって、文芸、学術、美術又は音楽の範囲に属するものを指す。著作権は、各国の著作権法や、ベルヌ条約や万国著作権条約などの国際的な条約で保護されている。例えば、デジタル化されたテキストやコンピュータ・プログラム、デジタル化された音楽コンテンツ、映像コンテンツ、番組の放送コンテンツなど各種のメディアも著作物であり、著作権法制下で適正に保護を受けるべきである。
【0004】
著作権者自身においてのみ著作物の利用が行われるのはごく稀であり、他人が著作権を利用することに対して著作権者が一定の対価を得て許諾するというのが一般的である。したがって、著作権の保護を担保するためには、他人が勝手に(許可なく)著作物を複製するなどの著作物の不正使用を防止する必要がある。
【0005】
ところが、デジタル形式のデータやコンテンツの複製や改竄は極めて容易であり、著作権侵害の危険に無防備にさらされているとさえ言える。したがって、著作権法やその他の法規制を強化するだけでは不充分であり、情報技術の観点からも著作物の正当な利用を支援し若しくは不正利用を排除して、著作権の保護を拡充する必要があると思料される。
【0006】
例えば、パーソナル・コンピュータ(PC)などのプログラムを実行する装置、あるいは、DVD(デジタルビデオディスク(商標)あるいはデジタル・バーサタイル・ディスク)装置やデジタルVTRやMD(ミニディスク(商標))記録再生装置など、データを利用する装置において、著作権のある画像データや音楽データをソフトウェアで再生を行なう場合に、ソフトウェアを不正に改竄ができてしまうと、ソフトウェアを改変することにより、著作権のあるデータを不正にコピーできてしまうという問題がある。また、ソフトウェアの処理が技術開発の成果やノウハウとしての価値がある場合、それらが不正に解析されてしまうという問題がある。例えば、ゲーム・プログラムの場合その開発には多くの資金と技術開発が使用されているため、それらが不正にコピーされることが大きな問題となっている。この結果、プログラムやデータ(以下、単に「データ」とも呼ぶ)の値段も高くしなければならなくなり、普及の障壁となるという悪循環が起こっている。
【0007】
例えば、暗号技術を用いることによって、通信路上に流れるデータを悪意のある第三者から保護することが可能となっている。しかしながら、データの配信・流通過程だけでなく、データが正規のユーザに提供された後に行なわれる不正コピーや不正利用も大きな問題となっている。
【0008】
この種の問題への対策として、最近では権利管理方式(DRM:Digital Rights Management)と呼ばれる方式が採用されている。権利情報管理方式(DRM)によって、ユーザはコンテンツの利用許可(ライセンス)を得なければコンテンツを利用できない仕組みが実現される。
【0009】
DRMのシステムは、典型的にはコンテンツ提供者とライセンス管理者とユーザという参加者で構成される。ユーザは、コンテンツの再生装置を所持し、それを使ってコンテンツを利用する。また、ライセンス管理者は、ユーザにライセンスの発行を行なう。また、コンテンツ提供者は、ユーザにコンテンツの提供を行なう。DRMでは、コンテンツのライセンス(利用許可)をユーザに与えることは、コンテンツ鍵をそのユーザの(特定の)正当な再生装置に与えることで実現される。ここで言う「正当性」とは、再生装置が暗号鍵やコンテンツ鍵、並びに復号されたコンテンツを外部に漏らさないで処理できることを意味する。
【0010】
DRMを始めとするデータの保護方法は、基本的には、データを暗号化してデータを利用する装置のハード・ディスクなどに保存し、データの利用時には復号鍵を用いてデータを復号した後に利用するというものである。このような方法によれば、データは暗号化を行ないハード・ディスク上ではデータは暗号化すなわち利用不能な形式で保存されているため、データを見ただけでは容易にデータの改竄や解析が行なえなくなるという点で有効である。しかしながら、データの利用時には復号鍵を使用して復号が必ず行なわれるため、データ利用時に復号後のデータを見ることで改竄や解析が行なえてしまうという問題が依然として残っている。
【0011】
例えば、メモリ上に復号されたデータを配置(ロード)して利用する場合、メモリ内容を見ることでデータの改竄や解析が行なえてしまう。また、復号されたデータは通常データ利用装置内のバスを通して転送が行なわれるが、バス・モニタやICE(イン・サーキット・エミュレータ)などのツールを利用することで、比較的容易にデータの解析や改竄も行なえてしまう。例えば、パーソナル・コンピュータのように標準仕様のバスを使用している場合には、バス・モニタやICEなどのツールも、開発時におけるデバッグの容易さを実現するという本来の目的・用途のために、標準仕様のバスを容易に解析することができるようになってきている。このため、このようなツールを悪用することで、バス上で転送される実行可能形式のデータを解析又は改竄できてしまう。
【0012】
他方、ページング方式による仮想記憶システムにおいて、ページインやページアウトの際に転送データに対してデータ変換を施すという技術が提案されている(例えば、特許文献1を参照のこと)。このような仮想記憶システムを応用して、ページアウトの際にページ単位で暗号化し、ページインの際に暗号化ページを復号することにより、バス転送時におけるデータの改竄や解析を防止することができると思料される。また、このバリエーションとして、1つのプログラムで1つの暗号方式又は暗号鍵を用いる方法や、例えばページ、プロセス、ドメインなどの単位毎に異なる暗号方式又は暗号鍵を用いる方法などが考えられる。
【0013】
しかしながら、ページング時にページ単位で暗号化並びに複合化を行なう方法は、データ実行時に暗号化処理と復号処理のためのオーバヘッドが生じる。このため、比較的簡単なアルゴリズムの暗号化方式を使用すると、暗号強度が高められないという問題がある。また、データ参照時に必ず復号を行なう必要があるため、処理性能(スループット)が低下してしまうという問題がある。
【0014】
すなわち、データを利用する装置でデータやプログラムを利用する場合に、そのデータやプログラムが不正に改ざん又は解析されてしまうという問題がある。また、従来のデータ保護方法では、バス・モニタやICEなどのツールによる解析に対して無力であったり、又は、暗号化の強度を弱める必要があったり、処理性能が低下するという問題がある。
【0015】
また、データを利用する装置においてはプロセッサと安全な通信路で接続されたメモリを使用するが、このメモリの容量は限定されているために、効率的に使用する必要がある。
【0016】
【発明が解決しようとする課題】
本発明の目的は、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0017】
本発明のさらなる目的は、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0018】
本発明のさらなる目的は、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することにある。
【0019】
本発明のさらなる目的は、暗号の強度を弱めることなく、暗号化を行なわない場合と処理性能を同程度に維持しながら、他のプログラムやバス・モニタやICEなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することにある。
【0020】
【課題を解決するための手段及び作用】
本発明は、上記課題を参酌してなされたものであり、その第1の側面は、データをメモリ空間に配置してデータを利用するデータ利用装置であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成手段と、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置手段と、
各メモリ領域に配置されたブロックを利用するブロック利用手段と、
を具備することを特徴とするデータ利用装置である。
【0021】
ここで、前記メモリ空間の少なくとも1つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリである。また、前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、前記セキュア・メモリは例えば前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリとして構成される。
【0022】
また、再構成されたブロックは、例えばページング方式の仮想記憶システムにおいてページイン及びページアウトなどの際にデータ転送を行なう単位となるページに相当する。
【0023】
エレメントに付加される属性とは、例えば、データに対して改竄防止と秘匿性の確保が必要であることを表わすセキュリティ属性のことである。
【0024】
そして、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを前記セキュア・メモリに優先的に配置する。
【0025】
また、前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを安全な方法で前記セキュア・メモリに配置する。
【0026】
例えば、セキュリティ属性が付加されているセキュリティ・ブロックは、暗号化処理又はその他の処理により実行不能形式でハード・ディスクなどの外部記憶装置あるいはセキュア・メモリ以外のメモリ領域に格納されており、セキュリティ・ブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するようにする。(本発明は、HDDやDVDなどの外部記憶装置だけでなく、ネットワークからダウンロードしてきて直接メモリ空間に配置する場合も対象とする。)
【0027】
また、セキュア・メモリが不足した状態などにおいて、前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行するが、前記セキュア・メモリに配置されているブロックを交換する際に該エレメントを実行不能形式に再変換することで、改竄や解析を防止する。
【0028】
本発明の第1の側面に係るデータ利用装置においては、まずエレメントの集合として構成されるデータに関して、プログラムやデータの改竄や秘匿性に関する属性であるセキュリティ属性を付加する。そして、セキュリティ属性を基にデータの再構成を行ない、同一のセキュリティ属性が与えられたエレメントを1つのブロックとして、データを複数のブロックで構成する。
【0029】
セキュリティ属性により、改竄や解読の防止が必要であると識別されたセキュリティ・ブロックは例えば暗号化を行なうなどの処理が施される。データ利用装置において、データが利用される際には、セキュリティ・ブロックはプロセッサと安全な通信路で接続された復号装置(例えばプロセッサと同一チップ内にある復号装置)で復号されプロセッサに送られる。そして、復号データはプロセッサと安全な通信路で接続されたセキュア・メモリ(例えばプロセッサと同一チップ内にあるメモリ)に保管される。
【0030】
また、セキュア・メモリが不足した際には、その内容をプロセッサと安全な通信路で接続された暗号装置により暗号化したものをプロセッサ外部のメモリや記憶装置等に保管するとともに、必要になった際には逆に復号を行ないセキュア・メモリ内に再び配置を行なう。
【0031】
したがって、本発明によれば、改ざんや解析を防止したいデータ部分はデータ利用装置内のセキュア・メモリに暗号化されずに安全に配置することができるので、処理性能を落とすことなく、改竄や解析を防止することができる。
【0032】
また、セキュア・メモリが不足した場合のみプロセッサ外部のメモリや記憶装置に暗号化を行なった上で書き出し(ページアウト)が行なわれるので、暗号化及び復号の回数を非常に少なくすることができる。また、ページングの際に用いる暗号の強度を落とす必要がなくなる。
【0033】
なお、データを構成する各エレメントに対して付加するセキュリティ属性として、例えば以下に示すような情報を記述することができる。
【0034】
(1)改竄防止と秘匿性の確保が必要であることを示す情報、すなわち、安全な場所に配置することを要請する情報。
(2)利用頻度を示す情報。
この場合、利用頻度と他のセキュリティ属性を利用することで、セキュア・メモリが十分にない場合、頻度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに(必要があれば暗号化を行って)配置することで性能の向上を図るなどの使い方が考えられる。
(3)改竄防止と秘匿性の確保の強度を示す情報。
この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
(4)改竄防止と秘匿性の確保の優先度を示す情報。
この場合、セキュア・メモリが十分にない場合、優先度の高い部分を優先的にセキュア・メモリに割り当て、それ以外を外部メモリに配置することで、少なくとも優先度の高い部分をセキュア・メモリに割り当てるなどの使い方が考えられる。
(5)セキュア・エレメント外からの参照を許可するかどうかを示す情報。
この場合、セキュア・メモリに配置された情報をそれ以外の外部メモリから参照する場合に、一定のチェックを行なうために使用することができる。
【0035】
また、データを構成する各エレメントに対して、例えば以下に示すように方法によって属性を付与することができる。
【0036】
(1)プログラム・データのソースコードにおいてプログラム設計者が指定する。
(2)データベース又はその他の管理手段を利用して自動的に指定する。
例えば、あらかじめセキュアにしなければならない関数名などが分っている場合などに利用することができる。
(3)プログラム・データの解析結果に基づいて自動的に指定する。
この場合、セキュリティ属性が付加されていない関数であっても、セキュリティ属性の付いた関数を直接呼び出す関数はやはりセキュア・メモリに配置したい場合などに使用することができる。
【0037】
また、セキュリティ・ブロックをプロセッサへ安全に転送する方法として、以下に示すものが挙げられる。
【0038】
(1)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと安全な通信路で接続された復号装置で復号する方法。
(2)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサと同一のチップ内に組み込まれる復号装置で復号する方法。
(3)送信側でセキュリティ・ブロックを暗号化し、データ利用装置のプロセッサ内部で復号する方法。
(4)SSLなどの暗号化の施された通信路を使用してデータ利用装置のプロセッサで受け取る方法。
(5)セキュリティ・ブロックが実行コードである場合、送信側でセキュリティ・ブロックを難読化して転送する方法。
【0039】
また、セキュリティ・メモリの構成として、プロセッサと同一チップ内に組み込まれる内部メモリを用いる以外に、以下の実現形態を挙げることができる。
【0040】
(1)暗号化の施された通信路でプロセッサと接続されたプロセッサ外部のメモリ。
(2)解析の困難なプロトコルを利用した通信路でプロセッサと接続されたプロセッサ外部のメモリ。
【0041】
また、セキュア・メモリは改竄防止と秘匿性の確保のために、ノーマル・メモリなどセキュア・メモリ外からの参照が原則として禁止されているが、特定の条件下でのみ参照を許可するようにしてもよい。特定の条件下でのみ参照を許可する手段として、以下の例を挙げることができる。
【0042】
(1)前記セキュア・メモリ外からの参照を許可する条件を示す情報に基づいて、前記ノーマル・メモリ上で動作するコードから前記セキュア・メモリへの参照を行なう場合に、参照の識別子(数字や名前など)を指定し、識別子が登録されていることを確認して参照を許可する。
(2)前記セキュア・メモリ外のブロックが改変されていないことを示す情報(例えば電子署名)を付加して参照を行ない、該ブロックが不正に改変されていないことを確認して参照を許可する。
【0043】
また、本発明の第2の側面は、改竄や解析などの不正利用から保護されたセキュア・メモリを含んだメモリ空間上にデータを配置して利用する処理をコンピュータ・システム上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
データは複数のエレメントの集合で構成され、且つ、各エレメントは不正利用からの保護形式に関する情報を記述した属性情報を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成ステップと、
セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするコンピュータ・プログラムである。
【0044】
本発明の第2の側面に係るコンピュータ・プログラムは、コンピュータ・システム上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第2の側面に係るコンピュータ・プログラムをコンピュータ・システムにインストールすることによって、コンピュータ・システム上では協働的作用が発揮され、本発明の第1の側面に係るデータ利用装置と同様の作用効果を得ることができる。
【0045】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【0046】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施形態について詳解する。
【0047】
セキュリティ属性の設定
本実施例では、改竄及び解析を防止するデータとして、プログラムを扱う。そこで、まず、本発明が適用されるプログラムにおける、セキュリティ属性の設定方法について説明する。
【0048】
本実施形態では、プログラムとして C 言語で記述されたプログラムを取り上げる。図1には、C言語の関数とグローバル及びスタティック変数をプログラムを構成するエレメントとして使用する例を示している。同図に示すように、C言語とそのコンパイラは、キーワードsecureとexportedを受け付けるように拡張されている。
【0049】
本実施形態では、このsecureとexportedを使い、各エレメントにセキュリティ属性を設定する。図1に示す例では、関数fooにsecure exportedのセキュリティ属性が、関数bar にsecureのセキュリティ属性が、それぞれ付けられている。secureの属性が付けられた関数や変数は、改竄防止や秘匿性の確保が要求されているセキュリティ・ブロックを構成する。後述するように、セキュリティ・ブロックは、プロセッサによるプログラム実行時においても改竄防止や秘匿性の確保が施されているセキュア・メモリ(本実施形態ではプロセッサと同一チップ内にある内部メモリ)に配置(ロード)される。
【0050】
secure exportedは、secureと同様にセキュア・メモリに配置されるが、セキュリティ属性が付けられていない関数から呼び出すことができるという点で相違する。図1に示す例では、関数fooはセキュリティ属性のない通常の関数から呼び出すことができる。これに対し、barはセキュリティ属性のない通常の関数から直接呼び出すことができず、fooのようなsecure exportedが指定された関数を経由して間接的にしか呼び出すことができない。なお、変数にはsecure exportedを指定することはできない。
【0051】
また、secure又はsecure exportedの関数内で実行時に動的に確保するヒープメモリは、セキュア・メモリ内に割り当てられる。
【0052】
なお、本明細書中では詳解しないが、他のセキュリティ属性としてエレメントの使用頻度やセキュリティに関する優先度を与えることもできる。これらは、セキュア・メモリに割り当てる際に、割り当ての優先度やセキュア・メモリが不足した際に、プロセッサ外部のメモリや記憶装置にページアウトを行なうページを決定する際に利用することができる。
【0053】
あるいは、他のセキュリティ属性として改竄防止と秘匿性の確保の強度を示す情報を与えることができる。この場合、暗号化の処理がアプリケーションの性能に影響が大きい場合、強度の情報を用いて暗号の方式や暗号の鍵長を変更することで、必要な部分にのみ暗号強度の高い暗号化を行なうなどの使い方が考えられる。
【0054】
リロケータブル形式のプログラムの構造
図1に示した方法でセキュリティ情報が設定されたソース・プログラムを、本実施形態に係るコンパイラでコンパイルを行なうと、リロケータブル形式のファイルが作成される。図2には、リロケータブル形式のプログラムの構造を例示している。本実施形態では、ELF(Executable and Linking Format)形式のファイルに本発明を適用した例を示している。
【0055】
プログラムの先頭には、ELFヘッダが置かれる。ELFヘッダには、このファイルがELFの実行形式であることを示す識別子や形式のバージョン番号、この実行形式を実行できるプロセッサ情報などが記述されている。また、後述するプログラム・ヘッダ(Program Header)やセクション・ヘッダ(Section Header)のファイル内の位置と個数が記述されている。このため、まずELFヘッダを参照することでプログラム・ヘッダやセクションを参照することができる。リロケータブル形式ではプログラム・ヘッダが存在しないので、これについては実行形式の構造で説明する。
【0056】
セクション・ヘッダは、プログラムの中身であるセクション(Section)に関連する情報を持つテーブルである。セクション・ヘッダには、セクション毎にエントリが設けられている。セクション・ヘッダの各エントリは、対応するセクションのファイル内での位置、大きさ、属性情報を保持している。セクションは、ファイル中でプログラムそのものを保持する領域であり、例えば.text、.data、.bssなどがあり、各領域にはそれぞれプログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データが保持される。実際には、これら以外のセクションも存在するが、説明の簡素化のためここでは省略してある。.bss は、セクション・ヘッダにはエントリが存在するが、ファイル内に対応するセクションは存在しない。これは、.bss sectionはすべて0であることが分かっているので、不必要にファイル・サイズを大きくすることを防ぐために存在しない。プログラム・ファイルを実行する際、OSなどによって、0で初期化されたメモリが割り当てられる。
【0057】
本実施形態では、これら通常のセクションに加え、.secure.text、.secure.data、.secure.bssのセクションが存在する。これらは、プログラムの命令、プログラムの初期化済みデータ、プログラムの未初期化データのうち、改竄又は解析の防止を行ないたいブロックをそれぞれ保持する。
【0058】
具体的には、図1に示したソースコードにおいて、secure又はsecure exportedのセキュリティ属性が付けられた関数又は変数が、コンパイラによりこれらのセクションに配置される。また、secure exportedのセキュリティ属性が付けられた関数に対しては、スタブがコンパイラにより生成される。
【0059】
secureのセキュリティ属性が付けられた関数は、通常の関数から呼び出されない(secure又はsecure exported のセキュリティ属性が付けられた関数のみから呼び出される)。これに対し、secure exported のセキュリティ属性が付けられた関数は、secure又はsecure exported のセキュリティ属性が付けられた関数以外に、通常の関数から呼び出される。スタブは、secure exported のセキュリティ属性が付けられた関数が通常の関数から呼び出された際の、引数の受け渡し処理を安全に行なうためのコードである。スタブは、コンパイラにより自動生成され、.secure.textセクションに挿入される。スタブの動作については、ノーマル状態とセキュア状態の遷移の項で説明する。
【0060】
なお、.bss と同様に、.secure.bssもセクション・テーブルには存在するが実際のセクションは存在しない。.secure.bssセクションは、実行時にOSなどによってセキュア・メモリ内に0で初期化されて割り当てられる。
【0061】
セクション・ヘッダの属性は、A、X、W、Sの組み合わせで構成される。Aは、対応する セクションが割り当てられていることを示す。このため、.bss や.secure.bssにはAの属性が付かない。また、Xは、実行可能を意味し、.text、.secure.textに付けられている。また、Wは、write(書き込み)可能領域であることを示す。XもWも、メモリ保護属性を決定する際に使用される。Sは、本発明により拡張された属性であり、対応するセクションを、改竄防止や秘匿性の確保が施されているセキュア・メモリに割り当てることを要請する。本実施形態では、.secure.text、.secure.data、.secure.bssなどのセクションにこの属性Sが付いている。
【0062】
リロケータブル形式には、リロケーション・セクションがある。リロケーション・セクションは、プログラムを実行形式にするためにリンカによってリンクを行う際に使用される。1つのリロケーション・セクションは1つのセクションに対応し、そのセクション内でリンク処理の必要な位置とその種類が記述されているテーブルである。例えば.rel.textは.textに対応している。本実施形態では、リロケーション・セクションも拡張され、.rel.secure.text、.rel.secure.data、.rel.secure.bss、.rel.secure.bssが追加されており、それぞれ順に.secure.text、.secure.data、.secure.bssに対応している。
【0063】
実行形式のプログラム構造
図2で示した構造を持つ複数のリロケータブル形式のプログラムをリンカによりリンクすることで、実行形式のプログラムを作成することができる。実行形式のプログラムの構造を図3に示す。リンクが完了しているためリロケータブル・セクションが存在しない点と、プログラム・ヘッダが追加された点で図2に示したリロケータブル形式とは相違する。
【0064】
プログラム・ヘッダは、OSなどがプログラムをメモリ中にロードし実行可能にする際に参照する情報である。プログラム・ヘッダは、セクション・ヘッダと同様に、テーブルになっていて、各エントリには複数のセクションが対応する。各エントリは、ロードするメモリ・アドレス、ファイルの位置、ファイル上でのサイズ、メモリ上でのサイズ、属性などの情報を保持している。属性はプログラム・ヘッダの1エントリに対応する複数のセクションのセクション・ヘッダの属性によって決定される。
【0065】
図3に示す例では、プログラム・ヘッダの最初のエントリは、実際には.text セクション1つに対応している。2番目のエントリは.data と.bss に対応している。このため、2番目のエントリはファイル上のサイズとメモリ上のサイズが異なっている。その理由は、上に説明したように、.bssセクションはファイル内に存在しないためである。3番目のエントリは .secure.text1つに対応している。1番目のエントリと比較して、属性にS が付いているのは、このエントリに対応するすべてのエントリ(この場合 .secure.text ただ1つ)が、Sの属性をセクション・ヘッダで持っているためであり、OSなどがプログラムをメモリにロードする際には、実際にはプログラム・ヘッダのこの属性を参照して、セキュア・メモリに配置するようになっている。4番目のエントリは .secure.dataと.secure.bssである。
【0066】
リンカは、リンク時にリロケーション・セクションを用いたリンクを行なうとともに、複数のリロケータブル・ファイルの同じセクションは1つにまとめる処理を通常行なう。つまり、複数のリロケータブル形式のファイル中の.textセクションは、リンカの出力する実行形式のファイルにおいて1つの.textセクションにまとめられる。また、複数のリロケータブル・ファイル中で定義されたsecure block である、.secure.text、.secure.data、.secure.bssも、実行形式ファイル中で1つの.secure.text、.secure.data、.secure.bss にまとめられる。
【0067】
本実施形態では、リンカはリンク時にこれらの処理に加えて、セキュア・エントリポイントを作成して.secure.textに挿入する。セキュア・エントリポイントは、ノーマル状態からセキュア状態に遷移する入り口のコードである。セキュア・エントリポイントの動作についてはノーマル状態とセキュア状態の遷移の項で説明する。
【0068】
そして、プログラム・ヘッダを作成後、プログラム・ヘッダでSの属性が付けられた部分を共通鍵暗号方式で暗号化を行なう。ここで使う暗号化の鍵を「コンテンツ鍵」と呼ぶことにする。本実施例で使用する暗号化は一部を改竄して置き換えることができないような方式の暗号方式が使用されているものとする。
【0069】
暗号方式によっては、復号はできなくとも暗号化されたデータの一部分を別のデータに置き換えることができる。置き換えられたデータも問題なく復号できてしまうので、改竄が可能である。また、別の方法では、電子署名を添付することでも改竄を防止することができる。
【0070】
これにより、図2で示された構造をとる複数のリロケータブル・ファイルは、リンカのリンク処理により、図3で示すような構造の実行形式をとる。
【0071】
また、関連する複数のリロケータブル・ファイルは、アーカイブ・コマンドによりまとめられ、1つのライブラリを構成することができる。
【0072】
ライブラリ中に含まれる各リロケータブル・ファイルを図2に示すような構造にすることにより、ライブラリをリンクしてアプリケーションの開発を行なう場合においても、アプリケーション独自に改竄や解析から保護したい部分に加えて、アプリケーション開発者が利用するライブラリの保護したい部分もアプリケーション開発者には透過的に、1つのセキュア・ブロックとしてリンカによってリンク処理されることになる。
【0073】
通常、アプリケーション開発者は自身が利用するライブラリについてはそれの提供するインタフェース仕様のみしか知り得ないため、このような透過的な処理が行なえることは重要である。
【0074】
ハードウェアの構成
図4には、本発明が適用されるプログラム利用装置のハードウェア構成の一例を示している。
【0075】
このシステムは、プロセッサ10を中心に構成されている。プロセッサ10は、メモリに記憶されたプログラムに基づいて各種の処理を実行する。また、プロセッサは、外部バス・インターフェース14及びバス30を介して接続されている各種の周辺機器を制御している。バス30に接続された周辺機器は次のようなものである。
【0076】
外部メモリ20は、例えばDRAM(Dynamic RAM)などの半導体メモリで構成され、プロセッサ10において実行されるプログラム・コードをロードしたり、実行プログラムの作業データを一時格納したりするために使用される。
【0077】
外部メモリ20は、プロセッサ10と同じチップ内に組み込まれている内部メモリ(図示しない)とともに、プロセッサ10のメモリ空間を構成する。内部メモリは、プロセッサ・チップ内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ20は、バス・モニタやICEなどのツールを用いて解析や改竄が可能なバス30上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【0078】
ディスプレイ・コントローラ21は、プロセッサ10から送られてくる描画命令に従って表示画像を生成し、表示装置22に送る。ディスプレイ・コントローラに接続された表示装置22は、ディスプレイ・コントローラ21から送られた表示画像情報に従い、その画像を画面に表示出力する。
【0079】
入出力インタフェース23は、キーボード24やマウス25が接続されており、キーボード24やマウス25からの入力信号をプロセッサ10へ転送する。
【0080】
ネットワーク・インタフェース26は、LANやインターネットなどの外部ネットワークに接続されており、インターネットを介したデータ通信を制御する。すなわち、プロセッサ10から送られたデータをインターネット上の他の装置へ転送するとともに、インターネットを介して送られてきたデータを受け取りプロセッサ10に渡す。
【0081】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び/又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをネットワーク経由でダウンロードすることができる。
【0082】
ハード・ディスク装置(HDD:Hard Disk Drive)コントローラ27には、HDDなどの大容量外部記憶装置28が接続されており、HDD コントローラ27が接続されたHDD28へのデータの入出力を制御する。HDD28には、プロセッサが実行すべきオペレーティング・システム(OS)のプログラム、アプリケーション・プログラム、ドライバ・プログラム、さらにはプログラムによって参照又は再生処理が行なわれるデータやコンテンツなどが格納されている。
【0083】
本実施形態では、各プログラムは、HDD28上に実行可能形式でインストールされる他、暗号化やその他の実行不能形式のまま保存されている。また、プログラム中のセキュリティ・ブロックのみが暗号化されて保存されている。
【0084】
例えば、本発明が適用される、セキュリティ属性が付加されているエレメントを含んだコンピュータ・プログラムや、セキュリティ属性が付加されているエレメントを含んだアプリケーション・プログラムをコンパイル及び/又はリンクする処理プログラム、セキュリティ属性に基づいてコンピュータを再構成する処理プログラム、セキュリティ・ブロックを含んだ実行形式プログラムの実行環境を提供する処理プログラムなどをHDD28上に格納することができる。
【0085】
なお、パーソナル・コンピュータなどのプログラム利用装置を構成するためには、図4に示した以外にも多くの電気回路などが必要である。但し、これらは当業者には周知であり、また、本発明の要旨を構成するものではないので、本明細書中では省略している。また、図面の錯綜を回避するため、図中の各ハードウェア・ブロック間の接続も一部しか図示していない点を了承されたい。
【0086】
本実施形態では、アプリケーション・プログラムはプログラム開発者により、図1に示した方法によりエレメントにセキュリティ属性が設定され、コンパイルされる。さらに、コンパイルされた複数のリロケータブル形式のプログラムやライブラリはリンカによりリンクされ、図3で示した構造の実行形式のアプリケーション・プログラムになる。
【0087】
実行形式のアプリケーション・プログラムのプログラム・ヘッダの属性でSが付加された部分は、暗号強度の高い共通鍵方式で暗号化が行なわれている。この鍵をコンテンツ鍵と呼ぶ(前述)。アプリケーション・プログラムは例えばインターネット上のサーバに蓄積され、プログラム利用装置のユーザは、インターネットでwebなどを通じてプログラムを購入することができる。そして、購入したプログラムはインターネットを通じてプログラム利用システムにダウンロードされ、HDD28に記録される。
【0088】
このとき、アプリケーション・プログラムを暗号化したコンテンツ鍵は、購入後にプロセッサ10内でプロセッサ10の持つ共通鍵方式のプロセッサ10に固有の秘密鍵(以後プロセッサ固有鍵)で暗号化された後、 HDD28に記録される。これにより、アプリケーション・プログラムを不正に解読又は改竄されるのを防止する。
【0089】
また、本実施形態でプログラム実行環境を提供するOSは、暗号強度の高い共通鍵方式で暗号化が行なわれ、HDD28に記録されている。この鍵を本明細書中では「OS鍵」と呼ぶことにする。OS鍵は、プロセッサ固有鍵で暗号化されてHDD28に記録されている。また、OSをHDD28から読み出すブート・ローダはプロセッサ10と同一チップ内にあるROM(Read Only Memory:図示しない)に焼き込まれているものとする。このため、ブート・ローダを改変することはできない。
【0090】
ブート・ローダは、HDD28から暗号化されたOS鍵を読み込むと、プロセッサ10内部でプロセッサ固有鍵を用いて復号してOS鍵を取り出す。そして、得られたOS鍵を使って HDD28から暗号化されたOSを読み込んで、プロセッサ10内部で復号を行ないながら、OSの起動を行なうようになっている。これにより、OSが解読又は改竄されるのを防止することができる。
【0091】
アプリケーション・プログラムのプログラム・ヘッダの属性でSが付加されたセクションやOSの暗号化とその鍵の管理方式にはさまざまな方法がある。本実施形態では、これらの暗号化にコンテンツ鍵やOS鍵を使い、さらにそれらの鍵をプロセッサ固有鍵で暗号化する方法を採用する。
【0092】
プロセッサの構造
図5には、図4に示したプロセッサ10の内部構造をより詳細に示している。
【0093】
プロセッサ10内部には、命令の解釈と実行を行なうプロセッサ・コア11を中心に構成されている。プロセッサ・コア11は、命令のフェッチやデータの参照のためにメモリの内容が必要になると、該当するデータの仮想アドレスをMMU(Memory management Unit:メモリ管理ユニット)12に出力する。
【0094】
MMU12は、仮想アドレスから物理アドレスへの変換を行なう。MMU12は、アドレス変換早見表としてのページ・テーブルを保持するために、カーネル・ページ・レジスタ12Aとユーザ・ページ・レジスタ12Bという2種類のレジスタをその内部に備えている。
【0095】
仮想アドレスの変換は、カーネル・ページ・レジスタ12A又はユーザ・ページ・レジスタ12Bが保持するページ・テーブルを用いて行なう。本実施形態のプロセッサ10は、動作モードとして、カーネル・モードとユーザ・モードを持っている。そして、ユーザ・モードはさらにセキュア状態とノーマル状態に分けられる。このモードと状態の組み合わせにより、MMU12は、アクセスできるアドレス領域を決定し、ページ・テーブルを用いて仮想アドレスを物理アドレスに変換する。アクセスできるアドレス領域については、プロセッサ10のメモリ・マップの項で説明する。MMU12によって変換された物理アドレスはキャッシュ13に渡される。
【0096】
キャッシュ13は、SRAM(Static RAM)などの高速動作メモリで構成され、頻繁にアクセスされるプログラム・コードやデータの一時的な保管場所として利用される。本実施形態では、キャッシュ13は、MMU12から入力された物理アドレスに対応するデータをその内部に保持している場合は(キャッシュ・ヒット)、それをプロセッサ・コア11に返すようになっている。また、キャッシュに対応するデータが見つからなかった場合には(キャッシュ・ミス)、物理アドレスはその先の内部メモリ15又は外部バス・インターフェース14に出力される。物理アドレスが内部メモリ15に対応する場合は、そこからデータが取り出され、キャッシュ13に保存されるとともに、プロセッサ・コア11に渡される。また、物理アドレスが外部メモリに対応する場合は、外部バス・インターフェース14を介して外部メモリ20からデータが取り出され、キャッシュ13に保存されるとともに、プロセッサ・コア11に渡される。
【0097】
プロセッサ・コア11は、特別な命令 LoadPageやStorePage を実行した際に、MMU12の管理する情報に基づいて、暗号処理ユニット16に対して暗号化又は復号の指示を出す。このとき、暗号処理ユニット16は指定された鍵に基づいて外部バス・インターフェース14経由で入ってきたデータ(ページインされたデータ)を復号して内部メモリ15に保存したり、内部メモリ15のデータ(ページアウトするデータ)を暗号化して外部バス・インターフェース14を介して外部メモリ20に書き出したりすることができる。
【0098】
LoadPageは外部メモリ20上のデータを内部メモリ15にロードするための命令であり、StorePageは内部メモリ15上のデータを外部メモリに書き出すための命令であるが、これらの命令実行時の動作の詳細については後述に譲る。
【0099】
暗号処理ユニット16は、その内部に乱数発生器16Bを持ち、上述したデータの暗号化及び復号を行なうための共通鍵の生成に使用する。また、暗号処理ユニット16は、共通鍵暗号方式のプロセッサに固有の秘密鍵であるプロセッサ固有鍵16Cを保持する。プロセッサ固有鍵16Cは、各プロセッサ毎に異なる鍵となっている。また、暗号処理ユニット16は、暗号テーブルを保持するための暗号テーブル・レジスタ16Aをその内部に持っている。
【0100】
キャッシュ13は、物理アドレスをタグとして内部に保存されているキャッシュ・ラインに対応するものがあるかどうかを検索し、あればキャッシュ・ライン上のデータを返すようになっている。また、StorePage命令を実行したときには、内部メモリ15の指定された物理アドレスのタグに対応するキャッシュ・ライン上のデータがあればそれを無効化する。
【0101】
プロセッサ10と同じチップ内に組み込まれている内部メモリ15は、外部バス・インターフェース14を介して接続されている外部メモリ20とともに、プロセッサ10のメモリ空間を構成する。内部メモリ15は、プロセッサ10内に実装されていることから、ロードされたデータの改竄防止や秘匿性の確保を行なうことができるので、セキュリティ属性が付加されているセクションが優先的に配置される「セキュア・メモリ」として用いられる。これに対し、外部メモリ20は、バス・モニタやICEなどのツールを用いて解析や改竄が可能なバス30上に配設されているので、セキュリティ属性が付加されていないセクションを配置する「ノーマル・メモリ」として用いられる。
【0102】
最近のDRAM混載プロセッサの実装技術の発達により、比較的大容量の内部メモリ15をプロセッサ10内部に搭載することが可能となってきている。
【0103】
プロセッサのメモリ・マップ
図6には、図4及び図5で示したプロセッサ10の定義するメモリ・マップを模式的に示している。
【0104】
プロセッサ10は、動作モードとしてカーネル・モードとユーザ・モードを持つ。そして、ユーザ・モードはさらにセキュア状態とノーマル状態がある。このモードと状態の組み合わせにより、MMU12はアクセスできるアドレス領域を決定する。
【0105】
カーネル・モードはOSの実行時に使用され、ユーザ・モードはアプリケーション・プログラムの実行時に使用される。そして、ユーザ・モードでノーマル状態のときに、アプリケーション・プログラムがscall命令を実行することでセキュア状態に遷移し、セキュア状態の時にsret命令を実行することでノーマル状態に遷移するようになっている。それぞれのモードと状態の組み合わせによってアクセスできるメモリ領域が異なり、アクセスできない領域をアクセスした場合には、MMU12からプロセッサ・コア11に例外が発生するようになっている。
【0106】
図6に示す例では、プロセッサ10のメモリ・マップは5つの領域に分けられている。
【0107】
1つのメモリ領域は、物理アドレス内部メモリ領域すなわち内部メモリ15にマッピングされた領域であり、このメモリ空間を参照した場合には、MMU12は仮想アドレスから物理アドレスへの変換は行なわず、指定した仮想アドレスをそのまま物理アドレスとして出力する。この物理アドレスは、プロセッサ10の内部メモリ15を参照することのみに使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。MMU12の持つカーネル・ページ・レジスタ12Aの保持するアドレスは、この物理アドレス内部メモリ領域を指すように設定される。
【0108】
物理メモリ外部メモリ領域は、同様に、外部メモリ20にマッピングされた領域であり、このメモリ空間を参照した場合には、MMU12による仮想アドレスから物理アドレスへの変換は行なわれず、指定した仮想アドレスがそのまま物理アドレスとして利用される。この物理アドレスはプロセッサ10の外部メモリ20を参照することのみに使用される。このメモリ領域は、OSによって、MMU12による変換なしに直接外部メモリ20を参照したい場合に使用される。このメモリ領域は、カーネル・モードで実行している場合のみ参照が可能である。
【0109】
仮想アドレス・カーネル領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モードで実行している場合のみ参照が可能な領域である。
【0110】
仮想アドレス・カーネル領域がアクセスされると、MMU12は、カーネル・ページ・レジスタ12Aに保持されるカーネル・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。MMU12が持つユーザ・ページ・レジスタ12Bに保持されるユーザ・ページ・テーブルはこの仮想アドレス・カーネル領域に置かれる。また、このメモリ領域は、内部メモリ15の物理アドレスに変換されるように、OSによってカーネル・ページ・テーブルが作成される。これにより、OSの使用するメモリ領域の秘匿性が確保されている。
【0111】
仮想アドレス・セキュア・ユーザ領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域である。このメモリ領域は、カーネル・モード、あるいはユーザ・モードでセキュア状態のいずれかの場合のみに参照が可能な領域である。ユーザ・モード下でノーマル状態においてアクセスが試みられた場合には、アドレス変換は行なわれず、例外がプロセッサ・コア11に通知される。
【0112】
仮想アドレス・セキュア・ユーザ領域がアクセスされると、MMU12は、ユーザ・ページ・レジスタ12Bが保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスが内部メモリ15の物理アドレスになるように、OSによってユーザ・ページ・テーブルが作成される。
【0113】
仮想アドレス・セキュア・ユーザ領域には、アプリケーション・プログラムのセキュア・ブロック、すなわち、図3に示した例で言えば、プログラム・ヘッダのAttributeでS属性が付けられた部分が暗号を復号した後に配置される。また、セキュア・ブロック内の関数でアロケートされるヒープ領域やスタックも、このメモリ領域に配置される。
【0114】
なお、セキュア状態ではプロセッサ・コア11のセキュア・スタック・レジスタ11Aが利用可能となる。セキュア・スタック・レジスタ11AはOSによって仮想アドレス・セキュア・ユーザ領域に確保されるようになっている。
【0115】
仮想アドレス・ユーザ領域は、MMU12によって仮想アドレスから物理アドレスへの変換が行なわれる領域で、また、カーネル・モード、あるいはユーザ・モードのセキュア状態又はノーマル状態のどちらで実行している場合でも、参照が可能な領域である。
【0116】
仮想アドレス・ユーザ領域がアクセスされると、MMU12は、ユーザ・ページ・レジスタ12Bの保持するユーザ・ページ・テーブルを使用して、仮想アドレスを物理アドレスに変換する。変換された物理アドレスは、外部メモリ20の物理アドレスになるように、OSによってユーザ・ページ・テーブルが作成される。このメモリ領域には、アプリケーション・プログラムのセキュア・ブロック以外の部分、すなわち、図3に示した例で言えば、プログラム・ヘッダのAttributeでS属性が付けられていない部分が配置される。また、セキュア・ブロック外の関数でアロケートされるヒープ領域やスタックもこの領域に配置される。
【0117】
本実施形態では、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域は、アプリケーションを実行するプロセス毎に異なる空間が使用される。すなわち、同じ仮想アドレスでも、異なるプロセスでは別の物理アドレスが使用されるし、仮想記憶システムにより異なるプロセスの仮想アドレスは参照できない。このため、異なるプロセスからの参照はできないようになっている。
【0118】
上述したように、アプリケーションの利用可能な領域を仮想アドレス・セキュア・ユーザ領域と仮想アドレス・ユーザ領域の2つに分けることで、アプリケーション・プログラムのうち、解析又は改竄を防止したい部分のみを安全な内部メモリ15に(優先的に)配置することができる。
【0119】
また、仮想アドレス・セキュア・ユーザ領域は、仮想アドレス・ユーザ領域で実行中のノーマル状態での命令からは直接アクセスすることができないようになっているので、バス・モニタなどのツールを使用して外部メモリ20上に配置されたアプリケーション・プログラムの一部を不正に書き換えたとしても、セキュア・ブロックの内容を解析したり改竄したりすることを防止することができる。
【0120】
また、実行時に確保されるヒープ領域とスタックについても、セキュア・ブロック内の関数で確保された部分は仮想アドレス・セキュア・ユーザ領域に配置されるため、同様に不正な解析及び改竄を防止することができる。
【0121】
また、セキュア状態からノーマル状態に戻ったときに、キャッシュ13中にまだセキュア状態で参照した内部メモリ15の内容が残っていたとしても、それを参照するための仮想アドレス・セキュア・ユーザ領域への参照はMMU12により拒否されるので、 セキュア状態からノーマル状態に遷移する際にキャッシュ13のフラッシュと無効化を行なう必要がなく、高速に遷移できる。
【0122】
また、ページ・テーブルを作成するために使用する命令、キャッシュ13のコントロールを行なう命令、LoadPage、StorePageといった特権命令は、カーネル・モードでのみ実行できるようになっているので、これらの命令を不正に利用して、内部メモリの内容を解析や改竄することもできないようになっている。
【0123】
メモリ管理の構成
OSとMMU12によって構成されるメモリ管理の構成について、図7を参照しながら説明する。本実施形態では、当業界で周知のページ方式の仮想記憶を用いてメモリ管理を実現している。以下にその構成と本実施形態での拡張部分について説明する。
【0124】
仮想アドレスから物理アドレスへの変換は、ページ・テーブルを参照して行なわれる。本実施形態では、カーネル・ページ・テーブルとユーザ・ページ・テーブルという2種類のページ・テーブルが存在する(前述)。
【0125】
カーネル・ページ・テーブルは、プロセッサ10のメモリ・マップの物理アドレス内部メモリ領域に配置されており、その先頭アドレスがMMU12のカーネル・ページ・レジスタ12Aにより保持されている。このページ・テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・カーネル領域のアドレスを物理アドレスに変換するために使用される。カーネル・ページ・テーブルは物理アドレス内部メモリ領域に存在するので、ページアウトが発生することはなく常にアクセス可能である。
【0126】
一方、ユーザ・ページ、テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・カーネル領域に配置されており、その先頭アドレスがMMU12のユーザ・ページ・レジスタ12Bにより保持されている。このページ・テーブルは、プロセッサ10のメモリ・マップの仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のアドレスを物理アドレスに変換するために使用される。
【0127】
ユーザ・ページ・テーブルは、アプリケーションの実行毎に複数存在する。そして、個々のユーザ・ページ・テーブルは、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域に置かれる対応するアプリケーション・プログラムのアドレス変換を定義する。ユーザ・ページ・テーブルは複数存在するので、メモリ領域を有効に活用するために、物理メモリ領域ではなく仮想アドレス・カーネル領域にユーザ・ページ・テーブルは置かれ、カーネル・ページ・テーブルを使って管理されるという構造になっている。したがって、カーネル・ページ・テーブルを適切に変更することで、複数の多くのユーザ・ページ・テーブルを持つことができる。
【0128】
カーネル・ページ・テーブルとユーザ・ページ・テーブルのエントリは、図7に示すように同じ構成をとる。
【0129】
同エントリ中のDは、ダーティ・ビット(dirty bit)であり、当該ビットが1の場合対応するページが書き込まれたことを示す。
【0130】
R/Wは、このページのアクセス設定であり、1の場合読み込みと書き込みが可能、0の場合読み込みのみが可能であることを示す。指定された以外の参照が発生すると、プロセッサに例外が通知されるが、この処理については一般のページ方式の仮想記憶システムと同様の処理であり、本発明の要旨には直接関連しないので、ここでは説明を省略する。
【0131】
Lは、ページ・ロックであり、このページをページアウトの対象から外すことができる。
【0132】
Vは、有効ビット(valid bit)であり、このページ・エントリが有効であることを示す。当該ビットが1の場合このページは有効で、通常のアドレス変換が行なわれるが、0の場合は無効で、page fault exception (ページ失敗例外)が発生する。本実施形態では、page fault exception が発生すると、OSの持つページャが動作するように構成されている。
【0133】
DevIDはVが0のときに意味を持ち、ページアウト先のデバイスを特定するのにページャによって使用される。
【0134】
Sは、セキュア・ビット(secure bit)であり、当該ビットが1の場合、対応するページが内部メモリ15でのみ有効であること(すなわち、セキュリティ属性が付加されていること)を示す。また、当該ビットが0の場合は外部メモリ20で有効となる。このビットはまた、参照するメモリ領域のチェックにも使用される。現在のモードと状態がユーザ・モードでノーマル状態の場合に、Sが1のページを参照しようとすると、MMU12は、アドレス変換を行なわずに、プロセッサ・コア11に例外を通知するようになっている。これにより、アプリケーション・プログラムがセキュア状態とノーマル状態のどちらであっても、同じページ・テーブルを使用することができ、また、状態遷移時にページ・テーブルを切り替えたり、キャッシュ13上の内部メモリ15をフラッシュしたりする必要がなくなり、高速な状態遷移を実現することができる。
【0135】
KeyIndexは、暗号テーブルへのインデックスであり、このページのセキュア・ビットSが1(すなわちセキュリティ属性が付加されている)で且つVが0のときのみ意味を持ち、対応するページの暗号化に使われた情報を指している。
【0136】
PFNは、Vが1のときは、このページに対応する物理アドレスの上位部分である。仮想アドレスの下位部分とこのPFNを上位アドレスとして組み合わせることで、ページの物理アドレスが決定される。また、Vが0のときは、PFNは、DevIDで指定されるデバイス内で対応するページが保存されている位置を示す情報が格納される。本実施形態では、DevIDが外部メモリ15を指す場合にはその物理アドレスの上位部分が保持され、DevIDがHDD28を指す場合にはHDD28内のページを保存しているセクタ番号が保持される。
【0137】
なお、カーネル・ページ・テーブルはすべてSが1(すなわちセキュリティ属性が付加されている)として設定される。したがって、ユーザ・ぺージ・テーブルはすべて内部メモリ15に置かれ、内部メモリ15が不足した場合には暗号化されて外部メモリ20又はHDD28にページアウトされるようになっている。これにより、頻繁に使用されるユーザ・ページ・テーブルのアクセスの高速化と改竄や解読の防止を実現している。
【0138】
また、メモリ管理のために、暗号テーブルが設けられている。このテーブルのエントリは図7に示すように共通鍵と参照カウントの組み合わせからなる構造であり、暗号処理ユニット16の暗号テーブル・レジスタ16Aによりその先頭アドレスが保持される。このテーブルは、共通鍵方式の共有鍵を保持するようになっている。暗号テーブルのエントリは、ページ・テーブルのKeyIndexにより参照される。
【0139】
本実施形態では暗号テーブルは固定のエントリ数としたため、参照カウントも持っている。参照カウントが0のエントリは空きエントリであるため、新たに暗号化の必要が生じた際にはその空きエントリに新たに共有鍵が設定され、参照カウントは1に設定される。これは、復号化により鍵を利用した場合には、1だけ引き算される。新たに暗号化の必要が生じた際に、暗号テーブルに空きエントリがない場合には、ランダムに1つのエントリを選びその暗号鍵を利用するとともに、参照カウントを1だけ増やす。暗号テーブルもカーネル・ページ・テーブルと同じく物理アドレス内部メモリ領域に配置される。
【0140】
ノーマル状態とセキュア状態の遷移
既に述べたように、ユーザ・モードにはセキュア状態とノーマル状態の2つの状態がある。ノーマル状態にあるときのアプリケーション・プログラムは、仮想アドレス・ユーザ領域への参照のみが許可され、仮想アドレス・セキュア・ユーザ領域へのアクセスはできない。アプリケーションが仮想アドレス・セキュア・ユーザ領域に配置された関数や変数を参照する場合には、セキュア状態に移行する必要がある。これには特別な命令scallを使用する。
【0141】
図8には、仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順をフローチャートの形式で示している。
【0142】
まず、呼び出す関数セレクト番号と引数をスタック上にプッシュする(ステップS1)。ここで、関数セレクト番号とは、ソースコードでsecure exportedのセキュリティ属性が付けられたすべての関数に対してリンカにより自動的に割り振られる番号である。引数は、通常の関数呼び出し同様、関数へ入力される値である。
【0143】
次いで、scall命令を実行する(ステップS2)。これにより、まず、関数呼び出しからの戻り先のアドレスがスタックにプッシュされる。ここまでの実行で使用されたスタックはノーマル状態で使用可能なノーマル・スタック・レジスタ11Bに保持されるスタックである。
【0144】
次に、状態がノーマル状態からセキュア状態に変更される。既に説明したように、セキュア状態では、仮想アドレス・セキュア・ユーザ領域への参照が許可される。また、セキュア・スタック・レジスタ11Aの使用も許可される。セキュア・スタック・レジスタ11Aには、アプリケーションの起動時にOSによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・スタックのアドレスが保持されている。
【0145】
さらに、セキュア・エントリ・レジスタ11Cの使用も許可される。セキュア・エントリ・レジスタ11Cは、やはりアプリケーションの起動時にOSによって仮想アドレス・セキュア・ユーザ領域に確保されたセキュア・エントリポイントのアドレスが保持されている。セキュア状態でのセキュア・エントリ・レジスタ11Cの使用とは、scallによりセキュア・エントリ・レジスタ11Cにより指示されたアドレス(すなわちセキュア・エントリポイント)に実行が遷移することであって、セキュア・エントリ・レジスタ11Cの値を読んだり書いたりすることはできない。これら読み書きはカーネル・モードでのみ許可される。
【0146】
scallによりセキュア状態に変更された後、セキュア・エントリ・レジスタ11Cの示すアドレスから実行が継続される(ステップS3)。上述したように、セキュア・エントリ・レジスタ11Cは、仮想アドレス・セキュア・ユーザ領域のセキュア・エントリポイントのアドレスが保持されているので、リンカによって生成されたセキュア・エントリポイントの実行が行われる。
【0147】
セキュア・エントリポイントでは、ノーマル・スタックから関数セレクト番号を取り出し、その番号の値をチェックする。関数セレクト番号がこのアプリケーションで定義された番号以外であった場合、例外が発生する。関数セレクト番号が正しい値であった場合には、関数セレクト番号で指定されたsecure exportedセキュリティ属性の付けられた関数に対応するスタブのアドレスに実行を遷移する。
【0148】
スタブは、コンパイラにより自動生成されたコードで、secure exportedセキュリティ属性の付けられた関数に対して1つずつ存在する。スタブでは、ノーマル・スタックから引数をセキュア・スタック上にコピーをする(ステップS4)。そして、secure exportedセキュリティ属性の付けられた関数を呼び出す。
【0149】
secure exportedセキュリティ属性の付けられた関数は、セキュア・スタック上から引数を取り出し、関数の処理を実行する(ステップS5)。secure exportedセキュリティ属性の付けられた関数は、secureセキュリティ属性の付けられた関数からも関数呼び出しをされることがある。どちらの場合も引数の受け渡しは、セキュア・スタック上で行われる。スタブはノーマル状態からの呼び出しをセキュア状態からの呼び出しと等価にするための処理を行なっているとも言える。
【0150】
secure exportedセキュリティ属性の付けられた関数の実行が終わると、スタブに実行が戻ってくる(ステップS6)。スタブは、関数の戻り値をセキュア・スタックからノーマル・スタックにコピーする。
【0151】
そして、sret命令を実行する(ステップS7)。sret命令は、戻り先のアドレスをノーマル・スタックから取り出す。そして、スタックやプログラム・カウンタといった特殊なレジスタを除きすべてのレジスタの値を0にクリアした後で、ノーマル状態に遷移をして、戻り先アドレスから実行を再開する。レジスタの値をクリアするのは、レジスタの値をセキュアではない関数の実行により参照することで、セキュアな関数の情報がレジスタを通して漏れることを防ぐためである。
【0152】
図9には、内部メモリ15上に展開されているアプリケーションのセキュア部分(.secure.text)の構成を模式的に示している。
【0153】
セキュア部分の先頭アドレスすなわちセキュア・エントリポイントは、セキュア・エントリ・レジスタ11Cに保持されており、scallによりセキュア・エントリポイントに実行が遷移する。
【0154】
アプリケーションのセキュア部分に含まれる関数には、secure exported又はsecureいずれかのセキュリティ属性が付加されている。リンカによるリンク時に、ソースコードでsecure exportedのセキュリティ属性が付けられたすべての関数に対して、関数セレクト番号が割り振られる。
【0155】
また、コンパイラによりsecure exportedセキュリティ属性の付けられた各関数に対して1つずつスタブが自動生成される。スタブは、ノーマル状態からセキュア状態に遷移するときに、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理を行ない、逆にセキュア状態からノーマル状態に戻るときにセキュア・スタック上の返り値をノーマル・スタックにコピーする処理を行なう。
【0156】
scallによりセキュア・エントリポイントに実行が遷移すると、まず関数セレクト番号に対応するスタブが起動して、ノーマル・スタックから引数をセキュア・スタック上にコピーをする処理が行なわれる。その後、関数セレクト番号に該当するsecure exportedセキュリティ属性の付けられた関数が起動し、その実行が開始される。そして、同関数の実行が終わると、スタブに実行が戻り、セキュア・スタック上の返り値をノーマル・スタックにコピーする処理が行なわれる。その後、sret命令の実行によりノーマル状態に遷移をして、戻り先アドレスから実行を再開する。
【0157】
アプリケーション・プログラムのロード実行
アプリケーション・プログラムを実行する際、OSは、HDD28に保存されているアプリケーション・プログラムを読み出し、そのプログラム・ヘッダを参照してメモリに配置していく。
【0158】
プログラム・ヘッダのエントリの属性にSが付いていないセクションは、外部メモリ20を物理アドレスとして配置し、セキュアでないことを示すようにセキュア・ビットSを0とし、仮想アドレスは仮想アドレス・ユーザ領域を使用するようにユーザ・ページ・テーブルのエントリを作成する。
【0159】
また、プログラム・ヘッダのエントリの属性にS属性が付いているセクションは、暗号化されているので復号する。まず、HDD28から暗号化されたコンテンツ鍵をプロセッサ10内に読み込み、プロセッサ10内部でプロセッサ固有鍵16Cを使用して復号を行ない、コンテンツ鍵を得る。このコンテンツ鍵を使用して、プログラム・ヘッダのエントリの属性にS属性が付いているセクションをプロセッサ10内部に読み込んだ後、プロセッサ10内で復号し内部メモリ15を物理アドレスとして配置していく。復号後のセクション・データはプロセッサ外部には一切出ない。そして、セキュア・ビットSを1とし、仮想アドレスは仮想アドレス・セキュア・ユーザ領域を使用するように、対応するユーザ・ページ・テーブルのエントリを作成する。
【0160】
以上の処理により、セキュリティ属性Sが付けられたセキュア・ブロックは内部メモリ15に(優先的に)配置され、それ以外のブロックは外部メモリ20に配置される。そして、作成されたユーザ・ページ・テーブルの先頭アドレスは、このアプリケーションの実行時にはMMU12内のユーザ・ページ・レジスタ12Bに、OSによって設定される。
【0161】
また、セキュア・スタックとノーマル・スタックをそれぞれ仮想アドレス・セキュア・ユーザ領域及び仮想アドレス・ユーザ領域に確保して、セキュア・スタック・レジスタ11A及びノーマル・スタック・レジスタ11Bに設定する。また、セキュア・エントリポイントのアドレスをセキュア・エントリ・レジスタ11Cに設定する。
【0162】
ページインの動作
上述したように、アプリケーション・プログラムの実行は、仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域上で行なわれる。本実施形態に係るプログラム利用装置では、アプリケーション・プログラムの実行がある仮想アドレス・ユーザ領域又は仮想アドレス・セキュア・ユーザ領域を参照すると、プロセッサ・コア11からMMU12に出力される仮想アドレスの上位部分を、MMU12内のユーザ・ページ・レジスタ12Bが保持しているユーザ・ページ・テーブルのインデックスとして使用することで、ユーザ・ページ・テーブルのエントリが1つ選択されるようになっている。この参照された仮想アドレスに対応するユーザ・ページ・テーブルのエントリの有効ビットVが0である場合、このページが無効であることを示していて、ページ失敗例外(page fault exception )がMMU12からプロセッサ・コア11に通知され、プロセッサ・コア11はページャのページインの処理を実行する。
【0163】
図10には、ページャのページインの動作をフローチャートの形式で示している。
【0164】
本実施形態では、ページが無効になっている状態(すなわち有効ビットV=0)は、ページ・テーブル・エントリのSの値に応じて2種類存在する。すなわち、セキュア・ビットSが1のページであれば、内部メモリ15にはなく、暗号化されて外部メモリ20又はHDD28にページアウトしている場合と、Sが0のページであれば、外部メモリ20上になくHDD28にページアウトしている場合の2通りである。
【0165】
このため、図10に示すページイン処理手順では、V=0のページへの参照を検出すると(ステップS11)、まず、セキュア・ビットSの値をチェックする(ステップS12)。
【0166】
そして、セキュア・ビットSが1の場合は、セキュア・ページのページイン処理を実行し(ステップS13)、Sが0の場合は、ノーマル・ページのページイン処理を実行する(ステップS14)。
【0167】
いずれのページイン処理が終了しても、例外を発生させたページは内部メモリ15又は外部メモリ20上に参照可能な状態で配置されるので、ページインの処理終了後、例外発生時点からアプリケーション・プログラムを実行再開することができる。
【0168】
なお、本明細書中では、アプリケーション・プログラムの実行による仮想アドレス・ユーザ領域と仮想アドレス・セキュア・ユーザ領域のページインの動作を説明するが、仮想アドレス・カーネル領域を参照した場合にも同様の例外の発生とページインの処理が行なわれる。
【0169】
例えば、ユーザ・ページ・テーブルは仮想アドレス・カーネル領域に配置されるので、ページャのページイン処理の実行でページャがMMU12のユーザ・ページ・レジスタ12Aを使用してページ・テーブル・エントリを選択した場合、そのページ・テーブル・エントリが存在する仮想アドレス・カーネル領域のページがさらに無効になっている場合がある。この場合、さらに別のカーネル・ページ失敗例外(kernel page fault exception)が MMU12からプロセッサ・コア11に通知される。この例外が発生すると 、また別のページインの処理が実行されるが、この処理は上述したページイン処理とほぼ同様である。但し、MMU12のカーネル・ページ・レジスタ12Aの指すカーネル・ページ・テーブルを使用する点とカーネル・ページ・テーブルが物理アドレス内部メモリ15に配置されることから、これ以上のページ例外は発生しないという点が相違する。
【0170】
セキュア・ページのページイン動作
ここでは、セキュア・ページのページイン動作について、図11を参照しながら説明する。これは、図10に示したフローチャートにおいてページ失敗例外(page fault exception)を発生させたページのページ・テーブルがS=1であった場合に行われる処理(ステップS13)に相当する。
【0171】
まず、内部メモリ15に空きページがあるかどうかが検索される(ステップS21)。内部メモリに空きがない場合には、セキュア・ページのページアウトが行なわれ(ステップS22)、内部メモリに空きページが作られる。
【0172】
次いで、ページ・テーブル・エントリのDevIDとPFNの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置が特定される(ステップS23)。本実施形態では、ページアウトされているデバイスとして外部メモリ20とHDD28の2つの場合があることになる。どちらの場合もページは暗号化されてページアウトされている。ページアウト先がHDD28であった場合には、外部メモリ20のバッファにページが読み込まれる。
【0173】
次いで、ページ・テーブル・エントリのPFNに内部メモリ15の空きページの物理アドレスを設定する(ステップS24)。そして、ページアウト先の外部メモリ15のアドレスとページ・テーブルのインデックスをオペランドとしてLoadPage命令を実行する(ステップS25)。
【0174】
LoadPage命令は、プロセッサ10により実行される命令で、次の手順に従い、暗号処理されているセキュア・ページを内部メモリ15にロードする動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブルのKeyIndexの値をインデックスとして使い、暗号処理ユニット16の暗号テーブル・レジスタ16Aにより指定される暗号テーブルのエントリから共通鍵方式の復号鍵を取り出し、オペランドで指定された外部メモリ20のアドレスの内容についての復号処理をプロセッサ10内部の暗号処理ユニット16により行なう。復号されたページは、オペランドで指定されたページ・テーブルのPFNで指定される内部メモリ15に配置される。また、復号に使用した暗号テーブルエントリの参照カウントが1つ減らされる。
【0175】
最後に、この処理では該当するページ・テーブル・エントリの有効ビットVを1に設定するとともに、同エントリのDevIDを内部メモリ15を示す値に変更する(ステップS26)。
【0176】
図12には、図11に示したセキュア・ページのページイン処理において、暗号処理されているセキュア・ページを内部メモリ15にロードする動作を行なうLoadPage処理の詳細な手順をフローチャートの形式で示している。
【0177】
まず、インデックスで指定されたページ・テーブル・エントリのKeyIndexを使い、暗号テーブルのエントリから共通暗号鍵の鍵を取り出す(ステップS31)。
【0178】
次いで、オペランドで指定された外部メモリ20のアドレスの内容を暗号処理ユニット16に読み込み(ステップS32)、その復号処理を、共通暗号鍵を用いてプロセッサ10内部の暗号処理ユニット16により行なう(ステップS33)。
【0179】
そして、復号されたページを、ページ・テーブル・エントリのPFNで指定される内部メモリ15に配置する(ステップS34)。
【0180】
また、復号に使用した暗号テーブルエントリの参照カウントを1つ減らす(ステップS35)。
【0181】
本実施形態では、暗号化及び復号処理をプロセッサ10内部のハードウェアで実行することにより、暗号及び復号処理による処理性能の低下を少なくするようになっている。また、本発明の目的である内部メモリ15の有効活用により、暗号化および復号の実行そのものが必要最小限にしか行なわれないことと併せ、高速な処理性能を実現することができる。
【0182】
セキュア・ページのページアウト動作
ここでは、セキュア・ページのページアウト動作について、図13を参照しながら説明する。これは、図11で示したセキュア・ページのページイン処理において、内部メモリ15に空きページがない場合に実行される処理(ステップS22)に相当する。
【0183】
まず、内部メモリ15からページアウトするページを選択する(ステップS41)。この選択方法には、ランダムに選択する方法やLRU (Least Recently Used) などの手法がある。また、ページアウトするページの選択方法は多くのOSにより既に実装されているので、ここではこれ以上説明しない。なお、本実施形態では、ページ・テーブル・エントリにページ・ロックを表わすLビットが存在し、L=1となっているページはページアウトの対象ページとはならない。
【0184】
次いで、外部メモリ20に空きページがあるかどうかが検索される(ステップS42)。外部メモリ20に空きがない場合には、ノーマル・ページのページアウトが行なわれ(ステップS43)、外部メモリ20に空きページが作られる。
【0185】
そして、ページアウト先の外部メモリのアドレスとページ・テーブルのインデックスをオペランドとしてStorePage 命令を実行する(ステップS44)。
【0186】
StorePage 命令は、プロセッサ10により実行される命令で、次の手順に従い、内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出す動作を行なう。すなわち、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのPFNにより指定される内部ページの物理アドレスに相当する内容を保持するキャッシュ・ラインがキャッシュ内に存在するかが検索される。存在した場合で、そのキャッシュ・ラインに書き込みが発生していたならば、その内容を対応する内部メモリ15に書き込み、そのキャッシュ・ラインを無効化する。書き込みが発生していない場合には、単にそのキャッシュ・ラインを無効化する。次に、暗号テーブルに空きがあるかどうかが検索され、空きがあった場合には乱数発生器16Bで共通鍵暗号の鍵を生成し、暗号テーブルのエントリに登録してその参照カウントを1に設定する。暗号テーブルに空きがなかった場合には、ランダムに選択した暗号テーブルのエントリに登録された共通鍵暗号の鍵を利用する。このとき、そのエントリの参照カウントを1つ増加させる。このようにして得た共通鍵暗号の鍵を使用して、オペランドで指定されたインデックスで指定されるページ・テーブル・エントリのPFNにより指定される内部ページの内容の暗号化を行なう。暗号化されたページの内容は、オペランドで指定された外部メモリ20のアドレスに配置される。上述した動作により、指定した内部メモリ15はプロセッサ10により暗号化され外部メモリ20に書き出される。
【0187】
最後に、ページアウトを行ったページ・テーブル・エントリの有効ビットVを0に、DevIDを外部メモリ20を示す値に、PFNを外部メモリ20中のページアウトした内容の保存先を示す物理アドレスに設定する(ステップS45)。
【0188】
図14には、図13に示したセキュア・ページのページアウト処理において、内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出すStorePage処理の詳細な手順をフローチャートの形式で示している。
【0189】
まず、インデックスで指定されたページ・テーブル・エントリのPFNに対応するアドレスの内容を保持するキャッシュ・ラインの書き戻しと無効化する(ステップS51)。そして、暗号テーブルに空きがあるかどうかを検索する(ステップS52)。
【0190】
暗号テーブルに空きがない場合には、ランダムに暗号テーブルのエントリを選択して(ステップS53)、参照カウントを1つ増やす(ステップS54)。
【0191】
一方、暗号テーブルに空きがある場合には、乱数発生器で16B共通暗号鍵の鍵を生成し、暗号テーブルに登録する(ステップS55)。参照カウントは1に設定する。
【0192】
次いで、ページ・テーブル・エントリのKeyIndexに暗号テーブル・エントリのインデックスを設定する(ステップS56)。
【0193】
次いで、ページ・テーブル・エントリのPFNで指定される内部メモリ15の内容を暗号化する(ステップS57)。
【0194】
最後に、暗号化されたページの内容を、オペランドで指定された外部メモリ20のアドレスに配置する(ステップS58)。
【0195】
ノーマル・ページのページイン動作
ここでは、図15に示したフローチャートを参照しながら、ノーマル・ページのページインの動作について説明する。この動作は、図10に示したページャのページインの動作において、ページ失敗例外(page fault exception )を発生させたページのページ・テーブルがS=0であった場合に行なわれる処理(ステップS14)である。
【0196】
まず、外部メモリ20に空きページがあるかどうかが検索される(ステップS61)。外部メモリに空きがない場合には、ノーマル・ページのページアウトが行われ(ステップS62)、外部メモリに空きページが作られる。
【0197】
次いで、ページ・テーブル・エントリの DevID とPFNの値から、このページがページアウトされているデバイスとそのデバイス内でのページの位置を特定する(ステップS63)。本実施形態では、DevIDはHDD28を示す値に設定されていることになり、PFNからHDD28内でのページのページアウト先が決定される。
【0198】
そして、ページの内容が外部ページの空きページに読み込まれる(ステップS64)。
【0199】
最後に、該当するページ・テーブル・エントリの有効ビットVを1に、DevIDを外部メモリ20を示す値に、PFNを外部メモリ20のページが読み込まれた物理アドレスに設定する(ステップS65)。
【0200】
ノーマル・ページのページアウト動作
ここでは、図16に示したフローチャートを参照しながら、ノーマル・ページのページアウトの動作について説明する。この動作は、図13に示したセキュア・ページのページアウト処理において外部メモリ20に空きがなかった場合や、図14で示したノーマル・ページのページイン処理において外部メモリ20に空きがなかった場合に行なわれる処理である。
【0201】
まず、外部メモリからページアウトするページを選択する(ステップS71)。このときも、セキュア・ページのページアウト処理の場合と同様に、ページ・ロックがL=1となっているページはページアウトの対象ページとはならない。
【0202】
次いで、HDD28に空きがあるかどうかが検索される(ステップS72)。HDD28に空きがない場合にはエラーとなる。
【0203】
HDD28に空きがある場合には、ページアウトするページの内容をHDD28に書き込む(ステップS73)。
【0204】
最後に、該当するページ・テーブル・エントリの有効ビットVを0に、DevIDをHDD28を示す値に、PFNをHDD28のページが書き込まれた位置を示す値に設定する(ステップS74)。
【0205】
本明細書で詳解した実施形態では、プログラムを構成するエレメントとして関数、グローバル及びファイル・スコープの変数を使用し、それらに対してセキュリティ属性を付加する。セキュリティ属性の付加されたエレメントは本来の属性である、命令、初期済みデータ、未初期化データとの組み合わせから、それぞれ.secure.text、.secure.data、.secure.bssに再構成されたセキュア・ブロックを構成する。
【0206】
プログラム利用装置においては、ページ方式の仮想記憶機構のページ・テーブルにセキュア・ブロックを意味するSビットを追加し、Sビットの値に応じて内部メモリ15と外部メモリ20を使い分けるとともに、暗号化を行なうかどうかの選択も行なうことで、セキュア・ブロックを可能な限り安全な内部ブロックに配置することと、内部メモリ15が不足した場合に限って暗号化の伴うページアウト処理を行なうこと、そして、セキュア・ブロック外からセキュア・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、プログラムの改竄及び解読の防止と、処理性能の向上の最適化を実現する。
【0207】
[追補]
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、冒頭に記載した特許請求の範囲の欄を参酌すべきである。
【0208】
【発明の効果】
以上詳記したように、本発明によれば、パーソナル・コンピュータなどの、データをネットワークや配布メディアを通して受け取りそれを利用するシステムにおいて、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0209】
また、本発明によれば、実行不能状態のデータを実行可能状態に展開してからデータを利用することにより、データが不正に改竄されたり解析されたりすることを好適に防止することができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0210】
また、本発明によれば、データ利用のために実行可能状態に展開されたデータの改竄や解析を防止しながらデータの利用を可能にすることができる、優れたデータ利用装置及びデータ利用方法、並びにコンピュータ・プログラムを提供することができる。
【0211】
また、本発明によれば、暗号の強度を弱めることなく、処理性能を暗号化を行なわない場合と同程度に維持しながら、他のプログラムやバス・モニタやICEなどのツールによる解析を困難にするデータの改竄や解析を防止することができる効率的な手法を提供することができる。
【0212】
本発明によれば、プログラムを本来改竄や解析を防止したい部分をセキュア・ブロックとして明確に分離させ、セキュア・ブロックのみをセキュア・メモリである内部メモリに配置することで、改竄や解析防止の機能を持つが限られた資源である内部メモリを効率的に利用することが可能となる。
【0213】
また、本明細書中で説明したように、リロケータブル形式のプログラム・ファイルにおいても明確にセキュリティ・ブロックの分離を行なうことで、ライブラリなど複数の開発者が独立して作成した各プログラム・モジュールからなるセキュリティ・ブロックも、リンク時においてセキュリティ・ブロックの統合が行うことができる。したがって、複数の独立した開発者が作成したプログラムに対しても開発者に透過的に効率的なセキュリティ・ブロックの統合を行なうことができる。
【0214】
また、本発明によれば、セキュリティ・ブロックに対してのみ内部メモリを使用することで、ページアウトやページインの回数を効率的に削減することができるため、これらに伴う暗号化及び復号処理による性能の低下を防ぐことができ、また、強度の高い暗号アルゴリズムや鍵を使用することも可能となる。プロセッサ外部にセキュア・ブロックが書き出される頻度が減少することと、たとえ書き出した場合においても性能低下を伴うことなく強度の高い暗号化を行なうことができるので、バス・モニタやICEなどのツールを使用した解析や改竄を困難にすることができる。
【0215】
また、本発明によれば、セキュリティ・ブロックへのアクセスをセキュア・エントリポイント経由でのみ行なわせることで、外部メモリ上のプログラムの一部分がバス・モニタやICEなどのツールを使用して不正アクセスが行なわれた場合であっても、セキュア・ブロックの解析や改ざんを困難にすることができる。
【図面の簡単な説明】
【図1】C言語で記述されたプログラムについてセキュリティ属性の設定方法を説明するための図である。
【図2】リロケータブル形式のプログラムの構造を例示した図である。
【図3】図2に示したリロケータブル形式のプログラムを隣家によりリンクして生成された実行形式プログラムの構造を示した図である。
【図4】本発明が適用されるプログラム利用装置のハードウェア構成の一例を示した図である。
【図5】図4に示したプロセッサ10の内部構造をより詳細に示した図である。
【図6】図4及び図5で示したプロセッサ10が定義するメモリ・マップを模式的に示した図である。
【図7】OSとMMU12によって構成されるメモリ管理の構成を説明するための図である。
【図8】仮想アドレス・セキュア・ユーザ領域にある関数をノーマル状態から呼び出すための処理手順を示したフローチャートである。
【図9】内部メモリ15上に展開されているアプリケーションのセキュア部分(.secure.text)の構成を模式的に示した図である。
【図10】ページャのページインの動作を示したフローチャートである。
【図11】セキュア・ページのページイン動作を示したフローチャートである。
【図12】LoadPage処理の詳細な手順を示したフローチャートである。
【図13】セキュア・ページのページアウト動作を示したフローチャートである。
【図14】内部メモリ15上の復号されたページを暗号処理して外部メモリ20に書き出すStorePage処理の詳細な手順を示したフローチャートである。
【図15】ノーマル・ページのページイン処理の手順を示したフローチャートである。
【図16】ノーマル・ページのページアウト処理の手順を示したフローチャートである。
【符号の説明】
10…プロセッサ
11…プロセッサ・コア
12…MMU
13…キャッシュ
14…外部バス・インターフェース
15…内部メモリ
16…暗号化処理ユニット
20…外部メモリ
21…ディスプレイ・コントローラ
22…表示装置
23…入出力インターフェース
24…キーボード
25…マウス
26…ネットワーク・インターフェース
27…HDDコントローラ
28…HDD
30…バス
Claims (25)
- データをメモリ空間に配置してデータを利用するデータ利用装置であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成手段と、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置手段と、
各メモリ領域に配置されたブロックを利用するブロック利用手段と、
を具備することを特徴とするデータ利用装置。 - 前記メモリ空間の少なくとも1つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリであり、
前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項1に記載のデータ利用装置。 - 前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、
前記セキュア・メモリは、
(1)前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリ
(2)暗号化が施された安全な通信路を介して前記プロセッサと接続されているプロセッサ外部メモリ
(3)解析の困難なプロトコルを利用した通信路を介して前記プロセット接続されているプロセッサ外部メモリ
のうちいずれかの形態で実装されている、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記ブロック配置手段は、セキュリティ属性が付加されているセキュリティ・ブロックを安全な方法で前記セキュア・メモリに配置する、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記エレメント配置手段は、所定の記憶装置に格納されたブロックを前記メモリ空間に配置し、
セキュリティ属性が付加されているブロックは暗号化処理又はその他の処理により実行不能形式で前記所定の記憶装置に格納されており、
セキュリティ属性が付加されたブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するデータ変換手段をさらに備える、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行する、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記ブロック配置手段は、前記セキュア・メモリに配置されているブロックを交換する処理を実行し、
前記ブロック変換手段は、前記セキュア・メモリに配置されているブロックを交換する際に該ブロックを実行不能形式に再変換する、
ことを特徴とする請求項5に記載のデータ利用装置。 - 前記セキュリティ属性は、
(1)改竄防止と秘匿性の確保が必要であることを示す情報
(2)利用頻度を示す情報
(3)改竄防止と秘匿性の確保の強度を示す情報
(4)改竄防止と秘匿性の確保の優先度を示す情報
(5)セキュア・エレメント外からの参照を許可するかどうかを示す情報
のうち少なくとも以下の1つの情報を持つ、
ことを特徴とする請求項2に記載のデータ利用装置。 - データを構成する各エレメントの属性は、
(1)プログラム・データのソースコードにおいてプログラム設計者が指定する(2)データベース又はその他の管理手段を利用して自動的に指定する
(3)プログラム・データの解析結果に基づいて自動的に指定する
のうちいずれかの方法により付与される
ことを特徴とする請求項1に記載のデータ利用装置。 - 前記ブロック利用手段は、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサで構成され、
前記ブロック配置手段は、所定の記憶装置に格納されているセキュリティ属性が付加されたブロックを、
(1)ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサと安全な通信路を介して接続された復号装置で暗号化ブロックを復号する
(2)ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサと同じチップ内に組み込まれている復号装置で暗号化ブロックを復号する
(3)ブロック供給元側でセキュリティ・ブロックを暗号化し、前記プロセッサ内で暗号化ブロックを復号する
(4)SSL(Secure Socket Layer)又はその他の暗号化が施された通信路を介して前記プロセッサへセキュリティ・ブロックを転送する
(5)ブロックが実行プログラム・コードである場合、ブロック供給元側でブロックを難読化してから前記プロセッサへブロックを転送する
のうちいずれかの方法により前記プロセッサに安全に配置する、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記ブロック配置手段は、
(1)セキュリティ属性が付加されているブロックを前記セキュリティ・メモリに配置し、それ以外のブロックはそれ以外のメモリに配置する
(2)セキュリティ属性が付加されているブロックが持つ改竄防止と秘匿性の確保の優先度を示す情報に基づいて、該優先度の高いブロックを優先的に前記セキュリティ・メモリに配置する
(3)セキュリティ属性が付加されているブロックが持つ利用頻度を示す情報に基づいて、利用頻度の高いブロックを優先的に前記セキュリティ・メモリに配置する
(4)セキュリティ属性が付加されているブロックを前記セキュリティ・メモリ以外に配置する場合には、該ブロックが持つ改竄防止と秘匿性の確保の強度を示す情報に基づいて暗号化の方法又は強度を選択的に使用する
のうちいずれかの手順に従い、セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項8に記載のデータ利用装置。 - 前記メモリ空間は、改竄や解析などの不正利用から保護されたセキュア・メモリと、それ以外のノーマル・メモリを含み、
前記ブロック配置手段は、前記セキュア・メモリが不足したことを検出する手段と、前記セキュア・メモリの不足に応答して前記セキュア・メモリ上のブロックを前記ノーマル・メモリに書き出す手段と、以前にセキュアメモリ上にあって前記ノーマル・メモリ上に退避したブロックへのアクセスを検出する手段と、アクセス検出に応答して前記ノーマル・メモリ上のブロックを前記セキュア・メモリに書き戻す手段とを備える、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記セキュア・メモリ上のブロックを前記ノーマル・メモリに書き出す際に該ブロックを暗号化する手段と、前記ノーマル・メモリ上のブロックを前記セキュア・メモリに書き戻す際に該ブロックを復号化する手段をさらに備える、
ことを特徴とする請求項12に記載のデータ利用装置。 - 前記セキュア・メモリが不足したことを検出する手段及び/又は前記ノーマル・メモリ上に退避したブロックへのアクセスを検出する手段は、
(1)ページング方式による仮想記憶システム
(2)セグメント方式による仮想記憶システム
(3)ページング及びセグメントの両方式による仮想記憶システム
(4)データ参照前にブロックを前記セキュア・メモリにロードする指示を記述したプログラム
のうちいずれかにより構成される、
ことを特徴とする請求項12に記載のデータ利用装置。 - 前記ノーマル・メモリから前記セキュア・メモリへの参照を禁止し、特定の条件下でのみ参照を許可する手段をさらに備える、
ことを特徴とする請求項12に記載のデータ利用装置。 - 前記の特定の条件下でのみ参照を許可する手段は、
(1)前記セキュア・メモリ外からの参照を許可する条件を示す情報に基づいて、前記ノーマル・メモリ上で動作するコードから前記セキュア・メモリへの参照を行なう場合に、参照の識別子を指定し、識別子が登録されていることを確認して参照を許可する
(2)前記セキュア・メモリ外のブロックが改変されていないことを示す情報を付加して参照を行ない、該ブロックが不正に改変されていないことを確認して参照を許可する、
のうちいずれかの方法により参照を許可する、
ことを特徴とする請求項15に記載のデータ利用装置。 - セキュリティ属性とは独立な異なる属性がエレメントに対して与えられ、該独立な異なる属性に基づいてブロックが構成されている場合において、前記ブロック配置手段は、互いに独立な属性間の優先度を決定し、該優先度に基づいて前記セキュア・メモリに割り当てるブロックを決定する、
ことを特徴とする請求項2に記載のデータ利用装置。 - 前記のセキュリティ属性とは独立な異なる属性は、アクセス速度の速いメモリに割り当てることを指示する属性、又は、省電力を実現するためにメモリに割り当てることを指示する属性を含む、
ことを特徴とする請求項17に記載のデータ利用装置。 - データをメモリ空間に配置してデータを利用するデータ利用方法であって、
データは複数のエレメントの集合で構成され、且つ各エレメントは属性を持ち、
前記メモリ空間は属性毎のメモリ領域を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成ステップと、
利用するブロックを属性に従って対応するメモリ領域に優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするデータ利用方法。 - 前記メモリ空間の少なくとも1つのメモリ領域は改竄や解析などの不正利用から保護されたセキュア・メモリであり、
前記ブロック配置ステップでは、セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置する、
ことを特徴とする請求項19に記載のデータ利用方法。 - 前記ブロック利用ステップは、メモリ空間に配置されたプログラムの実行又はデータの再生などの演算を行なうプロセッサ上で実行され、
前記セキュア・メモリは、前記プロセッサと同じチップ内に組み込まれているプロセッサ内部メモリ又は暗号化が施された安全な通信路を介して前記プロセッサと接続されているプロセッサ外部メモリの形態で実装されている、
ことを特徴とする請求項20に記載のデータ利用方法。 - 前記ブロック配置ステップでは、セキュリティ属性が付加されているブロックを安全な方法で前記セキュア・メモリに配置する、
ことを特徴とする請求項20に記載のデータ利用方法。 - セキュリティ属性が付加されているブロックは暗号化処理又はその他の処理により実行不能形式で所定の記憶装置に格納されており、
セキュリティ属性が付加されたブロックを前記セキュア・メモリに配置する段階で該ブロックを実行可能形式に変換するデータ変換ステップをさらに備える、ことを特徴とする請求項20に記載のデータ利用方法。 - 前記ブロック配置ステップでは、前記セキュア・メモリに配置されているブロックを交換する処理を実行し、
前記ブロック変換ステップでは、前記セキュア・メモリに配置されているブロックを交換する際に該ブロックを実行不能形式に再変換する、
ことを特徴とする請求項23に記載のデータ利用方法。 - 改竄や解析などの不正利用から保護されたセキュア・メモリを含んだメモリ空間上にデータを配置して利用する処理をコンピュータ・システム上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
データは複数のエレメントの集合で構成され、且つ、各エレメントは不正利用からの保護形式に関する情報を記述した属性情報を持ち、
同じ属性が与えられているエレメントを1以上のブロックに再構成するデータ再構成ステップと、
セキュリティ属性が付加されているブロックを前記セキュア・メモリに優先的に配置するブロック配置ステップと、
各メモリ領域に配置されたブロックを利用するブロック利用ステップと、
を具備することを特徴とするコンピュータ・プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003062393A JP2004272594A (ja) | 2003-03-07 | 2003-03-07 | データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003062393A JP2004272594A (ja) | 2003-03-07 | 2003-03-07 | データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004272594A true JP2004272594A (ja) | 2004-09-30 |
Family
ID=33124327
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003062393A Pending JP2004272594A (ja) | 2003-03-07 | 2003-03-07 | データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004272594A (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006350782A (ja) * | 2005-06-17 | 2006-12-28 | Fujitsu Ltd | プロセッサ及びシステム |
JP2008521111A (ja) * | 2004-11-24 | 2008-06-19 | ノキア コーポレイション | 電子デバイス内の安全なプログラム解釈方法 |
JP2009129206A (ja) * | 2007-11-22 | 2009-06-11 | Toshiba Corp | 情報処理装置、プログラム検証方法及びプログラム |
JP2010039576A (ja) * | 2008-07-31 | 2010-02-18 | Mutsumi Ogawa | メモリ管理方法 |
JP2013232219A (ja) * | 2005-12-08 | 2013-11-14 | Agere Systems Inc | マイクロコントローラにおけるデータの安全な取扱いのための方法および装置 |
JP2015195053A (ja) * | 2008-12-31 | 2015-11-05 | インテル コーポレイション | セキュアな埋め込みコンテナの実行のためのプロセッサの拡張 |
JP2017107409A (ja) * | 2015-12-10 | 2017-06-15 | 日本電信電話株式会社 | センサ中継装置 |
-
2003
- 2003-03-07 JP JP2003062393A patent/JP2004272594A/ja active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008521111A (ja) * | 2004-11-24 | 2008-06-19 | ノキア コーポレイション | 電子デバイス内の安全なプログラム解釈方法 |
JP4638505B2 (ja) * | 2004-11-24 | 2011-02-23 | ノキア コーポレイション | 電子デバイス内の安全なプログラム解釈方法 |
JP2006350782A (ja) * | 2005-06-17 | 2006-12-28 | Fujitsu Ltd | プロセッサ及びシステム |
JP4738068B2 (ja) * | 2005-06-17 | 2011-08-03 | 富士通セミコンダクター株式会社 | プロセッサ及びシステム |
JP2013232219A (ja) * | 2005-12-08 | 2013-11-14 | Agere Systems Inc | マイクロコントローラにおけるデータの安全な取扱いのための方法および装置 |
JP2009129206A (ja) * | 2007-11-22 | 2009-06-11 | Toshiba Corp | 情報処理装置、プログラム検証方法及びプログラム |
JP2010039576A (ja) * | 2008-07-31 | 2010-02-18 | Mutsumi Ogawa | メモリ管理方法 |
JP2015195053A (ja) * | 2008-12-31 | 2015-11-05 | インテル コーポレイション | セキュアな埋め込みコンテナの実行のためのプロセッサの拡張 |
JP2017107409A (ja) * | 2015-12-10 | 2017-06-15 | 日本電信電話株式会社 | センサ中継装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10572689B2 (en) | Method and apparatus for secure execution using a secure memory partition | |
US6983374B2 (en) | Tamper resistant microprocessor | |
US6185686B1 (en) | Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information | |
JP4226760B2 (ja) | マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法 | |
US9141558B2 (en) | Secure memory control parameters in table look aside buffer data fields and support memory array | |
JP4287485B2 (ja) | 情報処理装置及び方法、コンピュータ読み取り可能な記録媒体、並びに、外部記憶媒体 | |
JP4850830B2 (ja) | コンピュータシステム及びプログラム生成装置 | |
JP3801833B2 (ja) | マイクロプロセッサ | |
US20110167278A1 (en) | Secure processor and a program for a secure processor | |
WO1998011690A9 (en) | Self-decrypting digital information system and method | |
US20160094555A1 (en) | System and methods for executing encrypted managed programs | |
US8479014B1 (en) | Symmetric key based secure microprocessor and its applications | |
JP2004272594A (ja) | データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム | |
JP2010134572A (ja) | セキュリティを実現する装置、および方法 | |
JPS6313209B2 (ja) | ||
JP2010205116A (ja) | 情報処理装置、情報処理方法および情報処理システム |