特許第6880017号(P6880017)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ バッフル インコーポレイテッドの特許一覧

特許6880017信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス
<>
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000003
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000004
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000005
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000006
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000007
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000008
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000009
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000010
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000011
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000012
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000013
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000014
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000015
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000016
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000017
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000018
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000019
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000020
  • 特許6880017-信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス 図000021
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6880017
(24)【登録日】2021年5月7日
(45)【発行日】2021年6月2日
(54)【発明の名称】信頼できないコンピュータ上でプライベートプログラムを実行するためのシステム及びプロセス
(51)【国際特許分類】
   G09C 1/00 20060101AFI20210524BHJP
【FI】
   G09C1/00 650Z
【請求項の数】57
【全頁数】34
(21)【出願番号】特願2018-523361(P2018-523361)
(86)(22)【出願日】2016年7月20日
(65)【公表番号】特表2018-522291(P2018-522291A)
(43)【公表日】2018年8月9日
(86)【国際出願番号】US2016043117
(87)【国際公開番号】WO2017015357
(87)【国際公開日】20170126
【審査請求日】2019年7月22日
(31)【優先権主張番号】14/804,713
(32)【優先日】2015年7月21日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】518023980
【氏名又は名称】バッフル インコーポレイテッド
(74)【代理人】
【識別番号】100094569
【弁理士】
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100088694
【弁理士】
【氏名又は名称】弟子丸 健
(74)【代理人】
【識別番号】100103610
【弁理士】
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100067013
【弁理士】
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100086771
【弁理士】
【氏名又は名称】西島 孝喜
(74)【代理人】
【識別番号】100109070
【弁理士】
【氏名又は名称】須田 洋之
(74)【代理人】
【識別番号】100109335
【弁理士】
【氏名又は名称】上杉 浩
(74)【代理人】
【識別番号】100120525
【弁理士】
【氏名又は名称】近藤 直樹
(74)【代理人】
【識別番号】100139712
【弁理士】
【氏名又は名称】那須 威夫
(74)【代理人】
【識別番号】100176418
【弁理士】
【氏名又は名称】工藤 嘉晃
(72)【発明者】
【氏名】シダナ アシュミート
(72)【発明者】
【氏名】コルテ プリヤダーシャン
(72)【発明者】
【氏名】リン カルヴァン
【審査官】 金沢 史明
(56)【参考文献】
【文献】 米国特許出願公開第2012/0066510(US,A1)
【文献】 特開2008−283672(JP,A)
【文献】 特表2015−501946(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
H04L 9/10
G06F 21/10−21/12
(57)【特許請求の範囲】
【請求項1】
各ステップが特定のコンピュータによって実行されるコンピュータプログラムの実行方法であって、
少なくとも1つの他のコンピュータに接続された信頼できるコンピュータ上に存在する実行可能なコンピュータプログラムを一連の演算に分割するステップと、
前記信頼できるコンピュータ上の前記一連の演算の各演算を難読化するステップと、
行可能なコンピュータプログラムのリモート実行のために、前記難読化した演算を付属命令と共に、前記信頼できるコンピュータから前記少なくとも1つの他のコンピュータに送信するステップであって、
前記付属命令は、
前記少なくとも1つの他のコンピュータによって、前記難読化された演算のそれぞれの結果を計算し、
前記少なくとも1つの他のコンピュータから、前記難読化された演算のそれぞれの結果を、難読化された演算を計算するために、前記難読化された演算のそれぞれの結果を必要とする前記少なくとも1つの他のコンピュータの別のコンピュータに転送し、
前記少なくとも1つの他のコンピュータによって、前記実行可能なコンピュータプログラムの難読化された計算結果として、最終的な前記難読化された演算のそれぞれの結果を前記信頼できるコンピュータに転送する、ステップと、
を含み、
前記方法は、前記信頼できるコンピュータにおいて、前記実行可能なコンピュータプログラムの前記難読化された計算結果を受信するステップと、
前記実行可能なコンピュータプログラムの受信した前記難読化された計算結果を逆難読化するステップと、
を含む演算を前記信頼できるコンピュータに行わせるステップをさらに含むことを特徴とする方法。
【請求項2】
前記一連の演算は回路ゲート演算であり、各回路ゲート演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
請求項1に記載の方法。
【請求項3】
前記一連の演算の各演算を難読化する前記ステップは、
前記第1のオペランドを第1の乱数値で難読化するステップと、
前記第2のオペランドを第2の乱数値で難読化するステップと、
を含む、請求項2に記載の方法。
【請求項4】
前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記難読化されたオペランドを、
前記難読化されたオペランドを用いて複数の演算の複数の結果を計算し、
前記複数の結果を第2のコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップと、
前記演算子、前記第1の乱数値及び前記第2の乱数値に基づいて前記複数の結果から1つの結果を選択し、
前記選択された結果を第3の乱数値で難読化し、
前記選択された結果を異なるコンピュータに送信する、
ことを含む命令を前記第2のコンピュータに送信するステップと、
を含む、請求項3に記載の方法。
【請求項5】
前記一連の演算はコンピュータ算術演算であり、各コンピュータ算術演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
請求項1に記載の方法。
【請求項6】
前記一連の演算の各演算を送信前に難読化する前記ステップは、
前記第1のオペランドを第1の乱数値で難読化するステップと、
前記第2のオペランドを第2の乱数値で難読化するステップと、
を含む、請求項5に記載の方法。
【請求項7】
前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記演算子及び難読化されたオペランドを、
前記演算子と、前記難読化された第1のオペランドと、前記難読化された第2のオペランドとを用いて第1の演算結果を計算し、
第2のコンピュータから値を受け取り、
前記演算子と、前記第1の結果と、前記値とを用いて第2の演算結果を計算し、
前記第2の結果を異なるコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップを含む、
請求項6に記載の方法。
【請求項8】
前記第1のオペランドの前記難読化スキームは、前記第2のオペランドの前記難読化スキームと一致しない、
請求項6に記載の方法。
【請求項9】
第3の乱数値を用いて前記第1のオペランドの前記難読化スキームを前記第2のオペランドの前記難読化スキームに変換する遷移難読化関数が使用される、
請求項8に記載の方法。
【請求項10】
前記遷移難読化関数を一連の演算に分割するステップと、
前記遷移難読化関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
をさらに含む、請求項9に記載の方法。
【請求項11】
前記遷移難読化関数の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記第1のオペランドが乗法難読化される場合、
前記難読化されたオペランドを、
第2のコンピュータから値を受け取り、
前記難読化された第1のオペランドと前記値との和を計算し、
前記和を第3のコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップと、
前記和と前記第1の乱数値との商を計算し、
前記商を異なるコンピュータに送信する、
ことを含む命令を前記第3のコンピュータに送信するステップと、
を含み、前記第1のオペランドが加法難読化される場合、
前記難読化されたオペランドを、
前記難読化された第1のオペランドと前記第3の乱数値との積を計算し、
前記積を第1のコンピュータに送信する、
ことを含む命令と共に第3のコンピュータに送信するステップと、
第2のコンピュータから値を受け取り、
前記積と前記値との間の差分を計算し、
前記差分を異なるコンピュータに送信する、
ことを含む命令を前記第1のコンピュータに送信するステップと、
を含む、請求項10に記載の方法。
【請求項12】
前記第2のコンピュータから受け取られる前記値は、前記第1の乱数値と前記第3の乱数値との積である、
請求項11に記載の方法。
【請求項13】
前記難読化は、コード難読化、データ難読化、又はこれらの両方を含む、
請求項1に記載の方法。
【請求項14】
前記少なくとも1つの他のコンピュータはクラウドの一部である、
請求項1に記載の方法。
【請求項15】
前記クラウドは信頼できない、
請求項14に記載の方法。
【請求項16】
前記クラウドは、複数の管理領域にわたる、
請求項14に記載の方法。
【請求項17】
前記クラウドは、複数の商業的に異なるインフラにわたる、
請求項14に記載の方法。
【請求項18】
前記少なくとも1つの他のコンピュータは、企業ネットワークの一部である、
請求項1に記載の方法。
【請求項19】
前記少なくとも1つの他のコンピュータは、複数のコンピュータからランダムに選択される、
請求項1に記載の方法。
【請求項20】
前記複数のコンピュータの各コンピュータは信頼できない、
請求項19に記載の方法。
【請求項21】
前記少なくとも1つの他のコンピュータは信頼できない、
請求項1に記載の方法。
【請求項22】
前記少なくとも1つの他のコンピュータは、前記信頼できるコンピュータではない、
請求項1に記載の方法。
【請求項23】
システムであって、少なくとも1つの他のコンピュータに通信可能に接続された少なくとも1つの信頼できるコンピュータを備え、前記信頼できるコンピュータは、実行時に前記システムに、
1の信頼できるコンピュータ上に存在する実行可能なコンピュータプログラムを一連の演算に分割するステップと、
前記一連の演算の各演算を難読化するステップと
記実行可能なコンピュータプログラムのリモート実行のために、前記信頼できるコンピュータから、前記難読化した演算を付属命令と共に、前記少なくとも1つの他のコンピュータに送信するステップであって
前記付属命令は、
前記少なくとも1つの他のコンピュータによって、前記難読化された演算のそれぞれの結果を計算し、
前記少なくとも1つの他のコンピュータから、前記難読化された演算のそれぞれの結果を、難読化された演算を計算するために、前記難読化された演算のそれぞれの結果を必要とする前記少なくとも1つの他のコンピュータの別のコンピュータに転送し、
前記少なくとも1つの他のコンピュータによって、前記実行可能なコンピュータプログラムの難読化された計算結果として、最終的な前記難読化された演算のそれぞれの結果を前記第1の信頼できるコンピュータに転送する、ステップと、
を含む動作を実行させるコンピュータ命令を記憶し、
前記命令は、さらに前記システムに備えられた前記第1の信頼できるコンピュータに、
記実行可能なコンピュータプログラムの前記難読化された計算結果を受け取るステップと、
を含む動作を実行させる、
ことを特徴とするシステム。
【請求項24】
前記一連の演算は回路ゲート演算であり、各回路ゲート演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
請求項23に記載のシステム。
【請求項25】
前記一連の演算の各演算を難読化する前記ステップは、
前記第1のオペランドを第1の乱数値で難読化するステップと、
前記第2のオペランドを第2の乱数値で難読化するステップと、
を含む、請求項24に記載のシステム。
【請求項26】
前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記難読化されたオペランドを、
前記難読化されたオペランドを用いて複数の演算の複数の結果を計算し、
前記複数の結果を第2のコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップと、
前記演算子、前記第1の乱数値及び前記第2の乱数値に基づいて前記複数の結果から1つの結果を選択し、
前記選択された結果を第3の乱数値で難読化し、
前記選択された結果を異なるコンピュータに送信する、
ことを含む命令を前記第2のコンピュータに送信するステップと、
を含む、請求項25に記載のシステム。
【請求項27】
前記一連の演算はコンピュータ算術演算であり、各コンピュータ算術演算は、演算子と、第1のオペランドと、第2のオペランドとを有する、
請求項23に記載のシステム。
【請求項28】
前記一連の演算の各演算は、ハードウェアユニットによって実行される演算に対応する、
請求項23に記載のシステム。
【請求項29】
前記少なくとも1つの他のコンピュータ上の整数加算器をさらに備える、
請求項28に記載のシステム。
【請求項30】
前記少なくとも1つの他のコンピュータ上の整数乗算器をさらに備える、
請求項28に記載のシステム。
【請求項31】
前記少なくとも1つの他のコンピュータ上の整数比較器をさらに備える、
請求項28に記載のシステム。
【請求項32】
前記少なくとも1つの他のコンピュータ上の浮動小数点乗算器をさらに備える、
請求項28に記載のシステム。
【請求項33】
前記一連の演算の各演算を送信前に難読化する前記ステップは、
前記第1のオペランドを第1の乱数値で難読化するステップと、
前記第2のオペランドを第2の乱数値で難読化するステップと、
を含む、請求項27に記載のシステム。
【請求項34】
前記一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記演算子及び難読化されたオペランドを、
前記演算子と、前記難読化された第1のオペランドと、前記難読化された第2のオペランドとを用いて第1の演算結果を計算し、
第2のコンピュータから値を受け取り、
前記演算子と、前記第1の結果と、前記値とを用いて第2の演算結果を計算し、
前記第2の結果を異なるコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップを含む、
請求項33に記載のシステム。
【請求項35】
前記第1のオペランドの前記難読化スキームは、前記第2のオペランドの前記難読化スキームと一致しない、
請求項33に記載のシステム。
【請求項36】
第3の乱数値を用いて前記第1のオペランドの前記難読化スキームを前記第2のオペランドの前記難読化スキームに変換する遷移難読化関数が使用される、
請求項35に記載のシステム。
【請求項37】
前記少なくとも1つの信頼できるコンピュータは、実行時に前記システムに、
前記遷移難読化関数を一連の演算に分割するステップと、
前記遷移難読化関数の各演算を、前記それぞれの演算の結果を計算して該結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、
をさらに含む動作を実行させるコンピュータ命令を記憶する、
請求項36に記載のシステム。
【請求項38】
前記遷移難読化関数の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信する前記ステップは、
前記第1のオペランドが乗法難読化される場合、
前記難読化されたオペランドを、
第2のコンピュータから値を受け取り、
前記難読化された第1のオペランドと前記値との和を計算し、
前記和を第3のコンピュータに送信する、
ことを含む命令と共に第1のコンピュータに送信するステップと、
前記和と前記第1の乱数値との商を計算し、
前記商を異なるコンピュータに送信する、
ことを含む命令を前記第3のコンピュータに送信するステップと、
を含み、前記第1のオペランドが加法難読化される場合、
前記難読化されたオペランドを、
前記難読化された第1のオペランドと前記第3の乱数値との積を計算し、
前記積を第1のコンピュータに送信する、
ことを含む命令と共に第3のコンピュータに送信するステップと、
第2のコンピュータから値を受け取り、
前記積と前記値との間の差分を計算し、
前記差分を異なるコンピュータに送信する、
ことを含む命令を前記第1のコンピュータに送信するステップと、
を含む、請求項37に記載のシステム。
【請求項39】
前記第2のコンピュータから受け取られる前記値は、前記第1の乱数値と前記第3の乱数値との積である、
請求項38に記載のシステム。
【請求項40】
前記難読化は、コード難読化、データ難読化、又はこれらの両方を含む、
請求項23に記載のシステム。
【請求項41】
前記少なくとも1つの他のコンピュータはクラウドの一部である、
請求項23に記載のシステム。
【請求項42】
前記クラウドは信頼できない、
請求項41に記載のシステム。
【請求項43】
前記クラウドは、複数の管理領域にわたる、
請求項41に記載のシステム。
【請求項44】
前記クラウドは、複数の商業的に異なるインフラにわたる、
請求項41に記載のシステム。
【請求項45】
前記少なくとも1つの他のコンピュータは、企業ネットワークの一部である、
請求項23に記載のシステム。
【請求項46】
前記少なくとも1つの他のコンピュータは、複数のコンピュータからランダムに選択される、
請求項23に記載のシステム。
【請求項47】
前記複数のコンピュータの各コンピュータは信頼できない、
請求項46に記載のシステム。
【請求項48】
前記少なくとも1つの他のコンピュータは信頼できない、
請求項23に記載のシステム。
【請求項49】
前記少なくとも1つの他のコンピュータは、前記信頼できるコンピュータではない、
請求項23に記載のシステム。
【請求項50】
前記信頼できるコンピュータは、1又は2以上の仮想機械を含む、
請求項1に記載の方法。
【請求項51】
前記少なくとも1つの他のコンピュータは、1又は2以上の仮想機械を含む、
請求項1に記載の方法。
【請求項52】
前記別のコンピュータは、1又は2以上の仮想機械を含む、
請求項1に記載の方法。
【請求項53】
前記信頼できるコンピュータは、1又は2以上の仮想機械を含む、
請求項23に記載のシステム。
【請求項54】
前記少なくとも1つの他のコンピュータは、1又は2以上の仮想機械を含む、
請求項23に記載のシステム。
【請求項55】
前記別のコンピュータは、1又は2以上の仮想機械を含む、
請求項23に記載のシステム。
【請求項56】
前記一連の演算の各演算を付属命令と共に前記少なくとも1つの他のコンピュータに送信する前記ステップは、各演算を計算のために複数のコンピュータに送信するステップを含む、
請求項1に記載の方法。
【請求項57】
前記一連の演算の各演算を付属命令と共に前記少なくとも1つの他のコンピュータに送信する前記ステップは、各演算を計算のために複数のコンピュータに送信するステップを含む、
請求項23に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
〔関連出願との相互参照〕
本出願は、2015年7月21日に出願された米国特許出願第14/804,713号に対する優先権を主張するものであり、この文献の開示は全体が引用により本明細書に組み入れられる。
【0002】
開示する発明は、コンピュータセキュリティの分野に関する。
【背景技術】
【0003】
最近では、特にユーザによる大規模コンピュータネットワークへの自由なアクセスを可能にするクラウドネットワーク及び拡張型企業ネットワークの急増に伴い、リモートコンピュータプログラムを実行する際のセキュリティが継続的に論争されている。複数のコンピュータ上でプログラムを実行する能力と速度の組み合わせは有利ではあるが、詮索の目に曝されることもある。リモートコンピュータの一部又は全部が、悪意あるユーザ又は攻撃者の支配を受けて重要な機密情報を危険に曝してしまう可能性もある。
【発明の概要】
【発明が解決しようとする課題】
【0004】
従って、信頼できないコンピュータ上又は複数のコンピュータ上で、(単複の)信頼できないコンピュータに完全にアクセスできる攻撃者から実行プログラム及びデータを秘密にしておくようにプログラムを実行する方法及びシステムに対するニーズが存在する。本発明は、これらの及びその他の重要なニーズに対処するものである。
【課題を解決するための手段】
【0005】
本発明は、コンピュータプログラムの実行方法であって、少なくとも1つの他のコンピュータに接続された信頼できるコンピュータ上に存在するコンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、それぞれの演算の結果を計算して結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの計算結果を受け取るステップとを含む方法を提供する。
【0006】
本発明は、コンピュータプログラムを実行するシステムも提供する。このシステムは、少なくとも1つの他のコンピュータに通信可能に接続された少なくとも1つの信頼できるコンピュータを含むことができる。少なくとも1つの信頼できるコンピュータのうちの第1の信頼できるコンピュータは、実行時にシステムにプログラム実行プロセスを含む動作を実行させるコンピュータ命令を記憶することができる。このプロセスは、第1の信頼できるコンピュータ上のコンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、それぞれの演算の結果を計算して結果を別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの計算結果を受け取るステップとを含むことができる。
【0007】
この概要及び以下の詳細な説明は例示的かつ説明的なものにすぎず、添付の特許請求の範囲に定める本発明を限定するものではない。当業者には、本明細書に示す本発明の詳細な説明に照らして本発明の他の態様も明らかになるであろう。
【0008】
この概要及び以下の詳細な説明は、添付図面と共に読むことによってさらに理解される。図面には、本発明を説明する目的で本発明の例示的な実施形態を示すが、本発明は、開示する具体的な方法、構成及び装置に限定されるものではない。また、図面は必ずしも縮尺通りではない。
【図面の簡単な説明】
【0009】
図1】ネットワークコンピュータにわたってプログラムをシュレッディングするための本発明の実施形態を示す図である。
図2】分割デバイスドライバ動作のための本発明の実施形態を示す図である。
図3】コード及びデータのシュレッドの対称鍵暗号化及び暗号解読動作のための本発明の実施形態を示す図である。
図4】シュレッドを難読化するための本発明の実施形態を示す図である。
図5】回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。
図6】別の回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。
図7】さらなる難読化レイヤを用いて回路ゲート演算をシュレッディングするための本発明の実施形態を示す図である。
図8】コンピュータネットワーク上のゲート演算の任意の回路をシュレッディングするための本発明の実施形態を示す図である。
図9】さらなる暗号化を用いて演算をシュレッディングするための本発明の実施形態を示す図である。
図10】通常のデバイスドライバ動作を示す図である。
図11】分割デバイスドライバ動作のための本発明の実施形態を示す図である。
図12】数学演算をシュレッディングするための本発明の実施形態を示す図である。
図13】別の数学演算をシュレッディングするための本発明の実施形態を示す図である。
図14】遷移暗号関数をシュレッディングするための本発明の実施形態を示す図である。
図15】別の遷移暗号関数をシュレッディングするための本発明の実施形態を示す図である。
図16】暗号化された比較演算をシュレッディングするための本発明の実施形態を示す図である。
図17】別の暗号化された比較演算をシュレッディングするための本発明の実施形態を示す図である。
図18】数学的難読化遷移関数をシュレッディングするための本発明の実施形態を示す図である。
図19】別の数学的難読化遷移関数をシュレッディングするための本発明の実施形態を示す図である。
【発明を実施するための形態】
【0010】
本発明は、本開示の一部を成す添付図及び実施例に関連して行う以下の詳細な説明を参照することによってさらに容易に理解することができる。本発明は、本明細書において説明及び/又は図示する具体的な装置、方法、用途、条件又はパラメータに限定されるものではなく、本明細書で使用する用語は、特定の実施形態をほんの一例として説明するためのものであり、特許請求する発明を限定するためのものではないと理解されたい。また、文脈において別途明確に示していない限り、添付の特許請求の範囲を含め、本明細書で使用する「1つの(英文不定冠詞)」及び「その(英文定冠詞)」という単数形は複数形を含み、特定の数値への言及は、少なくともその特定の値を含む。本明細書で使用する「複数」という用語は、1つよりも多くを意味する。値の範囲を示していない場合、別の実施形態は、1つの特定の値から、及び/又は他の特定の値までを含む。同様に、「約(about)」という先行詞を使用することによって値を近似値として示す場合には、特定の値が別の実施形態を形成すると理解されるであろう。全ての範囲は包含的であって組み合わせることができる。
【0011】
明確にするために本明細書において個別の実施形態の文脈で説明している本発明のいくつかの特徴は、単一の実施形態において組み合わせて提供することもできると理解されたい。これとは逆に、明確にするために単一の実施形態の文脈で説明している本発明の様々な特徴は、個別に又はいずれかの部分的組み合わせの形で提供することもできる。さらに、範囲で示す値についての言及は、その範囲内のありとあらゆる値を含む。
【0012】
本明細書で開示する解決策は、少なくとも1つの他のコンピュータにネットワーク接続された信頼できるコンピュータ上でコンピュータプログラムを実行する方法と、この方法を実行できるシステムとを含む。この方法は、コンピュータプログラムを一連の演算に分割するステップと、一連の演算の各演算を、演算を計算した後に演算結果を別のコンピュータに転送するように演算を受け取ったそれぞれのコンピュータに命じる付属命令と共に少なくとも1つの他のコンピュータに送信するステップと、信頼できるコンピュータにおいて、コンピュータプログラムの出力を受け取るステップとを含む。暗号化及び難読化を用いて方法のセキュリティを高めることもできる。
【0013】
信頼できるコンピュータとは、攻撃者によって危殆化されていないと分かっているコンピュータのことであり、計算リソース又はその他のリソースを提供するために少なくとも1つの他のコンピュータを必要とすることができる。非限定的な例では、この少なくとも1つの他のコンピュータを、信頼できるコンピュータに通信可能に接続されているが信頼できるコンピュータを含まない、信頼できる又は信頼できない、企業ネットワークの一部、クラウドの一部、モバイル装置、一般に複数のコンピュータの一部、或いは他のいずれかの1つ又は一連のコンピュータとすることができる。さらなる非限定的な例では、少なくとも1つの他のコンピュータを複数のコンピュータからランダムに選択することができる。「クラウド」に関して言えば、クラウドは、信頼できる場合も、又は信頼できない場合もあり、複数の管理領域にわたることもあり、複数の商業的に異なるインフラにわたることもあり、或いはいずれかの組み合わせ又は当業で周知の他の状況の場合もある。コンピュータは、(電気的又は光学的な)有線接続、無線接続、及び/又はコンピュータによるデータの通信を可能にするいずれかのタイプの接続を用いて共にネットワーク化することができる。コンピュータは、1つの又は一群の仮想マシンを含むこともできる。
【0014】
コンピュータプログラムを一連の演算に分割し、一連の演算の各演算を付属命令と共に少なくとも1つの他のコンピュータに送信することを「シュレッディング(shredding)」と呼ぶことができ、各演算は「シュレッド(shred)」と呼ばれる。シュレッディングプロセスでは、プログラムが一群のシュレッドに変換され、各シュレッドが少なくとも1つのコンピュータ上でプログラムの一部を実行して他のシュレッドと通信し、シュレッドの集合体が完全なプログラムを実行するようになる。ある実施形態では、シュレッディングプロセスが、コンピュータのランダム選択を用いてネットワークコンピュータ上にシュレッドを配置し、各コンピュータが、そのシュレッド内に指定される部分的計算を実行した後に残りの計算を次のコンピュータに転送する。各コンピュータは、シュレッドをどこから受け取ったか、シュレッド内で何を計算することになっているか、及びそのシュレッドの結果をどこに転送すべきかしか分からない。ネットワークコンピュータの数が十分に多ければ、潜在的な攻撃者は、全てのコンピュータを同時にモニタしてシュレッディング計算をつなぎ合わせることができない。
【0015】
図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」を受け取って出力する。
【0016】
図1で分かるように、一連の演算の一部は、信頼できるコンピュータからの入力及び/又は出力(I/O)相互作用を必要とし得る。I/O装置又は信頼できるI/Oが存在しないことを考慮すると(セキュリティのために、I/O装置からの平文データを見られるのは信頼できるコンピュータのみとすべきである)、シュレッドを実行するコンピュータ上には特別な「分割」デバイスドライバを実装することができる。分割デバイスドライバは、実際には各コンピュータ上に1つずつの2つのドライバであり、各ドライバが通常のデバイスドライバの半分の作業を実行する。これらのドライバの両半分はユーザプロセスとして実行されるので、シュレッドを実行するコンピュータ上のオペレーティングシステムも、信頼できるコンピュータ上のオペレーティングシステムも変更する必要がない。以下は、分割デバイスドライバをどのように実装して使用できるかを示す実施形態例である。
【0017】
ある実施形態では、特定のコンピュータ上における演算の、すなわちシュレッドの結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、特定のコンピュータは、特定のコンピュータ上のプログラムドライバにおいて入力要求を生成し、この入力要求をプログラムドライバからネットワークドライバに受け渡し、ネットワークドライバを介してこの入力要求を第1の信頼できるコンピュータに送信し、ネットワークドライバにおいて第1の信頼できるコンピュータから装置の応答を受け取り、この応答を、計算において使用されるようにネットワークドライバからプログラムドライバに受け渡すことができる。受け取られる応答は、セキュリティを高めるために暗号化することができる。
【0018】
ある実施形態では、特定のコンピュータ上における演算の、すなわちシュレッドの結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、第1の信頼できるコンピュータは、第1の信頼できるコンピュータ上のネットワークドライバにおいて、装置に入力を求める要求を特定のコンピュータから受け取り、この要求をネットワークドライバから装置の入力ドライバに受け渡し、装置からの応答を入力ドライバからネットワークドライバに受け渡し、ネットワークドライバを介して応答を特定のコンピュータに送信することができる。第1の信頼できるコンピュータは、セキュリティを高めるために、装置からの応答を入力ドライバからネットワークドライバに受け渡す前に応答を暗号化することができる。
【0019】
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、特定のコンピュータは、特定のコンピュータ上のプログラムドライバにおいて出力要求を生成し、この出力要求をプログラムドライバからネットワークドライバに受け渡し、ネットワークドライバを介して出力要求を第1の信頼できるコンピュータに送信し、ネットワークドライバにおいて第1の信頼できるコンピュータから装置の状態を受け取り、この状態を、計算において使用されるようにネットワークドライバからプログラムドライバに受け渡すことができる。出力要求は、暗号化データを含むことができる。
【0020】
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、第1の信頼できるコンピュータは、第1の信頼できるコンピュータ上のネットワークドライバにおいて、この装置への出力要求を特定のコンピュータから受け取り、この要求をネットワークドライバから装置の出力ドライバに受け渡し、装置からの状態を出力ドライバからネットワークドライバに受け渡し、ネットワークドライバを介して状態を特定のコンピュータに送信することができる。要求は、暗号化データを含むことができ、第1の信頼できるコンピュータは、要求をネットワークドライバから出力ドライバに受け渡す前に、データを暗号解読する必要があり得る。
【0021】
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの入力を必要とする場合、この入力を収集する方法は、特定のコンピュータ上のプログラムドライバにおいて入力要求を生成するステップと、この入力要求をプログラムドライバから第1のネットワークドライバに受け渡すステップと、第1のネットワークドライバを介して入力要求を第1の信頼できるコンピュータに送信するステップと、第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて入力要求を特定のコンピュータから受け取るステップと、入力要求を第2のネットワークドライバから装置の入力ドライバに受け渡すステップと、装置からの応答を入力ドライバから第2のネットワークドライバに受け渡すステップと、第2のネットワークドライバを介してこの応答を特定のコンピュータに送信するステップと、第1のネットワークドライバにおいて第1の信頼できるコンピュータから装置の応答を受け取るステップと、この応答を、計算において使用されるように第1のネットワークドライバからプログラムドライバに受け渡すステップとを含むことができる。この方法は、セキュリティを高めるために、装置からの応答を入力ドライバから第2のネットワークドライバに受け渡す前に応答を暗号化するステップをさらに含むことができる。従って、第1の信頼できるコンピュータからの受け取られる応答は暗号化することができる。
【0022】
ある実施形態では、特定のコンピュータ上における演算の結果の計算中に、この演算が、第1の信頼できるコンピュータに接続された装置からの出力を必要とする場合、この出力を実行する方法は、特定のコンピュータ上のプログラムドライバにおいて出力要求を生成するステップと、この出力要求をプログラムドライバから第1のネットワークドライバに受け渡すステップと、第1のネットワークドライバを介して出力要求を第1の信頼できるコンピュータに送信するステップと、第1の信頼できるコンピュータ上の第2のネットワークドライバにおいて出力要求を特定のコンピュータから受け取るステップと、出力要求を第2のネットワークドライバから装置の出力ドライバに受け渡すステップと、装置からの状態を出力ドライバから第2のネットワークドライバに受け渡すステップと、第2のネットワークドライバを介してこの状態を特定のコンピュータに送信するステップと、第1のネットワークドライバにおいて第1の信頼できるコンピュータから状態を受け取るステップと、この状態を、計算において使用されるように第1のネットワークドライバからプログラムドライバに受け渡すステップとを含むことができる。セキュリティを高めるために、出力要求は暗号化データを含むことができ、出力要求が第2のネットワークドライバから出力ドライバに受け渡される前にこのデータを暗号解読する必要がある。
【0023】
セキュリティを高めるために、暗号化は複数のレベルで使用することができる。信頼できるコンピュータと少なくとも1つの他のコンピュータとの間のネットワーク接続は、全て暗号化することができる。このようなネットワーク暗号化は、例えばトランスポートレイヤセキュリティ(TLS)又はその他のいずれかの好適な暗号化スキームを用いて実装することができる。
【0024】
図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を受け取ることを除いて入力動作と同様である。
【0025】
一連の演算の各演算、すなわち各シュレッドは暗号化することができる。各シュレッドは、高度暗号化標準(AES)ガロアカウンタモード(GCM)又は他のいずれかの好適なスキームなどの対称鍵暗号化スキームを用いて暗号化することができる。対称鍵暗号化は、各シュレッドが異なる鍵を用いて暗号化されるように、少なくとも1つの他のコンピュータの(単複の)共有鍵を使用する。このようなスキームは、シュレッドの対象であるコンピュータ上でしかシュレッドの暗号解読を可能にせず、残りのプログラムを他のあらゆるコンピュータから隠す。
【0026】
一連の演算の各演算の各データ値は、暗号化することができる。データ値の暗号化は、AES GCMなどの対称鍵スキーム、RSAなどの公開鍵スキーム、又は他のいずれかの好適なスキームを用いて行うことができる。このような暗号化は、信頼できるコンピュータ及び少なくとも1つの他のコンピュータの両方において実行することができる。対称鍵スキームを使用する場合、使用される秘密鍵は、データの送信側とデータの受信側との間のリンクの共有鍵である。公開鍵スキームを使用する場合、送信側は受信側の公開鍵を用いて暗号化し、受信側は受信側の秘密鍵を用いて暗号解読する。このようなスキームは、少なくとも1つの他のコンピュータが計算に必要なデータを暗号解読できるようにするが、他の全てのデータをこのコンピュータから隠す。
【0027】
図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」を得る。このプロセスを全てのコンピュータにわたって使用して、攻撃者がネットワークを介して平文を傍受できないことを確実にする。
【0028】
さらなるセキュリティのためには、データ難読化、コード難読化、又はこれらの両方を含むことができる難読化を使用すべきである。難読化は、各シュレッド内のコード及び/又はデータを、他のコンピュータにおける攻撃者からオリジナルのコード及びデータを隠すように修正するものである。コード難読化は、変換の難読化を用いて、シュレッド実行中にシュレッドのコード、並びに命令及びデータを完全に視認できる攻撃者からオリジナルプログラムのロジックを隠す。データ難読化は、攻撃者が逆難読化されたデータ値を復元するのが困難になるように、シュレッディングされたコードが難読化されたデータ値に対して実行されるようにデータを変換するものであり、ブラインディングはデータ難読化の一種である。
【0029】
シュレッディングを伴う難読化では、一連の演算の各演算を他のそれぞれのコンピュータに送信する前に各演算を難読化し、受け取られたコンピュータプログラムの計算結果を逆難読化する。難読化方法は、シュレッディングレベルによって異なり、シュレッディングは、ゲートレベル、ハードウェアユニットレベル、命令レベル、暗号化スキームレベルという少なくとも4つの異なるレベル、及びプログラムをユニットに分割できるようにする他のいずれかのスキームに基づいて行うことができる。
【0030】
図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’」の逆難読化を実行する。これらの手順は、関連する変数の実際の値を攻撃者が決して確認できないことを確実にする。
【0031】
ゲートレベルのシュレッディングは、他の単一のコンピュータを観察する攻撃者が計算を理解したり、又は元々の計算の入力又は出力を復元したりすることが不可能なため、最高レベルのシュレッディングであり、完全な秘密性を提供する。一方で、ゲートレベルのシュレッディングは最も遅いレベルのシュレッディングでもあり、他のコンピュータ上でI/O演算を実行する能力を提供しない。このレベルでは、プログラムが、ANDゲート、ORゲート、NANDゲート、NORゲート及びNOTゲートから成る回路に分割され、NOTゲートは、各ゲート演算が確実に2つのオペランドを有するように等しい入力のNANDゲートに変換することができる。このように、プログラムが分割された一連の演算は、各々が演算子と、第1のオペランドと、第2のオペランドとを有する回路ゲート演算に分割される。
【0032】
ある実施形態では、ゲート演算回路内の各ゲートを難読化し、他の2つのコンピュータにわたってシュレッディングする。各ゲート演算のプロセスでは、信頼できるコンピュータが、第1のオペランドを第1の乱数値で難読化し、第2のオペランドを第2の乱数値で難読化する。その後、これらの難読化されたオペランドを、第1のコンピュータが難読化されたオペランドを用いて複数の演算の複数の結果を計算して結果を第2のコンピュータに送信する旨の命令と共に第1のコンピュータに送信する。信頼できるコンピュータは、第2のコンピュータに、演算子と、第1の乱数値と、第2の乱数値とに基づいて複数の結果のうちの1つの結果を選択し、選択された結果を第3の乱数値で難読化し、これを信頼できるコンピュータ又は別のコンピュータとすることができる異なるコンピュータに送信する旨の命令を送信する。
【0033】
図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」を計算することによって結果を逆難読化する。
【0034】
図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と同一である。
【0035】
同様に、CC2 520においてさらなるNOT演算を追加することによって、NAND演算又はNOR演算を計算することもできる。上述したように、単一ビットのNOT演算は、等しい入力のNAND演算を使用することができる。入力を隠すためのランダムビット「r」と、出力を隠すための別のランダムビット「u」とを用いた同様の方法を使用して、単一ビットを記憶するシーケンス回路を難読化することができる。従って、TC 500上で(入力及び出力を隠すために使用される全てのランダムなビットの値から成る)ワンタイムパッドを導入し、2つのシュレッドを生成してワンタイムパッドの下で回路を実行することによって、あらゆる回路を難読化することができる。このスキームは、攻撃者がこれらの2つのシュレッドを同時に確認できない限りセキュアである。
【0036】
図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に、これらの新たなビットを用いた計算を示す。
【0037】
図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」を逆難読化する。
【0038】
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又は別の選択されたコンピュータに戻って)継続する。
【0039】
ハードウェアユニットレベルのシュレッディングでは、ゲートレベルのシュレッディングよりもプライバシーは低下するが、さらに高速で実行される。このレベルのシュレッディングは、特定の機能を実行するハードウェアユニットの演算を含む回路にプログラムを分割する。例としては、汎用コンピュータにおける標準的なハードウェアユニットである整数加算、整数乗算、整数比較及び浮動小数点乗算が挙げられる。このように、これらの一連の演算は、各々が演算子と、第1のオペランドと、第2のオペランドとを有する数学演算である。他のコンピュータにおける攻撃者は、行われる演算のタイプは分かるが、正確な演算を推測することはできない。例えば、攻撃者は、整数加算が行われていることは分かるが、オペランド又は結果の平文値は分からない。最終的に、ハードウェアユニットレベルのシュレッディングは、ゲートレベルのシュレッディングと同様に、他のコンピュータ上でI/O演算を実行する能力を提供しない。
【0040】
命令レベルのシュレッディングは、プログラムを命令に分割して各シュレッドが命令のサブセットを実行するようにする。命令の例としては、x86機械語命令及びJava(登録商標)仮想マシン(JVM)バイトコードが挙げられる。これらの命令も、ハードウェアユニットレベルのシュレッディングと同様に数学演算を伴う。しかしながら、命令レベルのシュレッディングは、ハードウェアユニットレベルのシュレッディングとは異なり、上述した分割デバイスドライバを用いてI/O演算を実行するプログラムに対応する。
【0041】
ある実施形態では、プログラムを分割した一連の演算の各数学演算を難読化し、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に、加法難読化スキームから乗法難読化スキームに遷移する実施形態を示す。
【0042】
難読化に必要な乱数値は、以下の方法によって生成することができる。プログラムの実行サイクルに、サイクル「i」で実行される命令によって定められる変数が関数「Key(i)」によってブラインディングされるように付番する。関数「Key(i)」は、浮動小数点計算中の丸め誤差を制限するために、「大きすぎる又は小さすぎる」ことのない乱数浮動小数点値を生成する。この乱数浮動小数点値は、計算中のあらゆるゼロ除算を防ぐように非ゼロでもある。「Key」関数は、ノンス「i」のための乱数値を生成するSalsa20などの高速ストリーム暗号を用いて実装される。このストリーム暗号には、加法ブラインド値を生成する1つのシードと、乗法ブラインド値を生成する異なるシードという2つの秘密シードが使用される。プログラム内の各命令は、加算又は乗算ではあるがこれらの両方ではないので、これらの2つのシードの一方を用いて実行結果をブラインディングする。一方のスキームにおいてブラインディングされた命令の結果を他方のスキームの演算で使用する場合には、変換演算を用いてスキームを変更する。
【0043】
図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)は乗法シードのみを知っている。
【0044】
暗号化スキームレベルで行われるシュレッディングは、データに対して行われる演算に依存する準同型暗号スキームを用いて、一連の演算の各演算の各データ値を暗号化する。加算演算は、Paillierなどの加法準同型暗号(AHE)スキームを用いて暗号化され、乗算演算は、El Gamalなどの乗法準同型暗号(MHE)スキームを用いて暗号化される。一方のスキームで暗号化されたデータを、互換性のない演算を用いて操作する必要がある場合には、遷移暗号関数を用いてAHEデータ値をMHEデータ値に変換し、MHEデータ値をAHEデータ値に変換することができる。これらの遷移関数は、遷移暗号関数を一連の演算に分割し、遷移暗号関数の各演算を、それぞれの演算の結果を計算して別のコンピュータに転送する付属命令と共に少なくとも1つの他のコンピュータに送信することによってシュレッディングしてセキュリティを高めることができる。後述する図14には、PaillierからEl Gamalへのシュレッディングされた遷移暗号関数の実施形態を示し、後述する図15には、El GamalからPaillierへのシュレッディングされた遷移暗号関数の実施形態を示す。2つの暗号化された整数を比較することも可能である。後述する図16には、Paillier暗号を用いてシュレッディングされた比較関数の実施形態を示し、後述する図17には、El Gamalを用いてシュレッディングされた比較関数の実施形態を示す。
【0045】
図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に関してさらに完全に説明する。
【0046】
上述したように、分割デバイスドライバは、シュレッド内の入力及び出力演算が他のコンピュータ上で実行されることを可能にする。さらなるセキュリティレイヤとしては、I/O装置からの平文データが信頼できるコンピュータにしか分からないように、シュレッドがI/O装置からの暗号化データにしか作用できないようにすることが好ましい。図10に、単一のコンピュータ上で動作する通常のデバイスドライバ相互作用の動作例を示し、対照的に図11には、信頼できるコンピュータとクラウドコンピュータとの間の分割デバイスドライバ相互作用の詳細な動作例を示す。
【0047】
図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は、例えば出力がコンソール画面に印刷されたかどうか、エラーであるかなどの出力の状態が分かる。
【0048】
図11には、図10と同様の機能を実行する、信頼できるコンピュータ(TC)1102とクラウドコンピュータ(CC)1104との間の分割デバイスドライバの実施形態の動作を示しており、実行シュレッド1100は、キーボードハードウェア1160に入力を要求した(ステップ1〜12)後に、この入力をコンソールハードウェア1162に出力する(ステップ13〜24)。CC1104は、セキュリティを目的として信頼できるコンピュータから入力を得て(ここでは、TC1102である)信頼できるコンピュータに出力しなければならないので、デバイスドライバは、CC1104とTC1102との間で分割される。
【0049】
図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に受け渡して入力動作を完了する。
【0050】
図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は、例えば出力がコンソール画面に印刷されたかどうか、エラーであるかなどの出力の状態が分かる。
【0051】
図10のアプリケーション1000と図11の実行シュレッド1100との間の分割ドライバ以外のさらなる相違点は、実行シュレッド1100が暗号化データに基づいて動作し、従ってここではCC1104である攻撃者が観察しているコンピュータ上で実行できる点である。データの暗号化及び暗号解読のための鍵は、TCUMK1140及びTCUMC1142において鍵を使用するTC 1102上でしか利用できない。
【0052】
上述したように、コード難読化は、オリジナルプログラムのロジックを隠すために使用することができ、データ難読化と共に使用することができる。データ難読化については、図12及び図13を用いてさらに理解することができ、コード難読化は、以下に限定されるわけではないが、オペコード置換、関数マージング、制御フロー平坦化、及び不明瞭な述語を含むデコイコードを含むことができる。
【0053】
図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が実際の和を計算する。入力データ又は出力データは、クラウドコンピュータに分からない。
【0054】
図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が実際の積を計算する。入力データ又は出力データは、クラウドコンピュータに分からない。
【0055】
オペコード置換は、実際のオペコードの代わりにランダムなオペコードを用いてシュレッドの静的分解を阻止するものである。オペコードを含む一連の演算に分割されたプログラムでは、プログラムオペコードをランダムなオペコード順列にマッピングする置換マップを生成することができる。その後、この置換マップを用いて一連のオペコードをランダムなオペコード順列に変換し、これをリモートコンピュータに送信して、他のそれぞれのコンピュータによる逆難読化において使用することができる。逆難読化は、置換マップを保持するリモートコンピュータにおいて置換マップの一部に対応するインデックスを他のコンピュータから受け取り、この他のコンピュータにリモートコンピュータから置換マップの一部を送信することによって行うことができる。対称的に、他のコンピュータは、置換マップの一部に対応するインデックスをリモートコンピュータに送信し、リモートコンピュータから置換マップの一部を受け取り、置換マップを用いてランダムなオペコード順列を元々の一連のオペコードに変換できることが分かる。
【0056】
ある実施形態では、置換マップを用いたオペコード置換をJavaプログラムと併用することができる。Javaバイトコードは256個のオペコードを有し、これらのうちの51個のオペコード(203〜253の範囲)は未定義である。元々の256個のオペコードをランダムなオペコード順列にマッピングする置換マップを導入する。置換マップは、シュレッドを生成するコンピュータ及びリモートコンピュータには分かるが、置換されたオペコードを用いてシュレッドを実行する他のコンピュータには分からない。未使用のオペコード253は、難読化されたプログラムによってGET MAP命令として使用される。GET MAP命令は、シュレッドを実行する他のコンピュータによってリモートコンピュータに送信された32ビットインデックスをオペランドと見なす。リモートコンピュータは、この特定のシュレッドに使用すべき置換マップを含む256バイトの結果を戻す。GET MAP命令は、ユーザが指定したシュレッド内の回数だけでなくシュレッドの最初にも挿入される。セキュリティのためには、同じマップを使用する大きなコード部分の統計的分析を阻止するために数多くのGET MAP命令が存在すべきである。性能最適化のためには、ループ内にわずかな数のGET MAP命令が存在すべきである。
【0057】
関数マージングは、無関係な関数を単一の関数に組み合わせる。無関係な関数は、それぞれがパラメータを有し、これらのパラメータのそれぞれの挙動を単一の関数内に保持する。このようなスキームを実装するために、この単一の関数は、無関係な関数のパラメータとさらなるパラメータとを全て取ってどの挙動を実行すべきかを選択する。無関係な関数の数が多い場合には、多少関連する関数のグループをマージして、グループ毎に単一のマージされた関数が存在するようにすることができる。
【0058】
チェンクシフィケーション(chenxification)としても知られている制御フロー平坦化は、関数を無限ループに変換する。ループから抜け出るには、元々の関数の挙動と同じ挙動を実行するswitch文を追加する。
【0059】
デコイコードは、攻撃者が分析を必要とするコードの量を増やすために使用される。これは、コンピュータプログラムにデコイコードを挿入することによって行うことができる。デコイコードは、複数のわずかな変異を伴うコンピュータプログラムのオリジナルコードを含むことができる。このわずかな変異は、静的に検出不能なエラーを生じ、わずかな変異の数はユーザが指定することができる。デコイコードは、不明瞭な述語スキームの一部とすることができる。このようなスキームは、設定及び実行は容易であるが分析が困難な述語である不明瞭な述語に依存する標的文を作成することによって関数の静的分析を阻止する。不明瞭な述語はアレイエイリアシングを活用することができ、これらの述語には、常に真、常に偽及び時々真という3つのタイプの述語が存在する。常に真の述語は、「if」分岐内でオリジナルコードを実行し、「else」分岐内でデコイコードを実行する。常に偽の述語は、「if」分岐内でデコイコードを実行し、「else」分岐内でオリジナルコードを実行する。時々真の述語は、2つの分岐上でオリジナルコードとオリジナルコードの難読化バージョンとを実行する。
【0060】
上述したように、図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として定められる。
【0061】
図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)
【0062】
図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」と置き換わるように意図される。
【0063】
図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)
【0064】
図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)と置き換わるように意図される。
【0065】
図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」と置き換わるように意図される。
【0066】
図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)と置き換わるように意図される。
【0067】
上述したように、数学演算のシュレッディング及び難読化を行ういくつかの実施形態は、演算を乗法難読化スキームから加法難読化スキームに、及びこの逆に変換することを必要とすることもできる。図18及び図19に、これらの遷移関数の2つの実施形態例を示す。
【0068】
図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」を減算することによって復元することができる。
【0069】
図19には、加法難読化スキームから乗法難読化スキームに変換する実施形態を示す。このプロセスは、基本的に図18に示すものとは逆のプロセスである。なお、乱数シードが必要なコンピュータ以上に分散されるのを防ぐために、矢印は、図18の経路とは逆の経路をたどる。このように、いずれの変換についても、TC(1800、1840、1900及び1940)及びCC3(1820及び1920)のみが両シードを知っており、CC2(1810及び1910)はいずれのシードも知らず、CC4(1830及び1930)は乗法シードのみを知っている。
【0070】
図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」を計算することによって復元することができる。
【0071】
図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」の加法ブラインディング値又は乗法ブラインディング値が分かってしまうことは決してない。
【0072】
上記の方法及びプロセス(方法I)は、他の単一のコンピュータへのルートアクセス権を有し、実行プログラム、メモリ内データ及びディスク上のファイルの記録及び分析を行って機密情報を観察する攻撃者(脅威レベルI)に対して効果的である。しかしながら、方法Iは、他の単一のコンピュータ上の実行プログラム、メモリ及びファイルを修正して実行を邪魔することができる攻撃者(脅威レベルII)に対しては効果的でない場合もある。このことを考慮して、上記の方法及びプロセスを、全てのシュレッドが他の複数のコンピュータ上で実行されるように拡張することができる(方法II)。他の複数のコンピュータからの中間データ結果を整合性についてチェックし、不整合が検出された場合には計算を中断する。方法IIは、特定のシュレッドを実行する他の全てのコンピュータの制御を攻撃者が獲得しない限り脅威レベルIIの攻撃者からの攻撃を阻止することができる。さらに、ネットワーク内の他の全てのコンピュータを制御する攻撃者に対しては、方法Iも方法IIも効果的でない(脅威レベルIII)。方法IIは、単一のプログラムを実行するように選択された他のコンピュータが複数の管理領域又は複数の商業的に異なるインフラに及ぶように拡張することができる(方法III)。例えば、他のコンピュータは、Google、Amazon及び/又はMicrosoftなどの様々なパブリッククラウドプロバイダから選択することができる。方法IIIは、あるプログラムのために選択された全ての領域又はインフラの制御を攻撃者が獲得しない限り脅威レベルIIIの攻撃者からの攻撃を阻止することができる。
【0073】
上記の方法及びプロセスによって提供されるプライバシーは、計算及びデータのシュレッディングに由来する。難読化及び暗号化は、実行待ち時間に多少のオーバヘッドを加えるが、性能悪化の主な原因は、コンピュータ間のネットワークの通信待ち時間に起因する。従って、関連する様々なコンピュータ間で送信されるメッセージの数及びメッセージのサイズを最小化することが重要である。
【0074】
本文書で引用又は説明した各特許、特許出願及び公表文献の開示は、その全体が引用により本明細書に組み入れられる。
【0075】
当業者であれば、本発明の好ましい実施形態に数多くの変更及び修正を行うことができ、このような変更及び修正は、本発明の趣旨から逸脱することなく行うことができると理解するであろう。従って、添付の特許請求の範囲は、本発明の真の趣旨及び範囲に含まれる全てのこのような同等の変形例も対象とするように意図される。
【符号の説明】
【0076】
100 プログラム
110 信頼できるコンピュータ1
120 クラウドコンピュータ2
130 クラウドコンピュータ3
140 信頼できるコンピュータ4
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19