(57)【要約】  プラットフォーム上のローカルな通信、プラットフォーム間の通信、または時間を隔てた同一プログラム間の通信かどうかに関らず、ソースからデスティネーションに至るまで、機密情報を扱う通信（および通信をサポートする機能）の秘匿性および／または整合性を保護するシステムおよび方法が提供される。
2008500655.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムのプログラムメモリにおいて実行されるソフトウェアプログラムからの処理通知に応じて、ホストオペレーティングシステムからアクセスできないメモリの保護領域を有する管理モードを起動することと、
前記管理モードが起動された場合、セキュリティ処理を前記メモリの保護領域から前記プログラムメモリにおいて実行されるソフトウェアプログラムに提供することと
を備え、
前記ホストオペレーティングシステムは、一時的に前記ホストシステムの制御を前記管理モードに譲る
方法。
【請求項２】
前記ソフトウェアプログラムがプログラムメモリ内で実行していることを示す開始通知に応じて、前記管理モードを起動することと、
前記ソフトウェアプログラムがプログラムメモリにおいて実行していることを示すために、前記メモリの保護領域に開始インジケータを設定することと
を更に備える請求項１に記載の方法。
【請求項３】
前記セキュリティ処理を前記メモリの保護領域から前記プログラムメモリにおいて実行する前記ソフトウェアプログラムに提供することは、
前記開始インジケータが設定されている場合、前記メモリの保護領域から前記プログラムメモリにおいて実行する前記ソフトウェアプログラムに対して前記セキュリティ処理を提供すること
を更に備える請求項２に記載の方法。
【請求項４】
前記ソフトウェアプログラムが前記開始通知を提供したことを検証すること
を更に備える請求項２に記載の方法。
【請求項５】
前記ソフトウェアが前記開始通知を提供したことを検証することは、
前記開始通知の受信に応じて、前記ソフトウェアプログラムのプログラムカウンタ値を取得することと、
前記プログラムカウンタ値を許可されたプログラムカウンタ値の範囲と比較することと
を備える請求項４に記載の方法。
【請求項６】
前記ソフトウェアプログラムの整合性を検証すること
を更に備える請求項４に記載の方法。
【請求項７】
前記ソフトウェアプログラムの前記整合性を検証することは、
前記ソフトウェアプログラムのイメージの少なくとも一部分のハッシュ値を計算することと、
前記ソフトウェアプログラムが変更されたかどうかを決定するために、前記計算されたハッシュ値を予め定められたハッシュ値と比較することと
を備える請求項６に記載の方法。
【請求項８】
前記ソフトウェアプログラムはカーネルプログラムである請求項１に記載の方法。
【請求項９】
前記カーネルプログラムはデバイスドライバである請求項８に記載の方法。
【請求項１０】
前記セキュリティ処理を前記メモリの保護領域から前記プログラムメモリにおいて実行する前記ソフトウェアプログラムに対して提供することは、前記メモリの保護領域に格納された前記ソフトウェアプログラムに対するデータにアクセスすることを備える請求項１に記載の方法。
【請求項１１】
前記メモリの保護領域に格納された前記ソフトウェアプログラムに対するデータにアクセスすることは、
前記ソフトウェアプログラムに対する鍵情報にアクセスすること
を備え、
前記鍵情報は、前記メモリの保護領域に格納される
請求項１０に記載の方法。
【請求項１２】
前記ソフトウェアプログラムに対する鍵情報にアクセスすることは、
暗号化処理のための暗号化鍵、および、整合性確認処理のためのセッション鍵のうちの少なくとも１つにアクセスすること
を備える請求項１１に記載の方法。
【請求項１３】
前記セキュリティ処理を前記メモリの保護領域から前記プログラムメモリにおいて実行する前記ソフトウェアプログラムに提供することは、
前記ソフトウェアプログラムのデータに対してセキュリティ処理を提供すること
を備える請求項１に記載の方法。
【請求項１４】
前記ソフトウェアプログラムの前記データは、
前記ソフトウェアプログラムの状態情報、
前記ソフトウェアプログラムと同一の前記プロセッサ上で実行する第２のソフトウェアプログラムに送信される送信バッファデータ、
前記ホストシステムの他のプロセッサ上で実行する第２のソフトウェアプログラムに送信される送信バッファデータ、および、
他のホストシステム上で実行する第２のソフトウェアプログラムに送信される送信バッファデータ
のうちの少なくとも１つを備える請求項１３に記載の方法。
【請求項１５】
前記ソフトウェアプログラムのデータに対して前記セキュリティ処理を提供することは、
前記データを暗号化すること、
前記データを復号化すること、
前記データの整合性を確認すること、および、
前記データに整合性情報を追加すること
のうちの少なくとも１つを備える請求項１３に記載の方法。
【請求項１６】
前記データの前記整合性を確認することとは、
前記データのハッシュ値を計算することと、
前記計算されたハッシュ値を予め定められたハッシュ値と比較することと
を備える請求項１５に記載の方法。
【請求項１７】
セキュアチャネルを介して前記セキュリティ処理を開始すること
を更に備える請求項１に記載の方法。
【請求項１８】
前記セキュアチャネルを介して前記セキュリティ処理を開始することは、
それぞれが前記管理モードを起動することを承認されているソフトウェアプログラムを識別する１つ以上のプログラム識別子を、前記メモリの保護領域に格納することと、
鍵情報を前記メモリの保護領域に格納することと
を備え、
前記鍵情報は、前記少なくとも１つ以上のプログラム識別子によって識別されるソフトウェアプログラムによりアクセスされる
請求項１７に記載の方法。
【請求項１９】
ソフトウェアプログラムからのセキュリティ処理の起動に応じてホストオペレーティングシステムが一時的にホストシステムの制御を前記セキュリティ処理に譲り、セキュアなメモリに存在する前記セキュリティ処理を起動する命令群を有する前記ソフトウェアプログラムの命令群を実行するホストプロセッサと、
前記ホストプロセッサと通信可能になるように接続された、前記ソフトウェアプログラムのデータを格納するプログラムメモリと
を備え、
前記セキュアなメモリは、前記ソフトウェアプログラムの前記データを処理する前記セキュリティ処理を提供するために、前記ホストオペレーティングシステムからは認識されず、前記プログラムメモリと通信可能になるように接続される
装置。
【請求項２０】
前記ソフトウェアプログラムは、ネットワークデバイスドライバであり、前記プログラムメモリは、伝送データを格納する伝送バッファである請求項１９に記載の装置。
【請求項２１】
前記セキュリティ処理は、
前記伝送データの暗号化および前記伝送データの前記整合性確認のうちの少なくとも１つ
である請求項２０に記載の装置。
【請求項２２】
前記プログラムメモリから前記伝送データを受信し、ネットワークを介して他のホストシステムに前記伝送データを送信する、前記プログラムメモリと通信可能になるように接続されたネットワークインタフェース
を更に備える請求項２０に記載の装置。
【請求項２３】
装置によって実行された場合に、前記装置に処理を実行させる命令群を提供する電子的にアクセス可能な媒体を備え、
前記処理は、
ホストオペレーティングシステムは一時的にホストシステムの制御を管理モードに譲り、前記ホストシステムのプログラムメモリ内で実行されるソフトウェアプログラムからの処理通知に応じて、前記ホストオペレーティングシステムからアクセスできないメモリの保護領域を有する前記管理モードを起動することと、
前記管理モードが起動された場合、前記メモリの保護領域からセキュリティ処理を前記プログラムメモリ内で実行する前記ソフトウェアプログラムに提供することと
を備える製品。
【請求項２４】
前記電子的にアクセス可能な媒体は、前記装置によって実行された場合に、前記装置により、更に、
前記ソフトウェアプログラムがプログラムメモリ内で実行していることを示す開始通知に応じて前記管理モードを起動させ、
前記ソフトウェアプログラムがプログラムメモリ内で実行していることを示すために、前記メモリの保護領域内の開始インジケータを設定させる
命令群を提供する請求項２３に記載の製品。
【請求項２５】
前記装置によって実行された場合に、前記装置に、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリ内で実行する前記ソフトウェアプログラムに対して提供させる前記命令群は、前記装置に、
前記開始インジケータが設定されている場合、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリ内で実行する前記ソフトウェアプログラムに対して提供させる
請求項２４に記載の製品。
【請求項２６】
前記電子的にアクセス可能な媒体は、前記装置によって実行された場合に、前記装置に、更に、
前記ソフトウェアプログラムが前記開始通知を提供したことを検証
させる命令群を提供する請求項２４に記載の製品。
【請求項２７】
前記装置によって実行された場合に、前記装置に、前記ソフトウェアプログラムが前記開始通知を提供したかどうかを検証させる前記命令群は、前記装置に、
前記開始通知の受信に応じて、前記ソフトウェアプログラムのプログラムカウンタ値を取得させ、
前記プログラムカウンタ値とプログラムカウンタ値の許可される範囲を比較させる
請求項２６に記載の製品。
【請求項２８】
前記電子的にアクセス可能な媒体は、前記装置によってアクセスされた場合、前記装置に、更に、
前記ソフトウェアプログラムの前記整合性を検証させる
命令群を提供する請求項２６に記載の製品。
【請求項２９】
前記装置によって実行された場合に、前記装置に、前記ソフトウェアプログラムの前記整合性を検証させる前記命令群は、前記装置に、
前記ソフトウェアプログラムのイメージの少なくとも一部のハッシュ値を計算させ、
前記ソフトウェアプログラムが変更されたかどうかを決定するために、前記計算されたハッシュ値を予め定められたハッシュ値と比較させる
請求項２８に記載の製品。
【請求項３０】
前記装置によって実行された場合に、前記装置に、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリで実行する前記ソフトウェアプログラムに対して提供させる前記命令群は、前記装置に、
前記メモリの保護領域内に格納された、前記ソフトウェアプログラムの鍵情報にアクセスさせる
請求項２３に記載の製品。
【請求項３１】
前記装置によって実行された場合に、前記装置に、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリで実行する前記ソフトウェアプログラムに対して提供させる前記命令群は、前記装置に、
前記ソフトウェアプログラムのデータに対してセキュリティ処理を提供させる
請求項２３に記載の製品。
【請求項３２】
前記装置によって実行された場合に、前記装置に、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリで実行する前記ソフトウェアプログラムに対して提供させる前記命令群は、前記装置に、
前記データの暗号化、
前記データの復号化、および、
前記データの整合性確認
のうちの少なくとも１つを実行させる請求項３１に記載の製品。
【請求項３３】
前記電子的にアクセス可能な媒体は、前記装置によってアクセスされた場合、前記装置に、更に、
セキュアチャネルを介して前記セキュリティ処理を開始させる
命令群を提供する請求項２３に記載の製品。
【請求項３４】
前記装置によって実行された場合に、前記装置に、前記メモリの保護領域から前記セキュリティ処理を前記プログラムメモリで実行する前記ソフトウェアプログラムに対して提供させる前記命令群は、前記装置に、
前記メモリの保護領域内に、それぞれが前記管理モードの起動を承認されたソフトウェアプログラムを識別する、１つ以上のプログラム識別子を格納させ、
前記メモリの保護領域内に鍵情報を格納させ、
前記鍵情報は、前記１つ以上のプログラム識別子のうちの少なくとも１つによって識別されるソフトウェアプログラムによってアクセスされる
請求項３３に記載の製品。
【請求項３５】
ホストオペレーティングシステムが一時的にホストシステムの制御をセキュリティ処理に譲り、セキュアなメモリに存在する前記セキュリティ処理を起動する命令群を有するソフトウェアプログラムの命令群を実行するホストプロセッサと、
前記ホストプロセッサと通信可能になるように接続された、前記ソフトウェアプログラムのデータを格納するシンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）デバイスと
を備え、
前記セキュアなメモリは、前記ソフトウェアプログラムの前記データを処理する前記セキュリティ処理を提供するために、前記ホストオペレーティングシステムからは認識されず、前記ＳＤＲＡＭデバイスと通信可能になるように接続される
システム。
【請求項３６】
前記ソフトウェアプログラムはネットワークデバイスドライバであり、前記プログラムメモリは伝送データを格納する伝送バッファである請求項３５に記載の装置。
【請求項３７】
前記セキュリティ処理は、
前記伝送データの暗号化、および、
前記伝送データの前記整合性確認
のうちの少なくとも１つである請求項３６に記載の装置。
【請求項３８】
前記プログラムメモリから前記伝送データを受信し、ネットワークを介して他のホストシステムに前記伝送データを送信する前記ＳＤＲＡＭデバイスと通信可能になるように接続されたネットワークインタフェースを更に備える請求項３６に記載のシステム。    
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は、概して、ネットワークセキュリティ分野に関する。本発明の実施例は、特に、プラットフォーム間およびプラットフォーム内通信のためのシステムおよび方法に関する。
【背景技術】
【０００２】
コンピュータネットワークは、企業、公共機関、および個人によって広く使用されている。ソフトウェアプログラム（または単に、プログラム）は、コンピュータネットワークを介して情報を交換する。これらの通信の整合性および秘匿性を保護することは、今日のネットワーク化されたコンピュータ環境において非常に重要である。パスワード、暗号化鍵、または他の個人情報を平文で送信することは、明らかに、コンピュータシステムを敵対的な攻撃者によるセキュリティ侵害に対して脆弱にする。これは、デバッガ、マルウェア、または、攻撃者によってセキュリティ侵害されたシステム上の他のソフトウェアコンポーネントによって、鍵情報がメモリから取得されることができるためである。「鍵情報」は、広く、例えば、暗号化鍵、セッション鍵、パスワード、デジタル証明書、および／または、他の全ての機密情報を指す。
【０００３】
コンピュータシステム内の機密情報を保護する従来の方法は、概して、仮想プライベートネットワーク（ＶＰＮ）または専用ハードウェアに基づく。仮想プライベートネットワークは、特権モードで実行される他のソフトウェアコンポーネントによって侵害されることができるアプリケーションソフトウェアおよび／またはカーネルレベルドライバとして実装されるので、容易に回避または改ざんされることができる。
【０００４】
ハードウェアによるソリューションは、トラステッドプラットフォームモジュール（ＴＰＭ）、または、暗号化機能を実装するための専用コプロセッサを含んでもよい。トラステッドプラットフォームモジュールは、例えば、暗号化鍵、パスワード、および／またはデジタル証明書を格納するマイクロチップである。ハードウェアベースのセキュリティソリューションは、高価であり、他のシステムハードウェアから自身を隔離することを目的として、独立したハードウェアを使用する。更に、ＴＰＭは、概して、低帯域幅のシリアルバスを用いてチップセットに接続されるので、ネットワークトラフィックの暗号化／復号化のような、高帯域幅のデータ交換を必要とするアプリケーションには適さない。従って、従来のシステムは、ホストプロセッサ上で実行されるソフトウェア内のデータを暗号化するための、データと直接相互作用するプログラムに対してインラインであるような、コストエフェクティブ、セキュア、かつ耐タンパーな方法を欠いている。本発明の実施例は、同様の参照番号が同様の部材を指す添付図面を参照して説明されるが、添付図面によって限定されない。
【図面の簡単な説明】
【０００５】
【図１】本発明の実施例により保護されうる種々の通信を示すブロック図である。
【図２Ａ】本発明の実施例による、メモリの保護領域によって提供されるセキュリティ処理を使用するプログラムを示す第１の図である。
【図２Ｂ】本発明の実施例による、メモリの保護領域によって提供されるセキュリティ処理を使用するプログラムを示す第２の図である。
【図３Ａ】本発明の実施例による、メモリの保護領域（例：システム管理ランダムアクセスメモリ）を初期化する方法の、特定の態様を示すフロー図である。
【図３Ｂ】本発明の実施例による、セキュアなプラットフォーム間およびプラットフォーム内通信のための方法に関する、特定の態様を示す第１のフロー図である。
【図３Ｃ】本発明の実施例による、セキュアなプラットフォーム間およびプラットフォーム内通信のための方法に関する、特定の態様を示す第２のフロー図である。
【図４】本発明の実施例による、アウトバウンドのパケットを暗号化するフレームワークを示すブロック図である。
【図５】複数の異なるネットワークレイヤにおいてネットワークセキュリティプロトコルをサポートする、本発明の実施例を示すブロック図である。
【図６】本発明の実施例により実装されるトランザクションを示すトランザクション図である。
【発明を実施するための最良の形態】
【０００６】
プラットフォーム上のローカルな通信、プラットフォーム間の通信、または時間を隔てた同一プログラムによる通信かどうかに関らず、機密情報を扱う通信（および当該通信をサポートする機能）のソースからデスティネーションに至るまでの秘匿性および／または整合性を保護する、システムおよび方法が提供される。以下において詳細に説明されるように、本発明の実施例は、耐タンパーでありかつ機密情報を扱う環境において、データ（例：ネットワークトラフィック）に対するセキュリティ処理（例：暗号化）を実装することを目的として、ホストに存在するソフトウェアによって使用されうる。本発明の実施例は、また、これらのサービスを要求するプログラムのソースを、正しく識別および保護しうる。従って、本発明の実施例は、鍵情報をインラインの（更に秘匿された）プロセッサモード内で保護するための機構を提供しうる。以下において詳細に説明されるように、本発明の実施例は、プラットフォームコンポーネントとの通信の秘匿化、スプーフされない認証／承認の提供、および、起動間におけるプログラム内部状態の整合性の検証を目的として、ｒｉｎｇ−０プログラム（例：カーネルプログラム）によって使用されうる。
【０００７】
説明を容易にするために、本発明の実施例は、ネットワーク上に送信されたデータの暗号化に関連して開示される。しかしながら、代替の実施例は、耐タンパーでありかつ機密情報を扱う環境において実行される必要がある、データに対するセキュリティ処理を対象としうる。例えば、本発明の実施例は、プラットフォーム間および／またはプラットフォーム内通信、および、プログラム間通信および／またはプログラム内通信の保護を対象としうる。
【０００８】
図１は、本発明の実施例によって保護されうる種々の通信を示すブロック図である。図１は、プラットフォーム１１０および１２０を含む。「プラットフォーム」は、広く、データ処理を提供するハードウェア（例：プロセッサ）、ソフトウェア（例：オペレーティングシステム）、マイクロコード、チップセット、ファームウェア等を指す。参照番号１３０は、プラットフォーム間通信（例：プラットフォーム１１０と１２０の間）を示す。プラットフォーム１１０は、マイクロコントローラ・サブプラットフォーム１１２を含む。プログラム１１４（例：ホストプロセッサ上で実行される）とマイクロコントローラ・サブプラットフォーム１１２間におけるプラットフォーム内通信は、参照番号１３２によって示される。
【０００９】
プログラム１１４および１１６は、ホストプロセッサ（図示されない）上で実行される２つのプログラムを表しうる。プログラムは、カーネルコンポーネント（例：ｒｉｎｇ−０プログラム）またはアプリケーションプログラム（例：ｒｉｎｇ−３プログラム）を指してもよい。プログラム間通信の例は、参照番号１３４によって示される、プログラム１１４と１１６間の通信である。ある実施例では、プログラム（例：プログラム１１４）は、自身のデータ構造および／または状態をセキュアに格納し、格納されたデータ構造および／または状態に対して長期にわたりセキュアにアクセス（例：コンテキストチェンジ間および／または処理起動間における自身の内部データ構造の整合性を定期的に確認）しうる。参照番号１３６は、プログラム１１４が自身のデータ構造および／または状態をセキュアに格納し、格納されたデータ構造および／または状態に対して長期にわたりセキュアにアクセスする、プログラム内通信の実施例を示す。
【００１０】
本発明の実施例は、鍵情報と、データを暗号化／復号化するため、および／または、整合性を確認することを目的として鍵情報を用いる暗号化機能とを保護するために、システム管理モード（ＳＭＭ）または類似の専用のプロセッサモードを用いてもよい。ＳＭＭは、パーティションされたメモリと、ホストシステム上で実行される他のプログラムに対して鍵情報が開示されることを防ぐコンテキストとを提供する。本発明の実施例は、鍵の格納および処理を目的として隔離された耐タンパーな環境を提供することによって、鍵情報のセキュリティを向上し、それによって、攻撃者による従来の攻撃ベクトルを介した鍵情報の取得を困難にする。
【００１１】
ＳＭＭ（または同様の）専用のプロセッサモードは、また、プログラムデータのセキュアな処理を提供しうる。「セキュリティ処理」は、広く、暗号化、復号化、承認、認証、整合性確認などのような、データのセキュリティを向上する処理を指す。ＳＭＭは、オペレーティングシステムに依存しない隔離された環境を提供する特別な処理モードである。プロセッサは、システム管理インタラプト（ＳＭＩ）が、トリガーされて、他のプロセッサ処理モードで実行するソフトウェアからアクセス不可能なシステム管理ランダムアクセスメモリ（ＳＭＲＡＭ）と称されるメインメモリのチップセット保護領域からコードおよびデータを実行した場合に、ＳＭＭにエンターする。
【００１２】
参照を容易にするために、ＳＭＭおよび類似の専用のプロセッサモードは、集合的に管理モードと称される。ある実施例では、管理モードは、管理モードをトリガーしたプログラムから状態情報を取得する。一実施例では、プログラムは、管理モードを起動した場合、保存された状態マップまたは類似の構造を管理モードに提供する。保存された状態マップ（または類似の構造）は、管理モードにエンターしたときのプロセッサ状態に関する情報を提供する。例えば、管理モードで実行するプログラムは、起動したプログラムのプログラムカウンタを、保存された状態マップ（または類似の構造）から回復する。ある実施例では、これは、ＳＭＩをトリガーしたプログラムまでトラックバックされることができる、呼び出しのソースを検出する耐タンパーな方法を提供する。
【００１３】
起動したプログラムコードの場所は、攻撃側プログラムによって上書きされることができるので、コード格納の整合性を検証または保護することが望ましい。ある実施例では、ＳＭＩ通知のソースであるプログラムイメージは、適切なハードウェアまたはソフトウェアの技法を用いて認証される。プログラムイメージを認証する機構の例は、管理モード（例：ＳＭＭ）または他の保護されたシステムコンポーネント（例：Ｎａｖａｓｓａ組込みプロセッサ）などからのイメージの検証を含み、これらに限定されない。
【００１４】
図２Ａから図２Ｂは、メモリの保護領域によって提供されるセキュリティ処理を使用するプログラムの起動を示す図である。図に示される実施例は、ＳＭＭおよびシステム管理ランダムアクセスメモリ（ＳＭＲＡＭ）と関連して説明されうる。本発明の代替の実施例において、異なる管理モードおよび異なるメモリの保護領域が使用されうることが理解されるであろう。
【００１５】
ある実施例では、ＳＭＲＡＭ２００は、正当なプログラム識別子（ＶＰＩ）テーブル２０５、プログラム識別子（ＩＤ）から鍵識別子（ＰＩＫＩ）へのマッピングテーブル２１０、およびプログラムＩＤからプログラムカウンタ範囲（ＰＩＰＣ）へのマッピングテーブル２１５のデータ構造を含む。代替の実施例では、ＳＭＲＡＭ２００は、より多くのデータ構造、より少ないデータ構造、および／または異なるデータ構造を含んでもよい。
【００１６】
ある実施例では、ＶＰＩテーブル２０５は、特定のプログラムを識別する方法に関する情報、およびメモリ内のプログラムイメージが正当であるかどうかを判定する方法に関する情報を含む。一実施例では、ＶＰＩテーブル２０５において識別されたプログラムは、ＳＭＭのセキュリティ処理の起動を許可されたプログラムである。一実施例では、ＶＰＩテーブル２０５は、セキュアチャネルを介して、トラステッドデータ格納２２０から提供される。あるいは、ＶＰＩテーブル２０５は、プラットフォームに対してセキュアなリモートＯｕｔ−Ｏｆ−Ｂａｎｄ（ＯＯＢ）接続を提供することができる、組込み管理マイクロコントローラ（例：Ｉｎｔｅｌ社によって開発されたプロアクティブ／Ｎａｖａｓｓａプラットフォーム）のようなローカルのトラステッドプラットフォームコンポーネントによって提供されうる。
【００１７】
表１は、ＶＰＩテーブル２０５内に含まれうる多くのデータ構造を示す。代替の実施例では、データ構造は、別の名前を有してもよい。更に、本発明の代替の実施例では、より多くのデータ構造、より少ないデータ構造、および／または異なるデータ構造が使用されてもよい。
【表１】
2008500655.tif 000003
【００１８】
ある実施例では、ＰＩＫＩテーブル２１０は、保護された鍵値と、鍵値を識別するために使用される鍵識別子とを含む。一実施例では、ＰＩＫＩテーブル２１０は、特定の鍵情報を特定のプログラムに（例：ＰＩＤによって）関連付ける。ある実施例では、管理者２２５は、ｏｕｔ−ｏｆ−ｂａｎｄ提供処理２３０によってＰＩＫＩテーブル２１０を提供する。
【００１９】
表２は、ＰＩＫＩテーブル２１０に含まれうる多くのデータ構造を示す。代替の実施例では、データ構造は、別の名前を有してもよい。更に、本発明の代替の実施例では、より多くのデータ構造、より少ないデータ構造、および／または異なるデータ構造が使用されてもよい。
【表２】
2008500655.tif 000004
【００２０】
ある実施例では、ＰＩＰＣテーブル２１５は、セキュリティ処理のようなＳＭＭコンポーネント（または他のトラステッドエージェント）によって作成される。ＰＩＰＣテーブル２１５は、特定のプログラムのホストメモリ内における場所を計算するため、および、プログラム状態をトラックするために使用されうる。表３は、ＰＩＰＣテーブル２１５に含まれうる多くのデータ構造を示す。代替の実施例では、データ構造は、別の名前を有してもよい。更に、本発明の代替の実施例では、より多くのデータ構造、より少ないデータ構造、および／または異なるデータ構造が使用されてもよい。
【表３】
2008500655.tif 000005
【００２１】
図２Ｂは、本発明の実施例によるプログラムメモリ２３５を示す。「プログラムメモリ」は、ホストプロセッサ上で実行されるプログラムからアクセス可能なメモリ（例：ランダムアクセスメモリ（ＲＡＭ））領域を指す。一実施例では、ＳＭＲＡＭ２００およびプログラムメモリ２３５は、共に、プロセッサのメインメモリの一部分であってもよい。代替の実施例では、ＳＭＲＡＭ２００は、ホストプロセッサのメインメモリ以外のメモリ領域内に実装されてもよい。
【００２２】
ある実施例では、プログラムは、少なくとも一部分はプログラムデータテーブル（ＰＤＴ２４０）を介して、ＳＭＭコンポーネント（例：ＳＭＭ内に格納されたセキュリティプログラム）と通信する。ＳＭＭはプログラムメモリ２３５（およびオペレーティングシステムのメモリ）にアクセスできる高度に特権的なプロセッサモードであるので、ＳＭＭコンポーネントは、ＰＤＴ２４０にアクセスしうる。ＰＤＴ２４０は、プログラムデータに対して実行される特定のセキュリティ処理２４５を指定しうる。更に、ＰＤＴ２４０は、プログラムデータの場所を指定しうる。例えば、図示される実施例では、データバッファポインタ（ＤＢＰ）２５０は、データバッファ２６０を指し、整合性バッファポインタ（ＩＢＰ）２５８は、整合性バッファ２６５を指す。更に、ＰＤＴ２４０は、鍵識別子２６８を介して、プログラムデータを処理するために使用されるべき鍵情報を識別しうる。例えば、鍵識別子２６８は、例えばデータバッファ２６０内に格納されたデータを処理するために使用されうる、ＳＭＲＡＭ２００内に格納された鍵を識別しうる。
【００２３】
表４は、ＰＤＴ２４０内に含まれうる多くのデータ構造を示す。代替の実施例では、データ構造は、別の名前を有してもよい。更に、本発明の代替の実施例では、より多くのデータ構造、より少ないデータ構造、および／または異なるデータ構造が使用されてもよい。
【表４】
2008500655.tif 000006
【００２４】
ＰＤＴ２４０は脆弱なメモリ領域に「存在」するので、ある実施例では、このデータ構造の整合性およびこのデータバッファ（例：データバッファ２６０および／または整合性バッファ２６５）の整合性が保証される必要がある。データの正当性を保証する１つの機構は、データ構造を所有する正当なプログラムのみがこれらのデータ構造を変更することを許可されるように保証することである。一実施例では、この機構は、プログラム開始通知とプログラム終了通知の間におけるＰＤＴ２４０に対する全ての正当な変更を、ＳＭＭコンポーネントに関連づけるプログラムによって実装される。この方法において、ＳＭＭコンポーネントは、ＰＤＴ２４０が変更される前に実行しているプログラムをトラックすることができる。
【００２５】
プログラム開始通知２７０は、プログラムがＳＭＭコンポーネントによって提供されるセキュリティ処理を起動することを、ＳＭＭコンポーネントに通知する。ある実施例では、プログラム開始通知２７０は、プログラムが起動されたらすぐに、かつ、プログラムがＰＤＴ２４０の内部データ構造を変更し始める前に、プログラムまたはデバイスドライバによって発行される。一実施例では、プログラム開始通知２７０は、ＳＭＩ通知である。ある実施例では、プログラム開始通知ハンドラ（図示されない）は、プログラム開始通知２７０を受信しうる。ハンドラは、例えば、プログラムカウンタが適切な範囲内にあり、かつ、この範囲内のプログラムのイメージが変更されていない場合に、テーブルエントリに対してプログラム開始通知（ＰＳＮ）インジケータ２１８をＴＲＵＥに設定することによって、プログラムイメージを検証し、呼び出し側のソースをＰＩＰＣテーブル２１５に記録しうる。ＰＳＮハンドラがリターンした直後、プログラム／ドライバは、自身の内部データ構造を設定し、処理通知ハンドラ（図示されない）に対するインプットとして使用されうるＰＤＴテーブル２４０を設定しうる。プログラム／ドライバは、（悪意のあるコードの実行を生じうる）コンテキストスイッチを回避することを目的としてこれを行う場合、インタラプトを無効化し、それによって、処理通知の前に悪意のあるコードがプログラムのデータまたは状態を変更することを防ぐ。
【００２６】
「処理通知」は、プログラム／ドライバによるＳＭＭコンポーネントに対するセキュリティ処理の提供要求（例：セキュアなデータを提供すること、および／または、プログラムデータを処理すること）を指す。ある実施例では、処理通知は、ＳＭＩ通知と共に実装されうる。一実施例では、ＳＭＩ通知は、ＳＭＩプログラム開始通知２７０の正常終了後にのみ、プログラムまたはデバイスドライバによって発行されうる。ある実施例では、この通知に対するＳＭＩハンドラは、起動側のプログラムカウンタを、例えば保存済み状態マップ（ＳＳＭ）から回復し、回復されたプログラムカウンタがＰＣＢ２２２とＰＣＬ２２４の間にあるＰＩＰＣテーブル２１５内のエントリを検索する。適合する範囲がＰＩＰＣテーブル２１５内に見つかった場合、ＳＭＩハンドラは、プログラム開始通知２７０が同一プログラムによって以前正常に起動されたことを意味するように、ＰＩＰＣエントリに対するＰＳＮ値２１８がＴＲＵＥに設定されていることを確認しうる。ＰＳＮ値２１８がＴＲＵＥである場合、ハンドラは、この通知の前にプログラムによって設定されたＰＤＴ２４０からデータを読み込み、提供された鍵ＩＤ２６８に対して指定された処理要求２４５を適用する。
【００２７】
ある実施例では、処理要求２４５は、ＳＭＭコンポーネントに対するセキュリティ処理を指定する。セキュリティ処理は、機密データの取得を含んでもよい、および／または、プログラムデータに対するセキュリティ処理の起動を含んでもよい。セキュリティ処理の例は、暗号化処理、復号化処理、および／または、暗号化および／または復号化されたデータの整合性確認を含み、これらに限定されない。
【００２８】
ある実施例では、暗号化処理は、ハンドラ（例：ＳＭＩハンドラ）に、ＰＤＴエントリのＤＢＰ２５０により参照されるバッファ（例：データバッファ２６０）に対して、選択された暗号化アルゴリズムを実行させうる。ある実施例では、暗号化コードは、選択された鍵ＩＤ２６８に対応する、ＳＭＲＡＭ内に格納された鍵を使用する。ＳＭＭのリターンの際に、データバッファ２６０は、暗号化され、セキュアな通信の準備が整う。ある実施例では、鍵情報は、起動側のプログラムに漏洩されない。管理モードは、（例：起動側プログラムのプログラムイメージがメモリ内で検証済みの場合）起動側プログラムに代わって、正しい鍵情報（例：鍵ＩＤ２６８によって識別される）を使用する。
【００２９】
ある実施例では、整合性確認処理は、ハンドラに、例えば整合性バッファポインタ（ＩＢＰ）２５８によって参照される整合性バッファ２６５に対して、選択された整合性確認アルゴリズムを実行させうる。ある実施例では、ハンドラは、データマスクポインタ（ＤＭＰ）２５２によって指定されたバッファ２６５の領域をスキップしうる。整合性確認アルゴリズムは、少なくとも部分的に、鍵ＩＤ２６８によって識別される関連するセッション鍵に基づいてもよい。一実施例では、整合性確認アルゴリズムの結果は、整合性バッファ２６５内に格納されるハッシュ方法認証コード（ＨＭＡＣ）において提供される。整合性確認アルゴリズムの例は、セキュアハッシュアルゴリズム１（ＳＨＡ１）またはメッセージダイジェスト５（ＭＤ５）を含み、これらに限定されない。
【００３０】
ある実施例では、復号化処理は、ＳＭＩハンドラに、ＤＭＰ２５２によってマスクされた領域をスキップして、ＤＢＰ２５０によって参照される１つ以上のバッファに対して復号化アルゴリズムを実行させうる。ある実施例では、ＳＭＭ復号化コード（図示されない）は、鍵ＩＤ２６８に対応する、ＳＭＲＡＭ２００内に格納された鍵を使用しうる。ＳＭＭがリターンした際に、ＤＢＰ２５０によって参照されるバッファは、復号化されて読み取り準備が整う、または、エラーコード（ＥＣ）２７２が、ＰＤＴ２４０において適切なエントリに設定される。
【００３１】
復号化処理と同様の方法で、ＤＢＰ２５０によって参照されるデータバッファの整合性は、ＳＭＭコードによって検証されうる。整合性確認は、少なくとも一部は、ＩＢＰ２５８によって参照される整合性バッファ内に提供されるＨＭＡＣと、ＳＭＲＡＭ２００内に存在する鍵ＩＤ２６８に対する関連するセッション鍵値とに基づいてもよい。そして、整合性確認の成功または失敗は、対応するＰＤＴエントリに対するＰＤＴエラーコードＥＣ２７２を介して、ＳＭＩを起動したプログラムに通知されることができる。
【００３２】
ある実施例では、（例：公開／プライベート暗号化処理のための）プライベート鍵は、ＳＭＭによって保護されることができる。一実施例では、ＳＭＭコンポーネントは、公開／プライベート鍵ペアの作成のような、公開／プライベート処理を提供しうる。ある実施例では、ＳＭＭ処理は、保護されたプライベート鍵を用いて、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ変換を実行する。ＳＭＭ処理は、鍵ＩＤ２６８によって識別されるプライベート鍵によってデータを暗号化しうる。同様に、ＳＭＭ処理は、鍵ＩＤ２６８によって識別されるプライベート鍵を用いてデータを復号化しうる。
【００３３】
ある実施例では、プログラム終了通知２７５は、プログラムが呼び出し側に対してリターンする前に、プログラムセグメントによるＳＭＭ機能の使用の終了を示すことを目的として、プログラムまたはデバイスドライバによって発行されうる。ある実施例では、プログラム終了通知２７５は、ＳＭＩ通知である。この通知に対するハンドラ（例：ＳＭＩハンドラ）は、ＳＳＭの回復済みプログラムカウンタに適合するエントリに対して、ＰＩＰＣテーブル２１５のＰＳＮ値をＴＲＵＥからＦＡＬＳＥにリセットする。一実施例では、ＳＭＭモジュールは、プログラム開始通知２７０が正規のプログラムイメージから再度正しく起動されるまで、このプログラムからの以降の処理通知に対して動作しない。これは、プログラムのデータ構造を変更し、ＳＭＩ処理通知を起動する正規のプログラムコードの直前の命令にジャンプすることによって、他の悪意のあるプログラムがこのプログラムＩＤに対するＳＭＭモジュールの回避を試みることを、効果的に締め出す。プログラム開始通知２７０とプログラム終了通知２７５の間の全ての処理通知を関連付けることによって、プログラムの作者は、プログラムの正当なイメージから起動された処理通知の前に実行された、通知２７０と通知２７５の間における全てのプログラムセグメントが許可されることを保証される。
【００３４】
図３Ａから図３Ｃを参照すると、本発明の実施例に関連する特定の方法は、フローチャートと関連して、コンピュータソフトウェアおよびハードウェアの形で説明される。コンピュータデバイスによって実行される方法は、コンピュータ実行可能な命令群を構成する、ステートマシンまたはコンピュータプログラムを備えてもよい。コンピュータ実行可能な命令群は、コンピュータプログラム言語によって書かれてもよい、または、ファームウェアロジックに組み込まれてもよい。広く認識された標準に準拠するプログラム言語によって書かれた場合、そのような命令群は、多くのハードウェアプラットフォームにおいて実行されることができる。更に、本発明の実施例は、特定のプログラム言語と関連して説明されるものではない。本願明細書において説明される本発明の実施例を実装することを目的として、多様なプログラム言語が使用されうることが理解されるであろう。更に、当該技術分野では、ソフトウェアは、いかなる形式（例：プログラム、手順、処理、アプリケーション等）においても、動作を実行するもの、または、結果を生じるものとして説明されるのが一般的である。そのような表現は、単に、コンピュータデバイスによるソフトウェアの実行がデバイスにある動作を実行させること、または、結果を生じさせることを簡潔に説明する方法である。
【００３５】
図３Ａから図３Ｃは、本発明の実施例による、セキュアなプラットフォーム間およびプラットフォーム内通信を目的とした方法の、選択された態様を示すフロー図である。図３Ａから図３Ｃにおいて説明される方法は、図２Ａから図２Ｂに関連して説明されたデータ構造と共に実装されうる。代替の実施例では、図３Ａから図３Ｃにおいて説明される方法は、異なるデータ構造と共に実装されてもよい。
【００３６】
図３Ａは、本発明の実施例による、メモリの保護領域（例：図２Ａに示されるＳＭＲＡＭ２００）を初期化する方法の特定の態様を示すフロー図である。処理ブロック３０５を参照すると、ＶＰＩテーブル（例：図２Ａに示されるＶＰＩテーブル２０５）には、プログラム識別子情報がロードされる。一実施例では、ＶＰＩテーブルは、セキュアなｏｕｔ−ｏｆ−ｂａｎｄチャネルを介してロードされる。処理ブロック３１０を参照すると、ＰＩＫＩテーブル（例：図２Ａに示されるＰＩＫＩテーブル２１０）には、鍵値（例：図２Ａに示される鍵値２１２）、および、プログラム識別子（例：図２Ａに示されるプログラムＩＤ２１６）に関連付けられた対応する鍵識別子（例：図２Ａに示される鍵ＩＤ２１４）のような、機密情報がロードされる。
【００３７】
処理ブロック３１５を参照すると、ＳＭＭモジュール（または他のトラステッドエージェント）は、プログラムメモリ（例：図２Ｂに示されるプログラムメモリ２３５）において、処理ブロック３１０において提供されたプログラムＩＤに対応するプログラムを検索する。処理ブロック３２０を参照すると、ＳＭＭモジュールは、発見された各プログラムの関連するプログラムＩＤに対して、プログラムカウンタベース（ＰＣＢ）（例：図２Ａに示されるＰＣＢ２２２）およびプログラムカウンタリミット（ＰＣＬ）（例：図２Ａに示されるＰＣＢ２２４）を設定する。
【００３８】
図３Ｂから図３Ｃは、本発明の実施例による、セキュアなプラットフォーム間およびプラットフォーム内通信を目的とした方法の、特定の態様を示すフロー図である。処理ブロック３２５を参照すると、プログラム開始通知（例：図２Ｂに示されるプログラム開始通知２７０）は、ＳＭＭをトリガーする。ＳＭＭモジュールは、処理ブロック３３０において、例えば保存済み状態マップから、プログラムカウンタを回復する。処理ブロック３３５を参照すると、ＳＭＭモジュールは、ＰＩＰＣテーブル内で、プログラム開始通知を送信したプログラムに対応するエントリを検索する。ある実施例では、エントリが見つかった場合、ＳＭＭモジュールは、処理ブロック３４０において、回復されたプログラムカウンタがＰＣＢとＰＣＬの間にあるかどうかを確認する。回復されたプログラムカウンタがＰＣＢとＰＣＬの間にあるかどうかを確認することは、プログラム開始通知が実際にプログラムによって送信されたものであり、悪意のあるソフトウェアによって送信されたものではないことを保証することを補助する。いくつかの実施例では、ＳＭＭモジュールは、処理ブロック３４５において示されるように、（例：ハッシュ値を計算し、計算されたハッシュ値とＶＰＩテーブル内に格納された予め定められたハッシュ値とを比較することによって）呼び出し側プログラムイメージがＶＰＩテーブル内のエントリと一致するかどうか再検証する。
【００３９】
処理ブロック３５０を参照すると、プログラム開始通知フラグは、ｔｒｕｅに設定され、制御は、起動したプログラムに戻される。ある実施例では、起動したプログラムは、ここで、プログラムデータテーブル（ＰＤＴ）（例：図２Ｂに示されるＰＤＴ２４０）内のデータを変更することが可能となる。処理ブロック３５５において、プログラムは、バッファの場所を（図２Ｂに示されるＤＢＰ２５０およびＩＢＰ２５８により）更新し、適切な鍵識別子（例：図２Ｂに示される鍵識別子２６８）を提供する。プログラムは、処理ブロック３６０において、バッファに関連する処理（例：バッファの割り当て等）を完了する。処理ブロック３６５を参照すると、プログラムは、処理通知（例：ＳＭＩ通知）をトリガーし、制御をＳＭＭに戻す。
【００４０】
処理ブロック３７０を参照すると、ＳＭＭモジュールは、保存済み状態マップ（ＳＳＭ）からプログラムカウンタを回復する。ＳＭＭモジュールは、３７５において、ＰＩＰＣテーブル内で、起動したプログラムに対応するエントリをサーチする。処理ブロック３７６を参照すると、ＳＭＭモジュールは、回復されたプログラムカウンタが、呼び出し側プログラムに対応するＰＩＰＣテーブルのエントリに記録されたように、ＰＣＢとＰＣＬの間にあるかどうかを決定する。一実施例では、ＰＣＢとＰＣＬに許可される範囲は複数存在しうる。そのような実施例では、ＳＭＭモジュールは、プログラムカウンタがＰＣＢとＰＣＬに対して許可された複数の範囲のうちの１つに収まるかどうかを判定する。処理ブロック３７８を参照すると、ＳＭＭモジュールは、呼び出し側プログラムのＰＩＰＣテーブルエントリのプログラム開始通知フラグがＴＲＵＥに設定されているかどうかを決定する。ある実施例では、処理ブロック３７６または３７８において確認される条件のいずれかがＴＲＵＥでない場合、ＳＭＭモジュールは、処理ブロック３８０において、適切なエラーコード（例：図２Ｂに示されるエラーコード２７２）を設定し、制御を呼び出し側プログラムに戻す。処理ブロック３８２を参照すると、ＳＭＭモジュールは、処理要求（例：図２Ｂに示される処理要求２４５）によって指定されたように、処理を実行する。処理は、データバッファポインタ（図２Ｂに示されるＤＰＢ２５０）によって参照されるデータバッファ内にあるデータに対して実行されうる。ＳＭＭモジュールは、データを処理することを目的として、対応するプログラムＩＤおよび鍵ＩＤに対して、鍵値（図２Ａに示される鍵値２１２）を使用しうる。ある実施例では、ＳＭＭモジュールは、データマスクバッファ（図２Ｂに示されるデータマスクバッファ２５６）によって指定された、マスクされた領域をスキップする。
【００４１】
処理が正常終了した場合、ＳＭＭモジュールは、処理ブロック３８４において、エラーコードをＮＯＮＥに設定し、制御を起動したプログラムに戻してもよい。処理ブロック３８６を参照すると、プログラムは、プログラムデータテーブルが承認されないプログラムによって変更されることを防ぐことを目的として、プログラム終了通知を送信しうる。ＳＭＭモジュールは、処理ブロック３８８において、呼び出し側プログラムのプログラムカウンタを回復する。ＳＭＭモジュールは、３９０において、呼び出し側プログラムに対応するエントリをＰＩＰＣテーブル内で検索する。ある実施例では、ＳＭＭモジュールは、処理ブロック３９２において、呼び出し側プログラムのプログラムカウンタがＰＣＢとＰＣＬの間にあるかどうかを決定する。プログラム開始通知フラグは、処理ブロック３９４においてＦＡＬＳＥに設定され、制御は、３９６において、呼び出し側プログラムに戻される。ある実施例では、プログラムデータテーブルは、プログラム開始通知フラグがＦＡＬＳＥに設定されている間、変更されることができない。
【００４２】
図４は、本発明の実施例による、アウトバウンドのパケットを暗号化するフレームワーク４００を示すブロック図である。本発明の実施例を説明することを目的として、図４は、 フレームワーク４００の伝送キューを参照する。図４のアウトバウンドキューに関連して説明された処理は、また、プラットフォーム４００の受信側のインバウンドキュー（図示されない）に対して適応されうることが理解されるであろう。
【００４３】
図に示されるフレームワーク４００の実施例は、プロセッサ４０５、物理メモリ４１０、入出力（Ｉ／Ｏ）コントローラハブ４１５、およびメディアアクセスコントローラ（ＭＡＣ）デバイス４２０を含む。プロセッサ４０５は、マイクロプロセッサ、マイクロコントローラ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、中央処理装置（ＣＰＵ）、プログラム可能論理デバイス（ＰＬＤ）、および、システムストレージ（例：メモリ４１０）からの命令群にアクセスし、デコードし、算術および論理処理を実行することによってこれらの命令群を実行する同様のデバイスを含んでもよい。
【００４４】
物理メモリ４１０は、リードオンリーメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、不揮発ランダムアクセスメモリ（ＮＶＲＡＭ）、キャッシュメモリ、フラッシュメモリ、および他のメモリデバイスを含む、多様なメモリデバイスを有してもよい。ある実施例では、物理メモリ４１０は、ＳＭＲＡＭ４２５およびドライバメモリ４３０を含む。一実施例では、ＳＭＲＡＭ４２５およびドライバメモリ４３０は、同一のメモリデバイスの２つの領域である。代替の実施例では、ＳＭＲＡＭ４２５およびドライバメモリ４３０は、独立したメモリデバイスとして実装される。
【００４５】
一実施例では、Ｉ／Ｏコントローラハブ（ＩＣＨ）４１５は、フレームワーク４００と周辺機器Ｉ／Ｏデバイス間のインタフェース、および、フレームワーク４００と、外部ネットワーク（図示されない）へのインタフェースを提供しうるＭＡＣデバイス４２０との間のインタフェースを提供しうる。
【００４６】
ある実施例では、フレームワーク４００は、以下に説明されるようにパケットを伝送する。ネットワークデバイスドライバ（図示されない）は、参照番号４３５によって示されるＳＭＩプログラム開始通知を生成する。ＳＭＩハンドラは、デバイスドライバのプログラムカウンタを回復し、回復されたプログラムカウンタとＰＩＰＣテーブル４４０に格納された許可可能なプログラムカウンタ値の範囲と比較する。ある実施例では、デバイスドライバのアドレスは、回復されたプログラムカウンタから取得される。
【００４７】
ネットワークデバイスドライバは、４５０において、伝送（例：インタラプトの無効化と共に）することを目的として、１つまたは複数のバッファ４４５を設定する。１つまたは複数のバッファ４４５が設定された後、ネットワークデバイスドライバは、参照番号４５５によって示されるように、「暗号」および／または「整合性生成」通知タイプの処理要求を指定するＳＭＩ処理通知を発生させる。ＳＭＩハンドラは、１つまたは複数のバッファ４４５内に格納された、伝送される準備が整ったフレームの物理アドレスを記録する。ある実施例では、ＰＤＴ内のＤＢＰは、１つまたは複数のバッファ４４５の物理アドレスを指定する。
【００４８】
ある実施例では、ＳＭＩハンドラは、例えば、送信準備が整ったデータを保持する１つまたは複数のバッファ４４５に対して、暗号コード４６０および／または整合性生成コードを実行する。ある実施例では、１つまたは複数のバッファ４４５が適切に暗号化される、および／または、整合性ＨＭＡＣがＰＤＴ（図示されない）の整合性バッファポインタによって参照されるバッファにおいて生成される。そして、制御は、ネットワークデバイスドライバに戻される。ある実施例では、デバイスドライバは、１つまたは複数のバッファ４４５に格納されたフレームをＭＡＣデバイス４２０に送信することを目的として、ダイレクトメモリアクセスを使用する。参照番号４６５は、ダイレクトメモリアクセスを介して、ＭＡＣデバイス４２０に送信されるバッファされたデータを示す。ＭＡＣデバイス４２０は、１つまたは複数のバッファ４４５から回復したデータを伝送した後に、完全な信号をプロセッサ４０５に対して送信する。ある実施例では、デバイスドライバは、伝送が完了した後に、ＳＭＩプログラム終了通知をトリガーする。
【００４９】
図４に示されるように（例：参照番号４３５、４５０、および４５５）、本発明の実施例は、プラットフォーム内通信およびプラットフォーム間通信を提供しうる。プラットフォーム内通信の一つの例は、セキュリティコンポーネントの存在を確立することを目的とした、ホスト上のセキュリティソフトウェアと、プラットフォーム（プロアクティブ／Ｎａｖａｓｓａ）の組込み管理プロセッサ上のファームウェアセキュリティエージェントとの間における認証されたハートビートメッセージである。
【００５０】
標準的なハートビート通信は、プラットフォーム上のセキュリティエージェントの存在を確立する。この通信は、機密情報を扱うものであり、ある実施例では、スプーフィングに対して保護されうる。この通信は、例えば、ダイレクトメモリアクセスまたは専用管理バスのような、いかなる媒体を介してもよい。ある実施例では、（上記に説明された通り）整合性確認および／または暗号化処理は、耐タンパーでありかつ機密情報を扱う環境におけるハートビートメッセージに対して適用されうる。組込み管理プロセッサは、ハートビートメッセージを検証できるように、鍵を設定しうる。ある実施例では、使用される鍵は、ハートビートによって存在が確立されたセキュリティソフトウェアに対して漏洩されない。この場合、通信するエンドポイントは、ホストソフトウェア、および、組込み管理コントローラ上の管理ソフトウェアでありうる。同様の概念が、機密情報を扱うプログラム間通信の秘匿化、または、単一プログラムのデータに関する整合性保護（この単一のプログラムがデータ交換のソースかつデスティネーション）に用いられることができる。一実施例では、代替実施例における反射攻撃を防ぐことを目的として、鍵と連動してランダムなナンスが使用されうる。
【００５１】
図４（例：参照番号４３５および４５２）に示されるように、本発明の実施例は、プログラム内通信およびプログラム間通信を提供しうる。ある実施例では、プログラムは、カーネルコンポーネント（例：ｒｉｎｇ−０プログラム）である。一実施例では、プログラムは、アプリケーション（例：ｒｉｎｇ−３プログラム）である。プログラムがアプリケーションである、ある実施例では、保護された通信は、プロセス間および／またはプロセス内通信として称されうる。例えば、ある実施例では、プログラムは、データおよび状態を所有するプログラムに認識されずに他のプログラムがデータまたは状態を変更できないように、自身のデータおよび状態を起動間で保護しうる。
【００５２】
そのような実施例では、「正規の」プログラムは、同一（または他の）正規のプログラムのみがデータにアクセスできるように、データを暗号化および復号化することによってデータを隠蔽および開示することを目的として、ＳＭＭ保護鍵を使用しうる。代替の実施例では、プログラムは、プログラムが起動された場合に以前の起動からデータが変更されていないことを確認することを目的として、内部プログラム状態のＨＭＡＣを計算することによって自身の状態の整合性を確認するために、ＳＭＭ保護鍵を使用することができる。プログラムがリターンする前に、プログラムは、次の起動時に検証されるべき自身の内部状態または他のデータのための新規ＨＭＡＣを生成することを目的として、ＳＭＩを発行しうる。あるいは、プログラムは、自身の内部データ構造に対してハッシュ値またはランニングチェックサムを作成し、署名するため、または、自身のデータ構造に対してハッシュ／チェックサムを生成したプログラムの整合性を保護するために、単にＳＭＭコンポーネントを使用することができる。そのような実施例では、プログラムは、ＳＭＩプログラム終了通知の前かつＳＭＩプログラム開始通知の後に、自身の内部データ構造のハッシュ／チェックサムを計算する。処理通知は、このハッシュ／チェックサムが使用される前にその整合性を確認するために使用されることができる。そして、プログラムが自身のデータ構造の変更とそのハッシュ／チェックサムの更新を完了した後、新規の整合性ＨＭＡＣが再び生成されうる。ある実施例では、整合性検証におけるエラーは、ＰＤＴ（例：図２Ｂに示されるＰＤＴ２４０）のエラーコードを介して呼び出し側プログラムにレポートされる。
【００５３】
図５は、複数の異なるレイヤにおいてネットワークセキュリティプロトコルをサポートする、本発明の実施例を示すフレームワーク５００である。ある実施例では、フレームワーク５００は、ネットワークレイヤセキュリティ（例：インターネットプロトコルセキュリティ（ＩＰＳＥＣ）、トランスポートレイヤセキュリティ（ＴＬＳ）、および／またはアプリケーションレイヤセキュリティー）をサポートしうる。
【００５４】
一実施例では、ネットワークドライバ５１０は、多様なネットワークレイヤプロトコル５２２−５２６から受信されたフレーム記述子に、追加のメタデータ（例５３２、５３４、および５３６）の「タグ」を付す。これらのタグは、また、ＳＭＲＡＭにおいて（鍵と共に）予め提供され、例えば、どの暗号化アルゴリズムを使用するのか、どの鍵を使用するのか、およびどのレイヤを暗号化するのかを決定することを目的として、ＳＭＩハンドラによって使用される。ある実施例では、上位プロトコルレイヤ（例：プロトコルレイヤ５２２から５２６）は、また、攻撃者がフレームをセキュアなセッションに入力することを防ぐことを目的として、ネットワークドライバ５１０への呼び出し時に、ソースが検証される。
【００５５】
図６は、本発明の実施形態により実装されるトランザクション６００を示すトランザクション図である。トランザクション６００は、ホストネットワークデバイスドライバ６０５、ホスト物理メモリ６１０、ＳＭＩハンドラ６１５、およびネットワークコントローラ６２０を含む。ある実施例では、デバイスドライバ６０５は、ＳＭＩハンドラ６１５に、プログラム開始ＳＭＩ通知６２５を送信させる。ＳＭＩハンドラ６１５は、例えば、保存済み状態マップ（図示されない）によって、デバイスドライバ６０５を、トランザクションのソースのプログラムとして識別しうる。ＳＭＩハンドラは、参照番号６３０において、制御をデバイスドライバ６０５に戻す。
【００５６】
ある実施例では、デバイスドライバ６０５は、６３２によって示されるように、トランザクション６００中のコンテキストスイッチに対して保護することを目的として、インタラプトを無効化しうる。そして、デバイスドライバ６０５は、６３４によって示されるように、伝送される準備が整ったフレームバッファを、Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ（ＦＩＦＯ）キュー（キューは図示されない）に伝送しうる。一実施例では、インタラプトは、６３６によって示されるように、ＦＩＦＯキューがロードされた場合に有効化される。そして、デバイスドライバ６０５は、６３８によって示されるように、暗号化処理ＳＭＩ通知をＳＭＩハンドラ６１５に送信しうる。
【００５７】
ＳＭＩハンドラ６１５は、ソースプログラムカウンタがデバイスドライバ６０５に対応することを確認することを目的として、ソースプログラムカウンタを再確認する。ある実施例では、ＳＭＩハンドラ６１５は、例えば、ＳＭＲＡＭ内に格納された鍵情報を使用するデバイスドライバ６０５に対するプログラムデータテーブルにおいて指定されるデータを暗号化する。ＳＭＩハンドラ６１５は、処理ＳＭＩリターン６４０により制御をデバイスドライバ６０５に戻しうる。デバイスドライバ６０５は、参照番号６４５によって示されるようにパケットの送信準備が整ったことを示すことを目的としてネットワークコントローラ６２０に通知しうる。ネットワークコントローラ６２０は、例えば、パケットをホスト物理メモリ内のネットワークインタフェースカードメモリに送信するために、ダイレクトメモリアクセスを使用しうる。ある実施例では、ネットワークコントローラ６２０は、６５０において、パケットが送信されたことをデバイスドライバ６０５に通知する。
【００５８】
本発明の実施例の要素は、また、マシン実行可能な命令群を格納するためのマシンアクセス可能な媒体として提供されうる。マシンアクセス可能な媒体は、マシン（例：コンピュータ、ネットワークデバイス、パーソナルデジタルアシスタント、製造ツール、１つ以上のプロセッサのセットを有する全てのデバイスなど）によってアクセス可能な形態で情報を提供（例：格納および／または伝送）する、全ての機構を含む。例えば、マシンアクセス可能な媒体は、記録可能／記録不可能な媒体（リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス等）、および、電気、光、音、または他の形態の伝播信号（例：搬送波、赤外線信号、デジタル信号等）などを含む。
【００５９】
本願明細書における「一実施例」または「ある実施例」は、実施例に関連して説明された特定の機能、構造、または性質が、本発明の少なくとも一実施例に含まれることを意味する。従って、本願明細書における２つ以上の「ある実施例」、「一実施例」、または「代替の実施例」は、必ずしも全て同一の実施例を参照しない。更に、特定の機能、構造、または性質は、本発明の１つ以上の実施例において適切に組み合わされてもよい。
【００６０】
同様に、本発明の実施形態に関する上記の説明では、１つ以上の発明の態様に関する理解を促進する形で発明内容を開示することを目的として、種々の機能が一実施例、図、またはその説明に組合せられることがあると理解されるべきである。しかしながら、当該開示方法は、特許請求される発明が、各請求項において明示的に記載されている内容よりも多くの機能を必要とするように解釈されるべきではない。添付の特許請求の範囲が示すように、発明の態様は、上記に開示された実施例の全ての機能よりも少ない機能に収まる。従って、添付の特許請求の範囲は、詳細な説明に明示的に組み込まれる。
【図１】
2008500655.tif 000007
【図２Ａ】
2008500655.tif 000008
【図２Ｂ】
2008500655.tif 000009
【図３Ａ】
2008500655.tif 000010
【図３Ｂ】
2008500655.tif 000011
【図３Ｃ】
2008500655.tif 000012
【図４】
2008500655.tif 000013
【図５】
2008500655.tif 000014
【図６】
2008500655.tif 000015
【国際調査報告】
2008500655.tif 000016
2008500655.tif 000017
2008500655.tif 000018