(57)【要約】認可されていないコードによるデータのアクセス、捕捉、及び／又は変更の試みを防止するべく、クライアントコンピュータシステム上の入出力におけるデータセキュリティを向上させる方法及びシステムを提供する。実施例においては、複数の難読化技法と、これらの難読化技法を使用して有効なデータの認可されていない閲覧／受信を禁止するセキュリティ機能拡張ドライバが提供される。これらのセキュリティ機能拡張ドライバを様々な難読化技法と共に使用した場合に、これらのドライバは、認可されていない受領者が有効なデータを利用できないように、データの保存に使用する保存領域のコンテンツを「スケジューリング」するメカニズムを提供する。認可されていない受領者が「データ」に対するアクセスを試みた場合には、彼らは難読化されたデータを感知及び受信することになる。記述されている難読化技術には、「コピーイン」、「置換と回復」、及び「定位置置換」逆難読化／再難読化法が含まれている。一実施例においては、セキュリティ機能拡張ディスプレイドライバ、セキュリティ機能拡張マウスドライバ、セキュリティ機能拡張キーボードドライバ、セキュリティ機能拡張オーディオドライバが提供される。更に、本方法及びシステムは、セキュリティ機能の強化を補完するべく、必要な場合にドライバが機能できるようにする見張り番メカニズムと表示装置上にセキュリティを表示する様々なユーザーインターフェイス技法をも提供する。
2005504365.tif 000002
【特許請求の範囲】
【請求項１】
ビデオ表示システムのビデオ表示装置上において、有効なデータの安全な表示を確保するコンピュータシステムにおける方法であって、前記ビデオ表示システムは、前記ビデオ表示装置上に表示するデータを保存するビデオ表示メモリを有しており、
前記ビデオ表示メモリのコンテンツをスケジューリングする段階であって、前記有効なデータは、前記ビデオ表示装置上での表示のために必要とされる際に利用可能となると共に、前記スケジューリングの外部に位置するコードは、前記ビデオ表示メモリにおいては、無効なデータにのみアクセス可能となるように、前記ビデオ表示メモリのコンテンツをスケジューリングする段階を有する方法。
【請求項２】
前記無効なデータは、前記有効なデータを、難読化されたデータ、暗号化されたデータ、及びマスク処理されたデータの中の少なくとも１つに変形し、該変形したデータを前記ビデオ表示メモリ内に保存することによって生成される請求項１記載の方法。
【請求項３】
前記無効なデータは、ガベージデータ、ビットマップ、又は不透明な単色領域の中の少なくとも１つである請求項１記載の方法。
【請求項４】
前記ビットマップは企業のロゴである請求項３記載の方法。
【請求項５】
前記領域は黒である請求項３記載の方法。
【請求項６】
前記ビットマップは広告である請求項３記載の方法。
【請求項７】
前記領域は、前記ビデオ表示装置の全体である請求項１記載の方法。
【請求項８】
前記有効なデータは、前記ビデオ表示装置上の領域内に表示され、前記領域は、前記ビデオ表示メモリ内の場所の組に対応し、
前記有効なデータをオーバーレイバッファ内に保存する段階と、
無効なデータを前記ビデオ表示メモリ内の前記対応する場所の組内に保存する段階と、
を更に有する請求項１記載の方法。
【請求項９】
前記ビデオ表示装置上に前記有効なデータを表示する際に、前記有効なデータを前記オーバーレイバッファから前記ビデオ表示装置にコピーアウトする段階を更に有する請求項８記載の方法。
【請求項１０】
前記ビデオ表示メモリ内の前記対応する場所の組内に保存されている前記無効なデータは、ガベージデータ、ビットマップ、及び不透明な単色領域の中の少なくとも１つである請求項８記載の方法。
【請求項１１】
前記ビットマップは企業のロゴである請求項１０記載の方法。
【請求項１２】
前記領域は黒である請求項１０記載の方法。
【請求項１３】
前記有効なデータは、前記ビデオ表示装置上の領域内に表示され、前記領域は、前記ビデオ表示メモリ内の場所の組に対応し、
オーバーレイバッファ内に無効なデータを保存する段階と、
前記ビデオ表示メモリ内の前記対応する場所の組内に無効なデータを保存する段階と、
前記オーバーレイバッファ内に保存されている前記無効なデータが前記ビデオ表示装置上の前記領域にコピーアウトされる際に、前記オーバーレイバッファ内に保存されている前記無効なデータを有効なデータに変形させる段階と、
を更に有する請求項１記載の方法。
【請求項１４】
前記オーバーレイバッファ内に保存されている前記無効なデータは、前記有効なデータの暗号化された形態である請求項１３記載の方法。
【請求項１５】
前記オーバーレイバッファ内に保存されている前記無効なデータの前記変形段階は、前記無効なデータが前記ビデオ表示装置にコピーアウトされる際に前記無効なデータを解読する段階を有する請求項１４記載の方法。
【請求項１６】
前記ビデオ表示メモリ内の前記対応する場所の組内に保存されている前記無効なデータは、ガベージデータ、ビットマップ、及び不透明な単色領域の中の少なくとも１つである請求項１３記載の方法。
【請求項１７】
前記ビットマップは企業のロゴである請求項１３記載の方法。
【請求項１８】
前記領域は黒である請求項１６記載の方法。
【請求項１９】
前記ビデオ表示メモリ内の前記対応する場所の組内に、前記有効なデータを暗号化されたデータとして保存する段階と、
前記スケジューリングの外部に位置するコードが前記暗号化されたデータにのみアクセス可能となるように、前記ビデオ表示装置上に表示される際に前記ビデオ表示メモリ内の前記対応する場所の組内の前記暗号化されたデータを解読する段階と、
を更に有する請求項１記載の方法。
【請求項２０】
前記ビデオ表示システムは、前記ビデオ表示装置上の領域内に前記有効なデータを表示するべく、前記ビデオ表示メモリからデータを前記ビデオディスプレイにコピーするグラフィックプロセッサを有しており、
前記領域に対応する前記ビデオ表示メモリの部分内に無効なデータを保存する段階と、
前記グラフィックプロセサが前記領域に対応する前記ビデオ表示メモリの前記部分にアクセスする際に、
前記部分から前記無効なデータを取得する段階と、
前記データを前記ビデオ表示メモリから前記ビデオディスプレイにコピーする一環として、前記無効なデータを有効なデータに変形し、これにより、前記有効なデータを前記ビデオ表示装置上に表示する段階と、
を更に有する請求項１記載の方法。
【請求項２１】
前記無効なデータは、前記有効なデータの暗号化された形態であり、前記無効なデータの変形段階は、前記無効なデータを解読する段階を有する請求項２０記載の方法。
【請求項２２】
前記無効なデータは、ラスタ演算を適用して前記有効なデータをマスクと合成することによって生成され、前記無効なデータから有効なデータへの変形段階は、ラスター演算を適用して前記無効なデータをマスクと合成する段階を有する請求項２０記載の方法。
【請求項２３】
前記ラスタ演算は、ＸＯＲ演算であり、前記有効なデータに適用される前記マスクは、前記無効なデータに適用される前記マスクと同一である請求項２２記載の方法。
【請求項２４】
スケジューリングプロセスによって実行され、前記有効なデータは、前記ビデオ表示装置上の領域内に表示され、前記領域は、前記ビデオ表示メモリの一部分に対応し、
前記領域に対応する前記ビデオ表示メモリの前記部分内に無効なデータを保存する段階と、
前記スケジューリングプロセス以外のプロセスが前記部分にアクセスすることを許容しない排他的なロックメカニズムの下に、前記ビデオ表示メモリの前記部分において、前記保存されている無効なデータを有効なデータに一時的に変形する段階と、
を更に有する請求項１記載の方法。
【請求項２５】
前記保存されている無効なデータを変形する段階は、解読する段階、マスクを使用して前記保存されている無効なデータにラスタ演算を適用する段階、及びバッファから有効なデータをコピーする段階の中の１つを有する請求項２４記載の方法。
【請求項２６】
前記バッファはオーバーレイバッファである請求項２５記載の方法。
【請求項２７】
前記バッファは、前記領域に対応する前記部分ではない前記ビデオ表示メモリの別の領域である請求項２５記載の方法。
【請求項２８】
前記バッファは安全且つ有効なデータバッファである請求項２５記載の方法。
【請求項２９】
前記排他的ロックメカニズムは、オペレーティングシステムによって提供されるプロセス間ロックメカニズムである請求項２４記載の方法。
【請求項３０】
前記排他的ロックメカニズムは、前記スケジューリングプロセスをリアルタイムの優先プロセスとすることによって実現される請求項２４記載の方法。
【請求項３１】
前記コンピュータシステムは、制御された順序によってデバイスドライバにアクセスを許容するオペレーティングシステムを有しており、前記順序は第１のドライバを有し、前記排他的ロックメカニズムは、前記スケジューリングを実装する表示ドライバを前記第１のドライバとすることによって実現される請求項２４記載の方法。
【請求項３２】
前記ビデオ表示システムは、複数のタイムスライスにおいて、データを前記ビデオ表示メモリから前記ビデオディスプレイにコピーするグラフィックプロセッサを有しており、前記有効なデータは、前記ビデオ表示装置上の領域内に表示され、前記領域は、前記ビデオ表示メモリの一部分に対応し、
前記領域に対応する前記ビデオ表示メモリの前記部分内に無効なデータを保存する段階と、
前記グラフィックプロセッサが前記領域内の前記有効なデータの表示に対応する前記ビデオ表示メモリの前記部分にアクセスした際には、前記グラフィックプロセッサは前記有効なデータを取得し、前記グラフィックプロセッサが前記ビデオ表示メモリの前記部分にアクセスしていない場合には、前記部分が前記無効なデータを格納するように、タイムスライスにおいて、前記ビデオ表示メモリ内の前記無効なデータを前記有効なデータと置換する段階と、
を更に有する請求項１記載の方法。
【請求項３３】
前記無効なデータは、前記タイムスライスにおいて、前記ビデオ表示メモリ内で前記無効なデータを有効なデータに一時的に変形することにより、有効なデータと置換される請求項３２記載の方法。
【請求項３４】
前記変形段階は、解読段階とラスタ演算を適用する段階の中の１つである請求項３３記載の方法。
【請求項３５】
前記変形段階は、ＸＯＲラスタ演算を使用してマスクバッファを前記無効なデータに適用する請求項３３記載の方法。
【請求項３６】
前記無効なデータは、オーバーレイバッファから有効なデータをコピーした後に前記タイムスライス後に前記無効なデータを回復することにより、有効なデータと置換される請求項３２記載の方法。
【請求項３７】
前記回復段階は、マスクバッファから無効なデータをコピーすることによって実行される請求項３６記載の方法。
【請求項３８】
前記無効なデータは、前記有効なデータを格納する安全なバッファから有効なデータをコピーした後に前記タイムスライスの後に前記無効なデータを回復することにより、有効なデータと置換される請求項３２記載の方法。
【請求項３９】
前記回復段階は、マスクバッファから無効なデータをコピーすることによって実行される請求項３８記載の方法。
【請求項４０】
前記有効なデータは、ビデオ表示メモリの安全な領域内に保存される請求項３８記載の方法。
【請求項４１】
前記有効なデータバッファは、前記ビデオ表示システムの一部としては存在していないコンピュータシステムメモリの安全な領域内に保存される請求項３８記載の方法。
【請求項４２】
前記有効なデータバッファには、前記スケジューリングを制御するコードのみがアクセス可能である請求項３８記載の方法。
【請求項４３】
請求項３２記載の方法。
【請求項４４】
前記無効なデータは、ガベージデータ、ビットマップ、及び不透明な単色領域の中の少なくとも１つである請求項３２記載の方法。
【請求項４５】
前記無効なデータは、前記有効なデータを、難読化されたデータ、暗号化されたデータ、及びマスク処理されたデータの中の少なくとも１つに変形し、該変形したデータを前記ビデオ表示メモリの前記部分内に無効なデータとして保存することにより、生成される請求項３２記載の方法。
【請求項４６】
ビデオ表示システムのビデオ表示装置上に安全な表示領域を提供するコンピュータシステムにおける方法であって、前記ビデオ表示システムは、前記ビデオ表示装置上に表示されるデータを保存するビデオ表示メモリを有しており、
前記安全な表示領域に対応する安全なデータ保存場所として前記ビデオ表示メモリの一部分を予約する段階と、
前記安全な表示領域内に有効なデータを表示する要求を受信する段階であって、前記要求は前記有効なデータの標識を含んでいる段階と、
安全なデータバッファ内に、前記指示された有効なデータを保存する段階と、
前記予約した部分内に保存されているデータが表示のために前記ビデオ表示装置にコピーアウトされる時点から既定の期間だけ前の時点まで、前記ビデオ表示メモリの前記予約した部分内に無効なデータを保存する段階と、
を有する方法。
【請求項４７】
前記既定の期間の開始時点において、前記ビデオ表示メモリの前記予約した部分内に保存されている前記無効なデータを前記安全なデータバッファからの有効なデータと置換する段階を更に有する請求項４６記載の方法。
【請求項４８】
前記予約した部分内に保存されている前記データが前記ビデオディスプレイにコピーアウトされた後に、前記ビデオ表示メモリの前記予約した領域内に前記無効なデータを再度保存する段階を更に有する請求項４７記載の方法。
【請求項４９】
前記安全なデータバッファは、前記ビデオ表示メモリの前記予約した部分内に前記有効なデータを暗号化されたデータとして保存することによって実装される請求項４６記載の方法。
【請求項５０】
前記安全なデータバッファは、前記ビデオ表示メモリ内の領域、前記コンピュータシステム内のランダムアクセスメモリの一部分、及び前記ビデオ表示装置を制御するビデオカード上に存在する第２メモリの中の１つである請求項４６記載の方法。
【請求項５１】
前記ビデオ表示メモリは、前記ビデオ表示装置上に表示されるデータを保存するフレームバッファを有しており、前記安全なデータバッファは、前記フレームバッファの一部分である請求項４６記載の方法。
【請求項５２】
前記有効なデータは、前記安全なデータバッファ内に保存される前に難読化される請求項５１記載の方法。
【請求項５３】
前記有効なデータは、前記安全なデータバッファ内に保存される前に難読化される請求項４６記載の方法。
【請求項５４】
難読化は、前記有効なデータの暗号化と、前記有効なデータ及びマスクに対するラスタ演算の適用と、の中の少なくとも１つによって実行される請求項５３記載の方法。
【請求項５５】
前記マスクは、暗号化キー、企業のロゴ、パターン、広告、及び黒い領域の中の少なくとも１つを有するビットマップである請求項５４記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
（発明の分野）
本発明は、コンピュータに基づいた環境においてデータのセキュリティを維持する方法及びシステムに関し、更に詳しくは、マウスやキーボードなどの入力装置から入力される際、並びに、例えば、オーディオ又はビデオ手段などを通じて出力される際に、データのセキュリティを維持する方法及びシステムに関するものである。
【背景技術】
【０００２】
（背景情報）
パーソナルコンピュータシステムが無線又は有線ネットワーク及び／又はインターネットなどの相互接続ネットワークを通じて別のコンピュータシステムに普遍的に接続されている世界においては、セキュリティの概念が、益々、その重要性を増している。これまで多くの企業や団体は、例えば、ネットワーク通信によってパーソナル（クライアント）コンピュータシステムからサーバーコンピュータシステムにデータを転送する際などのセキュリティ問題に取り組んでおり、この結果、例えば、ローカルエリアネットワーク（ＬＡＮ）上には、通常、ファイアウォールが配置され、相互接続ネットワーク世界の残りの部分と、そのＬＡＮ上のコンピュータシステム間の境界を形成している。更には、データ通信路のセキュリティを確保するべく、広く使用されている暗号化技法が、それらのデータ転送に対して、しばしば適用されている。
【発明の開示】
【０００３】
しかしながら、データを通信チャネルを介して暗号化された形態でサーバーマシンに送信している一方で、依然として、クライアントコンピュータシステム自体には、その上に有効な形態でしばしば保存される貴重なデータに関する問題点が残されたままになっている。例えば、インターネットによって物品を購入しようとするユーザーは、ウェブサイトに接続しログインした後に、物品を購入するべく、彼／彼女のクレジットカード情報を提供する。この場合に、ウェブサイト（及びクライアントマシン上のクライアントブラウザ）は、安全な通信レイヤ（例：ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）プロトコル）を使用するクレジットカード情報の転送をサポート可能であるものの、クレジットカード情報は、クライアントコンピュータシステムの表示装置に表示するべく、一定の期間にわたって有効なデータとして保存されたままの状態で現実に存在することになる。この結果、そのデータの保存期間が短いものであったとしても、認可されていない「ハッカー」は、（ファイアウォールによって締め出されていなかったり、クライアントコンピュータシステム上に不正なアプリケーションをインストールしていた場合には）、精緻なメカニズムを使用して、この保存データにアクセスすることができる。従って、クライアントマシン上のデータを保護する技法の提供に対するかつてないほどに大きなニーズが存在しているのである。
【０００４】
（簡単な発明の概要）
本発明による実施例は、違法なプロセス、アプリケーション、又はマシンが、認可されていない方法によってデータを取得しようとする試みを禁止及び／又は防止するべく、クライアントコンピュータシステム上における入出力の際のデータセキュリティを向上させるコンピュータに基づいた方法及びシステムを提供する。尚、本明細書におけるこの「データ」という用語には、グラフィック、テキスト、オーディオ、ビデオ、入力信号、出力信号など、なんらかの目的のために転送又は保存されるコンピュータシステム内のデジタルビット又はアナログ信号が含まれる。実施例においては、複数の難読化技法と、これらの難読化技法を使用して、認可されていないデータ受信者／閲覧者による有効なデータの受信／閲覧を禁止するセキュリティ機能が拡張されたシステムレベルのドライバが提供される。これらの難読化技法をセキュリティ機能拡張ドライバと共に使用すれば、認可されていない受領者／閲覧者は、常に無効なデータを受信／閲覧するようになり、結果的に、認可されていないハッカーからの有効なデータに対するアクセスを禁止することができる。難読化技法の中には、それ自体が様々なレベルのセキュリティを提供するものが存在する。
【０００５】
本明細書におけるこの「難読化（ｏｂｆｕｓｃａｔｉｏｎ）」という用語は、適切な権限を有さない場合の有効なデータの参照、捕捉、処理、又は変更を困難にし、認可されていない方法によってアクセスした際に、有効なデータが無効なデータとして表示されるように、有効なデータを変形又は隠蔽するメカニズム又は技法を指している。これらの難読化技法は、対象となる実行環境に応じて、ソフトウェア、ハードウェア、又はファームウェアとして実装可能である。
【０００６】
実施例の中には、難読化されたデータが、例えば、すべて黒又はすべて白などの不透明な色、パターン、ランダムなビットマップ、ノイズ、マスク処理されたデータ、画像、企業のロゴ、又は広告を有するものが存在する。データのタイプに応じて、その他のタイプの難読化も可能である。
【０００７】
表示装置及びその他のタイプの表示記憶装置上においてデータを安全に表示するべく、この難読化技法には、「コピーアウト（ｃｏｐｙ−ｏｕｔ）」、「置換と回復（ｒｅｐｌａｃｅ  ａｎｄ  ｒｅｓｔｏｒｅ）」、及び「定位置置換（ｉｎ−ｐｌａｃｅ  ｒｅｐｌａｃｅｍｅｎｔ）」が含まれている。これらの技法は、有効なデータを表示するべく難読化データをどこで（どのように）逆難読化（ｄｅ−ｏｂｆｕｓｃａｔｉｏｎ）するか、及びデータをどこで（どのように）再難読化（ｒｅ−ｏｂｆｕｓｃａｔｉｏｎ）するか、を指定するものである。技法の中には、フレームバッファと関連してオーバーレイバッファ又はマスクバッファを利用し難読化プロセスを実現するものも存在する。その他の技法においては、ビデオカード上の既存の標準的なラスター演算又はオーバーレイ演算ロジックを活用している。そして、その他の実施例においては、その他のタイプの記憶装置におけるコンテンツのスケジューリングに、これらの難読化技法を適用している。
【０００８】
実施例の中には、セキュリティ機能拡張ドライバ（ＳＥＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｄｒｉｖｅｒ）が、文字化け情報又はノイズと混在した形態でのデータの提示から、データの暗号化に至るまで、様々な程度及びレベルのセキュリティを実装するものが存在する。これらのＳＥＤを様々な難読化技法と共に使用することにより、データの難読化に使用したもの、その方法、及びデータのソースを判定することができる。これらのＳＥＤは、データの難読化と逆難読化（及び再難読化）をスケジューリングする責任を負っている。
【０００９】
一実施例においては、ビデオ表示メモリ内に保存されているフレームバッファの各部分のコンテンツをスケジューリングするべく、セキュリティ機能を拡張したディスプレイドライバ（ＳＥＤＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｄｉｓｐｌａｙ  Ｄｒｉｖｅｒ）が提供されている。このような一実施例においては、ビデオディスプレイ上の安全な領域にデータを表示する要求は、ＳＥＤＤに対して行われる。これに応答し、ＳＥＤＤは、対応するフレームバッファの安全な部分を割り当てると共に、表示装置への映写に必要とされ且つその他のタスクからの安全な部分に対するアクセス（読み取り又は書き込み）がロックアウトされている場合にのみ、有効なデータが安全な部分に存在するように、この安全な部分のデータコンテンツをスケジューリングする。ＳＥＤＤは、使用する難読化技法に応じて、安全な部分に保存されているデータの逆難読化及び再難読化の実行を要する時点を判定する。
【００１０】
その他の実施例においては、マウス、キーボード、又はその他のポインティング装置などの入力装置用にセキュリティ機能拡張ドライバが提供される。これらのＳＥＤは、入力装置から到来する入力データを直接捕捉し、安全な入力データが要求されている場合に、そのデータを難読化形態に変形し、この変形したデータを要求元のコードに転送するべく機能する。一方、安全なデータの受信が認可されていないタスク用に入力データが受信された場合には、その入力データは、標準的な入力スタックを介して標準のオペレーティングシステムの入力ドライバに転送される。
【００１１】
これらの実施例の中には、その他のコードよりも先にＳＥＤがデータを捕捉できるように、ＳＥＤがドライバ処理シーケンスの先頭にインストールされているものが存在する。実施例の中には、これらの先頭フックのセキュリティを確実なものにするべく、監視及び／又は見張り番サービスを生成するものが存在する。
【００１２】
更にその他の実施例においては、システム内で提供される様々なレベルのセキュリティを表示するべく、様々な技法が提供される。これらの技法の中には、セキュリティのソースに関する情報を提示するものも存在する。スクロールバーやタイトルなどの標準的なユーザーインターフェイス要素を操作する技法、並びに入力フォーカスが１つの領域から別のセキュリティ領域に移動した際に、カーソルの表示形態を自動的に変更する技法も存在する。
【００１３】
（発明の詳細な説明）
本発明の実施例によれば、認可されていない方法によってデータを取得しようとする違法なプロセス、アプリケーション、又はマシンによる試みを禁止及び／又は防止するべく、クライアントコンピュータシステムにおける入出力の際のデータセキュリティを向上させるコンピュータに基づいた方法及びシステムが提供される。尚、本明細書におけるこの「データ」という用語には、グラフィック、テキスト、オーディオ、ビデオ、入力信号、出力信号などのなんらかの目的のために転送又は保存されるコンピュータシステム内のデジタルビット又はアナログ信号が含まれている。実施例においては、複数の難読化技法と、これらの難読化技法を使用して、認可されていないデータ受信者／閲覧者が有効なデータを受信／閲覧することを禁止するセキュリティ機能が拡張された（通常、システムレベルの）ドライバを提供している。これらの難読化技法をセキュリティ機能拡張ドライバと共に使用することにより、認可されていない受領者／閲覧者が、常に無効なデータを受信／閲覧するようになり、結果的に、認可されていないハッカーが有効なデータにアクセスすることを禁止することができる。難読化技法の中には、それ自体が様々なレベルのセキュリティを提供するものが存在している。
【００１４】
本明細書におけるこの「難読化（ｏｂｆｕｓｃａｔｉｏｎ）」という用語は、適切な権限を有さない場合の有効なデータの参照、捕捉、処理、又は変更を困難にし、認可されていない方法によってアクセスした際に、有効なデータが無効なデータとして表示されるように、有効なデータを変形又は隠蔽するメカニズム又は技法を指している（尚、「難読化」という用語は、理解できないように描画することを意味している）。これらの難読化技法は、対象の実行環境に応じて、ソフトウェア、ハードウェア、又はファームウェアとして実装可能である。標準的な暗号化技法も難読化の１つのタイプであるが、有効な形態と無効な形態間におけるデータの変形や、有効なデータ内におけるノイズデータの一時的及び動的な移動などを含む様々なその他の技法を採用することができる。従って、本発明による方法及びシステムは、データの認可されていないハッキングと取得を防止するための多数の技法について記述するものである。尚、本明細書において使用するこの「ハッキング」という用語は、データの捕捉或いはデータ又はアクセスパターンの監視を行うなんらかの技法を使用するあらゆるタイプの違法及び／又は認可されていないデータの使用又は閲覧を意味するものである。
【００１５】
セキュリティ機能拡張ドライバ（ＳＥＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｄｒｉｖｅｒ）は、単純な文字化け情報又はノイズと混在したデータの保存或いは提示から、データの暗号化、更には、認可されていないコードがデータを無効なものとして感知又は受信するようにするなどの様々な程度及びレベルのセキュリティを実装する。いずれの場合にも、各セキュリティ機能拡張ドライバが目的とするところは、認可されていない「クライアント」（コード、ユーザー、ハードウェアなど）に対して、難読化された（従って、無効な）データとして有効なデータを保存し且つ提示することである。本発明の一実施例においては、セキュリティ機能拡張ドライバには、セキュリティ機能拡張（ビデオ）ディスプレイドライバ（ＳＥＤＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  （ｖｉｄｅｏ）  Ｄｉｓｐｌａｙ  Ｄｒｉｖｅｒ）、ポインティングタイプの入力装置（又は、ｘ、ｙ座標入力装置）にとって一般的に有用な技法であるセキュリティ機能拡張マウスドライバ（ＳＥＭＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｍｏｕｓｅ  Ｄｒｉｖｅｒ）、セキュリティ機能拡張キーボードドライバ（ＳＥＫＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｋｅｙｂｏａｒｄ  Ｄｒｉｖｅｒ）、及びセキュリティ機能拡張オーディオドライバ（ＳＥＡＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ａｕｄｉｏ  Ｄｒｉｖｅｒ）が含まれている。以下のいくつかの小節においては、これらのドライバ及び適用可能な付随する難読化技法のそれぞれについて説明する。尚、当業者であれば、本明細書に記述されている技法、方法、及びシステムを使用し、その他のタイプの入出力装置用のその他のドライバを同様に設計及び／又は実装可能であることを認識するであろう。
【００１６】
図１は、本発明の実施例によって提供されるセキュリティ機能拡張ドライバを含む標準的なコンピュータアーキテクチャの抽象化レイヤを示すブロックダイアグラム例である。この図１においては、多くのコンピュータシステムと同様に、カーネルとオペレーティングシステムのデバイスドライバ（マウス、キーボード、ディスプレイ、オーディオ、及びネットワークドライバなど）を含むオペレーティングシステムレイヤ１０１がソフトウェア実行アーキテクチャの基部に存在している。このオペレーティングシステムレイヤ１０１は、マウス１１０、キーボード１２０、ディスプレイ１３０、ネットワークインターフェイスカード１４０などのハードウェア及び／又ハードウェアインターフェイスカードと直接通信している。当業者であれば、このようなシステム内には、図示されてはいないが、（オーディオプレーヤー及び関連するオペレーティングシステムのオーディオドライバを含む）その他のハードウェア及びその他のドライバも存在し得ることを認識するであろう。これらのオペレーティングシステムのデバイスドライバ上においては、その他の（通常、上位レベルの）ドライバソフトウェア１０２がハードウェアの更に複雑な抽象化を実行し、アプリケーションレイヤ１０４及びアプリケーションソフトウェアライブラリ２０３に提供している。ドライバソフトウェア１０２には、ウィンドウインターフェイス（即ち、ＷｉｎｄｏｗｓオペレーティングシステムのＧＤＩなどのディスプレイインターフェイス）によって提供されるマウス及びキーボードインタフェイスなどのアプリケーションによる入出力の受信及び処理を支援するインターフェイスと関数のライブラリが含まれている。アプリケーションＡＰＩ１０３は、オブジェクト指向のアプリケーションコードにおいてサブクラス化可能な再利用可能オブジェクトなどの更にハイレベルな抽象化をアプリケーション１０４にしばしば提供している。そして、その他のすべてのレイヤの上位に位置する最上位レベルにおいては、通常、（デスクトップ）アプリケーション１０４が可動しており、それぞれのレイヤを順番に通じて通信し、ハードウェアとの入出力を処理している。本発明の実施例の中には、好ましいことに、コンピュータシステムの最下位レイヤにおいて入出力の安全な処理を十分に制御できるよう、セキュリティ機能拡張ドライバ（ＳＥＤ）４０６がオペレーティングシステムのデバイスドライバ４０５とハードウェア間に位置するものが存在する。
【００１７】
認可されたクライアントにのみ有効なデータを確保するという方式でデータの難読化を実装するには、通常、それぞれのＳＥＤは、システムの一部（ビデオカード上のフレームバッファの一部などのリソース）をロックアウトするためのなんらかのタイプのメカニズムを具備する必要がある。オペレーティングシステムタスク（プロセス、スレッド、なんらかのタイプのコードなど）のスケジューリングにおいてドライバに「優先順位」を付与するメカニズムは、オペレーティングシステム（カーネル又はその他のプロセススケジューラ）ごとに異なるため、ＳＥＤを、そのシステムにおける「第１レベルのドライバ」に設定するメカニズムを実装することがしばしば必要となる。即ち、その入力又は出力を「フック」するドライバが、オペレーティングシステムのドライバ（図１におけるＯＳのデバイスドライバ１０５）などのその他のドライバ又はコードよりも先にデータを取得できるようにするメカニズムが存在する必要があるのである。１つの方法は、ＳＥＤをシステムレベルのドライバとして実装し、このドライバを（そのタイプの、或いは、場合によっては、イベント処理ドライバチェーン全体における）行列の第１ドライバとして格納するべくシステムを初期化すると共に、ＳＥＤの位置とセキュリティを監視する「見張り番」プロセスを提供する方法である。ドライバを先頭にインストールする技法と、この「先頭」という用語が意味するものは、オペレーティングシステムごとに異なるが、当業者には、オペレーティングシステムごとにドライバを先頭にインストールする方法は明らかであろう。尚、Ｗｉｎｄｏｗｓ９ｘ及びＷｉｎｄｏｗｓＮＴファミリーを使用する実装例については、「ＳＥＤの先頭へのインストールと見張り番による監視」という名称の節において説明する。
【００１８】
これらの難読化技法とセキュリティ機能拡張ドライバを補完するべく、本発明による方法及びシステムによれば、システム内の様々なセキュリティレベルを表示する様々な技法も提供されている。これらの技法の画面表面例については、図２４〜図２５に関連して提供及び説明する。尚、当業者であれば、セキュリティを表示するその他の技法が可能であり機能的にも等価であることを認識するであろう。
【００１９】
（ビデオコンテンツの安全な保存と表示）
ビデオコンテンツは、通常、様々なレベル及びシナリオのハッキングに対して脆弱である。図２は、通常のコンピュータシステムにおいてデータを表示装置に転送する方法を示すブロックダイアグラム例である。図２において、オペレーティングシステム及びアプリケーション２０１は、オペレーティングシステムのディスプレイインターフェイス２０２（通常、Ｗｉｎｄｏｗオペレーティングシステム環境におけるＧＤＩなどのグラフィックライブラリ）と通信し「デスクトップキャンバス」（オペレーティングシステムがユーザーインターフェイスのために制御している表示装置２２０の領域のビットマップ表現）を描画する（このビットマップは、通常、ランダムアクセスシステムメモリ（ＲＡＭ）に保存されており、ＯＳのメカニズムによってアプリケーションから隠蔽されている）。次いで、オペレーティングシステム（ＯＳ）のディスプレイドライバは、このビットマップをカード上に存在するビデオ表示メモリ２０３（例：ＶＲＡＭ）内に保存するべく、ビデオカードに送信する。描画されることになるこのビットマップは、通常、フレームバッファ２０４と呼ばれるＶＲＡＭの指定部分に、静的ビットマップとして保存される。ＯＳのユーザーインターフェイスが使用するこの表示装置２２０（画面）の部分（通常、「デスクトップ」と呼ばれているもの）に対応するフレームバッファ２０４の領域は、フレームバッファ２０４全体の一部分であってもよい。即ち、オペレーティングシステム２０４（及びアプリケーション）は、ディスプレイ２２０の表示可能領域の全体を使用しない場合がある。このオペレーティングシステム２０４が使用するディスプレイ２２０の部分は、通常、１０２４ｘ７６８（ピクセル）領域などの解像度座標で表示される周知のビデオモードによって記述並びに設定される（尚、（しばしば「物理的オーバースキャン」と呼ばれるものによって）表示装置の使用方法を拡張する（即ち、ＯＳユーザーインターフェイスとＯＳがアクセス不能な表示領域間で表示装置を共有する）アプリケーション及び技法については、「表示面上の相補型ユーザーインターフェイスを制御する方法及びシステム（Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｃｏｎｔｒｏｌｌｉｎｇ  ａ  Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  ｏｎ  ａ  Ｄｉｓｐｌaｙ  Ｓｕｒｆａｃｅ）」という名称の２０００年１１月２８日付けで出願された共有米国特許出願公開第０９／７２６，２０２号明細書、２０００年１月２５日付けで発行された「オーバースキャンユーザーインターフェイス（Ｏｖｅｒｓｃａｎ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）」という名称の米国特許第６，０１８，３３２号明細書、２００１年１２月１１日付けで発行された「セカンダリユーザーインターフェイス（Ｓｅｃｏｎｄａｒｙ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）」という名称の米国特許第６，３３０，０１０号明細書、及びその他の関連特許明細書に詳述されている）。ＶＲＡＭ２０３は、ビデオカード（及びビデオドライバ）により、その他のタイプの情報を保存するためにも使用される。即ち、現在では、先進的なビデオカードを有する一般的なＰＣ環境において、ＶＲＡＭ２０３内に、１つ又は複数の「オーバーレイ」バッファ２０５を存在することができる。これらのカードには、グラフィック処理ユニット（ＧＰＵ）がフレームバッファ２０４からディスプレイ２２０にビットをコピーアウトする際に、ＧＰＵ（又は、ＶＲＡＭ２０３から表示画面２２０へのデータ転送の責任を負っているその他の要素）がオーバーレイバッファ２０５のビットを「オーバーレイ」できるようにする先進的なロジックが提供されている。カードの中には、「ＡＮＤ」及び「ＸＯＲ」演算からその他のタイプの百分率演算にまで及ぶ複雑なロジックを使用し、オーバーレイビットをフレームバッファ２０４の対応するビットと合成するものも存在する（ＧＰＵにより、例えば、フレームバッファ２０４のビットｘ、ｙの７０％と、オーバーレイバッファ２０５のビットｗ、ｚの３０％を合成可能であり、これは、しばしばα合成と呼ばれている）。このようなカードは、しばしば、ＧＰＵ以外のコードに、このＶＲＡＭ２０３の１つの領域をＶＲＡＭ２０３のその他の領域と合成するビットマップ演算子を提供しており、これらを「ラスター演算」と呼ぶことにする。
【００２０】
データは、システムレベルのコード（ソフトウェア及びハードウェアビデオドライバ、並びにビデオカードと直接通信する方法を知っているその他のコード（例：Ｄｉｒｅｃｔ−Ｘ及びＤｉｒｅｃｔＤｒａｗ）など）がアクセス可能なＶＲＡＭ２０３の領域内に保存されている際には（この状態は、表示装置２２０上にデータを表示する場合に、一般的なものである）、悪質なプログラムによるハッキングに対して脆弱である。図３は、ディスプレイのハッキングを実行する方法を示すブロックダイアグラム例である。図３において、オペレーティングシステムのメモリ（ＲＡＭ）３０１は、図２で説明したように、デスクトップキャンバスを表すビットマップを保持している。この時点で、トロイの木馬アプリケーション３２０は、（ＲＡＭ内において、デスクトップキャンバスを見つける方法を知っている場合には）、デスクトップキャンバスのコピーにアクセスし、ネットワーク又はその他のデータ通信路を介して、ハッカーのコンピュータ３２１などのその他のコンピュータにそのコピーを転送することができる（このアプリケーション３２０は、通常、認可されていない検出不能な方法によってクライアントコンピュータシステム上に注入されているため、「トロイの木馬」と呼ばれる）。このような認可されていないアクセスを回避する１つの方法は、オペレーティングシステムが、このビットマップを難読化された形態で保存しておき、ＶＲＡＭ３０２内に保存するべくビデオカードに送信する際に、逆難読化（又は、非難読化）する方法である。尚、この「逆難読化（又は、非難読化）」という用語は、データの難読化に使用するのとは逆のプロセスを意味するべく使用されている。従って、例えば、ＸＯＲ演算をマスクに適用することによって難読化されたデータに対する同一マスクによるＸＯＲ演算の適用などの暗号化されたデータの解読は、１つの逆難読化プロセスである。
【００２１】
データがＶＲＡＭ３０２内に保存された後にも、データは、例えば、Ｄｉｒｅｃｔ−Ｘなどのライブラリを使用してビデオカードと直接通信する不正なアプリケーション３２２などの認可されていないクライアントによる違法なコピー又は閲覧に対して、依然として脆弱である。即ち、ＧＰＵがデータを表示装置３０３上に映写するためにビデオカードがＶＲＡＭ内に有効なデータを保存する必要がある限り、データは、常にハッキングの危険性に直面しているのである。本発明による方法及びシステムにおいては、システムのより低いレベルにおいて、このタイプのハッキングを防止するべく、セキュリティ機能が拡張されたディスプレイドライバを提供する。即ち、これらの機能拡張されたドライバは、ビデオカード及び表示メカニズムと関連して一時的に保存されている指定データを保護する技法をサポートしている。
【００２２】
図４は、フレームバッファ内に保存されているデータへの認可されていないアクセスを防止するべく、セキュリティ機能拡張ディスプレイドライバの一例によって使用される一般的な技法を示すブロックダイアグラム例である。この図には、図３に示されているものと同一のコンポーネントとハッキングを試みるメカニズムが示されているが、更なるコンポーネントであるセキュリティ機能拡張ディスプレイドライバ（ＳＥＤＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｄｉｓｐｌａｙ  Ｄｒｉｖｅｒ）が追加されている。このＳＥＤＤは、ＶＲＡＭ４０２内のフレームバッファの指定領域（全体であってもよい）内に保存されているデータに対して難読化技法を適用するべく動作し、この結果、不正なアプリケーション４２２などの認可されていないアプリケーションがフレームバッファ４０２からデータをコピーアウトするべく試みた場合にも、ＳＥＤＤによって難読化されていることから、そのデータは無効なデータとなる。但し、ＳＥＤＤによってフレームバッファ４０２の（１つ又は複数の）各部分が難読化されるため、有効な（即ち、難読化されていない）データを効率よく表示するためには、ＳＥＤＤ４０４は、表示装置４０３上での正しい表示のためにＧＰＵが有効なデータを必要とした際に有効なデータをコピーアウトできるよう、データを一時的に逆難読化する必要がある。即ち、基本的に、ＳＥＤＤ４０４は、フレームバッファのコンテンツの「スケジューラ」プロセスとして機能し、フレームバッファが有効なデータ及び無効なデータを保持する時点、有効／無効なデータをフレームバッファ内において配置する場所、及びフレームバッファ内の領域に配置するべく使用する有効／無効なデータを保存しておく場所を制御するのである。このＳＥＤＤには、図６〜図９を参照して説明するものなどのデータを難読化及び逆難読化するための様々なメカニズムを内蔵可能である。
【００２３】
一実施例においては、ＳＥＤＤは、アプリケーション（又は、その他のコード）が表示装置上の領域を「安全な領域」として定義できるようにする機能をサポートしている。そのシステムに実装されているセキュリティレベルに応じて、ＳＥＤＤは、安全な領域に対して、そのセキュリティレベルを保証可能である。例えば、最高のセキュリティレベルが提供されておれば、ＳＥＤＤは、安全な領域に有効なデータが表示されている際に、フレームバッファのその有効なデータを、いずれの認可されていないプロセスも閲覧又は捕捉できないようにする。このシナリオの場合には、ユーザーは、表示画面上でデータを閲覧できるが、安全な領域は、（スケジューラ及びドライバプロセス以外の）すべてのコードに対して難読化された状態で表示される。
【００２４】
図５は、セキュリティ機能拡張ディスプレイドライバの一例によって提供されるビデオ表示メモリ（ＶＲＡＭ）の指定された安全な部分を示すブロックダイアグラム例である。このＶＲＡＭ５０６は、表示装置５０１上に表示されるフレームバッファの部分（この場合には、フレームバッファ全体）に対応した形態で示されている。この例においては、フレームバッファ５０７は、表示装置５０１上の１０２４ｘ７６８ピクセルの領域として示されている。表示装置５０１上には、２つの指定された安全な領域５０３及び５０４と関連して、ネイティブのデスクトップ表示領域５０２（オペレーティングシステムが制御するユーザーインターフェイス）が示されている。ＶＲＡＭのフレームバッファ５０７内の対応する各部分には、フレームバッファの安全な部分５１１及び５１２と関連してネイティブデスクトップ部分５１０が示されている。その他のコードに対しては、安全な部分５１１及び５１２は難読化された状態で表示される（これらの部分は、斜交平行線によって示されている）。又、ＶＲＡＭ５０６内には、安全なドライバ領域５０８やオーバーレイバッファ５０９などのその他の保存場所も存在している。安全なドライバ領域５０８には、ＳＥＤＤが使用する様々なバッファが保存されるが、この領域は、標準的なＯＳ及びプログラミング手段（即ち、「ｍａｌｌｏｃ」関数）によって割り当てるのではなく、ビデオカードから明示的に要求するものであるため、ＳＥＤＤは、そのアクセスを十分に制御可能である。図には、その他のＶＲＡＭ５０８内における有効なデータ（有効なデータバッファ（ＶＤＢ：Ｖａｌｉｄ  Ｄａｔａ  Ｂｕｆｆｅｒ））と暗号化又はマスク処理された有効なデータ（安全なデータバッファ（ＳＤＢ：Ｓｅｃｕｒｅ  Ｄａｔａ  Ｂｕｆｆｅｒ））を保持する各バッファと、マスクバッファ（ＭＢ（Ｍａｓｋ  Ｂｕｆｆｅｒ））の存在が示されている。
【００２５】
１つ又は複数の安全な領域の定義が完了すると、ＳＥＤＤは、フレームバッファ（ＦＢ）のコンテンツを適切にスケジューリングする。要約すれば、ＳＥＤＤは、ＧＰＵが読み取りを必要とする際には、ディスプレイ上の安全な領域に対応するＦＢの安全な部分のコンテンツが有効なデータとなり（さもなければ、ＧＰＵはその他の手段によって有効なデータを取得する）、その他の（有効且つ実際的な意味においての）すべての時点においては、安全な部分のコンテンツが難読化されたデータになるようにする。尚、ＳＥＤＤに関連して使用される様々な難読化及び逆難読化法について、図６〜図９を参照して説明するが、当業者であれば、これらの方法のその他の様々な変形、及び今後開発されるであろう新しい方法がＳＥＤＤと共に動作可能であって、それらも本発明に属するものと考えられ、以下に説明するものは、あくまでも例として提供されていることを認識するであろう。又、当業者であれば、提示されている個々の「ケース」は、説明の利便のためにそのように編成されているものであって、実際の機能の実装や構成と類似している場合もあり、そうではない場合もあることを理解するであろう。
【００２６】
第１の難読化／逆難読化技法は、「コピーアウト」という名称であり、これは、要約すれば、表示装置上に映写するべく、「コピーアウト」の時点（ＧＰＵがフレームバッファの安全な部分をディスプレイ上の対応する安全な場所にコピーする時点）で有効なデータをＳＥＤＤが提供することに由来している。図６は、「コピーアウト」逆難読化技法に関連して使用される難読化技法を示すブロックダイアグラム例である。この「コピーアウト」法によれば、安全な部分内のデータは無効なものである。従って、決定的な時点で有効なデータをフレームバッファ内に挿入すると共に、その他の時点で無効なデータを回復するという複雑なスケジューリング技法は必ずしも使用されていない（これらの複雑なスケジューリング技法については、図１０〜図１７を参照して後程説明する）。具体的には、有効なデータを表示装置に伝達する際に、フレームバッファ（ＦＢ）から直接コピーアウトするのではなく、その代わりに、好ましくは、映写の前にオーバーレイバッファをフレームバッファと合成するためにビデオカード（ＧＰＵ）が使用する既存の技法を使用し、フレームバッファ内の難読化されたデータをオーバーレイバッファ内のデータと合成する。
【００２７】
考慮を要する２つのケースが存在している。即ち、第１のケースである「ケース１」においては、フレームバッファ６０１は、安全な部分６０５内に無効なデータを格納しており、有効なデータは、別のバッファ６０２内に保存されている。その他のデータ（これらは、有効なデータとして示されている）は、安全な部分には指定されていないフレームバッファの領域内に保存されている。ＳＥＤＤは、ＦＢデータが表示装置６０３にコピーアウトされる際に、バッファ６０２内の有効なデータを使用して安全な部分６０５のコンテンツを「上書き」する。このバッファ６０２は、オーバーレイバッファとフレームバッファのコンテンツの直接的なラスタ演算による合成をサポートしているシステムの場合には、オーバーレイバッファであってよい。更に、このオーバーレイバッファは、（例えば、安全な部分６０５内に保存された、ノイズを有する）有効なデータの暗号化バージョンを格納することができる。後者の場合には、補助的な場所に解読キーを保存する。尚、当業者であれば、オーバーレイバッファ（ビデオカード及びシステムサポートメカニズム用）と呼んではいるが、ＶＲＡＭの別の場所に保存されている有効なデータバッファ（ＶＤＢ）や安全なデータバッファ（ＳＤＢ）などのその他のバッファをラスタ演算による合成に使用できることを認識するであろう。一方、第２のケースである「ケース２」においては、安全な部分６０６内に保存されている無効なデータは、有効なデータの暗号化又はマスク処理されたバージョンであり、この有効なデータのマスク処理されたバージョンを逆マスク処理するのに使用する暗号化キー又はマスクが別のバッファ６０４に保存されている。このバッファ６０４内に保存されているキー又はマスクを使用し、安全な場所６０６内に保存されているデータを解読するか、或いはラスタ演算（ＲＯＰ）を使用し、バッファ６０４に保存されているマスクと安全な部分６０６内に保存されているデータを合成することにより、コピーアウト時点で有効なデータを「生成」するのである。以上の第１及び第２ケース間の主な相違点は、その他のバッファ（６０２又は６０４）内に保存されているデータが、有効なデータであるか、或いは、その他の（キー又はマスク）データであるか、という点にある。当業者であれば、「マスク」という単語を「キー」という用語と相互交換可能に使用する者が存在することを認識するであろう。本明細書においても、これらの用語は相互交換可能である。
【００２８】
図７は、コピーアウト逆難読化技法の変形を示すブロックダイアグラム例である。この技法は、図６の「コピーアウト」技法と組み合わせてフレームバッファの安全な部分を部分的に難読化するのに有用である。具体的には、図７には、表示する準備が整っている安全な部分（本明細書においては、「フレーム」と呼ぶ）を有するＶＲＡＭ７００が示されている。図６に示されているように安全な部分の全体を難読化するのではなく、安全な部分を、例えば、３つのサブ部分にサブ分割し、これらのサブ部分の中の１つを、有効なデータによって上書きするか、或いは、有効なデータを生成するための難読化領域（図６のケース１及びケース２）として取り扱う技法を使用する。図示の例においては、ビデオカードに（ＳＥＤＤを介して）オペレーティングシステムから送信される有効なデータ（表示するフレーム）は、ＶＲＡＭに保存される前に、３つのサブ部分にサブ分割されている。この有効なデータの第１のサブ部分７０４は、フレームバッファの第１のサブ部分７０７に読み込まれ、有効なデータの中間のサブ部分７０５は、オーバーレイバッファ７０２内に保存され、最後のサブ部分７０６は、フレームバッファの第３のサブ部分７０９内に有効なデータとして保存される。そして、フレームバッファの中間のサブ部分７０８内には、（なんらのソースから取得したなんらかのフォーマットの望ましいコンテンツからなる）難読化データを保存する。図７の下端部分には、ＧＰＵがオーバーレイバッファとフレームバッファの各部分の組み合わせを使用して表示装置上に映写する有効なデータを生成する方法が示されている。
【００２９】
第２の難読化／逆難読化法は、「置換と回復」という名称であり、これは、要約すれば、ＳＥＤＤが、表示装置上での映写の直前に（又は、映写中に）（即ち、ＧＰＵがＦＢの安全な部分をディスプレイ上の対応する安全な領域にコピーする時点で）、フレームバッファの安全な部分内に保存されている無効なデータを有効なデータによって置換することによって有効なデータを提供すると共に、ＦＢの安全な部分がＧＰＵによって映写された後に（或いは、その最中に）無効なデータを回復することによって難読化データを提供することに由来している（この逆難読化及び再難読化の正確なタイミングは、１回のデータの処理単位が、ピクセル、走査線、及びブロックのいずれであるかに応じて変化する）。図８は、この「置換と回復」逆難読化法との関連で使用される難読化技法を示すブロックダイアグラム例である。図８において、フレームバッファ８０１は、（当初）、ＦＢの安全な部分８０２内に難読化されたデータを格納している。その他のデータ（これらは、有効なデータとして示されている）は、安全な部分に指定されてはいないフレームバッファの領域内に保存されている。この場合にも、考慮を要する２つのケースが存在しており、それらの相違点は、フレームバッファの安全な部分に対応する有効なデータを有効なデータとして保存するか（例：有効なデータバッファ（ＶＤＢ）内）、或いは、「有効」なデータのフレームバッファ内へのコピーインの前に解読又は逆マスク処理されることになる暗号化又はマスク処理されたデータとして保存するか（例：安全なデータバッファ（ＳＤＢ）内）である。
【００３０】
具体的には、「ケース３」においては、有効なデータは、有効なデータバッファ（ＶＤＢ）８０３内に保存されており、マスクバッファ（ＭＢ）８０４内には、難読化データ（即ち、例えば、ＦＢの安全な部分のコンテンツの難読化に使用されるマスクなどのデータ）が保存されている（これらのバッファは、システムに好都合であり且つ意図するセキュリティを満足する場合に常に保存可能であることを想起されたい）。ＳＥＤＤは、映写のために安全な部分のコンテンツが有効なものになっていることを要する時点以前の適切な時点において、ＶＤＢ８０３から有効なデータをコピーインする。そして、有効なデータが読み取られ、映写のためにディスプレイにコピーアウトされた後に（又は、その最中に）、ＳＥＤＤは、ＦＢの安全な部分８０２を再難読化するべく、マスクバッファ８０４から無効なデータをコピーインする。尚、マスクバッファ８０４から取得するべく示されてはいるが、当業者であれば、この無効なデータは、システム操作、マシン命令、又はビットの組をオンにしたり（すべて黒）ビットをクリアしたり（すべて白）するその他の手段を含む様々な方法によって生成可能であることを認識するであろう。図示されているように、この難読化データを有効なデータのマスク処理バージョンによって形成する場合には、マスクをＭＢ８０４内に保存し、これをＲＯＰを使用して安全な部分８０２内に保存されているコピーイン済みの有効なデータに適用することにより、新規に難読化データを再生成することができる。或いは、この代わりに、難読化データが、ロゴ、広告、又はランダムなビットパターンなどの無効なデータである場合には、マスクバッファ８０２内の無効なデータをそのままフレームバッファにコピーインすればよい。
【００３１】
「ケース４」においては、有効なデータは、安全なデータバッファ（ＳＤＢ）８０５内に、更に安全な形態で保存される（例：暗号化又はマスク処理されたデータとして保存される）。この暗号化又はマスク処理されたデータは、（難読化データであるため）、難読化データによってフレームバッファ内の有効なデータを置換する際に、ＦＢの安全な部分にコピーインする無効なデータとして使用される。そして、マスクバッファ（ＭＢ）８０４内には、ＳＤＢ８０５内に保存されている安全なデータを解読又は逆マスク処理するためにＳＥＤＤが使用するべく、マスク又はキーが保存される。従って、ＳＥＤＤは、安全な部分８０２のコンテンツが映写のために有効なものになっていることを要する時点以前の適切な時点において、ＭＢ８０４のキー又はマスクをＳＤＢ８０５内に保存されている安全なデータに適用（解読又は逆マスク処理）することにより、ＳＤＢ８０５からコピーインする有効なデータを生成し、その結果物（有効なデータ）をＦＢ８０２の安全な部分にコピーアウトする。同様に、安全な部分８０２内に保存されている有効なデータが読み取られ、映写（又は、その他の目的）のためにコピーアウトされた後に、ＳＥＤＤは、ＦＢ８０２の安全な部分を再難読化するべく、ＳＤＢ８０５から無効なデータ（有効なデータの暗号化又はマスク処理された形態）をコピーインする。
【００３２】
第３の難読化／逆難読化アプローチは、「定位置置換」という名称であり、これは、要約すれば、ＳＥＤＤが、表示装置上での映写の直前に（ＧＰＵがＦＢの安全な部分をディスプレイ上の対応する安全な領域にコピーする時点で）、定位置に存在する無効なデータを操作することにより、フレームバッファの安全な部分内の有効なデータを提供し、次いで、この定位置に存在する有効なデータを操作（トグル）して再度無効なデータを生成することにより、無効なデータを提供することに由来している。図９は、この「定位置置換」逆難読化法に関連して使用される難読化法を示すブロックダイアグラム例である。図９において、フレームバッファ９０１は、（当初）、ＦＢの安全な部分９０２内に難読化されたデータを格納している。この難読化データは、有効なデータの暗号化又はマスク処理された形態などの有効なデータの安全なバージョンである。従って、このＦＢの安全な部分９０２内に保存されている難読化データから有効なデータを生成するべく（データを逆難読化するべく）、ＳＥＤＤは、マスクバッファ（ＭＢ）９０４に保存されている適切なキー又はマスクを適用し、データを適宜に解読又は逆マスク処理する。図８を参照して説明した「置換と回復」アプローチと同様に、ＳＥＤＤは、適切な時点で逆難読化又は再難読化を実行し、有効なデータの映写を可能にすると共に、その他のコードが安全な部分８０２に対応する有効なデータにアクセスできないようにする。
【００３３】
図８及び図９に関係して説明したように、ＳＥＤＤは、映写に使用する有効なデータとセキュリティのための無効なデータを調整するべく、フレームバッファの安全な部分内に保存されているデータの逆難読化及び再難読化をスケジューリングする必要がある。図１０は、セキュリティ機能拡張ディスプレイドライバの一例によるフレームバッファコンテンツの難読化及び逆難読化のスケジューリングを示す例示図である。この図１０に示されているグラフは、表示装置上での映写のために電子銃がフレームバッファのデータを走査する（通常、一度に１ラインを走査する）のに要する時間をフレームバッファメモリ内のアドレス位置に関連付けたものである。表示画面上の第１のラインの走査に戻る直前に、ディスプレイの走査の終了点に到達すると、銃から垂直帰線消去信号が送出される。銃が右下隅から左上隅の走査の開始点まで再度移動するのに要する時間を垂直帰線期間と呼ぶ（尚、これは、従来使用されている「点滅」する画面の場合であり、先進的な技術の場合には、この時間は実質的に検出不能である）。銃が特定の速度（通常、単位はヘルツである）で描画するシステムの場合には、この時間を算出することができる。
【００３４】
（０，０）点が画面の開始点（左上隅）であることに留意されたい。現実には、オペレーティングシステム及びその他のコードが使用する表示画面の実際の部分は、画面の合計量よりも小さい。又、ディスプレイに走査するデータソースとして使用されるフレームバッファ内の相対的な開始点も（０，０）と表記するが、これは必ずしもフレームバッファにおいて利用可能な第１のアドレス位置ではないことを理解されたい。
【００３５】
銃は、特定の速度で走査線を映写する（移動する）。ＳＥＤＤは、銃が点Ａに到達する時点を判断する必要がある。この点Ａは、フレームバッファ（メモリ）の指定された安全な部分に対応するディスプレイ上の指定された安全な領域の始まりに銃が到達する（開始点（０，０）でのＶＢ信号の終わりから起算した）時点を表している。この点Ａにおいては、ＦＢの安全な部分内のデータは、有効なデータになっている必要がある。一方、点Ｂは、銃がディスプレイ上の指定された安全な領域の走査の終わりに到達する相対的な時点を表しており、フレームバッファの安全な部分の終わりに対応するものである。ＦＢの安全な部分内のデータは、その他のコード（フレームバッファコンテンツのスケジューリングに使用されるＳＥＤＤコード以外のコード）が有効なデータを閲覧及び捕捉できないように、この点Ｂまでに難読化されたデータになっている必要がある。現実には、表示の開始点から走査を開始するためのＶＢ期間やコードを読み込んでプロセスやスレッドなどを起動する時間を含むシステムの待ち時間と（場合によっては、解読を含む）逆難読化の実行に要する時間のため、ＳＥＤＤは、点Ａにおいて必要とされるものよりも以前の時点において、フレームバッファの指定された安全な部分に保存されているデータの逆難読化処理を開始する必要がある。点Ｃは、この時間Δを表している。当業者であれば、これらの点Ａ、Ｂ、及びＣの値は、システムに大きく依存していることを理解するであろう。点Ａ及びＢについては、ＶＢ信号のポーリングによるか、或いはＶＢイベントをサポートするイベント駆動型システムの場合には、ＶＢイベントを受信し、点Ａ及び点Ｂに到達するのに要する時間を（銃の移動速度から）算出することによって判定可能である。しかしながら、点Ｃ（時間Δ）は、通常、システムの待ち時間と使用する難読化及び逆難読化技法に基づいて経験的に判定する。通常、点Ｃは、次のようになる。
【００３６】
点Ａ（単位：時間）−システムの待ち時間−逆難読化プロセスの時間    （１）
【００３７】
当業者であれば、スケジューリングの観点から点Ｂまでにデータを再難読化するために様々な多くの技法を使用可能であることを認識するであろう。例えば、再難読化プロセスは、一度に、走査線、ピクセル、又はメモリブロックを単位として実行可能である。従って、プロセスは、ある間隔をおいて銃に追随すればよい。一実施例においては、図１７に関係して後述するように、ディスプレイ上に映写するべく安全な領域を読み取った直後に、再難読化を実行している。
【００３８】
又、有効なデータがフレームバッファの安全な部分内に存在している際に、その他のコードがこの有効なデータにアクセスすることを防止するべく、決定的な期間内において、その他のコードをロックアウトするなんらかのプロセス／スレッドのロックメカニズムを採用する必要である。図１２〜図１７に関連して後述する実施例においては、制御を渡す前に、リアルタイムの優先順位が最高のスレッドを使用して有効なデータをコピーインすると共にデータを再難読化している。当業者であれば、その他のメカニズムも使用可能であり、且つシステムが提供するセキュリティレベルは、そのロックメカニズムのロック能力に対応したものになることを認識するであろう。
【００３９】
図１１は、フレームバッファ全体又はその一部の難読化及び逆難読化のタイミングをスケジューリングするのに使用可能な代替難読化／逆難読化法を示すブロックダイアグラム例である。フレームバッファ１１００は、それぞれ難読化されたデータ及び有効なデータを格納した状態にある一連の領域（例：１１０１〜１１０４）であると見なすことができる。ＳＥＤＤがフレームバッファ１１００内を移動するのに伴い、ＳＥＤＤは、３つのグループからなる領域を前進することになり、この結果、ある一時点においては、表示のためにコピーアウトされる有効なデータを格納する領域１１０３、逆難読化プロセスにあるデータを格納する領域１１０２（１１０３の直前）、及び再難読化プロセスにあるデータを格納する領域１１０４（１１０３の直後）が存在することになる。当業者であれば、セキュリティの向上を実現するべく、この場合にもやはりプロセス／スレッドスケジューリングのロックを、例えば、１１０３などの有効なデータが存在する領域について適宜にアサート及び放棄する必要があることを認識するであろう。但し、この場合には、領域の場所やサイズなどのパラメータが変化しているため、外部のコードにとっては、フレームバッファの状態は十分に予測不能なものになっている。
【００４０】
図１２〜図１７は、表示装置上において安全な領域を実装するべく、ＳＥＤＤの各部分がフレームバッファ内のコンテンツのスケジューリングを実現する方法の一実施例を示している。一例として、図１０を参照して説明したスケジューリングのシナリオを使用する。又、以下の説明においては、技法の完全な理解を可能にするべく、データフォーマットやコードシーケンスなどの多数の個別の詳細項目について記述している。しかしながら、当業者であれば、本発明の実施例は、本明細書に記述されているいくつかの特定の詳細項目なしに、或いは、コードフローの順序やコードフローの機能別の編成法に関連する変更などのその他の特定の詳細項目によっても実施可能であることを認識するであろう。更に、特定のパラメータを入力及び出力パラメータとして記述しているが、個々の実装に応じて、より少ない、又はより多くの、或いは別のパラメータを内蔵可能である。
【００４１】
要約すれば、まず、通常、アプリケーション又はオペレーティングシステムレベルにおいて、表示装置上に安全な領域を生成し安全な方法によってその領域内にデータを描画することが要求される。そして、ＳＥＤＤは、この要求を処理し、施行されているスケジューリング計画（例：図１０及び図１１）と、使用する難読化及び逆難読化法に従って、フレームバッファのコンテンツをスケジューリングすることになる。
【００４２】
図１２は、安全な表示領域における描画を要求するアプリケーションレベルのルーチン例のフローチャート例である。このＡＰＩ（”ＣｒｅａｔｅＳｅｃｕｒｅＤｉｓｐｌａｙＲｅｇｉｏｎ”という名称である）は、所望する場所を入力として取得し、有効なデータを保存するためのビデオカード上の安全な領域（例：有効なデータバッファ）の標識、割り当てられた安全なＦＢの場所のインジケータ、及びこの安全な領域のインスタンスの識別に使用する識別子を返す。まず、段階１２０１において、ＡＰＩは、通常、デジタル署名などの当技術分野において周知の標準的な技術を使用し、要求者を認証する。そして、段階１２０２において、ＡＰＩは、要求されている安全な領域が利用可能であるかどうかを判定し、利用可能な場合には、段階１２０４に進み、そうでなければ、エラーを返す。一実施例においては、表示するデータの完全性と正確性を保証するべく、安全な領域は、別の安全な領域内のＦＢの場所とオーバーラップ（干渉）することができない。しかしながら、当業者であれば、その他の実施例も可能であることを認識するであろう。段階１２０３において、ＡＰＩは、要求者に対して様々な戻り値を設定することにより、安全な領域を割り当てる。尚、この代わりに、ドライバ（ＳＥＤＤ）レベルにおいて、この割り当て段階を実行することも可能である。段階１２０４において、ＡＰＩはＳＥＤＤを起動し、この割り当てられた領域上で難読化を開始し、その後に戻る。一実施例においては、このドライバは、標準的なデバイスドライバである「ｉｏｃｔｌ」メカニズムによって起動される（このメカニズムによれば、ドライバは、標準的及び特殊なエントリポイントを設定することができる）。
【００４３】
ドライバを起動すると、複数の段階が実行されるが、これらは、使用しているオペレーティングシステムによって左右され、特に、受信可能なイベント（信号）と利用可能なタスク（プロセス／スレッドなど）のロックメカニズムによって左右される。図１３及び図１４は、それぞれ、システムが垂直帰線（ＶＢ）イベントの登録をサポートしているかどうか、或いは、ポーリング（スピンロック）技法を使用する必要があるかどうか、に基づいた難読化を開始するためのｉｏｃｔｌエントリポイントの実施例である。
【００４４】
図１３は、真のマルチタスクハードウェアイベント駆動型システムにおいて、安全な表示領域の難読化を制御するセキュリティ機能拡張ディスプレイドライバの一例におけるインターフェイスを示すフローチャート例である。要約すれば、このドライバコードは、難読化の開始のために電子銃が位置することを要する場所を判定して、フレームバッファ内のその場所にＶＢエベントを登録し、そのＶＢイベントが受信された際に、安全な部分を逆難読化及び再難読化するリアルタイムスレッドを生成する。具体的には、まず、段階１３０１において、このコードは、「難読化の開始」プロセスに対応するエントリポイントにおいて既にドライバが起動されているかどうかを判定し、起動されている場合には、段階１３０２に進み、さもなければ、段階１３０７に進む。段階１３０２において、ドライバコードは、対応するＡＰＩによってまだ実行されていない場合に、ディスプレイ上の安全な領域に対応するフレームバッファの安全な部分を割り当てる。そして、段階１３０３において、コードは、逆難読化プロセスを開始するためのフレームバッファ内のＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔ位置（時間）と再難読化プロセスを開始するためのフレームバッファ内のＶＢ＿ｅｖｅｎｔ＿ｅｎｄ位置（時間）を判定する（即ち、待ち時間や再難読化などについて調節されたフレームバッファ内の安全な部分の開始位置に対応するＶＢイベントの仕様（前述の等式１を参照されたい）と終わりに対応するＶＢイベントの仕様を判定する）。尚、このＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔとＶＢ＿ｅｖｅｎｔ＿ｅｎｄを判定するプロセスについては、図１６を参照して後程説明する。段階１３０４において、ドライバコードは、ＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔの時点にＶＢイベントを登録した上で、このイベントの通知を待つ。そして、段階１３０５及び１３０６において、ＶＢイベントが通知されると、ドライバコードは、リアルタイム難読化制御スレッドを起動する。そして、このスレッドが戻ると、その他のタスクが表示を描画できるように、その他のタスクに制御を渡し、ドライバは、次の信号又はｉｏｃｔｌまで（即ち、ＶＢイベントが発生するまで）待機する。尚、リアルタイム難読化制御スレッドについては、図１７を参照して説明する。
【００４５】
アプリケーション（又は、オペレーティングシステム）は、実装に応じて、難読化プロセスを明示的に停止させたり（これにより、安全な領域を破壊する）、既に割り当てられている安全な領域内に提示するデータを単純に変更したり、或いは、これら両方の組み合わせを実行することができる。「難読化の停止」ｉｏｃｔｌエントリポイントは、安全な領域の難読化プロセスを停止するためのインターフェイスである。段階１３０７において、受信したｉｏｃｔｌが「難読化の停止」を要求するものであった場合には、段階１３０８において、ドライバコードは、リアルタイムスレッド（現在、動作中である場合）に対して、終了（し、安全な部分を難読化）するように通知する。尚、別個の「ＤｅｓｔｒｏｙＳｅｃｕｒｅＤｉｓｐｌａｙＲｅｇｉｏｎ」ＡＰＩ（図示されてはいない）を使用して「難読化の停止」ｉｏｃｔｌを起動する場合には、このＡＰＩにより、ＶＤＢ及びその他の関連するデータのクリーンアップを実行する必要がある。
【００４６】
ここでは、主に１つの指定された安全な領域用のドライバコードの実装に関連する例について説明しているが、当業者であれば、ルックアップテーブルなどの標準的なプログラミング技法を使用したり、要求者ごとに１つのリアルタイム難読化制御スレッド（ＲＴＯＣスレッド）を起動したり、或いは、これらに類似のメカニズムを使用することにより、これらの技法を複数の要求者及び複数の安全な領域に拡張可能であることを認識するであろう。複数の安全な領域をサポートする場合には、ドライバコードは、それぞれの安全な領域ごとに別個のＶＢイベントを登録し、それぞれについてＲＴＯＣスレッドを生成可能である（別の方法としては、関連するＶＢイベントのリストをＲＴＯＣに送信することもできる）。
【００４７】
図１４は、代替オペレーティングシステム環境において、非イベント駆動型の方法によって安全な表示領域の難読化を制御するためのセキュリティ機能拡張ディスプレイドライバの一例におけるインターフェイスを示すフローチャート例である。要約すれば、このドライバコードは、難読化を開始するために電子銃が位置することを要する場所を判定し、フレームバッファの安全な部分の逆難読化を開始する時期を判定するべくＶＢ信号＋算出されたＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔ時間にスピンロックすると共に、安全な部分を逆難読化及び再難読化するリアルタイムスレッド（図１３において使用されているものと同一のスレッド）を生成する。尚、当業者であれば、より細かな刻みのロック法を使用可能であることを認識するであろう。具体的には、有効なデータをＦＢ内にコピーする前に逆難読化に必要なデータの処理を実行するべく、まず、非リアルタイムスレッドを生成可能である。その後、リアルタイムスレッドは、再難読化プロセスにおいて有効なデータのコピーインを実行するためにのみ生成する（即ち、このリアルタイムスレッドは、図１０におけるほぼ点Ａから点Ｂまでの処理のためにのみ使用される）。
【００４８】
具体的には、段階１４０１において、このドライバコードは、「難読化の開始」プロセスに対応するエントリポイントにおいてドライバが既に起動されているかどうかを判定し、起動されている場合には、段階１４０３に進み、さもなければ、段階１４０４に進む。段階１４０２において、ドライバコードは、対応するＡＰＩによってまだ実行されていない場合に、ディスプレイ上の安全な領域に対応するフレームバッファの安全な部分を割り当てる。そして、段階１４０３において、ドライバコードは、（非リアルタイムの）タイミング及び同期スレッドを起動し、ＶＢ信号がＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔに対応する時点を判定するイベント処理をエミュレートする。次いで、このタイミング及び同期スレッドがリアルタイム難読化制御スレッドを直接起動する（或いは、段階１４０１の後に、これが行われる（この方法は、示されてはいない））。その後、ドライバコードは、次の信号又はｉｏｃｔｌイベントを待つ。そして、段階１４０４において、受信されたｉｏｃｔｌが「難読化の停止」を要求するものであった場合には、段階１４０５において、ドライバコードは、リアルタイムスレッド（現在、動作中である場合）に対して終了（し、安全な部分を難読化）するように通知する（この場合にも、別個のＡＰＩを使用して「難読化の停止」ｉｏｃｔｌを起動する場合には、そのＡＰＩにより、ＶＤＢ及びその他の関連するデータのクリーンアップを実行するべきである）。
【００４９】
図１５は、図１４の代替オペレーティングシステム環境においてフレームバッファコンテンツのスケジューリングの制御に使用する垂直帰線タイミング及び同期スレッドを示すフローチャート例である。このスレッドは、図１４の段階１４０３において呼び出されるものである。前述のように、このスレッドの主な目的は、その他の方法において、ＶＢ信号＋時間Δ（又は、対応するフレームバッファ位置）の特定のタイミング／位置などのハードウェアイベントを通知する能力を有するオペレーティングシステムから提供されるものをシミュレートすることにある。まず、段階１５０１において、このタイミング及び同期スレッド（ＴＳスレッド）は、逆難読化プロセスを開始するためのフレームバッファ内のＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔ位置（時間）と再難読化プロセスを開始するためのフレームバッファ内のＶＢ＿ｅｖｅｎｔ＿ｅｎｄ位置（時間）を判定する（即ち、待ち時間や逆難読化などに対して調節された（前述の等式１を参照されたい）フレームバッファ内の安全な場所の開始位置に対応するＶＢ（この場合には、シミュレートされた）「イベント」の仕様と、終わりに対応するＶＢ「イベント」仕様を判定する）。尚、このＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔとＶＢ＿ｅｖｅｎｔ＿ｅｎｄを判定するプロセスについては、図１６を参照して後程説明する。そして、段階１５０２において、ＴＳスレッドは、判定されたＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔにスピンロックし（ポーリング及び待機し）、これがヒットした場合に、段階１５０３において、リアルタイム難読化制御スレッド（ＲＴＯＣスレッド）を起動する。このスピンロックは、ＶＢ信号をポーリングし、ＶＢ＋ＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔの時点において切れるようにタイマーを設定することにより（又は、その他の等価なメカニズムにより）、実現可能である。尚、リアルタイム難読化制御スレッドについては、図１７を参照して説明する。ＲＴＯＣスレッドが戻ると、その他のタスクが表示に描画できるように、制御はその他のタスクに渡され、ＴＳスレッドは、段階１５０２において、別のスピンロックプロセスを開始し、次のＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔのタイミングをポーリングし待機する。尚、複数の安全な領域をサポートする場合には、ＴＳスレッドは、それぞれの安全な領域ごとに、別個のＶＢイベントをシミュレートすることができる。そして、いずれかの時点において、「終了」信号を受信すると（段階１５０４）、ＴＳスレッドは、段階１５０５において、ＲＴＯＣスレッドに対して終了（し、フレームバッファの安全な部分を再難読化）ように通知する。
【００５０】
図１６は、フレームバッファコンテンツのスケジューリングの制御に使用する垂直帰線とＶＲＡＭアドレス間の相関を判定するためのコードを示すフローチャート例である。前述のように、使用する技法はシステムによって左右されるが、基本的な考え方は、どの時点でＶＢ信号が発生するか（ディスプレイの右下隅において、逆難読化を開始するべきＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔに到達するのにどれだけの時間を所要するか（図１０の点Ａを参照されたい）と、再難読化を開始するべき時点であるＶＢ＿ｅｖｅｎｔ＿ｅｎｄに到達するのにどれだけの時間を所要するか）を判定することである（再難読化の時点は、前述のように、使用する技法（一度に処理する単位が、ピクセル、走査線、又はブロックのいずれであるか）に応じて、もっと早く開始される可能性がある）。まず、段階１６０１において、このコードは、安全な領域の逆難読化を終了する必要がある時点（図１０の点Ａ）を判定する。例えば、この時点は、走査速度（例：８０ｍｈｚ）と走査線の数から走査線当たりの速度を算定し、フレームバッファの安全な部分の始まりに対応する走査線の位置を算出することにより、算出可能である。そして、段階１６０２において、使用される逆難読化に解読（又は、逆マスク処理）が使用されている場合には、コードは、段階１６０３に進み、解読（又は、逆マスク処理）に必要な追加の時間を考慮して、ＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔを算出する。一方、解読（又は、逆マスク処理）を使用しない場合には、段階１６０４において、システムの待ち時間などにより、ＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔを算出する。前述のように、これらの値は、好ましくは、システム初期化プロセスにおいて経験的に判定する必要がある。段階１６０５において、このコードは、安全な部分の終わりまで走査するのに必要とされる時間の長さを算出し、それをＶＢ＿ｅｖｅｎｔ＿ｓｔａｒｔに加算することにより（即ち、これを時間差として追跡することにより）、ＶＢ＿ｅｖｅｎｔ＿ｅｎｄを判定する。
【００５１】
図１７は、有効及び無効なデータをフレームバッファに供給するべく、セキュリティ機能拡張ディスプレイドライバによって使用されるリアルタイム難読化制御スレッドを示すフローチャート例である。ＳＥＤＤは、有効なデータを表示する必要がある場合に、このリアルタイム難読化制御スレッド（ＲＴＯＣスレッド）を使用し、その他のプロセスタスクをロックアウトする。前述のように、オペレーティングシステムとハードウェア環境に応じて、その他の等価なプロセスロック又はリソース（フレームバッファもリソースである）ロックメカニズムを使用可能である。本実施例においては、すべてのその他のプロセス／タスクが有効にロックアウトされるよう、このＲＴＯＣスレッドを、その時点でのシステムにおける優先順位が最高のタスクとすることを意図している。従って、このＲＴＯＣスレッドは、有効なデータが読み込まれ、安全な部分が再難読化されると、すぐに迅速に動作し、制御を渡すことが好ましい。
【００５２】
まず、段階１７０１において、このＲＴＯＣスレッドは、解読／逆マスク処理が必要かどうかを判定し、これが必要な場合には、段階１７０２に進み、必要でない場合には、段階１７０３に進む。無論、段階１７０２においては、ＳＥＤＤが使用する難読化技法に応じて、ＲＴＯＣスレッドは、解読又は逆マスク処理によって有効なデータを生成し、この値にインジケータを設定する（ｐＶａｌｉｄＤａｔａ）。そして、段階１７０３においては、有効なデータが既に利用可能な状態であるため、ＲＴＯＣスレッドは、例えば、ＶＤＢに保存されている有効なデータを使用する。そして、段階１７０４において、ＲＴＯＣスレッドは、対象の有効なデータをフレームバッファの安全な部分にコピーインする。段階１７０５において、ＲＴＯＣスレッドは、ＶＢ＿ｅｖｅｎｔ＿ｅｎｄまで待機し（時間がまだ過ぎていない場合）、次いで、段階１７０６において、使用されている難読化技法により、フレームバッファの安全な部分を再難読化する（例えば、図８〜図９を参照されたい）。そして、ＲＴＯＣスレッドの処理における（不定の）ある時点において、このスレッドは、難読化を終了させる信号を受信する。この場合に、ＲＴＯＣは、好ましくは、段階１７０６を実行し、フレームバッファの安全な部分が難読化データを格納するようにする。
【００５３】
（キーボード、マウス、及びその他のポインティング装置入力の安全な保存と表示）
図１８は、入力データのハッキングを実行する方法を示すブロックダイアグラム例である。この図は、例えば、キーボード、マウス、及びその他のポインティング装置入力などのあらゆるタイプの入力に対応することを意味している。図１８において、入力が入力装置１８０１から適切なオペレーティングシステムのデバイスドライバ１８０２に送信されると、その入力は、適切な入力「スタック」（入力を処理及び伝達するべく設計されたコード）によって処理される。この入力スタックによる処理の一環として、要求元のアプリケーションに入力を送信するべく、通常、アプリケーション入力ライブラリ１８０３が提供する入力ルーチンに、入力は転送される。この間に、入力データは、データを取得するべくデータを監視すると共に／又はデータ入力内のパターンを探している探知型のアプリケーションに対して脆弱である。
【００５４】
図１９は、入力データに対する認可されていないアクセスを防止するべく、セキュリティ機能が拡張されたマウスドライバなどのセキュリティ機能拡張入力ドライバによって使用される一般的な技法を示すブロックダイアグラム例である。この図には、図１８に示されているものと同一のコンポーネントが示されているが、更なるコンポーネントであるセキュリティ機能拡張マウスドライバ（ＳＥＭＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ｍｏｕｓｅ  Ｄｒｉｖｅｒ）１９０５を有している。このＳＥＭＤは、安全なドライバであり、安全な入力の提供を所望するアプリケーション又はその他のコード１９０６によって起動される。ＳＥＭＤは、好ましくは、オペレーティングシステムドライバを含むその他のコンポーネントが入力を捕捉するチャンスを獲得する前に、ハードウェアから入力を最初にフックするべく先頭にインストールする。尚、ドライバを先頭のドライバとしてインストールする方法とドライバがその位置に安全に留まるようにする監視メカニズムの詳細については、図２３及び関連する本文を参照して後程説明する。要約すれば、ＳＥＭＤ（又はその他の安全な入力ドライバ）は、入力装置からデータを捕捉し、それが、安全な入力を要求した認可されたアプリケーション（アプリケーション１９０６など）によって要求されたものであるかどうかを判定し、そうである場合には、その入力を安全な方法により、認可されているアプリケーションに送信し、さもなければ、その入力を標準的なオペレーティングシステムのドライバに転送する。
【００５５】
図２０は、入力データに対する認可されていないアクセスを防止するべく、セキュリティ機能が拡張された入力ドライバの一例によって使用される難読化技法を示すフローチャート例である。図２０において、例えば、マウス又はキーボードドライバなどの入力ドライバは、（通常、「読み取り」要求の結果として、アプリケーション又はオペレーティングシステムの要求に基づいて）、次の入力イベントまで待機する。そして、段階２００１において、そのようなイベントが受信されると、ドライバは、段階２００２に進み、「セキュリティにおいて認可された」要求者が読み取り命令を発行しているかどうかを判定し、そうである場合には、段階２００４に進み、さもなければ、段階２００３に進む。本明細書においては、この「セキュリティにおいて認可された要求者」とは、好ましくは、安全な入力が望ましいことを安全な入力ドライバに対して明確に通知したアプリケーション又はその他のコードである。要求者は、まず、安全な入力ドライバに登録し、それ以降は、標準的な認証メカニズムを使用して、その要求者を認証することができる。段階２００３において、このドライバコードは、その認可されている要求者が（更なるセキュリティ対策を生成するべく）難読化された入力が望ましい旨を指定しているかどうかを判定し、これを指定している場合には、段階２００６に進み、指定していなければ、段階２００５に進む。段階２００５において、セキュリティにおいて認可されている要求者に入力を転送するべく、安全な入力を処理する安全なドライバ又はライブラリによって提供される入力「翻訳」スタックに、入力が渡される。この入力翻訳スタックは、通常、例えば、キーボード入力の場合には、キーコードから文字を判定する。一方、難読化が要求されている場合には、段階２００６において、入力ドライバは、実装又は指定されている難読化技法を使用し、入力コードを難読化する。入力コードは、例えば、表示出力の難読化とかなり類似した方法により、暗号化、並びにノイズやパターンなどのマスクとブール演算によって合成可能である。そして、段階２００７において、安全な入力ドライバコードは、この難読化された入力コードを入力翻訳スタックに伝達する（このスタックは、入力コードの難読化に使用されたものとは逆の技法を使用して入力コードを逆難読化するべくコーディングされている）。
【００５６】
（オーディオコンテンツの安全な保存と表示）
図２１は、オーディオデータのハッキングを実行する方法を示すブロックダイアグラム例である。スピーカ２１０４上で再生するべく、オーディオがオペレーティングシステムのメモリ２１０１からサウンドカード２１０３上のメモリに送信された際に、サウンドカードのメモリ２１０３上に保存されている間、オーディオデータは、探知型のアプリケーション２１０６などの悪質なコードに対して脆弱である。又、ストリーミングオーディオを取り扱うアプリケーションの場合には、オペレーティングシステム（又は、その他のアプリケーションライブラリ）は、オーディオを一時的にオーディオバッファ２１０２内にバッファ処理する。このバッファ処理されたオーディオデータ２０２も、認可されていない探知型のアプリケーション２２０５などによるハッキングに対して脆弱である。
【００５７】
図２２は、オーディオデータに対する認可されていないアクセスを防止するべく、セキュリティ機能が拡張されたオーディオドライバの一例によって使用される難読化技法を示すフローチャート例である。この図には、図２１と同一のコンポーネントが示されているが、更なるコンポーネントであるセキュリティ機能拡張オーディオドライバ（ＳＥＡＤ：Ｓｅｃｕｒｉｔｙ  Ｅｎｈａｎｃｅｄ  Ａｕｄｉｏ  Ｄｒｉｖｅｒ）２２０７を有している。このＳＥＡＤは、安全なドライバであり、安全なオーディオ出力を所望する認可されたアプリケーション又はその他のコード２２０８によって起動される。
【００５８】
一実施例において、ＳＥＡＤは、ＳＥＡＤの固有の方法によってオーディオのシーケンシングに使用するバッファを選択することにより、オーディオバッファ２２０２のプールのコンテンツを難読化する。例えば、数字のランダム又は擬似ランダムシーケンスを使用し、デジタル形態のオーディオ信号の蓄積に使用するバッファを選択することができる。そして、バッファの利用方法を追跡する試みを混乱させるべく、使用されていないバッファ内に正解以外の選択肢情報を配置する。オーディオをデジタル形態で次のソフトウェアコンポーネントに伝達した際に、オーディオを難読化するＳＥＡＤの使用がそのコンポーネントに対して認可されておれば、オーディオ情報は、適切なソースバッファを判定するための同一の数字のランダム又は擬似ランダムなシーケンスを使用してオーディオバッファ２２０２から抽出される。そして、そのオーディオが不要になると、バッファは、利用可能なバッファプールに戻る（或いは、任意選択により、その中に正解以外の選択肢情報が配置される）。
【００５９】
ＳＥＡＤは、例えば、オーディオに対してなんらかの操作「Ｆ」を実行してデータの暗号化或いはなんらかの符号化又はマスク処理を実行することにより、カードに送信されたオーディオデータを難読化するべく実装することも可能である（この操作「Ｆ」は、サウンドカードによって左右され、その他の形態の暗号化と同様に、対応する解読のための逆操作を有している）。アナログオーディオ信号に変換するべく、オーディオをサウンドカードに提示する際に、ＳＥＡＤは、サウンドカード上に存在する付加的なソフトウェア（例：特定のサウンドカード上に存在するＤＳＰ）に対して逆難読化を実行するように指示する。これは、特定のサウンドカード上において、エコライザ及びサウンドプロセッサコードを生成し、リバーブ、シンフォニーホール、又はその他の特殊効果に類似した方法によって逆難読化コードを処理することにより、実現可能である。
【００６０】
更に、ＳＥＡＤがオーディオ情報のストリームを受信したり、或いは、受信元のセキュリティにおいて認可されたソフトウェアが、オーディオ情報のストリームをＳＥＡＤに転送する場合には、ＳＥＡＤが安全な方法によってオーディオを解読できるように、そのデジタルオーディオ情報のデジタル表現を安全なドライバに固有の方法によって事前に難読化又は暗号化することが可能である。例えば、そのシステムが使用可能な形態に、のフォーマットを符号化又は符号変換する。オーディオストリームのソースは、ＭＰ３ファイル又はストリーム、ストリーミングサーバー、或いはその他の符号化されたデジタルオーディオソースなどの従来のソースから導出される。これらの符号化されたオーディオソースの解読方法に関する知識を有する受信元の安全なソフトウェアは、オーディオのプレーンな「テキスト」がデジタルの形態でシステム内に存在することのないように、オーディオストリームをＳＥＡＤの内部難読化フォーマットにレンダリングする。
【００６１】
（ＳＥＤの先頭へのインストールと見張り番による監視）
ドライバが入力及び／又は出力にアクセス可能な時点を制御する機能は、特にセキュリティ機能拡張ドライバにとって重要である。それぞれのオペレーティングシステムは、そのオペレーティングシステムごとに、その他のすべてのドライバよりも前に（或いは、そのタイプのすべてのドライバ（例：ハードディスクドライバ）よりも前に）、特定のドライバがアクセスできるようにするメカニズムを提供している。Ｗｉｎｄｏｗｓ９ｘオペレーティングシステムに類似のオペレーティングシステムにおいては、イベント処理は「チェーン」で実行されており、ドライバは、それらがいつシステム内に読み込まれるかに応じて、チェーンの様々な部分内にインストールされる。
【００６２】
例えば、Ｗｉｎｄｏｗｓ９ｘオペレーティングシステムの入力イベント処理は、通常、次のように進行する。
【００６３】
・ハードウェアイベントが発生する（マウス又はキーボードの動作（マウスの移動又はキーの押下））。
【００６４】
・ＶｘＤスタイルの（仮想）デバイスドライバ（又は、システムレベルのドライバ）が、ハードウェアからの入力を検出して読み取り、イベントをハードウェア仮想化レイヤに送信する。
【００６５】
・仮想化レイヤは、このドライバイベント入力を、そのイベントに対して登録されているデバイスハンドラのリストに順次送信する（この際に、それぞれのデバイスハンドラは、データを処理するか、或いは処理することなく返して、チェーンの次のデバイスハンドラがデータを処理できるようにする）。
【００６６】
・ドライバイベントは、ハンドラによって処理されるか、或いは、それに対して登録されているアプリケーションに送信される。
【００６７】
本発明による技法をＷｉｎｄｏｗｓ９ｘオペレーティングシステムと関連して使用する場合には、関連するドライバをそれぞれの入力装置用のハンドラチェーンにおける最上位（最初）のイベントハンドラとしてインストールすることにより、（特に）入力ＳＥＤを最適且つ安全なものすることができる。更に、後述するように、定期的にハンドラの位置を検証するべく、見張り番プロセスを起動する。図２３は、Ｗｉｎｄｏｗｓ９ｘオペレーティングシステム環境及び関連する監視プロセスにおいて、ＳＥＤを先頭のドライバとしてインストールするブロックダイアグラム例である。
【００６８】
ＷｉｎｄｏｗｓＮＴファミリーのオペレーティングシステムの場合には、入力イベント処理は別のモデルに準拠しており、例えば、これらのシステムにおける入力イベント処理は、通常、次のように進行する。
【００６９】
・ハードウェア割込みサービスルーチン（ＩＳＲ）が迅速に動作してデータを収集し、ＩＲＰ  Ｉ／Ｏ要求パケットを生成する。
【００７０】
・ＩＳＲは、ハードウェアインターフェイスと装置に関する知識を格納しているミニポートに、これを供給する。
【００７１】
・データが抽出され、ポートドライバに伝達される（ポートドライバは、通常、Ｉ／Ｏドライバ当たり１つ存在している）。ポートドライバがプロセスを更に抽象化し、ＩＲＰに対して更なる処理を実行する。
【００７２】
・次いで、データがクラスドライバに伝達される。これは、例えば、マウスクラス及びキーボードクラスである。これらは、Ｗｉｎｄｏｗｓオペレーティングシステムの標準的なマウス及びキーボードクラスである。
【００７３】
・クラスドライバの上位に位置しているのは、フィルタドライバであり、フィルタドライバは、入力を最初に受信し、それを既存のシステムに伝達するかどうかを判定可能である。
【００７４】
例えば、ＭｉｃｒｏｓｏｆｔのＷｉｎｄｏｗｓ  ＯＳの場合には、カーネルドライバが、自分自身をレジストリの上位フィルタキー内に追加し、キーイベントの受信を所望することを表すことができる。
【００７５】
以上のＮＴ  ＯＳのＩ／Ｏの読み込みと処理に関するシーケンスを使用し、一実施例においては、ＳＥＤをクラスドライバとして生成することができる。この場合、ＳＥＤは、レジストリの上位フィルタ内に値を配置し、自分自身が入力フォーカスをＯＳシステム内において有していることを示す。この実施例においては、ＳＥＤは、クラスドライバから直接Ｉ／Ｏ要求パケットを受信するフィルタドライバの最初のものになると共に、自身がレジストリにおける最初のフィルタになるようにする必要がある。
【００７６】
Ｗｉｎｄｏｗｓ９ｘとＮＴにおいてセキュリティを監視する見張り番サービスを実装する概念は、類似しているが、実装は、それぞれのオペレーティングシステムのドライバモデルに準拠するべく異なるものになる。ドライバのイベントデータをチェック及び／又は処理する最初の機能としてＳＥＤのフィルタリング（及び、潜在的には、難読化）機能を挿入することにより、ＳＥＤは、マウス、キーボード、及びその他の入力装置の有効性とセキュリティを確保することができる（安全な環境用にデータを処理するか、或いは、通常のメカニズムによってデータをオペレーティングシステムに返すことができる）。当業者であれば、ドライバモデルが既知であり、且つＳＥＤフィルタリング機能が適切に挿入可能であるならば、その他のオペレーティングシステム環境においても、類似の技法を開発可能であることを認識するであろう。
【００７７】
又、当業者であれば、これらの技法を使用する際には、マウス及びキーボード装置は区別されないことを認識するであろう。これらのデバイスドライバは、本明細書の観点では、いずれも類似の方法で動作する。又、これらの技術は、トラックボール、デジタルタブレット、コードレスキーボード、コードレスマウス、数字キーパッド、タッチパッド、又はその他のポインタ又はキーに基づいた入力装置においても実装可能である。
【００７８】
Ｗｉｎｄｏｗｓ９ｘの一実装例においては、タイマとして機能するＳＥＤセキュリティサービスがインストールされる。このＳＥＤセキュリティサービスは、起動の際に、標準的なメカニズムであるＩＯＣＴＬ（）を使用し、ＳＥＤドライバに対する通信路を確立する。このＩＯＣＴＬ経路を介し、ＳＥＤセキュリティサービスは、ＳＥＤに対して、ＳＥＤがマウス及びキーボードのイベント処理ハンドラチェーンにおける第１の（最上位の）デバイスハンドラの位置に存在していることを検証するように通知する。そして、そのようになっていない場合には、ＳＥＤは、ＳＥＤハンドラを第１の位置に再度登録するべく試みる。そして、この試みに失敗した場合には、エラーメッセージが登録され、この段階で、そのシステムは、難読化目的には安全ではないと見なされることになる。
【００７９】
安全ではない環境が検出された場合には、イベント（例：アプリケーション固有のイベント）がその環境内を伝播し、すべての関連するアプリケーションに対して通知する。例えば、２０００年１１月２８日付けで出願された「表示面上の相補型ユーザーインターフェイスを制御する方法及びシステム（Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｃｏｎｔｒｏｌｌｉｎｇ  ａ  ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  ｏｎ  ａ  Ｄｉｓｐｌａｙ  Ｓｕｒｆａｃｅ）」という名称の米国特許出願公開第０９／７２６，２０２号明細書に記述されているｘＳｉｄｅｓ環境においては、ｘＳｉｄｅｓイベントが伝播し、安全な入力機能に依存しているすべてのｘＳｉｄｅｓアプリケーションに対して、それらの装置（例：マウス及びキーボード装置）が、もはや安全とは見なされないことを通知する。このセキュリティの変化については、好ましくは、（「ビデオコンテンツの安全な保存と表示」という名称の節において前述したように）、安全な領域に表示されるアイコンにより、ユーザーに対しても伝達される。この目的に使用する一般的なビットマップは、施錠された又は施錠されていない南京錠である。
【００８０】
セキュリティサービスによる連続的なセキュリティの検証チェックが実行されるように、ＳＥＤセキュリティサービスに対する見張り番として機能させるべく、ＳＥＤセキュリティ見張り番という名称の第２のサービスを起動する。このセキュリティ見張り番の目的は、セキュリティサービスに対して双方向の通信経路を確立することにある（この経路により、２つのサービス間でメッセージが送受信される）。これらのメッセージは、「わたしは生存している」又はピングメカニズムとして機能し、それぞれのサービスに対して、もう一方のサービスが正常に機能していることを通知する。任意の期間内に、１つのサービスが、もう一方のサービスからメッセージを受信できない場合には、受信側のサービスは、もう一方のサービスを再起動させるべく試みることになる。
【００８１】
そして、受信側のサービスが、もう一方のサービスを再起動できない場合には、そのシステムは、難読化目的には安全ではないと見なされ、前述のものと同様のセキュリティサービスに関する通知がユーザーに対して行われる。
【００８２】
Ｗｉｎｄｏｗｓ  ＮＴファミリーのオペレーティングシステム用のセキュリティサービスも、基本的には、Ｗｉｎｄｏｗｓ９ｘバージョン用のものと同一である。但し、１つの相違点は、検証する値が、ハンドラチェーンではなく、入力装置（例：マウスやキーボード）用のＩ／Ｏ完了構造におけるコールバック関数ポインタであるという点である。これは、関数ポインタの比較によって実行される。ＳＥＤコールバック関数が、Ｉ／Ｏ完了構造においてポイントされているコールバック関数でない場合には、それを置換する試みが実行されることになる。そして、コールバック関数の関数ポインタをＳＥＤのバージョンに変更できない場合には、好ましくは、このＷｉｎｄｏｗｓ  ＮＴの技法においても、Ｗｉｎｄｏｗｓ９ｘのケースで説明した失敗モード（即ち、安全／非安全の通知）を利用可能である。
【００８３】
基本的なＳＥＤセキュリティ見張り番サービスは、Ｗｉｎｄｏｗｓ９ｘ環境におけると同様に、Ｗｉｎｄｏｗｓ  ＮＴ環境においても動作する。
【００８４】
フックの状態を検証すると共に、ＳＥＤが変更されていないことを検証するべく、更なる見張り番サービス（又は、既存のサービスの拡張）を利用可能である。ＮＴの一実装例においては、２つの異なるシステムレジストリエントリ内に対象を登録する２つの別個のプロセスを含んでいる。そして、それらが同期していない場合に、この見張り番サービスは、それを通知するか、或いは、正しくないほうのレジストリエントリを自動的に修復する。これら２つのレジストリエントリは、レジストリエントリが変更されていないことを見張り番サービスが検証するのに十分な状態を有している。これは、例えば、アプリケーションのチェックサム、証明書、又は署名を、その署名と別の既知の値のＸＯＲ、或いは最初のものとは別のメカニズムによって導出された署名と共に、見張り番自体のレジストリエントリ内に保存することによって実現する。見張り番は、レジストリエントリが変更された際に起動し、それらのエントリがその時点で正しいかどうかを検証する。そして、正しくない場合には、正しい値を判定し、それらを置換する。（１）レジストリ内に保存されている署名、（２）見張り番自体、（３）署名を導出したソフトウェア、及び（４）見張り番自体を検証するソフトウェアのすべてが有効に見えるように変更される可能性は低いため、このメカニズムのみを（或いは、その他の対策と組み合わせて）使用し、侵入やソフトウェアコードの変更を判定可能である。
【００８５】
（ユーザーインターフェイスにおけるセキュリティの表示）
前述のように、難読化法とセキュリティ機能拡張ドライバを補完するべく、本発明の方法及びシステムにおいては、システム内のセキュリティの様々なレベルを表示する様々な技法が提供される。ウェブブラウザのようなアプリケーションなどの既存のシステムでは、セキュリティ又はセキュリティレベルに関する基本的なグラフィク表示が提供されている。例えば、ＭｉｃｒｏｓｏｆｔのＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒは、ブラウザ下端のステータスバー領域に位置する「南京錠」の表示を使用し、現在、ウェブサイトが、安全な又は安全ではない通信プロトコル（通常、ＳＳＬやＨＴＴＰＳなどの技術形態である）を使用していることをユーザーに対して示している。図２４は、既存のソフトウェアアプリケーションにおいて使用されているセキュリティを通知する南京錠を示す画面表示例である。
【００８６】
本発明のセキュリティ機能拡張ドライバの場合には、表示されたデスクトップ、ウィンドウ、又は代替表示領域などの表示装置上の安全な領域が、表示カーソルを使用し、ユーザーに対してその領域のセキュリティレベルを直感的に通知することができるメカニズムを提供している。具体的には、領域に関連付けられたセキュリティレベルの色値を表示カーソルに継承させる属性値を、それぞれの安全な領域に関連付けており、自動的に（或いは、ユーザーによって）、カーソルが１つの表示領域から、より高い又はより低いセキュリティレベルを有する別の表示領域に移動すると、カーソルの色及び／又は表現が適切な値に変化する。例えば、ユーザーが、安全ではないＷｉｎｄｏｗｓデスクトップ表示領域内から、ｘＳｉｄｅｓ社（ｘＳｉｄｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ）が開発したものなどの代替表示技術によって生成された代替表示領域内にカーソルを移動させると、カーソルの色が白から赤に変わったり、或いは標準的なＷｉｎｄｏｗｓの矢印カーソルから金色の鍵の表示に変化するのである。
【００８７】
同様に、この表示メカニズムは、それぞれが異なる固有の機能又はセキュリティ値を有する複数の安全な（又は、安全ではない）領域が表示装置上に表示された環境においても使用可能である。それぞれの領域に関連付けられているセキュリティ値については、標準的なＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＡＰＩルーチンであるＳｅｔＣｕｒｓｏｒ（）などのメカニズムを使用して問い合わせることができる。このＳｅｔＣｕｒｓｏｒ（）ルーチンの戻り値には、アプリケーションが特定の領域に関連付けられているセキュリティレベルを識別するのに必要な情報が格納される。
【００８８】
この表示メカニズムは、セキュリティ表示の手段として、カーソルを使用することに限定されるものではない。当業者であれば、デスクトップ表示、又はデスクトップ表示の内外の領域におけるその他のコンポーネントにより、ユーザーに対してセキュリティレベル及び機能を通知可能であることを認識するであろう。安全なデスクトップを読み込む場合には、その安全なデスクトップのウィンドウにおける視覚的又は聴覚的な変化によってエンドユーザーがそのセキュリティレベルを識別可能な属性をそのデスクトップ内に格納することができる。例えば、安全なデスクトップは、それに関連付けられたデスクトップ表示の隅に配置されたロック又はキーを有することができる。又、別のセキュリティレベルに関連付けられた場合に、デスクトップに対して、異なる諧調度の色を付与することもできよう。ウィンドウ、代替表示、又は任意の安全な領域は、セキュリティレベルに関連付けられた有色の境界線を含むこともできる。或いは、ウィンドウ、代替表示、又は安全な領域のセキュリティレベルに応じて、例えば、取り囲んでいる境界の幅やパターンを変化させ、鎖のような外観にすることもできる。又、任意選択により、例えば、黒と黄色の斜めのストライプバーなどの追加の装飾を領域の上部や近傍、又はその内部に配置するなど、ウィンドウ、表示、又は領域に対する変更や追加に関するその他の実装も使用可能である。更なる選択肢は、スクロールバーなどの標準的なユーザーインターフェイス要素の装飾の外観を、別の形状、パターン、色、又はこれらの組み合わせに変更することである。これらに加えて（或いは、以上のバリエーションの組み合わせにおいて）、特定のウィンドウ又は領域に関連付けられているソフトウェアが提供するセキュリティレベルを示すべく、タイトルバー、キャプション、又はナビゲーションアイコンに対する変更も使用可能である。これらの変更は、タイトルバーのキャプションを別の色で描画したり、ウィンドウのナビゲーションアイコン上に数値又はその他のシンボルを表示するのと同じくらいに簡単である。図２５は、セキュリティレベルを判定するためのカーソルの使用と、セキュリティの表示に使用されるウィンドウ上のその他の表現を示す画面表示例である。当業者であれば、その他の類似の技法を内蔵可能であることを認識するであろう。
【００８９】
セキュリティがソフトウェアの複数の「エージェンシー」又はインスタンスによって提供又は保証される場合には、そのセキュリティ保証のソースを知ることは、ユーザーにとって有益である。システムは、タイトルバー内、タイトルバーの上、ステータスバー内、又はその他の比較的固定された場所に、セキュリティの提供者を示す持続的なテキストを提供するか、或いは、ボップアップ表示、「ツールチップ」表示、或いは表示装置のウィンドウ又は安全な領域のその他の領域における一時的なテキスト表示などの持続的ではない方法によって提供者を示しつつ、前述のメカニズムのいずれかにより、セキュリティレベルを示すことが好ましい。尚、この一時的なテキスト表示は、定期的に、或いは、セキュリティ状態内への進入やテキスト又はマウスカーソルのセキュリティアイコン上への移動などのなんらかの外部イベントにより、トリガすることができる。
【００９０】
以上のことから、本明細書においては、例示を目的として本発明の特定の実施例について説明しているが、本発明の精神と範囲を逸脱することなく、様々な変更が可能であることが理解されよう。例えば、当業者であれば、これらの安全なデータの入出力の方法及びシステムは、本明細書において明示的に説明されているもの以外のその他のタイプの記憶装置及び入力装置、並びにその他のタイプのデータ（ストリーム化されているもの、及びそうではないもの）にも適用可能であることを認識するであろう。例えば、フレームバッファ内のデータの難読化に使用する難読化法は、その他のタイプの記憶装置の難読化にも拡張可能である。更には、本明細書に記載されているセキュリティ機能拡張ドライバに関連して説明したものに類似の技法を使用してこれらの実施例を拡張し、それらの記憶装置にコンテンツのスケジューリングを提供することもできる。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施例によって提供されるセキュリティ機能拡張ドライバを含む標準的なコンピュータアーキテクチャの抽象化レイヤを示すブロックダイアグラム例である。
【図２】通常のコンピュータシステムにおける表示装置に対するデータの転送方法を示するブロックダイアグラム例である。
【図３】ディスプレイのハッキングを実行する方法を示するブロックダイアグラム例である。
【図４】フレームバッファ内に保存されているデータに対する認可されていないアクセスを防止するべく、セキュリティ機能拡張ディスプレイドライバの一例によって使用される一般的な技法のブロックダイアグラム例である。
【図５】セキュリティ機能拡張ディスプレイドライバの一例によって提供されるビデオ表示メモリ（ＶＲＡＭ）の指定された安全な部分を示すブロックダイアグラム例である。
【図６】「コピーアウト」逆難読化技法との関連で使用される難読化技法を示すブロックダイアグラム例である。
【図７】コピーアウト逆難読化技法の変形を示すブロックダイアグラム例である。
【図８】「置換と回復」逆難読化技法との関連で使用される難読化技法を示すブロックダイアグラム例である。
【図９】「定位置置換」逆難読化技法との関連で使用される難読化技法を示すブロックダイアグラム例である。
【図１０】セキュリティ機能拡張ディスプレイドライバの一例によるフレームバッファコンテンツの難読化及び逆難読化のスケジューリングを示す例示図である。
【図１１】フレームバッファ全体の難読化及び逆難読化のタイミングをスケジューリングするのに使用可能な代替難読化／逆難読化法を示すブロックダイアグラム例である。
【図１２】安全な表示領域における描画を要求するアプリケーションレベルのルーチンの一例を示すフローチャート例である。
【図１３】真のマルチタスクハードウェアイベント駆動型システムにおいて、安全な表示領域の難読化を制御するセキュリティ機能拡張ディスプレイドライバの一例におけるインターフェイスを示すフローチャート例である。
【図１４】代替オペレーティングシステム環境において、非イベント駆動型の方法による安全な表示領域の難読化を制御するセキュリティ機能拡張ディスプレイドライバの一例におけるインターフェイスを示すフローチャート例である。
【図１５】図１４の代替オペレーティングシステム環境におけるフレームバッファコンテンツのスケジューリングの制御に使用する垂直帰線タイミング及び同期スレッドを示すフローチャート例である。
【図１６】フレームバッファコンテンツのスケジューリングの制御に使用する垂直帰線とＶＲＡＭアドレス間の相関を判定するコードを示すフローチャート例である。
【図１７】有効及び無効なデータをフレームバッファに供給するセキュリティ機能拡張ディスプレイドライバが使用するリアルタイム難読化制御スレッドを示すフローチャート例である。
【図１８】入力データのハッキングを実行する方法を示すブロックダイアグラム例である。
【図１９】入力データに対する認可されていないアクセスを防止するべく、セキュリティ機能拡張マウスドライバなどのセキュリティ機能が拡張された入力ドライバによって使用される一般的な技法を示すブロックダイアグラム例である。
【図２０】入力データに対する認可されていないアクセスを防止するセキュリティ機能拡張キーボードドライバの一例によって使用される難読化技法を示すフローチャート例である。
【図２１】オーディオデータのハッキングを実行する方法を示すブロックダイアグラム例である。
【図２２】オーディオデータに対する認可されていないアクセスを防止するセキュリティ機能拡張オーディオドライバの一例によって使用される難読化技法を示すフローチャート例である。
【図２３】Ｗｉｎｄｏｗｓ９ｘオペレーティングシステム環境及び関連する監視プロセスにおける先頭ドライバとしてのセキュリティ機能拡張ドライバのインストールを示すブロックダイアグラム例である。
【図２４】既存のソフトウェアアプリケーションにおいて使用されているセキュリティを表示する南京錠を示す画面表示例である。
【図２５】セキュリティレベルを判定するためのカーソルの使用法とセキュリティの表示に使用するウィンドウ上のその他の表示を示す画面表示例である。
【図１】
2005504365.tif 000003
【図２】
2005504365.tif 000004
【図３】
2005504365.tif 000005
【図４】
2005504365.tif 000006
【図５】
2005504365.tif 000007
【図６】
2005504365.tif 000008
【図７】
2005504365.tif 000009
【図８】
2005504365.tif 000010
【図９】
2005504365.tif 000011
【図１０】
2005504365.tif 000012
【図１１】
2005504365.tif 000013
【図１２】
2005504365.tif 000014
【図１３】
2005504365.tif 000015
【図１４】
2005504365.tif 000016
【図１５】
2005504365.tif 000017
【図１６】
2005504365.tif 000018
【図１７】
2005504365.tif 000019
【図１８】
2005504365.tif 000020
【図１９】
2005504365.tif 000021
【図２０】
2005504365.tif 000022
【図２１】
2005504365.tif 000023
【図２２】
2005504365.tif 000024
【図２３】
2005504365.tif 000025
【国際公開パンフレット】
2005504365.tif 000026
2005504365.tif 000027
2005504365.tif 000028
2005504365.tif 000029
2005504365.tif 000030
2005504365.tif 000031
2005504365.tif 000032
2005504365.tif 000033
2005504365.tif 000034
2005504365.tif 000035
2005504365.tif 000036
2005504365.tif 000037
2005504365.tif 000038
2005504365.tif 000039
2005504365.tif 000040
2005504365.tif 000041
2005504365.tif 000042
2005504365.tif 000043
2005504365.tif 000044
2005504365.tif 000045
2005504365.tif 000046
2005504365.tif 000047
2005504365.tif 000048
2005504365.tif 000049
2005504365.tif 000050
2005504365.tif 000051
2005504365.tif 000052
2005504365.tif 000053
2005504365.tif 000054
2005504365.tif 000055
2005504365.tif 000056
2005504365.tif 000057
2005504365.tif 000058
2005504365.tif 000059
2005504365.tif 000060
2005504365.tif 000061
2005504365.tif 000062
2005504365.tif 000063
2005504365.tif 000064
2005504365.tif 000065
2005504365.tif 000066
2005504365.tif 000067
2005504365.tif 000068
2005504365.tif 000069
2005504365.tif 000070
2005504365.tif 000071
2005504365.tif 000072
2005504365.tif 000073
2005504365.tif 000074
2005504365.tif 000075
2005504365.tif 000076
2005504365.tif 000077
2005504365.tif 000078
2005504365.tif 000079
2005504365.tif 000080
2005504365.tif 000081
2005504365.tif 000082
2005504365.tif 000083
2005504365.tif 000084
2005504365.tif 000085
2005504365.tif 000086
2005504365.tif 000087
2005504365.tif 000088
2005504365.tif 000089
2005504365.tif 000090
2005504365.tif 000091
2005504365.tif 000092
2005504365.tif 000093
2005504365.tif 000094
2005504365.tif 000095
2005504365.tif 000096
2005504365.tif 000097
2005504365.tif 000098
2005504365.tif 000099
2005504365.tif 000100
【国際公開パンフレット（コレクトバージョン）】
2005504365.tif 000101
2005504365.tif 000102
【国際調査報告】
2005504365.tif 000103
2005504365.tif 000104
2005504365.tif 000105
2005504365.tif 000106
2005504365.tif 000107
2005504365.tif 000108
2005504365.tif 000109
2005504365.tif 000110