(57)【要約】      （修正有）【課題】ソフトウェア命令を安全に実行するためのコンピュータシステムを提供する。【解決手段】強化された情報保証システムは、利用可能なマシン命令セットを拡張するように構成された中央処理装置（ＣＰＵ）１６エミュレータを含む、改良されたコンピュータ１２を備える。ＣＰＵエミュレータは、ノンネイティブで安全なオペコードの組から得られるマシン語命令をエミュレートする。必要に応じて復号化するときでも、例えば、ＣＰＵレジスタ１８に命令３８及びデータ３６を保存することによって、ＣＰＵエミュレータは、ランダムアクセスメモリ（ＲＡＭ）１４内の命令及びデータ３６がＲＡＭ内で常に暗号化された状態にあるように保証する。【選択図】図１
2018014081.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア命令を安全に実行するためのコンピュータシステム（１２）であって、
複数のハードウェアレジスタ（１８）を有する第１のプロセッサ（２０４）と、
メモリ（２０６）と、
前記第１のプロセッサ（２０４）によって、
第２のプロセッサ（２０４）をエミュレートし、
前記第２のプロセッサ（２０４）上で、前記第２のプロセッサ（２０４）に対してネイティブな複数のネイティブマシン命令の実行をエミュレートし、
前記第２のプロセッサ（２０４）上で、前記第２のプロセッサ（２０４）に対してノンネイティブで、且つ、オペコードに関連するオペランドデータ（３６）の暗号化されていない値が、前記第１のプロセッサ（２０４）の一又は複数のハードウェアレジスタ（１８）だけに保存されることを保証するように構成された一又は複数のオペコードを含む、複数の安全なマシン命令（３８）の実行をエミュレートする
ように実行可能な、前記メモリ（２０６）に保存される複数の命令を含むエミュレータプログラム（３８）と
を備えるコンピュータシステム（１２）。
【請求項２】
エミュレートされた第２のプロセッサ（２０４）は、前記第１のプロセッサ（２０４）とは異なるタイプである、請求項１に記載のコンピュータシステム（１２）。
【請求項３】
前記エミュレートされた第２のプロセッサ（２０４）は、前記第１のプロセッサ（２０４）よりも少ないレジスタ（１８）を有する、請求項２に記載のコンピュータシステム（１２）。
【請求項４】
前記第１のプロセッサ（２０４）と通信するランダムアクセスメモリ（ＲＡＭ）（１４）、及び前記ＲＡＭ（１４）に保存されたソフトウェアプログラム（３４）を更に含み、前記ソフトウェアプログラム（３４）は前記エミュレートされた第２のプロセッサ（２０４）上で動作するようにコンパイルされ、一又は複数の前記安全なマシン命令（３８）を含む、請求項１又は２に記載のコンピュータシステム（１２）。
【請求項５】
前記エミュレータプログラム（３８）の前記命令は、前記安全なマシン命令（３８）の前記オペコードの復号化されたバージョンが、前記第１のプロセッサ（２０４）の一又は複数の前記ハードウェアレジスタ（１８）だけに保存されることを保証するため、前記第１のプロセッサ（２０４）によって更に実行可能である、請求項１、２又は４のいずれか一項に記載のコンピュータシステム（１２）。
【請求項６】
コンピュータシステム（１２）に実装される方法（１００）であって、
メモリ（２０６）から暗号化されたマシン命令を取り出すこと、
取り出されたマシン命令を復号化し、復号化された命令を第１のプロセッサ（２０４）の第１のハードウェアレジスタ（１８）に保存すること、及び
エミュレートされた第２のプロセッサ（２０４）を使用して、前記復号化された命令の実行をエミュレートすること
を含み、前記復号化された命令は、前記エミュレートされた第２のプロセッサ（２０４）に対してノンネイティブで安全な複数の命令（３８）の１つである、方法（１００）。
【請求項７】
前記復号化された命令の実行をエミュレートすることは、前記復号化された命令に関連するオペランドの値を変更することを含む、請求項６に記載の方法（１００）。
【請求項８】
前記オペランドの前記値を変更することは、復号化された値を生成するために前記オペランドを復号化すること、及び前記復号化された値を前記第１のプロセッサ（２０４）の第２のハードウェアレジスタ（１８）に保存することを含む、請求項７に記載の方法（１００）。
【請求項９】
前記復号化された値を保存することは、前記復号化された値に加えて、ランダム情報を保存することを含む、請求項８に記載の方法（１００）。
【請求項１０】
前記取り出されたマシン命令を復号化することは、前記第１のプロセッサ（２０４）の第３のハードウェアレジスタ（１８）に保存された暗号化キーを使用することを含む、請求項６又は７に記載の方法（１００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コード実行中にデータとプログラムのセキュリティを維持するための装置及び方法に関する。
【背景技術】
【０００２】
現在のコンピュータプログラムは標準的なデスクトップシステムや重要なリアルタイム埋め込みシステム上にあるため、その重要なデータ及び技術の安全性を確保することは、脅威に溢れた今日の環境においては必須の要件である。潜在的な攻撃者が大きな資金力と充分な時間を有し、標的とするシステムに直接アクセスしてくる場合には、このタスクは指数関数的に難しくなる。
【０００３】
重要な機能（例えば、原子力発電所、手術ロボット、自律兵器システムの制御）を実行するコンピュータプログラムは一般的に、重要なデータを抽出する、或いはその挙動や能力を侵害しうる他のコンピュータやコンピュータプログラムから分離することによって保護されている。実際には、コンピュータプログラムの「危機」は、危殆化（ｃｏｍｐｒｏｍｉｓｅ）によってユーザーに不便が生じうる場合から、危殆化によって重要なインフラやサービスが一時的に損失しうる場合、危殆化によって人命が失われうる場合まで、広範囲に及ぶ。そのため、コンピュータシステムからコンピュータを分離することが適切でない、或いは実際的でないことがあり、プログラムの追加的な保護が極めて望ましいとされる状況が数多くある。例えば、ユーザーは、従来のパーソナルコンピュータ上で（追加的なセキュリティや保護が正当化される）重要な機能を実行するプログラムを動作させる必要がありうる。
【０００４】
安全な設計の背後にある目標は、保護された情報を取得するコストを保護された情報の価値よりも大きくすることである。具体的な問題は、コード動作時及びデータ使用時のコンピュータコードとデータ、いわゆる「使用中のデータ」を保護することにある。関連する問題は、電源がオフのときのコードとデータ、いわゆる「静止時のデータ」、或いは送信中のいわゆる「動作時のデータ」の安全確保である。
【０００５】
この問題に対する一般的なハードウェアベースのアプローチは、安全な暗号プロセッサのある形態に基づいている。安全な暗号プロセッサは、暗号化操作を実行するための、不正開封防止パッケージに埋め込まれた専用プロセッサである。専用プロセッサは、復号化されたデータやプログラム命令を安全な環境においてのみ出力する。しかしながら、安全な専用プロセッサは一般的に比較的小さな情報量を保護するためのもので、保護できる情報の範囲は一般的に限定的である。安全な暗号プロセッサを大きなアプリケーションに拡大すると、法外な費用がかかり、膨大な専用リソースを必要とする。しかも、安全な専用プロセッサはシリコンに入っているため、保守と更新に課題がある。システムへの攻撃が成功するためには、高価になる可能性のある大量のハードウェアの再開発と改良が必要となる。
【０００６】
性能を大幅に犠牲にすることのない、低コストで更新可能なソリューションが必要になっている。更に、このようなソリューションは、高価で実際的でないカスタムハードウェアでなく、従来のコンピューティングシステムに適用可能でなければならない。
【発明の概要】
【０００７】
現在の教示に従って安全なプログラムを実行するためのシステムは、上記で概説した技術的な問題点に対処する。本書に記載の強化された情報保証システムは、コンピュータのプロセッサでは利用できない安全なマシン語命令を含めるように、コンピュータの動作を修正する。幾つかの実施例では、これにはセキュリティ強化中央処理装置（ＣＰＵ）エミュレータの使用が含まれる。現在のソリューションは、現在の技術に容易に追随しうる既存の市販プロセッサに、ほぼ全面的に基づきうる。本開示の態様によるシステムは、ランダムアクセスメモリ（ＲＡＭ）中で、コンピュータプログラムと関連データに保護を提供しうる。
【０００８】
幾つかの実施形態では、ソフトウェア命令を安全に実行するためのコンピュータシステムは、複数のハードウェアレジスタ、メモリ、並びに、第２のプロセッサをエミュレートし、第２のプロセッサ上で第２のプロセッサに対してネイティブな複数のネイティブマシン命令の実行をエミュレートし、更に、第２のプロセッサ上で第２のプロセッサに対してノンネイティブな複数の安全なマシン命令の実行をエミュレートする第１のエミュレータによって実行可能な、メモリに保存された複数の命令を含むエミュレータプログラムを有する第１のプロセッサを含み、第１のプロセッサの一又は複数のハードウェア内にのみ保存されるオペコードに関連するオペランドデータの復号化されていない値を確保するように構成されている一又は複数のオペコードを含む。
【０００９】
幾つかの実施形態では、コンピュータシステムに実装される方法は、メモリから暗号化されたマシン命令を取り出すこと、取り出したマシン命令を復号化し、復号化された命令を第１のプロセッサの第１のハードウェアレジスタに保存すること、及び、エミュレートされた第２のプロセッサを使用して復号化された命令の実行をエミュレートすることを含んでもよく、復号化された命令は、エミュレートされた第２のプロセッサに対してノンネイティブで安全な複数の命令の１つである。
【００１０】
幾つかの実施形態では、ソフトウェア命令を安全に実行するためのコンピュータシステムは、複数のハードウェアレジスタを有する第１のプロセッサと、メモリと、メモリから暗号化されたマシン命令を取り出し、取り出したマシン命令を復号化し、復号化された命令を第１のプロセッサの一又は複数のハードウェアレジスタに保存し、第２のプロセッサを使用して復号化された命令の実行をエミュレートする第１のプロセッサによって実行可能なメモリ内に保存された複数の命令を含むエミュレータプログラムとを含んでもよく、復号化された命令は、エミュレートされた第２のプロセッサに対してノンネイティブで安全な複数の命令の１つである。
【００１１】
特徴、機能、及び利点は、本開示の様々な実施形態で個別に実現されうるか、又は、後述の説明及び図面を参照してさらなる詳細が理解可能である、さらに別の実施形態において組み合わされうる。
【図面の簡単な説明】
【００１２】
【図１】本開示の態様に従って、強化された情報保証システムを有する例示的なコンピュータの構成要素を示す概略的なブロック図である。
【図２】本開示の態様に従って、エミュレートされたプロセッサ上で安全なプログラムを実行するための例示的な方法のステップを図示するフロー図である。
【図３】例示的なデータ処理システムの様々な構成要素の概略図である。
【図４】例示的なコンピュータネットワークシステムの概略図である。
【発明を実施するための形態】
【００１３】
安全なプログラムを内蔵する情報保証（ＩＡ）システムの様々な態様及び実施例は、関連する方法と共に、以下で説明され、関連する図面に示されている。特別の定めのない限り、本開示の態様による情報保証システム及び／又はその様々な構成要素は、本明細書に記載され、例示され、及び／又は組み込まれた、構造、構成要素、機能、及び／又は変形例のうちの少なくとも１つを包含しうるが、それらを含有することが必要というわけではない。また更に、特に除外されない限り、本教示に関連して本書で説明され、例示され、及び／又は組み込まれているプロセスステップ、構造、構成要素、機能、及び／又は変形例は、他の類似のデバイス及び方法に含まれうるが、開示された実施形態で交換可能であることを含む。様々な実施例における下記の説明は、本質的に単なる例示であり、本開示、その用途又は利用を限定することを意図するものではない。加えて、実施例及び実施形態によって提供される利点は、後述のように、本質的に例示的であり、すべての実施例が同じ利点又は同程度の利点を提供するわけではない。
【００１４】
本書では強化されたＩＡシステムと称されることもある、本開示の態様による情報保証システムは、コンピュータとコンピュータシステムを分離することなく、従来の物理的なコンピュータとオペレーティングシステムの上で動作するコンピュータプログラムとデータに対して追加的な保護をもたらす。
【００１５】
最新のコンピュータプロセッサのマシン命令とレジスタは、マルチレベルのセキュリティ、物理メモリ及びページ化メモリへのアドレス指定やアクセスの制限、データの暗号化及び復号化のための特別な命令、並びに、あるプログラムが別のプログラムのコードやデータにアクセスすることやセキュリティを侵害することを防止するその他の機能など、様々な手段によってコンピュータプログラムとデータを保護するように構成されている。しかしながら、このような機能は、ランダムアクセスメモリ（ＲＡＭ）のコンテンツ及びハードディスクに書き込まれたＲＡＭページのコンテンツにアクセスする、或いは修正を加える高度な電子的方法から保護することはできない。
【００１６】
既知の仮想マシン（ＶＭ）製品は、コンピュータプログラムとデータを保護するため、最新のコンピュータプロセッサのマシン命令とレジスタを採用している。これらの命令を実行する（すなわち、エミュレートする）とき、このようなＶＭ製品は、並列仮想マシン及びマルチレベル仮想マシンに関連する他の保護を実装するための特別な手続きを起動する。
【００１７】
しかしながら、本教示による強化されたＩＡシステムは、他の形では利用できない標準的なプロセッサによる保護、或いは既存のＶＭ製品による保護を提供する。一般的に、強化されたＩＡシステムは、セキュリティをもたらすように構成された付加的な命令を含めるため、利用可能なマシン語命令セットを拡張することによって、コンピュータの動作を効果的に修正する。幾つかの実施例では、これにはセキュリティ強化中央処理装置（ＣＰＵ）エミュレータの使用が含まれる。強化されたＩＡシステムは特に、ＲＡＭ内にある、或いは、ハードディスクに書き込まれたＲＡＭページとして保存されたコンピュータプログラムやデータの保護にフォーカスされる。
【００１８】
プログラムデータの保護
幾つかの実施例では、強化されたＩＡシステムは、ある種の制限を課すことによってプログラムデータを保護する。具体的には、ＲＡＭに保存されるデータはすべて暗号化され、暗号化されていないデータは物理的レジスタにのみ保存され、重要な計算はすべて、他のプログラムがレジスタ内の暗号化されていない任意のデータの点検を可能にするプロセッサレベルの割り込みに対して保護されている。
【００１９】
この保護は強化されたＩＡシステムの２つの側面によって促進される。第１に、プログラムのソースコードは、既存のコンピュータプロセッサや既存のＶＭ製品には見当たらない特別なマシン命令を含むように、コンパイルないしは別の方法で修正されうる。これらのマシン命令は、様々なタスクを実行するように構成されている。例えば、物理レジスタ内では暗号化されず、ＲＡＭ内では暗号化される暗号化キーを安全に作成し管理するように、ランダムビットによって専用ＲＡＭを初期化するように、安全な計算の開始時の割り込みを不能にして、物理的なプロセッサレジスタに保存された暗号化されていないデータの点検を防止するように、安全な計算の終了時の割り込みを可能にするように、ＲＡＭに暗号化されていないレジスタ値を保存するときにデータを暗号化するように、ＲＡＭから暗号化されたデータを取り出し、そのデータをレジスタに保存するときにデータを復号化するように、構成されている。
【００２０】
第２に、結果として得られるバイナリプログラムは、従来のプロセッサのマシン語命令に加えて、上述の特別なマシン語命令を実行するように構成された、ＩＡ仮想マシン（例えば、エミュレータ）によって実行されうる。ＩＡ仮想マシンはまた、メモリ割当、仮想メモリページ化、コンテクストスイッチングなどを制御するマシン語命令に遭遇するとき、上述の手続きに加えて、他の特別な手続きを起動しうる。
【００２１】
プログラムコードの保護
しかしながら、プログラムコードのバイナリ表示を点検及び改変することで、プログラムによるこのような特別な命令の利用が侵害される可能性がある。追加的な保護を提供するため、プログラムコードのバイナリ表示は暗号化された形態で転送及び保存され、実行時には暗号化された形態でＲＡＭ内に留まりうる。コンピュータプログラムが暗号化され、暗号化された形態で保存される典型的な慣例とは対照的に、これは暗号化された形態でＲＡＭに読み込まれるが、実行が開始される前に全体的に復号化される。
【００２２】
幾つかの実施例では、プログラムコードのバイナリ表現（すなわち、マシン語）は、安全な一連のステップによって保護されうる。第１に、プログラムのソースコードは、既知の安全な分離されたコンピュータの上で準備され、コンパイルされる。第２に、結果として得られる実行可能なバイナリは、ＩＡ仮想マシン（例えば、以下で説明されるセキュリティ強化ＣＰＵエミュレータ）によって復号化され、実行されうる形態で暗号化される。暗号化された実行可能なバイナリは次いで、従来のコンピュータへ転送され、保存される。従来のコンピュータ上では、ＩＡ仮想マシンは、ＲＡＭ内において、暗号化されたプログラムコードのバイナリ表現を実行するように構成されうる。これは、例えば、暗号化されたマシン語命令及びそのパラメータをＲＡＭから徐々に取り出し、そのマシン語命令及びパラメータを物理的レジスタの中へ復号し、次にエミュレートされた動作を実行することによって、実現されうる。
【００２３】
コンピュータの方法、システム及び製品の例示的な態様
強化されたＩＡシステムの態様は、コンピュータの方法、コンピュータシステム、又はコンピュータプログラム製品として具現化されうる。従って、強化されたＩＡシステムの態様は、専らハードウェアの実施形態、専らソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、又は、ソフトウェア及びハードウェアの態様を組み合わせる実施形態の形態をとりうるが、本書ではそれらはすべて一般的に、「回路」、「モジュール」、又は「システム」と称されうる。また更に、強化されたＩＡシステムの態様は、コンピュータ可読プログラムコード／命令を具現化する一又は複数のコンピュータ可読媒体において具現化される、コンピュータプログラム製品の形態をとりうる。
【００２４】
コンピュータ可読媒体の任意の組み合わせが利用されうる。コンピュータ可読媒体は、コンピュータ可読信号媒体及び／又はコンピュータ可読記憶媒体でありうる。コンピュータ可読記憶媒体は、電気的、磁気的、光学の、電磁的、赤外線の、及び／又は半導体の、システム、装置、又はデバイス、或いは、それらの任意の好適な組み合わせを含みうる。コンピュータ可読記憶媒体のより具体的な実施例は、一又は複数の電線を有する電気接続、持ち運び可能なコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、光ファイバ、持ち運び可能なコンパクトディスク読出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、及び／又は、それらの任意の好適な組み合わせ、及び／又はそれらの同類を、含みうる。この開示の文脈において、コンピュータ可読記憶媒体は、指令を実行するシステム、装置又はデバイスによって使用するための、又はそれと接続しているプログラムを、包含又は記憶することが可能な、任意の好適な有形媒体を含みうる。
【００２５】
コンピュータ可読信号媒体は、コンピュータ可読プログラムコードが内部に埋め込まれ、例えば搬送波のベースバンドで又はその一部で伝播されるデータ信号を含み得る。かかる被伝播信号は、電磁的形態、光学形態、及び／又は、それらの任意の好適な組み合わせを含むがそれらに限定されない、多種多様な形態のうちの任意の形態をとりうる。コンピュータ可読信号媒体は、命令を実行するシステム、装置、又はデバイスによって使用するための、又はそれと接続しているプログラムを、通信、伝播、又は伝送することが可能な、コンピュータ可読記憶媒体ではない任意のコンピュータ可読媒体を含みうる。
【００２６】
コンピュータ可読媒体で具現化されたプログラムコードは、無線、有線、光ファイバケーブル、ＲＦ、及び／又はそれらの同類、及び／又は、それらの任意の好適な組み合わせを含むがそれらに限定されない、任意の適切な媒体を使用して伝送されうる。
【００２７】
強化されたＩＡシステムの態様の運用を実行するためのコンピュータプログラムコードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋、及び／又はこれに類するオブジェクト指向言語や、従来のＣなどの手続き型プログラミング言語を含む、プログラミング言語の１つ又はこれらの任意の組み合わせで記述されうる。モバイルアプリケーションは、上述の言語に加えて、Ｏｂｊｅｃｔｉｖｅ−Ｃ、Ｓｗｉｆｔ、Ｃ＃、ＨＴＭＬ５などの任意の適切な言語を使用して開発されうる。プログラムコードは、専らユーザーのコンピュータ上で、部分的にユーザーのコンピュータ上で、独立型のソフトウェアパッケージとして、部分的にユーザーのコンピュータ上でかつ部分的に遠隔コンピュータ上で、或いは、専ら遠隔コンピュータ又はサーバー上で、実行を行いうる。後半の想定では、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）又はワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じて、ユーザーのコンピュータに接続されてよく、かつ／又は、（例えばインターネットサービスプロバイダを使用して、インターネットを通じて）外部コンピュータへの接続が行われうる。
【００２８】
強化されたＩＡシステムの態様は、方法、装置、システム及び／又はコンピュータプログラム製品のフロー図及び／またはブロック図を参照して、以下に記載される。フロー図及び／又はブロック図における各ブロック及び／又はブロックの組み合わせは、コンピュータプログラム命令によって実装されうる。コンピュータプログラム命令は、コンピュータ又は他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フロー図及び／又はブロック図の一又は複数のブロック内で特定されている機能／作用を実装するための手段を生成するように、汎用コンピュータ、特殊用途コンピュータ、又は、機器を作製するための他のプログラマブルデータ処理装置のプロセッサに、提供されうる。
【００２９】
これらのコンピュータプログラム命令は、コンピュータ可読媒体であって、コンピュータ可読媒体に記憶された命令が、製造品を作製するような特定の様態で機能するよう、コンピュータ、他のプログラマブルデータ処理装置、及び／又は他のデバイスに指示しうる、コンピュータ可読媒体に記憶されることも可能であり、そのコンピュータプログラム命令は、フロー図及び／又はブロック図の一又は複数のブロック内で特定されている機能／作用を実装する命令を含む。
【００３０】
コンピュータプログラム命令は、コンピュータ又は他のプログラマブル装置で実行される命令が、フロー図及び／又はブロック図の一又は複数のブロック内に特定された機能／作用を実装するためのプロセスを提供するように、デバイス上で実行されるべき一連の動作ステップを引き起こして、コンピュータ実装プロセスを発生させるために、コンピュータ、他のプログラマブルデータ処理装置、及び／又は、他のデバイスに、読み込まれることも可能である。
【００３１】
図面内のいかなるフロー図及び／又はブロック図も、本教示の態様によるシステム、方法及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能性、及び／又は動作を示すことを意図している。これに関して、各ブロックは、特定の論理機能を実装するための一又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部分を表わしうる。幾つかの実装では、ブロックに記載された機能が、図中に記載された順序から逸脱して現われることがある。例えば、関連する機能性に応じて、連続して示された２つのブロックが実際にはほぼ同時に実行されること、又は、それらのブロックが時には逆順で実行されることがある。各ブロック及び／又はブロックの組み合わせは、特定の機能又は作用を実行する、特殊用途ハードウェアに基づくシステム（又は、特殊用途のハードウェアとコンピュータ命令との組み合わせ）によって実装されうる。
【００３２】
例示的な強化されたＩＡシステム
幾つかの実施例では、標準的なホストプロセッサで実行可能なＣＰＵネイティブな命令だけを使用して、本教示による安全な動作を実装するオブジェクトコードを生成することが可能になりうる。他の実施例では、修正されたプロセッサエミュレータを使用して利用可能な命令セットを拡張する、強化されたＩＡシステムによって同様の機能は実現されうる。
【００３３】
一般的に、このような強化されたＩＡシステム１０は、従来のホストコンピュータ上で動作する仮想マシンを含みうる（デジタルプロセッサ及び／又はデータ処理システムとも称される）。コンピューティングシステムの更なる態様は、以下でより詳細に説明される。図１を参照すると、適切なコンピュータ１２はランダムアクセスメモリ（ＲＡＭ）１４、及びＲＡＭと通信を行う物理的な中央処理装置（ＣＰＵ）１６を含みうる。ＣＰＵ１６は、複数のレジスタ１８及びプロセッサ回路２０を有する、任意の適切な処理装置又はコアを含みうる。ある種のレジスタ１９は、暗号化キーの保存用として予約されうる。コンピュータ１２は、複数のＣＰＵ及び／又は第２のＣＰＵ２２としてここに示されているマルチコアプロセッサを含みうる。すなわち、ＣＰＵ２２は第２の処理装置又は処理コアを表わしうる。コンピュータ１２に含まれうる追加のハードウェアの説明については、例示的なデータ処理システム（以下）と題された節を参照のこと。
【００３４】
システム１０は、コンピュータ１２の上で動作し、一又は複数のサンドボックス化された仮想マシンを管理するように構成されているハイパーバイザ２４を含みうる。これらの仮想マシンは、オペレーティングシステム（ＯＳ）２６及びセキュリティ強化ＣＰＵエミュレータ２８を含みうる。幾つかの実施例では、ハイパーバイザ２４はベアメタル（すなわち、「ネイティブな」又は「タイプＩの」）ハイパーバイザであってもよい。ハイパーバイザ２４は、ハイパーバイザ２４に排他的に割り当てられているＲＡＭ１４の一部であるハイパーバイザ専用ＲＡＭ３０と通信を行いうる。同様に、ハイパーバイザ専用ＲＡＭ３０内のエミュレータ専用ＲＡＭ３２は、エミュレータ２８に排他的に割り当てられうる。幾つかの実施例では、例えば、コンピュータ１２に実装されたネイティブオペレーティングシステム（図示せず）上でＣＰＵエミュレータ２８が代わりに動作する場合には、ハイパーバイザ２４はなくてもよい。
【００３５】
エミュレータ２８は、選択されたＣＰＵの実行をエミュレートするように構成された、任意の適切なＣＰＵエミュレータを含みうる。選択されたＣＰＵは、ＣＰＵ１６と同じタイプか、又は異なるタイプであってもよい。エミュレータ２８は、データ３６及びマシン語命令３８をふくむ安全なプログラム３４などの、機密のプログラムを実行するように利用されうる。安全なプログラム３４は、ＲＡＭ（例えば、ＲＡＭ３０）へ読み込み可能である。
【００３６】
複数のエミュレートされたレジスタ４０及びエミュレートされたプロセッサ回路４２は、選択されたＣＰＵをエミュレートし、マシン語命令３８を実行するために使用されうる。マシン語命令３８（マシン命令及び／又はアセンブリ語命令とも称される）は、実行される動作を特定するオペコードを含みうる。これらのオペコードに関連するオペランドは、命令によって処理されたデータ３６を参照する。データ３６は、暗号化されていないデータ及び暗号化されたデータを含みうる。オペコードは、エミュレートされたＣＰＵによって通常どおりに実行可能なネイティブ（例えば、標準の）オペコード、及び／又は安全なオペコードを含みうる。エミュレータ２８は、このような安全なオペコードを扱うエミュレータ２８を機能的に較正する補助命令４４の組を含みうる。
【００３７】
本教示による安全なオペコードは、安全なプログラム３４の実行中にデータ３６の暗号化を維持するように構成されている。安全なオペコードは、本開示の態様によるシステム下で画定される安全なコンピューティング命令の組から取得されうる。これらの安全なオペコードは、ＣＰＵ１６に対して（又は、更に言うならば、エミュレートされる標準的なＣＰＵに対して）ネイティブな命令の一部ではないため、コンピュータ１２に対して利用可能なマシン語命令の拡張を表わす。
【００３８】
安全なオペコードは、任意の適切な方法によってエミュレートされたプログラムに含まれるようにもたらされる。幾つかの実施例では、安全なオペコードはプリコンパイル指令によってプログラムに追加される。幾つかの実施例では、安全なオペコードはネイティブコンパイラの修正によって促進される。幾つかの実施例では、安全なオペコードはオブジェクトコードのポストコンパイル修正によって含まれる。幾つかの実施例では、安全なオペコードは実行中に、例えば、安全でないネイティブコードを補うために、及び／又は交換するために、動的に含まれる。
【００３９】
エミュレータ２８は、エミュレートされたプロセッサの使用に従って、エミュレートされたＣＰＵに対してネイティブなマシン語命令をエミュレートするように構成されている。すなわち、ネイティブなオペコードは修正なしで実行される。
【００４０】
しかしながら、安全なオペコードと安全なデータはエミュレータによって異なるように処理される。幾つかの実施例では、データ内のパターンの点検及び検出を防止するため、プログラムデータ３６に割り当てられているＲＡＭは、曖昧化又は部分的に曖昧化（例えば、ランダム化）されうる。幾つかの実施例では、機密データはＲＡＭに保存されるときに常に暗号化される。幾つかの実施例では、エミュレータ２８は、暗号化されていないデータはハードウェアレジスタだけに見られ、暗号キーは予約されたハードウェアレジスタだけに見られることを保証するように構成されている。幾つかの実施例では、（例えば、プログラムのいわゆる「クリティカルセクション」内にある）安全なオペコードを実行するときには、エミュレータはエミュレートされたレジスタ４０の代わりにＣＰＵ１６のレジスタ１８を使用する。機密データに関する動作のときには、ハードウェア割り込みも中断されうる。
【００４１】
ネイティブオペコードを使用する例示的な方法
上述のように、ソフトウェアプログラムのコードは、エミュレータ（例えば、エミュレータ２８）が不必要になりうるように、（例えば、コンパイル及び／又は前処理によって）充分に修正されうる。すなわち、コードは、ホストプロセッサによって認識されるネイティブオペコードのみを利用して、ホストコンピュータによって安全かつ非仮想的に動作されるように修正されうる。この節は、このようなコード修正のための２つの補足的な方法について議論している。
【００４２】
第１のアプローチは、データを操作する安全な本来の機能をプログラムが利用できるようにすることである。第２のアプローチは、プログラムが機能レベルで暗号化及び復号化をできるようにすることで、これによってデータがいつどこで暗号化されるかを容易に制御することができる。安全な本来の方法は、より高いセキュリティを提供しうるが、一方で、復号化／暗号化による安全な関数呼び出しに基づく方法は、より良い性能を提供しうる。これら２つのアプローチは補完的で、この方法はセキュリティを付加するために組み合わせることができる。
【００４３】
セキュリティは基本的な動作に戻って追跡可能なため、安全な本来の動作に基づく安全なコードの生成は、２つのアプローチよりも安全になりうる。基本的な動作の例には、加算、減算、乗算、除算、比較、割当、及びタイプ変換が含まれる。情報が保護された状態にあることを保証するため、これらの基本動作（ｐｒｉｍｉｔｉｖｅｓ）は、アセンブリ語で（例えば、ＡＥＳ−ＮＩオペレーションを使用して）書かれている。
【００４４】
安全な基本動作を扱う一般的なプロセスは以下のようになる。（１）割り込みが不可になる。（２）メモリではなくプロセッサレジスタに保存された結果によって、関連の変数が復号化される。これは、有効なメッセージ認証コード（ＭＡＣ）のチェックを含みうる。（３）下層の基本動作が実行される。（４）基本動作の結果が別のプロセッサレジスタに保存される。（５）ステップ（２）で使用したレジスタがクリアされる。（６）ステップ（３）で明らかになり、レジスタに保存された結果が暗号化され、メインメモリに保存される。（７）ステップ（６）で使用されたプロセッサレジスタがクリアされる。（８）割り込みが再度可能になる。このプロセス中のどの時点においても、復号化された変数はメモリに常駐していない。
【００４５】
例えば、次式について考察する。
Ｂ  ＝  Ｘ  ＋  Ｙ
ここで、Ｘ、Ｙ及びＢは暗号化された変数である。
【００４６】
この場合、Ｘ、Ｙ及びＢの値は上述のように暗号化されている。この実施例では、Ｘ及びＹを内部プロセッサレジスタへ復号化し、復号化された２つの値を足し合わせ、その結果をＢの暗号化されたバージョンに保存することによって、加算が行われる。外部的には、安全なメモリ内の変化だけが暗号化された変数Ｂの更新情報となることができ、ここに結果が保存される。
【００４７】
他のアプローチに目を向けると、修正された関数呼び出しに基づく安全なコードの作成は、上記方法の補足となる。安全な関数呼び出しの使用は、関数のバイナリコードの修正を含みうる。例えば、（１）呼び出しの先取りを無効にする関数、（２）関数及びランタイムデータを通常の実行可能なコード及び変数に復号化する関数、（３）完全性を検証するため、ＭＡＣ内のビルトをチェックする関数、（４）関数を実行する関数、（５）結果を暗号化する関数、及び（６）任意の使用済みスタックを含む空きとして登録する前に、割り当てられたメモリを（例えば、ランダムデータで上書きすることによって）消去する関数、などである。
【００４８】
この第２のアプローチは、多くの関数で、特に数千回のループを繰り返す関数では、より速くなりうる。しかしながら、安全な関数呼び出しに基づく方法は、更に多くのデータ及びコードをＲＡＭ内で一時的に露出させる。同時に動作する安全なプロセスの数は多くても安全なプロセッサコアの数と同じため、安全な関数呼び出しに基づく方法は、相当なセキュリティを確保している。したがって、ＲＡＭが物理的に取り外されて検査されても、当該スナップショットによって露出されうる情報量は限られている。たとえ、当該の１つの関数呼び出しに関連するデータが露出しても、それを理解するために必要な周囲の状況は伴わない。
【００４９】
全般的な多層防御戦略の一環として、この第２のアプローチのセキュリティは、既存のソフトウェア難読化手法の利用によって更に強化可能で、これは、狭いウィンドウ内で暗号化されていない状態にある安全な関数を保護するように動作する。通常のメモリ割当は、たとえ暗号化されていなくても、依然としてプログラムによって内部的に実行される。メモリ割当はメモリの大きなブロック内のランダムな場所を使用し、メモリの大きなブロックは乱数で満たされる。
【００５０】
この種の保護を標的とするには、イントルーダ（ｉｎｔｒｕｄｅｒ）は、初期の関数の復号化が行われた後、新たな暗号化と消去が完了する前にメモリを読まなければならない。実際のスタックがどこにあるかを決定する必要があるが、スタックは安全なメモリ内の任意の場所に配置しうる。このアプローチには、暗号化が起こる場所、その結果として、性能が影響を受ける場所を実装プログラムが容易に選択できる、という利点がある。
【００５１】
関数の暗号化は、完全なディスク暗号化で使用されるような、標準的な連鎖関数を使用しうる。幾つかの実施例では、関数の開始時のフィールドは、乱数とメッセージ認証コードを含む。これらのフィールドが暗号化されると、関数全体がコードブックスタイルの攻撃及び改変から保護される。アクティブに呼び出されていないときには、安全な関数は暗号化された状態に留まらなければならない。
【００５２】
例示的なセキュリティ強化ＣＰＵエミュレータ
上記で概説した２つの方法と比べて、安全なプログラムを実行する単純なアプローチには、安全な命令を扱うように修正されたセキュリティ強化ＣＰＵエミュレータの使用がある。標準的なＣＰＵエミュレータの例は、ｑｅｍｕ．ｏｒｇで入手可能なＱＥＭＵである。これは、動的バイナリ変換によりハードウェア仮想化、ＣＰＵのエミュレーションを実行するように構成されたハイパーバイザである。セキュリティ強化ＣＰＵエミュレータは、ＱＥＭＵ（又は同種のもの）に類似したハイパーバイザに基づいていてもよい。
【００５３】
本教示によるシステムは、メインメモリとの間で出入りする全命令が暗号化されているか否かに注目している。実行されるプログラム又はオペレーティングシステムは、プログラム（又はオペレーティングシステム）に持ち込まれるデータ及び持ち出されるデータを十分に制御しているものとみなされる。メモリへの全アクセスを暗号化する本方法は、セキュリティ強化ＣＰＵエミュレータだけが問題になっているプログラムを復号化し、それを暗号化されたメモリに読み込むことができるように、他の暗号化操作によって拡張されうる。
【００５４】
メインメモリとの間で出入りするやりとりの暗号化を維持するため、セキュリティ強化ＣＰＵエミュレータシステムは、暗号化されていない情報を一時的に保存するため、物理的なＣＰＵのハードウェアレジスタを利用する。したがって、このようなレジスタは十分な数だけこの目的専用にしなければならず、他の目的には使用されない。これは、例えば、コンピュータ内に物理的に存在するＣＰＵよりも少ない数のレジスタを有するＣＰＵモデルをエミュレートすることによって実現されうる。これは、暗号化及び復号化操作に関してエミュレートされたＣＰＵには存在しない、すべての物理的なＣＰＵレジスタを解放しうる。前記別の方法、エミュレータの実装は、ホストプロセッサがエミュレートされたプロセッサよりも多くのレジスタを有する場合には単純化される。マルチコアチップに対して実装されている場合には、エミュレータは一組のレジスタを実行されるレジスタに、マシンレジスタの別の組を強化されたセキュリティ命令に排他的に割り当てることができる。
【００５５】
セキュリティ強化ＣＰＵエミュレータは、オペレーティングシステムに連続メモリの外観を提示する。実際の物理的なメモリは断片化されるが、セキュリティ強化ＣＰＵエミュレータが動作する基本的なオペレーティングシステムはエミュレータに連続メモリの外観を提示する。メモリを暗号化するには、マッピングを確立しなければならない。マッピングを確立するには、最初に使用される暗号化の基本形を決定する必要がある。この実施例では、暗号化ブロックサイズとして１２８ビットが想定されるが、１２８ビットに限定する必要はない。ブロックサイズが大きくなれば、性能は犠牲になるがセキュリティは高まる傾向にある。
【００５６】
暗号化に使用されるビット数が決定されると、追加されるエントロピーやオプションの内部チェックサムに使用されるビットとは対照的に、実際に使用されるビット数を決定する必要がある。この実施例では、６４ビットが想定されているが、一般的に、その数は実際の暗号化ブロックサイズまでの任意の数であってよい。チェックサムは、必要に応じて、暗号化ハッシュで置き換えることができる。この実施例では、メッセージ拡張係数が２であるため、元のプログラムが０ｘ１０００００にアクセスすると、セキュリティ強化ＣＰＵエミュレータは０ｘ２０００００のブロックにアクセスする。エミュレータはこの移行をシームレスに取り扱う。
【００５７】
暗号化された読込及び保存
セキュリティ強化ＣＰＵエミュレータによって実装されうる安全な命令の例として、一般的なＭＯＶＥオペコードについて更に詳細に説明する。情報を読み込み又は保存する一般的なプロセッサ命令は、次のように書くことができる。
ＭＯＶＥ  ＜デスティネーション＞  ＜ソース＞
【００５８】
以下の説明は、ソース又はデスティネーションのどちらかがメインメモリ内にあるか、両方ともメインメモリ内にない状況に重点を置いている。ソースとデスティネーションの双方がプロセッサレジスタである場合には、通常の暗号化されていない動作が起こる。ソースとデスティネーションの双方がメインメモリ内にある場合には、プロセスは、ダイレクトコピー又は暗号化された読込と暗号化された保存の組み合わせを含みうる。ダイレクトコピーは暗号化されたブロック全体がコピーされる場合にしか使用できず、暗号化プロセスの一部（例えば、チェックサム計算の一部にすること）として、暗号化されたブロックオフセットに適用される規定はないことに留意されたい。このような規定は、暗号化されたブロックを稼働中の部分から別の部分へ単純にコピーするのを防止するために使用されうる。
【００５９】
ソースがメインメモリ内にあり、デスティネーションがプロセッサレジスタである場合には、命令は、メインメモリ内のソースを復号化し、その結果をレジスタに保存する一連のネイティブ命令を実行するサブルーチンを呼び出す。デスティネーションがメインメモリ内にあり、ソースがプロセッサレジスタである場合には、命令は、メインメモリ内に暗号化した結果を保存する一又は複数の命令で置き換えられる。
【００６０】
暗号化された保存
暗号化されたメモリに値を保存することは、値を暗号化して、その結果をメモリ内に配置するような単純なことではない。代わりに、一般的なプロセスには以下が含まれる。（１）暗号化されたメモリのチャンクを１個ないし２個（データが暗号化されたブロックに合致していない場合には、２個のチャンクが必要になることがある）復号化し、その結果をＣＰＵレジスタに保存する。（２）オプションにより、復号化されたメモリブロックが存在しうる任意の内部チェックサムに合格するか否かを検証する。例えば、説明した実施例では、６４ビットがデータに使用され、６４ビットがランダムビットとチェックサムに使用された。これは更に３２ビットのランダムデータと３２ビットのチェックサムに分割することが可能で、このチェックサムが失敗すると、所定の動作を実行する。（３）この時点で、暗号化されたメモリの１個又は２個のブロックは、ＣＰＵレジスタ内で復号化されなければならず、これらのレジスタによって表わされる暗号化されていないメモリの一部を、保存される値で更新する。（４）オプションにより、ランダムビットを含む任意の領域を新しいランダムビットで更新する。これは費用のかかる操作であるため、毎回行われるわけではない。（５）これらのブロックに関連するチェックサムを再計算する。更に、（６）結果として得られるブロックを暗号化して、それを元の場所に保存しなおす。
【００６１】
暗号化された読込
プロセッサレジスタにメモリの一部を復号化することは、次のようにして実行可能である。（１）暗号化されたメモリのチャンクを１個ないし２個復号化し、その結果をＣＰＵレジスタに保存する（データが暗号化されたブロックに合致していない場合には、２個のチャンクが必要になることがある）。（２）オプションにより、復号化されたメモリブロックが、存在しうる任意の内部チェックサムに合格するか否かを検証する。（３）この時点で、暗号化されたメモリの１個又は２個のブロックは、ＣＰＵレジスタ内で復号化されなければならず、ハードウェアＣＰＵレジスタには復号化されたデータの関連する部分が読み込まれる。
【００６２】
暗号化の例
この実施例は、６４ビットのデータ、３２ビットのチェックサム、及び３２ビットのランダムデータからなる、１２８ビットブロックサイズを想定している。例えば、プレーンテキストブロックは次のように展開される。
［６４ビット  データ］［３２ビット  ランダムデータ］［３２ビット  チェックサム］
これらの選択は説明のためのものにすぎない。様々なセキュリティとパフォーマンスの目標を実現するため、実際の実装では様々な値が選択されうる。
１．メモリロケーション０ｘ１００に３２ビットを保存するＣＰＵ命令が発行される。
２．セキュリティ強化ＣＰＵエミュレータが使用するメモリは、１２８ビット（すなわち、１６バイト）のチャンクに分割される。各チャンクは８バイトの実データを含む。
３．３２ビットを保存しているため、バイト０ｘ１００、０ｘ１０１、０ｘ１０２、及び０ｘ１０３が含まれることがわかっている。これがプログラムの理解していることである。
４．より具体的には、メッセージ拡張係数によって、実際のメモリロケーション０ｘ２００、０ｘ２０２、０ｘ２０４、及び０ｘ２０６が含まれることがわかっている。
５．１２８ビット暗号化から、０ｘ０-０ｘＦが１つのブロックで、０ｘ１０−０ｘ１Ｆは別のブロックであることがわかっている。
６．０ｘ２００、０ｘ２０２、０ｘ２０４、及び０ｘ２０６を１６（すなわち、ブロックサイズ）で割ると、３２番目のブロック（第１のブロックは０番目と呼ばれる）になるトランザクションに含まれる暗号化されたブロックを得ることができる。３２に１６を掛けると、暗号化されたメモリの関連セクションのロケーションに対して０ｘ２００が得られる。
７．メモリの１６バイトのこのセクションがレジスタに読み込まれ、復号化される。
８．プログラムメモリ内の０ｘ１００は、実メモリの０ｘ２００に対応し、これは前述の検討事項を用いると１２８ビットブロックの開始位置になっている。これらの３２ビットは単純に、１２８ビットレジスタの最上位３２桁に保存可能である。
９．オプションにより、当該レジスタのランダムビットフィールドは、新しいランダムビットで更新可能である。
１０．オプションにより、チェックサムはチェックサムビットを除く１２８ビット領域のすべてに基づいて計算されうる。オプションにより、このチェックサムはまた、ブロック数に基づいていてもよい。この場合、ブロック数は３２になる。これによりメモリブロックの単純な移動は効かなくなる。
１１．結果として得られる１２８ビットレジスタはここで暗号化され、その結果はロケーション０ｘ２００に再保存される。これは、０ｘ２００−０ｘ２０Ｆが更新されることを意味する。
【００６３】
この実施例では、データが６４ビットであった場合には、オリジナルデータが再利用されることはまったくないため、最初の暗号化をスキップすることが可能である。
【００６４】
場合によっては、連続的にではなく、周期的に、ランダムビットをハードウェア乱数生成器の新しいビットで置き換え、チェックサムを再計算することか有利になることがありうる。これにより、リバースエンジニアリングをより難しいものにすることができる。
【００６５】
一般的なプログラム設計は、変数がメモリに合致するようにして、変数が異なる暗号化ブロックに不必要に分割されるのを避けるべきである。これは分割されると毎回のアクセスで暗号化操作の回数が２倍になるからである。
【００６６】
キー設定
セキュリティ強化ＣＰＵエミュレータは、ハードウェア乱数生成器を使用して暗号化キーを作成する。一旦保存されたこのキーは、セキュリティ強化ＣＰＵエミュレータが動作しているプログラム又はオペレーティングシステムで利用可能であってはならない。処理されたシステムの一般的な場合には、セキュリティ強化ＣＰＵエミュレータ以外のものは、キー関連情報が保存されているレジスタにアクセスできないようにすべきである。
【００６７】
暗号化又は復号化を行うには、暗号化キーは一般的に、サブキーの組に拡張することが必要になる。これはすべての暗号化で行われてもよく、キーの組は計算済みであってもよい。キー及びサブキーには機密性があるため、実際のキーはプロセッサレジスタ内に残っていなければならない。拡張されたサブキーは、プロセッサレジスタ又はメモリの他の安全なセクション内に残されることが好ましい。しかしながら、このようなサブキーの保存が不可能或いは実際的でない場合には、サブキーは消去して、毎回の動作後に再作成すべきである。さらには、アクセスを困難にするため、サブキーはメモリ内で移動させることが望ましい。実際の実装は、ターゲットハードウェアの詳細に依存する。
【００６８】
マイクロコードの更新は、サブキーを安全に保存することを目的として、ＣＰＵ内部キャッシュＲＡＭの一部を専用にするために使用されてもよく、複数の実際の暗号化キーに対応する複数のサブキーの組を保存できることが望ましい。このような更新はまた、キャッシュ領域がメインメモリに転送されることを防止しなければならない。幾つかの実施例では、メモリの暗号化及び復号化は、データをキャッシュに読み込むとき、或いは、キャッシュからのデータをフラッシュしてメインメモリに戻す必要があるときにだけ、起こりうる。
【００６９】
例示的なエミュレーションアルゴリズム
この節では、図２を参照して、強化されたＩＡシステムを使用して、機密のソフトウェアプログラムを安全に実行するための例示的な方法のステップについて説明している。システム１０の態様は、以下で説明される方法ステップで利用されうる。必要に応じて、各ステップの実行で使用されうる前述のコンポーネント及びシステムに対して参照が行われうる。これらの参照は例示のためのもので、本方法の特定のステップを実行するのに可能な方法を制限することを意図していない。
【００７０】
図２は、例示的な方法で実行される動作を説明するフロー図で、本方法の完全なプロセス又はすべてのステップを列挙しているわけではない。図２は、１００で全体的に示されている方法の複数のステップを表わしており、この方法は、本開示の態様による強化されたＩＡシステムと併せて実行されうる。方法１００の様々なステップが後述され、図２に示されているが、ステップは必ずしもすべて実行される必要がある訳ではなく、場合によっては、図示された順番とは異なる順番で実行されることもある。
【００７１】
ステップ１０２では、安全なプログラムの命令をＲＡＭに読み込むことで、エミュレータは動作を開始する。例えば、エミュレータ２８は安全なプログラム３４をＲＡＭ３０に読み込みうる。命令はＲＡＭ内に暗号化された状態で残りうる。
【００７２】
ステップ１０４では、エミュレータはエミュレートされたレジスタを初期化する。例えば、レジスタ４０はゼロに設定されうる。
【００７３】
ステップ１０６では、エミュレータは現在の命令アドレスが安全なプログラムの開始位置を指すように初期化する。
【００７４】
ステップ１０８では、エミュレータはエミュレーションが停止すべきかどうかを確かめ、停止すべき場合にはプログラムのエミュレーションを終了する。
【００７５】
ステップ１１０では、エミュレータが停止されなかった場合には、現在の命令ポインタで次のオペコードが読み出される。プログラム全体が暗号化され安全な場合には、或いは、現在の命令ポインタがいわゆるクリティカルセクションにあるときには、読み出された命令はＣＰＵのハードウェアレジスタへ復号化されてもよい。例えば、現在の命令は復号化され、結果として復号化された命令は、ＣＰＵ１６の予約されたレジスタ１８の１つに読み込まれてもよい。
【００７６】
ステップ１１２では、読み出されたオペコードがＳＴＯＰ命令である場合には、エミュレータは停止するように命令される。
【００７７】
ステップ１１４では、取り出されたオペコードがネイティブオペコードに置き換えられる場合、すなわち、エミュレートされたＣＰＵの標準的な命令セット内のオペコードに置き換えられる場合には、ネイティブオペコードはエミュレートされたＣＰＵによってエミュレートされる。
【００７８】
ステップ１１６では、取り出されたオペコードがＳＴＯＰ命令又はネイティブオペコードでない場合には、命令は安全なオペコードで、エミュレータは安全なオペコードを、例えばエミュレートされるＣＰＵに対してネイティブであるかのようにエミュレートする。以下の節は、このエミュレーションの幾つかの実施例について説明している。一般的に、エミュレータは、安全なオペコードの既知の組の命令をエミュレートするときに、実行されうる命令４４など、補足的なエミュレーション命令の組を含みうる。
【００７９】
ステップ１１８では、現在の命令アドレスはインクリメントされ、制御はステップ１０８に戻される。
【００８０】
安全なオペコードの例示的実装
この節では、エミュレートされた安全なオペコードの実行のための幾つかの例示的な方法のステップについて説明している。方法１００を再び参照すると、以下の方法は、セキュリティ強化ＣＰＵエミュレータが、ステップ１１６の安全なオペコードの実行をエミュレートしうる方法の実施例になっている。
【００８１】
一般的に、この実施例は、セキュリティ強化ＣＰＵエミュレータが、１つの暗号化キーに対して１つのハードウェアレジスタを、また、１つのファイル暗号化キーに対して１つのハードウェアレジスタを予約し、２つのキーは共に安全な不揮発性メモリに保存され、その不揮発性メモリから取得され、加えて、暗号化／復号化操作、及び／又は通常の算術演算に対しては他のレジスタを予約するように構成されていることを想定している。加えて、この実施例は、実行されるプログラムのソフトウェアコードの中のクリティカルセクション開始及び終了命令を使用して、一又は複数の「クリティカルセクション」の括り処理（ｂｒａｃｋｅｔｉｎｇ）を実装する。この実施例は、強化されたセキュリティ命令を実装するＣＰＵエミュレータによって実装されうるロジックを説明している。これは、暗号化キーを取得するための命令、データに割り当てられたメモリを初期化するための命令、暗号化されたファイルを読み書きするための命令、暗号化されたデータに割り当てられたメモリとの間でデータの読込及び保存を行うための命令、暗号化及び復号化の操作が安全に実行できるように割り込みを不可にし、その後可能にするための命令を含む。暗号化されていないメモリとの間でデータの読込及び保存は、暗号化されたメモリから読み込まれた暗号化されていないデータと共に、ハードウェアＣＰＵレジスタ内のエミュレータによって実行されるように、（ネイティブ命令とは反対に）セキュリティ強化命令として含まれる。
【００８２】
次のオペコードに到達すると、以下の例示的な擬似コードｉｆ−ｔｈｅｎ文がエミュレータにより任意の順番で実行されうる。
【００８３】
Ｉｆ  オペコードが＜＜安全な不揮発性メモリから暗号化キーを読むこと＞＞である。ｔｈｅｎ｛
安全な不揮発性メモリから暗号化キーを読み、予約した暗号化キーレジスタに保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜安全な不揮発性メモリからファイル暗号化キーを読むこと＞＞である。ｔｈｅｎ｛
安全な不揮発性メモリからファイル暗号化キーを読み、予約したファイル暗号化キーレジスタに保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜クリティカルセクション命令を開始すること＞＞である。ｔｈｅｎ｛
割り込みを一時停止し、現在のハードウェアレジスタ（予約された暗号化キーレジスタを除く）を保存し、更に現在のハードウェアレジスタ（予約された暗号化キーレジスタを除く）の内容をゼロにする命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜クリティカルセクション命令を終了すること＞＞である。ｔｈｅｎ｛
現在のハードウェアレジスタ（予約された暗号化キーレジスタを除く）の内容をゼロにし、現在のハードウェアレジスタ（予約された暗号化キーレジスタを除く）を復元し、割り込みを再開する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜メモリを初期化すること＞＞である。ｔｈｅｎ｛
ランダムビットによって、エミュレートされたプログラムデータに割り当てられたＲＡＭを初期化する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されたメモリからレジスタを読み込むこと＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからレジスタ名とメモリロケーションを取り出し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションから指定されたレジスタを読み込み、暗号化キーに対して予約されたハードウェアレジスタ内にある暗号化キーを使用して復号化する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されたメモリにレジスタを保存すること＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからレジスタ名とメモリロケーションを取り出し、暗号化キーに対して予約されたハードウェアレジスタ内にある暗号化キーを使用して、指定されたレジスタを暗号化し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションに当該レジスタの内容を保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されていないメモリからレジスタを読み込むこと＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからレジスタ名とメモリロケーションを取り出し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションから指定されたレジスタを読み込む命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されていないメモリにレジスタを保存すること＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからレジスタ名とメモリロケーションを取り出し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションに指定されたレジスタの内容を保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されたファイルからデータを読むこと＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからファイル名とメモリロケーションを取り出し、安全な不揮発性メモリからファイル暗号化キーを読み、予約したファイル暗号化キーレジスタに保存し、ファイルからのデータを順次ハードウェアレジスタに読み込み、ファイル暗号化キーに対して予約されたハードウェアレジスタ内にあるファイル暗号化キーを使用してレジスタの内容を復号化し、暗号化キーに対して予約されたハードウェアレジスタ内にある暗号化キーを使用してハードウェアレジスタの内容を再暗号化し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションにハードウェアレジスタの内容を保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードが＜＜暗号化されたファイルにデータを保存すること＞＞である。ｔｈｅｎ｛
エミュレートされたマシン語ＲＡＭからファイル名とメモリロケーションを取り出し、安全な不揮発性メモリからファイル暗号化キーを読み、予約されたファイル暗号化キーレジスタに保存し、エミュレートされたプログラムデータに割り当てられたメモリ内の指定されたロケーションからのデータを順次ハードウェアレジスタに読み込み、暗号化キーに対して予約されたハードウェアレジスタ内にある暗号化キーを使用してハードウェアレジスタの内容を復号化し、ファイル暗号化キーに対して予約されたハードウェアレジスタ内にあるファイル暗号化キーを使用してハードウェアレジスタの内容を再暗号化し、指定されたファイルにハードウェアレジスタの内容を保存する命令を実行する。
｝
Ｅｌｓｅ  ｉｆ  オペコードがセキュリティ強化オペコードでない。ｔｈｅｎ｛
「無効なオペコード」を示すエラーメッセージと共にエミュレータを停止する
｝
【００８４】
例示的な利点と強化されたＩＡシステム
この節では、本開示の態様に従って強化されたＩＡシステムとの組み合わせ又は協働作業に適した、様々な例示的なアプリケーションおよびシステムについて概説する。
【００８５】
第１の実施例では、強化されたＩＡシステムアルゴリズム保護に利用されうる。複雑なアルゴリズムが大きなプログラムに対して座標の組を決定する状況を考察している。当該アルゴリズムは、攻撃者によってプログラムバイナリからコピーされるのを保護しなければならない。アルゴリズムの結果を標準的なウィンドウに表示するため、例えば、ホストオペレーティングシステムに送信される間に、アルゴリズム自体は、関連データと共に、本教示に従う強化されたＩＡシステムによって保護されうる。
【００８６】
第２の実施例では、コンピュータプログラムが非常に高価なものになることや、販売できるようにする前に、個別に保護されなければならない重要な技術を含んでいることもありうる。したがって、毎日使うパーソナルコンピュータ上で動作する真に安全なアプリケーションを作る必要がある。安全なアプリケーションは、標準的なウィンドウズインストーラによって配布及びインストールすることが可能である。プログラムの安全な部分は、実行するため、安全な仮想マシンにコピーされうる。これは、実際のアプリケーションコードとアプリケーションの安全な部分によって使用されるメモリを保護する。
【００８７】
第３の実施例では、本教示による強化されたＩＡシステムは、ウィルス及びワームなどのマルウェアからの防御に有用となりうる。安全な仮想マシンは、信頼度の高い暗号化されたコードだけを実行する。したがって、安全な仮想マシンは、コードの安全な部分を攻撃するウィルス及びワームなどに対する完璧な防御を提供する。通常のＯＳ上で動作するアプリケーションの任意の部分は、標準的なオペレーティングシステムの中で重要なファイルを検証する強化されたＩＡシステムによって保護されうる。安全なアプリケーションは、修正されていないアプリケーションが提供されるライブラリを含め、アプリケーションが直接相互作用するライブラリを検証しうる。この保護は、ホストＯＳのコンポーネントが障害される場合でも機能する。
【００８８】
第４の実施例では、埋め込みシステムは、本教示にしたがって、強化されたＩＡシステムを組み込みうる。初期キーは安全に提供されなければならないが、例えば、フライトコンピュータシステムの重要な知的所有権は、プログラムの実行中に安全な仮想マシン内で保護されうる。通常のプログラムは、システムの保護されていない部分で実行されうる。一部は保存データのセキュリティに必要なハードウェアを既に有しているため、初期キーを安全に取得することは、埋め込みシステムの中では更に単純化されうる。例えば、最近のＰｏｗｅｒＰＣベースの設計は、一体型セキュリティプロセッサを備えている。
【００８９】
第５の実施例では、埋め込まれたコードはデスクトップ試験環境で動作するように再コンパイルされてもよく、これによって、重要なソフトウェアコードの開発及び試験用の市販（ＣＯＴＳ）のコンピュータのパワーと有効性を利用する。このような開発及び試験は一般的に、複数のターゲット上でのコンパイルと実行を可能にする大規模なプログラムコードの修正を含む。本教示による強化されたＩＡシステムは、ＣＯＴＳオペレーティングシステムと協調する埋め込み型オペレーティングシステムを提供するソリューションを提示している。これにより、移動中のデータのセキュリティ要件を、同じ作業レベルに欠かせない埋め込みシステムの場合と同じに維持することができる。これはまた、デスクトップ環境を、より正確な実システムとして提示することができる。幾つかの実施例では、ユーザーはユーザーインターフェースのルックアンドフィールを変更することができるが、内部的な動作状況を変更することはできない。デスクトップと埋め込み環境との間での移行は、両システム上で目標とするプロセッサのアーキテクチャを同じに保つことによって促進されうる。
【００９０】
例示的なデータ処理システム
図３に示したように、この実施例は、本開示の態様に従ってデータ処理システム２００（コンピュータとも称される）について記述している。この実施例では、データ処理システム２００は、本教示による強化されたＩＡシステムの態様を実装するための例示的なデータ処理システムである。より具体的には、幾つかの実施例では、データ処理システム（例えば、スマートフォン、タブレット、パーソナルコンピュータ）の実施形態であるデバイスは、上述のシステムなど、安全なオペコードをエミュレートするように構成された安全な仮想マシンを含みうる。
【００９１】
この例示的な実施例では、データ処理システム２００は通信フレームワーク２０２を含む。通信フレームワーク２０２は、プロセッサユニット２０４、メモリ２０６、固定記憶域２０８、通信ユニット２１０、入出力（Ｉ／Ｏ）ユニット２１２、及びディスプレイ２１４の間の通信を提供する。メモリ２０６、固定記憶域２０８、通信ユニット２１０、入出力（Ｉ／Ｏ）ユニット２１２、及びディスプレイ２１４は、通信フレームワーク２０２を介してプロセッサユニット２０４がアクセス可能なリソースの実施例である。
【００９２】
プロセッサユニット２０４は、メモリ２０６に読み込まれる命令を実行する役割を果たす。プロセッサユニット２０４は、特定の実装に応じて、幾つかのプロセッサ、マルチプロセッサコア、又は他の何らかのタイプのプロセッサであってよい。更に、プロセッサユニット２０４は、単一チップ上でメインプロセッサが二次プロセッサと共存する幾つかの異種プロセッサシステムを使用して実装されうる。別の例示的な実施例として、プロセッサユニット２０４は、同じタイプのプロセッサを複数個含む対称型マルチプロセッサシステムであってもよい。
【００９３】
メモリ２０６及び固定記憶装置２０８は、記憶デバイス２１６の一例である。記憶デバイスは、一時的にもしくは恒久的に情報を記憶することが可能な任意のハードウェアであり、その情報は、例えば、限定するものではないが、データ、機能的形態のプログラムコード、及び、他の好適な情報などである。
【００９４】
記憶デバイス２１６は、これらの実施例では、コンピュータ可読記憶デバイスとも称される。これらの実施例で、メモリ２０６は、例えばランダムアクセスメモリ、又は任意の他の適切な揮発性或いは不揮発性の記憶デバイスであってもよい。固定記憶域２０８は、具体的な実装に応じて様々な形態をとりうる。
【００９５】
例えば、固定記憶域２０８は、一又は複数のコンポーネント又はデバイスを包含しうる。例えば、固定記憶域２０８は、ハードドライブ、フラッシュメモリ、書換え型光ディスク、書換え可能磁気テープ、又はそれらの何らかの組み合わせであってもよい。固定記憶域２０８によって使用される媒体はまた、着脱可能なものであってもよい。例えば、着脱可能ハードドライブは固定記憶域２０８向けに使用されうる。
【００９６】
通信ユニット２１０は、これらの実施例では、他のデータ処理システム又はデバイスとの通信を提供する。これらの実施例では、通信ユニット２１０は、ネットワークインターフェースカードである。通信ユニット２１０は、物理的通信リンク及び無線通信リンクのいずれか又はそれら両方を使用することによって、通信を提供しうる。
【００９７】
入出力（Ｉ／Ｏ）ユニット２１２により、データ処理システム２００に接続されうる他のデバイスとのデータの入出力が可能になる。例えば、入出力（Ｉ／Ｏ）ユニット２１２は、キーボード、マウス、及び／又は他の何らかの好適な入力デバイスを通じて、ユーザー入力のための接続を提供しうる。更に、入出力（Ｉ／Ｏ）ユニット２１２は、プリンタに出力を送信しうる。ディスプレイ２１４は、ユーザーに情報を表示するための機構を提供する。
【００９８】
オペレーティングシステム、アプリケーション、及び／又はプログラムに対する命令は、通信フレームワーク２０２を介してプロセッサユニット２０４と通信する記憶デバイス２１６内に配置されうる。これらの例示的な実施例では、命令は、固定記憶装置２０８上で機能形態をとる。これらの命令は、プロセッサユニット２０４による実行のためにメモリ２０６に読み込まれてもよい。種々の実施形態のプロセスは、メモリ２０６などのメモリに配置されうるコンピュータによって実装される命令を使用して、プロセッサユニット２０４によって実施することができる。
【００９９】
これらの命令は、プログラム命令、プログラムコード、コンピュータ可用プログラムコード、又はコンピュータ可読プログラムコードと呼ばれ、プロセッサユニット２０４内のプロセッサによって読み込まれて実行される。種々の実施形態のプログラムコードは、メモリ２０６又は固定記憶域２０８などの種々の物理的な又はコンピュータ可読の記憶媒体上に具現化されうる。
【０１００】
プログラムコード２１８は、選択的に着脱可能であるコンピュータ可読媒体２２０に機能的形態で置かれ、プロセッサユニット２０４によって実行するためにデータ処理システム２００に読み込ませたり、転送したりしてもよい。これらの実施例では、プログラムコード２１８及びコンピュータ可読媒体２２０は、コンピュータプログラム製品２２２を形成する。一実施例では、コンピュータ可読媒体２２０は、コンピュータ可読記憶媒体２２４又はコンピュータ可読信号媒体２２６になりうる。
【０１０１】
コンピュータ可読記憶媒体２２４は、例えば、固定記憶域２０８のパーツであるハードディスクなどのように、記憶デバイス上に転送するための固定記憶域２０８のパーツであるドライブ又は他のデバイスに挿入又は配置される光ディスク又は磁気ディスクなどを含みうる。コンピュータ可読記憶媒体２２４はまた、データ処理システム２００に接続された固定記憶域（例えば、ハードドライブ、サムドライブ、又はフラッシュメモリ）の形態をとりうる。幾つかの例では、コンピュータ可読記憶媒体２２４は、データ処理システム２００から着脱可能でなくてもよい。
【０１０２】
これらの実施例では、コンピュータ可読記憶媒体２２４は、プログラムコード２１８を伝搬又は転送する媒体ではなく、プログラムコード２１８を記憶するために使用される物理的な又は有形の記憶デバイスである。コンピュータ可読記憶媒体２２４は、コンピュータ可読有形記憶デバイス又はコンピュータ可読物理記憶デバイスと呼ばれることもある。すなわち、コンピュータ可読記憶媒体２２４は、人が触れることのできる媒体である。
【０１０３】
別の態様では、プログラムコード２１８は、コンピュータ可読信号媒体２２６を使用して、データ処理システム２００に伝送されうる。コンピュータ可読信号媒体２２６は、例えば、プログラムコード２１８を包含する伝播されたデータ信号であってもよい。例えば、コンピュータ可読信号媒体２２６は、電磁信号、光信号、及び／又は他の任意の適切な種類の信号であってもよい。これらの信号は、無線通信リンク、光ファイバケーブル、同軸ケーブル、有線などの通信リンク、及び／又は他の任意の適切な種類の通信リンクによって送信されうる。すなわち、例示的な実施例では、通信リンク及び／又は接続は、物理的なもの又は無線によるものになりうる。
【０１０４】
幾つかの例示的な実施形態では、プログラムコード２１８は、データ処理システム２００内で使用するため、コンピュータ可読信号媒体２２６を通して、別のデバイス又はデータ処理システムからネットワークを介して固定記憶域２０８へダウンロードされうる。例えば、サーバーデータ処理システム内のコンピュータ可読記憶媒体に保存されているプログラムコードは、ネットワークを介してサーバーからデータ処理システム２００にダウンロードしうる。プログラムコード２１８を提供するデータ処理システムは、サーバーコンピュータ、クライアントコンピュータ、又はプログラムコード２１８を記憶及び伝送できるその他のデバイスとすることができる。
【０１０５】
データ処理システム２００に関して例示されている種々のコンポーネントは、種々の実施形態が実装されうる方式に構造的な限定をもたらすことを意図していない。種々の例示的な実施形態は、データ処理システム２００に関して例示されているコンポーネントの、追加的な、及び／又は代替的なコンポーネントを含むデータ処理システム内に実装されうる。図３に示した他のコンポーネントは、図示されている例示的な実施例と異なる可能性がある。種々の実施形態は、プログラムコードを実行できる任意のハードウェアデバイス又はシステムを用いて実行されうる。一実施例として、データ処理システム２００は、無機コンポーネントと統合された有機コンポーネントを含むことができる、及び／又は人間を除く有機コンポーネント全体からなるとしてもよい。例えば、記憶デバイスは、有機半導体で構成することができる。
【０１０６】
別の例示的な実施例では、プロセッサユニット２０４は、特定の用途のために製造又は構成された回路を有するハードウェア装置の形態をとってもよい。このタイプのハードウェアは、動作を実行するように構成された記憶デバイスからメモリに読み込まれるプログラムコードを必要とせずに、動作を実行しうる。
【０１０７】
例えば、プロセッサユニット２０４がハードウェアユニットの形態をとる場合、プロセッサユニット２０４は、回路システム、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理デバイス、又は幾つかの動作を実行するように構成された何らか他の適切な種類のハードウェアであってもよい。プログラマブル論理デバイスにより、デバイスは任意の数の動作を実行するように構成されている。デバイスは後で再構成することができるか、又は任意の数の作業を実行するように恒久的に構成することができる。プログラマブル論理デバイスの例には、例えば、プログラマブル論理アレイ、フィールドプログラマブル論理アレイ、フィールドプログラマブルゲートアレイ、及び他の適切なハードウェアデバイスが含まれる。このタイプの実装の場合、種々の実施形態のためのプロセスがハードウェアユニット内で実装されることから、プログラムコード２１８は省略されうる。
【０１０８】
更に別の例示的な実施例では、プロセッサユニット２０４は、コンピュータ及びハードウェアユニットに含まれるプロセッサの組み合わせを使用して実行されうる。プロセッサユニット２０４は、プログラムコード２１８を実行するように構成される幾つかのハードウェアユニット及び幾つかのプロセッサを有することがある。図示した実施例の場合、幾つかのハードウェアユニットにおいて幾つかのプロセスを実装することができ、幾つかのプロセッサにおいてその他のプロセスを実装することができる。
【０１０９】
別の実施例では、バスシステムは、通信フレームワーク２０２を実装するために使用されてもよく、システムバス又は入出力バスといった一又は複数のバスから成りうる。当然ながら、バスシステムは、バスシステムに取り付けられた種々の構成要素又はデバイスの間でのデータ送信を行う任意の適切なタイプのアーキテクチャを使用して実装されることがある。
【０１１０】
加えて、通信ユニット２１０は、データの送信、データの受信、又はデータの送受信を行う任意の数のデバイスを含みうる。通信ユニット２１０は、例えば、モデム又はネットワークアダプタ、２個のネットワークアダプタ、又はこれらの何らかの組み合わせであってもよい。更に、メモリは、例えば、メモリ２０６、又は、通信フレームワーク２０２の中に存在しうるインターフェース及びメモリコントローラハブ内に見出されるような、キャッシュでありうる。
【０１１１】
本書で説明されるフロー図及びブロック図は、様々な例示的実施形態によるシステム、方法、及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能性、及び動作を示す。これに関して、フロー図又はブロック図の各ブロックは、一又は複数の特定の論理的機能を実装するための一又は複数の実行可能な命令を含む、コードのモジュール、セグメント、又は部分を表わしうる。いくつかの代替的な実行形態では、ブロック内に記載された機能は図面に記載された順序を逸脱して出現しうることに、留意すべきである。例えば、関連する機能性に応じて、連続して示された２つのブロックの機能が実質的に同時に実行されうるか、又は、それらのブロックの機能は、時に逆順で実行されうる。
【０１１２】
例示的なコンピュータネットワーク
図４に示したように、この実施例はネットワーク、コンピュータネットワーク、ネットワークシステム、分散ネットワークとも称される、一般的なネットワークデータ処理システム３００について説明しており、強化されたＩＡシステムと安全な仮想マシンの例示的な実施形態も含まれうる。例えば、強化されたＩＡシステム、関連するプログラム命令、暗号化キー、及び／又は仮想マシンの様々な態様が、コンピュータネットワークを使用して実装、又は通信されうる。図４は１つの実装例として提供されるもので、異なる実施形態が実装される環境について、いかなる限定をも示唆することを意図していないことを理解されたい。図示されている環境に多数の修正が可能である。
【０１１３】
ネットワークデータ処理システム３００はコンピュータのネットワークで、その各々はデータ処理システム２００、及び他のコンポーネントの実施例である。ネットワークデータ処理システム３００はネットワーク３０２を含んでもよく、これは、ネットワークデータ処理システム３００内で接続された様々なデバイスとコンピュータとの間に通信リンクを提供するように構成された媒体である。ネットワーク３０２は、有線又は無線通信リンク、光ファイバケーブル、及び／又は、ネットワークデバイス間でデータ転送及び／又はデータ通信に適した他の媒体、或いはこれらの任意の組み合わせなどの接続を含みうる。
【０１１４】
例示した実施例では、電子記憶デバイス３０８と同様に、第１のネットワークデバイス３０４及び第２のネットワークデバイス３０６はネットワーク３０２につながっている。ネットワークデバイス３０４及び３０６はそれぞれ、上述のように、データ処理システム２００の例である。例示した実施例では、デバイス３０４及び３０６はサーバーコンピュータとして示されている。しかしながら、ネットワークデバイスは、限定するものではないが、一又は複数のパーソナルコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、タブレット及びスマートフォンなどのモバイルコンピューティングデバイス、ハンドヘルドゲーム機、ウェアラブルデバイス、タブレットコンピュータ、ルーター、スイッチ、ヴォイスゲート、サーバー、電子記憶デバイス、画像デバイス、及び／又は機械的な機能や他の機能を実行しうる他のネットワーク対応ツールなどを含みうる。これらのネットワークデバイスは、有線、無線、光、及び他の適切な通信リンクを介して相互接続されうる。
【０１１５】
加えて、クライアントコンピュータ３１０、クライアントラップトップやタブレット３１２、及び／又はクライアントスマートデバイス３１４などのクライアント電子デバイスは、ネットワーク３０２につながりうる。これらのデバイスの各々は、図３に関して上述されたデータ処理システム２００の実施例である。クライアント電子デバイス３１０、３１２、及び３１４は、例えば、一又は複数のパーソナルコンピュータ、ネットワークコンピュータ、及び／又はパーソナルデジタルアシスタント（ＰＤＡ）などのモバイルコンピューティングデバイス、スマートフォン、ハンドヘルドゲーム機、ウェアラブルデバイス、及び／又はタブレットコンピュータなどを含みうる。図示した実施例では、サーバー３０４は、ブートファイル、オペレーティングシステム画像、及びアプリケーションを、一又は複数のクライアント電子デバイス３１０、３１２、及び３１４に提供する。クライアント電子デバイス３１０、３１２、及び３１４は、サーバーコンピュータ３０４などのサーバーに対して、「クライアント」と称されることがある。ネットワークデータ処理システム３００は、ここに示していない他のデバイスと同様に、より多くの又はより少ないサーバーとクライアントを含むこと、或いはサーバーとクライアントをまったく含まないこともありうる。
【０１１６】
クライアントスマートデバイス３１４は、スマートフォンやタブレットのように、無線通信及びソフトウェアの実行が可能な任意の適切なポータブル電子デバイスを含みうる。一般的に、「スマートフォン」という用語は、典型的な携帯電話よりも進んだコンピューティング能力とネットワーク接続性を有する、任意の適切な携帯型電子デバイスを意味している。通話（例えば、携帯電話ネットワークでの）に加えて、スマートフォンは電子メール、テキスト、及びマルチメディアメッセージの送受信、インターネットへのアクセス、及び／又はウェブブラウザとしての機能が可能である。スマートデバイス（例えば、スマートフォン）は、メディアプレーヤー、パーソナルデジタルアシスタント、デジタルカメラ、ビデオカメラ、及び／又はＧＰＳシステムなどの他の既知の電子デバイスの機能も含みうる。スマートデバイス（例えば、スマートフォン）は、他のスマートデバイス、コンピュータ、または電子デバイスに、近距離無線通信（ＮＦＣ）、ＢＬＵＥＴＯＯＴＨ、ＷｉＦｉ、又はモバイルブロードバンドネットワークなどを介して無線でつながることができる。無線接続は、情報交換可能なモバイルネットワークを形成するため、スマートデバイス、スマートフォン、コンピュータ、及び他のデバイスの間で確立されうる。
【０１１７】
システム３００に読み込まれるプログラムコードは、固定記憶装置２０８などのコンピュータで記録可能な媒体に保存され、使用時にデータ処理システム又は他のデバイスにダウンロードされうる。例えば、プログラムコードは、サーバーコンピュータ３０４のコンピュータで記録可能な媒体上に保存され、クライアント３１０で使用するため、ネットワーク３０２上のクライアント３１０にダウンロードされる。
【０１１８】
ネットワークデータ処理システム３００は、一又は複数の異なるタイプのネットワークとして実装されうる。例えば、システム３００は、インターネット、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、又はパーソナルデータネットワーク（ＰＡＮ）を含みうる。幾つかの実施例では、ネットワークデータ処理システム３００は、インターネットを含み、ネットワーク３０２は相互通信のための一式のプロトコールであるＴＣＰ／ＩＰ（ｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）を使用するネットワーク及びゲートウェイの世界的な集合体を表わしている。インターネットの心臓部には、主要なノード又はホストコンピュータ間の高速データ通信ラインのバックボーンがある。データとメッセージをルーティングするため、数千もの商用、政府機関、教育機関、及びその他のコンピュータシステムが利用可能である。幾つかの実施例では、ネットワーク３００は「クラウド」と称されることがある。このような実施例では、各サーバー３０４は、クラウドコンピューティングノードと称されることがあり、クライアント電子デバイスはクラウドコンシューマーなどと称されることがある。図４は実施例として意図されたもので、例示的な実施形態の構造的な限界を意図しているわけではない。
【０１１９】
更に、本開示は、下記の条項による実施形態を含む。
【０１２０】
条項１．ソフトウェア命令を安全に実行するためのコンピュータシステムであって、
複数のハードウェアレジスタを有する第１のプロセッサと、
メモリと、
前記第１のプロセッサによって、
第２のプロセッサをエミュレートし、
前記第２のプロセッサ上で、前記第２のプロセッサに対してネイティブな複数のネイティブマシン命令の実行をエミュレートし、
前記第２のプロセッサ上で、前記第２のプロセッサに対してノンネイティブで、且つ、オペコードに関連するオペランドデータの暗号化されていない値が、前記第１のプロセッサの一又は複数のハードウェアレジスタだけに保存されることを保証するように構成された一又は複数のオペコードを含む、複数の安全なマシン命令の実行をエミュレートする
ように実行可能な、前記メモリに保存される複数の命令を含むエミュレータプログラムと
を備えるコンピュータシステム。
【０１２１】
条項２．前記エミュレートされた第２のプロセッサは、前記第１のプロセッサとは異なるタイプである、条項１に記載のコンピュータシステム。
【０１２２】
条項３．前記エミュレートされた第２のプロセッサは、前記第１のプロセッサよりも少ないレジスタを有する、条項２に記載のコンピュータシステム。
【０１２３】
条項４．前記第１のプロセッサと通信するランダムアクセスメモリ、及び前記ＲＡＭに保存されたソフトウェアプログラムを更に含み、前記ソフトウェアプログラムは前記エミュレートされた第２のプロセッサ上で動作するようにコンパイルされ、一又は複数の前記安全なマシン命令を含む、条項１に記載のコンピュータシステム。
【０１２４】
条項５．前記ソフトウェアプログラムは暗号化されている、条項４に記載のコンピュータシステム。
【０１２５】
条項６．前記エミュレータプログラムの前記命令は、前記安全なマシン命令の前記オペコードの復号化されたバージョンが、前記第１のプロセッサの一又は複数の前記ハードウェアレジスタだけに保存されることを保証するため、前記第１のプロセッサによって更に実行可能である、条項１に記載のコンピュータシステム。
【０１２６】
条項７．前記エミュレータプログラムの前記命令は、ＲＡＭ前記オペランドデータをＲＡＭに保存する前に前記オペランドデータを暗号化し、前記オペランドデータがＲＡＭから取り出された後に前記オペランドデータを復号化するため、前記第１のプロセッサによって更に実行可能である、条項６に記載のコンピュータシステム。
【０１２７】
条項８．コンピュータシステムに実装される方法であって、
メモリから暗号化されたマシン命令を取り出すこと、
前記取り出したマシン命令を復号化し、前記復号化された命令を第１のプロセッサの第１のハードウェアレジスタに保存すること、及び
エミュレートされた第２のプロセッサを使用して、前記復号化された命令の実行をエミュレートすること
を含み、前記復号化された命令は、前記エミュレートされた第２のプロセッサに対してノンネイティブで安全な複数の命令の１つである、方法。
【０１２８】
条項９．前記復号化された命令の実行をエミュレートすることは、前記復号化された命令に関連するオペランドの値を変更することを含む、条項８に記載の方法。
【０１２９】
条項１０．前記オペランドの前記値を変更することは、復号化された値を生成するために前記オペランドを復号化すること、及び前記復号化された値を前記第１のプロセッサの第２のハードウェアレジスタに保存することを含む、条項９に記載の方法。
【０１３０】
条項１１．前記復号化された値を保存することは、前記復号化された値に加えて、ランダム情報を保存することを含む、条項１０に記載の方法。
【０１３１】
条項１２．前記オペランドの前記値を変更することは、一又は複数の暗号化されたデータのブロックを生成するため新しい値を決定して暗号化すること、及び前記一又は複数の暗号化されたデータのブロックを前記メモリに保存することを更に含む、条項１０に記載の方法。
【０１３２】
条項１３．前記新しい値を暗号化することは、選択された量のランダムデータを前記新しい値で暗号化することを含む、条項１２に記載の方法。
【０１３３】
条項１４．前記取り出したマシン命令を復号化することは、前記第１のプロセッサの第３のハードウェアレジスタに保存された暗号化キーを使用することを含む、条項８に記載の方法。
【０１３４】
条項１５．ソフトウェア命令を安全に実行するためのコンピュータシステムであって、
複数のハードウェアレジスタを有する第１のプロセッサと、
メモリと、
前記メモリから暗号化されたマシン命令を取り出し、
前記取り出したマシン命令を復号化し、前記復号化された命令を第１のプロセッサの一又は複数の前記ハードウェアレジスタに保存し、
前記エミュレートされた第２のプロセッサを使用して前記復号化された命令の実行をエミュレートする
前記第１のプロセッサによって実行可能な前記メモリ内に保存された複数の命令を含むエミュレータプログラムとを含み、
前記復号化された命令は、前記エミュレートされた第２のプロセッサに対してノンネイティブで安全な複数の命令の１つである、コンピュータシステム。
【０１３５】
条項１６．前記復号化された命令の実行をエミュレートすることは、前記命令に関連するオペランドの値を変更することを含む、条項１５に記載のコンピュータシステム。
【０１３６】
条項１７．前記オペランドの前記値を変更することは、復号化された値を生成するために前記オペランドを復号化すること、及び前記復号化された値を前記第１のプロセッサの一又は複数の前記ハードウェアレジスタに保存することを含む、条項１６に記載のコンピュータシステム。
【０１３７】
条項１８．前記復号化された値を保存することは、前記復号化された値に加えて、ランダム情報を保存することを含む、条項１７に記載のコンピュータシステム。
【０１３８】
条項１９．前記オペランドの前記値を変更することは、一又は複数の暗号化されたデータのブロックを生成するため新しい値を決定して暗号化すること、及び前記一又は複数の暗号化されたデータのブロックを前記メモリに保存することを更に含む、条項１７に記載のコンピュータシステム。
【０１３９】
条項２０．前記新しい値を暗号化することは、選択された量のランダムデータを前記新しい値で暗号化することを含む、条項１９に記載のコンピュータシステム。
【図１】
2018014081.tif 000003
【図２】
2018014081.tif 000004
【図３】
2018014081.tif 000005
【図４】
2018014081.tif 000006
【外国語明細書】
2018014081000001.pdf
2018014081000002.pdf
2018014081000003.pdf
2018014081000004.pdf