(57)【要約】仮想マシンデバイス１００は、特定の命令を実行するように各々が構成される複数のオペレーションルーチン１２２、１２４、１２６と、符号化された命令を受信するように構成されるセレクタ１１０とを備え、前記符号化された命令は、コード符号化により平文命令を符号化することによって取得され、前記セレクタ１１０は、前記複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択してアクティブにするように構成され、前記対応するオペレーションルーチンは、前記符号化された命令に対応する前記平文命令を実行するように構成され、前記セレクタ１１０は、符号化された命令をルックアップして前記対応するオペレーションルーチンを選択するためのルックアップ手段を備える。
2015504279.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンデバイスであって、
−  特定の命令を実行するように各々が構成される複数のオペレーションルーチンと、
−  符号化された命令を受信するように構成されるセレクタであって、平文命令をコード符号化により符号化することによって得られる前記符号化された命令を受信するように構成されるセレクタと、
を備え、
−  前記セレクタは、前記複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択してアクティブにするように構成され、前記対応するオペレーションルーチンは、前記符号化された命令に対応する前記平文命令を実行するように構成され、
−  前記セレクタは、符号化された命令をルックアップして前記対応するオペレーションルーチンを選択するためのルックアップ手段を備える、仮想マシンデバイス。
【請求項２】
前記符号化された命令は、前記平文命令とともに使用するための即時データと一緒に前記平文命令を前記コード符号化により符号化することによって得られ、前記ルックアップ手段は、前記符号化された命令をルックアップして前記即時データを取得するように構成され、前記セレクタは、前記即時データにより前記対応するオペレーションルーチンをアクティブにするように構成される、請求項１に記載の仮想マシンデバイス。
【請求項３】
前記符号化された命令は、前記平文命令を前記即時データと一緒にブロック暗号の単一のブロックで符号化することによって得らえたものである、請求項１又は２のいずれか１項に記載の仮想マシンデバイス。
【請求項４】
前記即時データは、前記コード符号化により前記平文命令と一緒に符号化される前に、入力符号化を用いて符号化される、請求項２又は３に記載の仮想マシンデバイス。
【請求項５】
オペレーションルーチンによって使用するための追加のデータを受信するように構成された入力再コーダを備え、前記追加のデータは、入力符号化により符号化され、前記入力再コーダは、入力復号化により前記データを復号化し、内部符号化により符号化するように構成される、請求項１乃至４のいずれか１項に記載の仮想マシンデバイス。
【請求項６】
オペレーションルーチンによって生成されるデータ結果を受信するように構成された出力再コーダを備え、前記出力再コーダは、内部復号化により復号化された前記データ結果を再コード化して、出力符号化により符号化されたデータ結果にする、請求項１乃至５のいずれか１項に記載の仮想マシンデバイス。
【請求項７】
前記対応するオペレーションルーチンは、第１の符号化により符号化されたデータを受信し、第２の内部符号化により符号化された結果を生成するように構成され、該符号化された結果は、
−  前記符号化されたデータを、第１の復号化により復号化するステップと、
−  前記符号化された命令に対応する前記平文命令を前記の復号化された符号化されたデータに対して実行して、結果を取得するステップと、
−前記結果を第２の内部符号化により符号化するステップと
によって取得される、請求項１乃至６のいずれか１項に記載の仮想マシンデバイス。
【請求項８】
第１の内部符号化により符号化されたデータは、符号化された即時データと、当該仮想マシンのメモリから取得される内部符号化により符号化されたデータと、当該仮想マシンのレジスタから取得される内部符号化により符号化されたデータとのうちのいずれか１つである、請求項７に記載の仮想マシンデバイス。
【請求項９】
前記対応するオペレーションルーチンは、符号化されたデータをルックアップして結果を取得するように構成されたルックアップ手段として構成される、請求項１乃至８のいずれか１項に記載の仮想マシンデバイス。
【請求項１０】
前記複数のオペレーションルーチンは、再コード化オペレーションを備え、該再コード化オペレーションは再コード化命令に対応し、該再コード化オペレーションは、第１の符号化により符号化されるデータを再コード化して、第２の符号化により符号化さえるデータにするように構成される、請求項１乃至９のいずれか１項に記載の仮想マシンデバイス。
【請求項１１】
前記平文命令はｊａｖａのバイトコードに対応する、請求項１乃至１０のいずれか１項に記載の仮想マシンデバイス。
【請求項１２】
コード符号化により命令を符号化し、オプションとして入力符号化によりデータを符号化するように構成される命令エンコーダと、
請求項１乃至１１のいずれか１項に記載の仮想マシンデバイスと
を備える、分散実行システム。
【請求項１３】
仮想マシン方法であって、
−  符号化された命令を受信するステップであって、該符号化された命令は、コード符号化により平文命令を符号化することによって取得される、ステップと、
−  前記符号化された命令をルックアップして、複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択するステップであって、前記対応するオペレーションルーチンは、前記符号化された命令に対応する平文命令を実行するように構成される、ステップと、
−  前記対応するオペレーションルーチンをアクティブにするステップと
を備える、方法。
【請求項１４】
コンピュータ上で実行されると、請求項１３に記載のステップの全てを実行するように適合されたコンピュータプログラム手段を備えたコンピュータプログラム。
【請求項１５】
コンピュータ読取可能媒体上に具現化される、請求項１４に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信した一連の命令を実行するように構成される仮想マシンデバイスに関する。本発明は、受信した一連の命令を実行するために構成された方法にも関する。
【背景技術】
【０００２】
近年では、クラウドコンピューティングが、消費者のインターネットサービスから着想を得た新たな消費及び配信モデルとなっている。クラウドコンピューティングは、ＩＴプロビジョニングのサービスモデルであり、しばしば仮想的な分散コンピューティング技術に基づいており、典型的にはオンデマンドである。クラウドコンピューティングの紹介については、欧州ネットワーク情報セキュリティ庁（ＥＮＩＳＡ：European  Network  and  Information  Security  Agency）による２００９年１１月の「クラウドコンピューティング：情報セキュリティに関わる利点、リスクおよび推奨事項（Cloud  computing：benefits,  risks  and  recommendations  for  information  security）」を参照されたい。
【０００３】
クラウドコンピューティングアーキテクチャの利点には、高度に抽象化されたリソース、ほぼ瞬間的なスケーラビリティとフレキシビリティ、ほぼ瞬間的なプロビジョニング、共有リソース（例えばハードウェア、データベース、メモリ）、通常「都度払いの」課金システムを用いる「サービスオンデマンド」、例えばＷｅｂサービスＡＰＩを介したプログラムの管理が含まれる。クラウドコンピューティングにより、企業は、新たなインフラストラクチャに投資する必要なく、要求に応じて計算能力又は記憶能力を瞬間的にスケールアップすることができる。
【０００４】
クラウドコンピューティングは、３つのサービスモデル、すなわち、ソフトウェア・アズ・ア・サービス（ＳａａＳ）、プラットフォーム・アズ・ア・サービス（ＰａａＳ）及びインフラストストラクチャ・アズ・ア・サービス（ＩａａＳ）を組み込むことによって、インフラストラクチャのレイヤ化された概念をサポートする。
【０００５】
クラウドのインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）は、サービスＡＰＩを通じて制御され得る仮想マシンや他の概念的なハードウェア及びオペレーティングシステムを提供する。加入者に提供される能力は、処理、ストレージ、ネットワーク及び消費者が任意のソフトウェアを展開して実行することが可能であり、オペレーティングシステムとアプリケーションを含むことができる他の基本的なコンピューティングリソースを設定することである。ＩａａＳをハードウェア・アズ・ア・サービスとしてみる場合、ＩａａＳを理解するのはより容易である。我々は、ハードウェア・アズ・ア・サービスを、（ｉ）サーバに基づいて仮想マシンを提示する計算・アズ・ア・サービス（ＣａａＳ：Computation  as  a  Service）と、（ｉｉ）データストレージ空間を提示するデータ・アズ・ア・サービス（ＤａａＳ）とに分類する。
【０００６】
クラウドのプラットフォーム・アズ・ア・サービス（ＰａａＳ）では、顧客は、遠隔で展開・設定可能なＡＰＩを使用して、新たなアプリケーションを開発することができる。提示されるプラットフォームは、開発ツール、設定管理及び展開用のプラットフォームを含む。顧客に提供される能力は、クラウドのインフラストラクチャ上で、プロバイダによってサポートされるプログラミング言語及びツールを使用して作成される顧客作成又は取得アプリケーションを展開することである。ＰａａＳモデルは典型的に、ＩａａＳより１つ上のレベルで動作する。ＯＳ環境及びアプリケーション展開フレームワークは既に提示されているが、ＰａａＳはアプリケーション環境で動作する。
【０００７】
ソフトウェア・アズ・ア・サービス（ＳａａＳ）は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションの使用を可能にする、顧客に提供されるソフトウェアである。アプリケーションは、様々なクライアントデバイスから、ウェブブラウザのようなシンクライアント・インタフェースを通じてアクセス可能である。顧客は、ネットワーク、サーバ、オペレーティングシステム、ストレージ又は限られたユーザ固有のアプリケーション構成設定の可能な例外を伴う個々のアプリケーションの能力をも含め、基礎となるインフラストラクチャを管理せず、制御もしない。
【０００８】
クラウドコンピューティングの１つの特徴は、例えばマシン利用への投資に対する利益を最大にするように、異なるアプリケーション間でリソースを仮想化して共有する能力である。各アプリケーションが自身のサーバ上で動作する非仮想化環境とは異なり、仮想化は、１つのホストマシンが複数の独立のオペレーティングシステム及びアプリケーションをサポートするように仮想化されることを可能にする。これは、例えばハードウェアの入手やメンテナンスコストについての加入者のコストの節約につながる可能性がある。
【０００９】
仮想化は、ソフトウェアのシミュレーション及び／又は他のソフトウェアが動作しているハードウェアのシミュレーションである。ＶＭ（virtual  machine）と呼ばれる仮想マシンは、仮想化によって作成されるシミュレート環境である。仮想マシンは、ハイパーバイザとも呼ばれる仮想マシンモニタ（ＶＭＭ）によって管理される。ハイパーバイザは、ホストマシン上のゲストＯＳを管理し、ゲストＯＳと物理的なハードウェアとの間の命令フローを制御する仮想化コンポーネントである。
【００１０】
クラウドコンピューティングは、ネットワーク、サーバ、ストレージ又はソフトウェアアプリケーションのようなコンピューティングリソースを配信するための新たなモデルである。クラウドコンピューティングはますます使用される。しかしながら、健康管理のような繊細なデータを扱う特定の市場セクタは、プライバシ及びセキュリティ上の課題のためにためらっている。クラウド内に繊細なデータ及び／又はアプリケーションを格納することには、法的なビジネス上の倫理的問題が生じる。データの機密性だけでなく、ソフトウェアの機密性も課題である。例えばコモディティのパブリックなクラウドに格納されるアプリケーションが、標準的な仮想マシン（ＶＭ）により実行される場合、データが開示され、アプリケーションの実行が観測される可能性がある。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】“Cloud  computing：benefits,  risks  and  recommendations  for  information  security”、European  Network  and  Information  Security  Agency（ENISA）、２００９年１１月
【非特許文献２】S.  Chow，P.  Eisen，H.  Johnson，及びP.C.  van  Oorschot，“A  White-Box  DES  Implementation  for  DRM  Applications”，Computer  Science  2003，the  book  Digital  Rights  Management  of  the  Lecture  Notes  ２００２年［４２，４３］
【発明の概要】
【発明が解決しようとする課題】
【００１２】
クラウドコンピューティングの利点はしばしば、信頼性、プライバシ及びセキュリティに関する課題に悩まされる。これは、非常に繊細な健康上のデータを扱い、信頼性が非常に重要な役割を担うヘルスケアの領域の場合に特にそうである。患者データの多くのレコードの開示を含む、クラウドにおけるプライバシの侵害は、多くの企業及びヘルスケアプロバイダにとって重大なことである。単にデータを暗号化して暗号化されたデータをクラウド上に格納することは、データの処理を可能にするために、その鍵もクラウド上に格納されなければならないので、多くの制限を生じる。これは、潜在的に悪用可能な脆弱性を生じる。さらに、クライド上でデータ処理を行うアプリケーションを動かすことによって、多くの企業は、そのアルゴリズム及び方法が開示されることになり、そして顕著な特徴及び競争上の優位性を失うことになることについて悩まされる（「クリニカル決定サポート」（ＣＤＳ）の影響アルゴリズムとナレッジを例にとる）。上述の問題により、多くの企業及び公的機関はまだ、クラウドコンピューティングの利点を用いることをためらい、クラウドソリューションの信頼性、機密性及びセキュリティを向上させるソリューションを待っている。
【課題を解決するための手段】
【００１３】
有利な仮想マシンデバイスは、特定の命令を実行するように各々が構成される複数のオペレーションルーチンと、符号化された命令を受信するように構成されたセレクタとを備える。符号化された命令は、コード符号化（code  encoding）により平文命令（plane  instruction）を符号化することによって取得されたものである。セレクタは、複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択してアクティブにするように構成される。対応するオペレーションルーチンは、符号化された命令に対応する平文命令を実行するように構成される。セレクタは、符号化された命令をルックアップするルックアップ手段を備え、対応するオペレーションルーチンを選択する。
【００１４】
「平文」とは、「プレーンテキスト」、すなわち符号化されていないテキスト又は暗号化されていないテキストを指す。例えば平文コードは、符号化されていない／暗号化されていないコードである。
【００１５】
典型的に、セレクタは、一連の暗号化された命令を受信するように構成されることがあり、この一連の暗号化された命令は、一連の平文命令をコード符号化（code  encoding）により暗号化することによって取得される。セレクタは次いで、上記一連の暗号化された命令のうち次の暗号化された命令を反復的に選択し、複数のオペレーションルーチンのうち対応するオペレーションルーチンをアクティブにするように構成される。ここで、対応するオペレーションルーチンは、選択された次の暗号化された命令に対応する平文命令を実行するように構成される。
【００１６】
仮想化の公知のアプローチでは、クラウド上の仮想マシンのデータ及び実行は、外部の敵と例えばクラウドサービスプロバイダのような悪意ある内部関係者との双方によって観測可能である。この可観測性及び計算プロセスの情報開示は、以下のことが保証されることを望む場合に問題となり得る。  
１．クラウド上のデータの機密性（例えばクラウドにアップロードされた患者の健康上のデータ）
２．プログラムにおけるアルゴリズムの知的財産権の保護を保証するため、仮想化されたプログラム又はオペレーティングシステムのプライベートな実行
３．データを特定のＶＭ及びアプリケーションへバインドして、指定されたＶＭ及びアプリケーションのみがクラウド上に格納されたデータを復号することができるようにすること。
【００１７】
本発明は、クラウド上のデータ、アプリケーション及びクラウド上で動作する仮想マシンの機密性及び不観測性、並びに仮想マシン及びアプリケーションへのデータのバインドについての技術的向上に対処する。
【００１８】
データ及びコードは、入力及びコードから観測可能なナレッジがないか、限定的なナレッジしかないようにＶＭにリンクされる。また出力も、ＶＭの出力から抽出されるナレッジも限定されるようにＶＭにリンクされる。
【００１９】
本発明は、データ及び／又はアプリケーションコードを、暗号化されたクラウド上に保持することによって、クラウドのユーザが、クラウド上のプライバシ侵害のリスクを大幅に低減することを可能にする。暗号化鍵はクラウド上において、これらの鍵を隠し、仮想マシン及びその上で動作するアプリケーションへとバインドすることで保護される。アプリケーションの入力、意味及び出力は再構築することが難しい（困難である）。プログラムの意味を再構築することは、一般に面倒なタスクである。コード化及び再コード化を通じてアプリケーションへリンクされるＶＭ、すなわち、命令の意味にアクセスせずにリンクされるＶＭの場合、これには何年もかかる可能性がある。
【００２０】
本発明及び好ましい実施形態の多くは、符号化（上記のコード符号化、入力符号化、出力符号化、内部符号化等）を使用する。符号化は、ある範囲の整数を同じ範囲へとマッピングする双射（bijection）（双射関数、すなわち１対１対応としても知られる）である。その範囲は典型的には０（ゼロ）で開始し、典型的に２マイナス１の累乗まで及ぶ。整数はデータ又は命令を表すことがある。符号化の反対が復号化として示される。
【００２１】
符号化は、例えば特定の典型的には固定の鍵を用いる暗号化を含む。例えば符号化は、例えばブロック暗号（block  cipher）のような暗号の実装としてもよい。好ましくは、符号化として使用されるホワイトボックスの暗号の実装が使用される。
【００２２】
符号化の重要なプロパティは、符号化がテーブルＴで構成される場合に、これらが新しいテーブルへとシームレスに一緒に結合することである。符号化がＯ（オー）として示される場合、新たなテーブルは（Ｏ°Ｔ，Ｔ°Ｏ−１)のうちの１つであろう。同じことがＷＢとして示されるテーブルネットワークについても当てはまり、これは（ＷＢ［Ｅｋ］°Ｔ，Ｔ°ＷＢ［Ｄｋ］）のうちのいずれか１つとなる。
【００２３】
有利には、符号化はテーブルとして実装される。テーブルを使用することの利点は、テーブルとしても表される後続のオペレーションが実行されるべき場合、これらのテーブルを新たなテーブルへと結合することができ、この新たなテーブルは、一方のテーブルを他方の後に適用することによって得られる。
【００２４】
符号化は、特定の鍵についての暗号化として表されることもある。これは諸実装をいくらか容易にする。例えばコード符号化は、暗号化鍵を用いる暗号化として得られることがある。
【００２５】
ルックアップテーブル手段は、好ましくはルックアップテーブルである。しかしながら、このようなテーブルは様々な形式で実装されてもよく、例えばｉｆ／ｔｈｅｎ／ｅｌｓｅのステートメントの長いシーケンスとして又は多くの分岐を用いるケースステートメントとして実装されてもよい。
【００２６】
一実施形態において、ルックアップ手段は、符号化された命令をインデックスとしてとり、正しい対応するルーチンへのポインタを作成する。対応するオペレーションルーチンへのポインタを使用して、対応するオペレーションをアクティブにしてもよい。
【００２７】
更なる実施形態において、即時データ（immediate  data）も、対応するルーチンによる使用のために生成される。
【００２８】
ルックアップ手段は、ルックアップテーブル、例えばインデックスに従ってソートされてルックアップされるべきアイテムのリストである可能性がある。上記の場合、ルックアップテーブルは、符号化された命令に従ってソートされる、正しい対応するルーチンへのポインタのリストである可能性がある。この方法では、テーブルは１つの列のみを必要とする。いくつかの符号化された命令が使用される場合、これらの命令は、ダミーポインタ、例えばオールゼロのポインタを用いて表されることがある。
【００２９】
ルックアップ手段は、２つ（又はそれ以上）の列を有するテーブルとしてもよい。例えば第１の列がインデックス、例えば符号化された命令を含み、第２の列がルックアップされるオブジェクト、例えば対応するポインタを含むテーブルとしてもよい。
【００３０】
一実施形態において、ルックアップテーブルは、平文命令を受信するように構成される標準の仮想マシンデバイスのルックアップテーブルを再順序付けすることによって取得されることもある。興味深いことに、明示的な暗号解除又は復号化オペレーションは、符号化された命令の復号化を、正しいオペレーションを得るための命令の解析と組み合わせることによって回避される。
【００３１】
符号化された命令は、命令を符号化することだけで得られることがある。これは小さなルックアップ手段を提供する。例えば２５６の命令があり得る場合、ルックアップ手段を、ポインタのサイズの２５６倍のサイズのルックアップテーブルとして実装してもよい。
【００３２】
しかしながら、符号化された命令は、平文命令を即時データと一緒に符号化することによって得らえることもある。これは、より大きなルックアップ手段を提供することになる。例えば即時データが１バイトである場合、次いでルックアップ手段を、ポインタ＋１のバイトサイズの２５６×２５６倍のサイズのルックアップテーブルとして実装してもよい。
【００３３】
これは、ルックアップ手段を拡大することになるが、難読化の量は大幅に向上する。命令とテーブル内の特定の行との間には固定の関係は存在しないことになる。
【００３４】
即時データは、命令が機能すべきコードストリーム内に含まれるデータであり、定数、パラメータ又は命令が対応するオペレーションが機能すべきオペランドを含む。
【００３５】
即時データは、例えば否定オペレーションのための単一のデータアイテムを含んでもよい。即時データは、例えば追加のための例えば２つのデータアイテムのような、複数のデータアイテムを含んでもよい。
【００３６】
例として、符号化された命令は、平文命令を即時データとともにブロック暗号の単一のブロックで符号化することによって得られた。
【００３７】
符号化された命令は、即時データの第２の部分は用いずに、即時データの第１の部分を上記命令とともに符号化することによって得られることもあることに留意されたい。これにより、テーブルのサイズは小さく保たれることになる。第２の部分は入力符号化により符号化され得る。入力符号化は内部符号化へと再コード化され得るが、命令上のままであってもよく、この場合オペレーションルーチンは、入力符号化により符号化された第２の部分を受信するように適合され得る。特に、即時データがコードチャネルの一部、すなわちコードストリーム又はコードシーケンスである場合、後者の選択肢は、コードを解析する必要性を回避するので好ましい。
【００３８】
即時データは、コード符号化により平文命令とともに符号化される前に、入力符号化により符号化される可能性がある。
【００３９】
一実施形態において、仮想マシンデバイスは、オペレーションルーチンによる使用のための追加のデータを受信するように構成された入力再コーダ(recoder)を備える。この追加のデータは、入力符号化により符号化されており、入力再コーダは、入力復号化によりデータを復号化し、内部符号化により符号化するように構成される。例えば入力再コーダは、符号化された追加のデータをルックアップして、テーブル内で再符号化された追加のデータを見つけるためのルックアップ手段を含み得る。例えばコードは、医療データ、例えばピクチャを分析するための専用のアルゴリズム（proprietary  algorithm）を表すことがあり、追加のデータは、医療データ自体を表すことがある。
【００４０】
入力再コーダは、オペレーションルーチンによる使用のためのオペランドを受信するように構成され得る。入力再コーダは、入力暗号解除鍵を用いて暗号解除するように構成された暗号解除器を備えることがある。暗号解除器はホワイトボックス暗号解除器とすることができる。入力再コード化の結果は典型的に、仮想マシンデバイスのメモリ内に記憶される。
【００４１】
一実施形態において、仮想マシンデバイスは、オペレーションルーチンによって生成されるデータ結果を受信するように構成される出力再コーダを備える。出力再コーダは、内部復号化により復号化されたデータ結果を再コード化して、出力符号化により符号化されるデータ結果にするように構成される。
【００４２】
入力再コーダ、出力再コーダ、内部再コーダ等のような再コーダは、最初に復号化オペレーションを適用し、次いで符号化オペレーションを適用することによって得られる。これらの２つのオペレーションを結合して、単一のオペレーションにしてもよく、例えばルックアップテーブルのような単一のルックアップ手段としてもよい。
【００４３】
出力再コーダは、出力暗号化鍵により暗号化するように構成された暗号化器を備えることが可能である。この暗号化器はホワイトボックス暗号化器とすることができる。
【００４４】
データ及びアルゴリズムに関するＩＰの開示のリスクは、符号化を、ＶＭの（オプションの）入力関数、ＶＭのデコーダ又は／及びＶＭの(オプションの)出力関数とマージすることにより減少する。データ及びアプリケーションはクラウド上で暗号化されるが、その鍵は知られない（符号化が暗号化に対応する場合）。ランダムな双射を介するような難読化の場合、データアイテム「ｋ」は単に、攻撃者に対して知られていない難読化の設定のｋ番目の要素であるので、攻撃者はそのデータアイテム「ｋ」が何を表すのかわからない。
【００４５】
一実施形態において、複数のオペレーションルーチン及び／又は特に対応するオペレーションルーチンは、第１の符号化により符号化されたデータを受信し、第２の内部符号化により符号化された結果を生成するように構成される。符号化された結果は、
−  符号化されたデータを、第１の復号化により復号化するステップと、
−  結果を得るため、符号化された命令に対応する平文命令を、上記の復号化された符号化データに対して実行するステップと、
−  その結果を、第２の内部符号化により符号化するステップと、
によって得られる。
【００４６】
好ましくは、上記の復号化するステップ、実行するステップ及び符号化するステップは、単一のテーブル又はテーブルネットワークへと結合される。
【００４７】
第１の符号化は内部符号化としてよい。第２の内部符号化は、第１の符号化と同じ符号化としてよい。第１の符号化は入力符号化としてもよい。
【００４８】
一実施形態において、仮想マシンデバイスは、１つ又は複数の再コード化命令を備える。例えばこれらの命令を、テーブル｛Ｏ−１ｋ及びＯｌ｝、｛Ｏｋ及びＯ−１ｌ｝の構成とするか、テーブルネットワーク｛Ｗｂ［Ｅｋ］及びＷｂ［Ｄｌ］｝、｛Ｗｂ［Ｅｌ］及びＷｂ［Ｄｋ］｝の構成としてもよい。
【００４９】
第１の符号化により符号化されたデータは、次のうちのいずれか１つである。すなわち、符号化された即時データと、仮想マシンのメモリから得られる内部符号化により符号化されたデータと、仮想マシンデバイスのレジスタから得られる内部符号化により符号化されたデータと、入力符号化により符号化された受信データとのうちのいずれか１つである。
【００５０】
対応するオペレーションルーチンは、ルックアップ手段、例えばルックアップテーブルとして又はテーブルネットワークとして実装され得る。ルックアップ手段は、符号化されたデータをルックアップして結果を取得するように構成される。そのようなテーブルは、全ての可能な入力についてオペレーションの結果を列挙することによって編纂され得る。
【００５１】
オペレーションが無制限のジャンプである場合、ルックアップテーブルは必要とされないことがある。有利には、コード及び／又はデータの符号化を、アドレス空間の符号化と組み合わせてもよいことに留意されたい。これにはアドレスの符号化と、コードの対応する再順序付けしか必要とされない。オペレーションを作り上げているコードが該コードを越えて広がり得るという結果を有する。条件付きジャンプのオペレーションは、その条件が関連するオペランドを入力として取るルックアップ手段、及びそのジャンプを行うべきかどうか（又は入力を与えたターゲットのテーブルであるか）を指示する単一の出力ビットを含むことがある。
【００５２】
オペレーションが、即時データのようなデータ又はメモリ／レジスタからのデータに対して作用するとき、そのオペレーションをそのようなデータ全てについて実行することによってテーブルが生成され得る。即時データに対する符号化を除去する復号化テーブルがこのテーブルに先行し得る。このテーブルの後に、例えば内部符号化のような符号化が続くことがある。
【００５３】
オペレーションがデータの移動又は書き込みを必要とする場合、そのようなオペレーションは、使用される場合、アドレス符号化を考慮して通常通り行われることがある。
【００５４】
平文命令はｊａｖａ（登録商標）のバイトコードに対応し得る。また「ｊａｖａカップ（ｃｕｐ）」も使用され得る。
【００５５】
本発明の更なる態様は、コード符号化により命令を符号化し、オプションで入力符号化によりデータを符号化するように構成される命令エンコーダである。命令エンコーダは、コンパイラの一部とすることができ、又は好ましくは例えばポストリンクステップの一部のようなリンカの一部とすることができる。ポストリンクステップは、少なくとも２つの鍵を使用することがあり、その１つは即時データ用に、もう１つは命令を暗号化するために使用することがあることに留意されたい。
【００５６】
例えば命令の即時データを、１つ又は複数の入力鍵により暗号化してもよく、これが行われた後、暗号化された即時データを含む命令が、命令鍵によって暗号化される。
【００５７】
本発明の更なる態様は、命令エンコーダと仮想マシンデバイスとを備える分散実行システムである。
【００５８】
本発明の更なる態様は、仮想マシンの方法に関する。仮想マシンの方法は、平文命令をコード符号化により符号化することによって得られる符号化された命令を受信するステップと、該符号化された命令をルックアップして、複数のオペレーションルーチンのうち対応するオペレーションルーチンであって、上記符号化された命令に対応する平文命令を実行するように構成される対応するオペレーションルーチンを選択するステップと、該対応するオペレーションルーチンをアクティブにするステップとを備える。
【００５９】
一実施形態において、上記方法は、一連の平文命令のそれぞれ１つをコード符号化により符号化すること、例えば一連の平文命令のそれぞれ１つをコード暗号化鍵により暗号化することによって、一連の暗号化された命令を取得するステップを備える。
【００６０】
いくつかのクラウドコンピューティングの使用ケースも可能である。例えばデータをクラウドへシフトすることは、プライバシ保護を保ちつつ、ハードウェアを低減させる。例えば患者のデータのようなプライバシの繊細な情報をクラウドに格納することができる。繊細なデータの漏洩を回避するために、データの処理全体が、暗号化された領域内で、すなわち暗号化された命令及びデータを使用することによって実行され得る。好ましくはＶＭの入力データと出力データの双方が暗号化される。
【００６１】
分散実行環境は、仮想マシンデバイスからの結果を受信するレシーバも含むことがある。レシーバは、仮想マシンデバイスの出力符号化を除去する出力デコーダを含むことがある。例えばレシーバを、医療データを処理するのに仮想マシンデバイスを使用する病院に配置してもよい。
【００６２】
仮想マシンデバイスは、電子デバイス内、特にサーバ内で具現化されることがある。仮想マシンデバイスは、モバイルデバイス、例えばモバイルフォンやセットトップボックス、コンピュータ、タブレット等内で具現化されることもある。
【００６３】
仮想マシンデバイスは、セキュリティトークンにおいて具現化されることがある。セキュリティトークンは仮想マシンデバイスを備え、チャレンジレスポンスプロトコルを実行するコード及びチャレンジを受信するように構成される。コードは、コード符号化により符号化され、チャレンジは入力符号化により符号化される。セキュリティトークンは従ってソフトウェアで実装され、信頼性のない環境において動作することがある。
【００６４】
本発明に係る方法は、コンピュータ実行方法としてコンピュータにおいて実装されるか、又は専用のハードウェアにおいて、又はその双方の組み合わせで実装され得る。本発明に係る方法の実行可能コードが、コンピュータプログラム製品に格納されることがある。コンピュータプログラム製品の例には、メモリデバイス、光ストレージデバイス、集積回路、サーバ、オンラインソフトウェア等が含まれる。好ましくは、コンピュータプログラム製品は、該プログラム製品がコンピュータ上で実行されると本発明に係る方法を実行するために、コンピュータ読取可能媒体上に格納される非一時的なプログラムコード手段を備える。
【００６５】
好適な実施形態にいて、コンピュータプログラムは、該コンピュータプログラムがコンピュータ上で実行されると、本発明に係る方法のステップを全て実行するように適合されたコンピュータプログラムコード手段を備える。好ましくは、コンピュータプログラムはコンピュータ読取可能媒体上に具現化される。
【００６６】
本発明は、例として添付の図面を参照して更に詳細に説明される。
【００６７】
図面を通じて、同様又は対応する機能は同じ参照符号によって示される。
【図面の簡単な説明】
【００６８】
【図１ａ】本発明に係る仮想マシンを示すブロック図である。
【図１ｂ】オペレーションルーチン、特にオペレーションルーチン１２６の可能な実装を示すブロック図である。
【図２】本発明に係る仮想マシンを使用するシステムを示すブロック図である。
【図３】ホワイトボックス暗号を示すブロック図である。
【図４ａ】コード及び／又はデータの暗号化の様々な方法を示す図である。
【図４ｂ】コード及び／又はデータの暗号化の様々な方法を示す図である。
【図４ｃ】コード及び／又はデータの暗号化の様々な方法を示す図である。
【図４ｄ】コード及び／又はデータの暗号化の様々な方法を示す図である。
【図４ｅ】コード及び／又はデータの暗号化の様々な方法を示す図である。
【図５ａ】本発明の一実施形態を示す図である。
【図５ｂ】オペレーションについてのルックアップテーブルの構築を示す図である。
【図６】コード、データの暗号化及び出力の暗号解除を図示するブロック図である。
【図７】本発明に係る仮想マシンを示すブロック図である。
【図８】本発明に係る方法を図示するフローチャートである。
【発明を実施するための形態】
【００６９】
本発明は、多くの異なる形式の実施形態が可能であるが、本発明は、本開示が本発明の原理の例示として解釈されるべきであり、本発明は図示及び説明される具体的な実施形態に限定されるようには意図されていないという理解の下で、図面に示されており、本明細書において詳細に１つ又は複数の具体的な実施形態について説明される。
【００７０】
＜ホワイトボックス暗号法＞
本発明は、ホワイトボックス暗号法の使用を可能にすることができる。ホワイトボックス暗号法は、ホワイトボックスモデルにおける脅威に対処する。ホワイトボックスの攻撃モデルを使用して、信頼できない実行環境、すなわちアプリケーションが、実行プラットフォームからの攻撃の対象となる環境において動作するアルゴリズムを分析する。
【００７１】
暗号システムにおける敵の攻撃能力をキャプチャする３つの主な攻撃モデルを区別することができる。これら３つの攻撃モデルには以下のものがある。  
・ブラックボックスモデルは、敵が暗号システムの機能性に対するアクセスのみを有することを保証するモデルであり、従来の攻撃モデルである。  
・グレーボックスモデルは、敵が、漏洩機能（leakage  function）によりサイドチャネル暗号解読技術を展開するのを可能にする。  
・ホワイトボックスモデルは、敵が暗号システムのソフトウェア実装について全体的な可視性を有し、その実行プラットフォームに対する完全な制御を有するのを可能にする。ホワイトボックスモデルは最悪のモデルと言われることがある。
【００７２】
ホワイトボックスの攻撃モデルは、したがって、これらに応えるための予防措置を必要とし、条件を有する。様々なアルゴリズムについてホワイトボックスの実装が存在し、これらを本発明において用いてよい。ブロック暗号のＤＥＳ及びＡＥＳの例では、暗号化と暗号解除の双方にホワイトボックスの実装が利用可能である。
【００７３】
既存のホワイトボックスの実装の欠点は、これが１つの目的にのみ、すなわち暗号化又は暗号解除、典型的には１つの特定の鍵に対してのみ適切であるに過ぎないことである。本発明は、ホワイトボックス攻撃モデルにおけるセキュリティを依然として提供しつつ、任意のコードの実行を可能にする仮想マシンを提供することである。
【００７４】
ホワイトボックスを、本発明において、例えばいずれか１つの入力復号化に使用してよい。しかし、ホワイトボックス暗号と本発明に係る仮想マシンは全く異なる。ホワイトボックス暗号はコードを実行することができない。
【００７５】
ホワイトボックス暗号化又は暗号解除のプリミティブは、典型的に、対称暗号のような暗号を実装する。好ましくは、ブロック暗号のホワイトボックス実装が使用される。例えば入力再コーダ（潜在的に、入力復号化と内部符号化の一方又は双方）、出力再コーダ（潜在的に、内部復号化と出力符号化の一方又は双方）又は再コード化命令のうちのいずれか１つが、ホワイトボックス暗号化又は暗号解除として実装されてもよく、あるいはホワイトボックス暗号化又は暗号解除を備えてもよい。
【００７６】
ホワイトボックス暗号は、ソフトウェア実装であり、この場合、秘密鍵がインスタンス化される。その目標は、ホワイトボックス暗号の成果が、少なくとも基礎となる暗号に対するブラックボックス（例えば総当たりの）攻撃と同程度となることである。１つの理想的な解決策は、暗号を１つの大きなルックアップテーブルとして実装することであろう。しかしながら、これは実際のブロック暗号にとって実現可能ではない。この理想に近づくホワイトボックスのストラテジは、非特許文献２（S.  Chow，P.  Eisen，H.  Johnson，及びP.C.  van  Oorschot，“A  White-Box  DES  Implementation  for  DRM  Applications”，  Computer  Science  2003，the  book  Digital  Rights  Management  of  the  Lecture  Notes  2002  [42,43]）に紹介されている。特定のブロック暗号において、計算は、鍵情報がネットワーク全体にわたって広がるようにランダム化されるルックアップテーブルのネットワークとして実装され得る。ブロックを構築することはそれぞれ、鍵とは独立にシームレスに行われる。そのため、敵は、秘密鍵の情報を得るために、完全なネットワークを分析することを余儀なくされる。テーブルのネットワークの難読化は、難読化変換を、テーブル内に記録される変換に対してプリペンド及びアペンドすることによって可能である。このようにして、全ての難読化変換の組み合わせが取り消される一方、それぞれ個々のテーブルはランダム化される。
【００７７】
図３は、テーブルのネットワークを図示する。ほとんどの機能をテーブルのネットワークとして表してよい。例えばテーブルのネットワークは、例えば暗号のホワイトボックス実装としてもよい。ここで示されているのは、複数のテーブルのうちの８つのテーブルである。テーブルは、入力値を、該入力値のテーブルルックアップによって出力値に変換する。ホワイトボックス実装の外部から入力を受信するための複数の入力テーブル３１０の３つが示されている。複数の出力テーブル３３０の１つが示されている。複数の出力テーブル３３０は一緒に、例えば連結によってホワイトボックス実装の出力を形成する。複数の中間テーブル３２０の４つが示されている。中間テーブルは、少なくとも１つの入力をこれらのテーブルのうちの別のテーブルから受け取り、少なくとも１つの他のテーブルへの入力として使用するための出力を生成する。テーブル３１０、３２０及び３３０は一緒にネットワークを形成する。暗号はブロック暗号とすることができ、ブロック暗号は暗号化又は暗号解除のために構成され得る。ブロック暗号は、特定の鍵についてブロック暗号、例えばＡＥＳを暗号化し、テーブルはその特定の鍵に依存する。
【００７８】
図１ａは、仮想マシン１００を示すブロック図である。仮想マシン１００は、コードチャネル２１０からコードを、入力チャネル２４０から入力データを受信し、出力チャネル２６０への出力を生成する。この説明ではチャネルを抽象化する。仮想マシン１００は典型的に、ソフトウェアで実装され、コンピュータ（図示せず）上で動作する。
【００７９】
コードチャネル２１０から、仮想マシン１００は、命令としても知られる一連のオペレーションを受け取る。例えば命令は、例えばｊａｖａバイトコード等のバイトコード又は８０８６アセンブリ命令としてもよい。例えばコードチャネル２１０は、インターネットのようなネットワークから又はコードファイルが格納されるファイルサーバからコードを受信するための入力部とすることができる。コードを、仮想マシン１００がホストされるのと同じコンピュータに格納してもよい。典型的に、オペレーションはデータアイテム、例えばコードワードとして表される。議論を簡単にするために、オペレーションの正確な起点を、コードチャネル２１０として抽象化する。
【００８０】
仮想マシン１００は、セレクタ１１０を備える。セレクタ１１０は、コードチャネル２１０から受信した一連のオペレーションから１つのオペレーションを読み取り、該オペレーションを実行するための適切なオペレーションルーチンを決定する。セレクタ１１０は、いわゆる「ケース」ステートメントとして実装され得る。そのようなケースステートメントは、入力として、例えば数値オペランドとして表されるオペレーションを受信し、出力として、実行のために適切なルーチンにジャンプする。あるいはセレクタ１１０は、受信したオペレーションと、オペレーションルーチンによって表されるオペレーションとの間の等価性をテストする、一連の比較ステートメントとして実装されることもある。比較ステートメントが成功である場合、すなわち等価性がある場合、次いでコントロールが、対応するオペレーションルーチンへと、例えばｇｏ−ｔｏコマンドによって移されることがある。
【００８１】
仮想マシン１００内の複数のオペレーションルーチンのうち、図１ａに示されているのは、オペレーションルーチン１２２、１２４及び１２６である。例として、オペレーションルーチン１２６が詳細に描かれている。しかしながら、ルーチン１２２及び１２４も、オペレーションルーチン１２６と同じように構成される。セレクタ１１０は、コードチャネル２１０から受信したオペランドに応じて、オペレーションルーチンの実行を開始する。例として、オペレーションルーチン１２６がセレクタ１１０によって選択されると想定する。アドレス暗号化が使用される場合、ルーチン１２２、１２４及び１２６を含むオペレーションルーチンの元のアドレスは、単に他のアドレスとなるだけであることに留意されたい。
【００８２】
図１の実施形態では、全ての符号化が、暗号化として、例えば特定の鍵についての対称暗号として実装されると想定する。符号化を暗号化として表すことにより、ランダムな双射を選択する効果的な方法が提供される。暗号化が符号化のために使用される場合、ときどきエンコーダの代わりに暗号化器という用語を使用し、デコーダの代わりに暗号解除器という用語を使用することがあるだろう。しかしながら、必ずしも符号化をいずれか特定の暗号化に制限する必要はなく、特に符号化、復号化及び再コード化がルックアップ手段により実装される場合、例えばランダム双射又は特別なプロパティを有する双射等の任意のランダムな双射であることもあり、例えば双射の一部は、仮想マシンデバイスが実装される基礎となるハードウェアのプロパティに依存する可能性がある。
【００８３】
コードチャネル２１０から受信されるオペレーションは、暗号化する暗号（encrypting  cipher）により、例えばコード暗号化器４１４によって、秘密鍵の制御の下ですでに暗号化される。例えばブロック暗号を使用して、コードを、例えばコードブックモードで暗号化してもよい。
【００８４】
図６はこのことを図示している。ＶＭを使用する前に、平文コードは、コード鍵、すなわち鍵ｋを用いて、例えばまず平文コードを作成することによって、すなわち本明細書では平文コードチャネル４１２として表される一連の平文命令によって暗号化される。オペレーションは、コード暗号化器４１４によって暗号化され、その結果として、コードチャネル２１０上で使用され得る暗号化されたオペレーションが得られる。好ましくは、コードの暗号化は、編纂の後に、例えばリンク中に行われる。オペレーションの暗号化を補償するため、興味深いことに、対応する復号化ステップは、ＶＭ１００において明示的に必要とはされない。例えば複数のオペレーションルーチンは、暗号化されたオペレーションに応答してセレクタ１１０が正しいオペレーションルーチンを選択するようにシャッフルされ得る。ホワイトボックスの実装がオペレーションルーチンに使用される場合、後に、暗号化されたオペレーションから正しいオペレーションを再構築することは難しくなる。その後、ケースラベルが再順序付けされる、例えばソートされ得る。
【００８５】
好ましくは、コード暗号化器４１４は、全ての可能なオペレーションを表す値の範囲から、同じ範囲まで暗号化する。あるいは、小さな範囲の暗号化器が使用されることもあり、例えばバイトコードが使用される場合、バイトサイズのブロック暗号が使用され得る。また１６ビットサイズのブロック暗号が使用されることもある。例えばコード暗号化器４１４は、固定のビットサイズのワードとして表される１つの平文命令を暗号化して、同じビットサイズのワードとして表される複数の暗号化された命令としてもよく、典型的にビットサイズは４、８、１６及び３２を含む。例えばブロック暗号は、より長いブロックサイズから小さいものへと適合され得る。例えばＤＥＳのようなＦｅｉｓｔｅｌ暗号は、ラウンド関数をトランスケートして、所望のブロックサイズを半分にするように適合され得る。例えばＡＥＳは各ラウンドを所望の数のバイト又はワードに制限することによって適合され得る。一例として、コード暗号化器４１４はコードブックモードを使用する可能性がある。
【００８６】
図６は、平文入力チャネル４２２及び入力暗号化器４３４も示す。入力を仮想マシンデバイス１００へ送信する前に、入力暗号化器４２４を使用して平文入力を暗号化することがある。図６は、出力暗号解除器４６４も示しており、出力暗号解除器４６４を使用して、仮想マシン１００の出力を暗号解除することができる。
【００８７】
図１ａは更に、メモリ１３２及びレジスタファイル１３４を示す。例えばオペレーションルーチン１２６等のオペレーションルーチンは、ローカルの一時的な又は非揮発性のストレージに対して読み書きを行うことがある。
【００８８】
例えばオペレーション１２６等のオペレーションルーチンは、該オペレーションルーチンが実装するオペレーションについて、１つ又は複数のオペレランドを必要とすることがある。仮想マシン１００は、入力チャネル２４０へのアクセスを有する。再び複数の代替構成が、特にクラウドにおける入力チャネル２４０について可能である。例えば仮想マシン１００は、分散ストレージ又は分散コンピューティングを用いて、他のコンピュータを介して入力を受信することがある。仮想マシン１００は、ユーザ等からの入力を受信することがある。仮想マシン１００への入力は、暗号化されてもされなくてもよい。この入力は、オペレーションルーチンによって内部的に使用される符号化に向けて、入力再コーダ１４０によって再コード化され得る。オペレーションルーチンが、典型的には一時的に格納される中間結果に対して更に作用する場合、これらは、オペレーションルーチン１２６によって使用される符号化において既に格納されているので、メモリ１３２又はレジスタファイル１３４は通常再コード化を必要としない。ホワイトボックス暗号法と難読化の対は、特に符号化、復号化及び再コード化に適している。
【００８９】
例えばオペレーション１２６等のオペレーションルーチンは、そのオペレーションのために１つ又は複数のオペランドを使用することがある。仮想マシン１００は、入力チャネル２４０へのアクセスを有する。再び複数の代替構成が、特にクラウドにおける入力チャネル２４０について可能である。例えば仮想マシン１００は、分散ストレージ又は分散コンピューティングを用いて、他のコンピュータを介して入力を受信することがある。仮想マシン１００は、ユーザ等からの入力を受信することがある。仮想マシン１００への入力は、暗号化されてもされなくてもよい。この入力は、オペレーションルーチンによって内部的に使用される符号化に向けて、入力再コーダ１４０によって再コード化され得る。外部符号化が、入力すなわちオペランドの内部符号化と同じである場合、又は入力データの暗号化が使用されない場合、入力再コーダ１４０を省略してもよい。
【００９０】
オペレーションルーチンは、エクスポート用のデータ、すなわち仮想マシン１００の出力も生成することがある。出力は出力チャネル２６０に送信される。出力は、仮想マシン１００から複数の方法でエクスポートされ得る。例えば出力結果は、別のコンピュータへ、例えば受信した入力を送ったのと同じコンピュータへと、例えばネットワークを介して送信され得る。出力は、恐らくは異なるコンピュータ上の、恐らくは分散コンピューティング及び／又はストレージの一部として更に使用するためのファイルへと書き込まれることがある。仮想マシン１００の出力は暗号化されても、されなくてもよい。仮想マシン１００が内部暗号化を使用しない場合、例えばコードチャネル２１０に対してのみ暗号化を使用する場合、あるいは仮想マシン１００が内部使用に対するものと同じ暗号化を出力に使用する場合、出力再コーダ１６０を省略してもよい。出力再コーダ１６０を使用して、データを、外部により使用される暗号化へと再コード化することができる。
【００９１】
コードチャネル２１０及び入力チャネル２４０は、結合、例えばインターリーブされ得る。
【００９２】
仮想マシン１００は、ホワイトボックス暗号又は他の符号化を様々な方法で使用してよい。
【００９３】
セレクタ１１０は、以下のように実装され得る。  
While  (true)
Do
{
Fetch  (instruction);
Decode  (instruction);
Execute  (instruction);  //  incorporating  Instruction  =  next  (instruction);
}
仮想マシン１００における実行用にアプリケーションを準備するため、コード、すなわち一連の命令を、暗号化関数Ｅ及び鍵ｋを使用して暗号化する。暗号化関数Ｅは、好ましくはブロック暗号とすることができる。コードは次いで、一連の暗号化された命令、すなわち一連のＥ＿ｋ（命令）となる。Ｅ＿ｋは、鍵ｋによる暗号化を示す。ＶＭのメインループの復号化オペレーションは、鍵ｋを用いてインスタンス化される暗号解除関数のホワイトボックス実装、すなわちＷＢ［Ｄ＿ｋ］を用いて拡張され得る。例えば関数のホワイトボックス実装を、ＷＢ［  ］により該関数を包含することによってテーブルのネットワークとして示す。
【００９４】
仮想マシン１００のメインループは次のようである可能性がある。  
While  (true)
Do
{
Fetch  (instruction);
Decode  (WB  [Dk]  (instruction));
Execute  (instruction);  //  incorporating  Instruction  =  next  (instruction);
}
驚くべきことに、ＤｅｃｏｄｅとＷＢ［Ｄｋ］の構成を「融解（melt）」して、Melted_WB_and_decoder(x)  ==  Decode  (WB[Dk]  (x)にすることができる。命令の実行を行う復号化ケースの規約は、単にその「融解」の結果として再順序付けされ得る。特に命令の実装、すなわちオペレーションルーチンが、ホワイトボックスで行われるか又は他の方法で難読化される場合、これは、システムの攻撃の可能な開始点、すなわちＷＢ［Ｄｋ］関数を除去する。ホワイトボックスがオペレーションで使用されない場合であってもケース規約の任意の再順序付けが起こり得る。
【００９５】
命令の暗号化は、単独では入力データ又は出力データの難読化を提供しない。改善された実施形態では、入力チャネル２４０のためのデータが暗号化される。この暗号化を補償するために、入力再コーダ１４０は、例えば読み取りを介して入力チャネル２４０にアクセスするＶＭ内の命令の一部として、ＷＢ［Ｄｋ’］を備えている。
【００９６】
別の改良では、上記のものと組み合わせてもよいが、アプリケーションの出力チャネルへの書込みが、ホワイトボックス暗号化ＷＢ［Ｅｋ’’］を用いて暗号化される。後にその結果が、例えばセキュアなプラットフォーム上で取得され、Ｄｋ’を使用して暗号解除され得る。
【００９７】
更なる改善では、命令の実際のオペレーションが観測から隠される。オペレーションの機能性を隠すために、ＷＢ暗号化のエンコードとデコードの対、すなわちＷＢ［ＥＫ’’’］とＷＢ［ＤＫ’’’］が使用される。機能性はそのような対によって包含される。例えば（単項の）オペレーションの機能性がｆであるとすると、新たな機能性は、ｎｅｗ＿ｆ（ｘ）＝＝ＷＢ［ＥＫ’’’］（ｆ（ＷＢ［ＤＫ’’’］（ｘ）））なる。オペレーションが２項である場合、２項オペレーションのＣｕｒｒｙ形式が使用される。そのようにすることによって、レジスタ及びメモリ内の全ての情報はＷＢ［ＥＫ’’’］によって暗号化されることになる。オペレータのほとんどの機能性について、（命令の意味の）包含は、分離不可能であることに留意されたい。簡潔性のために、ホワイトボックスを通じた上記符号化を、単項のオペレーションに対してのみ使用し得る。
【００９８】
後者は、入力及び出力チャネルに対する結果も有する。全てのオペレーションは、ＶＭデータがＷＢ［ＥＫ’’’］によって暗号化されることを期待するので、出力チャネルへ書き込む前に、入力チャネルを暗号化して暗号解除しなければならない。
【００９９】
入力チャネルに対する読み取りは、ＷＢ［ＥＫ’’’］及びＷＢ［Ｄｋ.’］の構成であり、出力チャネルに対する書き込みは、ＷＢ［ＤＫ’’’］及びＷＢ［Ｅｋ’’］の構成であろう。ＷＢの意味において、これらは、好ましくは分離不可能に構成されることに再び留意されたい。分離不可能であることにより、部分的な分解が行われる可能性がないことを意味し、これは難読化のチャネル、レジスタ又は命令を提示するであろう。
【０１００】
鍵ｋ’’’は、全てのＶＭに対して固有である。鍵ｋ、ｋ’、ｋ”は、ＶＭとアプリケーションとの間で共有される秘密である。
【０１０１】
以下に、入力再コーダ１４０、出力再コーダ１６０及びオペレーション１２６において暗号化（符号化／再コード化）する様々なオプションを列挙する。
【０１０２】
【表１】
2015504279.tif 000003
ここで、“ｏ”は関数の構成（function  composition）を示す。関数の構成は右から左へ読まれる。右にある関数が最初に適用され、左にある関数が最後に適用される。Ｉｄｅｎｔｉｔｙは、識別情報の変換（変更なし）を示す。Ｏｐｅｒは、オペレーションルーチン、例えばオペレーションルーチン１２６で実行されるオペレーションを示す。また、コード暗号化は鍵ｋを用いて使用され得る。セレクタ１１０はこの場合、ＷＢ［ｄ＿ｋ］を備えるか再順序付けされて、暗号化を補償する。
【０１０３】
上記の表は、単一のコード鍵、単一の入力鍵及び単一の内部鍵のみが使用されることを想定している。再コード化命令は、ある内部符号化から別のものへシフトするのに使用され得るので、これは拡張可能である。実装が鍵を使用する場合、１つより多くの鍵が存在する可能性がある。再コーダの命令のために、難読化は、アプリケーションとＶＭとの間で広がる可能性がある。
【０１０４】
図１ｂは更に、内部オペレーションの暗号化を図示している。内部プリコーダ１２６ａは、ＷＢ［Ｄｋ’’’］のために構成され、オペレーション１２６ｂは実際のオペレーションを実行し、そしてポストコーダ１２６ｃはＷＢ［Ｅｋ’’’］のために構成される。この手法では、その後、内部暗号化鍵ｋ’’’による内部暗号化が初めに除去され、次いでオペレーションが実行されて、その後内部暗号化が再び適用される。しかしながら、実際のオペレーションを実行するブロック１２６ｂが、テーブルネットワークを使用して実装される場合、次いでこれらはプリコーダ１２６ａ及びポストコーダ１２６ｃを用いて統合され得る。このようにして、オペレーションルーチン１２６のオペレーションは、コード自体が調査されたとしても、十分に難読化される。
【０１０５】
図７は、仮想マシンを図示しており、ここで、コードは鍵ｋにより、入力は鍵’ｋ’により、出力は鍵ｋ’’により、内部オペレーションは鍵ｋ’’’により暗号化される。
【０１０６】
仮想マシン１００は、ＶＭを全て実行することができ、Ｅｋによって暗号化されたコードを使用するサーバの環境において使用され得る。そのようにすることによって、アプリケーションのコードは、ホワイトボックス暗号化の使用を通じて完全に難読化される。暗号化されない状態で現れるコードはない。関係はＶＭとアプリケーションとの間の秘密の共有によって強化され得る。
【０１０７】
さらに、ＶＭを実行することができるサーバの環境において、入力チャネルがＥｋ’を用いて暗号化されることもある。そのようにすることによって、アプリケーションの入力チャネル（複数可）が難読化される。暗号化されない状態で現れる入力値はない。関係はＶＭとアプリケーションとの間の秘密の共有によって強化され得る。
【０１０８】
また、ＶＭを実行することができるサーバの環境において、出力チャネルがＥｋ’’を用いて暗号化されることがある。そのようにすることによって、アプリケーションの出力チャネル（複数可）が、ホワイトボックスの暗号化の使用を通じて難読化される。暗号化されない状態で現れる計算値はない。関係はＶＭとアプリケーションとの間の秘密の共有によって強化され得る。
【０１０９】
コード鍵ｋ、入力鍵ｋ’又は出力鍵ｋ’’のうちのいずれか１つを、デバイスＩＤにバインドしてもよい。例えば鍵がＩＤを備える可能性がある。この結果、ＶＭが、正しいＩＤを有するデバイスにおいて実現されることが可能になる。
図４ａ、図４ｂ、図４ｃ、図４ｄ及び図４ｅは、命令及びデータを符号化する様々な方法を示す。これらの符号化は、命令エンコーダによって、例えばリンカ又はポストリンクステップの一部として実行される可能性がある。
【０１１０】
図４ａは、平文の即時データ５２０とともに平文命令５１０を示す。平文命令５１０は、コード符号化５５０により、例えばコードエンコーダ５５０を通じて符号化され、符号化された命令５１５が得られる。即時データは、入力符号化５７０を用いて、例えば入力エンコーダ５７０を通じて別個に暗号化され、符号化されたデータ５２５が得られる。このタイプの符号化を使用するために、仮想マシンは、符号化された命令を正しいオペレーションにマップするルックアップ手段、例えばポインタと、符号化されたデータを、（外部符号化と異なる場合）内部符号化に従って符号化されたデータにマップするルックアップ手段を必要とするだけである。したがって小さなテーブルのみが必要とされるだけである。
【０１１１】
図４ｂは、平文命令５１０と平文の即時データが双方ともコード暗号化により直接的に符号化される符号化タイプを示す。これは、平文命令５１０と平文の即時データが一緒に復号化されること必要とするので、難読性はより高いが、より大きなテーブルとなる。更なる即時データが必要とされる場合、この即時データは別個に、例えば入力符号化によって符号化され得ることに留意されたい。符号化された命令５１７を復号化するのに使用されるルックアップ手段は、２つのテーブルに分離され得る。すなわち、第１のテーブルが、符号化された命令に応答してオペレーションルーチンを取得し、第２のテーブルが即時データに応答して取得する。テーブルは、即時データを任意の適切な暗号化で、例えば内部符号化を用いて符号化された即時データを与え得ることに留意されたい。
【０１１２】
図４ｃは、第３の方法の符号化を示している。ここでは、全ての即時データが入力符号化により符号化される。次に、命令が符号化され、この命令は場合によって即時データを含むことも含まないこともある。
【０１１３】
図４ｄは、部分的な符号化を示す。命令５１０は即時データ５２０及び５１２とともにアセンブルされる。図４ｃのように、全ての即時データが入力符号化５７０を用いて符号化される。しかしながら、命令５１０及び符号化されたデータ５２５のみがコード符号化５５０により符号化され、符号化された命令５１６が得られる。符号化された命令５１６は、符号化されたデータ５２６と結合される。即時データの部分的符号化は、テーブルのサイズを小さい状態に保つ。
【０１１４】
部分的符号化を、図４ｂのシステムを使用して行うことも可能であることに留意されたい。これは図４ｅに図示されている。命令５１０及び即時データ５２０は、コード符号化により符号化されて、符号化された命令５１７が得られる。追加の即時データ５２１は入力符号化により符号化される。
【０１１５】
これらの符号化の全てがインプレースで行われ得ることに留意されたい。即時データは典型的に命令に隣接して置かれる。
【０１１６】
１つには、命令セットは符号化スキーマを簡潔にするように適合される。例えば全ての命令が所定のサイズ、例えば１バイト、又は例えば１ビットのような１ワードの１つの即時データを正確に実行するように、命令のセットを設計することがある。複数のオペラント（例えば追加）を必要とする命令は、レジスタから残りのオペレランドを取ることがある。残りのオペランドは、命令に先行することによってレジスタ内に置かれている。オペランドを必要としない命令は、オペランドフィールド内にダミー値を有することがある。
【０１１７】
図５ａは、セレクタがどのように機能し得るかを示している。まず、セレクタは、符号化された命令を受信する。この例において、全ての命令は固定のサイズであり、例えば１バイトである（他のサイズも可能である）。この例において、符号化された命令は、４ｂ又は４ｃのスキーマを使用して符号化される。例えば平文の命令は０ｘａａであり、平文の即時データは０ｘ１２である。（この例では）これらは一緒に符号化されて０ｘ３４ａｂとなる。符号化された命令は、ルックアップ手段（この場合はルックアップテーブル７１０）を通じてルックアップされる。これにより、正しいオペレーションルーチン及びそのルーチンで使用するためのオぺランドへポイントする情報が見つかる。例えば０ｘ２２ｂ３が見つかり、ここで０ｘ２２は特定のテーブルへポイントする（０ｘ２２からポインタアドレスへ行く中間のルックアップテーブルが存在し得ることに留意されたい）。「０ｘ２２」というオペレーションは、ルックアップテーブル７２０によって表される。ルックアップテーブル７１０の結果（０ｘ２２ｂ３）において、０ｘｂ３の部分は、この例では０ｘ１２の即時データの符号化されたバージョンである。この符号化は、内部符号化により行われ得る。次に、テーブル７２０において０ｘｂ３がルックアップされる。この場合、オペレーションは、単一のオペランド、例えば否定オペレーションをとる。０ｘｂ３は、ここでは０ｘｃａという結果を探すルックアップである。結果は、内部符号化によりすでに符号化される。内部符号化は同じものであってよく、異なる内部符号化であってもよい。
【０１１８】
ルックアップテーブル７１０は、符号化された命令をルックアップして対応するオペレーションルーチンを選択するためにセレクタが備えるルックアップ手段の例である。
【０１１９】
結果の０ｘｃａは、オペレーションルーチン又は出力における更なる使用の可能性のために、仮想マシンデバイスのレジスタ内又はメモリ内に置かれることがある。
【０１２０】
オペレーションは、このような単一のテーブルとして実装され得る。オペレーションは、複数のオペランドが必要とされる場合であっても単一のテーブルとして実装されてよい。この場合において、複数のオペランドを、ルックアップの前に連結してもよい。オペレーションはテーブルのネットワークとして実装されてもよい。オペレーションは標準のコードも含み得る。例えばジャンプ、条件付き又は無条件のものを標準のコードとして実装してもよい。条件付きの移動（conditional  move）をテーブルとして実装してもよく、この場合、条件は追加の１ビットのオペランドであることに留意されたい。
【０１２１】
図５ｂは、テーブルがどのように構築され得るかを示している。この場合、テーブルは２つのオペランドのオペレーションのためのものである。ルックアップテーブル７５０は、平文オペレーションのルックアップテーブルを表し、ここで、全ての可能な入力に対するオペレーションの全ての結果が単に、再現可能な順序で、すなわちソートされて列挙される。ルックアップテーブル７３０及び７４０は、入力を復号化するための内部復号化オペレーションを表す。ルックアップテーブル７６０は、結果に対する内部符号化を表す。７３０と７４０の復号化及び／又は７６０の符号化は全て、同じ内部符号化に対応し得るが、これは必ずしも必要ではない。最後に全てのオペレーションが構成される。例えば全ての可能な入力ついてテーブルを調べて、全ての結果をリストすることが可能である。
【０１２２】
図８は、本発明に係る仮想マシンの方法６００を図示する。ステップ６１０は、例えば一連の暗号化された命令を取得することにより、符号化された命令を受信することを備える。符号化された命令は、平文の命令をコード符号化により符号化することによって得られたものであり得る。一連の暗号化された命令は、一連の平文命令のそれぞれ１つを、コード暗号化鍵により暗号化することによって得られたものであり得る。平文命令は、例えば整数の数字として表される、デジタルデータアイテムとすることができる。ステップ６２０は、符号化された命令をルックアップして、複数のオペレーションルーチンのうちの対応するオペレーションルーチンを選択することを備える。対応するオペレーションルーチンは、符号化された命令に対応する平文命令を実行するように構成される。ステップ６３０は、対応するオペレーションルーチンをアクティブにすることを備える。
【０１２３】
典型的に、命令の符号化は、ステップ６１０、６２０及び６３０とは異なるコンピュータにおいて実行されるであろう。この方法は、好ましくはコンピュータで実施される方法である。
【０１２４】
当業者には明らかであるように、本方法を実行する多くの異なる様式が可能である。例えばステップの順序を変えることが可能であり、あるいは一部のステップを並行に実行してもよい。さらに、ステップの間に他の方法のステップを挿入してもよい。挿入されたステップは、本明細書で説明されるような方法の改良を表してもよく、あるいは本方法に関係のないものでもよい。例えばステップ６２０と６３０を、少なくとも部分的に並行に実行してもよい。さらに所与のステップは、次のステップが開始される前に完全に終了していなくてもよい。
【０１２５】
本発明に係る方法は、プロセッサシステムに方法６００を実行させる命令を備えるソフトウェアを使用して実行されてもよい。ソフトウェアは、システムの特定のサブエンティティによって行われるこれらのステップのみを含むことがある。ソフトウェアは、ハードディスク、フロッピー（登録商標）、メモリ等のような適切な記憶媒体に格納され得る。ソフトウェアは、有線若しくは無線により、又は例えばインターネットのようなデータネットワークを使用して信号として送信されてもよい。ソフトウェアは、サーバ上でのダウンロードに及び／又はリモート利用に利用可能にされ得る。
【０１２６】
本発明は、コンピュータプログラムにまで広がること、特に本発明を実践的にするために適合される、搬送波上に又は搬送波内のコンピュータプログラムにまで広がることが認識されよう。プログラムは、ソースコード、オブジェクトコード、部分的に編纂される形式のようなコード中間ソース及びオブジェクトコードの形式、あるいは本発明に係る実装での使用に適した任意の他の形式とすることができる。コンピュータプログラム製品に関する実施形態は、説明された方法の少なくとも１つの方法の処理ステップの各々に対応するコンピュータ実行可能命令を備える。これらの命令は、サブルーチンにサブ分割され鵜か、静的に又は動的にリンクされ得る１つ又は複数のファイル内に格納され得る。コンピュータプログラム製品に関する別の実施形態は、説明されたシステム及び／又は製品の少なくとも１つシステム／製品についての手段の各々に対応するコンピュータ実行可能命令を備える。
【０１２７】
上述の実施形態は、本発明を限定するのではなく例示するものであって、当業者には、特許請求の範囲から逸脱することなく、多くの代替的な実施形態を設計することが可能であることに留意されたい。特許請求の範囲において、括弧内に記載されるいずれかの参照符号は、請求項を限定するものとして解釈されるべきでない。「備える」という動詞及びその活用形の使用は、請求項内に記載されている要素又はステップ以外の要素又はステップの存在を排除するものではない。ある要素に先行する「１つの、ある（ａ、ａｎ）」という冠詞は、複数のそのような要素の存在を排除するものではない。本発明は、いくつかの別個の要素を備えるハードウェアの手段によって、適切にプログラムされたコンピュータの手段によって実装され得る。いくつかの手段を列挙するデバイスの請求項において、これらの手段のいくつかを、１つ及びハードウェアの同じアイテムによって具現化してもよい。特定の方策が異なる従属項おいて記載されているという単なる事実は、これらの方策の組み合わせを有利に用いることができないことを示すものではない。
【符号の説明】
【０１２８】
１００  仮想マシン
１１０  セレクタ
１２２、１２４、１２６  オペレーションルーチン
１２５ａ  プリコーダ
１２５ｂ  オペレーション
１２５ｃ  ポストコーダ
１３２  メモリ
１３４  レジスタファイル
１４０  入力再コーダ
１６０  出力再コーダ
２１０  コードチャネル
２２２、２２４  ユーザデバイス
２３０  サーバ
２４０  入力チャネル
２６０  出力チャネル
３１０  入力テーブル
３２０  中間テーブル
３３０  出力テーブル
４１２  平文コードチャネル
４２４  入力暗号化器
４６２  平文出力チャネル
４６４  出力暗号解除器
５１０  平文命令
５１５、５１６、５１７  符号化された命令
５２０  平文即時データ
５２５、５２６  符号化された即時データ
５２１  追加の即時データ
５５０  コード符号化
５７０  入力符号化
７１０、７２０、７３０、７４０、７５０、７６０  ルックアップテーブル
６００  仮想マシンの方法
６１０  符号化された命令を受信
６２０  符号化された命令をルックアップして、複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択
【図１ａ】
2015504279.tif 000004
【図１ｂ】
2015504279.tif 000005
【図２】
2015504279.tif 000006
【図３】
2015504279.tif 000007
【図４ａ】
2015504279.tif 000008
【図４ｂ】
2015504279.tif 000009
【図４ｃ】
2015504279.tif 000010
【図４ｄ】
2015504279.tif 000011
【図４ｅ】
2015504279.tif 000012
【図５ａ】
2015504279.tif 000013
【図５ｂ】
2015504279.tif 000014
【図６】
2015504279.tif 000015
【図７】
2015504279.tif 000016
【図８】
2015504279.tif 000017
【手続補正書】
【提出日】平成26年7月10日(2014.7.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
仮想マシンデバイスであって、
−  特定の命令を実行するように各々が構成される複数のオペレーションルーチンと、
−  符号化された命令を受信するように構成されるセレクタであって、平文命令をコード符号化により符号化することによって得られる前記符号化された命令を受信するように構成されるセレクタと、
を備え、
−  前記セレクタは、前記複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択してアクティブにするように構成され、前記対応するオペレーションルーチンは、前記符号化された命令に対応する前記平文命令を実行するように構成され、
−  前記セレクタは、符号化された命令をルックアップして前記対応するオペレーションルーチンを選択するためのルックアップ手段を備え、
前記対応するオペレーションルーチンは、第１の符号化により符号化されたデータを受信し、第２の内部符号化により符号化された結果を生成するように構成され、該符号化された結果は、
−  前記符号化されたデータを、第１の復号化により復号化するステップと、
−  結果を取得するため、前記符号化された命令に対応する前記平文命令を前記の復号化された符号化されたデータに対して実行するステップと、
−前記結果を第２の内部符号化により符号化するステップと
によって取得される、仮想マシンデバイス。
【請求項２】
前記符号化された命令は、前記平文命令とともに使用するための即時データと一緒に前記平文命令を前記コード符号化により符号化することによって得られ、前記ルックアップ手段は、前記符号化された命令をルックアップして前記即時データを取得するように構成され、前記セレクタは、前記即時データにより前記対応するオペレーションルーチンをアクティブにするように構成される、請求項１に記載の仮想マシンデバイス。
【請求項３】
前記符号化された命令は、前記平文命令を前記即時データと一緒にブロック暗号の単一のブロックで符号化することによって得らえたものである、請求項１又は２のいずれか１項に記載の仮想マシンデバイス。
【請求項４】
前記即時データは、前記コード符号化により前記平文命令と一緒に符号化される前に、入力符号化を用いて符号化される、請求項２又は３に記載の仮想マシンデバイス。
【請求項５】
オペレーションルーチンによって使用するための追加のデータを受信するように構成された入力再コーダを備え、前記追加のデータは、入力符号化により符号化され、前記入力再コーダは、入力復号化により前記データを復号化し、内部符号化により符号化するように構成される、請求項１乃至４のいずれか１項に記載の仮想マシンデバイス。
【請求項６】
オペレーションルーチンによって生成されるデータ結果を受信するように構成された出力再コーダを備え、前記出力再コーダは、内部復号化により復号化された前記データ結果を再コード化して、出力符号化により符号化されたデータ結果にする、請求項１乃至５のいずれか１項に記載の仮想マシンデバイス。
【請求項７】
前記の復号化するステップ、実行するステップ及び符号化するステップは、単一のテーブル又はテーブルネットワークへと結合される、請求項１乃至６のいずれか１項に記載の仮想マシンデバイス。
【請求項８】
第１の内部符号化により符号化されたデータは、符号化された即時データと、当該仮想マシンのメモリから取得される内部符号化により符号化されたデータと、当該仮想マシンのレジスタから取得される内部符号化により符号化されたデータとのうちのいずれか１つである、請求項１乃至７のいずれか１項に記載の仮想マシンデバイス。
【請求項９】
前記対応するオペレーションルーチンは、符号化されたデータをルックアップして結果を取得するように構成されたルックアップ手段として構成される、請求項１乃至８のいずれか１項に記載の仮想マシンデバイス。
【請求項１０】
前記複数のオペレーションルーチンは、再コード化オペレーションを備え、該再コード化オペレーションは再コード化命令に対応し、該再コード化オペレーションは、第１の符号化により符号化されるデータを再コード化して、第２の符号化により符号化さえるデータにするように構成される、請求項１乃至９のいずれか１項に記載の仮想マシンデバイス。
【請求項１１】
前記平文命令はｊａｖａのバイトコードに対応する、請求項１乃至１０のいずれか１項に記載の仮想マシンデバイス。
【請求項１２】
コード符号化により命令を符号化し、オプションとして入力符号化によりデータを符号化するように構成される命令エンコーダと、
請求項１乃至１１のいずれか１項に記載の仮想マシンデバイスと
を備える、分散実行システム。
【請求項１３】
仮想マシン方法であって、
−  符号化された命令を受信するステップであって、該符号化された命令は、コード符号化により平文命令を符号化することによって取得される、ステップと、
−  前記符号化された命令をルックアップして、複数のオペレーションルーチンのうち対応するオペレーションルーチンを選択するステップであって、前記対応するオペレーションルーチンは、前記符号化された命令に対応する平文命令を実行するように構成される、ステップと、
−  前記対応するオペレーションルーチンをアクティブにするステップと
を備え、前記対応するオペレーションルーチンは、第１の符号化により符号化されたデータを受信し、第２の内部符号化により符号化された結果を生成するように構成され、該符号化された結果は、
−  前記符号化されたデータを、第１の復号化により復号化するステップと、
−  結果を取得するため、前記符号化された命令に対応する前記平文命令を前記の復号化された符号化されたデータに対して実行するステップと、
−前記結果を第２の内部符号化により符号化するステップと
によって取得される、方法。
【請求項１４】
コンピュータ上で実行されると、請求項１３に記載のステップの全てを実行するように適合されたコンピュータプログラム手段を備えたコンピュータプログラム。
【請求項１５】
コンピュータ読取可能媒体上に具現化される、請求項１４に記載のコンピュータプログラム。
【国際調査報告】
2015504279.tif 000018
2015504279.tif 000019