(57)【特許請求の範囲】
【請求項１】
コンピュータ・システム中のプロセッサであって、
前記プロセッサは、前記コンピュータ・システム中の他のソフトウェアがアクセスできないように暗号によって保護されるコードおよびデータを含む安全オブジェクトをサポートするメカニズムを含み、前記メカニズムは、前記安全オブジェクトの秘匿性および完全性の両方を保護する暗号法を用い、
前記メカニズムは、
（１）前記コードおよびデータが外部メモリから前記プロセッサのキャッシュ中に移動される際に復号し、（２）前記コードおよびデータが前記キャッシュから外部メモリに移動される際に暗号化するための暗号エンジンと、
前記安全オブジェクトの前記コードが前記プロセッサ上で実行されている間、前記安全オブジェクトの前記データへのアクセスを提供するキー情報を前記暗号エンジンの中にロードする命令であって、当該命令は、前記安全オブジェクトの前記データへのアクセスを提供するためのオペコード・フィールドと、前記キーをロードするために使われるオペコード・フィールドのオペランド・フィールドとを有し、当該オペランド・フィールドは、前記復号のためのキーが前記他のソフトウェアには一切利用できないように、当該他のソフトウェアが使用できない暗号キー情報への間接参照を提供する、前記ロードする命令と
を含む、前記プロセッサ。
【請求項２】
前記安全オブジェクトの前記データは、前記プロセッサによって前記安全オブジェクトの前記コードが実行されている間だけアクセス可能なプライベート・データを含む、請求項１に記載のプロセッサ。
【請求項３】
前記メカニズムは、
前記安全オブジェクトの前記データが前記プロセッサ上で実行されている間、前記キー情報を前記暗号エンジン中にロードするための第一命令と、
前記暗号エンジン中の前記キー情報を以前の状態に復元するための第二命令と
をさらに含む、請求項１又は２に記載のプロセッサ。
【請求項４】
前記安全オブジェクトの前記データはプライベート・データを含み、
前記プライベート・データは、前記安全オブジェクトのコード内からアクセスされたときだけ又は当該プライベート・データが前記プロセッサ内に在るときとだけ、復号される、請求項１に記載のプロセッサ。
【請求項５】
前記第一命令のフィールドから抽出された暗号化キー情報を復号して得られた前記キー情報を、前記暗号エンジン中にロードする、請求項３に記載のプロセッサ。
【請求項６】
前記第一命令は、他のソフトウェアから前記キー情報を保護する保護領域に格納されている、キー情報への間接参照を用いる、請求項３に記載のプロセッサ。
【請求項７】
前記プロセッサによる前記コードの前記実行の間保護される、前記プロセッサ内の少なくとも一つのキャッシュをさらに備えている、請求項１〜６のいずれか一項に記載のプロセッサ。
【請求項８】
前記コードの前記実行が割り込みされたとき前記安全オブジェクトへのアクセスを提供する暗号キー情報への間接参照を保存し、後で前記実行が再開されたとき前記間接参照を復元する、割り込みハンドラおよびオペレーティング・システム・コードの少なくとも一つをさらに含む、請求項１〜７のいずれか一項に記載のプロセッサ。
【請求項９】
前記安全オブジェクトは、ファイル・システム中に情報を格納しこれから情報を取り出し、前記情報は前記他のソフトウェアから暗号によって保護される、請求項１〜８のいずれか一項に記載のプロセッサ。
【請求項１０】
コンピュータ・システム中のプロセッサにおいて、安全オブジェクトを保護する方法であって、前記プロセッサが、
前記コンピュータ・システム中の他のソフトウェアがアクセスできないように暗号によって保護されるコードおよびデータを含む安全オブジェクトをサポートするメカニズムを提供するステップであって、前記メカニズムは、前記安全オブジェクトの秘匿性および完全性の両方を保護する暗号法を用いる、前記提供するステップ
を実行することを含み、
前記メカニズムは、
（１）前記コードおよびデータが外部メモリから前記プロセッサのキャッシュ中に移動される際に復号し、（２）前記コードおよびデータが前記キャッシュから外部メモリに移動される際に暗号化するための暗号エンジンと、
前記安全オブジェクトの前記コードが前記プロセッサ上で実行されている間、前記安全オブジェクトの前記データへのアクセスを提供するキー情報を前記暗号エンジンの中にロードする命令であって、当該命令は、前記安全オブジェクトの前記データへのアクセスを提供するためのオペコード・フィールドと、前記キーをロードするために使われるオペコード・フィールドのオペランド・フィールドとを有し、当該オペランド・フィールドは、前記復号のためのキーが前記他のソフトウェアには一切利用できないように、当該他のソフトウェアが使用できない暗号キー情報への間接参照を提供する、前記ロードする命令と
を含む、前記方法。
【請求項１１】
前記安全オブジェクトの前記データは、前記プロセッサによって前記安全オブジェクトの前記コードが実行されている間だけアクセス可能なプライベート・データを含む、請求項１０に記載の方法。
【請求項１２】
前記メカニズムは、
前記安全オブジェクトの前記データが前記プロセッサ上で実行されている間、前記キー情報を前記暗号エンジン中にロードするための第一命令と、
前記暗号エンジン中の前記キー情報を以前の状態に復元するための第二命令と
をさらに含む、請求項１０又は１１に記載の方法。
【請求項１３】
前記安全オブジェクトの前記データはプライベート・データを含み、
前記プライベート・データは、前記安全オブジェクトのコード内からアクセスされたときだけ又は当該プライベート・データが前記プロセッサ内に在るときとだけ、復号される、請求項１０に記載の方法。
【請求項１４】
前記プロセッサが、
前記第一命令のフィールドから抽出された暗号化キー情報を復号して得られた前記キー情報を、前記暗号エンジン中にロードするステップ
をさらに実行する、請求項１２に記載の方法。
【請求項１５】
前記第一命令は、他のソフトウェアから前記キー情報を保護する保護領域に格納されている、キー情報への間接参照を用いる、請求項１２に記載の方法。
【請求項１６】
前記プロセッサが、前記プロセッサによる前記コードの前記実行の間保護される、前記プロセッサ内の少なくとも一つのキャッシュをさらに備えている、請求項１０〜１５のいずれか一項に記載の方法。
【請求項１７】
前記メカニズムが、前記コードの前記実行が割り込みされたとき前記安全オブジェクトへのアクセスを提供する暗号キー情報への間接参照を保存し、後で前記実行が再開されたとき前記間接参照を復元する、割り込みハンドラおよびオペレーティング・システム・コードの少なくとも一つをさらに含む、請求項１０〜１６のいずれか一項に記載の方法。
請求項１０〜１５のいずれか一項に記載の方法。
【請求項１８】
前記安全オブジェクトは、ファイル・システム中に情報を格納しこれから情報を取り出し、前記情報は前記他のソフトウェアから暗号によって保護される、請求項１０〜１７のいずれか一項に記載の方法。
【請求項１９】
前記プロセッサが、
前記メカニズムにおいて使用するための安全オブジェクトを生成するステップであって、前記安全オブジェクトは、前記安全オブジェクト内で処理されている間プライベート情報を復号する、前記安全オブジェクト中の命令を実行することによってだけ、復号されたフォーマットでアクセスが可能な前記プライベート情報を含む、前記生成するステップと、
前記生成された安全オブジェクトをメモリに送信するステップと
を実行することをさらに含む、請求項１０〜１８のいずれか一項に記載の方法。
【請求項２０】
前記プロセッサが、
前記第一命令のフィールドから抽出された暗号化キー情報を復号することによって得られたキー情報を、前記暗号エンジン中にロードするステップ
を実行することをさらに含む、請求項１２に記載の方法。
【請求項２１】
前記プロセッサが、
前記安全オブジェクトの前記実行の過程で別のオブジェクトを呼び出すステップ、および
前記安全オブジェクトの前記実行の過程で別のオブジェクトにメッセージを送信するステップ
の少なくとも一つを実行することを含む、請求項１０〜２０のいずれか一項に記載の方法。
【請求項２２】
前記プロセッサが、
プライベート情報が第一安全オブジェクトから第二安全オブジェクトに渡されるときに前記プライベート情報を暗号化変換するステップ
を実行することをさらに含む、請求項１０〜２１のいずれか一項に記載の方法。
【請求項２３】
コンピュータ・システム中のプライベート情報を保護するためのコンピュータ・プログラムであって、前記コンピュータ・システム中のプロセッサに、請求項１０〜２２のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ・システム中の他のソフトウエアからのアタックに対する保護を含め、さまざまな形のアタックから、コンピュータ・システム中のデータおよびソフトウエアを保護することに関する。さらに具体的には、ある例示実施形態において、２つの新規マシン命令が暗号化／復号を制御し、「安全オブジェクト」中の機密ソフトウエアおよびデータが、これら機密ソフトウエアおよびデータがＣＰＵ内部で使用されている期間を除き、常時暗号化されているようにするメカニズムを提供する。
【背景技術】
【０００２】
インターネットは、世の中を一変させた強力なツールである。ＩＢＭ（ＩＢＭの登録商標）の先の会長でＣＥＯだったルー・ガースナーがいったように「インターネットは、事業、経済、および社会の変化を促進するための、我々がかつて経験した中で唯一、最強のツールにほかならない」。
【０００３】
だが、多くのツールと同様、このツールも善用も悪用もできる。毎週のごとく、我々は、インターネット・ベースのアタックで、システムが侵害され、機密情報が盗まれた事件を耳にする。
【０００４】
最近のニュースの一部には次のようなものがある。
●  英国のＭＩ５：中国のサイバー・アタックの標的である上位の会社、（ロンドン）タイムス、２００７年１２月３日、
●  不法ソフトウエアによる大量のデータ漏洩：ハナフォード・ブラザーズ・スーパーマーケットのサーバ上に密かにインストールされた不正コンピュータ・プログラムが、４２０万に上るデビット・カードおよびクレジット・カードの情報を漏洩、ＡＰ、２００８年３月２８日、
●  ロシアの非行集団が大規模画策でＰＣをハイジャック、ニューヨーク・タイムス、２００８年８月６日、
●  ホテル・チェーン・ハッカーによるクレジット・カード明細の盗難により、８００万の人々がＩＤ詐欺のリスクをかかえる、（ＵＫ）ディリー・メール、２００８年８月２５日、
●  ニューヨーク・メロン銀行のデータ漏洩、今や１，２５０万に影響、ロイター、２００８年８月２８日、および
●  米国当局は、ＴＪＸカンパニーズを含む、数社の小売業者から数千万のクレジット・カードおよびデビット・カード番号を盗んだとして、５カ国の１１人を告発した、ロイター、２００８年８月２８日（上記ニューヨークの銀行の記事から引用）。
【０００５】
この他にも多くの類似の事件がある。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このように、インターネット・ベースのアタックによるコンピュータ・システムからの情報窃取の防止を助力し、コンピュータ・システム中の機密データおよびソフトウエアを、アタッカが標的コンピュータ・システムに取り込ませることのでき得るソフトウエアを含む他のソフトウエアから保護することができるシステムおよび方法が求められている。
【課題を解決するための手段】
【０００７】
本発明の典型的特徴は、従来型システムの上記および他の典型的な問題、欠点、並びに不利点をかんがみ、コンピュータ・システムに対し、暗号によってコンピュータ・システム中の他のソフトウエアから保護されたコードおよびデータを含む、安全オブジェクトをサポートするためのメカニズムを包含するプロセッサを提供することである。
【０００８】
本発明の別の典型的特徴は、データおよびコードの少なくとも一つを、安全オブジェクトが実際にＣＰＵ内で処理されているときを除き、安全オブジェクトの暗号によって保護された部分として維持するための構造および方法を提供することである。
【０００９】
本発明の別の典型的特徴は、安全オブジェクトが、該安全オブジェクトの処理のためＣＰＵの中に入るときに安全オブジェクトを復号するための、暗号エンジンおよび暗号エンジン中にキーをロードするマシン命令を包含するメカニズムを提供することである。
【００１０】
従って、本明細書の第一例示態様においては、暗号によってコンピュータ・システム中の他のソフトウエアから保護されたコードおよびデータを包含する安全オブジェクトをサポートするメカニズムを組み込んだ、コンピュータ・システム中のプロセッサについて説明する。
【００１１】
また、本明細書の第二例示態様においては、安全オブジェクトのコードがプロセッサで実行されている間、安全オブジェクトへのアクセスを提供するための暗号エンジンおよび暗号エンジン中にキーをロードする命令を包含するメカニズムを説明する。
【００１２】
さらに、本明細書の第三例示態様においては、プライベート情報を保護する方法、およびその方法を実行するマシン可読命令を格納する記憶媒体を説明する。
【００１３】
さらに、本明細書の第四例示態様においては、暗号によってコンピュータ・システム中の他のソフトウエアから保護された、マシン可読記憶媒体中に有形に具現されたデータ構造を説明する。
【００１４】
さらに、本明細書の第五例示態様においては、暗号によってコンピュータ・システム中の他のソフトウエアから保護されたコードおよびデータを包含する安全オブジェクトをサポートするメカニズムを提供するマシン命令を説明する。
【００１５】
従って、本発明は、データ構造のプライベート・データが、コンピュータ・システム中のＣＰＵ内で処理されている間を除き、常時、暗号によって保護され、これにより、そのプライベート・データに対し、コンピュータ・システム中の他のソフトウエアからの保護を与える新規のマシン命令およびデータ構造を提供する。
【００１６】
前述および他の目的、態様および利点は、以下に、図面を参照しながら本発明の例示実施形態を詳細説明することによってよりよく理解できるであろう。
【図面の簡単な説明】
【００１７】
【図１】暗号によって他のソフトウエアから保護されているコードおよびデータを包含する安全オブジェクト１００の高級言語の記述を示す。
【図２】安全オブジェクトの低レベルのインプリメンテーション２００（例、コンパイル・バージョン）の実例である。
【図３】安全オブジェクトに対するサポートを提供するマイクロプロセッサの例示ブロック図３００を示す。
【図４】安全オブジェクトを実装するため使われるｅｓｍ命令フォーマット４００を示す。
【図５】第二例示実施形態の概念５００を例示的に示し、暗号化／復号キーを見出すため、ｅｓｍ命令のハンドルが復号される。
【図６】第一例示実施形態に対し、安全オブジェクトを包含する実行ファイルを構築するプロセス６００を示す。
【図７】第二例示実施形態に対し使用可能な、安全オブジェクトを包含する実行ファイルを構築する別のプロセス７００を示す。
【図８】安全オブジェクトが他のオブジェクトに対しどのようにメッセージを呼び出しまたはこれに送信するかを示す。
【図９】本発明を中に組み入れるための例示的ハードウエア／情報処理システム９００を示す。
【図１０】本発明による方法のプログラムのステップを格納するための信号担持記憶媒体１０００（例、記憶媒体）を示す。
【発明を実施するための形態】
【００１８】
以下に、図面を参照しながら、本発明による方法および構造の例示的実施形態を説明する。
【００１９】
本発明は、ソフトウエア・アタックに対し強力な防衛を提供する新規の構成概念「安全オブジェクト」を実装するためのメカニズムを提供する。この安全オブジェクトは、他のオブジェクト指向プログラミング言語のオブジェクトと同様に、データと、そのデータを操作しデータへのアクセスを提供するコードとを包含する。安全オブジェクトは、安全オブジェクトのプライベート・コードおよびデータが、他の一切のソフトウエアが安全オブジェクトのプライベート情報にアクセスできないように、暗号によって保護されているという点で、Ｊａｖａなど既存のプログラミング言語に存在するオブジェクトとは異なる。
【００２０】
図１は、安全オブジェクト１００が、高級プログラミング言語において、どのように見え得るかその一例を提示している。この安全オブジェクトは、プライベート・データ１０１およびプライベート・メソッド１０２、並びに、そのパブリック・インタフェース１０３、１０５を介して安全オブジェクトへのアクセスを可能にするメソッドを包含する。他のソフトウエアは安全オブジェクトを用いることができる（すなわち、他のソフトウエアは安全オブジェクトに対し「呼び出し」または「メッセージの送信」をすることができる）が、他のソフトウエアは、パブリック・インタフェース１０３、１０５を介してだけ安全オブジェクトにアクセスすることができる。
【００２１】
安全オブジェクトをベースとしたシステムでは、プライベート情報は、ほぼ常時暗号化されている。これは、メモリ中に在る間およびディスク上に在る間は、ページング・システム中でも、ファイル・システム中でも暗号化されている。
【００２２】
図２は、安全オブジェクトのコンパイル・バージョン２００が、メモリ中でどのように見え得るかを示す。
【００２３】
安全オブジェクトのプライベート情報は以下のときにだけ「非暗号化状態」である。
●  安全オブジェクト内部からアクセスされるとき、
●  その情報がマイクロプロセッサ内部にある間だけ。
【００２４】
他のコードは、安全オブジェクトのプライベート情報へのアクセスを持たないので、別のソフトウエア・モジュールの脆弱性を介してシステム中に入り込んだソフトウエア・アタックは、安全オブジェクトのプライベート情報の暗号化されていないバージョンへのアクセス手段を有さない。図２に示されるように、暗号化されたプライベート情報には、プライベート・コードとプライベート・データとを含めることができ、これらは図１のプライベート・コード１０２およびプライベート・データ１０１に対応している。
【００２５】
本発明の概念を説明するために用いられる例示実施形態において、本新規設計は、安全オブジェクトのパブリック・メソッドに参入しこれから出るために使われ、「安全メソッドに参入する（ｅｎｔｅｒ  ｓｅｃｕｒｅ  ｍｅｔｈｏｄ）」および「安全メソッドから出る（ｌｅａｖｅ  ｓｅｃｕｒｅ  ｍｅｔｈｏｄ）」にそれぞれ対応する新規の２つの命令、「ｅｓｍ」および「ｌｓｍ」を包含する。
【００２６】
ｅｓｍ命令は、安全オブジェクトのプライベート・コードおよびデータがメモリからマイクロプロセッサ中に移動するに際して、これらコードおよびデータを復号するために使われる特別レジスタ中に、いくつかの暗号キー情報をロードする。引数など本メソッドに渡される他のデータ、および安全オブジェクトが呼び出されたときに保存された復帰アドレスは、この暗号化なしにアクセスされる。
【００２７】
図３は、安全オブジェクトに対しサポートを提供するマイクロプロセッサ３０１のブロック図３００である。このマイクロプロセッサは、現在一般に使われているマイクロプロセッサとほとんど同じようにコードを実行するが、（１）機密情報が外部メモリ３０３からＬ１キャッシュ３０４中に移動される際にその情報を復号し、（２）機密情報がＬ１キャッシュ３０４から外部メモリ３０３に移動される際にそれを暗号化するための暗号エンジン３０２を包含する。この暗号化は、ウイルス、ワーム、および他の「アタック・ソフトウエア」を含め、他のソフトウエアが機密情報の暗号化されていないバージョンを取得できないことを確実にするため使われる。
【００２８】
また図３は、暗号エンジン内に、暗号化および復号プロセスで使われるキーを保持する「キー」と標示されたブロック３０５を示している。このキー・ブロックには、これらのキーを保持するために特別に指定された暗号レジスタのセットを包含させることができよう。なお、暗号エンジン３０２は、プロセッサ３０７と関連させたコプロセッサとすることも、あるいはこの暗号エンジンをＣＰＵプロセッサ自体によって実行される機能とすることもできよう。
【００２９】
ｌｓｍ命令はオペコードだけで構成することができ、これは、特別暗号レジスタ３０５の前の状態を復元するので、安全メソッドに戻されたとき、この暗号化および復号なしに通常の非安全コードが実行できる。
【００３０】
この安全オブジェクト・システムにおいて、安全オブジェクトのプライベート情報を復号するのに用いられるキー３０５は安全オブジェクトには利用可能であるが、他の一切のコードはこれらのキーを利用できない。
【００３１】
図４に例示的に示すように、ｅｓｍ命令４００は、オブジェクトのプライベート・データへのアクセスを提供するため、オペコード・フィールド４０１と、キー・ブロック３０５中の特別暗号キー・レジスタの中にキーをロードするのに使われる、オペコード・フィールド４０１の「ハンドル」と言われるオペランド・フィールド４０２とを有する。しかしながら、「オブジェクト」のプライベート情報の復号に使われるキーは、他の一切のコードが利用できてはならないので、ハンドルは、他のソフトウエアが使用できない暗号キー情報への間接参照を提供する。このプロセスについては後記でさらに詳しく説明する。
【００３２】
安全オブジェクトの内部で、プライベート情報は、メモリ３０３からＣＰＵ３０７への経路上で復号され、ＣＰＵ３０７からメモリ３０３への経路上で暗号化される。この暗号法は、安全オブジェクトのプライベート・コードおよびデータの完全性並びにこれらの秘匿性を保護するための暗号完全性バリューを包含する。かくして、敵対ソフト、またはソフトウエア・バグ、または別のソフトウエア・モジュールからのソフトウエア・アタックがオブジェクトのプライベート・コードまたはデータを「改ざんする」と、該オブジェクトが次にそのコードまたはデータにアクセスするとき、暗号ハードウエアが暗号完全性例外を生成することになる。
【００３３】
これに対し、安全オブジェクトがそのプライベート・データ１０１を更新するときは、その暗号完全性バリューを更新するため「オブジェクト」のキーが使われ、「オブジェクト」がこのデータに後にアクセスするとき、完全性例外は発生しない。暗号完全性保護を包含する暗号化および復号プロセスは、前述で識別された同時係属出願中に記載されたようにして実施することができよう。
【００３４】
この完全性保護は、オブジェクトのプライベート情報へのアクセスを提供するキーを保護するために必須でもある。敵対ソフトが、他の何らかのコードを使って安全オブジェクトのハンドル（これは安全オブジェクトのｅｓｍ命令の中で使用可能）を使用しようとすると、この「他の」コードの使用が暗号完全例外を生成し、その実行が打ち切られることになる。敵対ソフトはキーが利用できないので、敵対ソフトは、キーが使われるときに暗号完全性チェックに合格するコードを生成することはできない。そして、敵対ソフトは、ハンドルを介する以外に、キーを取得または使用するどのような方法も持たないので、敵対ソフトは安全オブジェクトのキーまたはプライベート情報にアクセスを得るどのような方法も有さない。
【００３５】
一つの例示実装において、暗号キー情報およびハンドルからキーへのマッピングは、ソフトウエアがアクセスできない保護領域３０６に格納される。この実装において、ＣＰＵがｅｓｍ命令を実行するとき、ＣＰＵはｅｓｍ命令からハンドルを取得し、そのハンドルを暗号キー情報にマップし、次いでこの暗号キー情報をキー・ブロック３０５中の特別暗号レジスタ中にロードする。
【００３６】
図５に示される第二例示的実装５００では、ハンドルは、オブジェクトの暗号キー情報を格納する必要性を排除するような仕方で設計される。この設計において、ハンドルは安全オブジェクトのキー情報の暗号化形態であり、これは、ソフトウエアには利用できない特別な「システム・キー」の下に暗号化されている。この設計では、ＣＰＵは、ｅｓｍ命令の実行において、上記システム・キーを使ってハンドルを復号してオブジェクトのキー情報を得、次いで、該オブジェクトのキー情報を暗号レジスタ中にロードしてオブジェクトのプライベート情報へのアクセスを提供する。このシステム・キーをさらに保護しなければならないが、この設計は、多くの数に上り得る、オブジェクト・キーとハンドルからオブジェクト・キーへのマッピングとを格納しておく必要がないので、より拡張性が高い。
【００３７】
この暗号化、復号、および完全性チェックを実装する一つの方法の詳細が、前述で識別した同時係属出願に記載されている。
【００３８】
図６および図７は、前述２種類の実装に対する安全オブジェクトを備えた実行ファイルを構築するプロセスを例示的に示す。
【００３９】
図６は、第一例示的実装に対する実行ファイルを構築するプロセス６００を示す。通常のコンパイラ処理６０１に加え、ステップ６０２において、コンパイラは、安全オブジェクトのパブリック・メソッドへの参入点およびこれからの戻り点において、ｅｓｍおよびｌｓｍ命令を生成することになる。引き続きの追加処理は、図６に示されるように、
●  所与のオブジェクトに対するｅｓｍ命令をハンドルと関連付ける（ステップ６０３）、
●  オブジェクトのハンドルを、秘匿性および完全性を保護するための暗号キー情報にリンクする（ステップ６０４）、
●  各オブジェクトのキー情報を使ってそのオブジェクトのプライベート・コードおよびデータを暗号化する（ステップ６０５）、および
●  キー情報およびハンドルからキー情報へのマッピングを、大部分のソフトウエアはアクセスできないが、ｅｓｍ命令の実行において使用される「保護領域」に格納する（ステップ６０６）、
ことになる。
【００４０】
図７は、第二例示的実装に対する実行ファイルを構築するプロセス７００を示す。前のケースにおけるように、ステップ７０１で通常のコンパイラの処理が行われ、ステップ７０２において、コンパイラは、安全オブジェクトのパブリック・メソッドへの参入点およびこれからの戻り点において、ｅｓｍおよびｌｓｍ命令を生成することになる。しかしながら、このケースでの追加処理は、
●  各安全オブジェクトに対する暗号キー情報を生成する（ステップ７０３）、
●  各オブジェクトの暗号キー情報を使ってそのオブジェクトのプライベート・コードおよびデータを暗号化する（ステップ７０４）、
●  特別な「システム・キー」を用いて各オブジェクトの暗号キー情報を暗号化する（ステップ７０５）、および
●  各オブジェクトのキー情報の暗号化形態を、そのオブジェクトのｅｓｍ命令中のハンドルとして用いる（ステップ７０５）、
ことになる。
【００４１】
この追加処理は、小さな、注意深く精査された信頼の置けるプログラムで行われることになる。
【００４２】
なお、第二実装においては、この追加処理は、実行ファイルが作動されるシステム上で実施する必要はない。追加処理を別の作成マシンで実施し、しかる後所望の送り先マシンに送信して実行すればよい。
【００４３】
この処理が完了したならば、実行ファイル中の安全オブジェクトは「安全」である。これらは、デバイス・ドライバ、オペレーティング・システム、およびハイパーバイザなどの特権ソフトウエア中のバグまたはそれらからのアタックを含め、他のソフトウエア・モジュール中のバグ、またはそれらからのアタックから保護される。上記の第二実装において、これらオブジェクトは、これらが作成マシンから所望の送り先マシンに「送信中」の間も保護されている。
【００４４】
この設計は、ＯＳ、ミドルウエア、およびアプリケーションのコードの何百万ものラインの正確さを証明する必要なく、所与の安全オブジェクトのコンテンツが確かに安全であると知ることを可能にする。この設計では、前述した安全オブジェクトメカニズムの正確さと、特定の安全オブジェクトの設計の正確さとを証明する必要があるだけである。
【００４５】
［安全オブジェクトの利用］
安全オブジェクトは、上記の「背景技術」セクションに記載した類のセキュリティ障害を回避するため用いることができよう。もし機密情報が安全オブジェクトの中に保存されていたとすれば、例えば、かの４２０万のクレジット・カードおよびデビット・カードの盗難は回避できたであろう。安全オブジェクト自体以外の一切のソフトウエアは、完全なリストは利用できないであろうし、注意深い設計と、「オブジェクト」のコードをできるだけ小さく保つことと、ソフトウエア脆弱性について「オブジェクト」のコードを注意深く精査することとによって、安全オブジェクトのコードへのソフトウエア・アタックの問題を最小化または回避することができよう。前述のように、アプリケーションおよびシステム・コードの何百万ものラインの正確さを証明する必要はなく、安全オブジェクトの正確さを証明するだけでよい。
【００４６】
また、「オブジェクト」自体を保護するのに加えて、安全オブジェクトへの出入りの経路を保護し、ソフトウエア・アタックがこれらの経路を「盗聴」し、多量の機密情報を時間をかけて収集することできないようにする必要もある。
【００４７】
こうした経路は、標準的な通信セキュリティ・メカニズムによって保護することが可能である。「良好な」設計においては、機密情報は決して脆弱化することはないものである。安全オブジェクトに送信される機密情報は、それが無事に安全オブジェクトの内部に入るまでは、通信セキュリティ・メカニズムによって保護されることになる。同様に、安全オブジェクトから送信される機密情報は、それが安全オブジェクトを去る前から通信セキュリティ・メカニズムによって保護されることになる。
【００４８】
この種の設計であれば、アタック・ソフトウエアは、システムからいかなる機密情報も入手することはできないであろう。アタック・ソフトウエアは、安全オブジェクト内に所在する機密情報を入手できず、機密情報が安全オブジェクトに送信、またはこれから受信される際にも機密情報を奪取できないことになろう。
【００４９】
［他のオブジェクトを呼び出すオブジェクト］
安全オブジェクトは、他のオブジェクトを呼び出す（またはこれらにメッセージを送信する）ことができる。すなわち、安全オブジェクトは、安全オブジェクトおよび非安全オブジェクトの双方を使用することができる。この一例が、図８に例示的に示されたプロセス８００に図示されている。
【００５０】
この例において、ＰｒｏｃｅｓｓＣａｒｄＲｅｑｕｅｓｔ（プロセスカード要求）８０１は、機密のクレジット・カード情報を包含する安全オブジェクトである。ＰｒｏｃｅｓｓＣａｒｄＲｅｑｕｅｓｔ  ８０１は、遠隔システムに送信する機密情報を暗号化するため、別の安全オブジェクトＥｎｃｒｙｐｔＡｎｄＤｅｃｒｙｐｔ（暗号化および復号）８０２を呼び出す。次いで、ＰｒｏｃｅｓｓＣａｒｄＲｅｑｕｅｓｔ  ８０１は、遠隔システムへの伝送のため既に暗号化されたメッセージを送信するため、普通の非安全オブジェクトであるＳｅｎｄａｎｄＲｅｃｅｉｖｅＭｓｇ（メッセージ送受信）８０３を呼び出す。
【００５１】
なお、機密情報を暗号化および復号するオブジェクトは、それが「非暗号化状態」の機密情報にアクセスする必要があるので、安全オブジェクトでなくてはならない。他方、遠隔システムにメッセージを送信するオブジェクトは、それが送信のために受け取るデータが、システム間の「送信中」の間の保護のため既に暗号化されているならば、普通の非安全オブジェクトとすることができる。また、安全オブジェクトが別のオブジェクトを呼び出す場合、呼び出されたオブジェクトのために暗号キー情報を適切にセットアップしてやる必要があることに留意する。
【００５２】
この例は、安全オブジェクトの別の態様を示している。先に述べたように、安全オブジェクト中のプライベート情報はほぼ常時暗号化されている。他方、安全オブジェクト中の公開情報は暗号化されない、すなわち安全オブジェクト暗号法の下では暗号化されない。ＰｒｏｃｅｓｓＣａｒｄＲｅｑｕｅｓｔのクラスが、遠隔システムに渡されることになる暗号化メッセージを格納するための公開フィールドを有する場合、そのフィールドを非安全ＳｅｎｄａｎｄＲｅｃｅｉｖｅＭｓｇオブジェクトに渡すことができ、そのフィールドは安全オブジェクトの暗号法によって「妨げられる」ことはないので、ＳｅｎｄａｎｄＲｅｃｅｉｖｅＭｓｇオブジェクトは、ＰｒｏｃｅｓｓＣａｒｄＲｅｑｕｅｓｔが見るのと同じメッセージを見ることになる。
【００５３】
この設計において、機密情報が脆弱化することはない。これは、安全オブジェクトの暗号法または通信暗号法のいずれかによって常時保護されている。
【００５４】
追加詳細
割り込みおよびプロセス・ディスパッチング
安全オブジェクトへの割り込みがあったとき、安全オブジェクトのプライベート情報へのアクセスを提供する特別暗号ハードウエアの状態を保存しなければならない。そして、後に安全オブジェクトが実行を再開する際に、その状態を復元しなければならない。デバイス・ドライバ、またはプロセス・ディスパッチング・コードまたは他のオペレーティング・システム・レベルのコードが「オブジェクト」のキーにアクセスできるのは、「オブジェクト」のセキュリティを危険に曝す可能性があって望ましくないので、割り込みハンドラおよびＯＳレベルのコードは、キーでなくハンドルを保存、復元することになり、ハンドル・レジスタ中へのハンドルのローディングによって、適切なキー情報が暗号ハードウエア中にロードされることになる。暗号ハンドルの現在状態は、プロセスが一時中断され再開される際に保存、復元されねばならない「プロセス・コンテキスト」のもう一つの要素となるだけである。
【００５５】
［ファイル・システム中のスワッピング、ページング、および実行ファイル］
あるプロセスがメモリ中に在るときは、その安全オブジェクト中のプライベート情報は前述のように暗号化されており、残余のコードおよびデータは非暗号化状態である。ディスクにスワップまたはページ・アウトされるとき、そのプロセス・イメージは、同じ形を有する、すなわち、安全オブジェクトは暗号化されており、残余のコードおよびデータはされていない。従って、安全オブジェクトは、スワッピングまたはページング・システムにおいて特別な処理をしなくても、スワップまたはページされるときも安全である。
【００５６】
前述のように、暗号化、復号、および完全性保護は、上記で識別された同時係属出願に記載されたようにして実施することができよう。しかしながら、この場合、プロセスまたはプロセスの一部がディスクにスワップまたはページされるとき、コードおよびデータの物理アドレスが変わる可能性があるので、暗号化、復号、および完全性チェックで使われるアドレスは、物理アドレスではなく仮想アドレスに基づくものとなる。
【００５７】
ファイル・システム中の実行ファイルは、それがメモリ中に在るときと同様な保護を有し、安全オブジェクト中のプライベート情報は暗号化され、実行ファイルの他の部分はされない。新規のプロセスを生成するためファイルがメモリ中に持ち込まれる場合も、特別な処理をする必要はない。
【００５８】
引数および戻り値の引き渡し
一つのオブジェクトが別のオブジェクトを呼び出す場合、通常、引数および戻り値は両方のオブジェクトに「理解可能」でなくてはならず、場合によっては、これらの値の暗号化変換が必要となることがある。考慮すべきいくつかのケースがある。
１．  普通の非安全オブジェクトが別の普通の非安全オブジェクトを呼び出す。引数および戻り値は、呼び出し側オブジェクトおよび被呼び出し側オブジェクトの両方において「非暗号化状態」である。変換の必要はない。
２．  安全オブジェクトが非安全オブジェクトを呼び出す。この場合、引数を非安全オブジェクトに渡す、またはその非安全オブジェクトから戻り値を受け取るために使われる、安全オブジェクト中のフィールドはパブリックとすべきである。（情報が非安全オブジェクト中で曝露されているならば、安全オブジェクトの中でそれをプライベートにする意味がない。）これらのフィールドは「非暗号化状態」であることになり、従って変換は必要ない。
３．  非安全オブジェクトが安全オブジェクトを呼び出す。この場合、渡される引数、および戻り値のために使われる、安全オブジェクト中のフィールドはパブリックとすべきである。これらのフィールドは「非暗号化状態」であることになり、従って変換は必要ない。
４．  安全オブジェクトが別の安全オブジェクトを呼び出す。この場合、この呼び出しで渡されるプライベート情報は、呼び出し側オブジェクトのキーを使って復号され、被呼び出し側オブジェクトのキーを使って再暗号化されなければならない。これはｅｓｍ命令の中で実施することができる。同様に、呼び出し側オブジェクト中のプライベートなフィールドに戻り値が渡されるとき、その情報は被呼び出し側オブジェクトのキーを使って復号され、呼び出し側オブジェクトのキーを使って再暗号化されなければならない。これはｌｓｍ命令の中で実施することができる。
【００５９】
ファイル・システムＩ／Ｏ
また、安全オブジェクトは、ファイル・システム中にプライベート情報を格納しこれからプライベート情報を取り出す能力を有するべきである。そして、このプライベート情報は、ファイル・システム中に在る間プライベートのままでなければならない。これは、ファイル・システムから安全読み取りおよびこれへの安全書き込みを行うための安全オブジェクトを呼び出すことによって行うことできる。ファイル記述子、バッファ、およびｂｕｆｌｅｎ（バッファ長）引数に加え、例えば、ＳｅｃｕｒｅＷｒｉｔｅ（安全書き込み）メソッドによって暗号キー情報に対する引数または引数群を受け取り、ファイルに書き込まれるプライベート情報が、ファイル・システムに在る間、暗号によって保護されその秘匿性および完全性を守ることができよう。同様に、ＳｅｃｕｒｅＲｅａｄ（安全読み取り）メソッドにより暗号キー情報に対する引数または引数群を受け取り、この方法で読み取りを行い、それがファイル・システムから読み取ったプライベート情報の完全性の妥当性確認を行うことができよう。（この暗号キー情報は、ＳｅｃｕｒｅＷｒｉｔｅメソッドおよびＳｅｃｕｒｅＲｅａｄメソッドを呼び出す安全オブジェクト中のプライベートなフィールドまたはフィールド群中に格納できよう。）ＳｅｃｕｒｅＲｅａｄおよびＳｅｃｕｒｅＷｒｉｔｅは、実際のファイル・システムＩ／Ｏの「標準的な」読み取りおよび書き込みシステム・コールを使って、必要な全ての、暗号法の暗号化、復号、および完全性のチェックを遂行することができよう。（ファイル・システムＩ／Ｏでの暗号化および復号で使われる「アドレス」は、ファイルの開始部の数バイトとすることができよう。）
【００６０】
キャッシュ
また、安全オブジェクトのプライベート情報は、Ｌ１、Ｌ２、およびＬ３キャッシュ中で「非暗号化状態」に見える場合には保護する必要がある。一つの実装において、図３に示すように、暗号化および復号はＬ１キャッシュとＬ２キャッシュとの間で行われる。この設計において、Ｌ２またはＬ３キャッシュ中のプライベート情報は、それが外部メモリに在る場合と同様、暗号によって保護されている。この設計では、プライベート情報はＬ１キャッシュ内では非暗号化状態であり、従って、この平文のプライベート情報を他の一切のソフトウエアが利用できないことを確実にする必要がある。
【００６１】
安全オブジェクトが割り込まれた場合、または安全オブジェクトが該安全オブジェクト外部のコードの呼び出しを行う場合、一つの可能な仕方はｌｓｍ命令を実行時にＬ１キャッシュ（またはＬ１キャッシュ中のプライベート情報を包含するエントリだけ）をクリアすることである。あるマルチコア設計では、所与のＣＰＵコアに対するＬ１キャッシュ（またはキャッシュ群）は他のＣＰＵコアは利用できないようになっている。
【００６２】
別の設計においては、暗号化および復号は、ＣＰＵコアとＬ１キャッシュとの間で行われる。この場合、Ｌ１内のプライベート情報は、それが外部メモリに在る場合と同様に暗号によって保護されているが、プライベート情報がＬ１キャッシュからロードされるときまたはこれに格納するときには常に暗号化／復号をしなければならないことになる。
【００６３】
別の設計では、Ｌ１キャッシュとＣＰＵとの間に追加の「Ｌ０．５」キャッシュを組み込むことも考えられる。この設計では、Ｌ１、Ｌ２、およびＬ３キャッシュは、全て、暗号化形態のプライベート情報を包含し、Ｌ０．５は、安全オブジェクトの実行において、プライベート情報の非暗号化形態のために使われ、これだけに使われることになる追加レベルのキャッシュを提供することになろう。このＬ０．５キャッシュの内容は、安全メソッドに戻るとき、割り込みが生じたとき、安全メソッドが、安全オブジェクト外部のコードを呼び出すときにはクリアされることになる。
【００６４】
安全プロセス
前述のように、安全オブジェクトをプロセス・レベルで用いて、安全オブジェクトがファイル・システム中に格納またはこれから取り出すプライベート情報を含め、プロセスのプライベート情報の全てをその全ライフタイムに亘って保護することができる。ｅｓｍ命令は、実行の開始時点で暗号化保護をセットアップすることになり、これはプロセスが存在する間は使用されることになろう。先に説明したように、プロセスが、オペレーティング・システムの呼び出しなど、外部のコードの呼び出しを行う場合、その外部コードは安全オブジェクトのキーにアクセスすることなく実行される。
【００６５】
［要約］
ソフトウエア・ベースのアタックに対する強力な防衛を提供するための新規のアプローチについて説明してきた。このアプローチは新しい構成概念、安全オブジェクトに基づくものであり、これにおいてプライベート情報は確実にプライベートにされる。安全オブジェクトのプライベート情報は、それがメモリに在る間も、ディスクにページ・アウトされる間も、ファイル・システムに書き出される間も、その全ライフサイクルに亘って保護される。プライベート情報は、暗号によって、デバイス・ドライバ、オペレーティング・システム、およびハイパーバイザのような特権ソフトウエアを含めた他のソフトウエアから保護される。この暗号法は、他のソフトウエアがプライベート情報を取得したり、または検知されずに情報を修改したりするのを防止する。
【００６６】
安全オブジェクトの能力は、オペレーティング・システム、ミドルウエア、およびアプリケーションのコードの何百万ものラインの正確さを証明する必要なく、機密情報が確かに安全であることの証明を可能にする。安全オブジェクトの実装のためのメカニズムの正確さと、所与の安全オブジェクトの設計の正確さとを証明することが必要とされるだけである。
【００６７】
安全オブジェクト機能は、「下位互換性のある」仕方でプロセッサに加えることができる。既存の全てのコードは、修正なしに且つパフォーマンス上の不利なしに継続して実行可能である。そうでありながら、安全オブジェクト機能を活用する新規のコードを書くことによって、機密情報に対するずっと強固な安全を提供することができる。
【００６８】
［典型的ハードウエア実装］
前述したように、図３に示されたマイクロプロセッサは、２つの新規命令ｅｓｍおよびｌｓｍと、暗号レジスタおよび上記の状況下でこれらレジスタをクリアする能力を包含する暗号エンジンとを組み込んで改良されながらも、従来型のマイクロプロセッサとよく似た動作をする。
【００６９】
図９は、本発明による情報処理／コンピュータ・システムの典型的ハードウエア構成を示し、このシステムは、望ましくは、それぞれがｅｓｍおよびｌｓｍ命令を実行するよう実装された、少なくとも一つのプロセッサまたは中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）９１０を有する。
【００７０】
ＣＰＵ９１０は、システム・バス９１２を介して、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）９１４、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）９１６、（ディスク・ユニット９２１およびテープ・ドライブ９４０などの周辺デバイスをバス９１２に接続するための）入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）アダプタ９１８、（キーボード９２４、マウス９２６、スピーカ９２８、マイクロフォン９３２、もしくは他のユーザ・インタフェース・デバイスまたはこれの組み合わせをバス９１２に接続するための）ユーザ・インタフェース・アダプタ９２２、情報処理システムを、データ処理ネットワーク、インターネット、イントラネット、パーソナル・エリア・ネットワーク（ＰＡＮ：ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）などに接続するための通信アダプタ９３４、およびバス９１２をディスプレイ・デバイス９３８もしくは（例えばデジタル・プリンタなどの）プリンタ９３９またはその両方に接続するためのディスプレイ・アダプタ９３６に相互接続されている。
【００７１】
前述したハードウエア／ソフトウエア環境に加え、本発明の別の態様は、上記の方法を遂行するためのコンピュータ実装の方法を包含する。この方法は、一例として、前述の特定の環境中に実装することができる。
【００７２】
かかる方法は、例えば、コンピュータを作動し、デジタル・データ処理装置によって具現してマシン可読命令のシーケンスを実行させることで実施することができる。これらの命令は、さまざまな種類の信号担持記憶媒体中に収容することができる。
【００７３】
しかして、本発明のこの態様は、本発明の方法を遂行するため、上記のＣＰＵ９１０およびハードウエアを組み込んだデジタル・データ処理装置によって実行可能な、マシン可読命令のプログラムを有形に具現した信号担持記憶媒体を含むプログラム製品を指向している。
【００７４】
この信号担持記憶媒体は、例えば、高速アクセス記憶装置に代表されるような、ＣＰＵ９１０に内蔵されるＲＡＭを含み得る。あるいは、これら命令を、ＣＰＵ９１０が直接にまたは間接的にアクセス可能な、磁気データ記憶ディスケット１０００（図１０）などの別の信号担持記憶媒体に包含させることもできる。
【００７５】
ディスケット１０００に包含されたものであれ、コンピュータ／ＣＰＵ９１０  に包含されたものであれ、または別の媒体に包含されたものであれ、これらの命令は、（例えば、従来型の「ハード・ドライブ」またはＲＡＩＤアレイなどの）ＤＡＳＤ記憶装置、磁気テープ、（例えば、ＲＯＭ、ＥＰＲＯＭ、またはＥＥＰＲＯＭなどの）電子読み取り専用メモリ、（例えば、ＣＤ−ＲＯＭ、ＷＯＲＭ、ＤＶＤ、デジタル光テープなどの）光記憶デバイス、ペーパ・パンチ・カード、あるいは、コンピュータ命令の伝送に使える可能性のある、デジタルまたはアナログなどさまざまなフォーマットの命令を記憶するための記憶デバイスを組み込んだ、通信リンクまたは無線などの伝送媒体中で使われるデバイスおよびメモリを含む、他の適した信号担持記憶媒体、などといったさまざまなマシン可読データ記憶媒体に格納することができる。本発明のある例示実施形態において、マシン可読命令には、ソフトウエア・オブジェクト・コードを含めることができる。
【００７６】
本発明を例示実施形態に関連させて説明してきたが、当業者は、添付の請求項の精神および範囲内での修改を用いて本発明を実施することが可能であることを認識していよう。
【００７７】
さらに、本出願者の意図は、たとえ後の手続き処理の間に修正されたとしても、全ての請求エレメントの同等物を網羅することにあるのに留意すべきである。
【図１】
0005613232.tif 000002
【図２】
0005613232.tif 000003
【図３】
0005613232.tif 000004
【図４】
0005613232.tif 000005
【図５】
0005613232.tif 000006
【図６】
0005613232.tif 000007
【図７】
0005613232.tif 000008
【図８】
0005613232.tif 000009
【図９】
0005613232.tif 000010
【図１０】
0005613232.tif 000011