(57)【特許請求の範囲】
【請求項１】
異なる暗号鍵で暗号化された複数のプログラムを各々復号する復号化手段と、
前記復号化手段により復号された複数のプログラムを、メモリページ単位で各々平文にて格納するための内部メモリと、
前記プログラムを前記内部メモリの他のメモリページに読み込み、タスクとして実行する際に、該タスクがアクセス対象の前記メモリページ毎に要求する要求秘密保護属性を、他のタスクとは排他的に設定し格納する要求秘密保護属性保持部と、
前記メモリページ毎に、当該メモリページのメモリ秘密保護属性を格納するメモリ秘密保護属性保持部と、
前記タスク実行時に、当該タスクがアクセス対象の前記メモリページについて、前記メモリ秘密保護属性保持部に、前記メモリ秘密保護属性を設定する秘密保護管理部と、
前記要求秘密属性保持部に格納された前記要求秘密保護属性と、前記メモリ秘密保護属性保持部に格納された前記メモリ秘密保護属性とを比較し、一致した場合に当該メモリページへのアクセスを許可するメモリ保護手段と、
前記内部メモリの仮想アドレスを物理アドレスに変換するアドレス変換手段と
を具備し、前記メモリ秘密保護属性保持部は、前記メモリページの物理アドレス毎に前記メモリ秘密保護属性を格納し、前記メモリ秘密保護属性保持部及び前記要求秘密保護属性保持部は、それぞれアクセス対象であるメモリページの仮想アドレスを更に格納し、前記メモリ保護手段が、前記仮想アドレスから前記物理アドレスへの変換時に、前記メモリ秘密保護属性保持部の仮想アドレスと前記要求秘密保護属性保持部の仮想アドレスとを比較し、一致した場合にアドレス変換を行うことを特徴とする内部メモリ型の耐タンパマイクロプロセッサ。
【請求項２】
前記メモリ秘密保護属性保護部と、前記要求秘密保護属性保護部は、前記タスクを識別するためのタスク識別子を更に格納し、
前記メモリ保護手段は、前記要求秘密保護属性と前記メモリ秘密保護属性を比較するとともに、各々対応する前記タスク識別子を比較し、前記要求秘密保護属性と前記メモリ秘密保護属性が一致し、かつ各々対応する前記タスク識別子が一致した場合にのみ当該メモリページへのアクセスを許可することを特徴とする請求項１に記載の内部メモリ型の耐タンパマイクロプロセッサ。
【請求項３】
前記秘密保護管理部は、前記タスクが発行する命令に基づいて、前記メモリ秘密保護属性保持部に前記メモリ秘密保護属性を設定することを特徴とする請求項１に記載の内部メモリ型の耐タンパマイクロプロセッサ。
【請求項４】
前記秘密保護管理部は、前記タスクが前記アクセス対象であるメモリページにアクセスする際に、前記比較結果に基づいて前記メモリ秘密保護属性を設定することを特徴とする請求項１に記載の内部メモリ型の耐タンパマイクロプロセッサ。
【請求項５】
前記秘密保護管理部は、前記タスクがアクセス対象の前記メモリページ毎に要求する要求秘密保護属性が、秘密保護を要求し、該アクセス対象のメモリページのメモリ秘密保護属性が非秘密保護の属性であった場合には、前記メモリ秘密保護属性を秘密保護の属性とし、当該メモリページを初期化することを特徴とする請求項４に記載の内部メモリ型の耐タンパマイクロプロセッサ。
【請求項６】
前記内部メモリは複数のタスクによって共有される共有領域を有し、
前記メモリ秘密保護属性と、前記要求秘密保護属性は、前記共有のための秘密値を各々含み、
前記メモリ保護手段は、前記メモリ秘密保護属性に含まれる前記秘密値と、前記要求秘密保護属性に含まれる前記秘密値とを比較し、一致した場合にのみ前記共有領域へのアクセスを許可することを特徴とする請求項１に記載の内部メモリ型の耐タンパマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パッケージ内部に、複数のプログラムとその作業領域を格納可能な大容量の内部メモリを有し、マルチタスクのプログラム実行環境下で、実行コードや処理対象データの不正な改変を防止することのできる耐タンパマイクロプロセッサに関する。
【０００２】
【発明の背景】
情報システムネットワークとして、オープンシステムが広く普及している。オープンシステムでは、ＰＣなどの一般ユーザ向けコンピュータのハードウェアやシステムプログラム（あるいはＯＳ）の情報が開示されており、エンドユーザは、システムプログラムを変更して望んだ改良を加えることができる。このような環境で、アプリケーションプログラムが扱う情報の著作権や、プログラム自体の著作権を保護するためには、システムのＯＳがアプリケーションに対して敵対的動作をとり得ることを前提として、プログラムの秘密を守るハードウェアが必要となってくる。こうしたハードウェアを、特にマイクロプロセッサとして実現する試みが提案されている（特願平２０００−３５８９８号、Lie et al., “Architectural Support for Copy and Tamper Resistant Software”,; Computer Architecture News 28(5):p168-等）。
【０００３】
これらのマイクロプロセッサは、マルチタスク環境で、プログラムとそれが扱う情報の覗き見や改変を防止するために、情報を暗号化する機能を備えている。このようなマイクロプロセッサを耐タンパマイクロプロセッサと呼ぶ。
【０００４】
耐タンパマイクロプロセッサの主な目的は、エンドユーザのシステムで動作するアプリケーションの保護を通じて、プログラムやコンテンツ、ネットワークサービスの権利者の権利を保護することである。より具体的には次の３つが挙げられる。
【０００５】
（１）プログラムに実装されたアルゴリズムの秘密保護
（２）プログラムに埋め込まれたトレードシークレットおよびコンテンツの、秘密または不正複製からの保護
（３）プログラム動作、処理結果の改変からの保護
プログラムに実装されたアルゴリズムの保護は、プログラムの権利者の保護に必要であり、プログラムに埋め込まれたトレードシークレットの保護は、プログラムが扱い著作権保護されたコンテンツの不正コピーを防止するのに必要である。ネットワークサービスを利用するプログラムが、課金情報をサーバとやりとりするようなアプリケーションでは、課金情報の送信動作を正しく実行し、不正な改変を防止することが、サービスプロバイダの権利の保護に重要である。実際の例として、パーソナルコンピュータ（ＰＣ）でＤＶＤを再生するプログラムが解析され、そこからＤＶＤの暗号を解読するためのトレードシークレットが読みとられて不正にＤＶＤをコピーするプログラム（DeCSS）が作られたことはよく知られている。
【０００６】
ここで、現在提案されているオープンシステムでのアプリケーションプログラムの秘密保護機構について、本願発明者らの提案（特願２０００−３５８９８号、特願２０００−１３５０１０号、特願２０００−３３３６３５号、特願２００１−０２４４８０号）に基づき、簡単に説明する。紹介する例では、ひとつのシステム上で疑似並列的に複数のプログラムベンダのプログラムが実行され、それぞれがそのシステム資源を管理するＯＳからも独立に秘密を保持できることが特徴である。このような環境を「マルチパーティアプリケーション保護環境」と呼ぶこととする。
【０００７】
図１１は、これまでに提案されているマルチパーティのアプリケーション保護環境の概要を示す。ターゲットシステム（たとえばＰＣ）１１０２は、耐タンパのマイクロプロセッサ１１０３を内蔵し、ハードディスクのような２次記憶１１０７と、プロセッサ外部のメモリ１１０８を有する。システム１１０２と、ユーザ１１１２で、システム環境１１０１を構成する。
【０００８】
複数の異なるプログラムベンダ１１２１−１〜１１２１−ｎは、暗号化したプログラム１１２３−１〜１１２３−ｎを、それぞれネットワークを介してターゲットシステム１１０２に配信する。暗号化されたプログラムを保護プログラムと呼ぶ。
【０００９】
ベンダから配信された暗号化プログラムは、ターゲットシステム１１０２の２次記憶１１０７に蓄積され、実行時に外部メモリ１１０８上に確保された領域１１０９に読み込まれる。外部メモリ上では、プログラムは未だ暗号化された状態である。暗号化プログラムは、外部メモリ１１０８からマイクロプロセッサ１１０３に取り込まれてはじめて復号される。復号処理は、各プログラムに対応してベンダから送られてきた鍵を用いて、保護機能１１０６で行なわれる。復号されたプログラムはキャッシュメモリ１１０４に読み込まれる。プログラムの復号とキャッシュメモリ１１０４への読み込みは、一度に全体が読み込まれるわけではなく、プログラムの実行にしたがって部分的に行われる。キャッシュメモリに読み込まれたプログラム部分は平文状態である。
【００１０】
マイクロプロセッサ１１０２の内部では、保護機能１１０６によってプログラムは平文で取り扱われ、ＯＳ１１１０が介在する余地はない。また、キャッシュメモリ１１０４の内容は、マイクロプロセッサ１１０３の仕様に定められた操作を除いて外部から直接読み出すことはできない。
【００１１】
一方、近年、集積回路技術の発達により、マイクロプロセッサと同一パッケージ内に大容量のメモリを搭載することが可能になっている。このような内部メモリ型のプロセッサでは、最大メモリ用量の制限はあるものの、従来の外部メモリを前提とした耐タンパプロセッサでオーバヘッドとなっていたメモリ読み込み、書き出し時の暗号処理負荷を低減できる可能性がある。
【００１２】
しかし、メモリが内部メモリとしてマイクロプロセッサ内部に配置されたとしても、メモリの資源管理はあくまでもＯＳの管理下にあるので、ＯＳによる敵対動作が十分に考えられる。したがって、内部メモリ型のマイクロプロセッサでは、ＯＳの管理下でのプログラムの秘密保護が必要となってくるが、具体的な秘密保護の実現手段は何ら提案されていない。
【００１３】
さらに、内部メモリ型のマイクロプロセッサで、単一のプログラムのみならず、複数の異なる暗号プログラムを擬似並列的に処理する場合に、複数プログラムの秘密保護を個別に保証する必要があるが、これについても、なんら提案されていない。
【００１４】
【発明が解決しようとする課題】
内部メモリ型の耐タンパマイクロプロセッサで、秘密保護を保証しつつマルチタスク処理を実現するためには、
（１）複数プログラムを意図的改変から保護できるメモリ操作の統合性(integrity)
（２）ＯＳによる資源管理と内部メモリの秘密保護の両立
（３）タスクとＯＳとの通信
を考慮する必要がある。
【００１５】
具体的には、あるタスクが内部メモリのあるアドレスに対してｎ回のメモリ操作をおこなう場合、その過程で別のタスクによるメモリ操作からも、ＯＳによる意図的な攻撃からも保護されなければならない。タスクの実行は数多くの命令のステップからなり、それらが正しく実行されてはじめて正しい結果が得られるからである。ＯＳを含む攻撃者が、プログラムのある一部分だけを実行する、あるいは一連のメモリ操作のうち特定操作だけを除外する場合、プログラムの動作が恣意的に変更され、正しいプログラム実行ができなくなる。
【００１６】
また、ＯＳが資源管理の一環として行うメモリページの操作時に、メモリの解放を利用した攻撃が考えられ得るが、このような攻撃を排除すべく、資源管理とプログラムの秘密保護を両立させなければならない。
【００１７】
さらに、タスクはシステムコールの発する場合、ＯＳとデータ交換するが、このときＯＳとメモリを共有して通信する必要がある。
【００１８】
ここで、従来の外部メモリ型耐タンパマイクロプロセッサの保護機構を、そのまま内部メモリ型に適用したプロセッサを考えてみる。まずメインの内部メモリは、ブロックまたはページと呼ばれる単位（たとえば４Ｋバイトページ）に分割される。プロセッサ内部には、メモリページ毎にその秘密保護属性を保持するテーブルが設けられ、テーブルエントリが、対応するメモリページの秘密保護属性を保持する。タスクＴ0 が操作したメモリページの秘密保護属性記述子には、自動的にタスクＴ0 のＩＤ が設定され、ＯＳを含む他のタスクは一切その内容を平文で読み出し、書き換えできなくなる。ただし、ＯＳはメモリページの再利用のために、あるメモリページの秘密保護属性を強制的に解除することができる。メモリページの秘密保護属性が解除されると、ページの内容はすべて消去されたうえで、所定の値に初期化され、もとタスクの秘密は守られる。
【００１９】
いま、タスクＴ0 が、あるアドレスＡ0 のメモリページＭ0 に対して、Ｍ0  の初期状態からＯｐ１〜Ｏｐｎ までｎ回のメモリ操作をおこなうとする。初期状態は不定であってよいが、Ｏｐ１〜Ｏｐｎ の操作を確実におこなって、最終状態の結果を得ることが目的である。当然その過程では別のタスクによるメモリ操作が加わってはならない。
【００２０】
一般タスクによるメモリ操作は、従来の外部メモリ型の保護機構により排除できる。しかし、ＯＳがページＭ0 の秘密保護属性を解除した後に、当該ページを攻撃者の意図するデータに書き換える攻撃は、外部メモリ型の保護機構をそのまま内部メモリ型に適用しても、排除できないし、検出もできない。秘密保護属性解除以前のデータの秘密は保護され得るが、他のデータへの置き換えは防止できないのである。
【００２１】
結果として、ＯＳ特権を持つ攻撃者が、タスクの秘密メモリ内容を意図したように自由に書き換えられることとなってしまう。
【００２２】
メモリページの強制的な秘密保護属性の解除は、タスクの秘密保護にとって脅威となる。しかし、マルチタスクのシステム下では、このような強制解除の機能を排除してタスク自身だけが当該保護属性を解除できる構成とすることはできない。なぜなら、一部のタスクによって、過大なメモリが占有されてしまった場合に、ＯＳがそれを制御できなくなるからである。
【００２３】
また、ＯＳとタスクが通信するための非保護状態のメモリアクセスと、保護されたメモリアクセスは、共存できるものでなければならない。
【００２４】
そこで、本願ではこれらの点に留意しつつ、パッケージ内に比較的大容量の内部メモリを持つマイクロプロセッサにおいて、マルチタスクのプログラム実行環境下で、実行コードや処理対象であるデータの不正な改変を防止できる効率的な内部データ管理を実現する。
【００２５】
【課題を解決するための手段】
内部メモリ型耐タンパプロセッサは、以下を備える。
【００２６】
（ａ）異なる暗号鍵で暗号化された複数のプログラムを、各々復号する復号化手段；
（ｂ）復号化手段により復号された複数のプログラムを、メモリページ単位で各々平文にて格納するための内部メモリ；
（ｃ）前記プログラムを内部メモリの他のメモリページに読み込み、タスクとして実行する際に、このタスクがアクセス対象のメモリページ毎に要求する要求秘密保護属性を他のタスクとは排他的に設定し格納する要求秘密保護属性保持部；
（ｄ）メモリページ毎に、当該メモリページのメモリ秘密保護属性を格納するメモリ秘密保護属性保持部；
（ｅ）タスク実行時に、当該タスクがアクセス対象のメモリページについて、メモリ秘密保護属性保持部にメモリ秘密保護属性を設定する秘密保護管理部；および
（ｆ）要求秘密属性保持部に格納された要求秘密保護属性と、メモリ秘密保護属性保持部に格納されたメモリ秘密保護属性とを比較し、一致した場合に当該メモリページへのアクセスを許可するメモリ保護手段。
【００２７】
このような内部メモリ型マイクロプロセッサでは、プログラムやデータが平文状態で内部メモリに格納されるので、メモリの読み出し、書き出しに暗号処理を必要としない分、処理能力のオーバーヘッドを解消できる。
【００２８】
また複数プログラムを擬似並列的に走らせるマルチタスク環境下で、メモリ資源管理を行うＯＳが、メモリページの解放を利用して不正処理を意図したとしても、成功しない。タスクがアクセス対象のメモリページに要求する秘密保護属性と、このタスク処理に必要なメモリ領域に設定されている秘密保護属性とが一致しない限り、そのメモリページへのアクセスが許可されないからである。
【００２９】
このような構成により、複数プログラムの個々の秘密が保護され、ＯＳによる資源管理と各プログラムの秘密保護が両立する。また、メモリページの秘密保護属性を管理することによって非保護領域を確保し、タスクとＯＳの通信を保証できる。
【００３０】
【発明の実施の形態】
以下の説明において、マイクロプロセッサ外部のメモリに暗号化された状態で格納されたプログラムを読み込んで処理する従来型の耐タンパプロセッサを「外部メモリ型耐タンパプロセッサ」、マイクロプロセッサのパッケージ内にプログラムを平文状態で格納する耐タンパプロセッサを「内部メモリ型の耐タンパプロセッサ」と称する。
【００３１】
また本明細書において、プログラムの秘密保護とは、固有のプログラム鍵で暗号化されているプログラムの作業データが、他のプログラムから読み取られないことはもちろんのこと、攻撃者の意図にそったデータの改変や、プログラムの動作の改変といった攻撃も防止することを意味する。
【００３２】
＜第１実施形態＞
図１は、本発明の第１実施形態に係る内部メモリ型の耐タンパプロセッサの概略構成図である。プロセッサ１００は、プロセッサパッケージ１０１内に、プロセッサコア１０２と、キャッシュモジュール１０３と、バスインターフェイスユニット（ＢＩＵ）１０７と、プライバシマネージャ（秘密保護管理部）３０１を含むファームウェア（ＲＯＭ）１０９と、内部メモリ１１０を有し、これらは内部バス１２６を介して相互接続されている。
【００３３】
プロセッサコア１０２は、実行中のプログラムが使用するワーキングレジスタ１１４と、タスク切り替え部（ＳＴＳ：secure task switcher）１１５を有する。ワーキングレジスタ１１４は、ＭＴＲ（memory type range）レジスタ４０１を含む。ＭＴＲレジスタ４０１は、タスクがアクセス対象である内部メモリ領域（すなわちメモリページ）に秘密保護を要求するかどうかを指定する要求秘密保護属性（ＲＰＡ：requested protection attribute）を格納する。タスク切り替え部１１５は、タスク対応に実行中のレジスタ状態を保持するコンテキストテーブル１１６と、タスク対応にプログラム暗号鍵などの鍵情報を保持する鍵テーブル（タスクキーテーブル）１１７を有する。
【００３４】
ファームウウェア１０９には、図示はしないが、プロセッサ１００に固有の秘密鍵が格納されている。ファームウェア１０９は、プライバシマネージャと呼ばれる秘密保護管理部３０１を含み、内部メモリ１１０の各メモリページのメモリ秘密保護属性（ＭＰＡ：memory protection attribute）を管理する。プライバシマネージャ３０１は、たとえばファームウェアに格納されるプログラムとして実現される。
【００３５】
内部メモリ１１０は、大きく２つの領域に分割される。ユーザエリア１１１と秘匿エリア１１２である。ユーザエリア１１１には、ＯＳやそのシステムエリアを含むユーザプログラムが、実行時に格納される。秘匿エリア１１２は、プライバシマネージャ３０１のみが操作できる領域で、メモリ秘密保護属性（ＭＰＡ：memory protection attribute）テーブル５０１を格納する。ＭＰＡテーブル５０１は、メモリページごとにその秘密保護属性を格納する。上述したプライバシマネージャ３０１は、タスクが発行する秘密保護命令に応じて、対応するメモリページに関し、ＭＰＡテーブル５０１にメモリ秘密保護属性を設定する。秘匿エリア１１２にはＯＳによる操作がいっさい及ばない。
【００３６】
キャッシュモジュール１０３は、命令キャッシュ１０４と、データキャッシュ１０５と、メモリ保護モジュール（メモリ保護手段）１０６を有する。データキャッシュ１０５は、プログラムの実行時（すなわち対象領域へのアクセス時）に、内部メモリ１１０のユーザエリア１１２のページ内容と、それに対応してＭＰＡテーブル５０１に保持された秘密保護属性とを読み込む。メモリ保護モジュール１０６は、データキャッシュ１０５のキャッシュタグに書き込まれたメモリ秘密保護属性（ＭＰＡ）と、コア１０２のＭＴＲレジスタ４０１から出力されたタスク指定の要求秘密保護属性（ＲＰＡ）とを比較し、これら２つの属性が一致したときにのみ、対象となるメモリページへのアクセスを許可する。
【００３７】
ＢＩＵ１０７は、暗号モジュール（復号化手段）１０８を有し、外部との入出力データを暗号化する。プロセッサ１００は、ＢＩＵ１０７を介して外部と入出力を行う。外部バスでプロセッサと接続された周辺機器ブリッジチップ１２２は、内部にバッファメモリ１２３を有する。周辺機器ブリッジチップ１２２はフラッシュメモリ１２１およびＨＤＤ１２５とそれぞれ接続されている。
【００３８】
図２は、内部メモリマップを示す。ユーザエリア１１１と、プライバシマネージャのための領域３０１は、メモリマップ上で隔離される。メモリマップの前半部分はユーザエリアに割り当てられ、後半部分はプライバシマネージャの領域に割り当てられる。ユーザエリア１１１におかれた外部プログラムは、プライバシマネージャ３０１を含むファームフェア領域１０９に対してアクセスすることはできない。
【００３９】
第１実施形態では、説明の単純化のため、仮想アドレス機構をもたない実アドレス方式のプロセッサを仮定する。このような耐タンパプロセッサの動作を以下で説明する。
【００４０】
プログラムの読み込みとタスクの生成
図３は、図１のマイクロプロセッサ１００によるプログラムＡの読み込みとタスク生成の手順を示す概略図である。プログラムＡは、プロセッサ１００によって実行される前は、暗号化された状態でマイクロプロセッサ外部のフラッシュメモリ１２１（図１）やＨＤＤ１２４（図１）に格納されている。
【００４１】
プログラムＡの読み込み以前に、ＯＳや別のプログラムが読み込まれて生成されたタスク１が、ユーザエリア１１１に読み込まれている。ＯＳはユーザエリア１１１のアドレス０、Ｐから始まる領域に、タスク１はアドレスＸから始まる領域に読み込まれている。
【００４２】
プログラムＡは配布鍵３０２とプログラム本体３０３で構成される。プログラムＡの読み込みにあたって、ＯＳは所定の手順により、暗号化された状態のプログラムＡを周辺機器ブリッジチップ１２２のバッファメモリ１２３に読み込む。次にＯＳは、バッファメモリ１２３のプログラムのアドレス、内部メモリにおけるプログラムの配置アドレスＹ、およびタスクＩＤ（タスクｋ）を指定して、タスク生成命令を発行する。
【００４３】
タスク生成命令が発行されると、制御はＯＳからプライバシマネージャ３０１に移る。プライバシマネージャ３０１は、たとえばファームウェア１０９に格納されたプログラムとして実装され、プログラムの秘密を守るために外部プログラムであるＯＳよりも強い特権を持つ。プライバシマネージャ３０１だけが、内部メモリの秘匿エリア１１２やコンテキストテーブル１１６、タスクキーテーブル１１７を操作できる。
【００４４】
プライバシマネージャ３０１は、バッファメモリ１２３からプログラムＡの配布鍵３０２を取得し、ファームウェア１０９に格納されたプロセッサ秘密鍵（不図示）を使って、暗号モジュール１０８を介して配布鍵３０２を復号し、プログラム鍵を取り出す。このプログラム鍵を、タスクキーテーブル１１７のタスクＩＤ（すなわちタスクｋ）に対応するエントリ１１７−ｋに格納する。次にプログラム鍵によってバッファメモリ１２３メモリのプログラム本体３０３を、暗号モジュール１０８を介して復号し、内部メモリのプログラム配置アドレスＹから始まる領域に復号したプログラムを配置する。
【００４５】
さらに、秘匿エリア１１２のメモリ秘密保護属性（ＭＰＡ）テーブル５０１（図１）のプログラム配置領域に対応するエントリに、タスクＩＤ（ｋ）を書き込み、これらの領域に保護属性を与えて、他のタスクからのアクセスを防止する。ＭＰＡテーブル５０１のエントリは、後述するように、メモリのページごとに（たとえば４Ｋバイトを１ページとして）設定される。それまでに実行されていたタスク１のエントリには、タスクＩＤ＝１が書き込まれており、今回のプログラムＡの読み込みによって、タスクＩＤ＝ｋが書き込まれる。
【００４６】
これでタスク実行の準備が完了し、一度制御がＯＳに戻された後、ＯＳがタスクＩＤ＝ｋの実行開始を指示する命令を発行する。すると、所定のアドレスからプログラムＡすなわちタスクｋの実行が開始される。なお、第１実施形態ではプライバシマネージャ３０１はファームウェア１０９によって実現されるものとしたが、ハードウェアによって実装されてもよい。ハードウェアによる実装の場合は、プライバシマネージャ３０１のタスク実行準備がなされている間、ＯＳは他のタスクを並行して処理することができ、システムの応答性能が向上する。
【００４７】
メモリの確保
さて、生成されたタスクｋを実行するにあたって、タスクｋは内部メモリ１１０に必要なメモリ領域を動的に確保する。まずタスクｋはＯＳにメモリ領域を要求する。ＯＳはタスクｋに使用可能なメモリ領域、たとえばアドレスＺから始まるメモリ領域を割り当てる。タスクｋはこの領域を、タスクｋのみが排他的にアクセスできる領域として使用するために、領域の秘密保護属性を設定する。秘密保護属性は、タスクｋがアドレス領域を指定し、明示的に秘密保護属性設定命令を発行することによって設定される。秘密保護属性の設定は、このタスクのみが行うことができ、たとえＯＳであっても他のタスクの保護属性を設定することはできない。
【００４８】
なお、通常、ＯＳは他のタスクとのメモリ資源をめぐる競合を避けるため、メモリ管理ユニットＭＭＵ（不図示）に当該領域の資源保護属性を設定して、他のタスクがアクセスできないようにする。この設定はあくまでＯＳによる資源保護を目的としたものであり、悪意のあるＯＳの場合、タスクの秘密を保護する役割をなさないことに注意が必要である。
【００４９】
タスクｋから保護属性設定命令が発行されると、処理はプライバシマネージャ３０１に移行する。プライバシマネー３０１は、ＭＰＡテーブル５０１の指定された領域に対応するエントリに、命令の発行元であるタスクｋのＩＤを書き込み、この領域を他のタスクによるアクセスから保護する。ＭＰＡテーブル５０１の形式は、たとえば図４に示すものである。ＰＡＭテーブル５０２は、各メモリページに対応するエントリ５０１−１〜５０１−ｎを有する。エントリは２つのフィールドを有し、フィールドＰには、対応するメモリページの秘密保護の有無を示す秘密保護ビットを格納する。たとえば、秘密保護ビットの値が１のときは、秘密保護ありを意味する。残りのフィールドにはタスクＩＤが格納される。なお、上述したようにプロセッサが資源管理のためのＭＭＵ（不図示）を持つ場合には、プライバシマネージャ３０１が、保護属性設定命令の発行元タスクが対象領域のアクセス権を持っていることを確認する構成とすることが望ましい。
【００５０】
保護タスクによるメモリアクセス
タスクが保護属性の設定されたアドレスをアクセスする際には、アクセスしようとしている対象領域が保護領域であることを指定してアクセスする。この保護領域の指定は、プロセッサコア１０２にあるＭＴＲ（memory tape range）レジスタ４０１によっておこなわれる。
【００５１】
図５は、ＭＴＲレジスタ４０１の形式を示す。ＭＴＲレジスタ４０１は２ワードからなるレジスタであり、第１のワード４０１ａに対象領域の先頭アドレスを、第２のワード４０１ｂにサイズを書き込み、さらに、フィールド４０２に秘密保護ビット１を設定する。これにより、指定されたアドレス領域にタスクが要求する秘密保護属性（ＲＰＡ：requested protection attribute）が設定される。要求秘密保護ビットに０を書き込むと、それまで設定されていた秘密保護属性が無効となる。
【００５２】
あるメモリアクセスが保護になるか、非保護になるかは、ＭＴＲレジスタ４０１によるアドレス範囲の指定と、アクセス対象のアドレスの組み合わせにより決定される。アクセス対象アドレスがＭＴＲレジスタ４０１の指定範囲内にあれば、それは保護対象となる。タスクが利用できるＭＴＲレジスタは複数個あってもよい。
【００５３】
図６は、メモリアクセスの手順を示すフローチャートである。メモリアクセスの手順を説明する。タスクを実行するために、コア１０２がデータキャッシュ１０５に読み出し要求を出す時、現在実行中のタスクＩＤとタスクにより要求される要求秘密保護ビットとが、アドレスとともに出力される（Ｓ６０１）。一方、対象領域のアクセス時には、内部メモリ１１０のユーザエリア１１１から内容がデータキャッシュ１０５に読み込まれる。このとき、ＭＰＡテーブル５０１からメモリアドレスに対応するエントリが読み出され、エントリに記述されたタスクＩＤとメモリ秘密保護ビットが、対応するキャッシュラインのタグに書き込まれる（Ｓ６０２）。メモリ秘密保護ビットと要求秘密保護ビットとの取得順序は不問であり、同時に行われてもよい。
【００５４】
メモリアクセス時にコア１０２から出力される要求秘密保護属性（ＲＰＡ）は、あるタスクから見てアクセス対象のメモリに設定されているべきメモリ保護属性である。したがって、この要求秘密保護属性（ＲＰＡ）と、アクセス対象である内部メモリ領域の秘密保護属性（ＭＰＡ）とは一致していなければならない。
【００５５】
そこで、ステップＳ６０３で、メモリ保護モジュール１０６において、キャッシュタグに書き込まれたメモリ秘密保護ビットと、コア１０２から出力された要求秘密保護ビットが比較される。比較結果が一致する場合（Ｓ６０３でＹＥＳ）はステップＳ６０４に進み、今度はキャッシュタグに書き込まれたタスクＩＤと、コア１０２から出力されたタスクＩＤが一致するかどうかを判断する。Ｓ６０３とＳ６０４の判断順序は問わず、同時であってもよい。
【００５６】
秘密保護ビットとタスクＩＤの双方が一致した場合にのみステップＳ６０５へ進み、実行しようとするタスクにメモリページのアクセス権があるかどうかを判断する。これは、ＯＳによる資源保護の関係で、メモリ管理ユニットＭＭＵにおいてタスクによる対象メモリ領域のアクセスが禁止されている場合があるからである。アクセス権が認められていれば（Ｓ６０５でＹＥＳ）、対象のメモリ領域にアクセスが許可され、ステップＳ６０６でメモリ操作が実行される。アクセスが禁止されている場合は（Ｓ６０６でＮＯ）、ステップＳ６０８で資源保護例外が発生する。
【００５７】
一方、ステップＳ６０３で、キャッシュタグに書き込まれたメモリ秘密保護ビットと、コア１０２から出力されるタスク要求による秘密保護ビットとが不一致の場合（Ｓ６０３でＮＯ）、あるいは、ステップＳ６０４でタスクＩＤが不一致の場合は、ステップＳ６０７でプロセッサコア１０２に対して秘密保護例外の発生を通知する。この結果、このタスクの実行は中断され、再開は不可能となる。
【００５８】
たとえば、タスクｋが対象領域へアクセスしようとするときに、ＭＴＲレジスタ４０１に正しい保護領域が設定されておらず、秘密保護されている対象領域に対して秘密保護なしとしてアクセスした場合は、たとえタスクＩＤが一致していても、メモリ保護モジュール１０６はアクセス違反と判断する。また、コア１０２から出力される要求保護ビットが、秘密保護指定してメモリアクセスしようとしているときに、キャッシュタグに書き込まれたメモリ保護ビットが秘密保護なしの領域を対象としている場合も同様に、アクセスは許可されない。
【００５９】
このような秘密保護例外の判断基準と、資源保護例外の判定基準は、互いの判定結果や順序に依存せず独立である。
【００６０】
なお、ＯＳとのデータ交換で、非保護メモリをアクセスする場合には、それはＭＴＲレジスタ４０１に指定した領域外であり、かつＭＰＡテーブル５０１のエントリの秘密保護ビットは０のはずなので、アクセスは当然成功する。
【００６１】
もしタスクｋのために割り当てられた内部メモリのメモリ領域を、他のタスクがアクセスした場合、コア１０２から送られるタスクＩＤと、キャッシュタグのタスクＩＤとが一致しないため、当然秘密保護例外が発生し、違反アクセスをしたタスクの実行が中断される。
【００６２】
なお、プログラム領域における保護プログラム領域の保護方法には触れていなかったが、上述したタスク処理と同様に、タスク生成命令によるプログラムのロード時に、対応する領域のＭＰＡテーブル５０１に秘密保護属性を設定することによって実現される。プログラム領域のメモリアクセスの場合には、要求される秘密保護属性ＲＰＡはＭＴＲレジスタ４０１によって定義されるのではなく、実行中のタスクＩＤがそのまま使われる。
【００６３】
タスクの切替
メモリ操作が適正におこなわれタスクｋが実行されているときに、割り込みが発生すると、その時点でのワーキングレジスタ１１４の情報は、図３に示すように、コンテキストテーブル１１６のタスクＩＤ＝ｋのエントリに一時的に退避され、ＯＳに制御が移される。このコンテキストテーブル１１６の内容はプライバシマネージャ３０１のみが知ることができ、ＯＳや他のタスクがその内容を見ることはできない。同じくコア１０２のＭＴＲレジスタ４０１も、タスクｋが要求する要求保護属性（ＲＰＡ）を指定するため、タスクｋのレジスタ情報として、他のタスクによるアクセスから保護される。
【００６４】
ＯＳによるメモリの解放
ＯＳは、秘密保護属性が設定されたメモリを、強制的に解放して他の目的に使うことができる。ＯＳは、解放対象のメモリ領域を指定して秘密保護強制解放命令を発行する。命令の発行により、プライバシマネージャ３０１は対象領域のＭＰＡテーブル５０１を保護無しに書き換えると同時に、対応するユーザメモリ領域１１１を所定の値に初期化して、格納されていた情報を消去する。
【００６５】
秘密保護属性が保護無しに書き換えらたことによって、ＯＳはこのメモリ領域を他のタスクに割り当てる、あるいはＯＳ自身で使うなど、別の用途に使うことができる。
【００６６】
このメモリ解放機能により、秘密の保護と、ＯＳによる適切なメモリ資源管理が両立する。
【００６７】
タスクの終了
ＯＳは、秘密保護されたタスクを終了する時、このタスクＩＤを指定して、タスク終了命令を発行する。タスク終了命令の発行により、プライバシマネージャ３０１は、タスクの秘密保護属性が設定されたＭＰＡテーブル５０１の対応するエントリを、保護無しの値に書き換える。同時に、そのメモリ領域をメモリ解放時と同様に初期化する。このタスク終了機能により、タスクが保持する秘密を漏洩することなく、タスクＩＤを再利用することができる。
【００６８】
メモリアクセスの統合性保証効果
上記したマイクロプロセッサ１００の構成により、メモリアクセスの保護が一貫して保証できることを説明する。
【００６９】
タスクＴ0 が、あるアドレスＡ0 のメモリページＭ0 に対して、Ｍ0の初期状態からＯｐ１〜Ｏｐｎ までｎ回のメモリ操作をおこなうとする。初期状態は不定であってよいが、Ｏｐ１〜Ｏｐｎ の操作を確実におこなって、最終状態の結果を得る必要がある。その過程で別のタスクによるメモリ操作が加わったり、Ｏｐ１〜Ｏｐｎの操作順序が変更されたり、省略されてもならない。一連の操作の途中で一度ページが初期化されても、結果は期待と異なるものになってしまう。
【００７０】
第１実施形態の方法では、最初にタスクＴ0 がメモリページＭ0 を確保して秘密保護属性を設定する命令を発行する。これにより、メモリページＭ0 に対応するＭＰＡテーブル５０１のエントリに、秘密保護ビット“１”とタスクＩＤを設定する。その後、ＭＴＲレジスタ４０１にＭ0 のアドレスを設定して、Ｏｐ１〜Ｏｐｎ の操作を行う。プログラム自身は暗号化されており、攻撃者が順序変更などを行うことは困難であり、タスク自身によるメモリページの秘密保護属性設定、ＭＴＴレジスタ３０１の設定、Ｏｐ１〜Ｏｐｎ の操作の順序が正しいことは保証される。
【００７１】
次に、メモリページＭ0 は実アドレスによって参照されるため、アドレスとして参照されるページは、常にただひとつだけであることが保証される。
【００７２】
したがって、Ｏｐ１〜Ｏｐｎ のアクセスにおいて、秘密保護例外が発生せずアクセスが成功したということは、確かに対象メモリページＭ0 に対してＯｐ１〜Ｏｐｎ の操作が行われたということになる。
【００７３】
また、あるメモリページに秘密保護属性を設定できるのは、タスク自身であり、このタスクは、Ｏｐ１〜Ｏｐｎ の操作の前に、１回だけしか秘密保護属性の設定を行っていない。メモリページへのＯｐ１〜Ｏｐｎ のアクセスは、ＭＴＲレジスタ４０１において秘密保護ビット１を指定して行なわれている。仮にこの間にＯＳがメモリページの解放を行っていたとすると、Ｏｐ１〜Ｏｐｎ においてＭＴＲレジスタ４０１で指定された保護属性（ＲＰＡ）と、メモリページの保護属性（ＭＰＡ）の不一致が生じ、秘密保護例外が発生してタスクの実行はそこで中止されていたはずである。
【００７４】
よって、Ｏｐ１〜Ｏｐｎ のアクセスにおいて、秘密保護例外が発生せずにアクセスが成功したということは、これらの操作の間に一度もＯＳによるメモリの解放が行われていないといえる。
【００７５】
このように、第１実施形態のマイクロプロセッサの構成により、上述したメモリ操作の統合性、一貫性を保証することができる。そして、このメモリ操作の統合性は、ＯＳによる強制的メモリ解放（資源管理）と、タスクによる非保護メモリページのアクセスと両立している。
【００７６】
このような資源管理と秘密保護の両立は、タスクのみがメモリの秘密保護属性を設定できることと、メモリアクセス時に、メモリページに設けられたメモリ保護属性ＭＰＡと、タスクが保持す要求保護属性ＲＰＡを比較して属性が一致した場合のみアクセスを許可することを組み合わせた結果、実現されるものである。
【００７７】
もっとも、ＭＰＡとＲＰＡが一致した場合のみメモリアクセスを許可するという構成は、保護メモリと非保護メモリのアクセスが混在する場合において、タスクによる明示の秘密保護属性設定がなくても、単独でメモリ操作の安全性を高める効果がある。
【００７８】
＜第２実施形態＞
第１実施形態では、内部メモリの秘密保護属性の設定は、タスクが発行する明示的な命令によりおこなわれていた。第２実施形態では、メモリの秘密保護属性の設定は、メモリアクセスによって暗黙に行なわれる。すなわち、メモリページが秘密保護されていない状態（すなわちメモリ保護属性ＭＰＡが０）のときに、タスクが秘密保護を要求する状態（すなわち要求保護属性ＲＰＡの値が１）でメモリにアクセスすると、自動的に対応するＭＰＡエントリのフィールドに、メモリ保護ビット１が設定される。同時にメモリ内容が乱数により初期化される。この構成により、メモリ内容の安全性はさらに向上する。
【００７９】
メモリアクセス時に、対象メモリ領域に秘密保護属性定が黙示的に設定されること以外は、第１実施形態と同様である。以下、メモリアクセス時の黙示の秘密保護属性設定について、詳細に説明する。
【００８０】
図７は、黙示の秘密保護属性設定を含むメモリアクセスの手順を示すフローチャートである。あるメモリ領域にアクセスするにあたって、それが保護領域としてアクセスされるか否かは、第１実施形態と同様に、ＭＴＲレジスタ４０１のアドレス範囲指定と、対象アドレスの組み合わせにより決定される。
【００８１】
まずステップＳ７０１で、要求秘密保護属性（ＲＰＡ）を構成する秘密保護ビットとタスクＩＤが、対象アドレスとともにコア１０２から出力される。一方、ステップＳ７０２で、キャッシュタグに格納されている対応するメモリページのＭＰＡ保護ビットとタスクＩＤがメモリ保護モジュール１０６で取得される。
【００８２】
ステップＳ７０３でＲＰＡとＭＰＡの秘密保護ビットの一致が判定される。一致した場合、ステップＳ７０４でタスクＩＤの一致が判定され、あとは第１実施形態と同様に、Ｓ７０５、Ｓ７０６、Ｓ７１１で資源保護判断が処理される。
【００８３】
一致しない場合は（Ｓ７０３でＮＯ）、ステップＳ７０７に進み、ＲＰＡの秘密保護ビットが１であるか否かを判断する。ＲＰＡの秘密保護ビットが１ならば（Ｓ７０７でＹＥＳ）、ステップＳ７０８で処理はプライバシマネージャ３０１に移り、アクセス対象メモリページのＭＰＡエントリに、秘密保護ビットの値１と、アクセスしたタスクのタスクＩＤが設定される。さらに、ステップＳ７０９で、乱数によってそのページの内容がすべて初期化される。その後、ステップＳ７０４へ進んで、タスクＩＤの一致が判断され、以後の処理は第１実施形態と同様である。
【００８４】
ステップＳ７０７でＲＰＡの秘密保護ビットが１でないとき（すなわち０のとき）は、そのアクセスは秘密保護違反として扱われ、ステップＳ７１０で秘密保護例外が発生する。
【００８５】
第２実施形態の構成により、ＯＳによる意図なメモリ改変から、タスクのメモリアクセスが一貫して保護されることを補足説明する。
【００８６】
タスクＴ0 が、あるアドレスＡ0 のメモリページＭ0 に対して、Ｍ0の初期状態からＯｐ１〜Ｏｐｎ までｎ回のメモリ操作をおこなうとする。初期状態は不定であってよいが、Ｏｐ１〜Ｏｐｎ の操作を確実におこなって、最終状態の結果を得る必要がある。その過程で別のタスクによるメモリ操作が加わったり、Ｏｐ１〜Ｏｐｎの操作順序が変更されたり、省略されてもならない。一連の操作の途中で一度ページが初期化されても、結果は期待と異なるものになってしまう。
【００８７】
第２実施形態の方法では、タスクＴ0 はＭＴＲレジスタ４０１にメモリページＭ0 のアドレスを設定して、メモリページＭ0 に対してＯｐ１のメモリ操作を発行する。その際、メモリページＭ0 にメモリ秘密保護属性が設定される。初期状態では、メモリページＭ0 には保護属性がまだ付与されていないはずである。タスクＴ0 はその後、Ｏｐ１〜Ｏｐｎを行う。
【００８８】
まずプログラム自身は暗号化されており、攻撃者が順序変更などを行うことは困難である。したがって、メモリページの秘密保護属性設定、ＭＴＲレジスタ４０１の設定、Ｏｐ１〜Ｏｐｎ の操作の順序が正しいことは保証される。
【００８９】
次に、メモリページは実アドレスによって参照されるため、あるアドレスで参照されるページは常にただひとつだけである。したがって、Ｏｐ１〜Ｏｐｎ のアクセスにおいて、秘密保護例外が発生せずアクセスが成功したということは、確かに対象メモリページＭ0 に対して、Ｏｐ１〜Ｏｐｎ の操作が行われたということになる。
【００９０】
また、あるメモリページにそのタスクの秘密保護属性を設定できるのは当該タスクだけであり、このタスクによって秘密保護属性が設定されるのは、Ｏｐ１〜Ｏｐｎ の操作の際に限られる。ただし、その際にはメモリページの内容は乱数によって初期化されてしまう。
【００９１】
したがって、この間にＯＳが一旦メモリページの解放を行い、Ｍ0 の内容を意図したように書き換えたとしても、その場合、保護属性がクリアされてしまう。この結果、内容は必ず乱数により初期化されてしまい、意図的な改変は成功しない。もちろん、タスクの正常な動作は妨害されるが、その結果が攻撃者の意図した結果を生む可能性は一般に極めて低いといえる。
【００９２】
第２実施形態の構成により、タスクの秘密メモリを意図的な改変から保護することができる。このような保護は、ＯＳによる強制的メモリ解放およびタスクによる非保護メモリページのアクセスと両立している。
【００９３】
＜第３実施形態＞
第１および第２の実施形態では、実アドレス方式のマイクロプロセッサを対象として、タスクの秘密の安全性とＯＳによるメモリ管理が両立し、同時に、タスクとＯＳの通信が確保され、メモリ操作の一貫性が保証される秘密保護方式を説明した。
【００９４】
第３実施形態は、仮想記憶機構を持つ内部メモリ型プロセッサに関する。特に、仮想記憶機構をもつプロセッサにおいて問題となるメモリページすりかえ攻撃の防止を説明する。
【００９５】
仮想記憶機構を持つシステムでは、ＯＳは物理メモリの任意のページを任意の仮想アドレスに割り当てることができる。また、この割当はタスクに応じて異なる割当を使うことができる。割当の記述には、ページテーブルと呼ばれる内部メインメモリ上の表が使われる。ページテーブルについては、後述する。
【００９６】
メモリアクセスにあたって、仮想アドレスを高速に物理アドレスに変換するために、ページテーブルの必要な部分だけを特殊なキャッシュメモリに読み込んでおくことが多い。この一時メモリはＴＬＢ（translation lood-aside buffer）と呼ばれる。
【００９７】
ページテーブルのＴＬＢへの読み込みは、プロセッサハードウェアによっておこなわれるものと、ソフトウェアによるものの２種類がある。前者の例にはIntel社のPentiumがあり、後者の例にはＭＩＰＳ社のＲ３０００がある。第３実施形態でのＴＬＢへの読み込みは、どちらの場合にも適用可能である。
【００９８】
図８は、第３実施形態のマイクロプロセッサにおけるＴＬＢ構成を示す。第３実施形態での秘密保護属性の設定は、第１実施形態と同じくタスクによる明示の設定とする。したがって、ＴＬＢ構成以外の部分については、図１に示すものと同様である。
【００９９】
まず、内部メモリ１１０のユーザエリア１１１に、ページテーブル１１１−１が設定される。また、ＭＰＡテーブル５０１のエントリ（図４参照）に、タスクＩＤに加えて当該メモリページに指定された仮想アドレスを格納するフィールドを含む。
【０１００】
次に、命令キャッシュ１０４はＰ−ＴＬＢ（１０４−１）とＲ−ＴＬＢ（１０４−２）を有し、データキャッシュ１０５も同様に、Ｐ−ＴＬＢ（１０５−１）とＲ−ＴＬＢ（１０５−２）を有する。Ｒ−ＴＬＢはアドレス変換のためのＴＬＢである。一方、Ｐ−ＴＬＢはメモリ秘密保護属性を格納するものであり、Ｒ−ＴＬＢを補完してタスクの秘密保護をより安全にする。Ｒ−ＴＬＢとＰ−ＴＬＢのエントリは一対一対応に存在し、Ｒ−ＴＬＢへ書き込みを行うことによって、後述する処理がＰ−ＴＬＢに対して自動的に行われる。換言すると、Ｐ−ＴＬＢの更新は、Ｒ−ＴＬＢの書き込みを契機として間接的に行なわれ、プライバシマネージャ３０１以外がＰ−ＴＬＢを明示的に操作することはできない。
【０１０１】
第３実施形態においては、タスクの秘密保護属性の要素として属性指定時の仮想アドレスが保持される。上述したように、第１実施形態と同様に、タスクによる秘密保護属性の設定命令の発行時に、仮想アドレスの設定が行なわれるものとする。仮想アドレスには、タスクが指定したアドレスが使われる。ここでは物理アドレスＰ0 のメモリページＭ0 が仮想アドレスＶ0 にマップされているものとする。この時、プライバシマネージャ３０１が保護属性を書き込む
ＭＰＡテーブル５０１のエントリとして、メモリページＭ0 の物理アドレスＰ0 に対応するエントリが選択される。選択されたＭＰＡエントリには、タスクＩＤと、メモリページＭ0 の仮想アドレスＶ0 が書き込まれる。物理ページに割り当てられる仮想アドレスはタスクによって異なる場合があるが、第３実施例ではタスク間の保護メモリ共有を考えていないため、当該メモリに保護属性が設定されている以上、他タスクのアクセスはありえないので問題はない。
【０１０２】
図９は、第３実施形態のマイクロプロセッサにおけるメモリアクセスの手順を説明する。
【０１０３】
ステップＳ８０１において、あるメモリページＭ0 がアクセスされる時、データの読み込みに先立って、アクセス対象の仮想アドレスＶ0 に対応するエントリが取得される。ステップＳ８０２で、取得したエントリを、ページテーブル１１１−１からデータキャッシュ１０５のＲ−ＴＬＢにロードして、仮想アドレスＶ0 から物理アドレスＰ0 への変換の準備が行われる。Ｒ−ＴＬＢへのロードは、ハードウェアまたはソフトウェア（ＯＳ） によって行われる。
【０１０４】
ロードが行われると、ステップＳ８０３で自動的に、変換先の物理アドレスＰ0 に対応するＭＰＡエントリがプライバシマネージャ３０１によって読み出される。ステップＳ８０４で、ＭＰＡテーブル５０１から読み出された設定時の仮想アドレスＶ0 が、変換元であるＲ−ＴＬＭの仮想アドレスと照合され、一致するかどうか判断される。
【０１０５】
一致すれば（Ｓ８０４でＹＥＳ）、ＴＬＢロードは成功する。一致しなければ（Ｓ８０４でＮＯ）ＴＬＢロードは失敗し、ステップＳ８０６で秘密保護例外が発生する。
【０１０６】
ＴＬＢのロードが成功すると、対応するデータキャッシュのＰ−ＴＬＢ（１０５−１）に、ＭＰＡエントリのタスクＩＤと、秘密保護の有無が書き込まれる。さらに、Ｒ−ＴＬＢ（１０５−２）を参照したアドレス変換の結果読み込まれるキャッシュラインのタグに、対応するＰ−ＴＬＢ（１０５−１）のエントリに書かれたタスクＩＤと秘密保護の有無が書き込まれる。その後の処理は第１実施形態の処理と同様である。
【０１０７】
第１実施形態においては、物理メモリ対応に保持されるメモリ保護属性（ＭＰＡ）とタスクが要求する要求保護属性（ＲＰＡ）には、それぞれ秘密保護ビットとタスクＩＤが含まれ、その比較はコアからのメモリアクセス要求時に行なわれていた。
【０１０８】
第３実施形態においては、メモリ保護属性（ＭＰＡ）と要求保護属性（ＲＰＡ）の比較は、ページ単位に行なわれるＴＬＢのロード時と、ワード単位に行なわれるメモリアクセス時に分散して行われる。ＴＬＢのロード時には、タスクが要求する仮想アドレスＶ0 と、ＭＰＡテーブル５０１に保持された保護属性設定時の仮想アドレスが比較されている。メモリアクセス時には、第１実施形態と同様に、秘密保護ビットとタスクＩＤが比較されている。
【０１０９】
第３実施形態でも基本的には、タスクの実行の結果生成された要求保護属性ＲＰＡと、対象領域であるメモリの保護属性を記述するメモリ保護属性ＭＰＡ とが比較されているが、比較が属性の項目毎に、時間的に分散して、異なる粒度でなされている点が異なる。
【０１１０】
第３実施形態の構成は、以下のような攻撃に対して、メモリ操作の統合性を保証できる点で有効である。
【０１１１】
あるタスクについて、保護属性が設定されたメモリページＭ0 、Ｍ１ を、それぞれ仮想アドレスＶ0 、Ｖ１ に配置し、その後処理Ｏｐ１ 〜Ｏｐｎ を実施する場合を考える。Ｏｐ１ 〜Ｏｐｎの処理はあらかじめＶ0 とＶ１ のどちらで行われるか決まっている。
【０１１２】
ところが、仮想記憶機構を使えば、Ｏｐ１ 〜Ｏｐｎ の操作の任意の時点で物理メモリページＭ0 、Ｍ１ の仮想アドレス上の配置を入れ換えることができる。例えば、メモリページＭ１に対する操作がメモリクリアであれば、操作対象のメモリページの仮想アドレスを入れ換えることで、メモリページＭ0 をクリアすることができてしまう。この場合、処理はプログラム作成者の意図とは異なったものとなるが、第１実施形態のような実アドレスのみを前提とした構成では、このようなすり替え攻撃を防ぐことはできない。
【０１１３】
第３実施形態では、メモリ秘密保護属性設定時に参照した仮想アドレスを、物理メモリページの秘密保護属性定義として保存しておき、アドレス変換の実行時に変換対象の仮想アドレスと、保存されたアドレスとを比較する。そして不一致が生じた場合にアクセスを禁止することにより、上述したメモリページ再配置攻撃を防止している。第３実施形態では、ＴＬＢのロード時に比較処理することで処理の効率化をはかっているが、プロセッサコアによるメモリ参照の都度、比較を行ってもよい。この場合、効率は多少低下するものの、同様の効果が得られる。
【０１１４】
なお上記の例では、仮想メモリを用いた場合のメモリアクセスの統合性保証を、タスクが明示的にメモリ秘密保護属性設定命令を発行する構成と組み合わせて説明した。しかし、仮想アドレスの比較処理そのものは、単独で使用しても仮想記憶を利用したメモリ交換攻撃の防止に有効であることを付け加えておく。
【０１１５】
また、秘密保護属性命令の発行時には、対応する物理アドレスの変換を定義したＰ−ＴＬＢをいったんフラッシュしておくことが望ましい。秘密保護属性命令の発行前に読み込まれたＴＬＢエントリが残存する場合、不都合が生じるからである。たとえば、非保護状態のＴＬＢエントリを参照した結果読み込まれたキャッシュラインをタスクが参照すると、期待に反して秘密保護属性が設定されておらず、秘密保護例外が発生して処理が中止されてしまう。そこで、秘密保護属性命令発行時には、Ｐ−ＴＬＢをフラッシュすることが望ましい。
【０１１６】
＜第４実施形態＞
第１〜第３実施形態では、内部メモリ型耐タンパプロセッサにおいて、タスクによる排他的なメモリアクセスを実現する構成を説明した。
【０１１７】
第４実施形態では、秘密を共有する複数のタスクが、あるメモリ領域を共有でき、かつ秘密を保持しないタスクには排他的なアクセスを可能にする構成例を説明する。
【０１１８】
第４実施形態においても、基本構成は図１に示す第１実施形態の構成と同様である。したがって、以下では変更点を中心に説明することとする。
【０１１９】
まず、タスクが内部メモリの共有領域にアクセスするための秘密保護情報はＭＴＲレジスタ４０１に保持される。第１および第２実施形態では、ＭＴＲレジスタ４０１にはアドレス領域のみが保持されていたが、第４実施形態では、アドレス領域に加えて、共有のための秘密値が保持される。秘密値はタスクが秘密保護属性設定時に指定する。そして、この秘密値はメモリ参照時に要求秘密保護属性（ＲＰＡ）として使用される。なお、秘密値の長さは総当たり攻撃を防止するため、１２８bit 以上であることが望ましい。
【０１２０】
また、この秘密値は、タスクによりメモリページに秘密保護属性が設定される時にも指定され、ＭＰＡテーブル５０１の対応するエントリに格納される。したがって、第４実施形態では、ＭＰＡテーブル５０１のエントリに格納されるのは、保護の有無、タスクＩＤ、仮想アドレス、秘密値の４項目となる。
【０１２１】
プログラムのロード時に、プログラム領域のメモリ保護属性（ＭＰＡ）が設定される場合、ＭＰＡエントリの秘密値には、プログラムを暗号化していたプログラム鍵の値が書き込まれる。
【０１２２】
図１０は、第４実施形態のマイクロプロセッサにおけるメモリアクセスの手順を示す。
【０１２３】
アクセスの可否は、すでに説明した第１〜第３実施形態と同様、プロセッサコア１０２から出力される要求秘密保護属性（ＲＰＡ）と、キャッシュタグに格納されたメモリ秘密保護属性（ＭＰＡ）の一致によって判定される。
【０１２４】
すなわち、ステップＳ９０１で、コアからは保護の有無を示す秘密保護ビット、タスクＩＤ、仮想アドレス、秘密値が得られ、ステップＳ９０２で、キャッシュタグに書き込まれたメモリ保護ビット，タスクＩＤ，仮想アドレス、秘密値が得られる。コアからの出力される４項目のうち、要求秘密保護属性（ＲＰＡ）として使用されるのは、タスクＩＤを除く３項目である。これは、タスク間でメモリが共有されるため、判定基準をタスクＩＤに依存せず、秘密値の合致におきかえたためである。
【０１２５】
ステップＳ９０３で、メモリ保護モジュール１０６において、コアから出力されたＲＰＡの秘密保護ビットと、キャッシュタグに書き込まれたＭＰＡの秘密保護ビットが比較される。不一致の場合は、第１〜第３実施形態と同様に、ステップＳ９０８で秘密保護例外が発生する。
【０１２６】
ステップＳ９０３で、両者の秘密保護ビットが一致する場合は、ステップＳ９０４、Ｓ９０５で、両者（ＲＰＡとＭＰＡ）の仮想アドレスと秘密値とが、それぞれ比較される。一致しない場合は、ステップＳ９０８で秘密保護例外が発生する。
【０１２７】
秘密保護の面で秘密保護ビット、仮想アドレス、秘密値のすべてが一致したならば（Ｓ９０３〜Ｓ９０５ですべてＹＥＳ）、ステップＳ９０６に進み、資源保護の面でタスクＩＤが一致するかどうかを判断する。不一致の場合はステップＳ９０９で資源保護例外が発生する。一致する場合は、ステップＳ９０７でメモリ操作が実行される。
【０１２８】
第４実施形態のマイクロプロセッサの具体的な利用態様としては、たとえば複数のプログラムにあらかじめ共通の秘密Ｘが埋め込まれており、あるプログラムから生成されたタスクＡが共有メモリ領域を確保して秘密値Ｘを設定しておき、別のタスクＢがＭＴＲレジスタ４０１に秘密値Ｘを設定してアクセスする例が挙げられる。秘密値Ｘは、あらかじめ定められたもの以外に、Diffy-Hellman 法などのよく知られた鍵共有方式によって共有されたものでもよい。
【０１２９】
図１０のフローチャートで説明したように、秘密値Ｘを知らないタスクによるこのメモリ共有領域へのアクセスは秘密保護例外となり、当然失敗する。したがって、秘密値Ｘを知るタスクだけの排他的なメモリ共有が実現できる。
【０１３０】
第４実施形態では、メモリ領域の排他的な（安全な）共有を、タスクによるメモリ秘密保護属性の設定命令と組み合わせて説明した記述した。しかし、秘密値をＭＰＡ，ＲＰＡに利用してメモリ領域の共有を安全に行う方法は、タスクが発行した秘密保護属性の設定命令の存在に依存するわけではなく、単独でタスク間の安全なメモリ共有を可能にすることを付記しておく。
【０１３１】
【発明の効果】
以上説明したように、内部メモリ型のマイクロプロセッサにおいて、マルチタスク環境下において、ＯＳによる内部メモリの資源管理と秘密保護とを両立させ、ＯＳとタスクとの通信を確保しつつ、複数プログラムを意図的改変から保護することができる。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係る内部メモリ型耐タンパプロセッサの概略構成図である。
【図２】図１の耐タンパプロセッサにおける内部メモリマップの図である。
【図３】図１の耐タンパプロセッサにおけるタスク開始とメモリ確保を説明するための図である。
【図４】図１の耐タンパプロセッサにおけるＭＰＡテーブルの構成例を示す図である。
【図５】図１の耐タンパプロセッサにおけるＭＴＲレジスタの構成例を示す図である。
【図６】図１の耐タンパプロセッサのメモリアクセス手順を示すフローチャートである。
【図７】本発明の第２実施形態に係るメモリアクセス手順を示すフローチャートである。
【図８】本発明の第３実施形態に係る耐タンパプロセッサの秘密保護機構の概略構成図である。
【図９】第３実施形態の耐タンパプロセッサのメモリアクセス手順を示すフローチャートである。
【図１０】本発明の第４実施形態の耐タンパプロセッサにおけるメモリアクセス手順を示すフローチャートである。
【図１１】一般的なマルチパーティのアプリケーション保護環境を示す概略図である。
【符号の説明】
１００  内部メモリ型耐タンパプロセッサ
１０１  プロセッサパッケージ
１０２  プロセッサコア
１０３  キャッシュモジュール
１０４  命令キャッシュ
１０５  データキャッシュ
１０４−１、１０５−１  Ｐ−ＴＬＢ
１０４−２、１０５−２  Ｒ−ＴＬＢ
１０６  メモリ保護モジュール（メモリ保護手段）
１０７  バスインターフェイスユニット
１０８  暗号モジュール（復号化手段）
１０９  ファームウェア
１１０  内部メモリ
１１１  ユーザエリア
１１１−１  ページテーブル
１１２  秘匿エリア
１１４  ワーキングレジスタ
１１６  タスクコンテキストテーブル
１１７  タスクキーテーブル
３０１  プライバシマネージャ（秘密保護管理部）
４０１  ＭＴＲレジスタ（要求秘密保護属性保持部）
５０１  ＭＰＡテーブル（メモリ秘密保護属性保持部）
【図１】
0003866597.tif 000002
【図２】
0003866597.tif 000003
【図３】
0003866597.tif 000004
【図４】
0003866597.tif 000005
【図５】
0003866597.tif 000006
【図６】
0003866597.tif 000007
【図７】
0003866597.tif 000008
【図８】
0003866597.tif 000009
【図９】
0003866597.tif 000010
【図１０】
0003866597.tif 000011
【図１１】
0003866597.tif 000012