JP2018522291A - 信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス - Google Patents

信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス Download PDF

Info

Publication number
JP2018522291A
JP2018522291A JP2018523361A JP2018523361A JP2018522291A JP 2018522291 A JP2018522291 A JP 2018522291A JP 2018523361 A JP2018523361 A JP 2018523361A JP 2018523361 A JP2018523361 A JP 2018523361A JP 2018522291 A JP2018522291 A JP 2018522291A
Authority
JP
Japan
Prior art keywords
computer
driver
sending
network driver
operations
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018523361A
Other languages
English (en)
Other versions
JP6880017B2 (ja
JP2018522291A5 (ja
Inventor
アシュミート シダナ
アシュミート シダナ
プリヤダーシャン コルテ
プリヤダーシャン コルテ
カルヴァン リン
カルヴァン リン
Original Assignee
バッフル インコーポレイテッド
バッフル インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by バッフル インコーポレイテッド, バッフル インコーポレイテッド filed Critical バッフル インコーポレイテッド
Publication of JP2018522291A publication Critical patent/JP2018522291A/ja
Publication of JP2018522291A5 publication Critical patent/JP2018522291A5/ja
Application granted granted Critical
Publication of JP6880017B2 publication Critical patent/JP6880017B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0407Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the identity of one or more communicating identities is hidden
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/04Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
    • H04L63/0428Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/008Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/046Masking or blinding of operations, operands or results of the operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/16Obfuscation or hiding, e.g. involving white box
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/18Network architectures or network communication protocols for network security using different networks or channels, e.g. using out of band channels

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Computer And Data Communications (AREA)

Abstract

本発明は、信頼できないコンピュータ上のプライベートコンピュータプログラムの実行方法を提供する。本発明は、本発明の方法によってもたらされる製品、及び本発明の方法を実行するために使用される装置も提供する。
【選択図】図1

Description

〔関連出願との相互参照〕
本出願は、2015年7月21日に出願された米国特許出願第14/804,713号に対する優先権を主張するものであり、この文献の開示は全体が引用により本明細書に組み入れられる。
開示する発明は、コンピュータセキュリティの分野に関する。
最近では、特にユーザによる大規模コンピュータネットワークへの自由なアクセスを可能にするクラウドネットワーク及び拡張型企業ネットワークの急増に伴い、リモートコンピュータプログラムを実行する際のセキュリティが継続的に論争されている。複数のコンピュータ上でプログラムを実行する能力と速度の組み合わせは有利ではあるが、詮索の目に曝されることもある。リモートコンピュータの一部又は全部が、悪意あるユーザ又は攻撃者の支配を受けて重要な機密情報を危険に曝してしまう可能性もある。
従って、信頼できないコンピュータ上又は複数のコンピュータ上で、(単複の)信頼できないコンピュータに完全にアクセスできる攻撃者から実行プログラム及びデータを秘密にしておくようにプログラムを実行する方法及びシステムに対するニーズが存在する。本発明は、これらの及びその他の重要なニーズに対処するものである。
本発明は、コンピュータプログラムの実行方法であって、少なくとも1つの他のコンピュータに接続された信頼できるコンピュータ上に存在するコンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、それぞれの演算の結果を計算して結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの計算結果を受け取るステップとを含む方法を提供する。
本発明は、コンピュータプログラムを実行するシステムも提供する。このシステムは、少なくとも1つの他のコンピュータに通信可能に接続された少なくとも1つの信頼できるコンピュータを含むことができる。少なくとも1つの信頼できるコンピュータのうちの第1の信頼できるコンピュータは、実行時にシステムにプログラム実行プロセスを含む動作を実行させるコンピュータ命令を記憶することができる。このプロセスは、第1の信頼できるコンピュータ上のコンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、それぞれの演算の結果を計算して結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの計算結果を受け取るステップとを含むことができる。
この概要及び以下の詳細な説明は例示的かつ説明的なものにすぎず、添付の特許請求の範囲に定める本発明を限定するものではない。当業者には、本明細書に示す本発明の詳細な説明に照らして本発明の他の態様も明らかになるであろう。
この概要及び以下の詳細な説明は、添付図面と共に読むことによってさらに理解される。図面には、本発明を説明する目的で本発明の例示的な実施形態を示すが、本発明は、開示する具体的な方法、構成及び装置に限定されるものではない。また、図面は必ずしも縮尺通りではない。
ネットワークコンピュータにわたってプログラムをシュレッディングするための本発明の実施形態を示す図である。 分割デバイスドライバ動作のための本発明の実施形態を示す図である。 コード及びデータのシュレッドの対称鍵暗号化及び暗号解読動作のための本発明の実施形態を示す図である。 シュレッドを難読化するための本発明の実施形態を示す図である。 回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。 別の回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。 さらなる難読化レイヤを用いて回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。 コンピュータネットワーク上のゲート演算の任意の回路をシュレッディングするための本発明の実施形態を示す図である。 さらなる暗号化を用いて演算をシュレッディングするための本発明の実施形態を示す図である。 通常のデバイスドライバ動作を示す図である。 分割デバイスドライバ動作のための本発明の実施形態を示す図である。 数学演算をシュレッディングするための本発明の実施形態を示す図である。 別の数学演算をシュレッディングするための本発明の実施形態を示す図である。 遷移暗号関数をシュレッディングするための本発明の実施形態を示す図である。 別の遷移暗号関数をシュレッディングするための本発明の実施形態を示す図である。 暗号化された比較演算をシュレッディングするための本発明の実施形態を示す図である。 別の暗号化された比較演算をシュレッディングするための本発明の実施形態を示す図である。 数学的難読化遷移関数をシュレッディングするための本発明の実施形態を示す図である。 別の数学的難読化遷移関数をシュレッディングするための本発明の実施形態を示す図である。
本発明は、本開示の一部を成す添付図及び実施例に関連して行う以下の詳細な説明を参照することによってさらに容易に理解することができる。本発明は、本明細書において説明及び/又は図示する具体的な装置、方法、用途、条件又はパラメータに限定されるものではなく、本明細書で使用する用語は、特定の実施形態をほんの一例として説明するためのものであり、特許請求する発明を限定するためのものではないと理解されたい。また、文脈において別途明確に示していない限り、添付の特許請求の範囲を含め、本明細書で使用する「1つの(英文不定冠詞)」及び「その(英文定冠詞)」という単数形は複数形を含み、特定の数値への言及は、少なくともその特定の値を含む。本明細書で使用する「複数」という用語は、1つよりも多くを意味する。値の範囲を示していない場合、別の実施形態は、1つの特定の値から、及び/又は他の特定の値までを含む。同様に、「約(about)」という先行詞を使用することによって値を近似値として示す場合には、特定の値が別の実施形態を形成すると理解されるであろう。全ての範囲は包含的であって組み合わせることができる。
明確にするために本明細書において個別の実施形態の文脈で説明している本発明のいくつかの特徴は、単一の実施形態において組み合わせて提供することもできると理解されたい。これとは逆に、明確にするために単一の実施形態の文脈で説明している本発明の様々な特徴は、個別に又はいずれかの部分的組み合わせの形で提供することもできる。さらに、範囲で示す値についての言及は、その範囲内のありとあらゆる値を含む。
本明細書で開示する解決策は、少なくとも1つの他のコンピュータにネットワーク接続された信頼できるコンピュータ上でコンピュータプログラムを実行する方法と、この方法を実行できるシステムとを含む。この方法は、コンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、演算を計算した後に演算結果を別のコンピュータに転送するように演算を受け取ったそれぞれのコンピュータに命じる付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの出力を受け取るステップとを含む。暗号化及び難読化を用いて方法のセキュリティを高めることもできる。
信頼できるコンピュータとは、攻撃者によって危殆化されていないと分かっているコンピュータのことであり、計算リソース又はその他のリソースを提供するために少なくとも1つの他のコンピュータを必要とすることができる。非限定的な例では、この少なくとも1つの他のコンピュータを、信頼できるコンピュータに通信可能に接続されているが信頼できるコンピュータを含まない、信頼できる又は信頼できない、企業ネットワークの一部、クラウドの一部、モバイル装置、一般に複数のコンピュータの一部、或いは他のいずれかの1つ又は一連のコンピュータとすることができる。さらなる非限定的な例では、少なくとも1つの他のコンピュータを複数のコンピュータからランダムに選択することができる。「クラウド」に関して言えば、クラウドは、信頼できる場合も、又は信頼できない場合もあり、複数の管理領域にわたることもあり、複数の商業的に異なるインフラにわたることもあり、或いはいずれかの組み合わせ又は当業で周知の他の状況の場合もある。コンピュータは、(電気的又は光学的な)有線接続、無線接続、及び/又はコンピュータによるデータの通信を可能にするいずれかのタイプの接続を用いて共にネットワーク化することができる。コンピュータは、1つの又は一群の仮想マシンを含むこともできる。
コンピュータプログラムを一連の演算に分割し、一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信することを「シュレッディング(shredding)」と呼ぶことができ、各演算は「シュレッド(shred)」と呼ばれる。シュレッディングプロセスでは、プログラムが一群のシュレッドに変換され、各シュレッドが少なくとも1つのコンピュータ上でプログラムの一部を実行して他のシュレッドと通信し、シュレッドの集合体が完全なプログラムを実行するようになる。ある実施形態では、シュレッディングプロセスが、コンピュータのランダム選択を用いてネットワークコンピュータ上にシュレッドを配置し、各コンピュータが、そのシュレッド内に指定される部分的計算を実行した後に残りの計算を次のコンピュータに転送する。各コンピュータは、シュレッドをどこから受け取ったか、シュレッド内で何を計算することになっているか、及びそのシュレッドの結果をどこに転送すべきかしか分からない。ネットワークコンピュータの数が十分に多ければ、潜在的な攻撃者は、全てのコンピュータを同時にモニタしてシュレッディング計算をつなぎ合わせることができない。
図1に、シュレッディングプロセスの実施形態を用いて信頼できるコンピュータ及びクラウドコンピュータ上で実行されるプログラム例を示す。プログラム100は、入力、関数「f」、関数「g」及び出力という4つの部分を含む。信頼できるコンピュータ上で実行されるシュレッダプログラムは、このプログラムのために実行できる2値を分析してこれらの4つの部分を発見し、これに応じてやはり2進実行可能形式の4つのシュレッドを生成する。入力演算及び出力演算は、信頼できるコンピュータ1(TC1)110及び信頼できるコンピュータ4(TC4)140上でそれぞれ実行される。TC1 110及びTC4 140は、必要な入力装置及び出力装置に接続されているという理由でシュレッダによって選択される。関数「f」及び「g」は計算コストが高く、従ってクラウドコンピュータ2(CC2)120及びクラウドコンピュータ3(CC3)130上でそれぞれ実行される。CC2 120及びCC3 130は、利用可能な機械のプールからシュレッダによってランダムに選択される。TC1 110は、入力を受け取り、この入力を変数「x」に割り当てた後に、これをCC2 120に転送する。CC2 120は、変数「x」を受け取って関数「f(x)」を計算し、結果を変数「y」に割り当てた後に、これをCC3 130に転送する。CC3 130は、変数「y」を受け取って関数「g(x)」を計算し、結果を変数「z」に割り当てた後に、これをTC4 140に転送する。TC4 140は、変数「z」を受け取って出力する。
図1で分かるように、一連の演算の一部は、信頼できるコンピュータからの入力及び/又は出力(I/O)相互作用を必要とし得る。I/O装置又は信頼できるI/Oが存在しないことを考慮すると(セキュリティのために、I/O装置からの平文データを見られるのは信頼できるコンピュータのみとすべきである)、シュレッドを実行するコンピュータ上には特別な「分割」デバイスドライバを実装することができる。分割デバイスドライバは、実際には各コンピュータ上に1つずつの2つのドライバであり、各ドライバが通常のデバイスドライバの半分の作業を実行する。これらのドライバの両半分はユーザプロセスとして実行されるので、シュレッドを実行するコンピュータ上のオペレーティングシステムも、信頼できるコンピュータ上のオペレーティングシステムも変更する必要がない。以下は、分割デバイスドライバをどのように実装して使用できるかを示す実施形態例である。
ある実施形態では、特定のコンピュータ上における演算の、すなわちシュレッドの結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、特定のコンピュータは、特定のコンピュータ上のプログラムドライバにおいて入力要求を生成し、この入力要求をプログラムドライバからネットワークドライバに受け渡し、ネットワークドライバを介してこの入力要求を第1の信頼できるコンピュータに送信し、ネットワークドライバにおいて第1の信頼できるコンピュータから装置の応答を受け取り、この応答を、計算において使用されるようにネットワークドライバからプログラムドライバに受け渡すことができる。受け取られる応答は、セキュリティを高めるために暗号化することができる。
ある実施形態では、特定のコンピュータ上における演算の、すなわちシュレッドの結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、第1の信頼できるコンピュータは、第1の信頼できるコンピュータ上のネットワークドライバにおいて、装置に入力を求める要求を特定のコンピュータから受け取り、この要求をネットワークドライバから装置の入力ドライバに受け渡し、装置からの応答を入力ドライバからネットワークドライバに受け渡し、ネットワークドライバを介して応答を特定のコンピュータに送信することができる。第1の信頼できるコンピュータは、セキュリティを高めるために、装置からの応答を入力ドライバからネットワークドライバに受け渡す前に応答を暗号化することができる。
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、特定のコンピュータは、特定のコンピュータ上のプログラムドライバにおいて出力要求を生成し、この出力要求をプログラムドライバからネットワークドライバに受け渡し、ネットワークドライバを介して出力要求を第1の信頼できるコンピュータに送信し、ネットワークドライバにおいて第1の信頼できるコンピュータから装置の状態を受け取り、この状態を、計算において使用されるようにネットワークドライバからプログラムドライバに受け渡すことができる。出力要求は、暗号化データを含むことができる。
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、第1の信頼できるコンピュータは、第1の信頼できるコンピュータ上のネットワークドライバにおいて、この装置への出力要求を特定のコンピュータから受け取り、この要求をネットワークドライバから装置の出力ドライバに受け渡し、装置からの状態を出力ドライバからネットワークドライバに受け渡し、ネットワークドライバを介して状態を特定のコンピュータに送信することができる。要求は、暗号化データを含むことができ、第1の信頼できるコンピュータは、要求をネットワークドライバから出力ドライバに受け渡す前に、データを暗号解読する必要があり得る。
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、この入力を収集する方法は、特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、この入力要求をプログラムドライバから第1のネットワークドライバに受け渡すステップと、第1のネットワークドライバを介して入力要求を第1の信頼できるコンピュータに送信するステップと、第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて入力要求を特定のコンピュータから受け取るステップと、入力要求を第2のネットワークドライバから装置の入力ドライバに受け渡すステップと、装置からの応答を入力ドライバから第2のネットワークドライバに受け渡すステップと、第2のネットワークドライバを介してこの応答を特定のコンピュータに送信するステップと、第1のネットワークドライバにおいて第1の信頼できるコンピュータから装置の応答を受け取るステップと、この応答を、計算において使用されるように第1のネットワークドライバからプログラムドライバに受け渡すステップとを含むことができる。この方法は、セキュリティを高めるために、装置からの応答を入力ドライバから第2のネットワークドライバに受け渡す前に応答を暗号化するステップをさらに含むことができる。従って、第1の信頼できるコンピュータからの受け取られる応答は暗号化することができる。
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、この出力を実行する方法は、特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、この出力要求をプログラムドライバから第1のネットワークドライバに受け渡すステップと、第1のネットワークドライバを介して出力要求を第1の信頼できるコンピュータに送信するステップと、第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて出力要求を特定のコンピュータから受け取るステップと、出力要求を第2のネットワークドライバから装置の出力ドライバに受け渡すステップと、装置からの状態を出力ドライバから第2のネットワークドライバに受け渡すステップと、第2のネットワークドライバを介してこの状態を特定のコンピュータに送信するステップと、第1のネットワークドライバにおいて第1の信頼できるコンピュータから状態を受け取るステップと、この状態を、計算において使用されるように第1のネットワークドライバからプログラムドライバに受け渡すステップとを含むことができる。セキュリティを高めるために、出力要求は暗号化データを含むことができ、出力要求が第2のネットワークドライバから出力ドライバに受け渡される前にこのデータを暗号解読する必要がある。
セキュリティを高めるために、暗号化は複数のレベルで使用することができる。信頼できるコンピュータと少なくとも1つの他のコンピュータとの間のネットワーク接続は、全て暗号化することができる。このようなネットワーク暗号化は、例えばトランスポートレイヤセキュリティ(TLS)又はその他のいずれかの好適な暗号化スキームを用いて実装することができる。
図2に、明示してはいないがネットワーク通信にTLS暗号化を伴うことができる分割デバイスドライバの実装及び動作の高水準な実施形態を示す。クラウドコンピュータ1(CC1)200上の分割デバイスドライバは、プログラムと相互作用するドライバと、ネットワークと相互作用するドライバという2つの部分を含む。同様に、信頼できるコンピュータ1(TC1)210上の分割デバイスドライバは、ネットワークと相互作用するドライバであるネットワークインターフェイス1 212と、入力装置と相互作用するドライバである入力デバイスドライバ1 214という2つの部分を含む。CC1 200は、分割デバイスドライバスキームを活用して「x=in()」入力演算を実行する。この入力演算では、プログラムと相互作用するドライバが入力要求202を生成する。この入力要求202は、ネットワークと相互作用するドライバに受け渡され、TLS暗号化されてTC1 210に送信される。ネットワークインターフェイス1 212は、この要求を受け取って入力デバイスドライバ1 214に受け渡す。入力装置である入力装置1 220からの応答が受け取られると、この応答が入力デバイスドライバ1 214によってネットワークインターフェイス1 212に受け渡される。ネットワークインターフェイス1 212は、TLSを用いてこの応答を暗号化し、CC1 200に応答222を送信する。CC1 200上のネットワークドライバは、TLS暗号解読された応答222をプログラムインターフェイスドライバに転送し、プログラムインターフェイスドライバは、待機中のプログラムにこれをさらに転送する。プログラムは、受け取った入力を変数「x」に割り当てて実行を継続する。図2には、クラウドコンピュータ4(CC4)230と信頼できるコンピュータ4(TC4)240との間で分割デバイスドライバを用いてどのように出力を実行できるかも示す。分割デバイスドライバの出力動作は、コンピュータが装置からの入力を受け取る代わりに状態メッセージ252を受け取ることを除いて入力動作と同様である。
一連の演算の各演算、すなわち各シュレッドは暗号化することができる。各シュレッドは、高度暗号化標準(AES)ガロアカウンタモード(GCM)又は他のいずれかの好適なスキームなどの対称鍵暗号化スキームを用いて暗号化することができる。対称鍵暗号化は、各シュレッドが異なる鍵を用いて暗号化されるように、少なくとも1つの他のコンピュータの(単複の)共有鍵を使用する。このようなスキームは、シュレッドの対象であるコンピュータ上でしかシュレッドの暗号解読を可能にせず、残りのプログラムを他のあらゆるコンピュータから隠す。
一連の演算の各演算の各データ値は、暗号化することができる。データ値の暗号化は、AES GCMなどの対称鍵スキーム、RSAなどの公開鍵スキーム、又は他のいずれかの好適なスキームを用いて行うことができる。このような暗号化は、信頼できるコンピュータ及び少なくとも1つの他のコンピュータの両方において実行することができる。対称鍵スキームを使用する場合、使用される秘密鍵は、データの送信側とデータの受信側との間のリンクの共有鍵である。公開鍵スキームを使用する場合、送信側は受信側の公開鍵を用いて暗号化し、受信側は受信側の秘密鍵を用いて暗号解読する。このようなスキームは、少なくとも1つの他のコンピュータが計算に必要なデータを暗号解読できるようにするが、他の全てのデータをこのコンピュータから隠す。
図3に、図1のプログラム例におけるコード及びデータのシュレッドの対称鍵暗号化及び暗号解読動作の実施形態を示す。図3においても、図2と同様に、通信パケットのTLS暗号化及び暗号解読は明示していない。プログラムの計算に関与する4つのコンピュータである信頼できるコンピュータ1(TC1)310、クラウドコンピュータ2(CC2)320、クラウドコンピュータ3(CC3)330及び信頼できるコンピュータ4(TC4)340は、信頼できるコンピュータ0(TC0)300に知られている秘密鍵K1、K2、K3及びK4をそれぞれ有する。シュレッディングされたプログラムコードは、シュレッディング動作中にTC0 300上で共有鍵K1、K2、K3及びK4を用いて暗号化される。例えば、TC0 300上の「in’=Enc(K1,in)」という文は、鍵K1を用いて「in」のコードを暗号化して暗号化コード「in’」を生成することを意味する。TC1 310上の対応する暗号解読演算は「in=Dec(K1,in’)」であり、この暗号解読によって「in」演算のコードが生成される。TC1 310は、鍵K1しか知らないので、暗号化プログラムの他の部分を暗号解読することはできず、鍵K1を用いて他の何らかのコード部分を暗号解読しようと試みても有効なコードは生成されない。この暗号化及び暗号解読プロセスは、シュレッドを送信した各コンピュータの鍵を計算に用いて各コンピュータが計算対象のシュレッドにしかアクセスできないようにして、全てのシュレッドについて繰り返される。コンピュータ間の通信リンクは、データの送信側及び受信側しか知らない共有鍵も有する。この場合、通信リンクの共有鍵は、K12、K23及びK34である。例えば、TC1 310は、共有鍵K12を用いて入力「x」を暗号文「x’」に暗号化し、CC2 320において鍵K12を用いてx’を暗号解読して「x」を得る。このプロセスを全てのコンピュータにわたって使用して、攻撃者がネットワークを介して平文を傍受できないことを確実にする。
さらなるセキュリティのためには、データ難読化、コード難読化、又はこれらの両方を含むことができる難読化を使用すべきである。難読化は、各シュレッド内のコード及び/又はデータを、他のコンピュータにおける攻撃者からオリジナルのコード及びデータを隠すように修正するものである。コード難読化は、変換の難読化を用いて、シュレッド実行中にシュレッドのコード、並びに命令及びデータを完全に視認できる攻撃者からオリジナルプログラムのロジックを隠す。データ難読化は、攻撃者が逆難読化されたデータ値を復元するのが困難になるように、シュレッディングされたコードが難読化されたデータ値に対して実行されるようにデータを変換するものであり、ブラインディングはデータ難読化の一種である。
シュレッディングを伴う難読化では、一連の演算の各演算を他のそれぞれのコンピュータに送信する前に各演算を難読化し、受け取られたコンピュータプログラムの計算結果を逆難読化する。難読化方法は、シュレッディングレベルによって異なり、シュレッディングは、ゲートレベル、ハードウェアユニットレベル、命令レベル、暗号化スキームレベルという少なくとも4つの異なるレベル、及びプログラムをユニットに分割できるようにする他のいずれかのスキームに基づいて行うことができる。
図4に、プログラム「z=a*x+y」を4つのコンピュータにわたって難読化する例を示す。難読化の目的は、クラウドコンピュータ2(CC2)410及びクラウドコンピュータ3(CC3)420における攻撃者から、入力「a」、「x」及び「y」、並びに出力「z」の値を隠すことである。信頼できるコンピュータ1(TC1)400は、入力「a」、「x」及び「y」の値を難読化するためのワンタイムパッドとしてそれぞれ使用される3つの乱数値「r」、「s」及び「t」を導入する。難読化に使用される演算は、変数の使用に依存する。例えば、変数「a」と「x」は乗算されるので、難読化演算は、「a」及び「x」にこれらのパッド値「r」及び「s」を乗算し、一方で変数「y」は加数であるため、ワンタイムパッド「t」を加算する。CC2 410及びCC3 420は、難読化値「a’」、「x’」及び「y’」を用いて計算を行って、「b’」及び「c’」をそれぞれ算出する。CC3 420は、「r」及び「s」による除算によって「b’」の逆難読化を実行し、信頼できるコンピュータ4(TC4)430は、パッド「t」を減算することによって値「c’」の逆難読化を実行する。これらの手順は、関連する変数の実際の値を攻撃者が決して確認できないことを確実にする。
ゲートレベルのシュレッディングは、他の単一のコンピュータを観察する攻撃者が計算を理解したり、又は元々の計算の入力又は出力を復元したりすることが不可能なため、最高レベルのシュレッディングであり、完全な秘密性を提供する。一方で、ゲートレベルのシュレッディングは最も遅いレベルのシュレッディングでもあり、他のコンピュータ上でI/O演算を実行する能力を提供しない。このレベルでは、プログラムが、ANDゲート、ORゲート、NANDゲート、NORゲート及びNOTゲートから成る回路に分割され、NOTゲートは、各ゲート演算が確実に2つのオペランドを有するように等しい入力のNANDゲートに変換することができる。このように、プログラムが分割された一連の演算は、各々が演算子と、第1のオペランドと、第2のオペランドとを有する回路ゲート演算に分割される。
ある実施形態では、ゲート演算回路内の各ゲートを難読化し、他の2つのコンピュータにわたってシュレッディングする。各ゲート演算のプロセスでは、信頼できるコンピュータが、第1のオペランドを第1の乱数値で難読化し、第2のオペランドを第2の乱数値で難読化する。その後、これらの難読化されたオペランドを、第1のコンピュータが難読化されたオペランドを用いて複数の演算の複数の結果を計算して結果を第2のコンピュータに送信する旨の命令と共に第1のコンピュータに送信する。信頼できるコンピュータは、第2のコンピュータに、演算子と、第1の乱数値と、第2の乱数値とに基づいて複数の結果のうちの1つの結果を選択し、選択された結果を第3の乱数値で難読化し、これを信頼できるコンピュータ又は別のコンピュータとすることができる異なるコンピュータに送信する旨の命令を送信する。
図5に、他の2つのコンピュータ、すなわちクラウドコンピュータ1(CC1)510及びクラウドコンピュータ2(CC2)210にわたってゲート計算をシュレッディングする実施形態例を示す。この例では、ゲート演算「g=a&b」が、実行すべき現在のシュレッドである。図4と同様に、この実施形態もワンタイムパッドを使用するが、乱数値は「r」、「s」及び「u」とする。信頼できるコンピュータ(TC)500は、難読化されたプログラムを以下のように生成して「g=a&b」を実行する。最初に、TC500は、「a」及び「b」を難読化するための2つのランダムビット「r」及び「s」をそれぞれ選択する。次に、TC500は、「c=a^r」及び「d=b^s」を計算し、ここでの「^」演算子はXOR演算を意味する。次に、TC500は、「c」及び「d」をCC1 510に送信する。CC1 510は、e1=c&d、e2=c&!d、e3=c|!d及びe4=c|dという4つの一時的な値を計算する。次に、CC1 510は、{e1,e2,e3,e4}をCC2 520に送信する。CC2 520は、「r」及び「s」の値に基づいて、{r=0,s=0}の場合にはf=e1^u、{r=0,s=1}の場合にはf=e2^u、{r=1,s=0}の場合にはf=!e3^u、{r=0,s=0}の場合にはf=!e4^uというプログラムのうちの1つを実行し、ランダムビット「u」を用いて結果を難読化する。次に、CC2 520は、fをTC500に送信する。TC500は、「g=f^u」を計算することによって結果を逆難読化する。
図5の実施形態例では、TC 500が3つのXOR演算を計算してデータを難読化し、CC1 510及びCC2 520が計算を実行する。CC1 510は4つの一般的な演算を実行し、CC2 520は正しい演算を選択するので、CC1 510及びCC2 520は、いずれも入力データ、出力データ又は計算が分からない。CC2 520では、ANDの計算又は計算の結果が明白なように思えるが、注意深く検討すると、計算もデータも隠されていることが分かる。CC2 520におけるプログラムは、{e1,e2,e3,e4}の値のうちの1つを単純に通過させるもの又はその否定であり、シュレッダプログラムのみが知っている「r」、「s」及び「u」の乱数値に応じてシュレッダプログラムによって生成される。さらに、図6に示すように、CC2 520は、CC1 510におけるe4=c&d、e3=c&!d、e2=c|!d及びe1=c|dという変数名の置換に基づいて「a OR b」を計算するので、自機がAND演算を計算しているか、それともOR演算を計算しているかを知ることはできない。「g=a|b」を計算する図6は、CC2 620において行われる計算以外の全ての面で図5と同一である。
同様に、CC2 520においてさらなるNOT演算を追加することによって、NAND演算又はNOR演算を計算することもできる。上述したように、単一ビットのNOT演算は、等しい入力のNAND演算を使用することができる。入力を隠すためのランダムビット「r」と、出力を隠すための別のランダムビット「u」とを用いた同様の方法を使用して、単一ビットを記憶するシーケンス回路を難読化することができる。従って、TC 500上で(入力及び出力を隠すために使用される全てのランダムなビットの値から成る)ワンタイムパッドを導入し、2つのシュレッドを生成してワンタイムパッドの下で回路を実行することによって、あらゆる回路を難読化することができる。このスキームは、攻撃者がこれらの2つのシュレッドを同時に確認できない限りセキュアである。
図5及び図6に示すワンタイムパッド方法は、(1)CC2(520、620)において確認できる値{e1,e2,e3,e4}が、CC1(510、610)における入力変数「c」及び「d」の4つの組み合わせの特異的パターンを有し、(2)AND演算の値{e1,e2,e3,e4}のパターンが、OR演算の値{e1,e2,e3,e4}のパターンと異なる、という理由から、回路を複数回使用する場合にはセキュアでない。CC2(520、620)において4つの値{e1,e2,e3,e4}を収集して分析する攻撃者は、演算を特定することができる。これに対抗するために、さらなる4つのランダムビット「t1」、「t2」、「t3」及び「t4」を導入して{e1,e2,e3,e4}の値を難読化することができる。図7に、これらの新たなビットを用いた計算を示す。
図7は、さらなる難読化のために{t1,t2,t3,t4}を使用する以外、図5と同一である。この例では、信頼できるコンピュータ(TC)700が、「c」及び「d」を難読化してこれらをクラウドコンピュータ1(CC1)710に送信し、クラウドコンピュータ1(CC1)710が、図5及び図6と同様に{e1,e2,e3,e4}を計算する。しかしながら、今回はe1をt1でXOR演算し、e2をt2でXOR演算し、e3をt3でXOR演算し、e4をt4でXOR演算して{e1,e2,e3,e4}の値を難読化する。一般に、クラウドコンピュータ2(CC2)720、又は第2のシュレッドを処理するコンピュータは、以下の表に示すように、計算される演算と、ランダムビット「r」、「s」、「u」、「t1」、「t2」、「t3」及び「t4」の値とに依存して特定の値「e」を通過させるもの又はその否定のいずれかである。

表1:難読化された回路ゲート演算の選択
図7では、演算が「g=a&b」であるため、CC2 720は、AND列の下の計算のうちの1つを選択する。その後、CC2 720は「f」をTC700に送信し、TC700が最終結果を求めて「f」を逆難読化する。
4つの演算(AND、NAND、OR、NOR)の各々について{e1,e2,e3,e4}の4つの値を分析すると、4つの演算の各々について({t1,t2,t3,t4}の16個の値のための)全く同じ16個のパターンが見られることが分かる。従って、CC2 720における攻撃者は、これらのパターンを用いて演算を特定することができない。しかしながら、CC2 720においてプログラムを見た攻撃者は、「r」の値と「s」の値とが等しいかどうかを判断することができるので、若干の情報漏洩が存在する。この2つの入力ビットのAND演算、NAND演算、OR演算又はNOR演算を難読化するスキームは、7つのビット(r,s,t1,t2,t3,t4,u)を含む乱数鍵を用いて2つのシュレッドを生成する。第1のシュレッドは常に同じブール演算を実行し、第2のシュレッドは正しい演算を選択し、これらの2つのシュレッド間の中間値の通信が難読化される。このいずれかの任意の回路を難読化して計算するプロセスを図8で確認することができる。図8の各矩形はコンピュータを表す。「入力を送信」と表記するコンピュータ800から「計算1」と表記する第1のコンピュータ810に初期入力が送信され、第1のコンピュータ810において第1のシュレッドが演算を計算して、「選択1」と表記する第2のコンピュータ820にこの演算を送信し、第2のコンピュータ820において第2のシュレッドが正しい演算を選択する。このプロセスは、回路の結果が計算されて「出力を受信」と表記するコンピュータ850に送信されるまで(例えば、それぞれ「計算2」及び「選択2」と表記するコンピュータ830及び840において、その後にコンピュータ1 810又は別の選択されたコンピュータに戻って)継続する。
ハードウェアユニットレベルのシュレッディングでは、ゲートレベルのシュレッディングよりもプライバシーは低下するが、さらに高速で実行される。このレベルのシュレッディングは、特定の機能を実行するハードウェアユニットの演算を含む回路にプログラムを分割する。例としては、汎用コンピュータにおける標準的なハードウェアユニットである整数加算、整数乗算、整数比較及び浮動小数点乗算が挙げられる。このように、これらの一連の演算は、各々が演算子と、第1のオペランドと、第2のオペランドとを有する数学演算である。他のコンピュータにおける攻撃者は、行われる演算のタイプは分かるが、正確な演算を推測することはできない。例えば、攻撃者は、整数加算が行われていることは分かるが、オペランド又は結果の平文値は分からない。最終的に、ハードウェアユニットレベルのシュレッディングは、ゲートレベルのシュレッディングと同様に、他のコンピュータ上でI/O演算を実行する能力を提供しない。
命令レベルのシュレッディングは、プログラムを命令に分割して各シュレッドが命令のサブセットを実行するようにする。命令の例としては、x86機械語命令及びJava(登録商標)仮想マシン(JVM)バイトコードが挙げられる。これらの命令も、ハードウェアユニットレベルのシュレッディングと同様に数学演算を伴う。しかしながら、命令レベルのシュレッディングは、ハードウェアユニットレベルのシュレッディングとは異なり、上述した分割デバイスドライバを用いてI/O演算を実行するプログラムに対応する。
ある実施形態では、プログラムを分割した一連の演算の各数学演算を難読化し、2つのコンピュータにわたってシュレッディングする。各数学演算のプロセスでは、信頼できるコンピュータが、第1のオペランドを第1の乱数値で難読化し、第2のオペランドを第2の乱数値で難読化する。その後、これらの難読化されたオペランドを、第1のコンピュータが演算子と第1の難読化されたオペランドと第2の難読化されたオペランドとを用いて第1の演算結果を計算する旨の命令と共に第1のコンピュータに送信する。第1のコンピュータは、第2のコンピュータからの値も受け取り、演算子と第1の結果とこの値とを用いて第2の演算結果を計算し、信頼できるコンピュータ又は別のコンピュータとすることができる異なるコンピュータに第2の結果を送信する。第2のコンピュータは、オペランドを難読化するために使用する乱数値と最終結果とを知っており、この知識を用いて、第1のコンピュータに送信する値を計算する。さらなる演算を伴ういくつかの実施形態では、受け取られる値が、第3の乱数値から第1の乱数値と第2の乱数値との和を差し引いたものである。後述する図12に、1つのこのような実施形態を示す。乗算演算を伴ういくつかの実施形態では、受け取られる値が、第3の乱数値を第1の乱数値と第2の乱数値との積で除算したものである。後述する図13に、1つのこのような実施形態を示す。いくつかの実施形態は、演算を乗法難読化スキームから加法難読化スキームに、及びこの逆に遷移させることを必要とすることもできる。後述する図18に、乗法難読化スキームから加法難読化スキームに遷移する実施形態を示し、後述する図19に、加法難読化スキームから乗法難読化スキームに遷移する実施形態を示す。
難読化に必要な乱数値は、以下の方法によって生成することができる。プログラムの実行サイクルに、サイクル「i」で実行される命令によって定められる変数が関数「Key(i)」によってブラインディングされるように付番する。関数「Key(i)」は、浮動小数点計算中の丸め誤差を制限するために、「大きすぎる又は小さすぎる」ことのない乱数浮動小数点値を生成する。この乱数浮動小数点値は、計算中のあらゆるゼロ除算を防ぐように非ゼロでもある。「Key」関数は、ノンス「i」のための乱数値を生成するSalsa20などの高速ストリーム暗号を用いて実装される。このストリーム暗号には、加法ブラインド値を生成する1つのシードと、乗法ブラインド値を生成する異なるシードという2つの秘密シードが使用される。プログラム内の各命令は、加算又は乗算ではあるがこれらの両方ではないので、これらの2つのシードの一方を用いて実行結果をブラインディングする。一方のスキームにおいてブラインディングされた命令の結果を他方のスキームの演算で使用する場合には、変換演算を用いてスキームを変更する。
図12及び図13に示す例では、TC(1200、1230、1300及び1330)及びCC3(1220及び1320)が両シードを知っており、CC2(1210及び1310)はいずれのシードも知らない。図18及び図19に示す例では、TC(1800、1840、1900、及び1940)及びCC3(1820及び1920)が両シードを知っており、CC2(1810及び1910)はいずれのシードも知らず、CC4(1830及び1930)は乗法シードのみを知っている。
暗号化スキームレベルで行われるシュレッディングは、データに対して行われる演算に依存する準同型暗号スキームを用いて、一連の演算の各演算の各データ値を暗号化する。加算演算は、Paillierなどの加法準同型暗号(AHE)スキームを用いて暗号化され、乗算演算は、El Gamalなどの乗法準同型暗号(MHE)スキームを用いて暗号化される。一方のスキームで暗号化されたデータを、互換性のない演算を用いて操作する必要がある場合には、遷移暗号関数を用いてAHEデータ値をMHEデータ値に変換し、MHEデータ値をAHEデータ値に変換することができる。これらの遷移関数は、遷移暗号関数を一連の演算に分割し、遷移暗号関数の各演算を、それぞれの演算の結果を計算して別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信することによってシュレッディングしてセキュリティを高めることができる。後述する図14には、PaillierからEl Gamalへのシュレッディングされた遷移暗号関数の実施形態を示し、後述する図15には、El GamalからPaillierへのシュレッディングされた遷移暗号関数の実施形態を示す。2つの暗号化された整数を比較することも可能である。後述する図16には、Paillier暗号を用いてシュレッディングされた比較関数の実施形態を示し、後述する図17には、El Gamalを用いてシュレッディングされた比較関数の実施形態を示す。
図9に、El Gamal及びPaillier暗号スキームを用いて「z=a*x+b」を実行する実施形態例を示す。信頼できるコンピュータ1(TC1)900は、El Gamalを用いて「a」及び「x」の値を暗号化し、Paillierを用いて「b」の値を暗号化する。「EG()」関数は、El Gamalでの暗号化を意味し、「EP()」関数は、Paillierでの暗号化を意味する。クラウドコンピュータ2(CC2)910は、MHE暗号化値に基づく乗算「a*x」を計算してMHE暗号化値「y’」を生成する。次に、CC2 910は、クラウドコンピュータ3(CC3)920との間でシュレッディングされた遷移関数「GP1()」、「GP2()」及び「GP3()」を用いてEl Gamal暗号化値「y’」をPaillier暗号化値「y’’」に変換し、AHE暗号化値を乗算することによって「b+y」を加算する。その後、信頼できるコンピュータ4(TC4)930が「z」のPaillier暗号化値を受け取り、暗号解読Paillier関数「DP()」を用いてこの値を暗号解読して解を得る。シュレッディングされた遷移関数「GP1()」、「GP2()」及び「GP3()」については、以下で図15に関してさらに完全に説明する。
上述したように、分割デバイスドライバは、シュレッド内の入力及び出力演算が他のコンピュータ上で実行されることを可能にする。さらなるセキュリティレイヤとしては、I/O装置からの平文データが信頼できるコンピュータにしか分からないように、シュレッドがI/O装置からの暗号化データにしか作用できないようにすることが好ましい。図10に、単一のコンピュータ上で動作する通常のデバイスドライバ相互作用の動作例を示し、対照的に図11には、信頼できるコンピュータとクラウドコンピュータとの間の分割デバイスドライバ相互作用の詳細な動作例を示す。
図10に、単一のコンピュータ上で動作する通常のデバイスドライバ相互作用の動作例を示す。図10に示すアプリケーション例であるアプリケーション1000は、キーボードであるキーボードハードウェア1020に入力を要求し、この入力をコンソール又は画面であるコンソールハードウェア1040に出力する。このプロセスは、図10に表記される8つのステップを必要とする。ステップ1において、アプリケーションがコンピュータのカーネル内のカーネルキーボードデバイスドライバ(KK)1010に文字を要求する。ステップ2において、KK1010がキーボードハードウェア1020に文字を要求する。ステップ3において、キーボードハードウェア1020が入力を受け取り、KK1010に文字で応答する。ステップ4において、KK1010がこの文字をアプリケーションに受け渡して入力動作を完了する。ステップ5において、アプリケーションが出力動作を開始し、コンピュータのカーネル内のカーネルコンソールデバイスドライバ(KC)1030に文字を送信する。ステップ6において、KC1030がこの文字をコンソールハードウェア1040に送信する。ステップ7において、コンソールハードウェア1040がこの文字を印刷してKC1030に状態を送信する。ステップ8において、KC1030がこの状態をアプリケーション1000に受け渡す。この段階で出力動作は完了し、アプリケーション1000は、例えば出力がコンソール画面に印刷されたかどうか、エラーであるかなどの出力の状態が分かる。
図11には、図10と同様の機能を実行する、信頼できるコンピュータ(TC)1102とクラウドコンピュータ(CC)1104との間の分割デバイスドライバの実施形態の動作を示しており、実行シュレッド1100は、キーボードハードウェア1160に入力を要求した(ステップ1〜12)後に、この入力をコンソールハードウェア1162に出力する(ステップ13〜24)。CC1104は、セキュリティを目的として信頼できるコンピュータから入力を得て(ここでは、TC1102である)信頼できるコンピュータに出力しなければならないので、デバイスドライバは、CC1104とTC1102との間で分割される。
図11の入力部分は、以下の通りである。ステップ1において、実行シュレッド1100が、ユーザモードにおける分割キーボードデバイスドライバであるユーザモードキーボードデバイスドライバ(CCUMK)1110に文字を要求する。ステップ2において、CCUMK1110が、カーネルネットワークデバイスドライバ(CCKN)1120を用いて文字を要求する。ステップ3において、CCKN1120が、TC上のカーネルネットワークデバイスドライバ(TCKN)1130と通信する。ステップ4において、TCKN1130が、ユーザモードキーボードデバイスドライバ(TCUMK)1140に文字を要求する。ステップ5において、TCUMK1140が、カーネルキーボードデバイスドライバ(TCKK)1150に文字を要求する。ステップ6において、TCKK1150が、キーボードハードウェア1160に文字を要求する。ステップ7において、キーボードハードウェア1160が入力を受け取り、TCKK1150に文字で応答する。ステップ8において、TCKK1150が、この文字をTCUMK1140に送信する。ステップ9において、TCUMK1140が、受け取った文字を暗号化してTCKN1130に送信する。ステップ10において、TCKN1130が、暗号化文字をCCKN1120に送信する。ステップ11において、CCKN1120が、暗号化文字をCCUMK1110に送信する。ステップ12において、CCUMK1110が、暗号化文字を実行シュレッド1100に受け渡して入力動作を完了する。
図11の出力部分は、以下の通りであり、実行シュレッド1100が、ステップ1〜12のプロセスから暗号化文字を受け取ったと想定する。ステップ13において、実行シュレッド1100が出力動作を開始し、ユーザモードにおける分割コンソールデバイスドライバであるユーザモードコンソールデバイスドライバ(CCUMC)1112に暗号化文字を送信する。ステップ14において、CCUMC1112が、CCKN1120を用いて暗号化文字を送信する。ステップ15において、CCKN1120がTCKN1130と通信する。ステップ16において、TCKN1130が、ユーザモードコンソールデバイスドライバ(TCUMC)1142に暗号化文字を送信する。ステップ17において、TCUMC1142が文字を暗号解読し、カーネルコンソールデバイスドライバ(TCKC)1152に平文文字を送信する。ステップ18において、TCKC1152がコンソールハードウェア1162に平文文字を送信する。ステップ19において、コンソールハードウェア1162が文字を印刷してTCKC1152に状態を送信する。ステップ20において、TCKC1152がTCUMC1142に状態を送信する。ステップ21において、TCUMC1142がTCKN1130に状態を送信する。ステップ22において、TCKN1130がCCKN1120に状態を送信する。ステップ23において、CCKN1120がCCUMC1112に状態を送信する。ステップ24において、CCUMC1112が実行シュレッド1100に状態を送信する。この段階で出力動作は完了し、実行シュレッド1100は、例えば出力がコンソール画面に印刷されたかどうか、エラーであるかなどの出力の状態が分かる。
図10のアプリケーション1000と図11の実行シュレッド1100との間の分割ドライバ以外のさらなる相違点は、実行シュレッド1100が暗号化データに基づいて動作し、従ってここではCC1104である攻撃者が観察しているコンピュータ上で実行できる点である。データの暗号化及び暗号解読のための鍵は、TCUMK1140及びTCUMC1142において鍵を使用するTC 1102上でしか利用できない。
上述したように、コード難読化は、オリジナルプログラムのロジックを隠すために使用することができ、データ難読化と共に使用することができる。データ難読化については、図12及び図13を用いてさらに理解することができ、コード難読化は、以下に限定されるわけではないが、オペコード置換、関数マージング、制御フロー平坦化、及び不明瞭な述語を含むデコイコードを含むことができる。
図12に、データ難読化を用いて和「g=a+b」を計算する実施形態を示す。信頼できるコンピュータ1(TC1)1200は、「a」及び「b」を難読化するための2つの乱数「r」及び「s」をそれぞれ選択する。TC1 1200は、「a+r」及び「b+s」を計算し、結果を変数「c」及び「d」にそれぞれ割り当てる。次に、TC1 1200は、(c、d)をクラウドコンピュータ2(CC2)1210に送信する。CC2 1210は、和「e=c+d」を計算し、クラウドコンピュータ3(CC3)1220にブラインディングを要求する。CC3 1220には、最終結果をブラインディングするために使用する乱数値「r」及び「s」、さらには第3の乱数値「u」の知識が与えられる。CC3 1220は、「u−r−s」の値を計算してこの値を変数「h」に割り当て、これをCC2 1210に送信する。CC2 1210は、CC3 1220から値「h」を受け取り、「e+h」を計算して結果を変数「f」に割り当て、これを信頼できるコンピュータ4(TC4)1230に送信する。その後、TC4 1230は、「f−u」を計算することによって結果をアンブラインディングして動作を完了する。従って、TC 1200及び1230が、入力データ(「a」及び「b」)を難読化するための鍵として3つの乱数「r」、「s」及び「u」を使用してデータ(「g」)を出力する一方で、2つのクラウドコンピュータ1210及び1220が実際の和を計算する。入力データ又は出力データは、クラウドコンピュータに分からない。
図13に、データ難読化を用いて積「g=a*b」を計算する実施形態を示す。信頼できるコンピュータ1(TC1)1300は、「a」及び「b」を難読化するための2つの乱数「r」及び「s」をそれぞれ選択する。TC1 1300は、「a*r」及び「b*s」を計算して結果を「c」及び「d」にそれぞれ割り当てる。次に、TC1 1300は、(c、d)をクラウドコンピュータ2(CC2)1310に送信する。CC2 1310は、積「e=c*d」を計算し、クラウドコンピュータ3(CC3)1320にブラインディングを要求する。CC3 1320には、最終結果をブラインディングするために使用する乱数値「r」及び「s」、さらには第3の乱数値「u」の知識が与えられる。CC3 1320は、「u/(r*s)」の値を計算してこの値を変数「h」に割り当て、これをCC2 1310に送信する。CC2 1310は、CC3 1320から値「h」を受け取り、「e*h」を計算して結果を変数「f」に割り当て、これを信頼できるコンピュータ4(TC4)1330に送信する。その後、TC4 1330は、「f/u」を計算することによって結果をアンブラインディングして動作を完了する。従って、TC 1300及び1330が入力データ(「a」及び「b」)を難読化するための鍵として3つの乱数「r」、「s」及び「u」を使用してデータ(「g」)を出力する一方で、2つのクラウドコンピュータ1310及び1320が実際の積を計算する。入力データ又は出力データは、クラウドコンピュータに分からない。
オペコード置換は、実際のオペコードの代わりにランダムなオペコードを用いてシュレッドの静的分解を阻止するものである。オペコードを含む一連の演算に分割されたプログラムでは、プログラムオペコードをランダムなオペコード順列にマッピングする置換マップを生成することができる。その後、この置換マップを用いて一連のオペコードをランダムなオペコード順列に変換し、これをリモートコンピュータに送信して、他のそれぞれのコンピュータによる逆難読化において使用することができる。逆難読化は、置換マップを保持するリモートコンピュータにおいて置換マップの一部に対応するインデックスを他のコンピュータから受け取り、この他のコンピュータにリモートコンピュータから置換マップの一部を送信することによって行うことができる。対称的に、他のコンピュータは、置換マップの一部に対応するインデックスをリモートコンピュータに送信し、リモートコンピュータから置換マップの一部を受け取り、置換マップを用いてランダムなオペコード順列を元々の一連のオペコードに変換できることが分かる。
ある実施形態では、置換マップを用いたオペコード置換をJavaプログラムと併用することができる。Javaバイトコードは256個のオペコードを有し、これらのうちの51個のオペコード(203〜253の範囲)は未定義である。元々の256個のオペコードをランダムなオペコード順列にマッピングする置換マップを導入する。置換マップは、シュレッドを生成するコンピュータ及びリモートコンピュータには分かるが、置換されたオペコードを用いてシュレッドを実行する他のコンピュータには分からない。未使用のオペコード253は、難読化されたプログラムによってGET MAP命令として使用される。GET MAP命令は、シュレッドを実行する他のコンピュータによってリモートコンピュータに送信された32ビットインデックスをオペランドと見なす。リモートコンピュータは、この特定のシュレッドに使用すべき置換マップを含む256バイトの結果を戻す。GET MAP命令は、ユーザが指定したシュレッド内の回数だけでなくシュレッドの最初にも挿入される。セキュリティのためには、同じマップを使用する大きなコード部分の統計的分析を阻止するために数多くのGET MAP命令が存在すべきである。性能最適化のためには、ループ内にわずかな数のGET MAP命令が存在すべきである。
関数マージングは、無関係な関数を単一の関数に組み合わせる。無関係な関数は、それぞれがパラメータを有し、これらのパラメータのそれぞれの挙動を単一の関数内に保持する。このようなスキームを実装するために、この単一の関数は、無関係な関数のパラメータとさらなるパラメータとを全て取ってどの挙動を実行すべきかを選択する。無関係な関数の数が多い場合には、多少関連する関数のグループをマージして、グループ毎に単一のマージされた関数が存在するようにすることができる。
チェンクシフィケーション(chenxification)としても知られている制御フロー平坦化は、関数を無限ループに変換する。ループから抜け出るには、元々の関数の挙動と同じ挙動を実行するswitch文を追加する。
デコイコードは、攻撃者が分析を必要とするコードの量を増やすために使用される。これは、コンピュータプログラムにデコイコードを挿入することによって行うことができる。デコイコードは、複数のわずかな変異を伴うコンピュータプログラムのオリジナルコードを含むことができる。このわずかな変異は、静的に検出不能なエラーを生じ、わずかな変異の数はユーザが指定することができる。デコイコードは、不明瞭な述語スキームの一部とすることができる。このようなスキームは、設定及び実行は容易であるが分析が困難な述語である不明瞭な述語に依存する標的文を作成することによって関数の静的分析を阻止する。不明瞭な述語はアレイエイリアシングを活用することができ、これらの述語には、常に真、常に偽及び時々真という3つのタイプの述語が存在する。常に真の述語は、「if」分岐内でオリジナルコードを実行し、「else」分岐内でデコイコードを実行する。常に偽の述語は、「if」分岐内でデコイコードを実行し、「else」分岐内でオリジナルコードを実行する。時々真の述語は、2つの分岐上でオリジナルコードとオリジナルコードの難読化バージョンとを実行する。
上述したように、図14〜図17には、Paillier暗号及びEl Gamal暗号を用いた実施形態を示す。図14〜図17の実施形態では、特に明記しない限り以下の想定を適用する。Paillierにおけるメッセージ「m」の公開鍵「n」による暗号化は、EP(m)=(n+1)mn mod n2として定められ、ここでの「r」は、公開鍵「n」よりも小さく「n」と互いに素であるランダムな非ゼロの整数である。Paillierにおける暗号「c」の秘密鍵(b、u)による暗号解読は、DP(c)=u((cb mod n2−1)/n)mod nとして定められる。El Gamalにおけるメッセージ「m」の公開鍵(n、g、q、h)による暗号化は、EG(m)=(gr mod n、m hr mod n)として定められ、ここでの「r」は、「n」よりも小さいランダムな非ゼロの整数である。El Gamalにおける暗号(e,c)の秘密鍵「x」による暗号解読は、DG(e、c)=eq-x c mod nとして定められる。
図14には、Paillier暗号からEl Gamal暗号へのシュレッディングされた遷移暗号関数の実施形態を示す。暗号文「c」をPaillierから暗号解読してEl Gamalに暗号化することは、以下のように定められる。
PG(c)=
let m=u((cb mod n2−1)/n)mod n
in(gr mod n, m hr mod n)

関数「PG(c)」は、以下のプロセスを用いて「PG1(c)」、「PG2(a、c)」及び「PG3(w)」にシュレッディングすることができる。値b1及びb2は、b1とb2の和が、b(b1+b2=b)に等しくなるようにランダムに選択される。値u1及びu2は、u1とu2の積がu mod n(u1*u2=u mod n)に等しくなるようにランダムに選択される。これらの関数は、以下のように定められる。
PG1(c)=cb1 mod n2
PG2(a,c)=
let b=u2((a cb2 mod n2)−1)/n)mod n
in(gr mod n,b hr mod n)
PG3(w)=u1 w mod n
これらの関数を組み合わせると、以下の関数「PG_shred(c)」が得られる。
PG_shred(c)=
let a=PG1(c)
let(v,w)=PG2(a,c)
let z=PG3(w)
in(v,z)
図14では、信頼できるコンピュータ1(TC1)1400が、公開鍵「pk」を用いてメッセージ「m」をPaillier暗号文「c」に暗号化した後に、これをクラウドコンピュータ2(CC2)1410に送信する。CC2 1410は、「PG1(c)」を計算して結果を「a」に割り当てた後に、「a」及び「c」をクラウドコンピュータ3(CC3)1420に送信する。CC3 1420は、「PG2(a,c)」を計算して結果を(v,w)に割り当た後に、これをCC2 1410に返送する。CC2 1410は、「PG3(w)」を計算して結果を「z」に割り当た後に、(v,z)を信頼できるコンピュータ4(TC4)1430に送信する。TC4 1430は、この時点でEl Gamal暗号である暗号文(v,z)を受け取り、秘密鍵「sk」を用いてこれを暗号解読してメッセージ「m」を明らかにする。全てのランダムに選択された値「b1」、「b2」、「u1」及び「u2」は、CC2 1410にもCC3 1420にも分からない。図14では、公開鍵「pk」が「n」と置き換わるように意図され、秘密鍵「sk」が「x」と置き換わるように意図される。
図15に、El GamalからPaillierへのシュレッディングされた遷移暗号関数の実施形態を示す。暗号文(e,c)をEl Gamalから暗号解読してPaillierに暗号化することは、以下のように定められる。
GP(e,c)=
let m=eq-x c mod n
in(n+1)mn mod n2

関数「GP(e,c)」は、以下のプロセスを用いて「GP(e)」、「GP(f)」及び「GP(v,c)」にシュレッディングすることができる。値x1及びx2は、x1とx2の積が「q−x」(x1*x2=q−x)に等しくなるようにランダムに選択される。これらの関数は、以下のように定められる。
GP1(e)=ex1 mod n
GP2(f)=
let a=fx2 mod n
in(n+1)a mod n2
GP3(v,c)=
let w=vc mod n2
in w rn mod n2
これらの関数を組み合わせると、以下の関数「GP_shred(e,c)」が得られる。
GP_shred(e,c)=
let f=GP1(e)
let v=GP2(f)
in GP3(v,c)
図15では、信頼できるコンピュータ1(TC1)1500が、公開鍵「pk」を用いてメッセージ「m」をEl Gamal暗号文(e,c)に暗号化した後に、これをクラウドコンピュータ2(CC2)1510に送信する。CC2 1510は、「GP1(e)」を計算して結果を「f」に割り当てた後に、「f」をクラウドコンピュータ3(CC3)1520に送信する。CC3 1520は、「GP2(f)」を計算して結果を「v」に割り当てた後に、これをCC2 1510に返送する。CC2 1510は、「GP3(v,c)」を計算して結果を「z」に割り当てた後に、「z」を信頼できるコンピュータ4(TC4)1530に送信する。TC4 1530は、この時点でPaillier暗号である暗号文「z」を受け取り、秘密鍵「sk」を用いてこれを暗号解読してメッセージ「m」を明らかにする。ランダムに選択された値「x1」及び「x2」は、CC2 1510にもCC3 1520にも分からない。図15では、公開鍵「pk」が(n,g,q,h)と置き換わるように意図され、秘密鍵「sk」が(b,u)と置き換わるように意図される。
図16に、Paillier暗号を使用するシュレッディングされた比較関数の実施形態を示す。Paillierスキームにおいて2つの整数(いずれもn/2未満であり、ここでのnは公開鍵である)を暗号化する場合、これらの間の順序比較は以下のように定めることができ、
CP(c1,c2)=
let c3=invert c2 mod n2
let c=c13 mod n2
let d=u((cb mod n2−1)/n) mod n
in
if d=0 then EQ
else if d<n/2 then GT
else LT

ここでの「EQ」は「c1=c2」を意味し、「GT」は「c1>c2」を意味し、「LT」は「c1<c2」を意味する。なお、「c」は、「c1」と「c2」との間の暗号化差分であり、「d」は、「c1」と「c2」との間の暗号解読差分である。関数「CP(c1,c2)」は、以下のプロセスを用いて「CP1(c1,c2)」、「CP2(a,c)」及び「CP3(b)」にシュレッディングすることができる。値b1及びb2は、b1とb2の和がb(b1+b2=b)に等しくなるようにランダムに選択される。値u1及びu2は、u1とu2の積がu mod n(u1*u2=u mod n)に等しくなるようにランダムに選択される。これらの関数は、以下のように定められる。
CP1(c1,c2)=
let c3=invert c2 mod n2
let c=c13 mod n2
let a=cb1 mod n2
in(a,c)
CP2(a,c)=
let b=u2((a cb2 mod n2)−1)/n)mod n
in CP3(b)
CP3(b)=
let d=u1 b mod n
in
if d=0 then EQ
else if d<n/2 then GT
else LT
これらの関数を組み合わせると、以下の関数「CP_shred(c1,c2)」が得られる。
CP_shred(c1,c2)=
let(a,c)=CP1(c1,c2
let b=CP2(a,c)
in CP3(b)

図16では、信頼できるコンピュータ1(TC1)1600が、公開鍵「pk」を用いてメッセージ「m1」をPaillier暗号文「c1」に暗号化し、公開鍵「pk」を用いてメッセージ「m2」をPaillier暗号文「c2」に暗号化する。その後、TC1 1600は、(c1,c2)をクラウドコンピュータ2(CC2)1610に送信する。CC2 1610は、「CP1(c1,c2)」を計算して結果を(a,c)に割り当てた後に、(a,c)をクラウドコンピュータ3(CC3)1620に送信する。CC3 1620は、「CP2(a,c)」を計算して結果を「b」に割り当てた後に、これをクラウドコンピュータ4(CC4)1630に送信する。CC4 1630は、「CP3(b)」を計算して結果を「z」に割り当てた後に、「z」をCC2 1610に送信する。CC2 1610は「z」を受け取り、条件文を実行して「EQ」、「GT」又は「LT」を判断し、これらをさらなる計算に使用することができる。全てのランダムに選択された値「b1」、「b2」、「u1」及び「u2」は、クラウドコンピュータに分からない。図16では、公開鍵「pk」が「n」と置き換わるように意図される。
図17に、El Gamal暗号を使用するシュレッディングされた関数の実施形態を示す。El Gamalスキームにおいて2つの整数(いずれもn/2未満であり、ここでのnは公開鍵である)を暗号化する場合、これらの間の順序比較は以下のように定めることができ、
CG((e1,c1),(e2,c2))=
let p1=GP(e1,c1
let p2=GP(e2,c2
in CP(p1,p2

ここでの「GP()」は、図15で定められるEl GamalからPaillierへの遷移関数であり、「CP()」は、図16で定められるPaillier比較関数である。関数CG((e1,c1),(e2,c2))は、以下のようにシュレッディングすることができる。
CG_shred((e1,c1),(e2,c2))=
let p1=GP_shred(e1,c1
let p2=GP_shred(e2,c2
in CP_shred(p1,p2

図17では、信頼できるコンピュータ1(TC1)1700が、公開鍵「pk」を用いてメッセージ「m1」をEl Gamal暗号文(e1,c1)に暗号化し、公開鍵「pk」を用いてメッセージ「m2」をEl Gamal暗号文(e2,c2)に暗号化する。その後、TC1 1700は、(e1,c1)及び(e2,c2)をクラウドコンピュータ2(CC2)1710に送信する。CC2 1710は、「GP1(e1)」を計算して結果を「f1」に割り当て、「GP1(e2)」を計算して結果を「f2」に割り当てた後に、「f1」及び「f2」をクラウドコンピュータ3(CC3)1720に送信する。CC3 1720は、「GP2(f1)」を計算して結果を「v1」に割り当て、「GP2(f2)」を計算して結果を「v2」に割り当てた後に、「v1」及び「v2」をCC2 1710に返送する。CC2 1710は、「GP3(v1,c1)」を計算して結果を「p1」に割り当て、「GP3(v2,c2)」を計算して結果を「p2」に割り当てる。CC2 1710は、「CP1(p1,p2)」を計算して結果を(a,c)に割り当てた後に、(a,c)をクラウドコンピュータ3(CC3)1720に送信する。CC3 1720は、「CP2(a,c)」を計算して結果を「b」に割り当て、これをクラウドコンピュータ4(CC4)1730に送信する。CC4 1730は、「CP3(b)」を計算して結果を「z」に割り当てた後に、「z」をCC2 1710に送信する。CC2 1710は「z」を受け取り、条件文を実行して「EQ」、「GT」、又は「LT」を判断し、これらをさらなる計算に使用することができる。全てのランダムに選択された値は、クラウドコンピュータに分からない。図17では、公開鍵「pk」が(n,g,q,h)と置き換わるように意図される。
上述したように、数学演算のシュレッディング及び難読化を行ういくつかの実施形態は、演算を乗法難読化スキームから加法難読化スキームに、及びこの逆に変換することを必要とすることもできる。図18及び図19に、これらの遷移関数の2つの実施形態例を示す。
図18には、乗法難読化スキームから加法難読化スキームに変換する実施形態を示す。この実施形態例では、プログラムが、乱数「r」による「a」の乗法ブラインディングを実行するが、乱数「s」による「a」の加法ブラインディングを必要とする。変換プロセスは、セキュリティのためにシュレッディングされる。最初に、信頼できるコンピュータ1(TC1)1800及び信頼できるコンピュータ5(TC5)1840は、「a」をブラインディングするための2つの乱数「r」及び「s」を選択する。TC1 1800は、「a*r」を計算して結果を変数「c」に割り当てた後に、これをクラウドコンピュータ2(CC2)1810に送信する。CC2 1810は、乗法から加法へのブラインディングをクラウドコンピュータ3(CC3)1820に要求する。CC3 1820は、乱数値「r」及び「s」の知識を与えられ、「r*s」を計算し、この積を変数「h」に割り当てて「h」をCC2 1810に送信する。CC2 1810は、CC3 1820から値「h」を受け取り、「c+h」を計算し、結果を変数「e」に割り当ててこれをクラウドコンピュータ4(CC4)1830に送信する。次に、CC4 1830は、「e/r」を計算することによって積をアンブラインディングし、これを変数「f」に割り当てて「f」をTC5 1840に送信する。最後に、TC5 1840は、「a+s」に等しいaの加法ブラインディング値を受け取る。変数「a」は、「f」から「s」を減算することによって復元することができる。
図19には、加法難読化スキームから乗法難読化スキームに変換する実施形態を示す。このプロセスは、基本的に図18に示すものとは逆のプロセスである。なお、乱数シードが必要なコンピュータ以上に分散されるのを防ぐために、矢印は、図18の経路とは逆の経路をたどる。このように、いずれの変換についても、TC(1800、1840、1900及び1940)及びCC3(1820及び1920)のみが両シードを知っており、CC2(1810及び1910)はいずれのシードも知らず、CC4(1830及び1930)は乗法シードのみを知っている。
図19の実施形態例では、プログラムが、乱数「s」による「a」の加法ブラインディングを実行するが、乱数「r」による「a」の乗法ブラインディングを必要とする。変換プロセスは、セキュリティのためにシュレッディングされる。最初に、信頼できるコンピュータ1(TC1)1900及び信頼できるコンピュータ5(TC5)1940は、「a」をブラインディングするための2つの乱数「r」及び「s」を選択する。TC5 1940は、「a+s」を計算して結果を変数「c」に割り当てた後に、これをクラウドコンピュータ4(CC4)1930に送信する。次に、CC4 1930は、「c*r」を計算することによってこの和をブラインディングし、これを変数「e」に割り当てて「e」をクラウドコンピュータ2(CC2)1910に送信する。CC2 1910は、加法から乗法へのブラインディングをクラウドコンピュータ3(CC3)1920に要求する。CC3 1920は、乱数値「r」及び「s」の知識を与えられ、「r*s」を計算し、この積を変数「h」に割り当てて「h」をCC2 1910に送信する。CC2 1910は、CC3 1920から値「h」を受け取り、「e−h」を計算し、結果を変数「f」に割り当ててこれをTC1 1900に送信する。最後に、TC1 1900は、「a*r」に等しいaの乗法ブラインディング値を受け取る。変数「a」は、「f/r」を計算することによって復元することができる。
図18及び図19に示すような1つのブラインディングスキームから別のブラインディングスキームへの変換のシュレッディングは、いずれか1つのクラウドコンピュータを制御している攻撃者が「a」の平文値を計算できないように使用される。シュレッディング変換中には、CC4(1830及び1930)に乗法鍵「r」が公開されるが、このコンピュータにおける攻撃者は、「a」の加法ブラインディング値しか分からない。同様に、CC2(1810及び1910)における攻撃者は、「a」の乗法ブラインディング値は分かるが、乗法ブラインディング鍵「r」にアクセスできないため「a」の計算が防がれる。CC3(1820及び1920)では両鍵「r」及び「s」が明らかになるが、このコンピュータは積「r*s」しか供給せず、従ってCC3(1820及び1920)における攻撃者に「a」の加法ブラインディング値又は乗法ブラインディング値が分かってしまうことは決してない。
上記の方法及びプロセス(方法I)は、他の単一のコンピュータへのルートアクセス権を有し、実行プログラム、メモリ内データ及びディスク上のファイルの記録及び分析を行って機密情報を観察する攻撃者(脅威レベルI)に対して効果的である。しかしながら、方法Iは、他の単一のコンピュータ上の実行プログラム、メモリ及びファイルを修正して実行を邪魔することができる攻撃者(脅威レベルII)に対しては効果的でない場合もある。このことを考慮して、上記の方法及びプロセスを、全てのシュレッドが他の複数のコンピュータ上で実行されるように拡張することができる(方法II)。他の複数のコンピュータからの中間データ結果を整合性についてチェックし、不整合が検出された場合には計算を中断する。方法IIは、特定のシュレッドを実行する他の全てのコンピュータの制御を攻撃者が獲得しない限り脅威レベルIIの攻撃者からの攻撃を阻止することができる。さらに、ネットワーク内の他の全てのコンピュータを制御する攻撃者に対しては、方法Iも方法IIも効果的でない(脅威レベルIII)。方法IIは、単一のプログラムを実行するように選択された他のコンピュータが複数の管理領域又は複数の商業的に異なるインフラに及ぶように拡張することができる(方法III)。例えば、他のコンピュータは、Google、Amazon及び/又はMicrosoftなどの様々なパブリッククラウドプロバイダから選択することができる。方法IIIは、あるプログラムのために選択された全ての領域又はインフラの制御を攻撃者が獲得しない限り脅威レベルIIIの攻撃者からの攻撃を阻止することができる。
上記の方法及びプロセスによって提供されるプライバシーは、計算及びデータのシュレッディングに由来する。難読化及び暗号化は、実行待ち時間に多少のオーバヘッドを加えるが、性能悪化の主な原因は、コンピュータ間のネットワークの通信待ち時間に起因する。従って、関連する様々なコンピュータ間で送信されるメッセージの数及びメッセージのサイズを最小化することが重要である。
本文書で引用又は説明した各特許、特許出願及び公表文献の開示は、その全体が引用により本明細書に組み入れられる。
当業者であれば、本発明の好ましい実施形態に数多くの変更及び修正を行うことができ、このような変更及び修正は、本発明の趣旨から逸脱することなく行うことができると理解するであろう。従って、添付の特許請求の範囲は、本発明の真の趣旨及び範囲に含まれる全てのこのような同等の変形例も対象とするように意図される。
100 プログラム
110 信頼できるコンピュータ1
120 クラウドコンピュータ2
130 クラウドコンピュータ3
140 信頼できるコンピュータ4

Claims (121)

  1. コンピュータプログラムの実行方法であって、
    少なくとも1つの他のコンピュータに接続された信頼できるコンピュータ上に存在するコンピュータプログラムを一連の演算に分割するステップと、
    前記一連の演算の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に前記少なくとも1つの他のコンピュータに送信するステップと、
    前記信頼できるコンピュータにおいて、前記コンピュータプログラムの計算結果を受け取るステップと、
    を含むことを特徴とする方法。
  2. 前記一連の演算の各演算を他のそれぞれのコンピュータに送信する前に各演算を難読化するステップと、
    前記受け取った前記コンピュータプログラムの計算結果を逆難読化するステップと、
    をさらに含む、請求項1に記載の方法。
  3. 前記一連の演算は回路ゲート演算であり、各回路ゲート演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
    請求項2に記載の方法。
  4. 前記一連の演算の各演算を難読化する前記ステップは、
    前記第1のオペランドを第1の乱数値で難読化するステップと、
    前記第2のオペランドを第2の乱数値で難読化するステップと、
    を含む、請求項3に記載の方法。
  5. 前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記難読化されたオペランドを、
    前記難読化されたオペランドを用いて複数の演算の複数の結果を計算し、
    前記複数の結果を第2のコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップと、
    前記演算子、前記第1の乱数値及び前記第2の乱数値に基づいて前記複数の結果から1つの結果を選択し、
    前記選択された結果を第3の乱数値で難読化し、
    前記選択された結果を異なるコンピュータに送信する、
    ことを含む命令を前記第2のコンピュータに送信するステップと、
    を含む、請求項4に記載の方法。
  6. 前記一連の演算は数学演算であり、各数学演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
    請求項2に記載の方法。
  7. 前記一連の演算の各演算を送信前に難読化する前記ステップは、
    前記第1のオペランドを第1の乱数値で難読化するステップと、
    前記第2のオペランドを第2の乱数値で難読化するステップと、
    を含む、請求項6に記載の方法。
  8. 前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記演算子及び難読化されたオペランドを、
    前記演算子と、前記難読化された第1のオペランドと、前記難読化された第2のオペランドとを用いて第1の演算結果を計算し、
    第2のコンピュータから値を受け取り、
    前記演算子と、前記第1の結果と、前記値とを用いて第2の演算結果を計算し、
    前記第2の結果を異なるコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップを含む、
    請求項7に記載の方法。
  9. 前記第1のオペランドの前記難読化スキームは、前記第2のオペランドの前記難読化スキームと一致しない、
    請求項7に記載の方法。
  10. 第3の乱数値を用いて前記第1のオペランドの前記難読化スキームを前記第2のオペランドの前記難読化スキームに変換する遷移難読化関数が使用される、
    請求項9に記載の方法。
  11. 前記遷移難読化関数を一連の演算に分割するステップと、
    前記遷移難読化関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
    をさらに含む、請求項10に記載の方法。
  12. 前記遷移難読化関数の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記第1のオペランドが乗法難読化される場合、
    前記難読化されたオペランドを、
    第2のコンピュータから値を受け取り、
    前記難読化された第1のオペランドと前記値との和を計算し、
    前記和を第3のコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップと、
    前記和と前記第1の乱数値との商を計算し、
    前記商を異なるコンピュータに送信する、
    ことを含む命令を前記第3のコンピュータに送信するステップと、
    を含み、前記第1のオペランドが加法難読化される場合、
    前記難読化されたオペランドを、
    前記難読化された第1のオペランドと前記第3の乱数値との積を計算し、
    前記積を第1のコンピュータに送信する、
    ことを含む命令と共に第3のコンピュータに送信するステップと、
    第2のコンピュータから値を受け取り、
    前記積と前記値との間の差分を計算し、
    前記差分を異なるコンピュータに送信する、
    ことを含む命令を前記第1のコンピュータに送信するステップと、
    を含む、請求項11に記載の方法。
  13. 前記第2のコンピュータから受け取られる前記値は、前記第1の乱数値と前記第3の乱数値との積である、
    請求項12に記載の方法。
  14. 前記難読化は、コード難読化、データ難読化、又はこれらの両方を含む、
    請求項2に記載の方法。
  15. 前記コード難読化は、
    前記一連の演算がプログラムオペコードを含む場合に、
    前記プログラムオペコードをランダムなオペコード順列にマッピングする置換マップを生成するステップと、
    前記置換マップを介して前記一連のオペコードを前記ランダムなオペコード順列に変換するステップと、
    前記置換マップを、前記他のそれぞれのコンピュータによる逆難読化において使用されるようにリモートコンピュータに送信するステップと、
    を含む、請求項14に記載の方法。
  16. 前記逆難読化は、
    前記リモートコンピュータにおいて、前記置換マップの一部に対応するインデックスを他のコンピュータから受け取るステップと、
    前記置換マップの一部を前記リモートコンピュータから前記他のコンピュータに送信するステップと、
    を含む、請求項15に記載の方法。
  17. 前記逆難読化は、
    前記置換マップの一部に対応するインデックスを他のコンピュータから前記リモートコンピュータに送信するステップと、
    前記他のコンピュータにおいて、前記リモートコンピュータから前記置換マップの一部を受け取るステップと、
    前記置換マップの前記一部を介して前記ランダムなオペコード順列を前記一連のオペコードに変換するステップと、
    を含む、請求項15に記載の方法。
  18. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、無関係な関数を単一の関数に組み合わせるステップをさらに含む、
    請求項15に記載の方法。
  19. 前記無関係な関数は、パラメータを有して該パラメータのそれぞれの挙動を保持し、前記単一の関数は、前記パラメータとさらなるパラメータとを取ってどの挙動を実行すべきかを選択する、
    請求項18に記載の方法。
  20. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、関数を無限ループに変換するステップをさらに含み、前記無限ループは、switch文を含んで前記関数の挙動と同じ挙動を実行する、
    請求項15に記載の方法。
  21. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、前記コンピュータプログラムにデコイコードを挿入するステップをさらに含む、
    請求項15に記載の方法。
  22. 前記デコイコードは、不明瞭な述語スキームの一部である、
    請求項21に記載の方法。
  23. 前記デコイコードは、複数のわずかな変異を伴うコンピュータプログラムのオリジナルコードを含む、
    請求項21に記載の方法。
  24. 前記わずかな変異の数は、ユーザによって指定される、
    請求項23に記載の方法。
  25. 前記信頼できるコンピュータと前記少なくとも1つの他のコンピュータとの間の接続を暗号化するステップをさらに含む、
    請求項1に記載の方法。
  26. 前記一連の演算の各演算の各データ値を暗号化するステップをさらに含む、
    請求項1に記載の方法。
  27. 各演算の各データ値を暗号化するステップは、加算演算については加法準同型暗号スキームを用いて実行され、乗算演算については乗法準同型暗号スキームを用いて実行される、
    請求項26に記載の方法。
  28. 加法準同型暗号データ値を乗法準同型暗号データ値に変換し、乗法準同型暗号データ値を加法準同型暗号データ値に変換する遷移暗号関数が使用される、
    請求項27に記載の方法。
  29. 前記遷移暗号関数を一連の演算に分割するステップと、
    前記遷移暗号関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
    をさらに含む、請求項28に記載の方法。
  30. 前記一連の演算の各演算を暗号化するステップをさらに含む、
    請求項1に記載の方法。
  31. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、
    前記入力要求を前記プログラムドライバからネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記入力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記ネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の応答を受け取るステップと、
    前記応答を、前記計算において使用されるように前記ネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む、請求項1に記載の方法。
  32. 前記受け取られる応答は暗号化される、
    請求項31に記載の方法。
  33. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記第1の信頼できるコンピュータ上のネットワークドライバにおいて、前記装置に入力を求める要求を前記特定のコンピュータから受け取るステップと、
    前記要求を前記ネットワークドライバから前記装置の入力ドライバに受け渡すステップと、
    前記装置からの応答を前記入力ドライバから前記ネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記応答を前記特定のコンピュータに送信するステップと、
    をさらに含む、請求項1に記載の方法。
  34. 前記装置からの前記応答を前記入力ドライバから前記ネットワークドライバに受け渡す前に、前記応答を暗号化するステップをさらに含む、
    請求項33に記載の方法。
  35. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、
    前記出力要求を前記プログラムドライバからネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記出力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記ネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の状態を受け取るステップと、
    前記状態を、前記計算において使用されるように前記ネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む、請求項1に記載の方法。
  36. 前記出力要求は、暗号化データを含む、
    請求項35に記載の方法。
  37. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記第1の信頼できるコンピュータ上のネットワークドライバにおいて、前記装置への出力要求を前記特定のコンピュータから受け取るステップと、
    前記要求を前記ネットワークドライバから前記装置の出力ドライバに受け渡すステップと、
    前記装置からの状態を前記出力ドライバから前記ネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記状態を前記特定のコンピュータに送信するステップと、
    をさらに含む、請求項1に記載の方法。
  38. 前記出力要求は、暗号化データを含む、
    請求項37に記載の方法。
  39. 前記要求を前記ネットワークドライバから前記出力ドライバに受け渡す前に、前記暗号化データを暗号解読するステップをさらに含む、
    請求項38に記載の方法。
  40. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、
    前記入力要求を前記プログラムドライバから第1のネットワークドライバに受け渡すステップと、
    前記第1のネットワークドライバを介して前記入力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて前記入力要求を前記特定のコンピュータから受け取るステップと、
    前記入力要求を前記第2のネットワークドライバから前記装置の入力ドライバに受け渡すステップと、
    前記装置からの応答を前記入力ドライバから前記第2のネットワークドライバに受け渡すステップと、
    前記第2のネットワークドライバを介して前記応答を前記特定のコンピュータに送信するステップと、
    前記第1のネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の応答を受け取るステップと、
    前記応答を、前記計算において使用されるように前記第1のネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む、請求項1に記載の方法。
  41. 前記装置からの前記応答を前記入力ドライバから前記第2のネットワークドライバに受け渡す前に、前記応答を暗号化するステップをさらに含む、
    請求項40に記載の方法。
  42. 前記第1の信頼できるコンピュータからの前記受け取られる応答は暗号化される、
    請求項40に記載の方法。
  43. 特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、
    前記出力要求を前記プログラムドライバから第1のネットワークドライバに受け渡すステップと、
    前記第1のネットワークドライバを介して前記出力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて前記出力要求を前記特定のコンピュータから受け取るステップと、
    前記出力要求を前記第2のネットワークドライバから前記装置の出力ドライバに受け渡すステップと、
    前記装置からの状態を前記出力ドライバから前記第2のネットワークドライバに受け渡すステップと、
    前記第2のネットワークドライバを介して前記状態を前記特定のコンピュータに送信するステップと、
    前記第1のネットワークドライバにおいて前記第1の信頼できるコンピュータから前記状態を受け取るステップと、
    前記状態を、前記計算において使用されるように前記第1のネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む、請求項1に記載の方法。
  44. 前記出力要求は、暗号化データを含む、
    請求項43に記載の方法。
  45. 前記出力要求を前記第2のネットワークドライバから前記出力ドライバに受け渡す前に、前記暗号化データを暗号解読するステップをさらに含む、
    請求項44に記載の方法。
  46. 前記少なくとも1つの他のコンピュータはクラウドの一部である、
    請求項1に記載の方法。
  47. 前記クラウドは信頼できない、
    請求項46に記載の方法。
  48. 前記クラウドは、複数の管理領域にわたる、
    請求項46に記載の方法。
  49. 前記クラウドは、複数の商業的に異なるインフラにわたる、
    請求項46に記載の方法。
  50. 前記少なくとも1つの他のコンピュータは、企業ネットワークの一部である、
    請求項1に記載の方法。
  51. 前記少なくとも1つの他のコンピュータは、複数のコンピュータからランダムに選択される、
    請求項1に記載の方法。
  52. 前記複数のコンピュータの各コンピュータは信頼できない、
    請求項51に記載の方法。
  53. 前記少なくとも1つの他のコンピュータは信頼できない、
    請求項1に記載の方法。
  54. 前記少なくとも1つの他のコンピュータは、前記信頼できるコンピュータではない、
    請求項1に記載の方法。
  55. システムであって、少なくとも1つの他のコンピュータに通信可能に接続された少なくとも1つの信頼できるコンピュータを備え、該少なくとも1つの信頼できるコンピュータのうちの第1の信頼できるコンピュータは、実行時に前記システムに、
    前記第1の信頼できるコンピュータ上に存在するコンピュータプログラムを一連の演算に分割するステップと、
    前記一連の演算の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に前記少なくとも1つの他のコンピュータに送信するステップと、
    前記信頼できるコンピュータにおいて、前記コンピュータプログラムの計算結果を受け取るステップと、
    を含む動作を実行させるコンピュータ命令を記憶する、
    ことを特徴とするシステム。
  56. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    前記一連の演算の各演算を他のそれぞれのコンピュータに送信する前に各演算を難読化するステップと、
    前記受け取った前記コンピュータプログラムの計算結果を逆難読化するステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  57. 前記一連の演算は回路ゲート演算であり、各回路ゲート演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
    請求項56に記載のシステム。
  58. 前記一連の演算の各演算を難読化する前記ステップは、
    前記第1のオペランドを第1の乱数値で難読化するステップと、
    前記第2のオペランドを第2の乱数値で難読化するステップと、
    を含む、請求項57に記載のシステム。
  59. 前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記難読化されたオペランドを、
    前記難読化されたオペランドを用いて複数の演算の複数の結果を計算し、
    前記複数の結果を第2のコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップと、
    前記演算子、前記第1の乱数値及び前記第2の乱数値に基づいて前記複数の結果から1つの結果を選択し、
    前記選択された結果を第3の乱数値で難読化し、
    前記選択された結果を異なるコンピュータに送信する、
    ことを含む命令を前記第2のコンピュータに送信するステップと、
    を含む、請求項58に記載のシステム。
  60. 前記一連の演算は数学演算であり、各数学演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
    請求項56に記載のシステム。
  61. 前記一連の演算の各演算は、ハードウェアユニットによって実行される演算に対応する、
    請求項56に記載のシステム。
  62. 前記少なくとも1つの他のコンピュータ上の整数加算器をさらに備える、
    請求項61に記載のシステム。
  63. 前記少なくとも1つの他のコンピュータ上の整数乗算器をさらに備える、
    請求項61に記載のシステム。
  64. 前記少なくとも1つの他のコンピュータ上の整数比較器をさらに備える、
    請求項61に記載のシステム。
  65. 前記少なくとも1つの他のコンピュータ上の浮動小数点乗算器をさらに備える、
    請求項61に記載のシステム。
  66. 前記一連の演算の各演算を送信前に難読化する前記ステップは、
    前記第1のオペランドを第1の乱数値で難読化するステップと、
    前記第2のオペランドを第2の乱数値で難読化するステップと、
    を含む、請求項60に記載のシステム。
  67. 前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記演算子及び難読化されたオペランドを、
    前記演算子と、前記難読化された第1のオペランドと、前記難読化された第2のオペランドとを用いて第1の演算結果を計算し、
    第2のコンピュータから値を受け取り、
    前記演算子と、前記第1の結果と、前記値とを用いて第2の演算結果を計算し、
    前記第2の結果を異なるコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップを含む、
    請求項66に記載のシステム。
  68. 前記第1のオペランドの前記難読化スキームは、前記第2のオペランドの前記難読化スキームと一致しない、
    請求項66に記載のシステム。
  69. 第3の乱数値を用いて前記第1のオペランドの前記難読化スキームを前記第2のオペランドの前記難読化スキームに変換する遷移難読化関数が使用される、
    請求項68に記載のシステム。
  70. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    前記遷移難読化関数を一連の演算に分割するステップと、
    前記遷移難読化関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項69に記載のシステム。
  71. 前記遷移難読化関数の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
    前記第1のオペランドが乗法難読化される場合、
    前記難読化されたオペランドを、
    第2のコンピュータから値を受け取り、
    前記難読化された第1のオペランドと前記値との和を計算し、
    前記和を第3のコンピュータに送信する、
    ことを含む命令と共に第1のコンピュータに送信するステップと、
    前記和と前記第1の乱数値との商を計算し、
    前記商を異なるコンピュータに送信する、
    ことを含む命令を前記第3のコンピュータに送信するステップと、
    を含み、前記第1のオペランドが加法難読化される場合、
    前記難読化されたオペランドを、
    前記難読化された第1のオペランドと前記第3の乱数値との積を計算し、
    前記積を第1のコンピュータに送信する、
    ことを含む命令と共に第3のコンピュータに送信するステップと、
    第2のコンピュータから値を受け取り、
    前記積と前記値との間の差分を計算し、
    前記差分を異なるコンピュータに送信する、
    ことを含む命令を前記第1のコンピュータに送信するステップと、
    を含む、請求項70に記載のシステム。
  72. 前記第2のコンピュータから受け取られる前記値は、前記第1の乱数値と前記第3の乱数値との積である、
    請求項71に記載のシステム。
  73. 前記難読化は、コード難読化、データ難読化、又はこれらの両方を含む、
    請求項56に記載のシステム。
  74. 前記コード難読化は、
    前記一連の演算がプログラムオペコードを含む場合に、
    前記プログラムオペコードをランダムなオペコード順列にマッピングする置換マップを生成するステップと、
    前記置換マップを介して前記一連のオペコードを前記ランダムなオペコード順列に変換するステップと、
    前記置換マップを、前記他のそれぞれのコンピュータによる逆難読化において使用されるようにリモートコンピュータに送信するステップと、
    を含む、請求項73に記載のシステム。
  75. 前記逆難読化は、
    前記リモートコンピュータにおいて、前記置換マップの一部に対応するインデックスを他のコンピュータから受け取るステップと、
    前記置換マップの一部を前記リモートコンピュータから前記他のコンピュータに送信するステップと、
    を含む、請求項74に記載のシステム。
  76. 前記逆難読化は、
    前記置換マップの一部に対応するインデックスを他のコンピュータから前記リモートコンピュータに送信するステップと、
    前記他のコンピュータにおいて、前記リモートコンピュータから前記置換マップの一部を受け取るステップと、
    前記置換マップの前記一部を介して前記ランダムなオペコード順列を前記一連のオペコードに変換するステップと、
    を含む、請求項74に記載のシステム。
  77. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、無関係な関数を単一の関数に組み合わせるステップをさらに含む、
    請求項74に記載のシステム。
  78. 前記無関係な関数は、パラメータを有して該パラメータのそれぞれの挙動を保持し、前記単一の関数は、前記パラメータとさらなるパラメータとを取ってどの挙動を実行すべきかを選択する、
    請求項77に記載のシステム。
  79. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、関数を無限ループに変換するステップをさらに含み、前記無限ループは、switch文を含んで前記関数の挙動と同じ挙動を実行する、
    請求項74に記載のシステム。
  80. 前記一連の演算がプログラムオペコードを含む場合のコード難読化は、前記コンピュータプログラムにデコイコードを挿入するステップをさらに含む、
    請求項74に記載のシステム。
  81. 前記デコイコードは、不明瞭な述語スキームの一部である、
    請求項80に記載のシステム。
  82. 前記デコイコードは、複数のわずかな変異を伴うコンピュータプログラムのオリジナルコードを含む、
    請求項80に記載のシステム。
  83. 前記わずかな変異の数は、ユーザによって指定される、
    請求項82に記載のシステム。
  84. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記信頼できるコンピュータと前記少なくとも1つの他のコンピュータとの間の接続を暗号化するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  85. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記一連の演算の各演算の各データ値を暗号化するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  86. 各演算の各データ値を暗号化するステップは、加算演算については加法準同型暗号スキームを用いて実行され、乗算演算については乗法準同型暗号スキームを用いて実行される、
    請求項85に記載のシステム。
  87. 加法準同型暗号データ値を乗法準同型暗号データ値に変換し、乗法準同型暗号データ値を加法準同型暗号データ値に変換する遷移暗号関数が使用される、
    請求項86に記載のシステム。
  88. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    前記遷移暗号関数を一連の演算に分割するステップと、
    前記遷移暗号関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項87に記載のシステム。
  89. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記一連の演算の各演算を暗号化するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  90. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、
    前記入力要求を前記プログラムドライバからネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記入力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記ネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の応答を受け取るステップと、
    前記応答を、前記計算において使用されるように前記ネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  91. 前記受け取られる応答は暗号化される、
    請求項90に記載のシステム。
  92. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記第1の信頼できるコンピュータ上のネットワークドライバにおいて、前記装置に入力を求める要求を前記特定のコンピュータから受け取るステップと、
    前記要求を前記ネットワークドライバから前記装置の入力ドライバに受け渡すステップと、
    前記装置からの応答を前記入力ドライバから前記ネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記応答を前記特定のコンピュータに送信するステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  93. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記装置からの前記応答を前記入力ドライバから前記ネットワークドライバに受け渡す前に、前記応答を暗号化するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項92に記載のシステム。
  94. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、
    前記出力要求を前記プログラムドライバからネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記出力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記ネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の状態を受け取るステップと、
    前記状態を、前記計算において使用されるように前記ネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  95. 前記出力要求は、暗号化データを含む、
    請求項94に記載のシステム。
  96. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記第1の信頼できるコンピュータ上のネットワークドライバにおいて、前記装置への出力要求を前記特定のコンピュータから受け取るステップと、
    前記要求を前記ネットワークドライバから前記装置の出力ドライバに受け渡すステップと、
    前記装置からの状態を前記出力ドライバから前記ネットワークドライバに受け渡すステップと、
    前記ネットワークドライバを介して前記状態を前記特定のコンピュータに送信するステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  97. 前記出力要求は、暗号化データを含む、
    請求項96に記載のシステム。
  98. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記要求を前記ネットワークドライバから前記出力ドライバに受け渡す前に、前記暗号化データを暗号解読するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項97に記載のシステム。
  99. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、
    前記入力要求を前記プログラムドライバから第1のネットワークドライバに受け渡すステップと、
    前記第1のネットワークドライバを介して前記入力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて前記入力要求を前記特定のコンピュータから受け取るステップと、
    前記入力要求を前記第2のネットワークドライバから前記装置の入力ドライバに受け渡すステップと、
    前記装置からの応答を前記入力ドライバから前記第2のネットワークドライバに受け渡すステップと、
    前記第2のネットワークドライバを介して前記応答を前記特定のコンピュータに送信するステップと、
    前記第1のネットワークドライバにおいて前記第1の信頼できるコンピュータから前記装置の応答を受け取るステップと、
    前記応答を、前記計算において使用されるように前記第1のネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  100. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記装置からの前記応答を前記入力ドライバから前記第2のネットワークドライバに受け渡す前に、前記応答を暗号化するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項99に記載のシステム。
  101. 前記第1の信頼できるコンピュータからの前記受け取られる応答は暗号化される、
    請求項99に記載のシステム。
  102. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
    特定のコンピュータ上における演算の結果の計算中に、該演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、
    前記特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、
    前記出力要求を前記プログラムドライバから第1のネットワークドライバに受け渡すステップと、
    前記第1のネットワークドライバを介して前記出力要求を前記第1の信頼できるコンピュータに送信するステップと、
    前記第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて前記出力要求を前記特定のコンピュータから受け取るステップと、
    前記出力要求を前記第2のネットワークドライバから前記装置の出力ドライバに受け渡すステップと、
    前記装置からの状態を前記出力ドライバから前記第2のネットワークドライバに受け渡すステップと、
    前記第2のネットワークドライバを介して前記状態を前記特定のコンピュータに送信するステップと、
    前記第1のネットワークドライバにおいて前記第1の信頼できるコンピュータから前記状態を受け取るステップと、
    前記状態を、前記計算において使用されるように前記第1のネットワークドライバから前記プログラムドライバに受け渡すステップと、
    をさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項55に記載のシステム。
  103. 前記出力要求は、暗号化データを含む、
    請求項102に記載のシステム。
  104. 前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、前記出力要求を前記第2のネットワークドライバから前記出力ドライバに受け渡す前に、前記暗号化データを暗号解読するステップをさらに含む動作を実行させるコンピュータ命令を記憶する、
    請求項103に記載のシステム。
  105. 前記少なくとも1つの他のコンピュータはクラウドの一部である、
    請求項55に記載のシステム。
  106. 前記クラウドは信頼できない、
    請求項105に記載のシステム。
  107. 前記クラウドは、複数の管理領域にわたる、
    請求項105に記載のシステム。
  108. 前記クラウドは、複数の商業的に異なるインフラにわたる、
    請求項105に記載のシステム。
  109. 前記少なくとも1つの他のコンピュータは、企業ネットワークの一部である、
    請求項55に記載のシステム。
  110. 前記少なくとも1つの他のコンピュータは、複数のコンピュータからランダムに選択される、
    請求項55に記載のシステム。
  111. 前記複数のコンピュータの各コンピュータは信頼できない、
    請求項110に記載のシステム。
  112. 前記少なくとも1つの他のコンピュータは信頼できない、
    請求項55に記載のシステム。
  113. 前記少なくとも1つの他のコンピュータは、前記信頼できるコンピュータではない、
    請求項55に記載のシステム。
  114. 前記信頼できるコンピュータは、1又は2以上の仮想機械を含む、
    請求項1に記載の方法。
  115. 前記少なくとも1つの他のコンピュータは、1又は2以上の仮想機械を含む、
    請求項1に記載の方法。
  116. 前記別のコンピュータは、1又は2以上の仮想機械を含む、
    請求項1に記載の方法。
  117. 前記信頼できるコンピュータは、1又は2以上の仮想機械を含む、
    請求項55に記載のシステム。
  118. 前記少なくとも1つの他のコンピュータは、1又は2以上の仮想機械を含む、
    請求項55に記載のシステム。
  119. 前記別のコンピュータは、1又は2以上の仮想機械を含む、
    請求項55に記載のシステム。
  120. 前記一連の演算の各演算を付属命令と共に前記少なくとも1つの他のコンピュータに送信する前記ステップは、各演算を計算のために複数のコンピュータに送信するステップを含む、
    請求項1に記載の方法。
  121. 前記一連の演算の各演算を付属命令と共に前記少なくとも1つの他のコンピュータに送信する前記ステップは、各演算を計算のために複数のコンピュータに送信するステップを含む、
    請求項55に記載のシステム。
JP2018523361A 2015-07-21 2016-07-20 信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス Active JP6880017B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/804,713 US10110566B2 (en) 2015-07-21 2015-07-21 Systems and processes for executing private programs on untrusted computers
US14/804,713 2015-07-21
PCT/US2016/043117 WO2017015357A1 (en) 2015-07-21 2016-07-20 Systems and processes for executing private programs on untrusted computers

Publications (3)

Publication Number Publication Date
JP2018522291A true JP2018522291A (ja) 2018-08-09
JP2018522291A5 JP2018522291A5 (ja) 2019-08-29
JP6880017B2 JP6880017B2 (ja) 2021-06-02

Family

ID=57834671

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018523361A Active JP6880017B2 (ja) 2015-07-21 2016-07-20 信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス

Country Status (10)

Country Link
US (2) US10110566B2 (ja)
EP (1) EP3326345B1 (ja)
JP (1) JP6880017B2 (ja)
KR (1) KR102315831B1 (ja)
CN (1) CN108476198B (ja)
AU (1) AU2016297559B2 (ja)
CA (1) CA2998323C (ja)
DK (1) DK3326345T3 (ja)
IL (1) IL257040B (ja)
WO (1) WO2017015357A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023007633A1 (ja) * 2021-07-28 2023-02-02 富士通株式会社 制御方法、制御プログラム、ノード、およびシステム

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10348503B2 (en) * 2016-12-12 2019-07-09 Sap Portals Israel Ltd. Client side actions validation
SG11202004674VA (en) * 2017-12-18 2020-06-29 University Of Central Florida Research Foundation Inc Techniques for securely executing code that operates on encrypted data on a public computer
US11232224B2 (en) 2018-03-15 2022-01-25 Servicenow, Inc. Database encryption
CN109446828B (zh) * 2018-11-07 2020-10-13 北京邮电大学 一种安全多方计算方法及装置
US11042634B2 (en) * 2018-12-21 2021-06-22 Fujitsu Limited Determining information leakage of computer-readable programs
WO2020240246A1 (en) * 2019-05-29 2020-12-03 Commissariat A L 'energie Atomique Et Aux Energies Alternatives A computer-implemented method for obfuscating a program code
US11973743B2 (en) 2019-12-13 2024-04-30 TripleBlind, Inc. Systems and methods for providing a systemic error in artificial intelligence algorithms
US11431688B2 (en) 2019-12-13 2022-08-30 TripleBlind, Inc. Systems and methods for providing a modified loss function in federated-split learning
US10924460B2 (en) * 2019-12-13 2021-02-16 TripleBlind, Inc. Systems and methods for dividing filters in neural networks for private data computations
US11853793B2 (en) 2020-10-09 2023-12-26 Samsung Electronics Co., Ltd. Methods and system for on-device AI model parameter run-time protection
EP4050471A1 (en) * 2021-02-26 2022-08-31 Zama SAS Encrypted scalar multiplication
US20240004998A1 (en) * 2022-07-01 2024-01-04 Nxp B.V. Method for protecting a machine learning model from a side channel attack

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008283672A (ja) * 2007-03-14 2008-11-20 Intel Corp 複数モードでのaes暗号化または復号の単一命令での実行
US20120066510A1 (en) * 2010-09-15 2012-03-15 At&T Intellectual Property I, L.P. Methods, systems, and computer program products for performing homomorphic encryption and decryption on individual operations
JP2015501946A (ja) * 2011-11-17 2015-01-19 エイアールエム リミテッド 暗号化アルゴリズム内のハッシュ値の生成をサポートするためのsimd命令

Family Cites Families (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6067620A (en) * 1996-07-30 2000-05-23 Holden; James M. Stand alone security device for computer networks
US6477648B1 (en) * 1997-03-23 2002-11-05 Novell, Inc. Trusted workstation in a networked client/server computing system
US6957341B2 (en) * 1998-05-14 2005-10-18 Purdue Research Foundation Method and system for secure computational outsourcing and disguise
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
AU2001243365A1 (en) * 2000-03-02 2001-09-12 Alarity Corporation System and method for process protection
US7343619B2 (en) * 2002-03-16 2008-03-11 Trustedflow Systems, Inc. Trusted flow and operation control method
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
DE102005021749A1 (de) * 2005-05-11 2006-11-16 Fachhochschule Dortmund Verfahren und Vorrichtung zur programmgesteuerten Informationsverarbeitung
CN101491000B (zh) * 2006-07-12 2011-12-28 耶德托公司 用于混淆密码函数的方法和系统
US20090249492A1 (en) * 2006-09-21 2009-10-01 Hans Martin Boesgaard Sorensen Fabrication of computer executable program files from source code
US9411976B2 (en) * 2006-12-01 2016-08-09 Maidsafe Foundation Communication system and method
US9124650B2 (en) 2006-12-13 2015-09-01 Quickplay Media Inc. Digital rights management in a mobile environment
US8312518B1 (en) * 2007-09-27 2012-11-13 Avaya Inc. Island of trust in a service-oriented environment
US8762736B1 (en) * 2008-04-04 2014-06-24 Massachusetts Institute Of Technology One-time programs
US8209744B2 (en) * 2008-05-16 2012-06-26 Microsoft Corporation Mobile device assisted secure computer network communication
US8171306B2 (en) * 2008-11-05 2012-05-01 Microsoft Corporation Universal secure token for obfuscation and tamper resistance
WO2011037665A2 (en) * 2009-08-04 2011-03-31 Carnegie Mellon University Methods and apparatuses for user-verifiable trusted path in the presence of malware
US8347398B1 (en) * 2009-09-23 2013-01-01 Savvystuff Property Trust Selected text obfuscation and encryption in a local, network and cloud computing environment
US20110202765A1 (en) * 2010-02-17 2011-08-18 Microsoft Corporation Securely move virtual machines between host servers
US9703586B2 (en) * 2010-02-17 2017-07-11 Microsoft Technology Licensing, Llc Distribution control and tracking mechanism of virtual machine appliances
US8862895B2 (en) * 2010-04-27 2014-10-14 Fuji Xerox Co., Ltd. Systems and methods for communication, storage, retrieval, and computation of simple statistics and logical operations on encrypted data
US20110296164A1 (en) * 2010-05-28 2011-12-01 Mcafee, Inc. System and method for providing secure network services
WO2011150346A2 (en) * 2010-05-28 2011-12-01 Laurich Lawrence A Accelerator system for use with secure data storage
US9165137B2 (en) * 2010-08-18 2015-10-20 Security First Corp. Systems and methods for securing virtual machine computing environments
US20120084562A1 (en) * 2010-10-04 2012-04-05 Ralph Rabert Farina Methods and systems for updating a secure boot device using cryptographically secured communications across unsecured networks
US8762964B2 (en) 2010-12-17 2014-06-24 Cisco Technology, Inc. Optimizing symbol manipulation language-based executable applications for distributed execution
US8700906B2 (en) * 2011-01-14 2014-04-15 Microsoft Corporation Secure computing in multi-tenant data centers
US9647989B2 (en) 2011-04-27 2017-05-09 Symantec Corporation System and method of data interception and conversion in a proxy
US9077525B2 (en) * 2011-06-24 2015-07-07 Microsoft Technology Licensing, Llc User-controlled data encryption with obfuscated policy
US9203621B2 (en) * 2011-07-11 2015-12-01 Hewlett-Packard Development Company, L.P. Policy-based data management
US20130019092A1 (en) * 2011-07-14 2013-01-17 Barracuda Inc. System to Embed Enhanced Security / Privacy Functions Into a User Client
JP2015503280A (ja) * 2011-11-28 2015-01-29 ポルティコア エルティディ. 仮想化とクラウド・コンピューティングの安全確保と管理に適用される、安全未確保のコンピュータ環境で暗号化キーを確保する方法と装置。
US9208319B2 (en) * 2011-12-15 2015-12-08 Microsoft Technology Licensing, Llc Code base partitioning system
US8615656B2 (en) * 2012-01-09 2013-12-24 The Mitre Corporation Secure remote peripheral encryption tunnel
RU2620712C2 (ru) * 2012-01-09 2017-05-29 Конинклейке Филипс Н.В. Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
US9454666B2 (en) * 2012-03-26 2016-09-27 Irdeto B.V. Method for protecting data
EP2645618A1 (en) * 2012-03-30 2013-10-02 British Telecommunications Public Limited Company Method and system for network data access
EP2672673B1 (en) * 2012-06-07 2016-05-25 Alcatel Lucent Apparatus and method for secure data processing
EP2672672A1 (en) * 2012-06-07 2013-12-11 Alcatel-Lucent Secure data processing
US8656482B1 (en) * 2012-08-20 2014-02-18 Bitdefender IPR Management Ltd. Secure communication using a trusted virtual machine
US20140195804A1 (en) * 2012-10-12 2014-07-10 Safelylocked, Llc Techniques for secure data exchange
US9176838B2 (en) * 2012-10-19 2015-11-03 Intel Corporation Encrypted data inspection in a network environment
GB2508894A (en) * 2012-12-14 2014-06-18 Ibm Preventing a trusted boot device from being booted in a virtual machine
US9535715B2 (en) * 2012-12-14 2017-01-03 Microsoft Technology Licensing, Llc Booting from a trusted network image
US8909967B1 (en) * 2012-12-31 2014-12-09 Emc Corporation Technique for secure computation
US10063380B2 (en) * 2013-01-22 2018-08-28 Amazon Technologies, Inc. Secure interface for invoking privileged operations
US9503268B2 (en) * 2013-01-22 2016-11-22 Amazon Technologies, Inc. Securing results of privileged computing operations
US9055038B1 (en) * 2013-02-04 2015-06-09 Stealth Software Technologies, Inc. Apparatus, system, and method to garble programs
US9141823B2 (en) * 2013-03-15 2015-09-22 Veridicom, Sa De Cv Abstraction layer for default encryption with orthogonal encryption logic session object; and automated authentication, with a method for online litigation
US9104862B2 (en) * 2013-04-01 2015-08-11 Uniquesoft, Llc Secure computing device using new software versions
US10275593B2 (en) * 2013-04-01 2019-04-30 Uniquesoft, Llc Secure computing device using different central processing resources
US9361456B2 (en) * 2013-04-01 2016-06-07 Uniquesoft, Llc Secure computing device using a library of programs
US9424421B2 (en) 2013-05-03 2016-08-23 Visa International Service Association Security engine for a secure operating environment
US9558358B2 (en) * 2013-06-27 2017-01-31 Visa International Service Association Random number generator in a virtualized environment
CN105408913B (zh) * 2013-08-21 2019-03-15 英特尔公司 在云中隐私地处理数据
CN103559458B (zh) * 2013-10-09 2016-08-17 广州华迅网络科技有限公司 数据散列获取方法及其系统
US9235692B2 (en) * 2013-12-13 2016-01-12 International Business Machines Corporation Secure application debugging
EP3860041B1 (en) * 2014-06-18 2023-03-15 Visa International Service Association Efficient methods for authenticated communication
US9813245B2 (en) * 2014-08-29 2017-11-07 Visa International Service Association Methods for secure cryptogram generation
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments
CN104243166A (zh) * 2014-09-05 2014-12-24 深圳市中兴移动通信有限公司 录音加密方法和装置
US9735968B2 (en) * 2014-10-20 2017-08-15 Microsoft Technology Licensing, Llc Trust service for a client device
EP3234782A4 (en) * 2014-12-16 2018-10-17 Kyndi, Inc. Method and apparatus for randomizing computer instruction sets, memory registers and pointers
CN107251476A (zh) * 2015-02-13 2017-10-13 维萨国际服务协会 保密通信管理
US9596263B1 (en) * 2015-02-23 2017-03-14 Amazon Technolgies, Inc. Obfuscation and de-obfuscation of identifiers
US10484168B2 (en) * 2015-03-02 2019-11-19 Dell Products L.P. Methods and systems for obfuscating data and computations defined in a secure distributed transaction ledger
US9712503B1 (en) * 2015-03-23 2017-07-18 Amazon Technologies, Inc. Computing instance migration
US20160294794A1 (en) * 2015-04-04 2016-10-06 Aleksandar Mancic Security System For Data Communications Including Key Management And Privacy
EP3284003B1 (en) * 2015-04-14 2021-02-24 Gigavation, Inc. Paravirtualized security threat protection of a computer-driven system with networked devices
SG11201804478VA (en) * 2015-05-19 2018-06-28 Cryptomove Inc Security via data concealment
US20180089415A1 (en) * 2015-06-11 2018-03-29 International Business Machines Corporation User trusted device for detecting a virtualized environment
US9667606B2 (en) * 2015-07-01 2017-05-30 Cyphermatrix, Inc. Systems, methods and computer readable medium to implement secured computational infrastructure for cloud and data center environments

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008283672A (ja) * 2007-03-14 2008-11-20 Intel Corp 複数モードでのaes暗号化または復号の単一命令での実行
US20120066510A1 (en) * 2010-09-15 2012-03-15 At&T Intellectual Property I, L.P. Methods, systems, and computer program products for performing homomorphic encryption and decryption on individual operations
JP2015501946A (ja) * 2011-11-17 2015-01-19 エイアールエム リミテッド 暗号化アルゴリズム内のハッシュ値の生成をサポートするためのsimd命令

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023007633A1 (ja) * 2021-07-28 2023-02-02 富士通株式会社 制御方法、制御プログラム、ノード、およびシステム

Also Published As

Publication number Publication date
EP3326345A4 (en) 2019-03-27
CA2998323A1 (en) 2017-01-26
US20170026342A1 (en) 2017-01-26
US10110566B2 (en) 2018-10-23
DK3326345T3 (da) 2021-10-11
CN108476198B (zh) 2020-09-22
IL257040A (en) 2018-03-29
CA2998323C (en) 2022-06-07
EP3326345A1 (en) 2018-05-30
EP3326345B1 (en) 2021-10-06
JP6880017B2 (ja) 2021-06-02
AU2016297559B2 (en) 2020-09-03
IL257040B (en) 2020-02-27
KR20180084732A (ko) 2018-07-25
CN108476198A (zh) 2018-08-31
AU2016297559A1 (en) 2018-03-15
WO2017015357A1 (en) 2017-01-26
US20190044915A1 (en) 2019-02-07
KR102315831B1 (ko) 2021-10-22
US10652216B2 (en) 2020-05-12

Similar Documents

Publication Publication Date Title
JP6880017B2 (ja) 信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス
Sadeghi et al. Token-based cloud computing: secure outsourcing of data and arbitrary computations with lower latency
US10367637B2 (en) Modular exponentiation with transparent side channel attack countermeasures
Tsoutsos et al. The HEROIC framework: Encrypted computation without shared keys
US11575501B2 (en) Preserving aggregation using homomorphic encryption and trusted execution environment, secure against malicious aggregator
US8976960B2 (en) Methods and apparatus for correlation protected processing of cryptographic operations
CN113326518A (zh) 一种数据处理方法及装置
US10075290B2 (en) Operator lifting in cryptographic algorithm
KR20040052304A (ko) 디지털 하드웨어 시스템 보안 장치 및 방법
US11496287B2 (en) Privacy preserving fully homomorphic encryption with circuit verification
AU2018374489B2 (en) Method for protecting a source of entropy used in countermeasures securing a whitebox cryptographic algorithm
US20170134379A1 (en) Method for securing an application and data
CN114124366A (zh) 一种可信芯片的密钥生成方法及相关设备
Muhammed et al. Comparative Analysis of AES, Blowfish, Twofish, Salsa20, and ChaCha20 for Image Encryption
Elrabaa et al. A protection and pay-per-use licensing scheme for on-cloud FPGA circuit IPs
Selo et al. Private function evaluation using intel’s sgx
Abou Selo et al. Research Article Private Function Evaluation Using Intel’s SGX
Jaswanth et al. Data Encryption: A Compiler Based Approach
Rass et al. Licensed processing of encrypted information
EP3010172A1 (en) System enabling licensed processing of encrypted information
Ruan et al. Building blocks of the security and management engine
Kariapper Cryptography in the Cloud: Securing Data in Cloud with Encryption
KR20140119837A (ko) 인터넷서비스 등에 응용가능한 패턴암호와 이 암호를 이용한 시스템과 비즈니스방법

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190722

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190722

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200819

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201001

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210222

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210401

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210430

R150 Certificate of patent or registration of utility model

Ref document number: 6880017

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250