JP2009064462A - マイクロプロセッサ - Google Patents
マイクロプロセッサ Download PDFInfo
- Publication number
- JP2009064462A JP2009064462A JP2008276073A JP2008276073A JP2009064462A JP 2009064462 A JP2009064462 A JP 2009064462A JP 2008276073 A JP2008276073 A JP 2008276073A JP 2008276073 A JP2008276073 A JP 2008276073A JP 2009064462 A JP2009064462 A JP 2009064462A
- Authority
- JP
- Japan
- Prior art keywords
- task
- key
- address
- program
- data
- 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.)
- Granted
Links
Images
Landscapes
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】少ない秘密に基づいて暗号化プログラムの内容をOSからも効率的に保護することのできる耐タンパプロセッサを提供する。
【解決手段】マイクロプロセッサは、固有のプログラム鍵で暗号化したプログラムを格納している外部メモリのアドレスを指定して読み出し要求を発行するプロセッサコアと、読み出し要求に応じて外部メモリの指定したアドレスのデータを読み出すI/Fと、タスク毎のタスク識別子に対応してプログラム鍵を保持するタスク鍵テーブルと、プログラムの先頭アドレスをオフセット値として保持するオフセットテーブルと、読み出し要求で指定したアドレスとオフセットテーブルのタスク識別子で指定したオフセット値とから計算した相対アドレス値をプログラム鍵で暗号化したブロック対応鍵を生成する鍵生成部と、データをブロック対応鍵で復号化する暗号処理部と、データをキャッシュライン単位に読み込むキャッシュメモリとを備える。
【選択図】図2
【解決手段】マイクロプロセッサは、固有のプログラム鍵で暗号化したプログラムを格納している外部メモリのアドレスを指定して読み出し要求を発行するプロセッサコアと、読み出し要求に応じて外部メモリの指定したアドレスのデータを読み出すI/Fと、タスク毎のタスク識別子に対応してプログラム鍵を保持するタスク鍵テーブルと、プログラムの先頭アドレスをオフセット値として保持するオフセットテーブルと、読み出し要求で指定したアドレスとオフセットテーブルのタスク識別子で指定したオフセット値とから計算した相対アドレス値をプログラム鍵で暗号化したブロック対応鍵を生成する鍵生成部と、データをブロック対応鍵で復号化する暗号処理部と、データをキャッシュライン単位に読み込むキャッシュメモリとを備える。
【選択図】図2
Description
本発明は、マルチタスクのプログラム実行環境下で、実行コードや処理対象であるデータの不正な改変を防止することのできる耐タンパマイクロプロセッサに関する。
PCなどの一般ユーザ向けコンピュータのハードウェア情報や、オペレーションシステム(以下、「OS」とする)のシステムプログラム情報が、特に秘密にされることなく開示されているオープンシステムが広く普及している。
オープンシステムでは、エンドユーザがシステムプログラムを変更して、所望の改良を加えることができる。
このような環境下で、アプリケーションプログラムが扱う情報の著作権や、プログラム自体の著作権を保護するには、あらかじめシステムのOSがアプリケーションに対して敵対的動作をとり得ることを想定した秘密保護能力のあるハードウェアが必要である。
実際、このような秘密保護機能を有するハードウェア、特にマイクロプロセッサが提案されている(特許出願第2000−35398号,Lie et al., “Architectural Support for Copy and TamperResistant Software”;Computer Architecture News 28(5):p168- 等)。
秘密保護能力を有するマイクロプロセッサは、マルチタスク環境下で、プログラム自体やプログラムが扱う情報が不正に覗き見され、改変されないように、これらの情報を暗号化する機能を備えている。
このようなマイクロプロセッサを、耐タンパプロセッサと呼ぶ。
耐タンパプロセッサの主目的は、エンドユーザのシステムで動作するアプリケーションを保護することにより、プログラムやコンテンツ、ネットワークサービスの権利者の権利を保護することである。具体的には、(1)プログラムに実装されたアルゴリズムの保護、(2)プログラムに埋め込まれたトレードシークレットや、コンテンツの保護、(3)プログラム動作の改変からの保護、の3つが挙げられる。
プログラムに実装されたアルゴリズムの保護は、プログラムの権利者を保護するために必要である。プログラムに埋め込まれたトレードシークレットの保護は、プログラムが扱うコンテンツの不正コピーを防止するために必要である。不正な改変からの保護は、たとえばサービスプロバイダの権利を保護するために必要である。
ネットワークサービスを利用するプログラムが、課金情報をサーバとやりとりするようなアプリケーションでは、特に、課金情報の送信動作を正しく実行し、不正な改変を防止することが重要である。実際の例として、PCでDVDを再生するプログラムが解析され、そこからDVDの暗号を解読するためのトレードシークレットが読みとられて不正にDVDをコピーするプログラム(DeCSS)が作られたことはよく知られている。
オープンシステムにおいて、単純にアプリケーションプログラムの秘密を保護する機構は従来から提案されているが、本件の出願人は、ひとつのシステム上で複数のプログラム(複数の異なるプログラムベンダからのプログラムあるいは単一のベンダからの複数の異なるプログラム)が擬似並列的に動かされる場合に、その各々について、システムの資源を管理するOSからも独立に秘密を保護する保護環境を提案してきた(特許出願第2000−35398号、第2000−135010号、第2000−333635号、第2001−024480号など)。このような保護環境を、「マルチパーティアプリケーション保護環境」と呼ぶ。
図18は、一般的なマルチパーティのアプリケーション保護環境を示す。
図18において、ユーザ12が、複数のソフトウェアベンダ21−1〜21−nのうち、ベンダ1(21−1)からプログラムをする購入すると場合を例にとる。
ユーザ12が使用するシステム2は、マイクロプロセッサAを内蔵し、マイクロプロセッサAは、このプロセッサに固有の秘密鍵Aを有する。秘密鍵Aに対応する公開鍵Aは、公開されている。
ソフトウェアベンダ1はプログラム22−1を開発し、暗号鍵としてプログラム鍵1を選択し、平文プログラム22−1を暗号化して暗号プログラム23−1を作成する。
次に、プログラム鍵1を、配布先システム2のプロセッサAに固有の公開鍵Aで暗号化して、配布鍵25−1を作成する。
図示はしないが、ソフトウェアベンダ1はプログラム22−1の他にも、複数の異なるプログラムを開発しており、それぞれプログラムに応じたプログラム鍵を選択して、暗号化プログラムと配布鍵を作成する。ここでは、説明の便宜上、ひとつのプログラムについて説明する。
ソフトウェアベンダ1は、暗号化したプログラム23−1と、暗号化した配布鍵25−1とを、ネットワークを介して、ターゲットシステム2に配信する。配信されたプログラム23−1と配布鍵25−1は、システムの二次記憶(たとえば、ハードディスク)7に格納される。プログラム23−1は、実行コードとデータ(初期化データ等)を含み、実行時に、マイクロプロセッサ3の外にある外部メモリ8上に、暗号化されたままの状態で読み込まれる。外部メモリ8上の暗号化されたプログラムを保護プログラムと称する。
マイクロプロセッサAは、配布鍵25−1を読み込み、公開鍵Aに対応する秘密鍵Aによってこれを復号してプログラム鍵1を得る。鍵の復号処理はマイクロプロセッサ内の保護ロジック(コア)6で行なわれる。
次にマイクロプロセッサAは、プログラム鍵1によってプログラム1を復号してキャッシュメモリ4に読み込む。復号とキャッシュメモリ3への読み込みは、所定のキャッシュアルゴリズムにより、プログラムの実行に従って、部分ごとに行われ、プログラム全体が一度にキャッシュメモリ4に読み込まれるわけではない。キャッシュメモリ4に読み込まれたプログラムは平文状態なので、暗号化されていない通常のプログラムと同様にコア6で実行される。プログラム鍵1や平文プログラムを扱う部分は、プロセッサAのコア6によって行なわれ、OSが介在する余地はない。マイクロプロセッサ内にあるキャッシュメモリ4、秘密鍵5の内容は、プロセッサの仕様に定められた操作を除いては、外部から直接読み出すことはできない。
なお図示はしないが、キャッシュメモリ4に格納された平文の情報について、ユーザが複数のプログラムベンダ21−1〜21−nから、複数の異なるプログラムを購入しても、それらのプログラムの間で、独立に秘密が守られることを保証するために、キャッシュメモリ4のライン毎に、その平文情報がどの暗号鍵によって復号化された情報であるかを特定する識別子がつけられる。異なるプログラムベンダの、異なるプログラムごとにプログラム鍵はそれぞれ異なるので、キャッシュラインにあるタスクと、それを復号した鍵とを対応付けることにより、プログラムの独立性は一応保証される。
(1)タスクの識別機能を実現するには、各プログラムのプログラム鍵をタスクIDに対応して保持するテーブルをマイクロプロセッサ内部に持つことが必要である。このようなテーブルの設定を指示するのは、システムを管理するOSであり、OSプログラムからテーブルを操作する手段が必要となる。このテーブル操作手段は、当然、秘密保護の要求を満たすものでなければならない。
また、タスク対応の鍵テーブルは秘密保護の要となるが、資源の有限性やコストの関係上、テーブルの量を無限に増やすことはできない。このため、あるテーブルのエントリをどのプログラムに割り当てるか、エントリをどのように再利用するかは、システムユーザの意向に従って、OSが管理する必要がある。
このようなOSの操作は、秘密保護に欠陥をもたらす可能性がある。例えば、あるプログラム鍵XにタスクID#1を割り当てた状態の時、OSが別のプログラム鍵Yに同一のタスクID#1を再割当したとする。このとき、キャッシュメモリにタスクID#1のタグが付与されたキャッシュラインが残っていると、そのデータは、プログラム鍵Yに対応するプログラムから読みとることができる。これは秘密保護の原則に違反する。
そこで、第1の課題として、このような違反を防止するためのタスク状態管理とテーブル管理の機構を提供する。
(2)プログラムの暗号化には、キャッシュライン単位で復号処理が完結するような方法と、あるひとつのキャッシュラインの復号に複数のキャッシュラインのデータが必要な方法の2種類がある。前者はメモリ容量やライン単位の入れ替えにさほど影響しないが、後者には、以下の問題がある。
キャッシュラインの復号に複数のキャッシュラインのデータを必要とする方法では、メモリへのランダムアクセスが発生する場合、必要なメモリ領域の前後のメモリ領域も読み込まなければならない。このため、大きなオーバヘッドが発生する。
また、復号結果は隣接するラインのデータに依存するため、いわゆるブロック交換攻撃の可能性がある。ブロック交換攻撃とは、同一の秘密に基づいて暗号化されたブロック情報を、攻撃者が適切に入れ換えることにより、システムの状態を攻撃者の意図するように変更する攻撃を意味する。たとえば、攻撃者が、あるアドレスXに配置されていたラインPが課金動作に対応する部分であることを、通信のタイミングなどから知ったとする。
そして、同一のプログラム鍵で暗号化された別のラインQを実行しても、プログラムの提供するサービスに悪影響がないことを、知っていたとする。このとき、ラインPをラインQで置き換えれば、攻撃者はプログラムのサービスに影響なく、課金だけを逃れることができる。同様の攻撃は、プログラムが扱うデータにも適用可能である。
すべてのブロック毎に個別の鍵を与えれば上記の問題は解決できるが、配布鍵にブロックごとの個別暗号鍵を格納すると、配布鍵を公開鍵で暗号化するアルゴリズムが膨大になり、復号化処理のオーバヘッドを引き起こす。また、そのような鍵を管理する膨大な容量のテーブルをマイクロプロセッサ内部に必要とし、鍵の配布、管理コストの面で現実的ではない。
さらに、一般にプログラムは、あらかじめ配置されるアドレスが常に一定であるわけではなく、ターゲットシステムの構成(他のプログラムと共有するライブラリや共有メモリの構成)によって、配置されるアドレスが変更されることがある。これをリロケーションと呼ぶ。ブロックごとの暗号化を行う場合、リロケーションの問題を考慮しなければならない。
そこで、第2の課題として、処理オーバヘッドが小さく、データ交換攻撃を困難にし、リロケーションをも考慮した秘密情報管理能力を有するマイクロプロセッサを提供する。
(3)プログラム(実行コード)、データ、コンテキスト情報は、アプリケーションの3要素であるが、これらはプロセッサ内部での取り扱い違いがある。実行コードとデータでプログラム本体を成し、コンテキストは、タスクの実行が中断されたときにタスクを再開するためにメモリ上に保存される状態情報である。
一般にマイクロプロセッサ内部のプログラムは書き換えられることはないが、キャッシュ上のデータに変更があればデータは外部メモリへと書き戻される。
また、プログラムやデータはキャッシュライン単位でアクセスされるが、コンテキスト情報は、単一のキャッシュラインでは格納できないほどのサイズになることが多い。コンテキスト切り替えのときは、複数のキャッシュラインにまたがる情報がまとめて読み書きされる。
性質の異なるこれらの情報を外部メモリとやりとりする際には、それぞれ暗号処理が必要になるが、その一方でハードウェアコストの削減が望まれる。
そこで、第3の課題として、これらの情報に対する暗号処理ハードウェアを共通化できるマイクロプロセッサを提供する。
第1の課題を解決するために、実際にキャッシュラインにあるタスクの識別子と、OSにより割り当てられたタスクの識別子とを比較して、一致するときにのみそのキャッシュラインへのアクセスを許可し、一致しないときは、キャッシュラインの内容を廃棄する。
これを実現するために、マイクロプロセッサは、複数の状態を取り得るタスクに識別子を付与し、タスク識別子と対応してタスクの状態を保持するタスク状態テーブルと、現在実行中のタスク識別子を保持するタスクレジスタと、タスクの要求があったときに、外部メモリに所定のプログラム鍵で暗号化された状態で格納されているプログラムをキャッシュライン単位に読み込むインターフェイスと、プログラム鍵に基づきキャッシュラインごとに復号鍵を生成し、読み込まれた内容を復号する暗号処理部と、各々がタグを有する複数のキャッシュラインから構成され、キャッシュラインごとに、そのキャッシュラインの復号に用いられた復号鍵に対応するタスク識別子をタグに保持する第1のキャッシュメモリと、キャッシュラインのタグに保持されたタスク識別子と、前記タスクレジスタの値を比較し、値が一致しない場合にキャッシュラインの内容を廃棄するアクセス検証部とを備える。
第2の課題を解決するために、少ない秘密に基づいてブロックごとに異なる鍵で復号することを可能にする。これを実現するために、マイクロプロセッサは、以下を備える。
(a)それぞれ固有のプログラム鍵に基づいて暗号化された複数のプログラムが格納されている外部メモリのアドレスを指定して、読み出し要求を発行するプロセッサコア;
(b)プロセッサコアの読み出し要求に応じて、外部メモリの指定されたアドレスのデータブロックを読み出すインターフェイス;
(c)プログラムの実行制御単位であるタスクごとに与えられるタスク識別子に対応して、プログラム鍵を保持するタスク鍵テーブル;
(d)タスク識別子ごとに、プログラムが配置された先頭アドレスをオフセット値として保持するオフセットテーブル;
(e)読み出し要求により指定されたアドレスと、オフセットテーブルのタスク識別子で指定されるオフセット値とから相対アドレス値を計算し、この相対アドレス値を、プログラム鍵で暗号化したブロック対応鍵を生成する鍵生成部;
(f)読み出されたデータブロックを、ブロック対応鍵により復号化する暗号処理部;および
(g)復号化されたデータブロックをキャッシュライン単位に読み込むキャッシュメモリ。
(b)プロセッサコアの読み出し要求に応じて、外部メモリの指定されたアドレスのデータブロックを読み出すインターフェイス;
(c)プログラムの実行制御単位であるタスクごとに与えられるタスク識別子に対応して、プログラム鍵を保持するタスク鍵テーブル;
(d)タスク識別子ごとに、プログラムが配置された先頭アドレスをオフセット値として保持するオフセットテーブル;
(e)読み出し要求により指定されたアドレスと、オフセットテーブルのタスク識別子で指定されるオフセット値とから相対アドレス値を計算し、この相対アドレス値を、プログラム鍵で暗号化したブロック対応鍵を生成する鍵生成部;
(f)読み出されたデータブロックを、ブロック対応鍵により復号化する暗号処理部;および
(g)復号化されたデータブロックをキャッシュライン単位に読み込むキャッシュメモリ。
また、タスクの実行中断の際に、プログラムやデータが配置される物理アドレスは、しばしばシステムの資源管理によって変更される(リロケーション)が、ブロックごとに暗号化されたプログラムを復号して正常に実行するためには、情報は一定のアドレス空間に配置される必要がある。そこで、ターゲットアドレスとプログラムの開始アドレス(オフセットアドレス)との差で表わされる相対アドレスを計算するときは、仮想アドレスを用いる。
これによって、ブロック入れ替えを効果的に防止するとともいに、制限ある物理メモリを効率よく利用することができる。
第3の課題を解決するために、マイクロプロセッサは、
(a)外部メモリに暗号化された状態で格納されているプログラムの実行コードおよびデータをキャッシュラインごとに取り込むインターフェイスと、
(b)プログラムの開始アドレスであるオフセット値を保持するオフセットテーブルを有し、実行コードを平文状態でキャッシュラインごとに保持する第1のキャッシュと、
(c)データのアドレス範囲を保持するアドレス範囲レジスタを有し、データを平文状態でキャッシュラインごとに保持する第2のキャッシュと、
(d)第1および第2のキャッシュに共通バスを介して接続され、プログラムの暗号化に用いた暗号鍵を保持する鍵値テーブルと、
(e)第1および第2のキャッシュバスおよび鍵値テーブルに共通バスを介して接続され、鍵値テーブルと第1のキャッシュから暗号鍵とオフセット値をそれぞれ受け取り、この暗号鍵とオフセット値に基づいて実行コードを復号化して第1のキャッシュに供給し、鍵値テーブルと第2のキャッシュから暗号鍵とアドレス範囲をそれぞれ受け取って、暗号鍵とアドレス範囲に基づきデータを復号化して第2のキャッシュに供給する暗号処理部と
を備える。
(a)外部メモリに暗号化された状態で格納されているプログラムの実行コードおよびデータをキャッシュラインごとに取り込むインターフェイスと、
(b)プログラムの開始アドレスであるオフセット値を保持するオフセットテーブルを有し、実行コードを平文状態でキャッシュラインごとに保持する第1のキャッシュと、
(c)データのアドレス範囲を保持するアドレス範囲レジスタを有し、データを平文状態でキャッシュラインごとに保持する第2のキャッシュと、
(d)第1および第2のキャッシュに共通バスを介して接続され、プログラムの暗号化に用いた暗号鍵を保持する鍵値テーブルと、
(e)第1および第2のキャッシュバスおよび鍵値テーブルに共通バスを介して接続され、鍵値テーブルと第1のキャッシュから暗号鍵とオフセット値をそれぞれ受け取り、この暗号鍵とオフセット値に基づいて実行コードを復号化して第1のキャッシュに供給し、鍵値テーブルと第2のキャッシュから暗号鍵とアドレス範囲をそれぞれ受け取って、暗号鍵とアドレス範囲に基づきデータを復号化して第2のキャッシュに供給する暗号処理部と
を備える。
この構成により、キャッシュ間で共有される効率的な暗号処理構造を有するマイクロプロセッサが実現される。
少ない数の秘密に基づき、簡便な方法でプログラムをブロックごとに暗号化、復号化するので、ブロック入れ替え攻撃を防止できるとともに、ソフトウェアベンダ側とマイクロプロセッサ側の双方の資源管理、処理負担が軽減する。
ブロック対応暗号化に、仮想メモリ空間に基づく相対アドレスを用いるので、リロケーションの問題に効率的に対処できる。
鍵値テーブルと高速暗号鍵処理モジュールをキャッシュ間で共有することにより、ハードウェアコストが削減される。
以下、図面を参照しながら本発明の実施の形態を説明する。
図1は、本発明が適用されるマルチパーティのアプリケーション保護環境を説明するための図である。
ソフトウェアベンダ121は、プログラム122を作製し、これをユーザ112のシステム102に内蔵されるマイクロプロセッサAに配布する。配布するプログラムを保護するため、平文プログラム122を暗号化する。
具体的には、実行コードと、初期化済データ等のデータで構成されるプログラムを、ソフトウェアベンダ121が選択したプログラム鍵で暗号化し、暗号化に用いたプログラム鍵を、ターゲットシステム102のプロセッサAの公開鍵Aで暗号化して配布鍵を生成する。
このとき、ソフトウェアベンダ121は、プログラムや初期化データを複数のブロックに分割し、ブロックごとに異なる鍵で暗号化する。ただし、ベンダ121は、ブロック数に応じた数の鍵を選択するのではなく、複数の鍵を生成するための基本となる定数Cxと、Cxに基づいて生成された複数の鍵を暗号化する鍵Kxの2つだけを選択すればよい。詳細は後述するが、この2つの定数を基にして、ブロックごとに異なる鍵で暗号化し、暗号化プログラム123を生成する。そして、CxとKxをプロセッサAの公開鍵Aで暗号化して、配布鍵Kx[A]、Cx[A]を作製する。
なお、図1では、説明の便宜上、単一のソフトウェアベンダしか描いていないが、マルチパーティの環境を想定しているので、ユーザ112は、複数のベンダから、それぞれブロック暗号化プログラムを購入し、システム102に格納するものとする。
配布されたブロック暗号化プログラムは、配布鍵とともに、いったんハードドライブディスクなどの二次記憶107に格納され、実行時にメモリ108に確保された領域109−1に読み込まれる。このメモリへの読み込みは、システム102の資源を管理するOS110によって行われる。プログラム本体と配布鍵は同一のファイルに格納しても良いし、別々のファイルに格納してもよい。メモリ108は、同じベンダ121による別のプログラムや、その他のベンダからのプログラムのための領域109−nも有するが,説明の便宜上、これらについては省略する。
プロセッサAは、配布鍵125を読み込み、秘密鍵Aを用いて、保護ロジック106で配布鍵を復号する。復号した鍵で、メモリ108に配置された暗号化プログラムを、ブロック単位でキャッシュメモリ104に読み込み、ブロックごとに復号化する。このとき、プロセッサAの特徴として、限られた数の秘密、たとえば2つの定数Kx、Cxから、複数の暗号ブロックの各々に対応したブロック対応鍵を生成して、ブロック単位で復号する能力を有する。
図2は、図1に示すマイクロプロセッサAのハードウェア構成図である。プロセッサAは、プロセッサパッケージ200の中に、コア902、命令キャッシュ903、データキャッシュ904、これらのキャッシュで共有される高速暗号鍵処理モジュール(FCM:Fast Ciphering Module)911、鍵値テーブル(KVT:key value table)912、配布鍵管理モジュール913、バスインターフェイス(BIU)906を有する。これらは、内部バス905で互いに接続されている。
コア902、高速暗号鍵処理モジュール911、鍵値テーブル912、配布鍵管理モジュール913で、図1の保護ロジックを構成する。
コア902は、レジスタアレイ915とタスクスイッチャー914を有する。タスクスイッチャー914は、タスクの切り替え、すなわち割り込み発生時のコンテキストの保存、復帰を実行する。コンテキストは、タスクの実行に対応して生成され、タスクと対応して管理される。これを実現するために、タスクスイッチャー914は、内部にタスク状態テーブル921と、ハッシュ計算部922を有する。タスク状態テーブル921は、後述するように、タスクIDと対応付けてタスク状態を保持する。また、図示はしないが、コア902は、レジスタアレイにあるコンテキストの変更通知や、配布鍵設定命令などを発する。
命令キャッシュ903は、プログラムの実行コードをキャッシュする。通常のアドレスを識別するキャッシュタグに加え、保護タスクを識別するタグも付けられ、マイクロプロセッサの内部データでアプリケーションの独立性を保証する。なお、図2には図示しないが、後述するように,命令キャッシュは、プログラム(実行コード)やデータの開始アドレス(オフセット)を記述するオフセットテーブル1207(図9参照)を内部に有する。
データキャッシュ904は、プログラムの初期化データ、スタックデータ、ダイナミックデータなど、プログラムに関連する種々の情報をキャッシュする。
高速(対称)鍵暗号処理モジュール911は、鍵生成モジュール1312と暗号処理モジュール1313を有する。鍵生成モジュール1312は、内部バス905を通じてブロックの鍵と、処理対象ブロックの相対アドレス値を取得し、後述する方法でブロックごとに対応する暗号鍵を生成する。暗号処理モジュール1313は、生成されたブロックごとの暗号鍵により、対応するブロックの暗号/復号処理を実行する。ブロックの暗号処理には複数クロックを要するので、複数のモジュールを並列処理するためのディスパッチャも含む。
鍵値テーブル(KVT)912は、キャッシュから送られてくるテーブルID情報に基づいてテーブルを検索し、鍵の値を高速暗号鍵処理モジュール911に供給する。
配布鍵管理モジュール913は、配布鍵の公開鍵復号化および復号化結果のテーブルをセットアップする。
マイクロプロセッサはまた、点線の矢印で示すように、タスクチャンネル916を有し、コア902から他のモジュールへ、現在実行中のタスク、およびコンテキスト保存されるタスクの情報を伝達する。マイクロプロセッサのパッケージの外に外部メモリとしてのRAM907,周辺回路を接続するいわゆるサウスブリッジ908があり、バスインターフェイス905で、内部バス905と外部メモリ907やサウスブリッジ908との間のデータ転送、バッファリングを行なう。
図3は、プログラムをブロックごとに暗号化する手順を説明する図である。この処理は、図1のソフトウェアベンダ121のブロック対応暗号処理部126によって行われる。
ソフトウェアベンダが開発した平文のアプリケーションプログラムのプログラム領域1001は、128ビット(16バイト)を単位とする複数のブロック0〜ブロックnで構成されている。この領域全体に対して、あらかじめ2つの定数KxとCxが選択されている。
まず、定数Cxと、プログラムの先頭から見た相対的は各ブロックの先頭アドレスとの和を求める。たとえば最初のブロック0の先頭バイトは0であるから、Cx+0が計算される(S1002−0)。Cx+0の値は、秘密鍵Kxで暗号化され、ブロック対応鍵Kv0が生成される(S1003−0)。平文ブロック1001−0は、このブロック対応鍵Kv0で暗号化され(S1004−0)、暗号ブロック1005−0が生成される。
同様に、2番目のブロック1の先頭バイトは16バイトであるから、プログラムの先頭からみた相対アドレスは16となり、Cx+16を計算する(S1002−1)。
n+1番目のブロックnの相対アドレスは16nであり、Cx+16nを求める(S1002−n)。これらの値をKxで暗号化して、対応するブロックの暗号鍵Kv1〜Kvnを生成する(S1004−1〜S1004−n)。各暗号鍵で平文ブロック1〜nを暗号化し、暗号ブロック1005−1〜1005−nを生成する。
図3では、暗号化処理S1003−0〜S1003−nや、S1004−0〜S1004−nを独立に示してあるが、ひとつの暗号化処理に与えるパラメータを変えて繰り返し使ってもよいし、ソフトウェアで実現してもよい。
図3に示す暗号化方法によれば、プログラムベンダ121は、ターゲットシステム102でプログラムが配置される絶対アドレスを意識せずに、暗号処理することができる。プログラムベンダは絶対アドレス値を予想することはできないので、絶対アドレス値に基づいてブロック対応鍵を生成しようとすると、ターゲットシステム102からあらかじめプログラムが配置される絶対アドレスの通知を受けてから、配置アドレス対応の暗号化プログラム本体を作成するか、配置アドレス対応の暗号化プログラム本体を無数に配布しなければならない。いずれの場合もプログラム本体の配布コストが著しく大きくなる。
図3の方法では、配布しなければならない秘密は鍵Kxと定数Cxのみであり、かつ、各ブロックの相対アドレスを使用して複数ブロック対応の暗号鍵を生成するので、ソフトウェアベンダ側の処理負担が軽減され、経済性も満たされる。
こうして暗号化された各ブロック1005−0〜1005−nは、配布鍵Kx[A],Cx[A]とともに、ターゲットシステム102に送られる。ターゲットシステムでは、秘密情報Kx、Cxと、ブロックの相対アドレス値さえ与えられれば、マイクロプロセッサ内で、他のブロックのデータや配置されたメモリの絶対番地に依存せず、各ブロック独立に復号することができる。
これは、メモリへのランダムアクセスを特徴とする現在のコンピュータアーキテクチャおよびアプリケーションプログラムのリロケーションを前提とした現在のOSに効率よく適合する。
また、たとえ攻撃者が、ブロックの不正な入れ換えを行っても、ブロックごとの相対アドレス値が異なるので、ブロック暗号鍵Kvも異なり、攻撃者の意図する動作は行われない。
次に、ターゲットシステム102側での動作の詳細を説明する。
プログラムの実行に先立って、OS110は、ソフトウェアベンダ121から受け取ったアプリケーションプログラムの実行コード、初期化データ(静的データ)、作業領域(スタック)に、それぞれメモリ108の領域を割り当てる。この段階では、プログラムは暗号化されたままの状態である。割り当てられるメモリ領域の開始アドレスは、システムの状態、すなわち連係して動作する他のプログラムモジュールや共有メモリの配置によって変わってくるので、システムを管理するOSは、状況に応じて領域のアドレスを自由に決定する(リロケーション)。OS110はまた、配置鍵を配置するメモリ領域を決定し、配布鍵情報を読み込む。
OS110は、これらの領域のアドレス情報を、メモリ上の情報配置記述子(IAD:information arrangement descriptor)とよばれる構造体に記述する。
図4は、あるタスクの仮想アドレス空間のメモリマップと、情報配置記述子1111および配布鍵情報1121の構造を示す。メモリマップ上には、プログラム1102、初期化(static)データ1103、作業領域(スタック)1104に加え、情報配布記述子用の領域1105、配布鍵用の領域1106が配置される。
情報配置記述子1111は、プログラム領域の開始アドレス(オフセット)1112、データ領域開始アドレス(オフセット)1113、データ領域終了アドレス1114、作業領域開始アドレス(オフセット)1115、作業領域終了アドレス1116、配布鍵アドレス開始アドレス(オフセット)1117を含む。
配布鍵1121は、プログラム鍵(Kx)1122、プログラム秘密定数(Cx)1123、初期化データ鍵1124、初期化データ秘密定数1125、初期化データ長1126、作業領域(スタック)鍵1127、作業領域秘密定数1128、作業領域長1129を含む。
メモリ上に配置されたプログラムが、マイクロプロセッサ103に読み込まれて、復号、実行されるときは、OS110は、情報配置記述子に基づいて、タスク状態を制御する種々の特権命令(タスク制御命令)を発行して、タスクの状態管理を行う。
図5は、タスク制御命令の例を示し、図6は、タスクの状態遷移を示す。タスク制御命令は、内部テーブルへのタスクの登録(register)、タスクの開始(start)、中断されたタスク状態の保存(suspend)、中断されたタスクの再開(continue)、タスクの終了、すなわち内部テーブルからのタスク秘密情報の削除(delete)などを含む。そして、これらの制御命令に応じて、図6に示すようにNULL状態201からINIT状態202になり、RUN状態203、STOPPED状態204、SUSPEND状態205等を遷移する。
以下、タスクを実行するための動作について、特に、タスクの登録、タスクの実行、タスクの中断、タスクの終了を中心に、詳細に説明する。
<タスクの登録>
1.登録処理フロー
まず、タスクを登録するために、OS110は、登録したいタスクのIDと、そのプログラムの情報配置記述子の先頭アドレスをパラメータとして、特権命令であるregister命令を発行する。register命令の発行により、このプログラムのための配布鍵1121が復号され、各メモリブロックの復号に使われる鍵と相対アドレス情報が、タスクIDと関連付けて、マイクロプロセッサ内の各種テーブル(後述)に登録される。
1.登録処理フロー
まず、タスクを登録するために、OS110は、登録したいタスクのIDと、そのプログラムの情報配置記述子の先頭アドレスをパラメータとして、特権命令であるregister命令を発行する。register命令の発行により、このプログラムのための配布鍵1121が復号され、各メモリブロックの復号に使われる鍵と相対アドレス情報が、タスクIDと関連付けて、マイクロプロセッサ内の各種テーブル(後述)に登録される。
図7は、マイクロプロセッサ(ハードウェア)103上でのタスク登録の概略動作を示し、図8は、登録(register)命令の処理フローを示す。
情報配置記述子(IAD)1111のアドレスとタスクID#1をパラメータとしてregister命令が発行されると、コア902内のタスクスイッチャー914はタスクの状態をチェックする(S301)。タスク状態がNULLでなければ(S301でNO)、タスク状態をINVALIDとしてエラーにする(S308)。タスク状態がNULLならば(S301でYES)、図7の点線(1)で示すように、コア902は情報配置記述子のアドレスとタスクIDを含む登録要求を、配布鍵管理モジュール913のシーケンサ913−1に書き込む。
シーケンサは、図7の点線(2)で示すように、情報配置記述子の領域に対するメモリ読み出し要求をBIU906に送り、BIUは、点線(3)で示すように情報記述子1111をシーケンサに供給する。シーケンサはこの情報記述子を解析して、プログラム、初期化データ、作業領域に対応するオフセットアドレスや範囲、配布鍵オフセットアドレス1117を取得する(S302)。
次にシーケンサは、配布鍵アドレスに対する読み出し要求をBIUに送る。
BIUは、点線(4)で示すように、配布鍵の内容を公開鍵復号モジュール913−2に供給する。公開鍵復号モジュール913−2は、配布鍵1121(図4)を復号化し、プログラムの秘密定数(Cx)、初期化データの秘密定数、作業領域秘密定数を取得する(S303)。
次に、図7の点線(5)で示すように、S302で取得したプログラム、初期化データ、作業領域のオフセットアドレスを、命令キャッシュ903のオフセットテーブル(図9参照)に書き込む(S304)。
同様に、S303で取得したプログラム、初期化データ、作業領域の暗号鍵(秘密定数)を、鍵値テーブル912に書き込む(S305)。
こうして、テーブルが設定され、タスクの登録が完了する。
タスクの登録が完了すると、タスク状態はNULLからINITに移行し(S306)、この状態の遷移は、割り込みによりコア902に通知され(S307)、OSは、タスクを実行するための準備が整ったことを知る。
2.テーブルの設定
マイクロプロセッサ内の各種テーブルの設定を説明する前に、図9〜11を参照して、マイクロプロセッサを構成する命令キャッシュ903、高速暗号鍵処理モジュール(FCM)911、鍵値テーブル(KVT)912、データキャッシュ904の構成を説明する。
マイクロプロセッサ内の各種テーブルの設定を説明する前に、図9〜11を参照して、マイクロプロセッサを構成する命令キャッシュ903、高速暗号鍵処理モジュール(FCM)911、鍵値テーブル(KVT)912、データキャッシュ904の構成を説明する。
図9は命令キャッシュ903の詳細を示す。命令キャッシュ903は、命令TLB(translation lookaside buffer)1202を有する命令管理ユニット(MMU)1201と、命令キャッシュメモリ1203と、カレントタスクIDレジスタ1204と、キャッシュアクセス検証部1205と、タスクID書き込み部1206と、オフセットテーブル1207を含む。
キャッシュメモリ1203は、複数の所定サイズのキャッシュラインで構成され、各キャッシュラインは、そのキャッシュライン(ブロック)で実行されるタスクのタスクIDを保持するタグを有する。キャッシュアクセス検証部1205は、タグに保持されたタスクIDと、カレントタスクIDレジスタの値とを比較し、一致するときのみアクセスを許可する。一致しないときは、そのキャッシュラインの内容を廃棄する。
図10は、鍵値テーブル(KVT)912と、高速暗号鍵処理モジュール(FCM)911の詳細を示す。KVT912は、テーブルアクセス制御部1301と、カレントタスクIDレジスタ1302と、タスク鍵(あるいはプログラム鍵)テーブル1303と、コンテキスト鍵テーブル1304と、データ鍵テーブル1305を含む。ここでは図示はしないが、データ鍵テーブル1305は、4つのテーブル(0〜3)を含む。KVT912は、パス1315を介してバス905と接続される。
高速暗号鍵処理モジュール(FCM)911は、ディスパッチャ1311と、鍵生成モジュール1312と、暗号処理モジュール1313を含む。鍵生成モジュール1312は、鍵生成単位として並列に1312−1〜1312−3を有し、暗号処理モジュール1313は暗号処理単位として1313−1〜1313−3を有する。ディスパッチャ1311は、後述するように、鍵生成単位や暗号処理単位の空きのある部分に処理を割り振り、並列処理を可能にする。FCM911は、パス1314を介してバス905に接続される。
KVT912からFCM911へ、パス1316を介して暗号鍵が転送され、パス1317を介して相対アドレス値が転送される。
図11は、データキャッシュ904の詳細を示す。データキャッシュ904は、カレントタスクIDレジスタ1401と、アドレス範囲を保持するMTRR(memory type range register)テーブル1403と、このテーブルを管理しMTRRテーブルのアドレス範囲とターゲットアドレスを比較するMTRRテーブル管理比較部1402と、暗号属性送出部1411と、データキャッシュメモリ1431と、データTLB1433を有するMMU1442と、保存予定コンテキスト識別子レジスタ1434を含む。暗号属性送出部1411は、データやコンテキストを外部メモリへ書き戻すときに、その暗号属性を確認するために、読み込み要求データ暗号識別子レジスタ1412と、読み込み要求コンテキスト暗号鍵識別子レジスタ1413と、書き出し要求データ暗号鍵識別子レジスタ1414と、書き出し要求コンテキスト暗号鍵識別子レジスタ1415と、アクセス検証部1421を有する。MMU1442は、所定の変換情報に基づいて、コア902から出力される仮想アドレスから物理アドレスへと変換してメモリアクセスを行う。
KVT912の6種類のテーブル、すなわちプログラム鍵テーブル1303、コンテキスト鍵テーブル1304、データ鍵テーブル1305(0−3)は、それぞれタスクIDでインデックスされ、鍵生成に使う2種類の秘密情報を保持できる。ブロックの復号鍵生成に使われる2つの秘密情報、例えば図4に示すプログラムのためのKx1122とCx1123は、KVT912のプログラム鍵テーブル1303のタスクID#1の欄に書き込まれる。
一方、このプログラム領域のオフセット値1112は、命令キャッシュ903内のオフセットテーブル1207のタスクID#1の欄に書き込まれる。
データキャッシュ904のMTRRテーブル1403は、タスクIDと0〜3の値をとるMTRR識別子で識別される。すなわち、MTRRテ−ブル1403は、1タスク当たり4個のMTRR(アドレス範囲レジスタ)を持ち、それぞれにデータ領域のアドレス範囲と鍵の値を登録することができる。タスク登録時においては、MTRR識別子0、1に対応する初期化データと、作業領域(スタック)に対応するMTRRが設定される。また、MTRR2,3の内容は0で初期化される。
あるタスクがメモリを参照する時、ターゲットアドレスとMTRRのアドレス範囲とが比較され、一致したMTRRに対応する暗号化属性(すなわち鍵)が使用される。
データについても、MTRRの先頭番地をオフセットとして、相対アドレス値を使用して、上述した手順の暗号鍵生成が適用される。
テーブルの内容に矛盾が発生するのを防ぐため、これらのテーブルを書き換えている期間は、コア902ではこのタスクに対するあらゆるオペレーションが禁止される。
テーブルの書換えが完了すると、タスクスイッチャー(STS)914のタスク状態テーブル921で、このタスクIDに対応するエントリが状態NULLからINITに書き換えられ、登録の完了が、割り込みによってコア902に通知される。
なお、本実施例ではこれらの登録オペレーションをハードウェアで実装した例を示したが、ファームウェアとしてプロセッサ内部に組み込まれたソフトウェアとして実装してもよい。ただし、ファームウェアは悪意を持つシステムユーザによって改変されることがないような注意が必要である。
<タスクの実行>
1.タスクの実行開始
タスクを実行するには、INIT状態にあるタスクに対して、OSがタスクIDをパラメータとしてstart命令を実行する。すると制御がプログラム領域の先頭に移される。
1.タスクの実行開始
タスクを実行するには、INIT状態にあるタスクに対して、OSがタスクIDをパラメータとしてstart命令を実行する。すると制御がプログラム領域の先頭に移される。
INIT状態にあるタスク以外を指定してstart命令を実行した場合、エラーとなり、なにも実行されない。
図12は、タスク実行開始命令の処理フローを示す。あるタスクについてそのタスクIDを指定してstart命令が発行されると、まず、そのタスク状態がINITにあるかどうか、すなわち、タスク実行の準備が整った状態にあるか否かを判断する(S401)。INIT以外の状態にあるタスク識別子を指定してstart命令が出された場合は(S401でNO)、タスク状態テーブル921がINVALIDにされ(S407)、エラーとなる。
タスクがINIT状態にある場合は(S401でYES)、コア902が保持するカレントタスクIDが、新しいタスクに設定され(S402)、レジスタアレイ915が初期化される(S403)。また、プログラムカウンタ(不図示)の値が、プログラム領域の先頭に設定される(S404)。
続いて、新しいタスクIDが、タスクチャンネル916を通じて、命令キャッシュ903、データキャッシュ904、鍵値テーブル912に通知され、それぞれのカレントタスクIDレジスタ1204、1401、1302に保持される(S405)。
その後、コア902のタスク状態テーブル921で、タスク状態がINITからRUNに書き換えられ(S406)、実行が開始される。
本実施形態では、ブロックごとに暗号化され保護されたプログラムを実行するので、外部メモリのプログラムがキャッシュに読み込まれる際に、タスクIDに対応して登録されたプログラム鍵に基づいて、ブロックごとにプログラムの復号化が行われ、復号結果である平文がキャッシュに読み込まれ、実行される。このとき、タスク登録時に配置されたメモリアドレスに合わせて、オフセットを命令キャッシュ903内部のオフセットテーブル1297に登録し、メモリアクセスとオフセットの差を相対アドレス値として使用するので、プログラマが暗号化したプログラムがOSによりどのアドレスに配置されていても、正しく復号化できる。
なお、実施形態ではNULL状態から中間のINIT状態を経てRUN状態へ移行する例が書かれているが、これは配布鍵の公開鍵アルゴリズム処理を非同期的に実行することにより、公開鍵アルゴリズム処理中の比較的長い応答不能時間を短縮することが目的である。応答不能時間を許容すれば中間のINIT状態を省略してもさしつかえない。(非同期的公開アルゴリズム処理については、同一出願人による特許出願第2001−024480号を参照されたい。)
2.命令キャッシュの読み込み
次に、命令キャッシュ903の読み込み処理について、図13の処理フローを参照して説明する。
2.命令キャッシュの読み込み
次に、命令キャッシュ903の読み込み処理について、図13の処理フローを参照して説明する。
タスクの実行が開始されてキャッシュに読み込まれたラインには、通常のメモリアドレスの一致を判定するタグに加えて、このタスクのタスクIDタグが付けられる。
そして、読み込まれたキャッシュラインにアクセスがあると、命令キャッシュ903のアクセス検証部1205で、ラインに付されたタスクIDのタグと、アクセスのあったカレントタスクIDの一致、不一致が判断される。不一致の場合は、たとえメモリアドレスのタグが一致していてもキャッシュのミスヒットとして扱われ、このキャッシュラインの情報が再度外部メモリから読み込まれることになる。別のタスクによりこのラインに対応する外部メモリの内容が再読み込みされても、新たにアクセスしたタスクのタスクIDに対応する鍵で復号化されて読み込まれることになる。つまり、本来の鍵と異なる鍵で復号化された結果を実行することになり、正常な処理は行われない。
なお、以下の説明で、相対アドレスの計算は仮想アドレスに基づいて行なわれるが、キャッシュのヒット、ミスヒットの判定は、物理アドレスに対して行われる。キャッシュのヒット、ミスヒットの判定に仮想アドレスを使用すると、同一のメモリブロックがキャッシュ上に複数存在するエイリアスと呼ばれる現象が発生するからである。この現象は特に同一の物理アドレス領域を複数のタスクが共有する場合に問題となるので、本実施形態では、通常のキャッシュヒット、ミスヒットは物理アドレスによって判定している。
図13は、命令キャッシュ903の読み込み処理フローを示す。このフローでは、説明の簡略化のため、命令キャッシュ903と、FCM911、BIU906の動作を一体として示している。
まず、コア902から読み出し要求があると、命令キャッシュ903はBIU906に対して、ターゲットアドレスブロックの読み出し要求を送る。読み出し要求には、リクエストID、保護の有無、ターゲットアドレス範囲、要求元IDの情報が含まれている。
ここで、ターゲットアドレスと、読み込まれたキャッシュラインに付されているアドレスタグとの一致、不一致が判断される(S501)。物理アドレスが一致しない場合は(S501でNO)、ミスヒットとして、読み出し要求された新たなタスクIDに対応するオフセットアドレスの取得を開始する。オフセットアドレスは、オフセットテーブル1207の中の、カレントタスクIDに対応するエントリから取得する(S502)。
次に、取得したオフセット値から相対アドレスを計算する。相対アドレスは、メモリアドレスからオフセット値を引き算することによって求められる(S503)。なお、保護タスク実行中にキャッシュメモリへのアクセスがあると、命令キャッシュ903は、キャッシュメモリのアクセスと並行して、相対アドレスの計算を行なう。
命令キャッシュ903は、求めた相対アドレス値とタスクIDとを、内部バス905を通じて鍵値テーブル(KVT)912へ送る。このとき、リクエストIDがつけられる。KVT912は、はタスク鍵テーブル1303からタスクIDに対応する鍵の値を取得し、鍵の値とオフセット値を、チャネル1316を通じて、高速暗号鍵処理モジュール(FCM)911の鍵生成モジュール1312へと送る。同時にKVT912は、オフセット値とリクエストID、要求元IDを、チャネル1317を通じて、FCM911の暗号処理モジュール1313へ送る。
FCM911の鍵生成モジュール1312は、KVT912から鍵の値とオフセット値を受け取ると、すぐにそのブロックに対応する鍵の計算を開始する。すなわち、プログラムの秘密定数Cxに相対アドレス値を加算した中間値を求め(S504)、求めた中間値をプログラムの秘密鍵Kxで暗号化して、プログラムのブロックに対応するブロック対応鍵を生成する(S505)。
この鍵の計算は暗号化処理なので、複数サイクルの時間を要する。効率よく計算をするため、鍵生成モジュール1312には複数の鍵生成単位1312−1〜1312−3が設けられ、ディスパッチャ1311が、空きの鍵生成単位に処理要求を割り振る。1つのリクエストが複数の暗号ブロックで構成される場合は、すべての暗号ブロック対応の鍵を生成するまで相対アドレス値を増分してS502〜505を繰り返す。
一方、BIU906は外部メモリから読み出した結果を、暗号ブロックの大きさのデータになるまでバッファリングする。もともと保護されていない非暗号化データが要求されている場合は、データは直接要求元の命令キャッシュへ送られるが、本実施形態では、暗号化データに対する要求なので、読み出し結果はFCM911へ送られる。FCM911の暗号処理モジュール1313は、鍵生成モジュールによって生成されたブロック暗号鍵で、BIU906から供給されたデータを復号する(S506)。
復号には複数サイクルの時間がかかるので、前の復号処理が完了する前にキャッシュラインを構成する次の暗号ブロックが到着した場合は、別の暗号処理単位が割り当てられ、並列的に処理が行なわれる。図10には、暗号処理単位として1313−1〜1313−3だけが示されているが、十分な数の暗号処理単位を準備すれば、暗号処理単位の処理サイクルよりも短い間隔でデータが到着しても遅延を発生させることなく復号化処理が可能となる。
復号を完了したブロックは、直ちに内部バス経由で要求元の命令キャッシュ903に送られる。命令キャッシュ903は、このキャッシュラインにデータを格納し、ラインを構成するすべてのデータがそろうと、キャッシュタグにライン有効の表示、暗号化ありの表示、実行中のタスクIDを書き込む(S507)。
キャッシュラインが有効になると、コア902はこのラインからデータを読み出し、プログラムの実行を再開する(S508)。
次に、S501でターゲットアドレスとキャッシュラインのアドレスタグ(物理アドレス部分)が一致した場合、つまり、それまで実行されていたタスクAと異なるタスクIDを有するタスクBが、たまたま同一のメモリ領域をアクセスしてキャッシュラインがヒットした場合を考える。キャッシュの物理アドレスがヒットしたということは、タスクBは、従来の資源管理的な意味でこのアドレスのメモリのアクセス権があることになる。
この場合は、命令キャッシュ903のアクセス検証部1205が、現在のタスクIDレジスタ1204の値と、このキャッシュラインにつけられているタスクIDタグとを、さらに比較する(S509)。比較結果が一致しない場合、たとえばカレントタスクIDレジスタ1204には“B”と書かれているが、キャッシュラインタグのタスクID欄には“A”と書かれ、その暗号特性は暗号化ラインであることを示している場合には(S509でNO)、キャッシュがフラッシュされ、タスクBにタスクIDに対してS502〜S507を繰り返す。すなわち、タスクBのオフセットアドレスから相対アドレスが計算され、キャッシュラインアドレスに対応する外部メモリのデータをタスクBのプログラム鍵で復号した結果が、このキャッシュラインに読み込まれる。
タスクAとタスクBのプログラム鍵が一致していれば、別々に読み込まれたとしても2つのタスクは同一のプログラムを実行するだけであるが、外部メモリのデータを暗号化した本来の鍵がタスクAのプログラム鍵であり、タスクBの鍵がそれとは違うものである場合、タスクBは本来のプログラムとは異なるでたらめなプログラムを実行することになり、意図する攻撃ができない。
一方、カレントタスクレジスタの値とキャッシュラインのタスクIDタグが一致すれば(S509でYES)、要求されたアドレスの内容が、コア902に送られる(S508)。
このように、あるタスクの実行中に、別のタスクによって同じキャッシュラインが再度読み込まれた場合、外部メモリの内容は、本来の鍵とは異なる鍵で復号化されてキャッシュラインに読み込まれる。本来の鍵と異なる鍵で復号化した結果を実行したプログラムはもちろん正常な動作をしない。
この制御はOSの特権をもっても覆すことはできない。OSが自由にタスク鍵テーブル1303を操作できとしたならば、他のプログラムの秘密を取得することができるが、本発明では、OSがプログラム鍵の登録に代表されるタスクの状態管理と秘密情報の操作を実行できるのは、図5に示すような一連のタスク制御命令の発行に制限されている。したがって、本発明のマイクロプロセッサでは、たとえOSの資源特権をもっても、アプリケーションのプログラムまたはデータの各ブロックに対応する鍵を知らない限り、それを正しく実行したり読み出したりすることはできない。
この機構により、アプリケーションプログラムの独立性を保証するマルチパーティのプログラム保護環境が提供できるのである。
なお、S506と関連して複数の暗号処理単位1313により迅速な復号処理が可能であると述べたが、1個の暗号処理単位に十分なスループットがあれば、複数の暗号処理単位を備えることは不要である。例えば、DESのように同一種類の演算の繰り返しにより構成される暗号処理では、処理をパイプライン化することにより高いスループットが得られることが知られている。
しかし、このようなパイプライン実装は、ハードウェア規模においても、設計の困難さにおいても大きなコストが必要である。また、一般に利用可能なIPの形で提供される暗号処理単位は、設計に高度のノウハウと時間を必要とするので、必要な処理能力に見あった番号処理単位をその都度設計することを大きな負担となる。多様な条件への対応を考えた時、本実施形態のように既存の暗号処理単位を複数並列動作させることが、設計の柔軟性の点で有利である。また、ハードウェア設計コストを含めた全体のコスト削減の効果がある。
3.データキャッシュでの実行処理
次に、データキャッシュの動作について説明する。初期化データ、作業領域(スタック)などのデータの保護については、タスクが動的に確保したデータ領域を、任意の暗号鍵によって暗号化保護することができる。初期化データ、作業領域、動的領域など、複数の保護領域を定義し、各々異なる鍵を設定することが可能である。たとえば初期化データの場合、外部メモリにはすでに暗号化済みのデータがおかれており、これを読み出し、復号する際の手順は基本的にはプログラムの場合と同じである。
次に、データキャッシュの動作について説明する。初期化データ、作業領域(スタック)などのデータの保護については、タスクが動的に確保したデータ領域を、任意の暗号鍵によって暗号化保護することができる。初期化データ、作業領域、動的領域など、複数の保護領域を定義し、各々異なる鍵を設定することが可能である。たとえば初期化データの場合、外部メモリにはすでに暗号化済みのデータがおかれており、これを読み出し、復号する際の手順は基本的にはプログラムの場合と同じである。
前述したプログラム(実行コード)の場合は、暗号属性は、命令キャッシュ903でカレントタスクIDとキャッシュタグのタスクIDを比較することによって判断されていたが、データの場合は、属性の判断がカレントタスクIDとMTRR(アドレス範囲レジスタ)との比較で行なわれるところが異なる。
データアクセスがあった場合、図11に示すデータキャッシュ904のMTRRテーブル管理比較部1402でアクセス属性が判定される。具体的には、MTRRテーブル管理比較部1402にカレントタスクIDとターゲットアドレスが入力されると、タスクIDに対応するMTRRテーブル1403のエントリ(0〜3)のアドレス範囲とターゲットアドレスがそれぞれ比較される。
MTRRエントリに合致するものがひとつだけであれば、その属性が無条件に採用され、タスクIDとMTRRエントリIDの組が当該メモリアクセスの暗号属性となる。
MTRRエントリが重複したアドレス範囲を持ち、ターゲットアドレスが複数のエントリのアドレス範囲に合致した場合、あらかじめMTRRごとに定められた優先順位にしたがってただひとつのMTRRが選ばれ、このメモリアクセスの暗号属性となる。
こうしてMTRRテーブル管理比較部1402で決定されたメモリアクセス属性は、データ読み込みの場合、暗号属性送出部1411の読み込みデータキーIDレジスタ1412に一時的に保持される。また、MTRRテーブル管理比較部1402では、ヒットしたMTRRエントリの先頭アドレスとメモリアクセスのターゲットアドレスから相対アドレス値が計算される。
これらのメモリアクセス属性と相対アドレス値は、プログラムメモリのアクセスの場合と同様に、内部バス905を通じて鍵値テーブル(KVT)912に送られる。
データキャッシュがBIU906にデータ読み出しを要求し、メモリアクセス属性がKVT912に送られ、データがFCM911に送られて復号化され、データキャッシュに返されるシーケンスは、命令キャッシュの場合と同一である。
最後にキャッシュタグにメモリアクセス属性と相対アドレス値が書き込まれてキャッシュの読み込みは完了する。
次に、アドレス変換機構を持つ場合のデータキャッシュの非同期書き込みに関する問題と、本実施形態で提供する機構について説明する。
図14に、本実施形態のデータキャッシュのデータ構造を示す。データキャッシュメモリ1431は、256本のライン1501―0〜1501−255で構成されている。
各ライン(たとえばライン0)は、外部メモリの内容を格納するラインバッファ1501−0−0と、物理アドレスタグ1501−0−1と、相対アドレス値1501−0−2と、タスク識別子1501−0−3と、MTRR識別子1501−0−4と、フラッグ領域1501−0−5を有する。
データキャッシュ904が命令キャッシュ903と異なる点は、データの書き戻し、すなわち割り込み時などに、外部メモリに一時的に退避される場合があることである。
あるタスクAに読み込まれたキャッシュラインは、必ずしもタスクAの実行中にフラッシュされて外部メモリに書き戻されるとは限らない。別のタスクBの実行中にフラッシュされる可能性もある。アドレス変換機構を持つプロセッサの場合、タスク毎に異なるメモリマップを持つことできるため、キャッシュラインの保存先物理アドレスは、仮想アドレスから一意に決定することはできない。
従来、この問題は、キャッシュタグに物理アドレスタグ1501−0−1をもうけて、保存先の物理アドレス情報を付与すれば、現在実行中のタスクが何であるかに関わらずキャッシュラインの保存先を決定できる。
ところが、これに本発明のブロック対応鍵を利用した暗号化を適用しようとすると、問題が生じる。ブロック対応鍵は、上述したように、キャッシュラインの仮想アドレスと、オフセット値の差である相対アドレス値から生成されている。一般にはこの相対アドレス値は物理アドレスから生成することはできないので、キャッシュの書き戻しにあたってのデータ暗号化ができない。
本実施形態では、データキャッシュメモリ1431のキャッシュタグに、相対アドレス値を格納するタグ1501−0−2をもうけて、このキャッシュラインの確保時に付与された相対アドレス値を保存することで、書き戻し時の暗号化の問題を解決している。
タグの書き込みは、このキャッシュラインの暗号属性決定時に行う。
別の方法として、キャッシュタグに仮想アドレスを保持しても同様の機能が実現される。キャッシュの非同期書き戻しを実行するときに、メモリ領域情報はMTRRテーブル1403に保持されているので、仮想アドレスとタスク識別子からMTRRのオフセット情報を取得して相対アドレス値を計算すればよい。
データキャッシュ904では、配布鍵で決められた初期化データと作業領域の他に、2箇所のデータ領域を追加することができる。これらの領域は、MTRR(アドレス範囲レジスタ)のID2、3で指定される。
データ領域の追加は、setkeyと呼ぶ特別な命令をタスクが発行することで行なわれる。プロセッサの所定のレジスタにデータの暗号鍵、補助定数とメモリ領域およびMTRR IDを格納してsetkey命令を発行する。Setkey命令は自タスクIDのデータ暗号化属性のみに有効なので、命令で明示的にタスクIDを指定する必要はない。
Setkey命令は、プロセッサコア902の内部で、データキャッシュ904のMTRRテーブル1403へのアクセスと、鍵値テーブル912のデータ鍵テーブル1305へのアクセスという、2つのステップに分解されて実行される。
タスクの初期状態において、MTRR(アドレス範囲レジスタ)の2、3は無効化された状態、すなわちアドレス範囲の大きさが0である状態にある。この状態ではいかなるメモリアクセスもアドレス範囲に該当しない。
Setkey命令が発行されると、最初にタスクIDとMTRRのIDに一致するデータキャッシュラインがフラッシュされる。
次に、鍵値テーブル912のデータ鍵テーブル1305のタスクIDとMTRRのIDでインデックスされた欄に、暗号鍵が書き込まれる。
次に、データキャッシュ904のMTRRテーブル1403の指定タスクIDとMTRR IDでインデックスされた欄に、アドレス範囲が書き込まれる。
MTRRのアドレス範囲の長さが0を越えるとその暗号化指定が有効になる。以下、追加データの読み書きについては初期化データの場合と同様である。
設定したMTRRを変更、すなわちデータ領域の属性を変更するには、再度setkey命令を発行する。上述のように、setkey命令を発行するとMTRRのIDに対応するキャッシュ上のラインはすべてフラッシュされ、外部メモリへと書き出される。その後、データ鍵テーブル1305,MTRRテーブル1403に新しい設定が書き込まれ、新しい設定での読み書きが始まる。
いったん外部メモリに書き戻されて保存された暗号データは、先に使用した暗号鍵Kx、補助定数Cx、オフセットアドレスが一致して初めて正しく読み出せる。たとえ暗号鍵、補助定数が一致していてもオフセットアドレスが一致しなければ正しい値を復号化することはできない。このことはタスク間で共有される共有メモリやディスクデータの読み書きにおいて重要である。この理由でsetkey命令が実行されると、対応するキャッシュラインは無条件にフラッシュされる。
逆に、あるデータ領域が外部メモリ上で別の絶対メモリアドレスに領域にコピーされたとしても、MTRRの領域指定先頭アドレスが移動先アドレスに対応して設定されれば、暗号鍵、補助定数が一致する条件の下で、元のデータを正しく読み出すことができる。
このように、本実施形態ではデータの暗号化においても、ブロック交換攻撃防止のためのブロックごとの個別暗号鍵方式と、メモリの再配置(リロケーション)とを、矛盾なく両立させることができる。
<タスクの一時中断>
マルチタスクOSでは、タスクの実行はしばしば割り込みにより中断される。
マルチタスクOSでは、タスクの実行はしばしば割り込みにより中断される。
割り込み後はOSの割り込みハンドラが実行され、必要に応じて、別のタスクに実行が切替えられる場合と、タスクの切り替えなしに元のタスクに復帰する場合がある。
本実施形態のプロセッサでは、割り込みコントローラから割り込み要求があると、保護タスクの実行は中断され、割り込みベクタで指定されるアドレスの割り込みハンドラの実行が開始される。すなわち、それまでの保護タスクのレジスタ値(コンテキスト情報)が、割り込みハンドラによりコア902のレジスタバッファ(アレイ)915に退避され、OSを含む他のタスクからの読み出しから保護される。この割り込みにより、図6の状態遷移に示されるように、タスク状態テーブル921の値がRUNからSTOPPEDに移行する。
STOPPED状態では、中断されたタスクのコンテキストは、コア902のレジスタバッファ915を占有しているが、この状態でSUSPEND命令(タスク実行状態保存命令)が発せられると、レジスタバッファの内容は、SUSPEND命令で指定されたメモリ領域に保存され、タスク状態はSUSPENDへ移行する。
割り込みハンドラは、レジスタバッファの内容を読み出すことはできないが、それを一括してメモリに保存することはできるのである。
割り込み処理時間が長い場合や、タスク切り替えがある場合は、レジスタバッファの内容は、キャッシュメモリに保存される。また、保存されたコンテキスト情報が、さらに外部メモリへ書き出される場合もある。この場合、コンテキスト情報が所定のコンテキスト鍵で暗号化されてから、外部メモリに書き出される。
SUSPEND(保存)状態のタスクを再開するには、図5および6に示すように、タスクIDとコンテキスト情報の保存先アドレスを指定して、resume命令を発行する。
STOPPED状態(レジスタ値が保存されず、単に退避されている状態)からタスクを再開するには、continue命令を発行する。たとえば、割り込み処理が簡単に終りタスクの切り替えが起きない場合や、ソフトウェアタイマーのカウンタインクリメント処理では、それまで実行されていたレジスタ値を保存せずに、レジスタバッファアレイ915に退避させるにとどまる。この場合は、レジスタバッファからレジスタ値が復帰され、割り込み前のタスク実行が再開される。タスクの状態は、STOPPEDからRUNに戻される。
図15は、suspend(タスク状態保存)命令が出されたときの処理フローである。
まず、suspend命令の発行を受けて、タスク状態テーブル921を参照して、指定されたタスク状態がSTOPPEDであるか判断される(S601)。STOPPEDでない場合は(S601でNO)、それまのレジスタ値がコア902のレジスタバッファ(アレイ)915に退避されていないことになるので、この状態でsuspend命令が出されても無効にされ、タスク状態はINVALIDにされる(S605)。
指定されたタスク状態がSTOPPEDの場合は(S601でYES)、レジスタバッファアレイ915にある内容が、suspend命令で指定されたアドレスのメモリ領域に書き込まれ、保存が開始される(S692)。
保存はキャッシュへの保存が基本であり、保存開始前にタスクチャネル916を通じてそれまで実行していたタスクのIDが、データキャッシュの保存予定コンテキスト識別子レジスタ1434に保持される。そして、データキャッシュメモリ1431上でコンテキスト情報を書き込むためのキャッシュラインが確保され、データの転送が開始される。ラインの書き込み完了ごとに、キャッシュラインのタグにコンテキストを表す識別子とタスクIDが書き込まれる。
コンテキスト情報の保存は元のメモリの内容を完全に上書きするものである。コンテキスト情報はキャッシュラインサイズの整数倍で、その先頭アドレスがかならずキャッシュラインサイズでアラインされており、通常必要とされる書き込み前に保存先内容を読み出す動作(ライトアロケート)は不要となる。
そして、コア902のハッシュ計算部922で、レジスタバッファの内容全体のハッシュが計算され、タスクIDとともに、メモリ上のレジスタ情報の最後にハッシュ値が付加される(S603)。多数ラインにわたる場合は、コア902のタスクスイッチャ(STS)914は、レジスタバッファアレイ915の情報を順次キャッシュラインに書き込みながらハッシュを計算する。
コンテキスト領域の最後にタスクIDとハッシュ値を書き込み、タグの付加が終わるとsuspend命令の実行は完了となり、タスクの状態はSUSPENDに移行する(S604)。
保存されたコンテキスト情報は、データと同様に、タスクの実行とは非同期的に外部メモリ108へと書き出される。外部メモリへの書き出し時のコンテキスト情報の取り扱いで、他の情報と異なる点が2点ある。ひとつは相対アドレス値の扱いであり、もうひとつは読み込み処理の違いである。
コンテキスト情報は複数のブロックで構成されるが、相対アドレス値として同一の値が使われる。相対アドレス値には、あらかじめ定められた定数が用いられる。コンテキスト情報にはハッシュが付加されているため、ブロックの交換に元々耐性があるためである。コンテキスト情報が保存されたキャッシュラインがフラッシュされる時、取り出された暗号属性は書き出しコンテキストキーID1415に一時的に保持される。その後の処理は、データキャッシュの書き出しと同様である。
図16は、保存されたコンテキスト情報からタスクを再開する処理フローである。
まず、保存されたコンテキスト情報を読み込んでタスクの実行を再開するために、タスクIDと保存先メモリアドレスをパラメータとしたresume命令が発行されると、指定されたタスク状態がSUSPENDであるかどうか判断される(S701)。SUSPEND状態にない場合は(S701でNO)、コンテキスト情報が保存されていないので、タスク状態はINVALIDにされる(S707)。換言すれば、resume命令はタスク状態がSUSPENDED以外の場合は、無効である。
SUSPEND状態にある場合は(S701でYES)、アドレスとタスクIDが、それぞれアドレスラインとタスクチャンネルを通して、データキャッシュ904に送られる。キャッシュのアドレスがヒットして、かつタグがコンテキストを示しており、タスクIDが一致する場合、キャッシュメモリ1431上のデータが、レジスタバッファに転送され、タスクの再開処理が開始される(S702)。
レジスタバッファへのデータ転送と並行してハッシュ計算が行なわれる(S703)。計算したハッシュが期待値と一致するかどうか判断され(S704)、不一致の場合、再開処理は中止され、タスクはINVALID状態となる(S707)。
ハッシュが一致した場合は(S704でYES)、カレントタスクレジスタに指定されたタスクのIDを設定し(S705)、タスクの状態をRUNに変更して実行が再開される(S706)。
図16のフローには記載されていないが、resume命令で指定されたコンテキスト情報の領域がキャッシュにヒットしない場合は、保存されたデータが外部メモリに書き出されている場合である。この場合は、外部メモリからのデータ読み込みが開始される。すなわち、タスクIDレジスタ1401に保持されたタスクIDと、resume命令で指定されたアドレスに対応するメモリの読み出し要求がデータキャッシュ904からBIU906に送られる。そして、タスクIDとコンテキストを意味する暗号属性が鍵値テーブル912へ送られ、FCM911で復号のための鍵が生成される。ある時点で保存されたタスクのコンテキスト情報は、すべて同じ鍵で暗号化されているので、ブロック単位の鍵生成は行なわない。
復号が完了したブロックは、順次データキャッシュ904へと送られ、タスクスイッチャ(STS)914はレジスタバッファアレイ915にその内容を読み込む。以後の処理はキャッシュがヒットした場合と同じである。
<タスクの終了>
タスクを終了して、割り当てたタスクIDとプロセッサ内の各種テーブルを別の新しいタスクのために再利用するには、タスクIDを指定してdelete命令を発行する。本実施形態では、それまでのタスクの内容が不正に覗き見されないように、システム動作中は、一度登録したタスクのタスクIDは、その登録を削除しない限り、新しいタスクのために使用することはできない。
タスクを終了して、割り当てたタスクIDとプロセッサ内の各種テーブルを別の新しいタスクのために再利用するには、タスクIDを指定してdelete命令を発行する。本実施形態では、それまでのタスクの内容が不正に覗き見されないように、システム動作中は、一度登録したタスクのタスクIDは、その登録を削除しない限り、新しいタスクのために使用することはできない。
図17は、タスク削除の処理フローを示す。
まず、タスクに対してdelete命令が発行されると、指定されたタスクがINIT、STOPPED、SUSPENDのいずれかの状態にあるかが判断される(S801)。上記のいずれの状態にもない場合(すなわちRUN,NULLである場合)には、タスクはINVALIDにされ(S805)、エラーとなる。
上記のいずれかの状態にある場合は(S801でYES)、指定されたタスクIDに対応するタグが付与されたキャッシュラインがフラッシュされ(S802)。
これにより、対応する鍵テーブル1303〜1305、命令キャッシュのオフセットテーブル1207、データキャッシュのMTRRテーブル1403もクリアされる(S803)。
これらの動作が完了すると、タスク状態がNULLにされる(S804)。
Delete命令を発行するのはタスク自身ではなくOSであり、delete命令を発行できるのはRUNとNULL以外の状態にあるタスクに対してである。
タスクが削除されてタスクIDがNULL状態となれば、再びregister命令により配布鍵を登録して、新しいタスクを実行することができる。
102 ターゲットシステム(ユーザーシステム)
103 マイクロプロセッサ
105 秘密鍵
108 外部メモリ
113 公開鍵
121 ソフトウェアベンダ
125 配布鍵
126 ブロック対応暗号処理部
200 プロセッサパッケージ
902 コア
903 命令キャッシュ
904 データキャッシュ
905 内部バス
906 バスインターフェイスユニット(BIU)
911 高速暗号鍵処理モジュール(FCM)
912 鍵値テーブル
913 配布鍵管理モジュール
913−1 シーケンサ
913−2 公開鍵復号モジュール
914 タスクスイッチャ
915 レジスタバッファアレイ
921 タスク状態テーブル
922 ハッシュ計算部
1111 情報配置記述子
1203 命令キャッシュメモリ
1204、1302、1401 カレントタスクIDレジスタ
1205 アクセス検証部
1207 オフセットテーブル
1303〜1305 キーテーブル
1311 ディスパッチャ
1312 鍵生成モジュール
1313 暗号処理モジュール
1402 MTRRテーブル管理比較部
1403 MTRR(アドレス範囲レジスタ)テーブル
1411 暗号属性送出部
103 マイクロプロセッサ
105 秘密鍵
108 外部メモリ
113 公開鍵
121 ソフトウェアベンダ
125 配布鍵
126 ブロック対応暗号処理部
200 プロセッサパッケージ
902 コア
903 命令キャッシュ
904 データキャッシュ
905 内部バス
906 バスインターフェイスユニット(BIU)
911 高速暗号鍵処理モジュール(FCM)
912 鍵値テーブル
913 配布鍵管理モジュール
913−1 シーケンサ
913−2 公開鍵復号モジュール
914 タスクスイッチャ
915 レジスタバッファアレイ
921 タスク状態テーブル
922 ハッシュ計算部
1111 情報配置記述子
1203 命令キャッシュメモリ
1204、1302、1401 カレントタスクIDレジスタ
1205 アクセス検証部
1207 オフセットテーブル
1303〜1305 キーテーブル
1311 ディスパッチャ
1312 鍵生成モジュール
1313 暗号処理モジュール
1402 MTRRテーブル管理比較部
1403 MTRR(アドレス範囲レジスタ)テーブル
1411 暗号属性送出部
Claims (4)
- それぞれ固有のプログラム鍵に基づいて暗号化された複数のプログラムが格納されている外部メモリのアドレスを指定して、読み出し要求を発行するプロセッサコアと、
前記プロセッサコアの読み出し要求に応じて、前記外部メモリの指定されたアドレスのデータブロックを読み出すインターフェイスと、
前記プログラムの実行制御単位であるタスクごとに与えられるタスク識別子に対応して、 前記プログラム鍵を保持するタスク鍵テーブルと、
前記タスク識別子ごとに、前記プログラムが配置された先頭アドレスをオフセット値として保持するオフセットテーブルと、
前記読み出し要求により指定されたアドレスと、前記オフセットテーブルのタスク識別子で指定されるオフセット値とから相対アドレス値を計算し、この相対アドレス値を、前記プログラム鍵で暗号化したブロック対応鍵を生成する鍵生成部と、
前記読み出されたデータブロックを、前記ブロック対応鍵により復号化する暗号処理部と、
前記復号化されたデータブロックをキャッシュライン単位に読み込むキャッシュメモリと、
を備えるマイクロプロセッサ。 - 前記プロセッサコアが指定する外部メモリのアドレスは、仮想アドレスであり、
前記マイクロプロセッサは、所定の変換情報に基づいて仮想アドレスから物理アドレスへ変換して外部メモリにアクセスするアドレス変換機能をさらに有し、
前記鍵生成部は、前記仮想アドレスから相対アドレス値を計算することを特徴とする請求項1に記載のマイクロプロセッサ。 - 現在実行中のタスクの識別子を保持するタスクレジスタをさらに有し、
前記鍵生成部は、前記相対アドレス値に所定の秘密定数を加算し、前記加算結果を、前記タスクレジスタに保持されたタスク識別子で指定されるプログラム鍵によって暗号化して、前記ブロック対応鍵を生成することを特徴とする請求項1に記載のマイクロプロセッサ。 - 現在実行されているタスクの識別子を保持するタスクレジスタと、
複数のキャッシュラインから構成され、タスクの要求があったときに、外部メモリに暗号化された状態で格納されているデータを、前記キャッシュライン単位に前記タスクの識別子と対応付けて、平文状態で読み込み可能なキャッシュメモリと、
前記暗号状態のデータを、キャッシュラインごとに異なるブロック対応暗号鍵で前記平文に復号する暗号処理部と、
前記暗号状態のデータのアドレス範囲を、前記タスクの識別子と対応付けて保持するアドレス範囲レジスタと、
前記アドレス範囲レジスタに保持されたアドレス範囲と、前記タスクの要求先のアドレスとから相対アドレスを計算し、この相対アドレスを所定の鍵で暗号化することにより前記ブロック対応暗号鍵を生成する暗号鍵生成部とを備え、前記タスクの実行中に、第2のタスクの要求があった場合に、前記暗号処理部は、前記タスクレジスタに保持されているタスクの識別子に対応するキャッシュラインの内容を、前記ブロック対応暗号鍵で暗号化し、
前記キャッシュメモリは、前記暗号化されたデータを外部メモリに書き戻し可能であることを特徴とするマイクロプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008276073A JP4643702B2 (ja) | 2008-10-27 | 2008-10-27 | マイクロプロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008276073A JP4643702B2 (ja) | 2008-10-27 | 2008-10-27 | マイクロプロセッサ |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001304488A Division JP4226816B2 (ja) | 2001-09-28 | 2001-09-28 | マイクロプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009064462A true JP2009064462A (ja) | 2009-03-26 |
JP4643702B2 JP4643702B2 (ja) | 2011-03-02 |
Family
ID=40558936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008276073A Expired - Fee Related JP4643702B2 (ja) | 2008-10-27 | 2008-10-27 | マイクロプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4643702B2 (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5377748B2 (ja) * | 2010-02-18 | 2013-12-25 | 株式会社東芝 | プログラム |
JP2016523421A (ja) * | 2013-06-27 | 2016-08-08 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法、データ処理プログラム、コンピュータ・プログラム製品、およびデータ処理システム |
CN107690621A (zh) * | 2015-06-16 | 2018-02-13 | Arm 有限公司 | 受保护的异常处置 |
CN111752200A (zh) * | 2020-07-08 | 2020-10-09 | 深圳市有方科技股份有限公司 | 程序运行方法、计算机设备及可读存储介质 |
US10802729B2 (en) | 2015-06-16 | 2020-10-13 | Arm Limited | Apparatus and method for sharing pages including enforcing ownership rights independently of privilege level |
US10936504B2 (en) | 2015-06-16 | 2021-03-02 | Arm Limited | Apparatus and method for address translation and control of whether an access request is rejected based on an ownership table indicating an owner process for a block of physical addresses |
US11314658B2 (en) | 2015-06-16 | 2022-04-26 | Arm Limited | Apparatus and method including an ownership table for indicating owner processes for blocks of physical addresses of a memory |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6079446A (ja) * | 1983-10-06 | 1985-05-07 | Hitachi Ltd | 多重仮想記憶デ−タ処理装置 |
JPH03204744A (ja) * | 1990-01-08 | 1991-09-06 | Nec Corp | アドレス変換機構 |
JPH03235144A (ja) * | 1990-02-13 | 1991-10-21 | Sanyo Electric Co Ltd | キャッシュメモリ制御装置 |
JPH03235143A (ja) * | 1990-02-13 | 1991-10-21 | Sanyo Electric Co Ltd | キャッシュメモリ制御装置 |
JPH06266620A (ja) * | 1993-03-16 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | キャッシュメモリを用いた排他制御システム |
JPH06266610A (ja) * | 1993-03-16 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | 処理の中断が可能な排他制御方式 |
JPH06266621A (ja) * | 1993-03-17 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス方法 |
JPH06282488A (ja) * | 1993-03-25 | 1994-10-07 | Mitsubishi Electric Corp | キャッシュ記憶装置 |
JPH0728703A (ja) * | 1993-07-09 | 1995-01-31 | Nippon Telegr & Teleph Corp <Ntt> | 排他制御可能なマルチプロセッサシステム |
JPH07311712A (ja) * | 1994-05-19 | 1995-11-28 | Toshiba Corp | 障害復旧方法 |
JPH09259044A (ja) * | 1996-03-21 | 1997-10-03 | Fuji Xerox Co Ltd | 機密保護機能付き情報処理装置および機密保護方法 |
-
2008
- 2008-10-27 JP JP2008276073A patent/JP4643702B2/ja not_active Expired - Fee Related
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6079446A (ja) * | 1983-10-06 | 1985-05-07 | Hitachi Ltd | 多重仮想記憶デ−タ処理装置 |
JPH03204744A (ja) * | 1990-01-08 | 1991-09-06 | Nec Corp | アドレス変換機構 |
JPH03235144A (ja) * | 1990-02-13 | 1991-10-21 | Sanyo Electric Co Ltd | キャッシュメモリ制御装置 |
JPH03235143A (ja) * | 1990-02-13 | 1991-10-21 | Sanyo Electric Co Ltd | キャッシュメモリ制御装置 |
JPH06266620A (ja) * | 1993-03-16 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | キャッシュメモリを用いた排他制御システム |
JPH06266610A (ja) * | 1993-03-16 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | 処理の中断が可能な排他制御方式 |
JPH06266621A (ja) * | 1993-03-17 | 1994-09-22 | Nippon Telegr & Teleph Corp <Ntt> | データアクセス方法 |
JPH06282488A (ja) * | 1993-03-25 | 1994-10-07 | Mitsubishi Electric Corp | キャッシュ記憶装置 |
JPH0728703A (ja) * | 1993-07-09 | 1995-01-31 | Nippon Telegr & Teleph Corp <Ntt> | 排他制御可能なマルチプロセッサシステム |
JPH07311712A (ja) * | 1994-05-19 | 1995-11-28 | Toshiba Corp | 障害復旧方法 |
JPH09259044A (ja) * | 1996-03-21 | 1997-10-03 | Fuji Xerox Co Ltd | 機密保護機能付き情報処理装置および機密保護方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5377748B2 (ja) * | 2010-02-18 | 2013-12-25 | 株式会社東芝 | プログラム |
JP2016523421A (ja) * | 2013-06-27 | 2016-08-08 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法、データ処理プログラム、コンピュータ・プログラム製品、およびデータ処理システム |
CN107690621A (zh) * | 2015-06-16 | 2018-02-13 | Arm 有限公司 | 受保护的异常处置 |
KR20180017095A (ko) * | 2015-06-16 | 2018-02-20 | 에이알엠 리미티드 | 보호된 예외 핸들링 |
JP2018523211A (ja) * | 2015-06-16 | 2018-08-16 | エイアールエム リミテッド | 保護された例外処理 |
US10802729B2 (en) | 2015-06-16 | 2020-10-13 | Arm Limited | Apparatus and method for sharing pages including enforcing ownership rights independently of privilege level |
US10838877B2 (en) | 2015-06-16 | 2020-11-17 | Arm Limited | Protected exception handling |
US10936504B2 (en) | 2015-06-16 | 2021-03-02 | Arm Limited | Apparatus and method for address translation and control of whether an access request is rejected based on an ownership table indicating an owner process for a block of physical addresses |
US11314658B2 (en) | 2015-06-16 | 2022-04-26 | Arm Limited | Apparatus and method including an ownership table for indicating owner processes for blocks of physical addresses of a memory |
KR102592377B1 (ko) * | 2015-06-16 | 2023-10-23 | 에이알엠 리미티드 | 보호된 예외 핸들링 |
CN111752200A (zh) * | 2020-07-08 | 2020-10-09 | 深圳市有方科技股份有限公司 | 程序运行方法、计算机设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP4643702B2 (ja) | 2011-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4226816B2 (ja) | マイクロプロセッサ | |
JP3866597B2 (ja) | 内部メモリ型耐タンパプロセッサおよび秘密保護方法 | |
JP4098478B2 (ja) | マイクロプロセッサ | |
US6983374B2 (en) | Tamper resistant microprocessor | |
US9954681B2 (en) | Systems and methods for data encryption | |
JP4226760B2 (ja) | マイクロプロセッサ、これを用いたマルチタスク実行方法、およびマルチレッド実行方法 | |
US7590869B2 (en) | On-chip multi-core type tamper resistant microprocessor | |
KR100924043B1 (ko) | 보안 데이터 프로세싱 및 전송을 위한 방법들 및 장치들 | |
US7673152B2 (en) | Microprocessor with program and data protection function under multi-task environment | |
US7694151B1 (en) | Architecture, system, and method for operating on encrypted and/or hidden information | |
JP3880933B2 (ja) | 耐タンパマイクロプロセッサ及びキャッシュメモリ搭載プロセッサによるデータアクセス制御方法 | |
JP4643702B2 (ja) | マイクロプロセッサ | |
JP2005521942A (ja) | 領域粒状、ハードウェア制御メモリ暗号化を提供するシステムおよび方法 | |
JP2003051819A (ja) | マイクロプロセッサ | |
US11748493B2 (en) | Secure asset management system | |
Whelihan et al. | A key-centric processor architecture for secure computing | |
JP4021810B2 (ja) | プロセッサ、プロセッサシステム及びキャッシュ一貫性制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20101109 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101202 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131210 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |