(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-15
(45)【発行日】2022-11-24
(54)【発明の名称】パブリックコンピューターにおいて暗号化データに作用するコードを安全に実行する方法
(51)【国際特許分類】
G06F 21/14 20130101AFI20221116BHJP
G09C 1/04 20060101ALI20221116BHJP
【FI】
G06F21/14
G09C1/04
(21)【出願番号】P 2020552680
(86)(22)【出願日】2018-12-17
(86)【国際出願番号】 US2018066019
(87)【国際公開番号】W WO2019126044
(87)【国際公開日】2019-06-27
【審査請求日】2021-11-22
(32)【優先日】2017-12-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】510170730
【氏名又は名称】ユニバーシティ オブ セントラル フロリダ リサーチ ファウンデーション,インコーポレイテッド
(73)【特許権者】
【識別番号】301069856
【氏名又は名称】トラスティーズ オブ ボストン ユニバーシティ
(74)【代理人】
【識別番号】100096699
【氏名又は名称】鹿嶋 英實
(72)【発明者】
【氏名】ムッチオロ エドゥアルド
(72)【発明者】
【氏名】シャモン クラウディオ
【審査官】吉田 歩
(56)【参考文献】
【文献】特表2016-510912(JP,A)
【文献】国際公開第2017/015357(WO,A1)
【文献】米国特許出願公開第2015/0171870(US,A1)
【文献】米国特許出願公開第2015/0326389(US,A1)
【文献】特開2011-130120(JP,A)
【文献】Claudio Chamon ほか,Encrypted Operator Computing: an alternative to Fully Homomorphic Encryption,2022年03月16日,https://arxiv.org/pdf/2203.08876.pdf
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/14
G09C 1/04
(57)【特許請求の範囲】
【請求項1】
第一プロセッサで行う方法であって、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆qビットゲートのシーケンスを示す第一データを受信すること、
入力Nビットワードの少なくとも一つの共有ビットに作用する二つのqビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Nビットワードを生成する一又は複数のqビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶すること、
前記第二データを用いて、前記第二セグメントのqビットゲート内に又は当該qビットゲートを超えて、少なくとも一つのqビットゲートをJ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのqビットゲート内に又は当該qビットゲートの前に、少なくとも一つのqビットゲートをK数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆qビットゲートシーケンスを生成すること、
前記難読化された可逆qビットゲートシーケンスに基づいて難読化命令を第二プロセッサに送信し実行すること、
を特徴とする方法。
【請求項2】
請求項1記載の方法であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換すること、を更に含み、
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする方法。
【請求項3】
請求項1記載の方法であって、
前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記第二プロセッサで実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、
前記第三データを用いて、前記第二プロセッサで実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆qビットゲートシーケンスに変換することと、を更に含む、
ことを特徴とする方法。
【請求項4】
請求項1記載の方法であって、
入力Nビットワードに作用して出力Nビットワードを生成する一又は複数の可逆qビットゲートシーケンスの各々を、同じ出力Nビットワードを生成する一又は複数の可逆kビットゲート(3<k≦N)と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶すること、
前記統合データを用いて、前記難読化された可逆qビットゲートシーケンスの一又は複数の可逆qビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なkビットゲートと置き換えること、を更に含む、
ことを特徴とする方法。
【請求項5】
請求項4記載の方法であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記一又は複数のkビットゲートの各々を前記異なる第二プロセッサへの一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶すること、
前記統合コードデータを用いて、前記kビットゲートを難読化コード命令の少なくとも一部に変換すること、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスの残りの可逆qビットゲートを前記難読化コード命令の残存部分に変換すること、を更に含み
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする方法。
【請求項6】
請求項1に記載の方法であって、
J>N及びK>Nである、
ことを特徴とする方法。
【請求項7】
請求項1に記載の方法であって、
各可逆qビットゲートは、単一のターゲットビットとq-1制御ビットとを含む制御ゲートであって、前記q-1制御ビットは、当該q-1制御ビットにおける値及び当該q-1制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とする方法。
【請求項8】
請求項1に記載の方法であって、
q∈{1、2、3}である、
ことを特徴とする方法。
【請求項9】
請求項1に記載の方法であって、
前記第二プロセッサは前記第一プロセッサとは異なる、
ことを特徴とする方法。
【請求項10】
請求項1に記載の方法であって、
前記第二プロセッサへのアクセスは、前記第一プロセッサへのアクセスとは異なる、
ことを特徴とする方法。
【請求項11】
一又は複数の命令シーケンスを実行する非一時的コンピューター可読記憶媒体であって、
前記一又は複数の命令シーケンスが一又は複数のプロセッサを含む第一プロセッサ群により実行されると、前記一又は複数のプロセッサを含む第一プロセッサ群は、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆qビットゲートのシーケンスを示す第一データを受信することと、
入力Nビットワードの少なくとも一つの共有ビットに作用する二つのqビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Nビットワードを生成する一又は複数の可逆qビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを記憶することと、
前記第二データを用いて、前記第二セグメントのqビットゲート内に又は当該qビットゲートを超えて、少なくとも一つのqビットゲートをJ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのqビットゲート内に又は当該qビットゲートの前に、少なくとも一つのqビットゲートをK数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆qビットゲートシーケンスを生成することと、
前記難読化された可逆qビットゲートシーケンスに基づいて難読化命令を一又は複数のプロセッサを含む第二プロセッサ群に送信し実行することと、を含むステップを実行する、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項12】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換することと、を更に含み、
前記難読化命令を送信することは、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項13】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、前記方法は、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、
前記第三データを用いて、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆qビットゲートシーケンスに変換することと、を更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項14】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
入力Nビットワードに作用して出力Nビットワードを生成する一又は複数の可逆qビットゲートシーケンスの各々を、同じ出力Nビットワードを生成する一又は複数のkビットゲート(3<k≦N)と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶することと、
前記統合データを用いて、前記難読化された可逆qビットゲートシーケンスの一又は複数の可逆qビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なkビットゲートと置き換えることと、を更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項15】
請求項14に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、
前記一又は複数のkビットゲートの各々を前記第一プロセッサ群とは異なる前記一又は複数のプロセッサを含む第二プロセッサ群への一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶することと、
前記統合コードデータを用いて、前記kビットゲートを難読化コード命令の少なくとも一部に変換することと、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスの残りの可逆qビットゲートを前記難読化コード命令の残存部分に変換することと、を更に含み
前記難読化命令を送信することは、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項16】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
J>N及びK>Nである、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項17】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
各可逆qビットゲートは、単一のターゲットビットとq-1制御ビットとを含む制御ゲートであって、前記q-1制御ビットは、当該q-1制御ビットにおける値及び当該q-1制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項18】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
q∈{1、2、3}である、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項19】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群は前記一又は複数のプロセッサを含む第一プロセッサ群とは異なる、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項20】
請求項11に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群へのアクセスは、前記一又は複数のプロセッサを含む第一プロセッサ群へのアクセスとは異なる、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項21】
システムであって、
少なくとも一つのプロセッサを含む第一プロセッサ群と、
一又は複数の命令シーケンスを含む少なくとも一つのメモリと、を備え、
前記少なくとも一つのメモリと、前記一又は複数の命令シーケンスは、前記少なくとも一つのプロセッサによって、装置に少なくとも、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆qビットゲートのシーケンスを示す第一データを受信すること、
入力Nビットワードの少なくとも一つの共有ビットに作用する二つのqビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Nビットワードを生成する一又は複数のqビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶すること、
前記第二データを用いて、前記第二セグメントのqビットゲート内に又は当該qビットゲートを超えて、少なくとも一つのqビットゲートをJ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのqビットゲート内に又は当該qビットゲートの前に、少なくとも一つのqビットゲートをK数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆qビットゲートシーケンスを生成すること、
前記難読化された可逆qビットゲートシーケンスに基づいて難読化命令を少なくとも一つのプロセッサを含む第二プロセッサ群に送信し実行すること、を行わせる、
ことを特徴とするシステム。
【請求項22】
請求項21に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスを、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令に変換すること、を更に含み、
前記難読化命令を送信することは、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とするシステム。
【請求項23】
請求項21に記載のシステムであって、前記方法は、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成すること、
前記第三データを用いて、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆qビットゲートシーケンスに変換すること、を更に含む、
ことを特徴とするシステム。
【請求項24】
請求項21に記載のシステムであって、
入力Nビットワードに作用して出力Nビットワードを生成する一又は複数の可逆qビットゲートシーケンスの各々を、同じ出力Nビットワードを生成する一又は複数のkビットゲート(3<k≦N)と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶すること、
前記統合データを用いて、前記難読化された可逆qビットゲートシーケンスの一又は複数のqビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なkビットゲートと置き換えること、を更に含む、
ことを特徴とするシステム。
【請求項25】
請求項24に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記一又は複数のkビットゲートの各々を前記少なくとも一つのプロセッサを含む第二プロセッサ群への一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶すること、
前記統合コードデータを用いて、前記kビットゲートを難読化コード命令の少なくとも一部に変換すること、
前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスの残りの可逆qビットゲートを前記難読化コード命令の残存部分に変換すること、を更に含み
前記難読化命令を送信することは、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とするシステム。
【請求項26】
請求項21に記載のシステムであって、
J>N及びK>Nである、
ことを特徴とするシステム。
【請求項27】
請求項21に記載のシステムであって、
各可逆qビットゲートは、単一のターゲットビットとq-1制御ビットとを含む制御ゲートであって、前記q-1制御ビットは、当該q-1制御ビットにおける値及び当該q-1制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とするシステム。
【請求項28】
請求項21に記載のシステムであって、
q∈{1、2、3}である、
ことを特徴とするシステム。
【請求項29】
請求項21に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群は前記少なくとも一つのプロセッサを含む第一プロセッサ群とは異なる、
ことを特徴とするシステム。
【請求項30】
請求項21に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群へのアクセスは、前記少なくとも一つのプロセッサを含む第一プロセッサ群へのアクセスとは異なる、
ことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【0001】
安全対策が施されてはいないが潜在的にパワフルなパブリックリソースにおいて暗号化データを安全に処理する方法に関する。
【背景技術】
【0002】
データを世間に対し機密とする際に、そのデータを暗号化し、暗号化したデータをクラウドデータストレージやクラウドコンピューティングなどのパワフルなパブリックリソースを用いて格納すると便利な場合が多い。しかしながら、格納されたデータ量が非常に大きい場合、例えばテラビット(Tb、1Tb=1012ビット)ほどある場合に、暗号化されたデータの大部分をローカルセキュアプロセッサに戻して処理する必要があるのであれば、ある程度効率が落ちてしまう。同様に、オペレーションに膨大な計算リソースが含まれる場合、比較的小さいデータでも、計算能力に比較的制限があるセキュアコンピューターではなく、クラウドプロセッサなどのパワフルなパブリックリソースで実行する方がよい。ただ、データを復号化する際に、このパワフルなパブリックリソースにおけるプロセッサは、暗号方式を露呈し、基礎データを公開してしまう。
【発明の概要】
【0003】
第一実施例グループにおける方法であって、第一(ローカルにおけるセキュアな)プロセッサで行う方法は、置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆qビットゲートのシーケンスを示す第一データを受信することと、入力Nビットワードの少なくとも一つの共有ビットに作用する二つのqビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Nビットワードを生成する一又は複数のqビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶することと、前記第二データを用いて、前記第二セグメントのqビットゲート内に又は当該qビットゲートを超えて、少なくとも一つのqビットゲートをJ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのqビットゲート内に又は当該qビットゲートの前に、少なくとも一つのqビットゲートをK数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆qビットゲートシーケンスを生成することと、前記難読化された可逆qビットゲートシーケンスに基づいて難読化命令を第二プロセッサに送信し実行することと、を含む。
【0004】
第一実施例グループのいくつかの実施例では、前記方法は、前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換することと、を更に含み、前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む。
【0005】
第一実施例グループのいくつかの実施例では、前記方法は、前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、前記第一データを受信することは、前記第二プロセッサで実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、前記第三データを用いて、前記第二プロセッサで実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆qビットゲートシーケンスに変換することと、を更に含む。
【0006】
第一実施例グループのいくつかの実施例では、前記方法は、入力Nビットワードに作用して出力Nビットワードを生成する一又は複数の可逆qビットゲートシーケンスの各々を、同じ出力Nビットワードを生成する一又は複数の可逆kビットゲート(3<k≦N)と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶することと、 前記統合データを用いて、前記難読化された可逆qビットゲートシーケンスの一又は複数の可逆qビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なkビットゲートと置き換えることと、を更に含む。
【0007】
第一実施例グループのいくつかの実施例では、前記方法は、前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をNビットワードに作用する一又は複数の可逆qビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、前記一又は複数のkビットゲートの各々を前記異なる第二プロセッサへの一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶することと、前記統合コードデータを用いて、前記kビットゲートを難読化コード命令の少なくとも一部に変換することと、前記第三データを用いて、前記難読化された可逆qビットゲートシーケンスの残りの可逆qビットゲートを前記難読化コード命令の残存部分に変換することと、を更に含み
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む。
【0008】
第一実施例グループのいくつかの実施例では、前記方法において、JとKの各々がNより大きい。
【0009】
第一実施例グループのいくつかの実施例では、前記方法において、各可逆qビットゲートは、単一のターゲットビットとq-1制御ビットとを含む制御ゲートであって、前記q-1制御ビットは、当該q-1制御ビットにおける値及び当該q-1制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する。
【0010】
第一実施例グループのいくつかの実施例では、前記方法において、q∈{1、2、3}である。
【0011】
第一実施例グループのいくつかの実施例では、前記方法において、前記第二プロセッサは前記第一プロセッサとは異なる。
【0012】
第一実施例グループのいくつかの実施例では、前記方法において、前記第二プロセッサへのアクセスは、前記第一プロセッサへのアクセスとは異なる、
【0013】
他の態様、特徴、および利点については、本発明を実施するために最良と考えられる形態を含む幾つかの特定の実施形態および実施を単に示した以下の詳細な説明から容易に明らかである。他の実施形態についても、他の異なる特徴および利点を有すことが可能で、いくつかの詳細部分は、本発明の精神および範囲から逸脱することなく、様々な明白な面において変更可能である。したがって、本図面および説明は、全て例示と見なされるべきであり、限定と見なされるべきではない。
【図面の簡単な説明】
【0014】
添付の図面において、実施形態は、限定としてではなく、例として示される。ここで、同様の参照番号は同様の構成要素を指す。
【
図1】
図1は、パブリックリソースに格納されている暗号化データを使用するためのシステムを例示するブロック図である。
【
図2A】
図2Aは、一実施形態による、Nビットワードに作用する3ビットゲートを例示するブロック図である。
【
図2B】
図2Bは、一実施形態による、Nビットワードに作用する一対の3ビットゲートを例示するブロック図である。
【
図2C】
図2Cは、一実施形態による、
図2Bの3ビットゲートによって得られた結果と同等の結果をもたらす一連の3ビットゲートを例示するブロック図である。
【
図2D】
図2Dは、一実施形態による、パブリックリソースに格納された暗号化データを当該パブリックリソースにおいて安全に処理するためのシステムを例示するブロック図である。
【
図3】
図3は、一実施形態による、パブリックリソースに格納された暗号化データをパブリックリソース上で安全に処理するための方法を例示するフローチャートである。
【
図4】
図4(a)から
図4(c)は、一実施形態による、特定の入力ワードxが与えられた特定の出力ワードyを生成するため、7ビットワードに作用する一連のゲートとして難読化されるプログラムを例示するブロック図である。
【
図5】
図5は、一実施形態による、
図3の方法のステップで使用されるような、第二3ビットゲートを通過して第一3ビットゲートを伝搬する方法を例示するフロー図である。
【
図6】
図6は、一実施形態による、三つのビット全てで衝突する一対の3ビットゲートを例示するブロック図である。
【
図7】
図7は、一実施形態による、二つのビットで衝突する一対の3ビットゲートを例示するブロック図である。
【
図8】
図8は、一実施形態による、二つのビットで衝突する一対の3ビットゲートを例示するブロック図である。
【
図9】
図9は、一実施形態による、二つのビットで3ビットゲートが衝突する際のデブリゲートの生成に有用な一連のブレイディング置換を例示するブロック図である。
【
図10】
図10は、一実施形態による、二つのビットで3ビットゲートが衝突する際に生成される一連のデブリゲートを例示するブロック図である。
【
図11】
図11は、一実施形態による、二つのビットで3ビットゲートが衝突する際のデブリゲートの生成に有用なテーブルを構築するための条件を例示するブロック図である。
【
図12】
図12は、一実施形態による、二つのビットで3ビットゲートが衝突する際にいくつかのデブリゲートを判定するために分解される4ビットオペレーターを例示するブロック図である。
【
図13A】
図13Aは、一実施形態による、二つのビットで3ビットゲートが衝突する際の一連のデブリゲートc、d、e、及びfを例示するブロック図である。
【
図13B】
図13Bは、一実施形態による、二つのビットで3ビットゲートが衝突する際のデブリゲートc、d、e、及びfのための一連の真理値表を例示する図である。
【
図14】
図14は、一実施形態による、一つのビットで3ビットゲートが衝突する際にスワップゲートを導入するための8つの例示的な方法を示すブロック図である。
【
図15】
図15は、一実施形態による、一つのビットで3ビットゲートが衝突する際に非自明なデブリゲートを生成する一連のステップを例示するブロック図である。
【
図16】
図16は、一実施形態による、ゲート衝突でプログラムを更に難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。
【
図17】
図17は、一実施形態による、ゲート衝突でプログラムを更に難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。
【
図18】
図18は、一実施形態による、難読化プログラムを生成するための一連のステップを三例示すブロック図である。
【
図19】
図19は、一実施形態による、プログラムを更に難読化するより多くのビットの複数ゲートを生成するための3ビットゲートの統合を例示するブロック図である。
【
図20】
図20は、一実施形態による、2ビット乗算写像fのための3ビットゲートのシーケンスを例示するブロック図である。
【
図21】
図21は、一実施形態による、
図20の写像fへの中間暗号化及び復号化ブロックの挿入を例示するブロック図である。
【
図22】
図22は、一実施形態による、
図21の複数の中間暗号化による2ビット乗算写像fの難読化のステップを例示するブロック図である。
【
図23】
図23(a)から
図23(c)は、一実施形態による、暗号化/復号化ゲートの機能コードへの移動距離を例示するブロック図である。
【
図24】
図24(a)から
図24(c)は、一実施形態による、3ビットゲートの代わりに使用される制御ゲートを例示するブロック図であり、
図24Dは、一実施形態による、統合又は衝突から生じる6ビット制御ゲートを例示するブロック図である。
【
図25】
図25は、一実施形態による、3ビットゲートの代わりに使用される制御ゲートを例示する略式ブロック図である。
【
図26】
図26は、一実施形態による、
図3の方法のステップで使用されるような、第二制御qビットゲートを通過して第一制御qビットゲートを伝搬する方法を例示するフロー図である。
【
図27】
図27(a)から
図27(d)は、一実施形態による、制御ゲートと共有ターゲット又は制御ビットとの衝突を例示するブロック図である。
【
図28】
図28(a)及び
図28(b)は、一実施形態による、制御ゲートと異なる非重複制御ビットとの衝突を例示するブロック図である。
【
図29】
図29(a)から
図29(d)は、一実施形態による、あるゲートのヘッドの1ビットが他のゲートのテールの1ビットと重なる制御ゲートの衝突を例示するブロック図である。
【
図30】
図30(a)から
図30(d)は、一実施形態による、両ゲートのヘッドの1ビットが他のゲートのテールの1ビットと重なる制御ゲートの衝突を例示するブロック図である。
【
図31】
図31は、一実施形態による、シンプルな写像のための難読化プログラムを生成する一連のステップを例示するブロック図である。
【
図32】
図32は、本発明の実施形態を実装し得るコンピューターシステムを例示するブロック図である。
【
図33】
図33は、本発明の実施形態を実装し得るチップセットを例示するブロック図である。
【発明を実施するための形態】
【0015】
クラウドなどのパブリックリソース上で暗号化データを安全に処理し、パブリックリソースにおける優れた処理能力、効率、復元力、その組み合わせなどを上手に活用する方法とシステムについて説明する。以下の説明では、本発明の十分な理解を得られるよう、具体的な細部が、例示の目的で数多く示されている。しかしながら、当業者には、本発明がこれらの特定の細部を用いずとも実施され得ることは明らかであろう。また、他の例に関し、周知の構造及びデバイスは、本発明を不必要に曖昧にすることを避けるため、ブロック図の形で示されている。
【0016】
広範囲を示す数値範囲及びパラメーターは近似値であるが、特定の非限定的な例で示される数値については、可能な限り正確なものを報告している。ただし、いずれの数値にも、現時点において試験測定における標準偏差から必然的に生じる一定の誤差が本質的に含まれている。更に言うと、文脈から明確でない限り、ここに示される数値は、その正確性について、最下位の桁で黙示しているものがある。つまり、1.1という値は1.05から1.15までの値を暗に意味している。また、「約」という用語は、特定の値を中心とするより広い範囲を示すために用いられるものであり、文脈から明確でない限り、最下位の桁がその近辺のより広い範囲を指すことを、暗に意味している。例えば、「約1.1」というのは、1.0から1.2までの範囲を含意している。最下位の桁が不明瞭な場合、「約」という用語は0.5から2までの係数を意味する。すなわち、「約X」は0.5Xから2Xまでの範囲の値を含意している。例えば、約100といった場合、50から200までの範囲の値を含意している。さらに、本明細書に開示される範囲は、そこに包含される全ての下位範囲を含むと理解されるべきである。例えば、「10未満」の範囲には、最小値0と最大値10の間の下位範囲(及び当該最大値及び最小値)が全て含まれる。つまり、例えば1から4までなど、最小値が0以上で、最大値が10以下の下位範囲を全て含む。
【0017】
下記では、特定の例示的な写像並びに例示的な3ビットゲート及び一対の3ビットゲートを置き換えるための例示的なオプションに関連して、本発明の実施形態をいくつか説明するが、本発明はこれに限定されない。他の実施形態では、ここに記載されている方法に従った他の写像並びにqビットゲート及び置換ストラテジーが用いられる。
1. 概略
【0018】
図1は、パブリックリソースに格納されている暗号化データを使用するためのシステムを例示するブロック図である。暗号化データ140は、一又は複数の非セキュアストレージデバイス188に格納されている。図示したものでは、暗号化データ140は、置換暗号化によって暗号化されている。置換暗号化では、置換キーと呼ばれる所定方法を用いて、平文におけるビットの位置と値を暗号文における位置と値に変更し、それにより、Nビット平文ワードをNビット暗号文ワードに変える。上記置換暗号化データ140が当該暗号文である。Nビット平文ワードは、それぞれが一つのNビット暗号文ワード用である。二つの異なるNビット平文ワードが同じNビット暗号文ワードになることはない。置換キーを知っていれば、暗号文を平文に再変換し、計算に使用できる。可能置換数は2
N!であるので、各Nビット暗号文におけるビット数Nが大きければ大きいほど、暗号化データ140の安全性は高くなる。
【0019】
一又は複数の非セキュアサーバー182が、直接又は非セキュア通信ネットワーク180を介して、上記非セキュアストレージデバイス188にアクセスし得る。置換キーにアクセスしなければ、サーバー182及びネットワーク180内のデバイスは平文にアクセスできない。セキュアコンピューターシステム110もファイアウォール(図示せず)などの当該技術分野で既知の方法を介して、非セキュアストレージデバイス188にアクセスし得る。セキュアコンピューターシステム110は、暗号化データ140の暗号文に対応する平文の許可ユーザーの物理的制御及び通信制御を受ける。置換キーは、データ内に一又は複数の置換暗号化パラメーター112を含んでおり、セキュアコンピューターシステム110のユーザー達には知られている。
【0020】
暗号化データを一又は複数の非セキュアサーバー182での処理に使用する場合、より高い計算能力があったり、効率的であったりするかもしれないが、現在の方法では、非セキュアサーバー182又はネットワーク180上で動作しているプロセス全てに対しデータ112を含む置換キーが公開されてしまうと考えられている。したがって、暗号化データ140のユーザーは、一般に、ネットワーク180を介して非セキュアストレージデバイス188から暗号化データ140の一部又は全てを取得し、セキュアシステム110に少なくとも一時的にローカルストレージを行わざるを得ない。この取得プロセスは、取得/格納モジュール115により行われるものであって、どの暗号化データを取得するか特定する。取得基準が、暗号文として保存されている情報に依存している場合、写像実行に必要のない多くのデータがローカルに送信及び保存される。
【0021】
平文に実行される写像は、平文写像プログラムモジュール113により表される。他のモジュール114は、暗号文の復号化(モジュール116を使用)、平文に対するオペレーション(モジュール113を使用)、及びモジュール118を使用してのリザルトの暗号化などの処理を行う。モジュール116とモジュール118は両方が暗号化パラメーター112に依存する。モジュール115は、リザルトを非セキュアストレージデバイス188に再度保存する。保存場所が暗号文として保存された情報に依存している場合、モジュール113の平文写像によって変更されない多くのデータが、ネットワーク180を介して送信され、非セキュアデバイス188に保存される。例えば、「123」で始まる社会保障番号(SSN)を持つ人を取得したい場合は、データ操作を行うか判断する前に、SSNを復号化する必要がある。非セキュアデバイスではこれを実行できないため、全てのデータをローカルデバイスに移さなければならない。そして、少なくとも全てのSSNを復号化してから、ダウンロードしたデータのうちの一部である目的データを操作する必要がある。
【0022】
ここで、以下が観察されている。1)置換暗号化は、一又は複数のqビットゲートのシーケンス(q∈{1、2、3})によって実施可能である。2)入力と出力を1対1でマッピングする写像は、一又は複数のqビットゲートのシーケンスによっても実施可能である(例示のため、写像プログラムモジュール113がこの全単射写像を実行すると仮定する)。3)同じ入力に対して同じ出力を生成する一連のqビットゲートが複数あるため、復号化、平文写像、及び暗号化qビットゲートは、復号化、平文写像、及び暗号化オペレーションに直接対応しない異なるゲートシーケンスで置き換えることが出来る。それにより、これらのオペレーションは難読化される。これらのオペレーションを公開しない異なるゲートシーケンスを実行する難読化コードが生成されるのである。当該難読化コードは、非セキュアサーバー182でのオペレーションのため送信可能である。このようなコードは、置換キーを漏らすことなく、非セキュアサーバー182及び非セキュアデバイス188の計算能力、効率性、復元力を活用できる。一連のゲートは、本明細書や実施例の記載では回路とも呼ばれる。よって、データに対して意図した写像を実行するプログラムは、計算の回路モデルにおいてそうであるように、ゲートに関する記述に変換されることとなる。次に、論理ゲートは、3ビットのトフォリゲートなど、qビットの可逆ゲートで表現される。
【0023】
図2Aは、一実施形態による、Nビットワードに作用する3ビットゲート201を例示するブロック図である。ビットX203x、ビットY203y、及びビットZ203zで表される入力Nビットワード202aから、省略記号で表される0個以上のビット位置分だけ離れている、後続している、又は先行している三つのビット位置は、可逆3ビットゲートに入る。リザルトは、同じ3ビット位置にある出力Nビットワード202bに移る。ただし、これら三カ所の内容には置換が行われている可能性がある。例えば、Nビットワード202aの三つの位置X、Y、Zにおける8つの値A、B、C(例えば、000、001、010、011、100、101、110、111)は、Nビットワード202bにおける8つの値A’、B’、C’(例えば、110、111、100、101、000、001、011、010)の順列に変わる。別の3ビットゲートでは、別の8つの値の順列が生成される。三カ所の(X、Y、Z)いずれにおいても、2
3!=40,320の3ビットゲート候補が存在する。実施例の記載では、3ビットゲートは、
図2Aと同様に、ゲートが作用する可能性があるビット位置に対応する線上に実点で表される。
【0024】
図2Bは、一実施形態による、Nビットワードに作用する一対の3ビットゲート(204a、204b)を例示するブロック図である。この図では、入力Nビットワード202c、3ビットゲート204a、3ビットゲート204b、及び出力Nビットワード202dが示されている。12個の連続するビット位置は、水平線分で示され、省略記号で表される0個以上の他のビット位置に後続又は先行する。例えば、平文写像に関連する3ビットゲートから復号化に関連する3ビットゲートに難読化するためなど、3ビットゲート204aを3ビットゲート204bを越えて移動することが望まれる場合に、それらのゲートは移動するとされている。二つのゲート204a及び204bが少なくとも1ビットを共有する場合、この動きにより、ゲートは、「デブリ」ゲートと呼ばれる一又は複数の異なるゲートのグループを生成するが、いずれも元ゲート204a及び204bとしては認識できない。この場合、ゲートは「衝突する」とされる。このような「衝突」をどのように解決するかを決定するためのルールについては、以下で大まかに説明し、実施例の部分で詳しく説明する。一般に、衝突は、3ビットゲートの総数に可能な限り追加することで解決できる。この幅広の概念は、
図2Cによって表される。
【0025】
図2Cは、一実施形態による、
図2Bの二つの3ビットゲート204a及び204bによって生成された結果と同等の結果を生成する一連の3ビットゲートを例示するブロック図である。これは、特定の3ビットゲート204a及び204bに適用される実際のソリューションではなく、ゲート204a及び204bがこのソリューションで消費され、4つの異なる「デブリ」3ビットゲート202c、204d、204e及び204fと置き換えられることを示している。
【0026】
ここで用いられているように、ゲートGaは、ゲートGbを越えて移動したとされる。例えば、前進動作において、左側のゲートGaが右側のゲートGbを越えて移動する場合、ゲートGa及びGbが一つ又は二つの共通ビット線にかかると常に衝突が発生するはずである。ゲートGa及びGbがビット線を共有していない場合、これらの順序を入れ替えることで、ゲートGaのゲートGbを通過する動きが達成される。三つのビット線全てを共有する場合、これらは最初に一つのゲートにマージされ、このゲートがゲートGa用の動作を続行する。衝突では、元のゲートGa及びGbが同等のデブリゲートシーケンスに置き換えられるのだが、ここでデブリゲートの数は、共有するビットラインの数に依存している。二つのビットラインを共有している場合は最大4つのデブリゲート、一つのビットラインのみを共有している場合は最大7つのデブリゲートである。衝突によって生じた右端のデブリゲートを含む、ゲートGaのゲートGbを超える動きから生じた右端のゲートは、「ディセンデント」と呼ばれる。元々の意図が、ゲートGaにゲートGb右側の他ゲートを越えて移動させる事であった場合、ゲートGaのディセンデント又は衝突による他のデブリゲートは、元ゲートGbのすぐ右側のゲートGcを越えて移動する必要がある。更に右へ動かしたい場合、ゲートGa又はそのディセンデントの少なくとも一つが、右側のあらかじめ決められた数のゲートを通過するまで、当該プロセスが繰り返される。右側のゲートGbがゲートGaを越えてその左又はそれ以上に移動する場合、この後退移動は、上記と同様の手順で行われるのだが、動きの方向が逆となる。
【0027】
様々な実施形態において、ゲートを移動する概念は、復号化又は暗号化に関連するゲートを平文写像に関連するゲートを越えて移動させることでコードを難読化する統合プロセスにおいて、用いられる。
【0028】
図2Dは、一実施形態による、パブリックリソースに格納された暗号化データを当該パブリックリソースにおいて安全に処理するためのシステムを例示するブロック図である。ネットワーク180、非セキュアストレージデバイス188、置換暗号化データ140、置換暗号化パラメーターデータ112、平文写像プログラムモジュール113、モジュール114、及び暗号化データ取得/復元モジュール115は、
図1について上述した通りである。
【0029】
セキュアコンピューターシステム210はシステム110とは異なる。これは、システム210にテーブル230、モジュール232、モジュール233、モジュール234、モジュール235、モジュール236、及びモジュール250が含まれているためである。テーブル230は、非セキュアサーバー282によって実行可能な形式の各ソースコード又はオブジェクトコード命令を、当該ソース又はオブジェクトコード命令と同じ一以上の入力Nビットワードから同じ一以上の出力Nビットワードを生成する一以上のqビットゲートのシーケンスと関連付ける。
【0030】
図4(a)から
図4(c)は、一実施形態による、特定の入力ワードxが与えられた特定の出力ワードyを生成するため、7ビットワードに作用する一連のゲートとして難読化されるプログラムを例示するブロック図である。
図4(a)では、復号化モジュールE
-1、写像モジュールf、及び暗号化モジュールE’を含むプログラムPが、いくつかのビット(例えば、7ビット)から構成されるワードに作用する。データベースで暗号化された全てのデータは、3ビットトフォリゲートなどの可逆ロジックゲートを用いて構築された置換に基づくスキームを使用して暗号化される。可逆計算により、回路全体からの結果が、nビットの入力x(ここではnとNは交換可能に使用される)を取り、nビット出力y=P(x)を返す置換となるのだが、ここでP(x)は2
n可能なnビット入力xの空間に作用する置換である。2n次元ビット空間上の順列は、可逆qビットゲートを用いたシンプルな置換により生成される。平文データx’を暗号文xに暗号化するプログラムE(x)は、可逆ゲートを用いて表現されるため、データを復号化するプログラムE-1は、プログラムの各ゲートの逆元を用いて計算を逆にして、逆の順序で読み取ることで、得ることができる。この逆演算により、置換の逆元x’=E
-1(x)が得られ、これがデータを復号化する。また、平文データx’に目的のタスクを実行するプログラムfは、計算の回路モデルにおいてそうであるように、ゲートに関する記述に変換されるか、中央処理装置(CPU)用のコンパイラ又はフィールドプログラマブルゲートアレイによって生成される。次に、論理ゲートがqビット可逆ゲートで表される。実施形態によっては、最終的な回路、例えば統合/難読化されたE
-1・f・E’は、FPGAにプログラムされる。この実装は、ハードウェアに実装されることから、入力データに対する回路の動作が高速になるという利点がある。他の実施形態では、E及びE
-1は、スキームが可逆ゲートに関して定式化されている限り、高度暗号化規格(AES)などの他の暗号化スキームを用いて定義される。
【0031】
図4(b)に示すように、可逆プログラムPは、プログラムの三つのステージ、すなわち、データを復号化するモジュールE
-1、目的のタスクを実行するモジュールf、及びデータを再暗号化するモジュールE’をパイピングすることによって構築される。各モジュールが可逆qビットゲートの観点から表されていることから、結合プログラムPは、全体として、可逆qビットゲートで構成されている。復号可逆プログラムは、nビット暗号文ワードxを入力として取り、暗号文ワードy=P(x)を出力する置換であるが、ここで、P(x)は、
図4(b)に示すとおり、2
n可能なnビット入力xの空間に作用する置換である。
【0032】
実施形態によっては、各オブジェクトコード命令を一又は複数のqビットゲートに関連付けることが好ましい。なぜなら、オブジェクトコードはコマンド数が少ない傾向があるため、テーブル内のエントリの総数は、より高いレベルの複合ソースコード命令に関連するテーブルのそれよりも少なくなる可能性があるからである。また、オブジェクトコードは、処理チップレジスタのレベルで動作する傾向があるので、Nビットをレジスタのビット数に簡単に一致させることができ、マッピングが簡単になる。ソースコードは任意の言語で書き、非セキュアサーバー用の適切な既存コンパイラを使用してコンパイルし、それによりqビットゲートのシーケンスにマッピングされるオブジェクトコードを生成する。
【0033】
3ビットの可逆ゲートに関する完全なプログラム(又は置換)Pの記述は固有のものではない。入力xに対して同じ最終結果P(x)を生成する他の3ビットゲートシーケンスがあるが、マシンの中間状態が全て異なる。
図4(c)は、一実施形態による、任意のプログラムP(x)について達成され得る異なる中間状態を例示するブロック図である。図示の実施形態では、元プログラムPは、m
1qビットゲートG
a
(1)のシーケンスを生成し、それぞれがα=1からm
1に指定された3ビット(x
iα、x
jα、x
kα)にまで作用する。また、元プログラムPは、サブスクリプトi、j、kを生成し、それぞれが各αのワード内の異なるnビットを一つ示し、添え字付きのxはそれぞれ指定されたビットの値を示す。また、他のm
pqビットゲートG
b
(p)のプログラムP
(p)(x)があり、それぞれが、同じ入力xが与えられた同じ出力yを生成するβ=1からm
pに指定された3ビット(x
i’β、x
j’β、x
k’β)にまで作用する。
図4(c)は、p=2及び3の二つの代替プログラムを示しているが、他のものでも可能である。
【0034】
一つのプログラムP(p)が与えられただけでは、元プログラムP(1)がどれであるかを判別することはできない。元プログラムP(1)といくつかのゲートシーケンスを共有するプログラムP(o)を選択すると、難読化プログラムP(o)が提供され、この難読化プログラムP(o)においては、データの復号化又は暗号化に関連するステップは断定できない。したがって、難読化プログラムP(o)は、パブリックストレージに保存されている暗号文を復号化するためのキーを渡すことなく、共有パブリックコンピューターで実行できる。P(o)をもたらす新しいゲートシーケンスを見つけるため、三つのセグメントE-1、f、及びE’を、区別できなくなるように、有意に統合する。この統合には、ゲートを、あるセグメントから別のセグメントとの境界を越えて移動させることが含まれる。しかし、ただゲートを移動するだけでは十分ではない。ゲートは、別のセグメントの大部分に深く貫通するように、互いに入れ違いになる。
【0035】
サーバーに送信され実行されるのはプログラムP(o)である。クラウドサービスプロバイダーは、要求された計算を実行し、暗号化データベースからデータを読み取り、暗号化データを出力できる。ただし、クラウドプロバイダーは、計算中ずっと何が行われているかは判別できない。最終的な出力は同じであるが、中間ステップにおいては、ほとんど又は全ての計算ステップで異なる結果が出る。例えば、クライアントが、ブール演算式やクエリを満たす全てのエントリをデータベースで検索したいとする。サーバーは難読化コードを実行し、暗号化データベースから読み取り、適切なクエリを暗号化出力ファイルに書き込む。この暗号化出力ファイルはクライアントに送り返される。そして、クライアントは、セキュアコンピューターで回答を復号化する。
【0036】
実施形態によっては、以下で詳細に説明するが、いくつかのqビットゲートが一つのkビットゲートに統合される(3<k≦N)。そのような実施形態では、テーブル230は、各ソースコード又はオブジェクトコード命令を、当該ソース又はオブジェクトコード命令と同じ一又は複数の入力Nビットワードから同じ一又は複数の出力Nビットワードを生成する一又は複数のkビットゲートに関連付けるエントリ又は命令を含む。これらの実施形態のいくつかでは、テーブル230は、各kビットゲートを一又は複数のqビットゲートのシーケンスと関連付けるエントリも含む。したがって、当該qビットゲートシーケンスがあった場合は、対応するkビットゲートを必要に応じて置き換えることができる。例えば、テーブル230は、一連のqビットゲートをkビットゲートに変換するためのルール又は命令を含むが、これは、必要以上の実験なくとも当業者にとっては明らかなプロセスである。実施形態によっては、qビットゲートは、kビットゲートが生成されるまで連続的に結合される。
【0037】
モジュール232は、ソースコード又はオブジェクトコードをqビット可逆ゲートのシーケンスに変換するように構成される。モジュール232は、テーブル230内のデータの少なくとも一部を用いて、復号化、平文写像、又は暗号化に属するものとして各qビットゲートにラベルを付ける。実施形態によっては、以下で詳細に説明するように、モジュール232は平文写像を一連のセグメントに分割し、暗号化プロセスが各セグメントの後に追加され、対応する復号化プロセスが次のセグメントの前に追加される。この平文写像の分割は、ソース/オブジェクトコードをqビットゲートのシーケンスに変換する前又は後に行うことができる。こういった平文写像セグメント化の実施形態のいくつかでは、各qビットゲートは、平文写像又は暗号化/復号化プロセスに関連するものとしてラベル付けされる。実施形態によっては、暗号化qビットゲートは、復号化qビットゲートから区別するためにラベル付けされる。モジュール232の出力は、モジュール114と同等のqビット可逆ゲートのシーケンスを含むモジュール233である。実施形態によっては、復号化プロセス、暗号化プロセス、又はその両方は、qビットゲートに関して定義される(例えば、置換暗号化パラメーター112は、復号化を実行する一連のqビットゲート、暗号化を実行する一連のqビットゲート、又はその両方を含む)。これらの実施形態では、モジュール232は、ソース又はオブジェクト復号化コード、暗号化コード、又はその両方をqビットゲートに変換する必要はない。いくつかの実施形態では、暗号化は、ただ復号化を実行するqビットゲートの順序を逆にするだけで達成され、パラメーター112は、復号化又は暗号化のための一つのシリーズのみを含む。
【0038】
モジュール234は、qビットゲートを、一又は複数の暗号化又は解読プロセスから平文写像セグメントのqビットゲート間の位置又はそれを越えて移動させるように構成される。本明細書では、これを統合プロセスと呼ぶ。実施形態によっては、この統合プロセスは、三つのステップからなる。第一ステップでは、復号化セグメントに関与するゲートが、平分写像セグメントに関与するゲートを通過して前方に伝搬し、第一ステージ統合セグメントをもたらす。第二ステップでは、暗号化セグメントに関与するゲートが、第一ステップから生じたゲートを通過して後方に伝搬し、第二ステップ統合ゲートシーケンスをもたらす。第三ステップでは、このシーケンスのいくつかのqビットゲートが統合されてkビットゲート(k>3)となる。ゲート伝搬は、伝搬が前方であるか後方であるかに応じて、右側又は左側にあるゲートを通過するゲートの動きで構成される。
【0039】
ステップ1は、復号化セグメント内の右端のゲート(例えばGz)を、Jゲートを通過して平文写像セグメント内又はそれを越えて前方方向に伝搬させることから始まる。Jは伝搬距離と呼ばれる。上記で定義したことであるが、Jゲートを通過した動きというのは、Gzディセンデント(「移動中の」ゲートGz又はその最も遠い衝突デブリゲート)が、元のJゲートを越えてGzの右側に移動したということを意味する。プロセスは、復号化セグメント内の右端から2番目のゲート(例えばGy)を、J’ゲートを通過して平文写像セグメント内又はそれを越えて伝搬させることにより、続行される。この伝搬では、右端から2番目のゲート(Gy)は、最初の右端のゲート(Gz)の伝搬で残ったデブリゲートも越えて移動する。残ったゲートはそれぞれ、Jより小さい、等しい、又は大きいターゲットJ’に向かう一つと見なされる。Jより小さい又は等しいことの利点は、より少ない計算で効率的に難読化を実行できることである。Jよりも大きいことの利点は、より完全に近い難読化ができることである。実施形態によっては、J’は、難読化プロセスを逆にすることがさらに困難になるよう、Jの値について変化するようにランダムに選択される。このプロセスは、復号化セグメント内の全てのゲートが、少なくともある程度、平文写像セグメント内又はそれを越えて伝搬されるまで、繰り返される。それにより、復号化セグメントと平文写像セグメントが統合することとなる。
【0040】
ステップ2では、暗号化セグメントが、先の復号化及び平文写像セグメントの統合から得られたゲートのシーケンスと統合される。プロセスは、ステップ1で説明したものと類似しているが、その方向が逆となる。このプロセスは、暗号化セグメントに関与する左端のゲート(例えばGa)が、復号化及び平文写像統合セグメントにおけるKゲートを越えて後方に移動することから始まる。上記で定義したことであるが、Kゲートを通過した動きというのは、Gaディセンデント(「移動中」のゲートGa又はその最も遠い衝突デブリゲート)が、元のKゲートを越えてGaの左側に移動したということを意味する。これにより、暗号化セグメント内の左端から2番目のゲート(例えばGb)がK’ゲートを通過して左に向かう、という動作が続く。これには、最初の左端のゲート(Ga)の伝搬で残ったゲートを通過することも含まれる。残ったゲートはそれぞれ、Kより小さい、等しい、又は大きいターゲットK’に向かう一つと見なされる。J’とJの場合と同様に、Kより小さい又は等しいことの利点は、より少ない計算で効率的に難読化を実行できることである。Kよりも大きいことの利点は、より完全に近い難読化ができることである。実施形態によっては、K’は、難読化プロセスを逆にすることがさらに困難になるよう、Kの値について変化するようにランダムに選択される。ステップ2は、暗号化セグメント内の全てのゲートが左に向かって、少なくともある程度、統合復号化/写像ゲート内に伝搬されると終了する。
【0041】
いくつかの実施形態では、この方法を、右手の左端ゲートを左手に持っていくこと(R→L)と左手の右端ゲートを右側に持っていくこと(L→R)とを交互に繰り返すように変更する。いくつかのqビットゲートをkビットゲートに統合する任意ステップ3について、以下で詳しく説明する。
【0042】
自動伝搬と衝突の手順については、
図5と
図26を参照して、以下、実施例の部分においてより詳しく説明する。モジュール234の出力は、モジュール114と同等のqビット可逆ゲート(及びゼロ個以上のkビットゲート)の難読化シーケンスを含むモジュール235だが、オリジナルの復号化又は最終的な暗号化プロセスを推測することは非現実的であり、そのためデータ112の暗号化パラメーター値を決定することも非現実的である。
【0043】
モジュール236は、qビット可逆ゲートの難読化シーケンスを難読化ソースコード又はオブジェクトコードに変換するように構成される。モジュール236は、テーブル230の少なくとも一部のデータを使用する。実施形態によっては、以下でより詳細に説明するように、モジュール236は、最初に、単純な計算に基づいて、又はテーブル230に格納された関連付けに基づいて、少なくとも一部のqビットゲートを統合させてkビットゲートを生成する。kビットゲートは、テーブル230において格納又はコード化されているkビットゲートとソースコード又はオブジェクトコード命令との間の関連付けを用いて、ソースコード又はオブジェクトコードに変換される。実施形態によっては、kビットゲートの一又は複数のソース又はオブジェクトコード命令への変換は、当業者であれば、ルール又は一又は複数の命令に基づき、必要以上の実験なしに、簡単に行える。モジュール236の出力は、モジュール114と同等の難読化ソース又はオブジェクトコードを含むモジュール250である。このモジュール250は、図示されているように、モジュール115を用いて非セキュアサーバー282に安全に送信可能で、これらのサーバーの電力、効率、復元力を用いて暗号化データ140に作用する。
【0044】
図1及び
図2Dにおいて、例示の目的で、プロセス、機器、及びデータ構造が、特定の配置の統合ブロックとして示されているが、他の実施形態では、一又は複数のプロセス又はデータ構造、又はその一部が、一又は複数のデータベースにおいて同じ又は異なるホスト上に異なる様態で配置されたり、又は省略される。また、一又は複数の異なるプロセス又はデータ構造が同じ又は異なるホストに含まれている。
【0045】
図3は、一実施形態による、パブリックリソースに格納された暗号化データをパブリックリソース上で安全に処理するための方法を例示するフローチャートである。
図3、そして続く
図5及び
図26のフローチャートでは、例示の目的で、ステップが特定の順序の統合ステップとして記載されている。しかしながら、他の実施形態では、1又は複数のステップ、又はその一部が、異なる順序で実行されたり、時間的に重複したり、連続又は平行して実行されたり、省略されたりする。また、一又は複数の追加のステップが追加されているか、方法がいくつかの方法の組み合わせに変更されている。
【0046】
ステップ301では、テーブル230が生成される。これは手動又は自動で行うことができる。完了すると、その結果がテーブル230としてコンピューター可読媒体に保存される。テーブル230のエントリは、少なくとも各ソースコード又はオブジェクトコード命令を一又は複数のqビットゲートに関連付ける。実施形態によっては、ソースコード又はオブジェクトコードは、フィールドプログラマブルゲートアレイ(FPGA)のための命令である。いくつかの実施形態では、後方に向かうよりも、ソース/オブジェクトコードからqビットゲートのシーケンスまで前方に向かって異なる関連付けが用いられる。例えば、前方方向では、縮小命令セットプロセッサ(RISP)の各オブジェクトコード命令が、最少数のqビットゲートに変換されるが、後方方向では、各qビットゲートが、単一のqビットゲートを実行するためのSHIFT関数などの最も効率的なRISP命令に変換される。
【0047】
統合を用いる一部の実施形態では、エントリがテーブル230に含まれ、一又は複数のソースコード又はオブジェクトコード命令のそれぞれからkビットゲートへの変換(3<k≦N)を行う。qビット又はkビットのゲートをソース/オブジェクトコード命令に変換することは、必要以上の実験を行わずとも、当業者にとっては明らかである。最も効率の悪い方法では、それぞれ(23)と(2k)の命令を回す必要がある。統合を用いない実施形態では、これらのkビットゲートを含むエントリは、テーブル230から省略され得る。
【0048】
ステップ303では、命令が生成され、それによりモジュール115が暗号化データ構造140から入力暗号文を取得し、結果の暗号文をデータ構造140に格納する。これは、例えばSQLクエリに基づいて、手動又は自動で行うことができる。
【0049】
ステップ305でも、命令が生成され、それによりモジュール114が暗号文を解読し、平文写像を適用し、結果として得られた平文を暗号化することで、結果的に暗号文を生成し、格納する。実施形態によっては、ステップ305は、写像をいくつかの写像セグメントに分割し、各セグメントの後に新しい暗号化命令を追加し、次のセグメントの前に対応する復号化命令を追加することを含む。オブジェクトコードをqビットゲートに変換したり戻したりする実施形態では、ステップ305は、写像(セグメント)を実行するソースコードをコンパイルし、任意で先頭の復号化及び後続の暗号化セグメントをコンパイルして、ステップ307でqビットゲートに変換されることとなるオブジェクトコードを生成する。
【0050】
ステップ307では、テーブル230を用いて、ステップ305で生成された命令をqビットゲートのシーケンスに変換する。実施形態によっては、テーブルは使用されず、代わりに、熟練したプログラマであれば誰でも作成できるゲートコンパイラが操作され、ソース/オブジェクトコードをqビットゲートに変換する。いくつかの実施形態では、コンパイラとテーブル230の組み合わせが用いられる。また、いくつかの実施形態では、FPGA用のコンパイラが使用されるか、ゲートがFPGA上に実装されるか、又はその両方となる。更に、いくつかの実施形態では、ステップ307は、モジュール232によって実行される。ステップ307の出力は、qビットゲートのモジュール233である。
【0051】
ステップ309では、平文写像に対応するqビットゲートがいくつかのセグメントに分割され、暗号化及び復号化ゲートがセグメント間に追加される。実施形態によっては、ステップ309は、各セグメントに含めるゲート数を決定することを含み、以下で説明するようにステップ311で決定された伝搬の深度に関連している。侵入の深度(例えばJ、J’、K、K’、又はいくつかの組み合わせ)はトレードオフとして決定される。これは、深度が深いほど衝突が多くなり、衝突が増えるほど、生成されるゲートが増えるためである。難読化を高めるには深度を深くすることが望ましいが、生成されるゲートが多すぎると、生成されるコードが非常に長くなり、効率が悪い。セグメント数を決定するには、衝突によるゲート数の過剰化なく、写像を十分に難読化することが効果的である。単一のセグメントが最大の難読化を実現するが、復号化セグメント及び暗号化セグメントからの全てのゲートが写像セグメントを横切って移動すると、指数関数的に大きな一連のゲートになる。写像を非常に多くのセグメントに分割(例えば、写像セグメントにおいて各ゲートに一つなど)すると、難読化が弱くなる。バランスが良いのは、セグメント数がNビットワードのビット数と同程度(シンボルO()で表される)の場合である。ただし、最適なセグメント数は写像のタイプによって異なる。例えば写像が、乗算の場合のO(N2)のように多くのゲートを持つことは普通のことである。しかし、常にそうであるとは限らない。写像によっては、ゲート数が少ない場合もある。例えば、加算の場合のようなO(N)である。この場合、指数関数的増加なく統合をよく行うのに、F(x)をセグメントに分割する必要はない。実際、これが、F(x)をセグメントに分割して各セグメントがO(N)ゲートを持つようにすることが提案された理由である。その後、回路長の指数関数的な増加を招くことなく、ローカルで統合を実行できる。O(N2)ゲートを持つF(x)写像の場合、およそO(N)セグメントを用いる。このセグメントあたりのゲート数を決定する例については、実施例のところで説明する。難読化の反転をさらに複雑にするためには、セグメントの長さと侵入の深度のいずれか又は両方にランダム要素を追加するとよい。
【0052】
この平文写像のセグメント化が、ステップ305でソース/オブジェクトコードレベルで行われた場合、ステップ309は省略される。例えば、ステップ307及び309は、
図2Dのモジュール232によって実行される。実施形態によっては、(ソース/オブジェクトコードレベルで書かれた暗号化/復号化セグメントを用いる代わりに)qビットゲートのシーケンスとして既に書かれている暗号化/復号化セグメントが用いられる。
【0053】
ステップ311では、復号化に関与するqビットゲートが、平文写像又はその現在のセグメントに関与するqビットゲートを越えて前方に伝搬される。平文写像に移動する距離は、取得された侵入率と衝突によるゲート数の増加との間のトレードオフに基づいている。距離J(例えば、J個のゲート)は、復号化qビットゲートを平文写像(セグメント)に向けて又はそれを越えて前に移動させるために定義される。この距離を決定する方法の例については、実施例のところで説明する。既存の可逆qビットゲートとの衝突は、特定の手順を用いて解決されるが、これについては、以下、一般的な可逆3ビットゲートについては
図5を参照し、制御ゲートについては
図26を参照し、説明する。また、実施例のところで、更に詳しく説明する。
【0054】
ステップ313では、暗号化に関与するqビットゲートが、平文写像又はその現在のセグメントに関与するqビットゲートを越えて後方に伝搬する。平文写像に移動する侵入距離は、取得される深度と衝突毎のゲート数の増加とのトレードオフに基づいている。距離K(例えばゲート数K)は、暗号化qビットゲートを平文写像(セグメント)に向けて又はそれを越えて後ろに移動させるために定義される。この距離を決定する方法の例は、K=Jを用いて、実施例のところで説明する。既存のqビットゲートとの衝突は、以下、一般的な可逆3ビットゲートについては
図5を参照し、制御ゲートについては
図26を参照し、説明する。また、実施例のところで、更に詳しく説明する。
【0055】
実施形態によっては、他のグループ化が用いられる。例えば、復号化セグメントと写像セグメントが一つのグループ(グループA)にまとめられ、その後、ゲートが暗号化セグメント(グループB)からグループAに移動され、グループCとなる。
【0056】
ステップ315では、qビットゲートの別の複合化平文写像セグメント暗号化シーケンスがあるかどうかが判定される。それがあった場合、モジュール235の難読化qビットシーケンスが生成されており、制御はステップ311に戻る。そうでない場合、制御はステップ317に進む。例えば、ステップ311、313及び315で説明されるループは、
図2Dのモジュール234によって実行される。
【0057】
ステップ317では、難読化qビットゲートモジュール235内のqビットゲートのシーケンスが、一又は複数のkビットゲートに置き換えられる(結合される)。q>3でqビットゲートを統合させてkビットゲートを生成するのは比較的簡単である。例えば、プログラムは、qビットゲートのシーケンスを与えられたkビットゲートを生成する。これらの実施形態では、テーブル230は、ソース/オブジェクトコード命令をqビットゲート(両方向)に関連付け、kビットゲートをソース/オブジェクト命令(一方向)に関連付ける。実施形態によっては、統合は用いられずに、ステップ317は省略される。
【0058】
ステップ321では、難読化コードのqビットゲート及びkビットゲートが、テーブル230を使用してソースコード又はオブジェクトコードに変換され、難読化ソース/オブジェクトコードモジュール250が生成される。例えば、ステップ317及び321が
図2Dのモジュール236により行われる。実施形態によっては、モジュール235は、モジュール235内のゲートのシーケンスを送信する前に統合が行われるのであれば、非セキュアサーバーに実装され得る。これは、クラウド上で利用可能な計算能力を活用する。
【0059】
ステップ323において、難読化コード250及びデータ取得及び結果格納モジュール115は、非セキュアサーバー182に送られる。ステップ325では、非セキュアサーバーに、取得/格納モジュール115及び難読化コード250を実行させる。これらのモジュールを実行するための命令は、例えば、メッセージとして非セキュアサーバーに送信される。
2.実施例
2.1 一般的な3ビットゲート
【0060】
図5は、一実施形態による、
図3の方法のステップ311又はステップ313で使用されるような、第一の3ビットゲートを第二の3ビットゲートを越えて伝播する方法500を例示するフロー図である。ここでは、3ビットb
1、b
2、b
3に作用するゲートgが、3ビットb
1、b
2、b
3にのみ重要な作用を伴うnビット文字列に作用するGとして記述される記数法を用いる。nビットワードxに作用する3ゲートプログラムPは、P(x)=G
3(G
2(G
3(x)))又は択一的にP=G
3・G
2・G
1として表すことが出来る。したがって、より一般的には、m3ビットゲートには、P=G
m・G
m-1・G
m-2・・・G
3・G
2・G
1である。さらに、プログラムPは、ラインの順序付きリストlと見なせる。
【0061】
【0062】
そうすることで、プログラムPは一連の命令となり、各命令は、ライン番号lで与えられる順序番号と、xil、xjl、xklで示されるビットの三つ組と、指定された3ビットの順列glとを有する。各ラインにn(n-1)(n-2)x8!という命令の可能性があり、その一部は同じ結果をもたらす(3ビットを並べ替えて、対応する順列gを選択できるため)。この縮退を取り除き様々な命令の数を取得する一つの方法は、xil<xjl<xklを選択することである。したがって、
【0063】
【0064】
の縮退命令を与え、そこでは記数法
【0065】
【0066】
であって、一度にbをとるaアイテムの組み合わせの数を読み取る。
【0067】
衝突ルール
ゲートの動きを説明するため、最もシンプルなケースを考える。ここでは二つの連続したゲートが異なる3ビットグループに作用し、したがって可換、つまりGl・Gl-1=Gl-1・Glとなる。プログラムラインに関しては、二つの連続したゲートが共通ビットを共有しない場合、つまり{xil、xjl、xkl}∩{xi(l+1)、xj(l+1)、xk(l+1)}=0であれば、lとl+1のラインは命令リストにおいて交換可能である。連続ゲートの交換は、これらの連続ゲートが衝突するとき、つまり、1、2、又は3ビットを共有するときまで継続可能である。
【0068】
衝突の確率は次のように推定できる。ランダムなゲート分配の場合、連続する二つのゲートが、p0、p1、p2、p3に指定される0、1、2、又は3ビットを共有する確率は、下記の番号を付した方程式で与えられる。
【0069】
【0070】
nが大きい場合、p1≒9/n、p2≒18/n2、p3≒6/n3、及びp0=1-p1-p2-p3≒1-9/nであることに注目されたい。ゲートがlゲートを介して可換となる確率はp0l=(1-9/n)l≒e-9l/nである。つまり、衝突を用いない場合の平均侵入深度は約l0=n/9である。
【0071】
nビットワードを十分に暗号化するには、n又はそれ以上のゲートが必要となる。したがって、衝突のない侵入深度はプログラムの暗号化セグメントの一部である。したがって、一般的に、復号化セグメント又は暗号化セグメントを難読化するには不十分である。そのため、ゲートを隣接するセグメントにさらに押し込むには、衝突を処理するためのアプローチを含める必要がある。例えば、衝突前の情報を、衝突するゲートのペアを越えて複数のゲートに混合させるアプローチである。
図5のステップは、一般的な3ビットゲートの衝突ゲートを越えて情報を移動する方法を示している。ここで、衝突する二つのゲートは、第一3ビットゲート及び第二3ビットゲート、又はゲートGa及びGbとして参照する。
【0072】
ステップ501では、第一3ビットゲート及び第二3ビットゲートによって共有されるビット位置の数が決定される。共有ビット位置がない場合、制御はステップ503に進む。ステップ503では、第一3ビットゲートは、衝突なく第二3ビットゲートを通過して移動でき、追加のゲートは生成されない。次に、制御はステップ551に進む。
【0073】
ステップ551では、第一ゲートが十分に、例えばゲート目標数(例えば、J又はK)によって示されるいくつかのゲートだけ伝搬したかどうかが判定される。ステップ551は、これまでに伝搬した距離をインクリメントすること(例えば、伝搬した距離に1を加えること)を含む。伝搬した距離がゲート目標数よりも短い場合、制御はステップ553に進む。そうでない場合、プロセスは終了する。
【0074】
ステップ553では、次の第一ゲート及び次の第二ゲートが決定される。例えば、2ビットの衝突でGbにGaを越えて移動させるためにGcからGfまでのゲートをいくつか生成し、その後に「GaはJ(又はK)ゲートを越えて移動したか?」と問う。二つの共有ビットがある衝突で、GaがGbを通過すると、GaはディセンデントゲートGfに取って代わられ、それが回路内の次のゲートを通過できる、ということに注目されたい。共有ビットが一つだけの場合の衝突も同様であるが、これらの衝突には7つのデブリゲートがある(例えばGc、Gd、Ge、Gf、Gg、Gh、Gi)。この場合、ディセンデントゲートGiはGaに取って代わり、さらなる移動を行う。もちろん、侵入が反対方向に進んでいる(GbがGaを越えて移動している)場合、両タイプの衝突(2ビット共有及び1ビット共有)でGbに取って代わるのはディセンデントゲートGcである。次に、制御はステップ501に戻り、次の第一ゲート及び第二ゲートによって共有されるビット位置の数を確認する。
【0075】
ステップ501で三つのビット位置全てが共有されると判定された場合、制御はステップ511に進む。ステップ511では、二つの3ビットゲートを、同じ結果を達成する異なる3ビットゲートに置き換える(組み合わせる)ことができる。
図6は、一実施形態による、三つ全てのビットで衝突する一対の3ビットゲートを例示するブロック図である。結果は単一の3ビットゲートとなる。この場合、3ビットゲートの数は衝突後に減少する。しかし、伝搬距離は1ずつインクリメントされる。結果の3ビットゲートを同じビットに作用する二つの3ビットゲートにデコンボリューションする方法が8!つあることに注目されたい。よって、この衝突から生じる統合を元に戻すことは、可能性のツリーが生成されるため、困難である。次に、制御は、上記したステップ551以降に進む。
【0076】
ステップ501で二つのビット位置が共有されると判定された場合、制御はステップ521に進む。ゲートGa及びGbを難読化しないGc及びGdに変更するのには、自明な方法がある。その一つは、二つのゲート間の二つのビットにゲージ変換を入れることである。
図7は、一実施形態による、2ビットで衝突する一対の3ビットゲートGg1及びGg2を例示するブロック図である。先行するゲートシーケンスのGa及びGa
-1ペアがキャンセルされる(GaはGa
-1を乗算して出る)ので、この手順は、1)回路のトポロジを変更せず、2)二つのゲート間のステップにのみ影響を与えるということから、効果的ではない。代わりに、ステップ521から541に示されているプロセスが、より高い難読化を提供する。
【0077】
ステップ521において、プロセスは、二つの3ビットゲート(それぞれ第1及び第2のGa及びGbとして示される)を、Gc、Gd、Ge、Gfとして示される4つの3ビットゲートとBk及びBlとして示される二つのブレイディングゲートで置き換え始める。ブレイディングゲートは5ビットゲートであるが、一度決定されると、簡単に決定可能な二つ以上の3ビットゲートに変換可能である。以下にこれを提供する。置換ゲートは式1のように配置され、これは
図8に示されている。
Gb・Ga=Gf・Bl・Ge・Gd・Bk・Gc (1)
図8は、一実施形態による、2ビットで衝突する一対の3ビットゲートを例示するブロック図である。
【0078】
ステップ523では、
図9に示される6タイプのブレイディング置換の中からB1及びBkを選択する。
図9は、一実施形態による、二つのビットで3ビットゲートが衝突する際のデブリゲートの生成に有用な一連のブレイディング置換を例示するブロック図である。B0、B1、及びB2はそれら自体の逆元であるが、B3、B4、及びB5の場合は異なる。BkとBlはどちらも、これらの6つとその逆元の中から任意に選択出来る。便宜上、衝突デブリを決定するのに、
図8におけるkとlを、Bl=Bk
-1(上付き文字-1はゲートを逆方向に通ることを示す)というように選択できる。この場合、ゲートGd及びGeを超える順列の移動から生じるゲートGd’及びGe’の構成は、三つしか考えられない。
図10は、B1=Bk
-1を選択する一実施形態による、二つのビットで3ビットゲートが衝突する際に生成される一連のデブリゲートを例示するブロック図である。
【0079】
ステップ525では、二つの境界3ビットゲートGc及びGfが、それぞれ840組のゲートを有する6つの所定テーブルのうちの特定のテーブルからランダムに選択される。ブレイディングゲートBkが選択されたら、ゲートGc、Gd、Ge、及びGfを判定するため、まず事前に作成されたテーブルからランダムにゲートGc及びGfを選択し始める。このランダムな選択は、元ゲートの結果ゲートからのリバースエンジニアリングを防ぐ上で有利である。このようなテーブルは6つあり、それぞれに8!/(2!4!)=840の異なる種類の3ビットリバーシブルゲートが含まれている。これらのテーブルの目的は、可能性がある一連のゲート(Gc、Gd、Ge、Gf)を非同等のものに制限し、ゲートGdとGeの検索を容易にすることである。6つの所定テーブルのメンバーシップにゲートが従う条件を以下に示す。
図11は、一実施形態による、二つのビットで3ビットゲートが衝突する際のデブリゲートの生成に有用なテーブルを構築するための条件を例示するブロック図である。
【0080】
テーブル1からテーブル3は、全てのi,j=1~840に対してGci≠Gcj・gとなるように、ビットx2、x3、x4に作用するゲート{Gci}を含む。テーブル1の場合、gはビットx4に対する順列とビットx2及びx3に作用する2ビットゲートとの積である。テーブル2の場合、gはビットx3に対する順列とビットx2及びx4に作用する2ビットゲートとの積である。テーブル3の場合、gはビットx2に対する順列とビットx3及びx4に作用する2ビットゲートとの積である。テーブル4からテーブル6は、全てのi,j=1~840についてGfi≠g・Gfjとなるように、ビットx1、x2、x3に作用するゲート{Gfi}を含む。テーブル4の場合、gはビットx1に対する順列とビットx2及びx3に作用する2ビットゲートとの積である。テーブル5の場合、gはビットx2に対する順列とビットx1及びx3に作用する2ビットゲートとの積である。テーブル6の場合、gはビットx3に対する置換とビットx1及びx2に作用する2ビットゲートの積である。テーブルは任意の方法で生成できる。例えば、いくつかの実施形態では、テーブルはトライアル・アンド・エラーによって生成される。すなわち、全ての3ビットゲート(8!ゲート)を通過し、ゲート毎に2ビットゲート(4!=24の可能性あり)と1ビットゲート(2!=2の可能性あり)との積に等しいもの全てを排除することで生成される。そのため、全体としては、テーブルごとに8!×4!×2!=1,935,360ケースをチェックする必要がある。これは間違いなく既存のプロセッサで実行可能である(例えば、各テーブルで一時間もかからないであろう)。
【0081】
ブレイディングゲートタイプ選択と選択表の対応は以下の通りである。B0及びB1の場合、ゲートGcはテーブル1からランダムに選択され、ゲートGfはテーブル4からランダムに選択される。B2及びB3の場合、ゲートGcはテーブル2からランダムに選択され、ゲートGfはテーブル5からランダムに選択される。B4とB5の場合、ゲートGcはテーブル3からランダムに選択され、ゲートGfatはテーブル6からランダムに選択される。
【0082】
ステップ527では、下記数式(2)を解くため、残りの二つの3ビットゲートGd及びGeが選択される。
Ge・Gd=O=Bk・Gf
-1・Gb・Ga・Gc
-1・Bk
-1 (2)
なお、重なるビットが二つしかない積Ge・Gdは、Oで示されている4ビットオペレーターゲートに対応する。
図12は、一実施形態による、二つのビットで3ビットゲートが衝突する際にいくつかのデブリゲートGd及びGeを決定するために分解される4ビットオペレーターOを例示するブロック図である。ステップ527では、数式2の解が見つかるかどうかが判定される。見つからない場合、制御はステップ525に戻り、異なる二つの境界ゲートGc及びGfをランダムに選択し、残りのゲートGd及びGeについて解くためにステップ527の試みを繰り返す。解が見つかると、制御はステップ541に進む。ここでは多数対のゲートGd及びGeが見つかる事が多い。経験的に、2500の任意のゲートGa及びGbから始めて、1.25%に一つの(Gc、Gd、Ge、Gf)解があり、31.80%に二つから10の解がある。49.16%には、11から100の解があり、11.76%には101から1000の解がある。6.04%には1000を超える解がある。ゲージ対称性Gb・Ga=Gb・g・g
-1・Gaのため、Ga及びGbゲートの全ての(8!)2ペアをテストする必要があるわけではないことに気付いた。ここでは、gは、GaとGbが共有するビットに作用する2ビット順列と、Ga又はGbからの非共有ビットに作用する1ビット順列を含むゲートである。
【0083】
ステップ521から527のオペレーションを更に説明するために、
図13AのゲートGa及びGbについて考える。
図13Aは、一実施形態による、二つのビットで3ビットゲートGa及びGbが衝突する際の一連のデブリゲートGc、Gd、Ge及びGfを例示するブロック図である。ゲートGaからGfに対応する真理値表は、下付き文字でラベル付けされ、
図13Bに示されている。
図13Bは、一実施形態による、二つのビットで特定の3ビットゲートGa及びGbが衝突する際のデブリゲートGc、Gd、Ge、及びGfの一連の真理値表を例示する図である。
【0084】
ステップ541では、ここで説明するように、二つの共有ビット位置に基づいて、ステップ501からステップ521に入ったかどうかが判定される。入っている場合、衝突について解決がなされ、制御は上記のステップ551に進み、さらなる伝搬が必要かどうかを確認する。入ってない場合、制御は、以下に説明するステップ542に進む。
【0085】
ステップ501において、一つのビット位置のみが共有されると判定された場合、制御はステップ531以降に進み、二つの共有ビット位置を有するゲートについての上記の解を利用する。ステップ531では、第一ゲート(Ga)の前にスワップゲートS1が追加され、それにより二つのビットが第二ゲート(Gb)と共有される。スワップゲートは、値を変更せずに2ビットの位置を交換する2ビットゲートであり、1ビットの値又は位置を変更しない縮退3ビットゲートで実施可能である。逆スワップゲートS1-1は、ゲートGaの後であってゲートGbの前に追加される。なお、S1-1=S1である。結果のゲートは数式3aで与えられる。
Gb・Ga=Gb・S1-1・S1・Ga=Gb・S1-1・Ga’・S1
=Gb・S2・Ga’・S1 (3a)
ここで、Ga’はGaに基づくゲートであるが、スワップゲートS1の結果としてGbと重なる二つのビットを有する。Ga’はS1をゲートGaの前に移動することによって形成される。一つのスワップゲートは回路の内部に留まり、S2という名前が付けられている。もう一つは外側に移動し、S1という名前が付けられている。しかしながら、どちらも同じ2ビットをスワップする。Ga’は、ゲート定義でビットをスワップすることにより、Gaから取得できる。選択されたゲートについては、スワップ挿入を行う方法が4つあり、これらの方法は、どのビットがスワップされるか、どのようにスワップされるかに応じて用いられる。したがって、衝突を進めるには、合計で8つの方法があるということになる。
【0086】
図14は、一実施形態による、一つのビットで3ビットゲートが衝突する際にスワップゲートを導入するための8つの例示的な方法を示すブロック図である。図示の実施形態では、ゲートGaはビットx
1、x
2、x
3に作用し、ゲートGbはビットx
3、x
4、x
5に作用する。したがって、一つのビットx
3で衝突がある(ビットは互いに隣接している必要はない)。以下では、第一の方法のみが更に展開される。一つのゲートGaが選択され、その第一ビットがゲートGbの第二ビットとスワップされる場合であるが、当該プロセスは他の7つの方法にも容易に適用可能である。
図15は、一実施形態による、一つのビットで3ビットゲートが衝突する際に非自明なデブリゲートを生成する一連のステップを例示するブロック図である。
図14に示されている最初のオプションは、第一ビットと第四ビットをスワップするS1=S2を用いた図示例について、
図15に示されているステップ1の結果を生成する。
【0087】
ステップ533では、別の一対のスワップゲートS3及びS4=S3
-1が、Ga’と逆スワップゲートS2との間に追加される。二つのスワップゲートは、二つの衝突するビットをスワップ及びアンスワップする。その結果は下記数式3bで表される。
Gb・Ga = Gb・S2・S4・S3・Ga’・S1 (3b)
このステップは、
図15のステップ2として、例示された実施形態用に示されている。二つのうちの最初のS3はGa’とマージされてGa”を形成し、2番目のS4は逆スワップゲートS2とマージされてGpを形成する。
Gb・Ga = Gb・Gp・G
a”・S1 (3c)
where Ga”=S3・Ga’and Gp=S2 S4
結果には、それぞれが二つのビット位置を共有する三つのゲートGa”、Gp、Gbが含まれる。このステップは、
図15のステップ2として、例示された実施形態用に示されている。
【0088】
次に、制御はステップ521に移り、人工的に生成されたゲートGp及び元ゲートGbを、2ビット衝突について上述したように、4つのゲート及び二つのブレイディングゲートで置き換えて、下記数式4a及び4bを提供する。
Gb・Ga=Gb・Gp・Ga”・S1
=Gf・A・Gc・Ga”・S1 (4a)
where A=Bl・Ge・Gd・Bk (4b)
【0089】
このステップは、
図15のステップ4として、例示された実施形態用に示されている。
【0090】
しかしながら、今回は、ステップ527で解Gf・A・Gc Gfが見つかり、制御がステップ541に進むと、テストに対する答えは「ノー」であり、元ゲートGa及びGbは二つの場所を共有していなかった。そして、制御はステップ542に進む。
【0091】
ステップ542では、2ビット衝突が、元の1ビット衝突によって生成された最初の衝突であるかどうかが判定される。例えばGp及びGbである。最初の衝突であれば、制御はステップ543に進む。
【0092】
ステップ543において、最初に解決された2ビット衝突から生じた第一ゲートGcは、スワップされた元ゲートGa’とスワップゲートS3とのマージから残ったゲートGa’’と衝突させられる。その結果は、二つのビット衝突について上記したように、4つのゲートと二つのブレイディングゲートとなり、下記数式5aと5bが提供される。ゲートGaによって導入された情報の最も深い侵入を反映するため、便宜上、外側のゲートはGf’の代わりにGa’’’と呼ぶ。
Gb・Ga=Gf・A・Gc・Ga”・S1
=Gf・A・Ga’”・Bl’・Ge’・Gd’・Bk’・Gc’・S1
=Gf・A・Ga’”・B・Gc’・S1 (5a)
where B=Bl’・Ge’・Gd’・Bk’ (5b)
【0093】
このステップは、
図15のステップ5として、例示された実施形態用に示されている。
【0094】
ステップ542において、2ビット衝突が元の1ビット衝突によって生成された最初の2ビット衝突ではないと判定された場合、制御はステップ545に移り、ステップ543からの結果式5aを処理する。
【0095】
ステップ545では、衝突が、ステップ543の衝突から生じる外側ゲートGfに対して下記数式6のとおり影響を与えるまで、残りのスワップゲートS1が、ゲートA・Ga’’’・B・Gc’と衝突する。2ビットスワップゲートS1と3ビットゲートGc’との衝突については、Gc’と2ビット重なる縮退3ビットゲートG1として扱うことができるので、2ビット衝突方法を用いることが可能である。この種の衝突の場合、シンプルな結果となることが分かった。スワップゲートS1は3ビットゲートを「通過」し、文字通りビットラインをスワップする。スワップゲートS1は、ゲートGfに到達するまで、ゲートを変えながら、通過する。構造上、ゲートS1とGfは2本のビット線を共有している。したがって、S1はGfに吸収可能で、その表記を、Gfのように同じビット線に作用するGf’とする。
Gb・Ga=Gf’・A’・Ga’’’’・B’・Gc’’ (6)
なお、両順列A並びにB及びA’並びにB’について、二つの3ビットゲートに関する構成が可能性的に三つある(例示された実施形態用に、
図15において挿入として示されている)。これは2ビット衝突の実施中になされたランダムな選択によって決まる。このプロセスの最終結果は、元ゲートGa及びGbに相当する7つの3ビットゲートのシーケンスを確立するものである。
【0096】
次に、制御は上記のステップ551に進み、更なる伝搬が必要かどうかを確認する。
【0097】
実施形態によっては、暗号化データに作用する難読化コードは、難読化される必要のないプログラム全体のうちの一部である。これらの実施形態のいくつかでは、難読化コードは、難読化されていない命令の中に埋め込まれる。
【0098】
多重暗号化
上記のステップ309では、ゲートが衝突する前に、写像fを表すゲート全てにわたって、復号化及び暗号化ゲートが断続的又は定期的に追加される。そのステップとその結果の難読化を、3ビットゲートを用いて説明する。暗号化がおよそn((n)として表記)のゲート(通常、ゲートGaの場合、ビットi
a、j
a、k
aに作用)で行われる場合、次の方法がよい。
図16に示すように、写像fを積f=f
p・f
p-1・・・f
2・fとして分解する。
図16及び
図17は、一実施形態による、ゲートを衝突させることによってプログラムをさらに難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。暗号化を定期的に導入する場合、fにn
gゲートがあるときは、r=1~p-1の写像f
rそれぞれがn
g/pゲートを持つように選択される。ここでf
pは残りのゲート全てを含む。次に、下記の数式7で与えられるように、定期的な暗号化を表す。
E’・f・E
-1=(E’・f
p・E
p-1
-1)・・・(E
r・f
r・E
r-1
-1)・・・(E
2・f
2・E
1
-1)・(E
1・f
1・E
-1) (7)
図17に示すように、r=1~p-1のそれぞれについて、異なる暗号化/復号化順列E
r、E
r
-1を自由に選択することができる。
【0099】
なお、各ブロック(Er・fr・Er-1
-1)は、それ自体が、データの復号化、計算、暗号化を行う計算例である。これらのブロックが難読化されると、それらの積も難読化される。各ブロックが難読化されるということは、各ブロックの出力を見ても、暗号化/復号化の部分なのか計算結果frなのか推測できないという事である。
【0100】
E
r-1
-1とE
rそれぞれにanゲートが含まれているブロック(E
r・f
r・E
r-1
-1)を難読化する方法はいくつかある。ここで、aは定数O(1)であり(a=3又は4であれば、多くのセキュリティ目的のために十分)、f
rはbn~n
g/pゲートを含むと想定される。
図18は、一実施形態による、難読化プログラムを生成するための一連のステップを三例示すブロック図である。この
図18は、数式E
r・f
r・E
r-1
-1を難読化回路C
rに統合するステップを示している。(i)では、E
r-1
-1とf
rをブロックA
rにマージし、E
rからのゲートをブロックB
rとしてブロックA
rを通って動かす(
図3のステップ313に対応)。(ii)では、f
rとE
rをブロックA
rにマージし、E
r-1
-1からのゲートをブロックB
rとしてブロックA
rを通って動かす(
図3のステップ311に対応)。(iii)では、E
rからのゲートを、ブロックB
rとして、A
rとしてのf
rを通って移動させ、それにより統合ブロックA
r’が生じ、次にE
r-1
-1からのゲートをブロックB
r’としてブロックA
r’を通して移動させる(
図3におけるステップ311と313の両方に対応)。
【0101】
図23(a)から
図23(c)を参照して、スキーム(i)を詳細に説明する。
図23(a)から
図23(c)は、スキーム(i)の一実施形態による、写像コードへの暗号化/復号化ゲートの移動距離を例示するブロック図である。この説明を他のスキームにまで広げることは難しいことではない。
【0102】
スキーム(i)に従うことで、システムは、anゲートがErにあり、(a+b)nゲートが(fr・Er-1
-1)にあるEr・(fr・Er-1
-1)として認識可能である。難読化は、Ar側と呼ばれる(fr・Er-1
-1)とBr側と呼ばれるErとの統合によってなされる。Arのゲート数又は長さは、下記数式8aで与えられる。
l(Ar)=(a+b)n. (8a)
【0103】
この例では、
図23(a)に示すように、i=1、2、・・・anのB
r内ゲートは、Gb
rとされ、それぞれ下記のようにA
rに入れられることとなる。まず、A
rとB
rとの間のインターフェースに最も近いB
r内ゲートをとる。これは、ループの最初のステップでは、ゲートGb
1であり、A
r内へ、A
r回路の先頭(インターフェースを間にしてA
rにおける反対側)に至るまで(例えば、移動がA
rの第一ゲートに影響を及ぼすまで)押される。結果(全ての衝突の後)は、一方に回路A
r
(1)、他方にゲートGb
2~Gb
anを含む回路B
r
(1)となる。ゲートGb
1がA
rにおける反対側に押されるとともに、A
r側のサイズl(A
r)をA
r
(1)のサイズl(A
r
(1))に増加するゲート衝突が起こる。
【0104】
長さの増加l(Ar
(1))-l(Ar)は下記のように推定される。上記において導出された衝突のない侵入深度はl0=n/9なので、
【0105】
【0106】
の衝突となる。衝突ごとに(δ-1)のゲートが回路に追加される。ここで、1ビットの衝突ではδ=6であり、2ビットの衝突ではδ=3である(二つの衝突ゲートが一つのゲートにマージされることから、3ビットの衝突ではδ=0となる)。上記において導出されたように、p1はp2よりn次数の係数だけ大きく、p2もp3よりもnの係数だけ大きくなることから、1ビットの衝突が可能性としては高い。したがって、十分に大きいnの場合、Ar側の長さは下記数式8bで与えられるようにインクリメントされる。
【0107】
【0108】
Kが回路長l(Ar)よりも大きい値に事前設定されている場合、衝突ゲートは回路全体を移動するため、回路の全長はl(Ar
(1))まで増加する。これは、全長l(Ar
(m))がm番目のゲートのK以上になるまで、他のゲートでも繰り返される。次に、残りの移動されていないゲートは固定長Kだけ移動される。この手順であれば、回路の長さがレジスタN(=n)のサイズと共に指数関数的に増加しないことが確実である。
【0109】
Gb
1を伝搬させた後、ゲートGb
2をとりA
r
(1)に押し入れるのだが、Gb
1のときのように最後まで行かせることはない。ここで、
図23(b)に示されるように、A
r
(1)の端から
【0110】
【0111】
という距離で止める。このようにして、ゲートGb2はAr
(1)に押し入れられ、最初のステップでゲートGb1がAr内で押されたのと同じ数のゲートを通る。結果は、下記数式8cを満たす長さの回路Ar
(2)である。
【0112】
【0113】
プロセスは、Bの全てのゲートに処理を行うよう繰り返す。ゲートGbiを回路Ar
(i-1)に押し入れ、その端から距離(i-1)Δlで止め、下記数式8dを満たす長さの回路Ar
(i)を得る。
【0114】
【0115】
図23(c)に示すように、ステップ313の手順の最後に、B
r内の全てのanゲートをA
r側に押し終わり、二つの回路を回路C
rに統合させる。統合回路の最終的な長さは、数式8dの反復から得られ、下記数式8eとなる。
l(A
r
(an))=l(A
r)+an Δl (8e)
B
r側のゲートのリストは、A側に流れ込んでいる。言い換えると、l(B
r
(an))=0なので、統合回路Crの全長は数式8eで与えられる。上記で定義したようにA
rの長さに(a+b)nを代入し、式8b又は8c又は8dからΔlの定義を代入すると、現在のセグメントの統合回路C
rの長さが下記数式8fとして得られる。
l(C
r)=(a+b){1+9a(δ-1)}n (8f)
衝突Gbの最後のストップの位置が互いにΔl=Kほど離れているため、B
rのゲートは統合回路Cに沿って均一に散在していることに注目された。
【0116】
図3のループ311から315において、上記統合は、全てのセグメントr=1~pに対して行われる。この記数法は、E
0
-1=E
-1及びE
p=E’であることに注意することで、最初の復号化と最後の暗号化に広げられる。これで、E’・f・E
-1と同等の完全な難読化回路の長さを計算できる。ここで分かるのは、(E
r・f
r・E
r-1
-1)ブロックのそれぞれが、数式8fで与えられる長さの難読化回路Crを生成するということである。fにはn
gゲートがあり、各f
rにはbn~n
g/pゲートが含まれていると想定されていることを想起されたい。したがって、
【0117】
【0118】
のブロックがある。そのため、全難読化回路の長さl(obfuscate)は、式8fに係数
【0119】
【0120】
を掛けて与えられるCrの長さである。
【0121】
元回路の暗号化部分と復号化部分のサイズはanで、元写像fのサイズはngであるため、元回路の全長は2an+ngである。回路の長さを拡張した拡張係数Zは、下記数式9aで与えられる。
【0122】
【0123】
ng>>2anと仮定すると、この後者の項は式(2an+ng)で無視できるため、残りの項ngは除外される。したがって、数式9aは数式9bに縮小する。
【0124】
【0125】
a~3、b~1、δ-1~5の代表的な値の場合、拡張係数はz~544である。したがって、この実施例では、E’・f・E-1の単一の区別不可能な3ビット可逆ゲートグループへの統合は、約500のオーバーヘッド係数を招くこととなる。このオーバーヘッドは高いが、近年提案されている他の準同型の方法よりもはるかに小さい。多くの重要なアプリケーションでは、オーバーヘッド係数500は、妥当で許容範囲である。
【0126】
統合
上記ステップ317では、複数の3ビットゲートが、少なくとも一つのkビットゲートに組み合わされる(k>3)。上記ゲート衝突ルールを用いたあと、複数の3ビットゲートを一又は複数のより大きなkビットゲートのそれぞれに組み合わせることにより、回路をさらに難読化できる。kビットラインの集合に作用するいくつかの3ビットゲートの積は効率的に決定でき、可能性がある2k入力状態に対する置換オペレーションを生じさせる。しかしながら、逆問題、つまり2k入力に対する順列を、一連のkラインに作用する3ビットゲートにより生成されたより小さい順列の積に因数分解することは、難しい問題である。本明細書では、3ビットゲートを乗算して、内部コンポーネントの特定が難しいkビットゲートを形成するプロセス例を「ゲート統合」のプロセスと呼ぶ。
【0127】
統合される複数の3ビットゲートの一群は、さまざまな方法で収集可能である。一つの例は、アクリーションのものであり、次のように行われる。まず、回路のどこかで3ビットゲートを選択し、ゲートのクラスターを開始(又はシード値を設定)する。次に、このゲートを使用して、少なくとも1ビットを共有する最初の隣接データを左又は右において探す。この第二ゲートはクラスターに追加される。クラスター内の二つのゲートで使用されるビットラインの数は最大で五つである。これらは、第一ゲートの最初の三つのビットラインと、第一ゲートでは使用されないが第二ゲートで使用される最大二つのビットラインである。クラスターを成長させるプロセス(アクリーション)は、クラスター内に既にあるゲートの左側又は右側にある3番目のゲートであって、少なくとも1ビットを共有しているものを探すことによって続行される。3番目のゲートが追加されたクラスターは、最大7本のビットラインに広がっている。このプロセスは、クラスターがk個のビットラインにまたがるまで繰り返される。本統合プロセスの例を
図19に示す。
【0128】
図19は、一実施形態による、プログラムをさらに難読化するための、より多くのビットの複数ゲートを生成するための3ビットゲートの統合を例示するブロック図である。この
図19は、15個の隣接する3ビットゲートから三つの隣接するゲートA、B、Cへの統合を示している。Aは9ビットゲートであり、BとCは8ビットゲートである。kビットゲートクラスター内の3ビットゲートの最小数はh
min=(k-1)/2である。クラスター内の全ての基本3ビットゲートの積は、kビットの2
k状態の空間に作用する順列Pである。この積は、z=0~2
k-1の2
kナンバーズリストP(z)として計算及び格納可能である。
【0129】
順列Pを基本3ビット順列の積へ戻す又は因数分解することは難しい問題である。乗算してkビット順列Pを生成する3ビットゲートについて、全てのあり得る組み合わせを徹底的に検索するには、少なくとも下記数式10で与えられるS数のステップが必要となる。
【0130】
【0131】
kが奇数の場合、例えばk=11ビットの場合、例えば最大5ビットのメモリを使用して、それぞれ最大11ビットの211ワードのリストで順列Pを格納出来る(なお、3ビットゲートを統合することには、複数ゲートの前処理されたアクションをサーバーに送り、複数の3ビットゲートの積の結果をメモリに格納するという追加利点がある)。ただし、順列Pを因数分解するには、むしろ重い計算が必要となる。順列を元の3ビットコンポーネントに徹底的に因数分解するには、次数1032のステップが必要である。k=21ビットの場合、7メガバイト未満のメモリを使用して順列Pを格納できるが、それでもPを因数分解する基本3ビットゲートを徹底的に検索するには、1071ものステップが必要となる。
【0132】
なお、2k状態にあるkビットゲート又は順列は、3ビット演算の積として異なる因数分解を持つことが出来る。因数分解を見つけたとしても、難読化の反転に進歩があったとは言えない。上記スキームで実際に使用されたもの以外の順列を見つけた場合、実際には計算をさらに難読化してしまっているのである。
【0133】
乗算例
二つの数値xとyを乗算し、結果としてx・yを生成する写像fについて考える。この写像を可逆ゲートで実施するには、補助ビットを使用する必要がある。
図20は、一実施形態による、2ビット乗算写像fのための3ビットゲートのシーケンスを例示するブロック図である。2ビット乗算回路は、6つのトフォリT、4つのR、▲Rバー▼3ビット可逆ゲートを活用する制御リップル加算器に基づいている。挿入図は、R及び▲Rバー▼ゲートのCNOT及びトフォリゲートへの分解を示している。
図20は5つの補助ビットを採用している。x及びyを入力ととると、補助ビットはゼロに設定され、回路は出力としてx、x・y、及びゼロに設定された一つの補助ビットを出す。
【0134】
データと計算を暗号化するために、暗号化写像EとE’には、それぞれ約30個の3ビット可逆ゲートが含まれている。写像fは部分写像f1、f2、及びf3の三つのブロックに分解され、それぞれがfを定義する回路のサブセットであり、連続する部分写像の各ペアの間に暗号化及び復号化ブロックを挿入する。すなわち、E1及びE1
-1をf1とf2の間に、E2とE2
-1をf
2とf
3の間に挿入する。
図21は、一実施形態による、
図20の写像fへの中間暗号化及び復号化ブロックの挿入を例示するブロック図である。
【0135】
次に、
図22におけるブロックの統合に進む。最後のステップは、衝突の反転を実行不可能にするのに十分な大きさのkを用いて、隣接する3ビットゲートのセットを統合してkビットゲートを生成することを含む。
図22は、一実施形態による、
図21の複数の中間暗号化による2ビット乗算写像fの難読化のステップを例示するブロック図である。ブロックA
1=f
1・E
-1とB
1=E
1を統合して、回路C
1を生成する。同様に、A
2=f
2・E
1
-1とB
2=E
2を統合し、そしてA
3=f
3・E
2
-1とB
3=E1を統合して、それぞれ回路C2及びC3を生成する。回路C3・C2・C1=Pを組み合わせることで、難読化回路が生成される。
2.2制御ゲート
【0136】
実施形態によっては、q-1制御ビットを有するCNOTゲートなどの制御ゲートが使用される。ここではq∈{1、2、3、…}である。制御ゲートは、ここで用いられているように、ヘッドビットとも呼ばれる単一のターゲットビットの値又は単にゲートのヘッドが、テールビットとも呼ばれる0個以上の制御ビットの値の写像であるゲートを意味しており、ゲートのテールと総称される。テールビットは、制御ビットへのバイナリ入力に基づいてヘッドビットに適用されるロジックを示す。テールビットへのバイナリ入力は変えられることがなく、単に次のゲートに送られるだけである。制御qビットゲートの使用には、一連の衝突ルールが単純になるという利点がある。一連の可逆3ビットゲートで表すことができる式は、いずれも制御ゲートのみで構成される一連のゲートとして再構成可能である。したがって、
図3の全体的な方法300のうちのステップ301では、実施形態によっては、各ソース/オブジェクトコード命令が、一又は複数の制御ゲートにテーブルで関連付けられる。制御ゲートに関して言えば、最も基本的な写像がどのように書けるかは、よく知られている。
【0137】
図24(a)から
図24(c)は、一実施形態による、一般的な可逆3ビットゲートの代わりに使用される制御qビットゲートを例示するブロック図である。単一のターゲットビットは、垂直十字が内側にある円で示される。制御ビットは、「真」タイプのロジックのもの(黒丸)又は「偽」タイプのロジックのもの(白丸)となりえる。偽タイプのロジックは、対応するビットの値が0の場合にのみ制御がアクティブになることを示す。最も単純な制御ゲートはNOTゲート(
図24(a)を参照)であり、一つのビットのみに作用する(x
1→x
1’)、つまり、ターゲットビットの状態を反転する。ここで、アポストロフィはビット値のネゲートを示している。NOTゲートには制御ビットがないことに注目されたい。CNOTは、
図24(b)に示されるように、一つの制御ビット及び一つのターゲットビットを有する制御ゲートである。「真」タイプのロジックでは、x
1→x
1(出力は入力と同じで、これは全てのテールビットに当てはまる)及びx
2→x
1▲直和▼x
2である。一方「偽」タイプのロジックでは、全てのテールビットにおいてそうであるようにx1→x1及びx
2→x
1’▲直和▼x
2である。ここで「▲直和▼」という記載は、排他的OR(XOR)演算を示している。式x
1▲直和▼x
2は、x
1とx
2の両方でなく、そのいずれかが真の場合に、真となる。トフォリゲートは、テールに二つの制御ビット、そしてヘッドに一つのターゲットビットがある。これには、
図24(c)に示す4タイプがある。例えば、一つのタイプでは、両制御ビットが「真」タイプのロジックのものである場合、全てのテールビットがそうであるように、x
1→x
1及びx
2→x
2となり、そしてx
3→x
3▲直和▼x
1・x
2、つまりx
3が、x
1とx
2の積で排他的論理和をとられる。いずれかの制御ビットが偽タイプのロジックである場合、そのビットの値は排他的論理和及び乗算演算でネゲートされる。なお、可逆制御ゲートはXOR写像を用いて新しいヘッドビット値を定義する。他の論理演算については、すべて一連のXOR制御ゲートにおけるゲートの組み合わせによって得られる。
【0138】
図24Dは、一実施形態による、統合又はゲート衝突から生じるゲートなどの6ビット制御ゲートを例示するブロック図である。図示の例では、6ビット制御ゲートは5つのテールビットを有している(三つの「真」と二つの「偽」)。ヘッドビットで実行されたロジックは、ヘッドビットに入力された値とテールビットに到達した値の積のXORであり、白丸で示されるようにネゲートされている。以降、このセクション2.2では、文脈から明確でない限り、制御対象タイプのゲートを単にゲートと呼ぶ。
図25は、一実施形態による、一般的な3ビットゲートの代わりに使用される制御ゲートを例示する略式ブロック図である。この
図25は、制御ゲートについて簡略化した図式表現を示しており、テールのすべての制御ビットをボックスに置き換えてある。場合によっては、一又は複数の制御ビットがボックスから取り出され、ゲート衝突を差別化出来るよう明確に示される。
【0139】
各制御ゲートgは、ヘッド(制御されたビットアドレス)とテールを含むリストで分類可能である。これは、関連する真又は偽のロジックを持つビットアドレスのリストであって、簡略化のために以降ビーズと呼ばれる。各ビーズbは、制御ビットアドレスi(b)を含むペア(i(b)、σ(b))に対応し、加えて、制御がネゲートされているか(σ(b)=1、白丸に対応)否か(σ(b)=0、黒丸に対応)に対応している。例えば、[3、[(1、0)、(2、0)]]は、ネゲートなくビット1と2によって制御されるビット3に作用するトフォリゲートである(x1→x1、x2→x2、及びx3→x3▲直和▼x1・x2)。別の例において、[2、[(1、1)]]は、ビット1が偽の場合にビット2に作用するCNOTであるため、ビット1の値はネゲートされる(x1→x1、x2→x2▲直和▼x1’)。ビット1のNOTゲートは、シンプルに[1、[]]として示され、テールが空、つまりテールビットがない。ゲートgのヘッドとテールを示すためにh(g)とt(g)を採用しており、(again)(i(b)、σ(b))がビットアドレスとビーズ制御タイプb∈t(g)をそれぞれ示している。制御ビットにゲートgの論理関数は下記数式11のように書き込むことができる。
【0140】
【0141】
衝突
図26は、一実施形態による、
図3の方法のステップで使用されるような、第二制御qビットゲートを通過して第1制御qビットゲートを伝搬する方法を例示するフロー図である。量子回路を最適化するときに制御ゲートを組み合わせる先のルールと異なり、方法2600で実施されるこれらのルールは、すべての制御ビットが真のタイプのロジックのものである必要はない。この方法は、例えば、
図3の方法300のステップ311又はステップ313、あるいはその両方において、互いに通過して移動する二つの隣接するゲートGa及びGbから始まる。
【0142】
図27(a)から
図27(d)は、一実施形態による、制御ゲートと共有ターゲット又は制御ビットとの衝突を例示するブロック図である。
図28(a)及び
図28(b)は、一実施形態による、制御ゲートと異なる非重複制御ビットとの衝突を例示するブロック図である。
図29(a)から
図29(d)は、一実施形態による、あるゲートのヘッドの1ビットが他のゲートのテールの1ビットと重なる制御ゲートの衝突を例示するブロック図である。これらのタイプの衝突はワンヘッド衝突と呼ばれる。
図30(a)から
図30(d)は、一実施形態による、両ゲートのヘッドの1ビットが他のゲートのテールの1ビットと重なる制御ゲートの衝突を例示するブロック図である。これらのタイプの衝突はツーヘッド衝突と呼ばれる。図中のXとYは、衝突に関与しない二つの衝突ゲートGa及びGbの制御ビットに対するブール関数を表している。これらは、他のゲートの制御ビットと重複しない制御ビットである。制御ビットのみがその値を変更できることを想起されたい。
【0143】
ステップ2601において、二つのゲートGa及びGbが同一であるか、すなわち、同じビット及び同じターゲットビットに作用する同じテールを有するかどうかが判定される。これを
図27(a)に示す。なお、両テールにXの表記が付してあり、これは、テールが同一であることを示している。これは、他の衝突によって生成されたデブリゲートの結果として発生する可能性がある。論理的には、これにより常に第二ゲートが第一ゲートのアクションを取り消す結果となり、組み合わせの最終結果はアクションなしということになる。したがって、ステップ2601で二つのゲートが同一であると判定された場合、ステップ2603で、
図27(a)に示すように、両ゲートが回路から除かれる。
図27(a)の例のように、このゲート数の削減をもたらすタイプの衝突は、簡略化と呼ばれる。次に、制御はステップ2651に進む。
【0144】
実施形態によっては、ステップ2601は、同じヘッドビット及び一つのテールビットを除いて同一であるテールビットを有する隣接ゲートに関して、簡略化のための一又は複数の他の条件が発生するかどうかを判定すること、を含む。
図27(b)、
図27(c)、及び
図27(d)には、このような状況が示されている。
図27(b)及び
図27(d)は、第一ゲートGaが、真のロジックタイプ(
図27(b))又は偽のロジックタイプ(
図27(d))の追加テールビットを有していることを除き、第二ゲートGbと同一であることを示している。どちらの場合でも、衝突(単純化)ルールは、二つのゲートGa及びGbが同じヘッドビットと同じ共通テールビット(X)を持つ一つの単純化されたゲートGsに置き換えられるが、第一ゲートGaの追加ビットは、反対のロジックタイプとしてGsのテールに含まれる、というものである。
図27(c)は、二つのゲートGa及びGbが、一つのテールビットにおけるロジックタイプを除いて同じであることを示している。この状況では、衝突(簡略化)ルールは、二つのゲートGa及びGbが、同じヘッドビットと同じ共通テールビット(X)を持っているが他のテールビットを持たない単一の簡略化されたゲートGsに置き換えられる、というものである。元の二つのゲートにおける相反するロジックタイプのテールビットは、簡略化されたゲートGsのテールから除かれる。
【0145】
ステップ2651では、以下に詳細に説明するように、全ての移動されるゲートについて、結果ゲートが、隣接セクション内に向かって、命令リストの十分なポイント、例えばJ又はKのゲートを貫通したかどうかが判定される。そうでない場合、次の第一ゲートGa及び第二ゲートGbが選択され、制御はステップ2601に戻る。また、十分なゲートが十分に貫通している場合、制御はステップ2653に進み、実施形態によっては、他の簡略化のため、結果ゲートシーケンス(言い換えると命令リスト又は「回路」)を回る。次にプロセスは終了し、制御は
図3の方法300のステップ313又は315に戻る。
【0146】
ステップ2601において、二つのゲートg1及びg2(例えば、Ga及びGb)が同一でないと判定された場合、制御はステップ2611に進む。ステップ2611では、第一ターゲットGaのターゲットビットと共有される第二ゲートGbの制御ビットがあるかどうかが判定される。このような状況は、
図29(b)と
図29(d)に示されており、ここでは少なくともテールでのワンヘッド衝突が表されている。また、
図30(a)、
図30(b)、
図30(c)、
図30でも示されており、ここではテールでのツーヘッド衝突が表されている。あると判定された場合、次に、ステップ2613で、第二ゲートのターゲットビットと共有される第一ゲートGaの制御ビットがあるかどうかが判定される。ないと判定された場合、
図29(b)及び
図29(d)のように、テールでのワンヘッド衝突のみなので、制御はステップ2621に進む。
【0147】
ステップ2621では、第一ゲートのヘッドとのテールでのワンヘッド衝突のルールを用いて、ゲートが衝突する。これにより、衝突テールビットにおける真タイプのロジック(黒丸)については
図29(b)に示すように、また、衝突テールビットにおける偽タイプのロジックについては
図29(d)に示すように、一つのデブリゲートGcが生成される。いずれの場合でも、衝突ルールは、数式11で表されるロジックに関し、衝突ビットを除いた結合テールと第二ゲートGbのヘッドとをデブリゲートGcが有していることを示す。ステップ2641では、元の二つのゲートGa及びGbが、Gb、Gc、Gaの順の三つのゲートに置き換えられる(置換される)。次に、制御は、上記のステップ2651以降に進む。結果的に、Gb、Gc、Gaの3ゲートオーダーとなる。
【0148】
ステップ2613において、第二ゲートGbのターゲットビットと共有される第一ゲートGaの制御ビットがあると判定された場合、テールでツーヘッド衝突がある。そのようなツーヘッド衝突の例としては、
図30(a)、
図30(b)、
図30(c)及び
図30(d)に示すようなものがある。制御はステップ2615に移り、そこでツーヘッド衝突のルールを用いてゲートが衝突する。これにより、両衝突テールビットにおける真のタイプのロジック(黒丸)については
図30(a)に示すように、衝突テールビットにおける真のタイプのロジックと偽のタイプのロジックについては
図30(b)に示されているように、衝突テールビットにおける偽のタイプのロジックと真のタイプのロジックについては
図30(c)に示されているように、両衝突テールビットにおける偽のタイプのロジック(白丸)については
図30(d)に示すように、二つのデブリゲートGc及びGdが生成される。どの場合にも、衝突ルールは、式11で表される制御ゲートロジックに関し、1)デブリゲートGcが、第一ゲートGaのヘッドビットと、第一ゲートGaのテール及び第二ゲートGbの非衝突テールビットを組み合わせたテールビットとを有する、又は2)デブリゲートGdが、第二ゲートGbのヘッドビットと、第二ゲートGbのテール及び第一ゲートGaの非衝突テールビットを組み合わせたテールビットとを有する、と示す。
【0149】
ステップ2617では、元の二つのゲートGa及びGbが、Gb、Gc、Gd、Gaの順の4つのゲートに置き換えられる(置換される)。次に、制御は、上述のステップ2651以降に進む。
【0150】
ステップ2611で、第一ゲートGaのターゲットビットと共有される第二ゲートGbの制御ビットはないと判定された場合、制御はステップ2631に進む。このような状況は、テールとヘッドとの衝突がない場合を表す
図28(a)及び
図28(b)と、テールとの衝突が多くともワンヘッド衝突である場合を表す
図29(a)及び
図29(c)とに示されている。その場合、制御はステップ2631に進む。
【0151】
ステップ2631では、第一ゲートGaのいずれかの制御ビットが第二ゲートGbのターゲットビットと共有されるかどうかが判定される。共有されない場合、ヘッドとテールの衝突はない。ゲートは可換であり、制御はステップ2633に進む。この状況は
図28(a)及び
図28(b)に示されている。ステップ2633では、二つのゲートが可換であるため、第一ゲートは第二ゲートを越えて移動する。次に、制御は上述したステップ2651以降に進む。
【0152】
ステップ2631で、第一ゲートGaのいずれかの制御ビットが第二ゲートGbのターゲットビットと共有されると判定された場合、制御はステップ2635に移る。この状況では、
図29(a)と
図29(c)に示すように、第二ゲートGbの第一ゲートGaのテールとのワンヘッド衝突が起こる。ステップ2635では、第二ゲートGbのヘッドとのテールでのワンヘッド衝突のルールを用いて、ゲートが衝突する。これにより、衝突テールビットにおける真のタイプのロジック(黒丸)については
図29(a)に示すように、衝突テールビットにおける偽のタイプのロジックについては
図29(c)に示すように、一つのデブリゲートGcが生成される。いずれの場合でも、衝突ルールは、数式11で表されるロジックに関し、衝突ビットを除いた結合テールと第一ゲートGaのヘッドとをデブリゲートGcが有していることを示す。
【0153】
ステップ2641では、元の二つのゲートGa及びGbは、Gb、Gc、Gaの順の三つのゲートに置き換えられる(置換される)。次に、制御は、上述のステップ2651以降に進む。結果的にGb、Gc、Gaの3ゲートオーダーとなる。
【0154】
上記の衝突ルールは、数学的に次のように表すことができる。tXとtYを、ゲートGa及びGbの衝突に関与しないブール関数X及びYを構成する一連のテールビーズとして定義する。これらは、下記数式12aと12bで表すことができる。
【0155】
【0156】
積は下記数式13のように書き表すことが出来る。
【0157】
【0158】
しかしながら、この式は、矛盾が含まれている場合、つまり、ビーズb1、b2∈tX∪tYがあり、i(b1)=i(b2)(同じビットライン)であるがσ(b1)≠σ(b2)(逆ネゲート)である場合、簡略化できる。この場合、タイプx’xの矛盾があり、これは常に0(偽)となる。したがって、数式14のようにXYを書き換えることができる。
【0159】
【0160】
矛盾が発生するケースをチェックすることにより、衝突を作り出す際に、テールにXYがあるゲートを削除出来る。これらのケースでは、デブリゲートが消えるからである。
【0161】
別の単純化は、二つのゲートを一つに結合できる場合である。h(Ga)=h(Gb)(ヘッドが同じビットライン)の二つのゲートであって、テールt(Ga)及びt(Gb)を有するものについて考える。t(Ga、Gb)≡t(Ga)∩t(Gb)が、二つのテールの交点を表し、t(Ga、Gb)≡(t(Ga)∪t(Gb))¥(t(Ga)∩t(Gb))が、二つのテールの交点の外の残りのビットを表すものとする。この場合、以下の簡略化が可能である。
【0162】
|t(Ga、Gb)|=0の場合、二つのゲートはすべて同じビーズを持っているため、同一性が増加する(同じ制御ラインを持つすべての制御されたゲートは、縮退又は自己逆元である)。この場合、二つのゲートは回路から削除可能である。この簡略化は、
図27(a)に示され、ステップ2601及び2603で実施される。
【0163】
|t(Ga、Gb)|=1の場合、二つのゲートは、一つを除いてすべて同じビーズを有する。したがって、一つのゲートに現れて他のゲートには現れないビーズb*∈t(Ga、Gb)は一つだけである。これら二つのゲートは、下記数式15から数式17を用いて、一つに組み合わせることができる。
【0164】
【0165】
つまり、結合ゲートのテールには、共通のビーズに加えて、同じビットアドレスだがビーズb
*のσをネゲートしたビーズb$=(i(b
*)、σ’(b
*))が含まれる。この簡略化は、
図27(b)及び
図27(d)に示され、ステップ2653、加えて一部の実施形態では、ステップ2601及び2603で実施される。
【0166】
|t(Ga、Gb)|=2であり、2つのビーズb1、b2∈t(g1、g2)が異なるゲートにあり、i(b1)=i(b2)であった場合、2つのゲートを組み合わせることができる。なお、差集合には2つのビーズが含まれているため、これらのビーズが同じビットラインに作用する場合は、σ(b1)≠σ(b2)を有してなければならない(そうでなければ、それらは同じビーズとなり、差集合には含まれない)。これら二つのゲートは、下記数式18から数式20を用いて、一つに結合できる。
【0167】
【0168】
ここではi(b
1)=i(b
2)及びσ(b
1)≠σ(b
2)なので、x
i(b1)▲直和▼x
i(b2)=0及びσ(b
1)▲直和▼σ(b
1)=1となることが分かる.したがって、2つのビーズb
1及びb
2を取り除くことで、これら2つのゲートは1つのゲートに結合できる。シングルゲートはより短いテールt(Ga、Gb)を有する。この簡略化は
図27(c)に示されている。
【0169】
いくつかの衝突は、デブリゲートを生成し、ここにはより長いテールを持つデブリゲートも含まれる。もちろん、サイズが>3のデブリゲートは、サイズが3ビット以下の制御qビットゲートとして再構成可能である。二つのゲートの衝突について考える。一つはq1ビットを有し、もう一つはq2ビットを有している。二つのゲートが可換でない場合、それらの衝突によりデブリが残る。デブリを構成するゲートのビット数の上限は知ることができる。
【0170】
最初に、1つのゲート(Ga)のヘッド又はターゲットビットが別のゲート(Gb)の制御ビットに当たるが、その逆はないという場合について考える。この場合、デブリには明らかにGa(1ビット)のヘッドとブール関数XYのゲートとがあり、Gaのヘッドが当たったGbの制御ビットは除かれる。XYにおける最大ビット数はq
1-1+q
2-2である。したがって、デブリにおける最大ビット数はq
max=q
1+q
2-2である。これは、テールでのワンヘッド衝突であり、
図29(a)から
図29(d)に様々なqビット制御ゲートについて示されている。
【0171】
衝突が、1つのゲートのヘッドが他のゲートの制御ビットに当たるようなもの、又はその逆のようなものであれば、デブリにおけるビット数は、ブール関数XYのビット数の合計、すなわちq1-2+q2-2(各ゲートから衝突に関係する2つのビットを差し引いた)と、2つの共通ビットである。したがって、再度qmax=q1+q2-2が得られる。
【0172】
なお、回路に1ビット及び2ビットのゲート(q1、q2≦2)しかない場合、デブリは最大でq1+q2-2≦2ビットのゲートを有することとなる。したがって、衝突によってより大きいゲートが生成されることはない(ただし、ゲート数は変わる可能性がある)。しかしながら、3ビットゲートが複数ある場合は、衝突によって4ビットゲートなどが生成される可能性はある。
【0173】
上記の衝突ルールを用いることで、qビット制御ゲートのリストに変換された一連の命令を難読化できる。左又はLパーツ、中央又はMパーツ、及び右又はRパーツの3つで構成される回路を考える。準同型暗号化などの特定の適用では、回路をこれらの3つ、すなわち、バイナリ文字列を復号化する回路L=E-1、適用したい写像を実施する回路M=f、及び状態を再暗号化する回路R=E(同じキーを使用する場合)に自然に分割する方法がある。別の例は、1つの暗号化回路を別の暗号化回路に置き換えたい、例えばキーを変更したい場合である。この場合、自然な選択はL=E-1、M=φ(中央回路なし、又は一連のゲートが空)、及びR=E’、すなわち新しい暗号化スキームである。最後に、上記二例のようなアプリオリ構造を持たない特定の回路の場合、簡単な選択を行ってよく、二カットで回路を分割し、結果として得た三つのパーツをL、M、Rとして定義する。
【0174】
回路を難読化する手順の例は、上記の制御qビットゲート衝突ルールに基づいて説明する。以下では、L、M、及びRをゲートのリストと見なすことができ、大括弧[]が(パイソンプログラミング言語の場合と同様に)リストの区切り文字として用いられる。
1.Lの右端のゲート(gLと呼ぶ)を取り出し、L’を当該ゲートがないリストLとして定義する。同様に、Rの左端のゲート(gRと呼ぶ)を取り出し、R’を当該ゲートがないリストRとして定義する。
2.gLを左から右に押しM+[gR]にいれるか、それともgRを右から左に押して、[gL]+Mに入れるかをランダム(50%/50%の確率で)に選択する。なお、下記では、選択された選択肢が右から左に押すことであったと仮定している(他のケースも同様)。
3.リストsideA=[gL]+M及びsideB=[gR]を初期化する。
4.リストsideAが空ではなく、リストsideBのサイズとsideAのサイズの合計が所定の長さK未満(Kゲートなど)である場合、次のように行う。まず、sideAの右端のゲートとsideBの左端のゲートを飛び出させる。そして、それらを衝突させ、消滅しなければ、デブリをリストsideBに置く(デブリをその左側に加える)。このステップは、当該ワイルループの2つの条件のいずれかに違反があるまで、繰り返し行われる。
5.M’=sideA+sideB(回路の新しい中央パーツ)をアセンブルする。
6.LとRの両方が空でない限り、更新された三つL’→L、M’→M、R’→Rについて上記のステップを繰り返す。空であれば、回路Cobf=L+M+Rを戻す。
【0175】
難読化された回路Cobfを用いて、難読化ソース又はオブジェクトコード250を生成する。この難読化手順は、アルゴリズム1の疑似コードを難読化に用いて、そのサブルーチンであるアルゴリズム2で右に押し、アルゴリズム3で左に押すことで、実施できる。
【0176】
【0177】
図31は、一実施形態による、シンプルな写像のための難読化プログラムを生成する一連のステップを例示するブロック図である。この回路例では、LとRはそれぞれ3つのゲートで構成され、Mは1つのゲートのみで構成されている。ワードサイズは5ビット(n=N=5)である。このシンプルな例は、L=E
-1が復号化回路であり、R=Eが暗号化回路であり、写像fがMの単一ゲート(この場合はCNOT)に対応するケースである考えられる。なお、暗号化回路と復号化回路が互いに逆イメージとなっていることに留意されたい。
【0178】
最初のステップ(
図31の3101)では、ゲート「c」がゲート「d」と衝突し(ワンヘッド衝突、
図29(b)を参照)、ゲート「d」の左側に移動し、デブリゲート「c’」を残す。ゲート「c」はゲート「c-1」と衝突し、両方を打ち消す(
図27(a)を参照)。第二ステップ(3102)では、ゲート「b-1」がゲート「c’」と衝突し(ワンヘッド衝突、
図29(b)を参照)、ゲート「c’」の右側に移動し、デブリゲート「b’」を残す。ゲート「b-1」はゲート「d」を通過し、デブリを残さずに(
図28(a)を参照)、ゲート「d」の右側に移動する。ゲート「b-1」はゲート「b」と衝突し、両方を打ち消す(
図27(a)を参照)。第三ステップ(3103)では、ゲート「a」がゲート「b’」を通過し、デブリを残さずに(
図28(a))、ゲート「b’」の右側に移動する。同様に、ゲート「a」がゲート「c’」を通過し、デブリを残さずに(
図28(a))、ゲート「c’」の右側に移動する。ゲート「a」はゲート「d」と衝突し(ワンヘッド衝突、
図29(d)を参照)、ゲート「d」の左側に移動し、デブリゲート「a’」を残す。第四ステップ(3104)では、隣接するゲート「c’」及び「a’」が単一ゲート「e」に単純化される(
図27(c)を参照)。第五ステップ(3105)では、隣接するゲート「b’」と「e」が単一ゲート「f」に単純化される(
図27(b)を参照)。
【0179】
実施形態によっては、一般的な可逆3ビットゲートについて述べたように、暗号化データに作用する難読化コードは、難読化する必要のないプログラム全体のうちの一部である。これらの実施形態のいくつかでは、難読化コードは、難読化されない命令に埋め込まれる。
3. 計算ハードウェアの概要
【0180】
図32は、本発明の実施形態を実装し得るコンピューターシステムを例示するブロック図である。本コンピューターシステム3200は、バス3210などの通信機構を含む。これはコンピューターシステム3200の他の内部コンポーネントと外部コンポーネントとの間で情報を受け渡しするためのものである。情報は、測定可能な現象の物理信号として表される。これは、典型的には電圧などであるが、実施形態によっては、磁気、電磁気、圧力、化学、分子原子及び量子相互作用といった現象も含む。例えば、北と南の磁場、又はゼロと非ゼロの電圧は、2進数(ビット)の2つの状態(0、1)を表す。他の現象は、より高い基数の桁を表すことができる。測定前の複数の同時量子状態の重ね合わせは、量子ビットを表す。一以上の桁のシーケンスは、文字の番号又はコードを表すために用いられるデジタルデータを構成する。実施形態によっては、アナログデータと呼ばれる情報は、特定範囲内の測定可能値のほぼ連続体で表される。本コンピューターシステム3200又はその一部は、ここに記載される一又は複数の方法の一又は複数のステップを実行するための手段を構成する。
【0181】
2進数のシーケンスは、文字の数値又はコードを表すために用いられるデジタルデータを構成する。バス3210は、情報がバス3210に接続されたデバイス間で迅速に転送されるように、多くの情報の並列導体を含む。このバス3210には、情報を処理するための一又は複数のプロセッサ3202が接続される。このプロセッサ3202は、情報に対して一連の動作を実行する。これらの一連の動作には、バス3210からの情報の取り込みとバス3210への情報の配信が含まれる。また、これらの一連の動作には、通常、二以上の情報の比較、情報位置の移動、加算や乗算などによる二以上の情報の結合も含まれる。プロセッサ3202によって実行されるオペレーションシーケンスは、コンピューター命令を構成する。
【0182】
本コンピューターシステム3200は、バス3210に接続されたメモリ3204も含む。このランダムアクセスメモリ(RAM)又は他の動的記憶装置などのメモリ3204は、コンピューター命令などの情報を格納する。動的メモリにより、そこに格納された情報をコンピューターシステム3200で変更可能である。また、RAMにより、メモリアドレスと呼ばれる場所に格納された情報を、隣接するアドレスの情報とは独立して格納及び取得できる。また、メモリ3204は、コンピューター命令の実行中に一時的な値を格納するためにも、プロセッサ3202によって使用される。また、本コンピューターシステム3200は、このコンピューターシステム3200によって変更されない命令を含む静的情報を格納するためにバス3210に接続された読み取り専用メモリ(ROM)3206又は他の静的記憶装置を含む。また、命令などの情報を格納するための磁気ディスクや光ディスクなどの揮発性(持続性)記憶装置3208もバスに接続されており、これは本コンピューターシステム3200の電源が切られた場合や停電の場合でも持続する。
【0183】
命令などの情報は、ユーザーによって操作される英数字キーを含むキーボード又はセンサーなどの外部入力デバイス3212からバス3210に提供され、プロセッサに使用される。センサーは、その周辺の状態を検出し、検出結果を、コンピューターシステム3200で情報を表すために使用される信号と互換性のある信号に変換する。バス3210に接続された他の外部デバイスであって、主に人間とのインタラクションに使用されるものとしては、画像を表示するためのブラウン管(CRT)又は液晶ディスプレイ(LCD)などのディスプレイ装置3214、及びディスプレイ3214に表示される小さなカーソル画像の位置を制御したり、ディスプレイ3214に表示されるグラフィック要素に関連するコマンドを出したりするマウス、トラックボール、又はカーソル方向キーなどのポインティングデバイス3216がある。
【0184】
図示された実施形態では、特定用途向け集積回路(IC)3220などの専用ハードウェアがバス3210に接続される。専用ハードウェアは、プロセッサ3202によって実行されない動作を特定用途のために十分迅速に実行可能なように構成される。特定用途向けICの例としては、ディスプレイ3214用の画像を生成するグラフィックアクセラレータカード、ネットワーク経由で送信されるメッセージを暗号化及び復号化する暗号化ボード、音声認識IC、ハードウェアにおいてより効率的に実施される複雑なオペレーションシーケンスを繰り返し実行するロボットアームや医療スキャン装置などの特別な外部デバイスへのインターフェースなどがある。
【0185】
コンピューターシステム3200は、バス3210に接続された通信インターフェース3270の一又は複数のインスタンスも含む。通信インターフェース3270は、プリンタ、スキャナ、及び外部ディスクなどの自身のプロセッサで動作する様々な外部デバイスへの双方向通信結合を提供する。一般に、この接続は、プロセッサを備えたさまざまな外部デバイスが接続されているローカルネットワーク3280に接続されているネットワークリンク3278を用いて、行われる。例えば、通信インターフェース3270は、パーソナルコンピューター上のパラレルポート、シリアルポート、又はユニバーサルシリアルバス(USB)ポートであり得る。実施形態によっては、通信インターフェース3270は、対応するタイプの電話回線への情報通信接続を提供する統合サービスデジタルネットワーク(ISDN)カード又はデジタル加入者回線(DSL)カード又は電話モデムである。また、実施形態によっては、通信インターフェース3270は、バス3210の信号を同軸ケーブルでの通信接続用の信号又は光ファイバーケーブルでの通信接続用の光信号に変換するケーブルモデムである。別の例として、通信インターフェース3270は、イーサネットなどの互換性のあるLANへのデータ通信接続を提供するローカルエリアネットワーク(LAN)カードであってもよい。無線リンクも実装可能である。電波、光波、赤外線波を含む、音波や電磁波などの搬送波は、ワイヤーやケーブルなしで空間を移動する。信号には、搬送波の振幅、周波数、位相、偏波、又は他の物理的性質の人工的な変化が含まれる。無線リンクの場合、通信インターフェース3270は、デジタルデータなどの情報ストリームを運ぶ赤外線信号及び光信号を含んだ電気、音響、又は電磁信号を送受信する。
【0186】
本明細書では、コンピューター可読媒体という用語は、実行命令などの情報をプロセッサ3202に提供することに関与する媒体を指すために用いられる。このような媒体は、不揮発性媒体、揮発性媒体、及び伝送媒体などの多くの形態をとることができるが、これらに限定されない。不揮発性媒体には、例えば、記憶装置3208などの光ディスク又は磁気ディスクが含まれる。揮発性媒体には、例えば、動的メモリ3204が含まれる。伝送媒体には、例えば、同軸ケーブル、銅線、光ファイバーケーブル、及び電波、光波、赤外線波を含む音波や電磁波などのワイヤーやケーブルなしで空間を移動するウェーブが含まれる。また、本明細書では、コンピューター可読記憶媒体という用語は、伝送媒体を除く、プロセッサ3202への情報提供に関与する媒体を指すために用いられる。
【0187】
コンピューター可読媒体の一般的な形態としては、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ又は他の磁気媒体、コンパクトディスクROM(CD-ROM)又はデジタルビデオディスク(DVD)又は他の光学媒体、パンチカード又は紙テープ又は他の穴パターンを有する物理媒体、RAM、プログラマブルROM(PROM)、消去可能PROM(EPROM)、FLASH-EPROM、フローティングアレイフラッシュメモリ、SDRAM、その他のメモリチップ又はカートリッジ、搬送波、及びコンピューターが読み取り可能な他の媒体などがある。本明細書では、非一時的コンピューター可読記憶媒体という用語は、搬送波及び他の信号を除く、プロセッサ3202への情報提供に関与する媒体を指すために用いられる。
【0188】
一又は複数の有形メディアにエンコードされたロジックには、コンピューター可読記憶媒体、ASIC3220などの専用ハードウェア、又はその両方にかかるプロセッサ命令が含まれる。
【0189】
ネットワークリンク3278は、通常、一又は複数のネットワークを介して、情報を使用又は処理する他のデバイスへの情報通信を提供する。例えば、ネットワークリンク3278は、ローカルネットワーク3280を介して、ホストコンピューター3282やインターネットサービスプロバイダ(ISP)によって操作される機器3284への接続を提供することができる。ISP装置3284は、今では一般的にインターネット3290と呼ばれているネットワークの公的な世界規模のパケット交換通信ネットワークを介してデータ通信サービスを提供する。インターネットに接続されたサーバー3292と呼ばれるコンピューターは、インターネット経由で受信した情報に応答してサービスを提供する。例えば、サーバー3292は、ディスプレイ3214で表示するためのビデオデータの情報を提供する。場合によっては、ホスト3282、ローカルネットワーク3280、インターネットサービスプロバイダー3284、インターネット3290、及びサーバー3292のいくつかの組み合わせによって表されるリソースは、「クラウド」と呼ばれる。
【0190】
本発明は、本明細書に記載されている技術を実施するためのコンピューターシステム3200の使用に関する。本発明の一実施形態によれば、これらの技術は、メモリ3204に含まれる一又は複数の命令の一又は複数のシーケンスを実行するプロセッサ3202に応答して、コンピューターシステム3200により実行される。ソフトウェア及びプログラムコードとも呼ばれるこのような命令は、記憶装置3208など別のコンピューター可読媒体からメモリ3204に読み込まれてもよい。メモリ3204に含まれる命令シーケンスの実行によって、プロセッサ3202がここに記載の方法ステップを行う。代替実施形態では、特定用途向け集積回路3220などのハードウェアを、ソフトウェアの代わりに、又はソフトウェアと組み合わせて使用して、本発明を実施することができる。したがって、本発明の実施形態は、ハードウェアとソフトウェアの特定の組み合わせに限定されない。
【0191】
ネットワークリンク3278及び他のネットワークを介して通信インターフェース3270を通じて送信される信号は、コンピューターシステム3200へ、又はコンピューターシステム3200から情報を運ぶ。コンピューターシステム3200は、プログラムコードなどの情報を、とりわけネットワーク3280、3290を介して、ネットワークリンク3278及び通信インターフェース3270を通じて送受信することができる。インターネット3290を使用する例では、サーバー3292は、コンピューター3200から送信されたメッセージにより要求された特定のアプリケーションのためのプログラムコードを、インターネット3290、ISP機器3284、ローカルネットワーク3280、及び通信インターフェース3270を介して送信する。受信されたコードは、受信時にプロセッサ3202により実行されてもいいし、後で実行するために記憶装置3208又は他の不揮発性記憶装置に格納されてもいいし、又はその両方でもよい。このようにして、コンピューターシステム3200は、搬送波の信号という形でアプリケーションプログラムコードを取得することができる。
【0192】
様々な形態のコンピューター可読媒体が、一又は複数の命令シーケンス、データ、又はその両方のプロセッサ3202への搬送及び実行に関与し得る。例えば、命令及びデータは、最初に、ホスト3282などのリモートコンピュータの磁気ディスクで運ばれ得る。リモートコンピュータは、命令及びデータを、自身のダイナミックメモリにロードし、モデムを使用して電話回線を通じて送信する。コンピューターシステム3200にローカル接続されているモデムは、電話回線で命令及びデータを受信し、赤外線送信機を使用して、ネットワークリンク3278として機能する赤外線搬送波の信号に変換する。通信インターフェース3270として機能する赤外線検出器は、赤外線信号で運ばれる命令とデータを受信し、当該命令及びデータを表す情報をバス3210に配する。バス3210はメモリ3204に情報を運ぶ。プロセッサ3202は、メモリ3204から命令を取得し、命令とともに送信されたデータの一部を用いて実行する。メモリ3204で受信された命令及びデータは、プロセッサ3202による実行の前又は後のいずれかに、任意選択で記憶装置3208に格納されてもよい。
【0193】
図33は、本発明の実施形態を実装することができるチップセット3300を示している。チップセット3300は、本明細書に記載の方法の一又は複数のステップを実行するようにプログラムされており、例えば
図32に関連して説明されたプロセッサ及びメモリコンポーネントを、一又は複数の物理パッケージ(たとえば、チップ)に組み込んだ状態で含む。例として、物理パッケージには、物理的な強度、サイズの保護、及び/又は電気的相互作用の制限などの一又は複数の特性を提供するため、一又は複数の材料、コンポーネント、及び/又はワイヤーの構造アセンブリ(ベースボードなど)への配置が含まれる。特定の実施形態では、チップセットは単一のチップに実装できると考えられる。チップセット3300又はその一部は、本明細書記載の方法の一又は複数のステップを実行するための手段を構成する。
【0194】
一実施形態では、チップセット3300は、チップセット3300のコンポーネント間で情報をやりとりするためのバス3301などの通信機構を含む。プロセッサ3303は、バス3301に接続され、例えば、メモリ3305に格納された命令を実行したり情報を処理したりする。このプロセッサ3303は、各コアが独立して実行するように構成された一又は複数の処理コアを含み得る。マルチコアプロセッサにより、単一の物理パッケージ内でマルチプロセッシングが可能となる。マルチコアプロセッサには、例えば、2個、4個、8個、又はそれ以上のプロセッシングコアが含まれる。あるいは、又はそれに加えて、プロセッサ3303は、バス3301を介して連動するように構成された一又は複数のマイクロプロセッサを含んでいてもよく、それにより命令の独立実行、パイプライン化、及びマルチスレッド化が可能となる。また、プロセッサ3303には、一又は複数のデジタル信号プロセッサ(DSP)3307又は一又は複数の特定用途向け集積回路(ASIC)3309など、特定の処理機能及びタスクを実行するための一又は複数の特殊コンポーネントを伴わしてもよい。DSP3307は、典型的には、プロセッサ3303から独立して実世界の信号(例えば、音)をリアルタイムで処理するように構成される。同様に、ASIC3309は、汎用プロセッサでは行うのが難しいような特殊機能を実行するように構成可能である。ここに記載される本発明の機能を実行するのに役立つ他の専用コンポーネントとしては、一又は複数のフィールドプログラマブルゲートアレイ(FPGA)(図示せず)、一又は複数のコントローラ(図示せず)、又は一又は複数の他の専用コンピュータチップなどがある
【0195】
プロセッサ3303及び付随するコンポーネントは、バス3301を介してメモリ3305に接続可能である。メモリ3305は、本明細書に記載の方法の一又は複数のステップを行う実行可能命令を格納するための動的メモリ(例えば、RAM、磁気ディスク、書き込み可能な光ディスクなど)及び静的メモリ(例えば、ROM、CD-ROMなど)の両方を含む。また、メモリ3305は、本明細書に記載の方法の一又は複数のステップの実行に関連する、又はその実行によって生成されるデータを格納する。
4.変更形態
【0196】
本明細書において、本発明は、特定の実施形態を参照して説明されてきた。しかしながら、本発明の趣旨及び範囲から逸脱することなく、様々な修正及び変更を加えることが可能なのは明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的なものと見なされるべきである。本明細書及び特許請求の範囲を通して、文脈上他の意味に解すべき場合を除き、「備える」という語句及び「備えている」などの変形語句は、記載された項目、要素、ステップ、又はそれらのグループの包含を意味するが、他の項目、要素、ステップ、又はそれらのグループを除外するものではないと理解されたい。
【0197】
参考文献
[1]R.L.Rivest,L.Adleman,andM.L.Dertouzos,On data bank and privacy homomorphisms(1978).
[2]E.F.Brickell and Y.Yacobi,On privacy homomorphisms,Workshop on Theory and Applications of Cryptographic Techniques,117-25(1987).
[3]C.Gentry,Fully homomorphic encryption using ideal lattices.ACM Symposium on Theory of Computation(STOC),169-178(2009).
[4]K.Lauter,Can homomorphic encryption be practical.Proceedings of the 3rd ACM workshop on cloud computing security,113-124(2011).
[5]C.B.Gentry,Bootstrappable Homomorphic Encryption Method,Computer Program and
Apparatus.US Patent 8,515,058 B1(August 20,2013).
[6]C.B.Gentry and S.Halevi,Efficient Implementation of Fully Homomorphic Encryption.US Patent 8,565,435 B2(October 22,2013).
[7]C.B.Gentry,Fully Homomorphic Encryption Method Based on a Bootstrappable Encryption Scheme,Computer and Apparatus.US Patent 8,630,422 B2(January 14,2014).
[8]C.B.Gentry,S.Halevi,N.P.Smart,Homomorphic Evaluation Including Key Switching,Modulus Switching,and Dynamical Noise Management.US Patent 9,281,941 B2(March 8,2016).
[9]C.B.Gentry,S.Halevi,N.P.Smart,Homomorphic Evaluation Including Key Switching,
Modulus Switching,and Dynamical Noise Management.US Patent 9,608,817 B2(March 28,2017).
[10]C.B.Gentry,S.Halevi,N.P.Smart,Homomorphic Evaluation Including Key Switching,Modulus Switching,and Dynamical Noise Management.US Patent 9,621,346 B2(April 11,2017).
[11]J.J.Loftus,M.Naehrig,J.W.Bos,K.E.Lauter,Managed Secure Computations on Encrypted Data.US Patent 9,306,738 B2(April 5,2016).
[12]M.Tamayo-Rios,Method for Fully Homomorphic Encryption Using Multivariate Cryptography.US Patent 9,313,028 B2(April 12,2016).
[13]A.Kipnis and E.Hibshoosh,Method and System for Homomorphicly Ramdomizing an Input.US Patent 9,350,543 B2(May 24,2016).
[14]G.Saldamli,Homomorphic Encryption in Computing Systems and Environments.US Patent 9,436,835 B1(September 16,2016).
[15]D.Coppersmith and E.Grossman,Generators for certain alternating groups with applications to cryptography.SIAM J.Appl.Math.29(4),624-627(1975).
[16]A.Parent,M.Roeteller,and M.Mosca,Improved Reversible and Circuits for Karatsuba-Based Integer Multiplication.arXiv:1706.03419(2017).
[17]S.Cuccaro,T.G.Drapper,S.A.Kutin,and D.P.Moulton,A New Quantum Ripple-Carry Addition Circuit.arXiv:quant-ph/0410184(2004).
[18]K.Iwama,Y.Kambayashi,and S.Yamashita,Transformation Rules for Designing CNOT-based Quantum Circuits,DAC2002,pp419-424(New Orleans,Louisiana,USA,2002).