(57)【要約】  パブリックリソース上で暗号化データを安全に処理するための技術であり、復号化を行う第一セグメント、復号化データに作用する第二セグメント、結果データの暗号化を行う第三セグメントを含む可逆ｑビットゲートのシーケンスを示す第一データの受信が含まれる。第二データは、入力Ｎビットワードの少なくとも一つの共有ビットに作用する二つのｑビットゲートの第一シーケンスを、それとは異なる、同じ出力Ｎビットワードを生成する一又は複数のゲートの第二シーケンスと置き換えるためのルールを示す。この第二データを用いて、第二セグメント内に又はそれを超えて、第一セグメントからゲートをある距離だけ伝搬し、第二セグメント内に又はそれの前に、第三セグメントからゲートをある距離だけ伝搬する。これにより、難読化された可逆ゲートシーケンスが生成される。そして、難読化されたゲートシーケンスに基づく難読化命令がパブリックリソースに送信される。【選択図】図２Ｄ
2021507438.tif 000002
【特許請求の範囲】
【請求項１】
第一プロセッサで行う方法であって、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆ｑビットゲートのシーケンスを示す第一データを受信すること、
入力Ｎビットワードの少なくとも一つの共有ビットに作用する二つのｑビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Ｎビットワードを生成する一又は複数のｑビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶すること、
前記第二データを用いて、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートを超えて、少なくとも一つのｑビットゲートをＪ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートの前に、少なくとも一つのｑビットゲートをＫ数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆ｑビットゲートシーケンスを生成すること、
前記難読化された可逆ｑビットゲートシーケンスに基づいて難読化命令を第二プロセッサに送信し実行すること、
を特徴とする方法。
【請求項２】
請求項１記載の方法であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換すること、を更に含み、
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする方法。
【請求項３】
請求項１記載の方法であって、
前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記第二プロセッサで実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、
前記第三データを用いて、前記第二プロセッサで実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆ｑビットゲートシーケンスに変換することと、を更に含む、
ことを特徴とする方法。
【請求項４】
請求項１記載の方法であって、
入力Ｎビットワードに作用して出力Ｎビットワードを生成する一又は複数の可逆ｑビットゲートシーケンスの各々を、同じ出力Ｎビットワードを生成する一又は複数の可逆ｋビットゲート（３＜ｋ≦Ｎ）と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶すること、
前記統合データを用いて、前記難読化された可逆ｑビットゲートシーケンスの一又は複数の可逆ｑビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なｋビットゲートと置き換えること、を更に含む、
ことを特徴とする方法。
【請求項５】
請求項４記載の方法であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記一又は複数のｋビットゲートの各々を前記異なる第二プロセッサへの一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶すること、
前記統合コードデータを用いて、前記ｋビットゲートを難読化コード命令の少なくとも一部に変換すること、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスの残りの可逆ｑビットゲートを前記難読化コード命令の残存部分に変換すること、を更に含み
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする方法。
【請求項６】
請求項１に記載の方法であって、
Ｊ＞Ｎ及びＫ＞Ｎである、
ことを特徴とする方法。
【請求項７】
請求項１に記載の方法であって、
各可逆ｑビットゲートは、単一のターゲットビットとｑ−１制御ビットとを含む制御ゲートであって、前記ｑ−１制御ビットは、当該ｑ−１制御ビットにおける値及び当該ｑ−１制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とする方法。
【請求項８】
請求項１に記載の方法であって、
ｑ∈｛１、２、３｝である、
ことを特徴とする方法。
【請求項９】
請求項１に記載の方法であって、
前記第二プロセッサは前記第一プロセッサとは異なる、
ことを特徴とする方法。
【請求項１０】
請求項１に記載の方法であって、
前記第二プロセッサへのアクセスは、前記第一プロセッサへのアクセスとは異なる、
ことを特徴とする方法。
【請求項１１】
一又は複数の命令シーケンスを実行する非一時的コンピューター可読記憶媒体であって、
前記一又は複数の命令シーケンスが一又は複数のプロセッサを含む第一プロセッサ群により実行されると、前記一又は複数のプロセッサを含む第一プロセッサ群は、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆ｑビットゲートのシーケンスを示す第一データを受信することと、
入力Ｎビットワードの少なくとも一つの共有ビットに作用する二つのｑビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Ｎビットワードを生成する一又は複数の可逆ｑビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを記憶することと、
前記第二データを用いて、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートを超えて、少なくとも一つのｑビットゲートをＪ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートの前に、少なくとも一つのｑビットゲートをＫ数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆ｑビットゲートシーケンスを生成することと、
前記難読化された可逆ｑビットゲートシーケンスに基づいて難読化命令を一又は複数のプロセッサを含む第二プロセッサ群に送信し実行することと、を含むステップを実行する、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１２】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換することと、を更に含み、
前記難読化命令を送信することは、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１３】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、前記方法は、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、
前記第三データを用いて、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆ｑビットゲートシーケンスに変換することと、を更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１４】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
入力Ｎビットワードに作用して出力Ｎビットワードを生成する一又は複数の可逆ｑビットゲートシーケンスの各々を、同じ出力Ｎビットワードを生成する一又は複数のｋビットゲート（３＜ｋ≦Ｎ）と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶することと、
前記統合データを用いて、前記難読化された可逆ｑビットゲートシーケンスの一又は複数の可逆ｑビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なｋビットゲートと置き換えることと、を更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１５】
請求項１４に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、
前記一又は複数のｋビットゲートの各々を前記第一プロセッサ群とは異なる前記一又は複数のプロセッサを含む第二プロセッサ群への一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶することと、
前記統合コードデータを用いて、前記ｋビットゲートを難読化コード命令の少なくとも一部に変換することと、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスの残りの可逆ｑビットゲートを前記難読化コード命令の残存部分に変換することと、を更に含み
前記難読化命令を送信することは、前記一又は複数のプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１６】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
Ｊ＞Ｎ及びＫ＞Ｎである、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１７】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
各可逆ｑビットゲートは、単一のターゲットビットとｑ−１制御ビットとを含む制御ゲートであって、前記ｑ−１制御ビットは、当該ｑ−１制御ビットにおける値及び当該ｑ−１制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１８】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
ｑ∈｛１、２、３｝である、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項１９】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群は前記一又は複数のプロセッサを含む第一プロセッサ群とは異なる、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項２０】
請求項１１に記載の非一時的コンピューター可読記憶媒体であって、
前記一又は複数のプロセッサを含む第二プロセッサ群へのアクセスは、前記一又は複数のプロセッサを含む第一プロセッサ群へのアクセスとは異なる、
ことを特徴とする非一時的コンピューター可読記憶媒体。
【請求項２１】
システムであって、
少なくとも一つのプロセッサを含む第一プロセッサ群と、
一又は複数の命令シーケンスを含む少なくとも一つのメモリと、を備え、
前記少なくとも一つのメモリと、前記一又は複数の命令シーケンスは、前記少なくとも一つのプロセッサによって、装置に少なくとも、
置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆ｑビットゲートのシーケンスを示す第一データを受信すること、
入力Ｎビットワードの少なくとも一つの共有ビットに作用する二つのｑビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Ｎビットワードを生成する一又は複数のｑビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶すること、
前記第二データを用いて、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートを超えて、少なくとも一つのｑビットゲートをＪ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートの前に、少なくとも一つのｑビットゲートをＫ数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆ｑビットゲートシーケンスを生成すること、
前記難読化された可逆ｑビットゲートシーケンスに基づいて難読化命令を少なくとも一つのプロセッサを含む第二プロセッサ群に送信し実行すること、を行わせる、
ことを特徴とするシステム。
【請求項２２】
請求項２１に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスを、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令に変換すること、を更に含み、
前記難読化命令を送信することは、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とするシステム。
【請求項２３】
請求項２１に記載のシステムであって、前記方法は、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、
前記第一データを受信することは、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成すること、
前記第三データを用いて、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆ｑビットゲートシーケンスに変換すること、を更に含む、
ことを特徴とするシステム。
【請求項２４】
請求項２１に記載のシステムであって、
入力Ｎビットワードに作用して出力Ｎビットワードを生成する一又は複数の可逆ｑビットゲートシーケンスの各々を、同じ出力Ｎビットワードを生成する一又は複数のｋビットゲート（３＜ｋ≦Ｎ）と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶すること、
前記統合データを用いて、前記難読化された可逆ｑビットゲートシーケンスの一又は複数のｑビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なｋビットゲートと置き換えること、を更に含む、
ことを特徴とするシステム。
【請求項２５】
請求項２４に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶すること、
前記一又は複数のｋビットゲートの各々を前記少なくとも一つのプロセッサを含む第二プロセッサ群への一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶すること、
前記統合コードデータを用いて、前記ｋビットゲートを難読化コード命令の少なくとも一部に変換すること、
前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスの残りの可逆ｑビットゲートを前記難読化コード命令の残存部分に変換すること、を更に含み
前記難読化命令を送信することは、前記少なくとも一つのプロセッサを含む第二プロセッサ群で実行可能な形式の難読化コード命令を送信することを更に含む、
ことを特徴とするシステム。
【請求項２６】
請求項２１に記載のシステムであって、
Ｊ＞Ｎ及びＫ＞Ｎである、
ことを特徴とするシステム。
【請求項２７】
請求項２１に記載のシステムであって、
各可逆ｑビットゲートは、単一のターゲットビットとｑ−１制御ビットとを含む制御ゲートであって、前記ｑ−１制御ビットは、当該ｑ−１制御ビットにおける値及び当該ｑ−１制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する、
ことを特徴とするシステム。
【請求項２８】
請求項２１に記載のシステムであって、
ｑ∈｛１、２、３｝である、
ことを特徴とするシステム。
【請求項２９】
請求項２１に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群は前記少なくとも一つのプロセッサを含む第一プロセッサ群とは異なる、
ことを特徴とするシステム。
【請求項３０】
請求項２１に記載のシステムであって、
前記少なくとも一つのプロセッサを含む第二プロセッサ群へのアクセスは、前記少なくとも一つのプロセッサを含む第一プロセッサ群へのアクセスとは異なる、
ことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
安全対策が施されてはいないが潜在的にパワフルなパブリックリソースにおいて暗号化データを安全に処理する方法に関する。
【背景技術】
【０００２】
データを世間に対し機密とする際に、そのデータを暗号化し、暗号化したデータをクラウドデータストレージやクラウドコンピューティングなどのパワフルなパブリックリソースを用いて格納すると便利な場合が多い。しかしながら、格納されたデータ量が非常に大きい場合、例えばテラビット（Ｔｂ、１Ｔｂ＝１０１２ビット）ほどある場合に、暗号化されたデータの大部分をローカルセキュアプロセッサに戻して処理する必要があるのであれば、ある程度効率が落ちてしまう。同様に、オペレーションに膨大な計算リソースが含まれる場合、比較的小さいデータでも、計算能力に比較的制限があるセキュアコンピューターではなく、クラウドプロセッサなどのパワフルなパブリックリソースで実行する方がよい。ただ、データを復号化する際に、このパワフルなパブリックリソースにおけるプロセッサは、暗号方式を露呈し、基礎データを公開してしまう。
【発明の概要】
【０００３】
第一実施例グループにおける方法であって、第一（ローカルにおけるセキュアな）プロセッサで行う方法は、置換暗号化データを復号化して復号化データを生成するための第一セグメントと、前記復号化データに作用し一又は複数の派生復号化データを生成するための第二セグメントと、置換暗号化を用いて前記派生復号化データを暗号化して置換暗号化が施された結果データを生成するための第三セグメントとを含む可逆ｑビットゲートのシーケンスを示す第一データを受信することと、入力Ｎビットワードの少なくとも一つの共有ビットに作用する二つのｑビットゲートの第一シーケンスを、当該第一シーケンスとは異なる、同じ出力Ｎビットワードを生成する一又は複数のｑビットゲートの第二シーケンスと置き換えるためのルールを示す第二データを、コンピューター可読媒体に記憶することと、前記第二データを用いて、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートを超えて、少なくとも一つのｑビットゲートをＪ数のゲートの距離だけ前記第一セグメントから伝搬し、前記第二セグメントのｑビットゲート内に又は当該ｑビットゲートの前に、少なくとも一つのｑビットゲートをＫ数のゲートの距離だけ前記第三セグメントから伝搬し、難読化された可逆ｑビットゲートシーケンスを生成することと、前記難読化された可逆ｑビットゲートシーケンスに基づいて難読化命令を第二プロセッサに送信し実行することと、を含む。
【０００４】
第一実施例グループのいくつかの実施例では、前記方法は、前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスを、前記第二プロセッサで実行可能な形式の難読化コード命令に変換することと、を更に含み、前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む。
【０００５】
第一実施例グループのいくつかの実施例では、前記方法は、前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することを更に含み、前記第一データを受信することは、前記第二プロセッサで実行可能な形式であって前記暗号化データに作用するコード命令を受信して、一又は複数の派生復号化データを生成することと、前記第三データを用いて、前記第二プロセッサで実行可能な形式であって、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記コード命令を、一又は複数の派生復号化データを生成するように前記暗号化データに作用する前記可逆ｑビットゲートシーケンスに変換することと、を更に含む。
【０００６】
第一実施例グループのいくつかの実施例では、前記方法は、入力Ｎビットワードに作用して出力Ｎビットワードを生成する一又は複数の可逆ｑビットゲートシーケンスの各々を、同じ出力Ｎビットワードを生成する一又は複数の可逆ｋビットゲート（３＜ｋ≦Ｎ）と置き換えるためのルールを示す統合データをコンピューター可読媒体に記憶することと、  前記統合データを用いて、前記難読化された可逆ｑビットゲートシーケンスの一又は複数の可逆ｑビットゲートの特定のシーケンスを、当該特定のシーケンスを置き換え可能なｋビットゲートと置き換えることと、を更に含む。
【０００７】
第一実施例グループのいくつかの実施例では、前記方法は、前記第一プロセッサとは異なる前記第二プロセッサで実行可能な形式の各コード命令をＮビットワードに作用する一又は複数の可逆ｑビットゲートに関連付ける第三データを、コンピューター可読媒体に記憶することと、前記一又は複数のｋビットゲートの各々を前記異なる第二プロセッサへの一又は複数のコード命令に関連付ける統合コードデータを、コンピューター可読媒体に記憶することと、前記統合コードデータを用いて、前記ｋビットゲートを難読化コード命令の少なくとも一部に変換することと、前記第三データを用いて、前記難読化された可逆ｑビットゲートシーケンスの残りの可逆ｑビットゲートを前記難読化コード命令の残存部分に変換することと、を更に含み
前記難読化命令を送信することは、前記第二プロセッサで実行可能な形式の難読化コード命令を送信することを更に含む。
【０００８】
第一実施例グループのいくつかの実施例では、前記方法において、ＪとＫの各々がＮより大きい。
【０００９】
第一実施例グループのいくつかの実施例では、前記方法において、各可逆ｑビットゲートは、単一のターゲットビットとｑ−１制御ビットとを含む制御ゲートであって、前記ｑ−１制御ビットは、当該ｑ−１制御ビットにおける値及び当該ｑ−１制御ビットに入力された値に基づいて前記単一のターゲットビットの値を決定する。
【００１０】
第一実施例グループのいくつかの実施例では、前記方法において、ｑ∈｛１、２、３｝である。
【００１１】
第一実施例グループのいくつかの実施例では、前記方法において、前記第二プロセッサは前記第一プロセッサとは異なる。
【００１２】
第一実施例グループのいくつかの実施例では、前記方法において、前記第二プロセッサへのアクセスは、前記第一プロセッサへのアクセスとは異なる、
【００１３】
他の態様、特徴、および利点については、本発明を実施するために最良と考えられる形態を含む幾つかの特定の実施形態および実施を単に示した以下の詳細な説明から容易に明らかである。他の実施形態についても、他の異なる特徴および利点を有すことが可能で、いくつかの詳細部分は、本発明の精神および範囲から逸脱することなく、様々な明白な面において変更可能である。したがって、本図面および説明は、全て例示と見なされるべきであり、限定と見なされるべきではない。
【図面の簡単な説明】
【００１４】
添付の図面において、実施形態は、限定としてではなく、例として示される。ここで、同様の参照番号は同様の構成要素を指す。
【図１】図１は、パブリックリソースに格納されている暗号化データを使用するためのシステムを例示するブロック図である。
【図２Ａ】図２Ａは、一実施形態による、Ｎビットワードに作用する３ビットゲートを例示するブロック図である。
【図２Ｂ】図２Ｂは、一実施形態による、Ｎビットワードに作用する一対の３ビットゲートを例示するブロック図である。
【図２Ｃ】図２Ｃは、一実施形態による、図２Ｂの３ビットゲートによって得られた結果と同等の結果をもたらす一連の３ビットゲートを例示するブロック図である。
【図２Ｄ】図２Ｄは、一実施形態による、パブリックリソースに格納された暗号化データを当該パブリックリソースにおいて安全に処理するためのシステムを例示するブロック図である。
【図３】図３は、一実施形態による、パブリックリソースに格納された暗号化データをパブリックリソース上で安全に処理するための方法を例示するフローチャートである。
【図４】図４（ａ）から図４（ｃ）は、一実施形態による、特定の入力ワードｘが与えられた特定の出力ワードｙを生成するため、７ビットワードに作用する一連のゲートとして難読化されるプログラムを例示するブロック図である。
【図５】図５は、一実施形態による、図３の方法のステップで使用されるような、第二３ビットゲートを通過して第一３ビットゲートを伝搬する方法を例示するフロー図である。
【図６】図６は、一実施形態による、三つのビット全てで衝突する一対の３ビットゲートを例示するブロック図である。
【図７】図７は、一実施形態による、二つのビットで衝突する一対の３ビットゲートを例示するブロック図である。
【図８】図８は、一実施形態による、二つのビットで衝突する一対の３ビットゲートを例示するブロック図である。
【図９】図９は、一実施形態による、二つのビットで３ビットゲートが衝突する際のデブリゲートの生成に有用な一連のブレイディング置換を例示するブロック図である。
【図１０】図１０は、一実施形態による、二つのビットで３ビットゲートが衝突する際に生成される一連のデブリゲートを例示するブロック図である。
【図１１】図１１は、一実施形態による、二つのビットで３ビットゲートが衝突する際のデブリゲートの生成に有用なテーブルを構築するための条件を例示するブロック図である。
【図１２】図１２は、一実施形態による、二つのビットで３ビットゲートが衝突する際にいくつかのデブリゲートを判定するために分解される４ビットオペレーターを例示するブロック図である。
【図１３Ａ】図１３Ａは、一実施形態による、二つのビットで３ビットゲートが衝突する際の一連のデブリゲートｃ、ｄ、ｅ、及びｆを例示するブロック図である。
【図１３Ｂ】図１３Ｂは、一実施形態による、二つのビットで３ビットゲートが衝突する際のデブリゲートｃ、ｄ、ｅ、及びｆのための一連の真理値表を例示する図である。
【図１４】図１４は、一実施形態による、一つのビットで３ビットゲートが衝突する際にスワップゲートを導入するための８つの例示的な方法を示すブロック図である。
【図１５】図１５は、一実施形態による、一つのビットで３ビットゲートが衝突する際に非自明なデブリゲートを生成する一連のステップを例示するブロック図である。
【図１６】図１６は、一実施形態による、ゲート衝突でプログラムを更に難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。
【図１７】図１７は、一実施形態による、ゲート衝突でプログラムを更に難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。
【図１８】図１８は、一実施形態による、難読化プログラムを生成するための一連のステップを三例示すブロック図である。
【図１９】図１９は、一実施形態による、プログラムを更に難読化するより多くのビットの複数ゲートを生成するための３ビットゲートの統合を例示するブロック図である。
【図２０】図２０は、一実施形態による、２ビット乗算写像ｆのための３ビットゲートのシーケンスを例示するブロック図である。
【図２１】図２１は、一実施形態による、図２０の写像ｆへの中間暗号化及び復号化ブロックの挿入を例示するブロック図である。
【図２２】図２２は、一実施形態による、図２１の複数の中間暗号化による２ビット乗算写像ｆの難読化のステップを例示するブロック図である。
【図２３】図２３（ａ）から図２３（ｃ）は、一実施形態による、暗号化／復号化ゲートの機能コードへの移動距離を例示するブロック図である。
【図２４】図２４（ａ）から図２４（ｃ）は、一実施形態による、３ビットゲートの代わりに使用される制御ゲートを例示するブロック図であり、図２４Ｄは、一実施形態による、統合又は衝突から生じる６ビット制御ゲートを例示するブロック図である。
【図２５】図２５は、一実施形態による、３ビットゲートの代わりに使用される制御ゲートを例示する略式ブロック図である。
【図２６】図２６は、一実施形態による、図３の方法のステップで使用されるような、第二制御ｑビットゲートを通過して第一制御ｑビットゲートを伝搬する方法を例示するフロー図である。
【図２７】図２７（ａ）から図２７（ｄ）は、一実施形態による、制御ゲートと共有ターゲット又は制御ビットとの衝突を例示するブロック図である。
【図２８】図２８（ａ）及び図２８（ｂ）は、一実施形態による、制御ゲートと異なる非重複制御ビットとの衝突を例示するブロック図である。
【図２９】図２９（ａ）から図２９（ｄ）は、一実施形態による、あるゲートのヘッドの１ビットが他のゲートのテールの１ビットと重なる制御ゲートの衝突を例示するブロック図である。
【図３０】図３０（ａ）から図３０（ｄ）は、一実施形態による、両ゲートのヘッドの１ビットが他のゲートのテールの１ビットと重なる制御ゲートの衝突を例示するブロック図である。
【図３１】図３１は、一実施形態による、シンプルな写像のための難読化プログラムを生成する一連のステップを例示するブロック図である。
【図３２】図３２は、本発明の実施形態を実装し得るコンピューターシステムを例示するブロック図である。
【図３３】図３３は、本発明の実施形態を実装し得るチップセットを例示するブロック図である。
【発明を実施するための形態】
【００１５】
クラウドなどのパブリックリソース上で暗号化データを安全に処理し、パブリックリソースにおける優れた処理能力、効率、復元力、その組み合わせなどを上手に活用する方法とシステムについて説明する。以下の説明では、本発明の十分な理解を得られるよう、具体的な細部が、例示の目的で数多く示されている。しかしながら、当業者には、本発明がこれらの特定の細部を用いずとも実施され得ることは明らかであろう。また、他の例に関し、周知の構造及びデバイスは、本発明を不必要に曖昧にすることを避けるため、ブロック図の形で示されている。
【００１６】
広範囲を示す数値範囲及びパラメーターは近似値であるが、特定の非限定的な例で示される数値については、可能な限り正確なものを報告している。ただし、いずれの数値にも、現時点において試験測定における標準偏差から必然的に生じる一定の誤差が本質的に含まれている。更に言うと、文脈から明確でない限り、ここに示される数値は、その正確性について、最下位の桁で黙示しているものがある。つまり、１．１という値は１．０５から１．１５までの値を暗に意味している。また、「約」という用語は、特定の値を中心とするより広い範囲を示すために用いられるものであり、文脈から明確でない限り、最下位の桁がその近辺のより広い範囲を指すことを、暗に意味している。例えば、「約１．１」というのは、１．０から１．２までの範囲を含意している。最下位の桁が不明瞭な場合、「約」という用語は０．５から２までの係数を意味する。すなわち、「約Ｘ」は０．５Ｘから２Ｘまでの範囲の値を含意している。例えば、約１００といった場合、５０から２００までの範囲の値を含意している。さらに、本明細書に開示される範囲は、そこに包含される全ての下位範囲を含むと理解されるべきである。例えば、「１０未満」の範囲には、最小値０と最大値１０の間の下位範囲（及び当該最大値及び最小値）が全て含まれる。つまり、例えば１から４までなど、最小値が０以上で、最大値が１０以下の下位範囲を全て含む。
【００１７】
下記では、特定の例示的な写像並びに例示的な３ビットゲート及び一対の３ビットゲートを置き換えるための例示的なオプションに関連して、本発明の実施形態をいくつか説明するが、本発明はこれに限定されない。他の実施形態では、ここに記載されている方法に従った他の写像並びにｑビットゲート及び置換ストラテジーが用いられる。
１．  概略
【００１８】
図１は、パブリックリソースに格納されている暗号化データを使用するためのシステムを例示するブロック図である。暗号化データ１４０は、一又は複数の非セキュアストレージデバイス１８８に格納されている。図示したものでは、暗号化データ１４０は、置換暗号化によって暗号化されている。置換暗号化では、置換キーと呼ばれる所定方法を用いて、平文におけるビットの位置と値を暗号文における位置と値に変更し、それにより、Ｎビット平文ワードをＮビット暗号文ワードに変える。上記置換暗号化データ１４０が当該暗号文である。Ｎビット平文ワードは、それぞれが一つのＮビット暗号文ワード用である。二つの異なるＮビット平文ワードが同じＮビット暗号文ワードになることはない。置換キーを知っていれば、暗号文を平文に再変換し、計算に使用できる。可能置換数は２Ｎ！であるので、各Ｎビット暗号文におけるビット数Ｎが大きければ大きいほど、暗号化データ１４０の安全性は高くなる。
【００１９】
一又は複数の非セキュアサーバー１８２が、直接又は非セキュア通信ネットワーク１８０を介して、上記非セキュアストレージデバイス１８８にアクセスし得る。置換キーにアクセスしなければ、サーバー１８２及びネットワーク１８０内のデバイスは平文にアクセスできない。セキュアコンピューターシステム１１０もファイアウォール（図示せず）などの当該技術分野で既知の方法を介して、非セキュアストレージデバイス１８８にアクセスし得る。セキュアコンピューターシステム１１０は、暗号化データ１４０の暗号文に対応する平文の許可ユーザーの物理的制御及び通信制御を受ける。置換キーは、データ内に一又は複数の置換暗号化パラメーター１１２を含んでおり、セキュアコンピューターシステム１１０のユーザー達には知られている。
【００２０】
暗号化データを一又は複数の非セキュアサーバー１８２での処理に使用する場合、より高い計算能力があったり、効率的であったりするかもしれないが、現在の方法では、非セキュアサーバー１８２又はネットワーク１８０上で動作しているプロセス全てに対しデータ１１２を含む置換キーが公開されてしまうと考えられている。したがって、暗号化データ１４０のユーザーは、一般に、ネットワーク１８０を介して非セキュアストレージデバイス１８８から暗号化データ１４０の一部又は全てを取得し、セキュアシステム１１０に少なくとも一時的にローカルストレージを行わざるを得ない。この取得プロセスは、取得／格納モジュール１１５により行われるものであって、どの暗号化データを取得するか特定する。取得基準が、暗号文として保存されている情報に依存している場合、写像実行に必要のない多くのデータがローカルに送信及び保存される。
【００２１】
平文に実行される写像は、平文写像プログラムモジュール１１３により表される。他のモジュール１１４は、暗号文の復号化（モジュール１１６を使用）、平文に対するオペレーション（モジュール１１３を使用）、及びモジュール１１８を使用してのリザルトの暗号化などの処理を行う。モジュール１１６とモジュール１１８は両方が暗号化パラメーター１１２に依存する。モジュール１１５は、リザルトを非セキュアストレージデバイス１８８に再度保存する。保存場所が暗号文として保存された情報に依存している場合、モジュール１１３の平文写像によって変更されない多くのデータが、ネットワーク１８０を介して送信され、非セキュアデバイス１８８に保存される。例えば、「１２３」で始まる社会保障番号（ＳＳＮ）を持つ人を取得したい場合は、データ操作を行うか判断する前に、ＳＳＮを復号化する必要がある。非セキュアデバイスではこれを実行できないため、全てのデータをローカルデバイスに移さなければならない。そして、少なくとも全てのＳＳＮを復号化してから、ダウンロードしたデータのうちの一部である目的データを操作する必要がある。
【００２２】
ここで、以下が観察されている。１）置換暗号化は、一又は複数のｑビットゲートのシーケンス（ｑ∈｛１、２、３｝）によって実施可能である。２）入力と出力を１対１でマッピングする写像は、一又は複数のｑビットゲートのシーケンスによっても実施可能である（例示のため、写像プログラムモジュール１１３がこの全単射写像を実行すると仮定する）。３）同じ入力に対して同じ出力を生成する一連のｑビットゲートが複数あるため、復号化、平文写像、及び暗号化ｑビットゲートは、復号化、平文写像、及び暗号化オペレーションに直接対応しない異なるゲートシーケンスで置き換えることが出来る。それにより、これらのオペレーションは難読化される。これらのオペレーションを公開しない異なるゲートシーケンスを実行する難読化コードが生成されるのである。当該難読化コードは、非セキュアサーバー１８２でのオペレーションのため送信可能である。このようなコードは、置換キーを漏らすことなく、非セキュアサーバー１８２及び非セキュアデバイス１８８の計算能力、効率性、復元力を活用できる。一連のゲートは、本明細書や実施例の記載では回路とも呼ばれる。よって、データに対して意図した写像を実行するプログラムは、計算の回路モデルにおいてそうであるように、ゲートに関する記述に変換されることとなる。次に、論理ゲートは、３ビットのトフォリゲートなど、ｑビットの可逆ゲートで表現される。
【００２３】
図２Ａは、一実施形態による、Ｎビットワードに作用する３ビットゲート２０１を例示するブロック図である。ビットＸ２０３ｘ、ビットＹ２０３ｙ、及びビットＺ２０３ｚで表される入力Ｎビットワード２０２ａから、省略記号で表される０個以上のビット位置分だけ離れている、後続している、又は先行している三つのビット位置は、可逆３ビットゲートに入る。リザルトは、同じ３ビット位置にある出力Ｎビットワード２０２ｂに移る。ただし、これら三カ所の内容には置換が行われている可能性がある。例えば、Ｎビットワード２０２ａの三つの位置Ｘ、Ｙ、Ｚにおける８つの値Ａ、Ｂ、Ｃ（例えば、０００、００１、０１０、０１１、１００、１０１、１１０、１１１）は、Ｎビットワード２０２ｂにおける８つの値Ａ’、Ｂ’、Ｃ’（例えば、１１０、１１１、１００、１０１、０００、００１、０１１、０１０）の順列に変わる。別の３ビットゲートでは、別の８つの値の順列が生成される。三カ所の（Ｘ、Ｙ、Ｚ）いずれにおいても、２３！＝４０，３２０の３ビットゲート候補が存在する。実施例の記載では、３ビットゲートは、図２Ａと同様に、ゲートが作用する可能性があるビット位置に対応する線上に実点で表される。
【００２４】
図２Ｂは、一実施形態による、Ｎビットワードに作用する一対の３ビットゲート（２０４ａ、２０４ｂ）を例示するブロック図である。この図では、入力Ｎビットワード２０２ｃ、３ビットゲート２０４ａ、３ビットゲート２０４ｂ、及び出力Ｎビットワード２０２ｄが示されている。１２個の連続するビット位置は、水平線分で示され、省略記号で表される０個以上の他のビット位置に後続又は先行する。例えば、平文写像に関連する３ビットゲートから復号化に関連する３ビットゲートに難読化するためなど、３ビットゲート２０４ａを３ビットゲート２０４ｂを越えて移動することが望まれる場合に、それらのゲートは移動するとされている。二つのゲート２０４ａ及び２０４ｂが少なくとも１ビットを共有する場合、この動きにより、ゲートは、「デブリ」ゲートと呼ばれる一又は複数の異なるゲートのグループを生成するが、いずれも元ゲート２０４ａ及び２０４ｂとしては認識できない。この場合、ゲートは「衝突する」とされる。このような「衝突」をどのように解決するかを決定するためのルールについては、以下で大まかに説明し、実施例の部分で詳しく説明する。一般に、衝突は、３ビットゲートの総数に可能な限り追加することで解決できる。この幅広の概念は、図２Ｃによって表される。
【００２５】
図２Ｃは、一実施形態による、図２Ｂの二つの３ビットゲート２０４ａ及び２０４ｂによって生成された結果と同等の結果を生成する一連の３ビットゲートを例示するブロック図である。これは、特定の３ビットゲート２０４ａ及び２０４ｂに適用される実際のソリューションではなく、ゲート２０４ａ及び２０４ｂがこのソリューションで消費され、４つの異なる「デブリ」３ビットゲート２０２ｃ、２０４ｄ、２０４ｅ及び２０４ｆと置き換えられることを示している。
【００２６】
ここで用いられているように、ゲートＧａは、ゲートＧｂを越えて移動したとされる。例えば、前進動作において、左側のゲートＧａが右側のゲートＧｂを越えて移動する場合、ゲートＧａ及びＧｂが一つ又は二つの共通ビット線にかかると常に衝突が発生するはずである。ゲートＧａ及びＧｂがビット線を共有していない場合、これらの順序を入れ替えることで、ゲートＧａのゲートＧｂを通過する動きが達成される。三つのビット線全てを共有する場合、これらは最初に一つのゲートにマージされ、このゲートがゲートＧａ用の動作を続行する。衝突では、元のゲートＧａ及びＧｂが同等のデブリゲートシーケンスに置き換えられるのだが、ここでデブリゲートの数は、共有するビットラインの数に依存している。二つのビットラインを共有している場合は最大４つのデブリゲート、一つのビットラインのみを共有している場合は最大７つのデブリゲートである。衝突によって生じた右端のデブリゲートを含む、ゲートＧａのゲートＧｂを超える動きから生じた右端のゲートは、「ディセンデント」と呼ばれる。元々の意図が、ゲートＧａにゲートＧｂ右側の他ゲートを越えて移動させる事であった場合、ゲートＧａのディセンデント又は衝突による他のデブリゲートは、元ゲートＧｂのすぐ右側のゲートＧｃを越えて移動する必要がある。更に右へ動かしたい場合、ゲートＧａ又はそのディセンデントの少なくとも一つが、右側のあらかじめ決められた数のゲートを通過するまで、当該プロセスが繰り返される。右側のゲートＧｂがゲートＧａを越えてその左又はそれ以上に移動する場合、この後退移動は、上記と同様の手順で行われるのだが、動きの方向が逆となる。
【００２７】
様々な実施形態において、ゲートを移動する概念は、復号化又は暗号化に関連するゲートを平文写像に関連するゲートを越えて移動させることでコードを難読化する統合プロセスにおいて、用いられる。
【００２８】
図２Ｄは、一実施形態による、パブリックリソースに格納された暗号化データを当該パブリックリソースにおいて安全に処理するためのシステムを例示するブロック図である。ネットワーク１８０、非セキュアストレージデバイス１８８、置換暗号化データ１４０、置換暗号化パラメーターデータ１１２、平文写像プログラムモジュール１１３、モジュール１１４、及び暗号化データ取得／復元モジュール１１５は、図１について上述した通りである。
【００２９】
セキュアコンピューターシステム２１０はシステム１１０とは異なる。これは、システム２１０にテーブル２３０、モジュール２３２、モジュール２３３、モジュール２３４、モジュール２３５、モジュール２３６、及びモジュール２５０が含まれているためである。テーブル２３０は、非セキュアサーバー２８２によって実行可能な形式の各ソースコード又はオブジェクトコード命令を、当該ソース又はオブジェクトコード命令と同じ一以上の入力Ｎビットワードから同じ一以上の出力Ｎビットワードを生成する一以上のｑビットゲートのシーケンスと関連付ける。
【００３０】
図４（ａ）から図４（ｃ）は、一実施形態による、特定の入力ワードｘが与えられた特定の出力ワードｙを生成するため、７ビットワードに作用する一連のゲートとして難読化されるプログラムを例示するブロック図である。図４（ａ）では、復号化モジュールＥ−１、写像モジュールｆ、及び暗号化モジュールＥ’を含むプログラムＰが、いくつかのビット（例えば、７ビット）から構成されるワードに作用する。データベースで暗号化された全てのデータは、３ビットトフォリゲートなどの可逆ロジックゲートを用いて構築された置換に基づくスキームを使用して暗号化される。可逆計算により、回路全体からの結果が、ｎビットの入力ｘ（ここではｎとＮは交換可能に使用される）を取り、ｎビット出力ｙ＝Ｐ（ｘ）を返す置換となるのだが、ここでＰ（ｘ）は２ｎ可能なｎビット入力ｘの空間に作用する置換である。２ｎ次元ビット空間上の順列は、可逆ｑビットゲートを用いたシンプルな置換により生成される。平文データｘ’を暗号文ｘに暗号化するプログラムＥ（ｘ）は、可逆ゲートを用いて表現されるため、データを復号化するプログラムＥ−１は、プログラムの各ゲートの逆元を用いて計算を逆にして、逆の順序で読み取ることで、得ることができる。この逆演算により、置換の逆元ｘ’＝Ｅ−１（ｘ）が得られ、これがデータを復号化する。また、平文データｘ’に目的のタスクを実行するプログラムｆは、計算の回路モデルにおいてそうであるように、ゲートに関する記述に変換されるか、中央処理装置（ＣＰＵ）用のコンパイラ又はフィールドプログラマブルゲートアレイによって生成される。次に、論理ゲートがｑビット可逆ゲートで表される。実施形態によっては、最終的な回路、例えば統合／難読化されたＥ−１・ｆ・Ｅ’は、ＦＰＧＡにプログラムされる。この実装は、ハードウェアに実装されることから、入力データに対する回路の動作が高速になるという利点がある。他の実施形態では、Ｅ及びＥ−１は、スキームが可逆ゲートに関して定式化されている限り、高度暗号化規格（ＡＥＳ）などの他の暗号化スキームを用いて定義される。
【００３１】
図４（ｂ）に示すように、可逆プログラムＰは、プログラムの三つのステージ、すなわち、データを復号化するモジュールＥ−１、目的のタスクを実行するモジュールｆ、及びデータを再暗号化するモジュールＥ’をパイピングすることによって構築される。各モジュールが可逆ｑビットゲートの観点から表されていることから、結合プログラムＰは、全体として、可逆ｑビットゲートで構成されている。復号可逆プログラムは、ｎビット暗号文ワードｘを入力として取り、暗号文ワードｙ＝Ｐ（ｘ）を出力する置換であるが、ここで、Ｐ（ｘ）は、図４（ｂ）に示すとおり、２ｎ可能なｎビット入力ｘの空間に作用する置換である。
【００３２】
実施形態によっては、各オブジェクトコード命令を一又は複数のｑビットゲートに関連付けることが好ましい。なぜなら、オブジェクトコードはコマンド数が少ない傾向があるため、テーブル内のエントリの総数は、より高いレベルの複合ソースコード命令に関連するテーブルのそれよりも少なくなる可能性があるからである。また、オブジェクトコードは、処理チップレジスタのレベルで動作する傾向があるので、Ｎビットをレジスタのビット数に簡単に一致させることができ、マッピングが簡単になる。ソースコードは任意の言語で書き、非セキュアサーバー用の適切な既存コンパイラを使用してコンパイルし、それによりｑビットゲートのシーケンスにマッピングされるオブジェクトコードを生成する。
【００３３】
３ビットの可逆ゲートに関する完全なプログラム（又は置換）Ｐの記述は固有のものではない。入力ｘに対して同じ最終結果Ｐ（ｘ）を生成する他の３ビットゲートシーケンスがあるが、マシンの中間状態が全て異なる。図４（ｃ）は、一実施形態による、任意のプログラムＰ（ｘ）について達成され得る異なる中間状態を例示するブロック図である。図示の実施形態では、元プログラムＰは、ｍ１ｑビットゲートＧａ（１）のシーケンスを生成し、それぞれがα＝１からｍ１に指定された３ビット（ｘｉα、ｘｊα、ｘｋα）にまで作用する。また、元プログラムＰは、サブスクリプトｉ、ｊ、ｋを生成し、それぞれが各αのワード内の異なるｎビットを一つ示し、添え字付きのｘはそれぞれ指定されたビットの値を示す。また、他のｍｐｑビットゲートＧｂ（ｐ）のプログラムＰ（ｐ）（ｘ）があり、それぞれが、同じ入力ｘが与えられた同じ出力ｙを生成するβ＝１からｍｐに指定された３ビット（ｘｉ’β、ｘｊ’β、ｘｋ’β）にまで作用する。図４（ｃ）は、ｐ＝２及び３の二つの代替プログラムを示しているが、他のものでも可能である。
【００３４】
一つのプログラムＰ（ｐ）が与えられただけでは、元プログラムＰ（１）がどれであるかを判別することはできない。元プログラムＰ（１）といくつかのゲートシーケンスを共有するプログラムＰ（ｏ）を選択すると、難読化プログラムＰ（ｏ）が提供され、この難読化プログラムＰ（ｏ）においては、データの復号化又は暗号化に関連するステップは断定できない。したがって、難読化プログラムＰ（ｏ）は、パブリックストレージに保存されている暗号文を復号化するためのキーを渡すことなく、共有パブリックコンピューターで実行できる。Ｐ（ｏ）をもたらす新しいゲートシーケンスを見つけるため、三つのセグメントＥ−１、ｆ、及びＥ’を、区別できなくなるように、有意に統合する。この統合には、ゲートを、あるセグメントから別のセグメントとの境界を越えて移動させることが含まれる。しかし、ただゲートを移動するだけでは十分ではない。ゲートは、別のセグメントの大部分に深く貫通するように、互いに入れ違いになる。
【００３５】
サーバーに送信され実行されるのはプログラムＰ（ｏ）である。クラウドサービスプロバイダーは、要求された計算を実行し、暗号化データベースからデータを読み取り、暗号化データを出力できる。ただし、クラウドプロバイダーは、計算中ずっと何が行われているかは判別できない。最終的な出力は同じであるが、中間ステップにおいては、ほとんど又は全ての計算ステップで異なる結果が出る。例えば、クライアントが、ブール演算式やクエリを満たす全てのエントリをデータベースで検索したいとする。サーバーは難読化コードを実行し、暗号化データベースから読み取り、適切なクエリを暗号化出力ファイルに書き込む。この暗号化出力ファイルはクライアントに送り返される。そして、クライアントは、セキュアコンピューターで回答を復号化する。
【００３６】
実施形態によっては、以下で詳細に説明するが、いくつかのｑビットゲートが一つのｋビットゲートに統合される（３＜ｋ≦Ｎ）。そのような実施形態では、テーブル２３０は、各ソースコード又はオブジェクトコード命令を、当該ソース又はオブジェクトコード命令と同じ一又は複数の入力Ｎビットワードから同じ一又は複数の出力Ｎビットワードを生成する一又は複数のｋビットゲートに関連付けるエントリ又は命令を含む。これらの実施形態のいくつかでは、テーブル２３０は、各ｋビットゲートを一又は複数のｑビットゲートのシーケンスと関連付けるエントリも含む。したがって、当該ｑビットゲートシーケンスがあった場合は、対応するｋビットゲートを必要に応じて置き換えることができる。例えば、テーブル２３０は、一連のｑビットゲートをｋビットゲートに変換するためのルール又は命令を含むが、これは、必要以上の実験なくとも当業者にとっては明らかなプロセスである。実施形態によっては、ｑビットゲートは、ｋビットゲートが生成されるまで連続的に結合される。
【００３７】
モジュール２３２は、ソースコード又はオブジェクトコードをｑビット可逆ゲートのシーケンスに変換するように構成される。モジュール２３２は、テーブル２３０内のデータの少なくとも一部を用いて、復号化、平文写像、又は暗号化に属するものとして各ｑビットゲートにラベルを付ける。実施形態によっては、以下で詳細に説明するように、モジュール２３２は平文写像を一連のセグメントに分割し、暗号化プロセスが各セグメントの後に追加され、対応する復号化プロセスが次のセグメントの前に追加される。この平文写像の分割は、ソース／オブジェクトコードをｑビットゲートのシーケンスに変換する前又は後に行うことができる。こういった平文写像セグメント化の実施形態のいくつかでは、各ｑビットゲートは、平文写像又は暗号化／復号化プロセスに関連するものとしてラベル付けされる。実施形態によっては、暗号化ｑビットゲートは、復号化ｑビットゲートから区別するためにラベル付けされる。モジュール２３２の出力は、モジュール１１４と同等のｑビット可逆ゲートのシーケンスを含むモジュール２３３である。実施形態によっては、復号化プロセス、暗号化プロセス、又はその両方は、ｑビットゲートに関して定義される（例えば、置換暗号化パラメーター１１２は、復号化を実行する一連のｑビットゲート、暗号化を実行する一連のｑビットゲート、又はその両方を含む）。これらの実施形態では、モジュール２３２は、ソース又はオブジェクト復号化コード、暗号化コード、又はその両方をｑビットゲートに変換する必要はない。いくつかの実施形態では、暗号化は、ただ復号化を実行するｑビットゲートの順序を逆にするだけで達成され、パラメーター１１２は、復号化又は暗号化のための一つのシリーズのみを含む。
【００３８】
モジュール２３４は、ｑビットゲートを、一又は複数の暗号化又は解読プロセスから平文写像セグメントのｑビットゲート間の位置又はそれを越えて移動させるように構成される。本明細書では、これを統合プロセスと呼ぶ。実施形態によっては、この統合プロセスは、三つのステップからなる。第一ステップでは、復号化セグメントに関与するゲートが、平分写像セグメントに関与するゲートを通過して前方に伝搬し、第一ステージ統合セグメントをもたらす。第二ステップでは、暗号化セグメントに関与するゲートが、第一ステップから生じたゲートを通過して後方に伝搬し、第二ステップ統合ゲートシーケンスをもたらす。第三ステップでは、このシーケンスのいくつかのｑビットゲートが統合されてｋビットゲート（ｋ＞３）となる。ゲート伝搬は、伝搬が前方であるか後方であるかに応じて、右側又は左側にあるゲートを通過するゲートの動きで構成される。
【００３９】
ステップ１は、復号化セグメント内の右端のゲート（例えばＧｚ）を、Ｊゲートを通過して平文写像セグメント内又はそれを越えて前方方向に伝搬させることから始まる。Ｊは伝搬距離と呼ばれる。上記で定義したことであるが、Ｊゲートを通過した動きというのは、Ｇｚディセンデント（「移動中の」ゲートＧｚ又はその最も遠い衝突デブリゲート）が、元のＪゲートを越えてＧｚの右側に移動したということを意味する。プロセスは、復号化セグメント内の右端から２番目のゲート（例えばＧｙ）を、Ｊ’ゲートを通過して平文写像セグメント内又はそれを越えて伝搬させることにより、続行される。この伝搬では、右端から２番目のゲート（Ｇｙ）は、最初の右端のゲート（Ｇｚ）の伝搬で残ったデブリゲートも越えて移動する。残ったゲートはそれぞれ、Ｊより小さい、等しい、又は大きいターゲットＪ’に向かう一つと見なされる。Ｊより小さい又は等しいことの利点は、より少ない計算で効率的に難読化を実行できることである。Ｊよりも大きいことの利点は、より完全に近い難読化ができることである。実施形態によっては、Ｊ’は、難読化プロセスを逆にすることがさらに困難になるよう、Ｊの値について変化するようにランダムに選択される。このプロセスは、復号化セグメント内の全てのゲートが、少なくともある程度、平文写像セグメント内又はそれを越えて伝搬されるまで、繰り返される。それにより、復号化セグメントと平文写像セグメントが統合することとなる。
【００４０】
ステップ２では、暗号化セグメントが、先の復号化及び平文写像セグメントの統合から得られたゲートのシーケンスと統合される。プロセスは、ステップ１で説明したものと類似しているが、その方向が逆となる。このプロセスは、暗号化セグメントに関与する左端のゲート（例えばＧａ）が、復号化及び平文写像統合セグメントにおけるＫゲートを越えて後方に移動することから始まる。上記で定義したことであるが、Ｋゲートを通過した動きというのは、Ｇａディセンデント（「移動中」のゲートＧａ又はその最も遠い衝突デブリゲート）が、元のＫゲートを越えてＧａの左側に移動したということを意味する。これにより、暗号化セグメント内の左端から２番目のゲート（例えばＧｂ）がＫ’ゲートを通過して左に向かう、という動作が続く。これには、最初の左端のゲート（Ｇａ）の伝搬で残ったゲートを通過することも含まれる。残ったゲートはそれぞれ、Ｋより小さい、等しい、又は大きいターゲットＫ’に向かう一つと見なされる。Ｊ’とＪの場合と同様に、Ｋより小さい又は等しいことの利点は、より少ない計算で効率的に難読化を実行できることである。Ｋよりも大きいことの利点は、より完全に近い難読化ができることである。実施形態によっては、Ｋ’は、難読化プロセスを逆にすることがさらに困難になるよう、Ｋの値について変化するようにランダムに選択される。ステップ２は、暗号化セグメント内の全てのゲートが左に向かって、少なくともある程度、統合復号化／写像ゲート内に伝搬されると終了する。
【００４１】
いくつかの実施形態では、この方法を、右手の左端ゲートを左手に持っていくこと（Ｒ→Ｌ）と左手の右端ゲートを右側に持っていくこと（Ｌ→Ｒ）とを交互に繰り返すように変更する。いくつかのｑビットゲートをｋビットゲートに統合する任意ステップ３について、以下で詳しく説明する。
【００４２】
自動伝搬と衝突の手順については、図５と図２６を参照して、以下、実施例の部分においてより詳しく説明する。モジュール２３４の出力は、モジュール１１４と同等のｑビット可逆ゲート（及びゼロ個以上のｋビットゲート）の難読化シーケンスを含むモジュール２３５だが、オリジナルの復号化又は最終的な暗号化プロセスを推測することは非現実的であり、そのためデータ１１２の暗号化パラメーター値を決定することも非現実的である。
【００４３】
モジュール２３６は、ｑビット可逆ゲートの難読化シーケンスを難読化ソースコード又はオブジェクトコードに変換するように構成される。モジュール２３６は、テーブル２３０の少なくとも一部のデータを使用する。実施形態によっては、以下でより詳細に説明するように、モジュール２３６は、最初に、単純な計算に基づいて、又はテーブル２３０に格納された関連付けに基づいて、少なくとも一部のｑビットゲートを統合させてｋビットゲートを生成する。ｋビットゲートは、テーブル２３０において格納又はコード化されているｋビットゲートとソースコード又はオブジェクトコード命令との間の関連付けを用いて、ソースコード又はオブジェクトコードに変換される。実施形態によっては、ｋビットゲートの一又は複数のソース又はオブジェクトコード命令への変換は、当業者であれば、ルール又は一又は複数の命令に基づき、必要以上の実験なしに、簡単に行える。モジュール２３６の出力は、モジュール１１４と同等の難読化ソース又はオブジェクトコードを含むモジュール２５０である。このモジュール２５０は、図示されているように、モジュール１１５を用いて非セキュアサーバー２８２に安全に送信可能で、これらのサーバーの電力、効率、復元力を用いて暗号化データ１４０に作用する。
【００４４】
図１及び図２Ｄにおいて、例示の目的で、プロセス、機器、及びデータ構造が、特定の配置の統合ブロックとして示されているが、他の実施形態では、一又は複数のプロセス又はデータ構造、又はその一部が、一又は複数のデータベースにおいて同じ又は異なるホスト上に異なる様態で配置されたり、又は省略される。また、一又は複数の異なるプロセス又はデータ構造が同じ又は異なるホストに含まれている。
【００４５】
図３は、一実施形態による、パブリックリソースに格納された暗号化データをパブリックリソース上で安全に処理するための方法を例示するフローチャートである。図３、そして続く図５及び図２６のフローチャートでは、例示の目的で、ステップが特定の順序の統合ステップとして記載されている。しかしながら、他の実施形態では、１又は複数のステップ、又はその一部が、異なる順序で実行されたり、時間的に重複したり、連続又は平行して実行されたり、省略されたりする。また、一又は複数の追加のステップが追加されているか、方法がいくつかの方法の組み合わせに変更されている。
【００４６】
ステップ３０１では、テーブル２３０が生成される。これは手動又は自動で行うことができる。完了すると、その結果がテーブル２３０としてコンピューター可読媒体に保存される。テーブル２３０のエントリは、少なくとも各ソースコード又はオブジェクトコード命令を一又は複数のｑビットゲートに関連付ける。実施形態によっては、ソースコード又はオブジェクトコードは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）のための命令である。いくつかの実施形態では、後方に向かうよりも、ソース／オブジェクトコードからｑビットゲートのシーケンスまで前方に向かって異なる関連付けが用いられる。例えば、前方方向では、縮小命令セットプロセッサ（ＲＩＳＰ）の各オブジェクトコード命令が、最少数のｑビットゲートに変換されるが、後方方向では、各ｑビットゲートが、単一のｑビットゲートを実行するためのＳＨＩＦＴ関数などの最も効率的なＲＩＳＰ命令に変換される。
【００４７】
統合を用いる一部の実施形態では、エントリがテーブル２３０に含まれ、一又は複数のソースコード又はオブジェクトコード命令のそれぞれからｋビットゲートへの変換（３＜ｋ≦Ｎ）を行う。ｑビット又はｋビットのゲートをソース／オブジェクトコード命令に変換することは、必要以上の実験を行わずとも、当業者にとっては明らかである。最も効率の悪い方法では、それぞれ（２３）と（２ｋ）の命令を回す必要がある。統合を用いない実施形態では、これらのｋビットゲートを含むエントリは、テーブル２３０から省略され得る。
【００４８】
ステップ３０３では、命令が生成され、それによりモジュール１１５が暗号化データ構造１４０から入力暗号文を取得し、結果の暗号文をデータ構造１４０に格納する。これは、例えばＳＱＬクエリに基づいて、手動又は自動で行うことができる。
【００４９】
ステップ３０５でも、命令が生成され、それによりモジュール１１４が暗号文を解読し、平文写像を適用し、結果として得られた平文を暗号化することで、結果的に暗号文を生成し、格納する。実施形態によっては、ステップ３０５は、写像をいくつかの写像セグメントに分割し、各セグメントの後に新しい暗号化命令を追加し、次のセグメントの前に対応する復号化命令を追加することを含む。オブジェクトコードをｑビットゲートに変換したり戻したりする実施形態では、ステップ３０５は、写像（セグメント）を実行するソースコードをコンパイルし、任意で先頭の復号化及び後続の暗号化セグメントをコンパイルして、ステップ３０７でｑビットゲートに変換されることとなるオブジェクトコードを生成する。
【００５０】
ステップ３０７では、テーブル２３０を用いて、ステップ３０５で生成された命令をｑビットゲートのシーケンスに変換する。実施形態によっては、テーブルは使用されず、代わりに、熟練したプログラマであれば誰でも作成できるゲートコンパイラが操作され、ソース／オブジェクトコードをｑビットゲートに変換する。いくつかの実施形態では、コンパイラとテーブル２３０の組み合わせが用いられる。また、いくつかの実施形態では、ＦＰＧＡ用のコンパイラが使用されるか、ゲートがＦＰＧＡ上に実装されるか、又はその両方となる。更に、いくつかの実施形態では、ステップ３０７は、モジュール２３２によって実行される。ステップ３０７の出力は、ｑビットゲートのモジュール２３３である。
【００５１】
ステップ３０９では、平文写像に対応するｑビットゲートがいくつかのセグメントに分割され、暗号化及び復号化ゲートがセグメント間に追加される。実施形態によっては、ステップ３０９は、各セグメントに含めるゲート数を決定することを含み、以下で説明するようにステップ３１１で決定された伝搬の深度に関連している。侵入の深度（例えばＪ、Ｊ’、Ｋ、Ｋ’、又はいくつかの組み合わせ）はトレードオフとして決定される。これは、深度が深いほど衝突が多くなり、衝突が増えるほど、生成されるゲートが増えるためである。難読化を高めるには深度を深くすることが望ましいが、生成されるゲートが多すぎると、生成されるコードが非常に長くなり、効率が悪い。セグメント数を決定するには、衝突によるゲート数の過剰化なく、写像を十分に難読化することが効果的である。単一のセグメントが最大の難読化を実現するが、復号化セグメント及び暗号化セグメントからの全てのゲートが写像セグメントを横切って移動すると、指数関数的に大きな一連のゲートになる。写像を非常に多くのセグメントに分割（例えば、写像セグメントにおいて各ゲートに一つなど）すると、難読化が弱くなる。バランスが良いのは、セグメント数がＮビットワードのビット数と同程度（シンボルＯ（）で表される）の場合である。ただし、最適なセグメント数は写像のタイプによって異なる。例えば写像が、乗算の場合のＯ（Ｎ２）のように多くのゲートを持つことは普通のことである。しかし、常にそうであるとは限らない。写像によっては、ゲート数が少ない場合もある。例えば、加算の場合のようなＯ（Ｎ）である。この場合、指数関数的増加なく統合をよく行うのに、Ｆ（ｘ）をセグメントに分割する必要はない。実際、これが、Ｆ（ｘ）をセグメントに分割して各セグメントがＯ（Ｎ）ゲートを持つようにすることが提案された理由である。その後、回路長の指数関数的な増加を招くことなく、ローカルで統合を実行できる。Ｏ（Ｎ２）ゲートを持つＦ（ｘ）写像の場合、およそＯ（Ｎ）セグメントを用いる。このセグメントあたりのゲート数を決定する例については、実施例のところで説明する。難読化の反転をさらに複雑にするためには、セグメントの長さと侵入の深度のいずれか又は両方にランダム要素を追加するとよい。
【００５２】
この平文写像のセグメント化が、ステップ３０５でソース／オブジェクトコードレベルで行われた場合、ステップ３０９は省略される。例えば、ステップ３０７及び３０９は、図２Ｄのモジュール２３２によって実行される。実施形態によっては、（ソース／オブジェクトコードレベルで書かれた暗号化／復号化セグメントを用いる代わりに）ｑビットゲートのシーケンスとして既に書かれている暗号化／復号化セグメントが用いられる。
【００５３】
ステップ３１１では、復号化に関与するｑビットゲートが、平文写像又はその現在のセグメントに関与するｑビットゲートを越えて前方に伝搬される。平文写像に移動する距離は、取得された侵入率と衝突によるゲート数の増加との間のトレードオフに基づいている。距離Ｊ（例えば、Ｊ個のゲート）は、復号化ｑビットゲートを平文写像（セグメント）に向けて又はそれを越えて前に移動させるために定義される。この距離を決定する方法の例については、実施例のところで説明する。既存の可逆ｑビットゲートとの衝突は、特定の手順を用いて解決されるが、これについては、以下、一般的な可逆３ビットゲートについては図５を参照し、制御ゲートについては図２６を参照し、説明する。また、実施例のところで、更に詳しく説明する。
【００５４】
ステップ３１３では、暗号化に関与するｑビットゲートが、平文写像又はその現在のセグメントに関与するｑビットゲートを越えて後方に伝搬する。平文写像に移動する侵入距離は、取得される深度と衝突毎のゲート数の増加とのトレードオフに基づいている。距離Ｋ（例えばゲート数Ｋ）は、暗号化ｑビットゲートを平文写像（セグメント）に向けて又はそれを越えて後ろに移動させるために定義される。この距離を決定する方法の例は、Ｋ＝Ｊを用いて、実施例のところで説明する。既存のｑビットゲートとの衝突は、以下、一般的な可逆３ビットゲートについては図５を参照し、制御ゲートについては図２６を参照し、説明する。また、実施例のところで、更に詳しく説明する。
【００５５】
実施形態によっては、他のグループ化が用いられる。例えば、復号化セグメントと写像セグメントが一つのグループ（グループＡ）にまとめられ、その後、ゲートが暗号化セグメント（グループＢ）からグループＡに移動され、グループＣとなる。
【００５６】
ステップ３１５では、ｑビットゲートの別の複合化平文写像セグメント暗号化シーケンスがあるかどうかが判定される。それがあった場合、モジュール２３５の難読化ｑビットシーケンスが生成されており、制御はステップ３１１に戻る。そうでない場合、制御はステップ３１７に進む。例えば、ステップ３１１、３１３及び３１５で説明されるループは、図２Ｄのモジュール２３４によって実行される。
【００５７】
ステップ３１７では、難読化ｑビットゲートモジュール２３５内のｑビットゲートのシーケンスが、一又は複数のｋビットゲートに置き換えられる（結合される）。ｑ＞３でｑビットゲートを統合させてｋビットゲートを生成するのは比較的簡単である。例えば、プログラムは、ｑビットゲートのシーケンスを与えられたｋビットゲートを生成する。これらの実施形態では、テーブル２３０は、ソース／オブジェクトコード命令をｑビットゲート（両方向）に関連付け、ｋビットゲートをソース／オブジェクト命令（一方向）に関連付ける。実施形態によっては、統合は用いられずに、ステップ３１７は省略される。
【００５８】
ステップ３２１では、難読化コードのｑビットゲート及びｋビットゲートが、テーブル２３０を使用してソースコード又はオブジェクトコードに変換され、難読化ソース／オブジェクトコードモジュール２５０が生成される。例えば、ステップ３１７及び３２１が図２Ｄのモジュール２３６により行われる。実施形態によっては、モジュール２３５は、モジュール２３５内のゲートのシーケンスを送信する前に統合が行われるのであれば、非セキュアサーバーに実装され得る。これは、クラウド上で利用可能な計算能力を活用する。
【００５９】
ステップ３２３において、難読化コード２５０及びデータ取得及び結果格納モジュール１１５は、非セキュアサーバー１８２に送られる。ステップ３２５では、非セキュアサーバーに、取得／格納モジュール１１５及び難読化コード２５０を実行させる。これらのモジュールを実行するための命令は、例えば、メッセージとして非セキュアサーバーに送信される。
２．実施例
２．１  一般的な３ビットゲート
【００６０】
図５は、一実施形態による、図３の方法のステップ３１１又はステップ３１３で使用されるような、第一の３ビットゲートを第二の３ビットゲートを越えて伝播する方法５００を例示するフロー図である。ここでは、３ビットｂ１、ｂ２、ｂ３に作用するゲートｇが、３ビットｂ１、ｂ２、ｂ３にのみ重要な作用を伴うｎビット文字列に作用するＧとして記述される記数法を用いる。ｎビットワードｘに作用する３ゲートプログラムＰは、Ｐ（ｘ）＝Ｇ３（Ｇ２（Ｇ３（ｘ）））又は択一的にＰ＝Ｇ３・Ｇ２・Ｇ１として表すことが出来る。したがって、より一般的には、ｍ３ビットゲートには、Ｐ＝Ｇｍ・Ｇｍ−１・Ｇｍ−２・・・Ｇ３・Ｇ２・Ｇ１である。さらに、プログラムＰは、ラインの順序付きリストｌと見なせる。
【００６１】
【数１】
2021507438.tif 000003
【００６２】
そうすることで、プログラムＰは一連の命令となり、各命令は、ライン番号ｌで与えられる順序番号と、ｘｉｌ、ｘｊｌ、ｘｋｌで示されるビットの三つ組と、指定された３ビットの順列ｇｌとを有する。各ラインにｎ（ｎ−１）（ｎ−２）ｘ８！という命令の可能性があり、その一部は同じ結果をもたらす（３ビットを並べ替えて、対応する順列ｇを選択できるため）。この縮退を取り除き様々な命令の数を取得する一つの方法は、ｘｉｌ＜ｘｊｌ＜ｘｋｌを選択することである。したがって、
【００６３】
【数２】
2021507438.tif 000004
【００６４】
の縮退命令を与え、そこでは記数法
【００６５】
【数３】
2021507438.tif 000005
【００６６】
であって、一度にｂをとるａアイテムの組み合わせの数を読み取る。
【００６７】
衝突ルール
ゲートの動きを説明するため、最もシンプルなケースを考える。ここでは二つの連続したゲートが異なる３ビットグループに作用し、したがって可換、つまりＧｌ・Ｇｌ−１＝Ｇｌ−１・Ｇｌとなる。プログラムラインに関しては、二つの連続したゲートが共通ビットを共有しない場合、つまり｛ｘｉｌ、ｘｊｌ、ｘｋｌ｝∩｛ｘｉ（ｌ＋１）、ｘｊ（ｌ＋１）、ｘｋ（ｌ＋１）｝＝０であれば、ｌとｌ＋１のラインは命令リストにおいて交換可能である。連続ゲートの交換は、これらの連続ゲートが衝突するとき、つまり、１、２、又は３ビットを共有するときまで継続可能である。
【００６８】
衝突の確率は次のように推定できる。ランダムなゲート分配の場合、連続する二つのゲートが、ｐ０、ｐ１、ｐ２、ｐ３に指定される０、１、２、又は３ビットを共有する確率は、下記の番号を付した方程式で与えられる。
【００６９】
【数４】
2021507438.tif 000006
【００７０】
ｎが大きい場合、ｐ１≒９／ｎ、ｐ２≒１８／ｎ２、ｐ３≒６／ｎ３、及びｐ０＝１−ｐ１−ｐ２−ｐ３≒１−９／ｎであることに注目されたい。ゲートがｌゲートを介して可換となる確率はｐ０ｌ＝（１−９／ｎ）ｌ≒ｅ−９ｌ／ｎである。つまり、衝突を用いない場合の平均侵入深度は約ｌ０＝ｎ／９である。
【００７１】
ｎビットワードを十分に暗号化するには、ｎ又はそれ以上のゲートが必要となる。したがって、衝突のない侵入深度はプログラムの暗号化セグメントの一部である。したがって、一般的に、復号化セグメント又は暗号化セグメントを難読化するには不十分である。そのため、ゲートを隣接するセグメントにさらに押し込むには、衝突を処理するためのアプローチを含める必要がある。例えば、衝突前の情報を、衝突するゲートのペアを越えて複数のゲートに混合させるアプローチである。図５のステップは、一般的な３ビットゲートの衝突ゲートを越えて情報を移動する方法を示している。ここで、衝突する二つのゲートは、第一３ビットゲート及び第二３ビットゲート、又はゲートＧａ及びＧｂとして参照する。
【００７２】
ステップ５０１では、第一３ビットゲート及び第二３ビットゲートによって共有されるビット位置の数が決定される。共有ビット位置がない場合、制御はステップ５０３に進む。ステップ５０３では、第一３ビットゲートは、衝突なく第二３ビットゲートを通過して移動でき、追加のゲートは生成されない。次に、制御はステップ５５１に進む。
【００７３】
ステップ５５１では、第一ゲートが十分に、例えばゲート目標数（例えば、Ｊ又はＫ）によって示されるいくつかのゲートだけ伝搬したかどうかが判定される。ステップ５５１は、これまでに伝搬した距離をインクリメントすること（例えば、伝搬した距離に１を加えること）を含む。伝搬した距離がゲート目標数よりも短い場合、制御はステップ５５３に進む。そうでない場合、プロセスは終了する。
【００７４】
ステップ５５３では、次の第一ゲート及び次の第二ゲートが決定される。例えば、２ビットの衝突でＧｂにＧａを越えて移動させるためにＧｃからＧｆまでのゲートをいくつか生成し、その後に「ＧａはＪ（又はＫ）ゲートを越えて移動したか？」と問う。二つの共有ビットがある衝突で、ＧａがＧｂを通過すると、ＧａはディセンデントゲートＧｆに取って代わられ、それが回路内の次のゲートを通過できる、ということに注目されたい。共有ビットが一つだけの場合の衝突も同様であるが、これらの衝突には７つのデブリゲートがある（例えばＧｃ、Ｇｄ、Ｇｅ、Ｇｆ、Ｇｇ、Ｇｈ、Ｇｉ）。この場合、ディセンデントゲートＧｉはＧａに取って代わり、さらなる移動を行う。もちろん、侵入が反対方向に進んでいる（ＧｂがＧａを越えて移動している）場合、両タイプの衝突（２ビット共有及び１ビット共有）でＧｂに取って代わるのはディセンデントゲートＧｃである。次に、制御はステップ５０１に戻り、次の第一ゲート及び第二ゲートによって共有されるビット位置の数を確認する。
【００７５】
ステップ５０１で三つのビット位置全てが共有されると判定された場合、制御はステップ５１１に進む。ステップ５１１では、二つの３ビットゲートを、同じ結果を達成する異なる３ビットゲートに置き換える（組み合わせる）ことができる。図６は、一実施形態による、三つ全てのビットで衝突する一対の３ビットゲートを例示するブロック図である。結果は単一の３ビットゲートとなる。この場合、３ビットゲートの数は衝突後に減少する。しかし、伝搬距離は１ずつインクリメントされる。結果の３ビットゲートを同じビットに作用する二つの３ビットゲートにデコンボリューションする方法が８！つあることに注目されたい。よって、この衝突から生じる統合を元に戻すことは、可能性のツリーが生成されるため、困難である。次に、制御は、上記したステップ５５１以降に進む。
【００７６】
ステップ５０１で二つのビット位置が共有されると判定された場合、制御はステップ５２１に進む。ゲートＧａ及びＧｂを難読化しないＧｃ及びＧｄに変更するのには、自明な方法がある。その一つは、二つのゲート間の二つのビットにゲージ変換を入れることである。図７は、一実施形態による、２ビットで衝突する一対の３ビットゲートＧｇ１及びＧｇ２を例示するブロック図である。先行するゲートシーケンスのＧａ及びＧａ−１ペアがキャンセルされる（ＧａはＧａ−１を乗算して出る）ので、この手順は、１）回路のトポロジを変更せず、２）二つのゲート間のステップにのみ影響を与えるということから、効果的ではない。代わりに、ステップ５２１から５４１に示されているプロセスが、より高い難読化を提供する。
【００７７】
ステップ５２１において、プロセスは、二つの３ビットゲート（それぞれ第１及び第２のＧａ及びＧｂとして示される）を、Ｇｃ、Ｇｄ、Ｇｅ、Ｇｆとして示される４つの３ビットゲートとＢｋ及びＢｌとして示される二つのブレイディングゲートで置き換え始める。ブレイディングゲートは５ビットゲートであるが、一度決定されると、簡単に決定可能な二つ以上の３ビットゲートに変換可能である。以下にこれを提供する。置換ゲートは式１のように配置され、これは図８に示されている。
Ｇｂ・Ｇａ＝Ｇｆ・Ｂｌ・Ｇｅ・Ｇｄ・Ｂｋ・Ｇｃ      （１）
図８は、一実施形態による、２ビットで衝突する一対の３ビットゲートを例示するブロック図である。
【００７８】
ステップ５２３では、図９に示される６タイプのブレイディング置換の中からＢ１及びＢｋを選択する。図９は、一実施形態による、二つのビットで３ビットゲートが衝突する際のデブリゲートの生成に有用な一連のブレイディング置換を例示するブロック図である。Ｂ０、Ｂ１、及びＢ２はそれら自体の逆元であるが、Ｂ３、Ｂ４、及びＢ５の場合は異なる。ＢｋとＢｌはどちらも、これらの６つとその逆元の中から任意に選択出来る。便宜上、衝突デブリを決定するのに、図８におけるｋとｌを、Ｂｌ＝Ｂｋ−１（上付き文字−１はゲートを逆方向に通ることを示す）というように選択できる。この場合、ゲートＧｄ及びＧｅを超える順列の移動から生じるゲートＧｄ’及びＧｅ’の構成は、三つしか考えられない。図１０は、Ｂ１＝Ｂｋ−１を選択する一実施形態による、二つのビットで３ビットゲートが衝突する際に生成される一連のデブリゲートを例示するブロック図である。
【００７９】
ステップ５２５では、二つの境界３ビットゲートＧｃ及びＧｆが、それぞれ８４０組のゲートを有する６つの所定テーブルのうちの特定のテーブルからランダムに選択される。ブレイディングゲートＢｋが選択されたら、ゲートＧｃ、Ｇｄ、Ｇｅ、及びＧｆを判定するため、まず事前に作成されたテーブルからランダムにゲートＧｃ及びＧｆを選択し始める。このランダムな選択は、元ゲートの結果ゲートからのリバースエンジニアリングを防ぐ上で有利である。このようなテーブルは６つあり、それぞれに８！／（２！４！）＝８４０の異なる種類の３ビットリバーシブルゲートが含まれている。これらのテーブルの目的は、可能性がある一連のゲート（Ｇｃ、Ｇｄ、Ｇｅ、Ｇｆ）を非同等のものに制限し、ゲートＧｄとＧｅの検索を容易にすることである。６つの所定テーブルのメンバーシップにゲートが従う条件を以下に示す。図１１は、一実施形態による、二つのビットで３ビットゲートが衝突する際のデブリゲートの生成に有用なテーブルを構築するための条件を例示するブロック図である。
【００８０】
テーブル１からテーブル３は、全てのｉ，ｊ＝１〜８４０に対してＧｃｉ≠Ｇｃｊ・ｇとなるように、ビットｘ２、ｘ３、ｘ４に作用するゲート｛Ｇｃｉ｝を含む。テーブル１の場合、ｇはビットｘ４に対する順列とビットｘ２及びｘ３に作用する２ビットゲートとの積である。テーブル２の場合、ｇはビットｘ３に対する順列とビットｘ２及びｘ４に作用する２ビットゲートとの積である。テーブル３の場合、ｇはビットｘ２に対する順列とビットｘ３及びｘ４に作用する２ビットゲートとの積である。テーブル４からテーブル６は、全てのｉ，ｊ＝１〜８４０についてＧｆｉ≠ｇ・Ｇｆｊとなるように、ビットｘ１、ｘ２、ｘ３に作用するゲート｛Ｇｆｉ｝を含む。テーブル４の場合、ｇはビットｘ１に対する順列とビットｘ２及びｘ３に作用する２ビットゲートとの積である。テーブル５の場合、ｇはビットｘ２に対する順列とビットｘ１及びｘ３に作用する２ビットゲートとの積である。テーブル６の場合、ｇはビットｘ３に対する置換とビットｘ１及びｘ２に作用する２ビットゲートの積である。テーブルは任意の方法で生成できる。例えば、いくつかの実施形態では、テーブルはトライアル・アンド・エラーによって生成される。すなわち、全ての３ビットゲート（８！ゲート）を通過し、ゲート毎に２ビットゲート（４！＝２４の可能性あり）と１ビットゲート（２！＝２の可能性あり）との積に等しいもの全てを排除することで生成される。そのため、全体としては、テーブルごとに８！×４！×２！＝１，９３５，３６０ケースをチェックする必要がある。これは間違いなく既存のプロセッサで実行可能である（例えば、各テーブルで一時間もかからないであろう）。
【００８１】
ブレイディングゲートタイプ選択と選択表の対応は以下の通りである。Ｂ０及びＢ１の場合、ゲートＧｃはテーブル１からランダムに選択され、ゲートＧｆはテーブル４からランダムに選択される。Ｂ２及びＢ３の場合、ゲートＧｃはテーブル２からランダムに選択され、ゲートＧｆはテーブル５からランダムに選択される。Ｂ４とＢ５の場合、ゲートＧｃはテーブル３からランダムに選択され、ゲートＧｆａｔはテーブル６からランダムに選択される。
【００８２】
ステップ５２７では、下記数式（２）を解くため、残りの二つの３ビットゲートＧｄ及びＧｅが選択される。
Ｇｅ・Ｇｄ＝Ｏ＝Ｂｋ・Ｇｆ−１・Ｇｂ・Ｇａ・Ｇｃ−１・Ｂｋ−１    （２）
なお、重なるビットが二つしかない積Ｇｅ・Ｇｄは、Ｏで示されている４ビットオペレーターゲートに対応する。図１２は、一実施形態による、二つのビットで３ビットゲートが衝突する際にいくつかのデブリゲートＧｄ及びＧｅを決定するために分解される４ビットオペレーターＯを例示するブロック図である。ステップ５２７では、数式２の解が見つかるかどうかが判定される。見つからない場合、制御はステップ５２５に戻り、異なる二つの境界ゲートＧｃ及びＧｆをランダムに選択し、残りのゲートＧｄ及びＧｅについて解くためにステップ５２７の試みを繰り返す。解が見つかると、制御はステップ５４１に進む。ここでは多数対のゲートＧｄ及びＧｅが見つかる事が多い。経験的に、２５００の任意のゲートＧａ及びＧｂから始めて、１．２５％に一つの（Ｇｃ、Ｇｄ、Ｇｅ、Ｇｆ）解があり、３１．８０％に二つから１０の解がある。４９．１６％には、１１から１００の解があり、１１．７６％には１０１から１０００の解がある。６．０４％には１０００を超える解がある。ゲージ対称性Ｇｂ・Ｇａ＝Ｇｂ・ｇ・ｇ−１・Ｇａのため、Ｇａ及びＧｂゲートの全ての（８！）２ペアをテストする必要があるわけではないことに気付いた。ここでは、ｇは、ＧａとＧｂが共有するビットに作用する２ビット順列と、Ｇａ又はＧｂからの非共有ビットに作用する１ビット順列を含むゲートである。
【００８３】
ステップ５２１から５２７のオペレーションを更に説明するために、図１３ＡのゲートＧａ及びＧｂについて考える。図１３Ａは、一実施形態による、二つのビットで３ビットゲートＧａ及びＧｂが衝突する際の一連のデブリゲートＧｃ、Ｇｄ、Ｇｅ及びＧｆを例示するブロック図である。ゲートＧａからＧｆに対応する真理値表は、下付き文字でラベル付けされ、図１３Ｂに示されている。図１３Ｂは、一実施形態による、二つのビットで特定の３ビットゲートＧａ及びＧｂが衝突する際のデブリゲートＧｃ、Ｇｄ、Ｇｅ、及びＧｆの一連の真理値表を例示する図である。
【００８４】
ステップ５４１では、ここで説明するように、二つの共有ビット位置に基づいて、ステップ５０１からステップ５２１に入ったかどうかが判定される。入っている場合、衝突について解決がなされ、制御は上記のステップ５５１に進み、さらなる伝搬が必要かどうかを確認する。入ってない場合、制御は、以下に説明するステップ５４２に進む。
【００８５】
ステップ５０１において、一つのビット位置のみが共有されると判定された場合、制御はステップ５３１以降に進み、二つの共有ビット位置を有するゲートについての上記の解を利用する。ステップ５３１では、第一ゲート（Ｇａ）の前にスワップゲートＳ１が追加され、それにより二つのビットが第二ゲート（Ｇｂ）と共有される。スワップゲートは、値を変更せずに２ビットの位置を交換する２ビットゲートであり、１ビットの値又は位置を変更しない縮退３ビットゲートで実施可能である。逆スワップゲートＳ１−１は、ゲートＧａの後であってゲートＧｂの前に追加される。なお、Ｓ１−１＝Ｓ１である。結果のゲートは数式３ａで与えられる。
Ｇｂ・Ｇａ＝Ｇｂ・Ｓ１−１・Ｓ１・Ｇａ＝Ｇｂ・Ｓ１−１・Ｇａ’・Ｓ１
＝Ｇｂ・Ｓ２・Ｇａ’・Ｓ１        （３ａ）
ここで、Ｇａ’はＧａに基づくゲートであるが、スワップゲートＳ１の結果としてＧｂと重なる二つのビットを有する。Ｇａ’はＳ１をゲートＧａの前に移動することによって形成される。一つのスワップゲートは回路の内部に留まり、Ｓ２という名前が付けられている。もう一つは外側に移動し、Ｓ１という名前が付けられている。しかしながら、どちらも同じ２ビットをスワップする。Ｇａ’は、ゲート定義でビットをスワップすることにより、Ｇａから取得できる。選択されたゲートについては、スワップ挿入を行う方法が４つあり、これらの方法は、どのビットがスワップされるか、どのようにスワップされるかに応じて用いられる。したがって、衝突を進めるには、合計で８つの方法があるということになる。
【００８６】
図１４は、一実施形態による、一つのビットで３ビットゲートが衝突する際にスワップゲートを導入するための８つの例示的な方法を示すブロック図である。図示の実施形態では、ゲートＧａはビットｘ１、ｘ２、ｘ３に作用し、ゲートＧｂはビットｘ３、ｘ４、ｘ５に作用する。したがって、一つのビットｘ３で衝突がある（ビットは互いに隣接している必要はない）。以下では、第一の方法のみが更に展開される。一つのゲートＧａが選択され、その第一ビットがゲートＧｂの第二ビットとスワップされる場合であるが、当該プロセスは他の７つの方法にも容易に適用可能である。図１５は、一実施形態による、一つのビットで３ビットゲートが衝突する際に非自明なデブリゲートを生成する一連のステップを例示するブロック図である。図１４に示されている最初のオプションは、第一ビットと第四ビットをスワップするＳ１＝Ｓ２を用いた図示例について、図１５に示されているステップ１の結果を生成する。
【００８７】
ステップ５３３では、別の一対のスワップゲートＳ３及びＳ４＝Ｓ３−１が、Ｇａ’と逆スワップゲートＳ２との間に追加される。二つのスワップゲートは、二つの衝突するビットをスワップ及びアンスワップする。その結果は下記数式３ｂで表される。
Ｇｂ・Ｇａ  ＝  Ｇｂ・Ｓ２・Ｓ４・Ｓ３・Ｇａ’・Ｓ１        （３ｂ）
このステップは、図１５のステップ２として、例示された実施形態用に示されている。二つのうちの最初のＳ３はＧａ’とマージされてＧａ”を形成し、２番目のＳ４は逆スワップゲートＳ２とマージされてＧｐを形成する。
Ｇｂ・Ｇａ  ＝  Ｇｂ・Ｇｐ・Ｇａ”・Ｓ１        （３ｃ）
ｗｈｅｒｅ  Ｇａ”＝Ｓ３・Ｇａ’ａｎｄ  Ｇｐ＝Ｓ２  Ｓ４
結果には、それぞれが二つのビット位置を共有する三つのゲートＧａ”、Ｇｐ、Ｇｂが含まれる。このステップは、図１５のステップ２として、例示された実施形態用に示されている。
【００８８】
次に、制御はステップ５２１に移り、人工的に生成されたゲートＧｐ及び元ゲートＧｂを、２ビット衝突について上述したように、４つのゲート及び二つのブレイディングゲートで置き換えて、下記数式４ａ及び４ｂを提供する。
Ｇｂ・Ｇａ＝Ｇｂ・Ｇｐ・Ｇａ”・Ｓ１
＝Ｇｆ・Ａ・Ｇｃ・Ｇａ”・Ｓ１        （４ａ）
ｗｈｅｒｅ  Ａ＝Ｂｌ・Ｇｅ・Ｇｄ・Ｂｋ    （４ｂ）
【００８９】
このステップは、図１５のステップ４として、例示された実施形態用に示されている。
【００９０】
しかしながら、今回は、ステップ５２７で解Ｇｆ・Ａ・Ｇｃ  Ｇｆが見つかり、制御がステップ５４１に進むと、テストに対する答えは「ノー」であり、元ゲートＧａ及びＧｂは二つの場所を共有していなかった。そして、制御はステップ５４２に進む。
【００９１】
ステップ５４２では、２ビット衝突が、元の１ビット衝突によって生成された最初の衝突であるかどうかが判定される。例えばＧｐ及びＧｂである。最初の衝突であれば、制御はステップ５４３に進む。
【００９２】
ステップ５４３において、最初に解決された２ビット衝突から生じた第一ゲートＧｃは、スワップされた元ゲートＧａ’とスワップゲートＳ３とのマージから残ったゲートＧａ’’と衝突させられる。その結果は、二つのビット衝突について上記したように、４つのゲートと二つのブレイディングゲートとなり、下記数式５ａと５ｂが提供される。ゲートＧａによって導入された情報の最も深い侵入を反映するため、便宜上、外側のゲートはＧｆ’の代わりにＧａ’’’と呼ぶ。
Ｇｂ・Ｇａ＝Ｇｆ・Ａ・Ｇｃ・Ｇａ”・Ｓ１
＝Ｇｆ・Ａ・Ｇａ’”・Ｂｌ’・Ｇｅ’・Ｇｄ’・Ｂｋ’・Ｇｃ’・Ｓ１
＝Ｇｆ・Ａ・Ｇａ’”・Ｂ・Ｇｃ’・Ｓ１                  （５ａ）
ｗｈｅｒｅ  Ｂ＝Ｂｌ’・Ｇｅ’・Ｇｄ’・Ｂｋ’        （５ｂ）
【００９３】
このステップは、図１５のステップ５として、例示された実施形態用に示されている。
【００９４】
ステップ５４２において、２ビット衝突が元の１ビット衝突によって生成された最初の２ビット衝突ではないと判定された場合、制御はステップ５４５に移り、ステップ５４３からの結果式５ａを処理する。
【００９５】
ステップ５４５では、衝突が、ステップ５４３の衝突から生じる外側ゲートＧｆに対して下記数式６のとおり影響を与えるまで、残りのスワップゲートＳ１が、ゲートＡ・Ｇａ’’’・Ｂ・Ｇｃ’と衝突する。２ビットスワップゲートＳ１と３ビットゲートＧｃ’との衝突については、Ｇｃ’と２ビット重なる縮退３ビットゲートＧ１として扱うことができるので、２ビット衝突方法を用いることが可能である。この種の衝突の場合、シンプルな結果となることが分かった。スワップゲートＳ１は３ビットゲートを「通過」し、文字通りビットラインをスワップする。スワップゲートＳ１は、ゲートＧｆに到達するまで、ゲートを変えながら、通過する。構造上、ゲートＳ１とＧｆは２本のビット線を共有している。したがって、Ｓ１はＧｆに吸収可能で、その表記を、Ｇｆのように同じビット線に作用するＧｆ’とする。
Ｇｂ・Ｇａ＝Ｇｆ’・Ａ’・Ｇａ’’’’・Ｂ’・Ｇｃ’’          （６）
なお、両順列Ａ並びにＢ及びＡ’並びにＢ’について、二つの３ビットゲートに関する構成が可能性的に三つある（例示された実施形態用に、図１５において挿入として示されている）。これは２ビット衝突の実施中になされたランダムな選択によって決まる。このプロセスの最終結果は、元ゲートＧａ及びＧｂに相当する７つの３ビットゲートのシーケンスを確立するものである。
【００９６】
次に、制御は上記のステップ５５１に進み、更なる伝搬が必要かどうかを確認する。
【００９７】
実施形態によっては、暗号化データに作用する難読化コードは、難読化される必要のないプログラム全体のうちの一部である。これらの実施形態のいくつかでは、難読化コードは、難読化されていない命令の中に埋め込まれる。
【００９８】
多重暗号化
上記のステップ３０９では、ゲートが衝突する前に、写像ｆを表すゲート全てにわたって、復号化及び暗号化ゲートが断続的又は定期的に追加される。そのステップとその結果の難読化を、３ビットゲートを用いて説明する。暗号化がおよそｎ（（ｎ）として表記）のゲート（通常、ゲートＧａの場合、ビットｉａ、ｊａ、ｋａに作用）で行われる場合、次の方法がよい。図１６に示すように、写像ｆを積ｆ＝ｆｐ・ｆｐ−１・・・ｆ２・ｆとして分解する。図１６及び図１７は、一実施形態による、ゲートを衝突させることによってプログラムをさらに難読化するための中間暗号化及び復号化ステップの導入を示すブロック図である。暗号化を定期的に導入する場合、ｆにｎｇゲートがあるときは、ｒ＝１〜ｐ−１の写像ｆｒそれぞれがｎｇ／ｐゲートを持つように選択される。ここでｆｐは残りのゲート全てを含む。次に、下記の数式７で与えられるように、定期的な暗号化を表す。
Ｅ’・ｆ・Ｅ−１＝（Ｅ’・ｆｐ・Ｅｐ−１−１）・・・（Ｅｒ・ｆｒ・Ｅｒ−１−１）・・・（Ｅ２・ｆ２・Ｅ１−１）・（Ｅ１・ｆ１・Ｅ−１）                （７）
図１７に示すように、ｒ＝１〜ｐ−１のそれぞれについて、異なる暗号化／復号化順列Ｅｒ、Ｅｒ−１を自由に選択することができる。
【００９９】
なお、各ブロック（Ｅｒ・ｆｒ・Ｅｒ−１−１）は、それ自体が、データの復号化、計算、暗号化を行う計算例である。これらのブロックが難読化されると、それらの積も難読化される。各ブロックが難読化されるということは、各ブロックの出力を見ても、暗号化／復号化の部分なのか計算結果ｆｒなのか推測できないという事である。
【０１００】
Ｅｒ−１−１とＥｒそれぞれにａｎゲートが含まれているブロック（Ｅｒ・ｆｒ・Ｅｒ−１−１）を難読化する方法はいくつかある。ここで、ａは定数Ｏ（１）であり（ａ＝３又は４であれば、多くのセキュリティ目的のために十分）、ｆｒはｂｎ〜ｎｇ／ｐゲートを含むと想定される。図１８は、一実施形態による、難読化プログラムを生成するための一連のステップを三例示すブロック図である。この図１８は、数式Ｅｒ・ｆｒ・Ｅｒ−１−１を難読化回路Ｃｒに統合するステップを示している。（ｉ）では、Ｅｒ−１−１とｆｒをブロックＡｒにマージし、ＥｒからのゲートをブロックＢｒとしてブロックＡｒを通って動かす（図３のステップ３１３に対応）。（ｉｉ）では、ｆｒとＥｒをブロックＡｒにマージし、Ｅｒ−１−１からのゲートをブロックＢｒとしてブロックＡｒを通って動かす（図３のステップ３１１に対応）。（ｉｉｉ）では、Ｅｒからのゲートを、ブロックＢｒとして、Ａｒとしてのｆｒを通って移動させ、それにより統合ブロックＡｒ’が生じ、次にＥｒ−１−１からのゲートをブロックＢｒ’としてブロックＡｒ’を通して移動させる（図３におけるステップ３１１と３１３の両方に対応）。
【０１０１】
図２３（ａ）から図２３（ｃ）を参照して、スキーム（ｉ）を詳細に説明する。図２３（ａ）から図２３（ｃ）は、スキーム（ｉ）の一実施形態による、写像コードへの暗号化／復号化ゲートの移動距離を例示するブロック図である。この説明を他のスキームにまで広げることは難しいことではない。
【０１０２】
スキーム（ｉ）に従うことで、システムは、ａｎゲートがＥｒにあり、（ａ＋ｂ）ｎゲートが（ｆｒ・Ｅｒ−１−１）にあるＥｒ・（ｆｒ・Ｅｒ−１−１）として認識可能である。難読化は、Ａｒ側と呼ばれる（ｆｒ・Ｅｒ−１−１）とＢｒ側と呼ばれるＥｒとの統合によってなされる。Ａｒのゲート数又は長さは、下記数式８ａで与えられる。
ｌ（Ａｒ）＝（ａ＋ｂ）ｎ．                        （８ａ）
【０１０３】
この例では、図２３（ａ）に示すように、ｉ＝１、２、・・・ａｎのＢｒ内ゲートは、Ｇｂｒとされ、それぞれ下記のようにＡｒに入れられることとなる。まず、ＡｒとＢｒとの間のインターフェースに最も近いＢｒ内ゲートをとる。これは、ループの最初のステップでは、ゲートＧｂ１であり、Ａｒ内へ、Ａｒ回路の先頭（インターフェースを間にしてＡｒにおける反対側）に至るまで（例えば、移動がＡｒの第一ゲートに影響を及ぼすまで）押される。結果（全ての衝突の後）は、一方に回路Ａｒ（１）、他方にゲートＧｂ２〜Ｇｂａｎを含む回路Ｂｒ（１）となる。ゲートＧｂ１がＡｒにおける反対側に押されるとともに、Ａｒ側のサイズｌ（Ａｒ）をＡｒ（１）のサイズｌ（Ａｒ（１））に増加するゲート衝突が起こる。
【０１０４】
長さの増加ｌ（Ａｒ（１））−ｌ（Ａｒ）は下記のように推定される。上記において導出された衝突のない侵入深度はｌ０＝ｎ／９なので、
【０１０５】
【数５】
2021507438.tif 000007
【０１０６】
の衝突となる。衝突ごとに（δ−１）のゲートが回路に追加される。ここで、１ビットの衝突ではδ＝６であり、２ビットの衝突ではδ＝３である（二つの衝突ゲートが一つのゲートにマージされることから、３ビットの衝突ではδ＝０となる）。上記において導出されたように、ｐ１はｐ２よりｎ次数の係数だけ大きく、ｐ２もｐ３よりもｎの係数だけ大きくなることから、１ビットの衝突が可能性としては高い。したがって、十分に大きいｎの場合、Ａｒ側の長さは下記数式８ｂで与えられるようにインクリメントされる。
【０１０７】
【数６】
2021507438.tif 000008
【０１０８】
Ｋが回路長ｌ（Ａｒ）よりも大きい値に事前設定されている場合、衝突ゲートは回路全体を移動するため、回路の全長はｌ（Ａｒ（１））まで増加する。これは、全長ｌ（Ａｒ（ｍ））がｍ番目のゲートのＫ以上になるまで、他のゲートでも繰り返される。次に、残りの移動されていないゲートは固定長Ｋだけ移動される。この手順であれば、回路の長さがレジスタＮ（＝ｎ）のサイズと共に指数関数的に増加しないことが確実である。
【０１０９】
Ｇｂ１を伝搬させた後、ゲートＧｂ２をとりＡｒ（１）に押し入れるのだが、Ｇｂ１のときのように最後まで行かせることはない。ここで、図２３（ｂ）に示されるように、Ａｒ（１）の端から
【０１１０】
【数７】
2021507438.tif 000009
【０１１１】
という距離で止める。このようにして、ゲートＧｂ２はＡｒ（１）に押し入れられ、最初のステップでゲートＧｂ１がＡｒ内で押されたのと同じ数のゲートを通る。結果は、下記数式８ｃを満たす長さの回路Ａｒ（２）である。
【０１１２】
【数８】
2021507438.tif 000010
【０１１３】
プロセスは、Ｂの全てのゲートに処理を行うよう繰り返す。ゲートＧｂｉを回路Ａｒ（ｉ−１）に押し入れ、その端から距離（ｉ−１）Δｌで止め、下記数式８ｄを満たす長さの回路Ａｒ（ｉ）を得る。
【０１１４】
【数９】
2021507438.tif 000011
【０１１５】
図２３（ｃ）に示すように、ステップ３１３の手順の最後に、Ｂｒ内の全てのａｎゲートをＡｒ側に押し終わり、二つの回路を回路Ｃｒに統合させる。統合回路の最終的な長さは、数式８ｄの反復から得られ、下記数式８ｅとなる。
ｌ（Ａｒ（ａｎ））＝ｌ（Ａｒ）＋ａｎ  Δｌ                （８ｅ）
Ｂｒ側のゲートのリストは、Ａ側に流れ込んでいる。言い換えると、ｌ（Ｂｒ（ａｎ））＝０なので、統合回路Ｃｒの全長は数式８ｅで与えられる。上記で定義したようにＡｒの長さに（ａ＋ｂ）ｎを代入し、式８ｂ又は８ｃ又は８ｄからΔｌの定義を代入すると、現在のセグメントの統合回路Ｃｒの長さが下記数式８ｆとして得られる。
ｌ（Ｃｒ）＝（ａ＋ｂ）｛１＋９ａ（δ−１）｝ｎ        （８ｆ）
衝突Ｇｂの最後のストップの位置が互いにΔｌ＝Ｋほど離れているため、Ｂｒのゲートは統合回路Ｃに沿って均一に散在していることに注目された。
【０１１６】
図３のループ３１１から３１５において、上記統合は、全てのセグメントｒ＝１〜ｐに対して行われる。この記数法は、Ｅ０−１＝Ｅ−１及びＥｐ＝Ｅ’であることに注意することで、最初の復号化と最後の暗号化に広げられる。これで、Ｅ’・ｆ・Ｅ−１と同等の完全な難読化回路の長さを計算できる。ここで分かるのは、（Ｅｒ・ｆｒ・Ｅｒ−１−１）ブロックのそれぞれが、数式８ｆで与えられる長さの難読化回路Ｃｒを生成するということである。ｆにはｎｇゲートがあり、各ｆｒにはｂｎ〜ｎｇ／ｐゲートが含まれていると想定されていることを想起されたい。したがって、
【０１１７】
【数１０】
2021507438.tif 000012
【０１１８】
のブロックがある。そのため、全難読化回路の長さｌ（ｏｂｆｕｓｃａｔｅ）は、式８ｆに係数
【０１１９】
【数１１】
2021507438.tif 000013
【０１２０】
を掛けて与えられるＣｒの長さである。
【０１２１】
元回路の暗号化部分と復号化部分のサイズはａｎで、元写像ｆのサイズはｎｇであるため、元回路の全長は２ａｎ＋ｎｇである。回路の長さを拡張した拡張係数Ｚは、下記数式９ａで与えられる。
【０１２２】
【数１２】
2021507438.tif 000014
【０１２３】
ｎｇ＞＞２ａｎと仮定すると、この後者の項は式（２ａｎ＋ｎｇ）で無視できるため、残りの項ｎｇは除外される。したがって、数式９ａは数式９ｂに縮小する。
【０１２４】
【数１３】
2021507438.tif 000015
【０１２５】
ａ〜３、ｂ〜１、δ−１〜５の代表的な値の場合、拡張係数はｚ〜５４４である。したがって、この実施例では、Ｅ’・ｆ・Ｅ−１の単一の区別不可能な３ビット可逆ゲートグループへの統合は、約５００のオーバーヘッド係数を招くこととなる。このオーバーヘッドは高いが、近年提案されている他の準同型の方法よりもはるかに小さい。多くの重要なアプリケーションでは、オーバーヘッド係数５００は、妥当で許容範囲である。
【０１２６】
統合
上記ステップ３１７では、複数の３ビットゲートが、少なくとも一つのｋビットゲートに組み合わされる（ｋ＞３）。上記ゲート衝突ルールを用いたあと、複数の３ビットゲートを一又は複数のより大きなｋビットゲートのそれぞれに組み合わせることにより、回路をさらに難読化できる。ｋビットラインの集合に作用するいくつかの３ビットゲートの積は効率的に決定でき、可能性がある２ｋ入力状態に対する置換オペレーションを生じさせる。しかしながら、逆問題、つまり２ｋ入力に対する順列を、一連のｋラインに作用する３ビットゲートにより生成されたより小さい順列の積に因数分解することは、難しい問題である。本明細書では、３ビットゲートを乗算して、内部コンポーネントの特定が難しいｋビットゲートを形成するプロセス例を「ゲート統合」のプロセスと呼ぶ。
【０１２７】
統合される複数の３ビットゲートの一群は、さまざまな方法で収集可能である。一つの例は、アクリーションのものであり、次のように行われる。まず、回路のどこかで３ビットゲートを選択し、ゲートのクラスターを開始（又はシード値を設定）する。次に、このゲートを使用して、少なくとも１ビットを共有する最初の隣接データを左又は右において探す。この第二ゲートはクラスターに追加される。クラスター内の二つのゲートで使用されるビットラインの数は最大で五つである。これらは、第一ゲートの最初の三つのビットラインと、第一ゲートでは使用されないが第二ゲートで使用される最大二つのビットラインである。クラスターを成長させるプロセス（アクリーション）は、クラスター内に既にあるゲートの左側又は右側にある３番目のゲートであって、少なくとも１ビットを共有しているものを探すことによって続行される。３番目のゲートが追加されたクラスターは、最大７本のビットラインに広がっている。このプロセスは、クラスターがｋ個のビットラインにまたがるまで繰り返される。本統合プロセスの例を図１９に示す。
【０１２８】
図１９は、一実施形態による、プログラムをさらに難読化するための、より多くのビットの複数ゲートを生成するための３ビットゲートの統合を例示するブロック図である。この図１９は、１５個の隣接する３ビットゲートから三つの隣接するゲートＡ、Ｂ、Ｃへの統合を示している。Ａは９ビットゲートであり、ＢとＣは８ビットゲートである。ｋビットゲートクラスター内の３ビットゲートの最小数はｈｍｉｎ＝（ｋ−１）／２である。クラスター内の全ての基本３ビットゲートの積は、ｋビットの２ｋ状態の空間に作用する順列Ｐである。この積は、ｚ＝０〜２ｋ−１の２ｋナンバーズリストＰ（ｚ）として計算及び格納可能である。
【０１２９】
順列Ｐを基本３ビット順列の積へ戻す又は因数分解することは難しい問題である。乗算してｋビット順列Ｐを生成する３ビットゲートについて、全てのあり得る組み合わせを徹底的に検索するには、少なくとも下記数式１０で与えられるＳ数のステップが必要となる。
【０１３０】
【数１４】
2021507438.tif 000016
【０１３１】
ｋが奇数の場合、例えばｋ＝１１ビットの場合、例えば最大５ビットのメモリを使用して、それぞれ最大１１ビットの２１１ワードのリストで順列Ｐを格納出来る（なお、３ビットゲートを統合することには、複数ゲートの前処理されたアクションをサーバーに送り、複数の３ビットゲートの積の結果をメモリに格納するという追加利点がある）。ただし、順列Ｐを因数分解するには、むしろ重い計算が必要となる。順列を元の３ビットコンポーネントに徹底的に因数分解するには、次数１０３２のステップが必要である。ｋ＝２１ビットの場合、７メガバイト未満のメモリを使用して順列Ｐを格納できるが、それでもＰを因数分解する基本３ビットゲートを徹底的に検索するには、１０７１ものステップが必要となる。
【０１３２】
なお、２ｋ状態にあるｋビットゲート又は順列は、３ビット演算の積として異なる因数分解を持つことが出来る。因数分解を見つけたとしても、難読化の反転に進歩があったとは言えない。上記スキームで実際に使用されたもの以外の順列を見つけた場合、実際には計算をさらに難読化してしまっているのである。
【０１３３】
乗算例
二つの数値ｘとｙを乗算し、結果としてｘ・ｙを生成する写像ｆについて考える。この写像を可逆ゲートで実施するには、補助ビットを使用する必要がある。図２０は、一実施形態による、２ビット乗算写像ｆのための３ビットゲートのシーケンスを例示するブロック図である。２ビット乗算回路は、６つのトフォリＴ、４つのＲ、▲Ｒバー▼３ビット可逆ゲートを活用する制御リップル加算器に基づいている。挿入図は、Ｒ及び▲Ｒバー▼ゲートのＣＮＯＴ及びトフォリゲートへの分解を示している。図２０は５つの補助ビットを採用している。ｘ及びｙを入力ととると、補助ビットはゼロに設定され、回路は出力としてｘ、ｘ・ｙ、及びゼロに設定された一つの補助ビットを出す。
【０１３４】
データと計算を暗号化するために、暗号化写像ＥとＥ’には、それぞれ約３０個の３ビット可逆ゲートが含まれている。写像ｆは部分写像ｆ１、ｆ２、及びｆ３の三つのブロックに分解され、それぞれがｆを定義する回路のサブセットであり、連続する部分写像の各ペアの間に暗号化及び復号化ブロックを挿入する。すなわち、Ｅ１及びＥ１−１をｆ１とｆ２の間に、Ｅ２とＥ２−１をｆ２とｆ３の間に挿入する。図２１は、一実施形態による、図２０の写像ｆへの中間暗号化及び復号化ブロックの挿入を例示するブロック図である。
【０１３５】
次に、図２２におけるブロックの統合に進む。最後のステップは、衝突の反転を実行不可能にするのに十分な大きさのｋを用いて、隣接する３ビットゲートのセットを統合してｋビットゲートを生成することを含む。図２２は、一実施形態による、図２１の複数の中間暗号化による２ビット乗算写像ｆの難読化のステップを例示するブロック図である。ブロックＡ１＝ｆ１・Ｅ−１とＢ１＝Ｅ１を統合して、回路Ｃ１を生成する。同様に、Ａ２＝ｆ２・Ｅ１−１とＢ２＝Ｅ２を統合し、そしてＡ３＝ｆ３・Ｅ２−１とＢ３＝Ｅ１を統合して、それぞれ回路Ｃ２及びＣ３を生成する。回路Ｃ３・Ｃ２・Ｃ１＝Ｐを組み合わせることで、難読化回路が生成される。
２．２制御ゲート
【０１３６】
実施形態によっては、ｑ−１制御ビットを有するＣＮＯＴゲートなどの制御ゲートが使用される。ここではｑ∈｛１、２、３、…｝である。制御ゲートは、ここで用いられているように、ヘッドビットとも呼ばれる単一のターゲットビットの値又は単にゲートのヘッドが、テールビットとも呼ばれる０個以上の制御ビットの値の写像であるゲートを意味しており、ゲートのテールと総称される。テールビットは、制御ビットへのバイナリ入力に基づいてヘッドビットに適用されるロジックを示す。テールビットへのバイナリ入力は変えられることがなく、単に次のゲートに送られるだけである。制御ｑビットゲートの使用には、一連の衝突ルールが単純になるという利点がある。一連の可逆３ビットゲートで表すことができる式は、いずれも制御ゲートのみで構成される一連のゲートとして再構成可能である。したがって、図３の全体的な方法３００のうちのステップ３０１では、実施形態によっては、各ソース／オブジェクトコード命令が、一又は複数の制御ゲートにテーブルで関連付けられる。制御ゲートに関して言えば、最も基本的な写像がどのように書けるかは、よく知られている。
【０１３７】
図２４（ａ）から図２４（ｃ）は、一実施形態による、一般的な可逆３ビットゲートの代わりに使用される制御ｑビットゲートを例示するブロック図である。単一のターゲットビットは、垂直十字が内側にある円で示される。制御ビットは、「真」タイプのロジックのもの（黒丸）又は「偽」タイプのロジックのもの（白丸）となりえる。偽タイプのロジックは、対応するビットの値が０の場合にのみ制御がアクティブになることを示す。最も単純な制御ゲートはＮＯＴゲート（図２４（ａ）を参照）であり、一つのビットのみに作用する（ｘ１→ｘ１’）、つまり、ターゲットビットの状態を反転する。ここで、アポストロフィはビット値のネゲートを示している。ＮＯＴゲートには制御ビットがないことに注目されたい。ＣＮＯＴは、図２４（ｂ）に示されるように、一つの制御ビット及び一つのターゲットビットを有する制御ゲートである。「真」タイプのロジックでは、ｘ１→ｘ１（出力は入力と同じで、これは全てのテールビットに当てはまる）及びｘ２→ｘ１▲直和▼ｘ２である。一方「偽」タイプのロジックでは、全てのテールビットにおいてそうであるようにｘ１→ｘ１及びｘ２→ｘ１’▲直和▼ｘ２である。ここで「▲直和▼」という記載は、排他的ＯＲ（ＸＯＲ）演算を示している。式ｘ１▲直和▼ｘ２は、ｘ１とｘ２の両方でなく、そのいずれかが真の場合に、真となる。トフォリゲートは、テールに二つの制御ビット、そしてヘッドに一つのターゲットビットがある。これには、図２４（ｃ）に示す４タイプがある。例えば、一つのタイプでは、両制御ビットが「真」タイプのロジックのものである場合、全てのテールビットがそうであるように、ｘ１→ｘ１及びｘ２→ｘ２となり、そしてｘ３→ｘ３▲直和▼ｘ１・ｘ２、つまりｘ３が、ｘ１とｘ２の積で排他的論理和をとられる。いずれかの制御ビットが偽タイプのロジックである場合、そのビットの値は排他的論理和及び乗算演算でネゲートされる。なお、可逆制御ゲートはＸＯＲ写像を用いて新しいヘッドビット値を定義する。他の論理演算については、すべて一連のＸＯＲ制御ゲートにおけるゲートの組み合わせによって得られる。
【０１３８】
図２４Ｄは、一実施形態による、統合又はゲート衝突から生じるゲートなどの６ビット制御ゲートを例示するブロック図である。図示の例では、６ビット制御ゲートは５つのテールビットを有している（三つの「真」と二つの「偽」）。ヘッドビットで実行されたロジックは、ヘッドビットに入力された値とテールビットに到達した値の積のＸＯＲであり、白丸で示されるようにネゲートされている。以降、このセクション２．２では、文脈から明確でない限り、制御対象タイプのゲートを単にゲートと呼ぶ。図２５は、一実施形態による、一般的な３ビットゲートの代わりに使用される制御ゲートを例示する略式ブロック図である。この図２５は、制御ゲートについて簡略化した図式表現を示しており、テールのすべての制御ビットをボックスに置き換えてある。場合によっては、一又は複数の制御ビットがボックスから取り出され、ゲート衝突を差別化出来るよう明確に示される。
【０１３９】
各制御ゲートｇは、ヘッド（制御されたビットアドレス）とテールを含むリストで分類可能である。これは、関連する真又は偽のロジックを持つビットアドレスのリストであって、簡略化のために以降ビーズと呼ばれる。各ビーズｂは、制御ビットアドレスｉ（ｂ）を含むペア（ｉ（ｂ）、σ（ｂ））に対応し、加えて、制御がネゲートされているか（σ（ｂ）＝１、白丸に対応）否か（σ（ｂ）＝０、黒丸に対応）に対応している。例えば、［３、［（１、０）、（２、０）］］は、ネゲートなくビット１と２によって制御されるビット３に作用するトフォリゲートである（ｘ１→ｘ１、ｘ２→ｘ２、及びｘ３→ｘ３▲直和▼ｘ１・ｘ２）。別の例において、［２、［（１、１）］］は、ビット１が偽の場合にビット２に作用するＣＮＯＴであるため、ビット１の値はネゲートされる（ｘ１→ｘ１、ｘ２→ｘ２▲直和▼ｘ１’）。ビット１のＮＯＴゲートは、シンプルに［１、［］］として示され、テールが空、つまりテールビットがない。ゲートｇのヘッドとテールを示すためにｈ（ｇ）とｔ（ｇ）を採用しており、（ａｇａｉｎ）（ｉ（ｂ）、σ（ｂ））がビットアドレスとビーズ制御タイプｂ∈ｔ（ｇ）をそれぞれ示している。制御ビットにゲートｇの論理関数は下記数式１１のように書き込むことができる。
【０１４０】
【数１５】
2021507438.tif 000017
【０１４１】
衝突
図２６は、一実施形態による、図３の方法のステップで使用されるような、第二制御ｑビットゲートを通過して第１制御ｑビットゲートを伝搬する方法を例示するフロー図である。量子回路を最適化するときに制御ゲートを組み合わせる先のルールと異なり、方法２６００で実施されるこれらのルールは、すべての制御ビットが真のタイプのロジックのものである必要はない。この方法は、例えば、図３の方法３００のステップ３１１又はステップ３１３、あるいはその両方において、互いに通過して移動する二つの隣接するゲートＧａ及びＧｂから始まる。
【０１４２】
図２７（ａ）から図２７（ｄ）は、一実施形態による、制御ゲートと共有ターゲット又は制御ビットとの衝突を例示するブロック図である。図２８（ａ）及び図２８（ｂ）は、一実施形態による、制御ゲートと異なる非重複制御ビットとの衝突を例示するブロック図である。図２９（ａ）から図２９（ｄ）は、一実施形態による、あるゲートのヘッドの１ビットが他のゲートのテールの１ビットと重なる制御ゲートの衝突を例示するブロック図である。これらのタイプの衝突はワンヘッド衝突と呼ばれる。図３０（ａ）から図３０（ｄ）は、一実施形態による、両ゲートのヘッドの１ビットが他のゲートのテールの１ビットと重なる制御ゲートの衝突を例示するブロック図である。これらのタイプの衝突はツーヘッド衝突と呼ばれる。図中のＸとＹは、衝突に関与しない二つの衝突ゲートＧａ及びＧｂの制御ビットに対するブール関数を表している。これらは、他のゲートの制御ビットと重複しない制御ビットである。制御ビットのみがその値を変更できることを想起されたい。
【０１４３】
ステップ２６０１において、二つのゲートＧａ及びＧｂが同一であるか、すなわち、同じビット及び同じターゲットビットに作用する同じテールを有するかどうかが判定される。これを図２７（ａ）に示す。なお、両テールにＸの表記が付してあり、これは、テールが同一であることを示している。これは、他の衝突によって生成されたデブリゲートの結果として発生する可能性がある。論理的には、これにより常に第二ゲートが第一ゲートのアクションを取り消す結果となり、組み合わせの最終結果はアクションなしということになる。したがって、ステップ２６０１で二つのゲートが同一であると判定された場合、ステップ２６０３で、図２７（ａ）に示すように、両ゲートが回路から除かれる。図２７（ａ）の例のように、このゲート数の削減をもたらすタイプの衝突は、簡略化と呼ばれる。次に、制御はステップ２６５１に進む。
【０１４４】
実施形態によっては、ステップ２６０１は、同じヘッドビット及び一つのテールビットを除いて同一であるテールビットを有する隣接ゲートに関して、簡略化のための一又は複数の他の条件が発生するかどうかを判定すること、を含む。図２７（ｂ）、図２７（ｃ）、及び図２７（ｄ）には、このような状況が示されている。図２７（ｂ）及び図２７（ｄ）は、第一ゲートＧａが、真のロジックタイプ（図２７（ｂ））又は偽のロジックタイプ（図２７（ｄ））の追加テールビットを有していることを除き、第二ゲートＧｂと同一であることを示している。どちらの場合でも、衝突（単純化）ルールは、二つのゲートＧａ及びＧｂが同じヘッドビットと同じ共通テールビット（Ｘ）を持つ一つの単純化されたゲートＧｓに置き換えられるが、第一ゲートＧａの追加ビットは、反対のロジックタイプとしてＧｓのテールに含まれる、というものである。図２７（ｃ）は、二つのゲートＧａ及びＧｂが、一つのテールビットにおけるロジックタイプを除いて同じであることを示している。この状況では、衝突（簡略化）ルールは、二つのゲートＧａ及びＧｂが、同じヘッドビットと同じ共通テールビット（Ｘ）を持っているが他のテールビットを持たない単一の簡略化されたゲートＧｓに置き換えられる、というものである。元の二つのゲートにおける相反するロジックタイプのテールビットは、簡略化されたゲートＧｓのテールから除かれる。
【０１４５】
ステップ２６５１では、以下に詳細に説明するように、全ての移動されるゲートについて、結果ゲートが、隣接セクション内に向かって、命令リストの十分なポイント、例えばＪ又はＫのゲートを貫通したかどうかが判定される。そうでない場合、次の第一ゲートＧａ及び第二ゲートＧｂが選択され、制御はステップ２６０１に戻る。また、十分なゲートが十分に貫通している場合、制御はステップ２６５３に進み、実施形態によっては、他の簡略化のため、結果ゲートシーケンス（言い換えると命令リスト又は「回路」）を回る。次にプロセスは終了し、制御は図３の方法３００のステップ３１３又は３１５に戻る。
【０１４６】
ステップ２６０１において、二つのゲートｇ１及びｇ２（例えば、Ｇａ及びＧｂ）が同一でないと判定された場合、制御はステップ２６１１に進む。ステップ２６１１では、第一ターゲットＧａのターゲットビットと共有される第二ゲートＧｂの制御ビットがあるかどうかが判定される。このような状況は、図２９（ｂ）と図２９（ｄ）に示されており、ここでは少なくともテールでのワンヘッド衝突が表されている。また、図３０（ａ）、図３０（ｂ）、図３０（ｃ）、図３０でも示されており、ここではテールでのツーヘッド衝突が表されている。あると判定された場合、次に、ステップ２６１３で、第二ゲートのターゲットビットと共有される第一ゲートＧａの制御ビットがあるかどうかが判定される。ないと判定された場合、図２９（ｂ）及び図２９（ｄ）のように、テールでのワンヘッド衝突のみなので、制御はステップ２６２１に進む。
【０１４７】
ステップ２６２１では、第一ゲートのヘッドとのテールでのワンヘッド衝突のルールを用いて、ゲートが衝突する。これにより、衝突テールビットにおける真タイプのロジック（黒丸）については図２９（ｂ）に示すように、また、衝突テールビットにおける偽タイプのロジックについては図２９（ｄ）に示すように、一つのデブリゲートＧｃが生成される。いずれの場合でも、衝突ルールは、数式１１で表されるロジックに関し、衝突ビットを除いた結合テールと第二ゲートＧｂのヘッドとをデブリゲートＧｃが有していることを示す。ステップ２６４１では、元の二つのゲートＧａ及びＧｂが、Ｇｂ、Ｇｃ、Ｇａの順の三つのゲートに置き換えられる（置換される）。次に、制御は、上記のステップ２６５１以降に進む。結果的に、Ｇｂ、Ｇｃ、Ｇａの３ゲートオーダーとなる。
【０１４８】
ステップ２６１３において、第二ゲートＧｂのターゲットビットと共有される第一ゲートＧａの制御ビットがあると判定された場合、テールでツーヘッド衝突がある。そのようなツーヘッド衝突の例としては、図３０（ａ）、図３０（ｂ）、図３０（ｃ）及び図３０（ｄ）に示すようなものがある。制御はステップ２６１５に移り、そこでツーヘッド衝突のルールを用いてゲートが衝突する。これにより、両衝突テールビットにおける真のタイプのロジック（黒丸）については図３０（ａ）に示すように、衝突テールビットにおける真のタイプのロジックと偽のタイプのロジックについては図３０（ｂ）に示されているように、衝突テールビットにおける偽のタイプのロジックと真のタイプのロジックについては図３０（ｃ）に示されているように、両衝突テールビットにおける偽のタイプのロジック（白丸）については図３０（ｄ）に示すように、二つのデブリゲートＧｃ及びＧｄが生成される。どの場合にも、衝突ルールは、式１１で表される制御ゲートロジックに関し、１）デブリゲートＧｃが、第一ゲートＧａのヘッドビットと、第一ゲートＧａのテール及び第二ゲートＧｂの非衝突テールビットを組み合わせたテールビットとを有する、又は２）デブリゲートＧｄが、第二ゲートＧｂのヘッドビットと、第二ゲートＧｂのテール及び第一ゲートＧａの非衝突テールビットを組み合わせたテールビットとを有する、と示す。
【０１４９】
ステップ２６１７では、元の二つのゲートＧａ及びＧｂが、Ｇｂ、Ｇｃ、Ｇｄ、Ｇａの順の４つのゲートに置き換えられる（置換される）。次に、制御は、上述のステップ２６５１以降に進む。
【０１５０】
ステップ２６１１で、第一ゲートＧａのターゲットビットと共有される第二ゲートＧｂの制御ビットはないと判定された場合、制御はステップ２６３１に進む。このような状況は、テールとヘッドとの衝突がない場合を表す図２８（ａ）及び図２８（ｂ）と、テールとの衝突が多くともワンヘッド衝突である場合を表す図２９（ａ）及び図２９（ｃ）とに示されている。その場合、制御はステップ２６３１に進む。
【０１５１】
ステップ２６３１では、第一ゲートＧａのいずれかの制御ビットが第二ゲートＧｂのターゲットビットと共有されるかどうかが判定される。共有されない場合、ヘッドとテールの衝突はない。ゲートは可換であり、制御はステップ２６３３に進む。この状況は図２８（ａ）及び図２８（ｂ）に示されている。ステップ２６３３では、二つのゲートが可換であるため、第一ゲートは第二ゲートを越えて移動する。次に、制御は上述したステップ２６５１以降に進む。
【０１５２】
ステップ２６３１で、第一ゲートＧａのいずれかの制御ビットが第二ゲートＧｂのターゲットビットと共有されると判定された場合、制御はステップ２６３５に移る。この状況では、図２９（ａ）と図２９（ｃ）に示すように、第二ゲートＧｂの第一ゲートＧａのテールとのワンヘッド衝突が起こる。ステップ２６３５では、第二ゲートＧｂのヘッドとのテールでのワンヘッド衝突のルールを用いて、ゲートが衝突する。これにより、衝突テールビットにおける真のタイプのロジック（黒丸）については図２９（ａ）に示すように、衝突テールビットにおける偽のタイプのロジックについては図２９（ｃ）に示すように、一つのデブリゲートＧｃが生成される。いずれの場合でも、衝突ルールは、数式１１で表されるロジックに関し、衝突ビットを除いた結合テールと第一ゲートＧａのヘッドとをデブリゲートＧｃが有していることを示す。
【０１５３】
ステップ２６４１では、元の二つのゲートＧａ及びＧｂは、Ｇｂ、Ｇｃ、Ｇａの順の三つのゲートに置き換えられる（置換される）。次に、制御は、上述のステップ２６５１以降に進む。結果的にＧｂ、Ｇｃ、Ｇａの３ゲートオーダーとなる。
【０１５４】
上記の衝突ルールは、数学的に次のように表すことができる。ｔＸとｔＹを、ゲートＧａ及びＧｂの衝突に関与しないブール関数Ｘ及びＹを構成する一連のテールビーズとして定義する。これらは、下記数式１２ａと１２ｂで表すことができる。
【０１５５】
【数１６】
2021507438.tif 000018
【０１５６】
積は下記数式１３のように書き表すことが出来る。
【０１５７】
【数１７】
2021507438.tif 000019
【０１５８】
しかしながら、この式は、矛盾が含まれている場合、つまり、ビーズｂ１、ｂ２∈ｔＸ∪ｔＹがあり、ｉ（ｂ１）＝ｉ（ｂ２）（同じビットライン）であるがσ（ｂ１）≠σ（ｂ２）（逆ネゲート）である場合、簡略化できる。この場合、タイプｘ’ｘの矛盾があり、これは常に０（偽）となる。したがって、数式１４のようにＸＹを書き換えることができる。
【０１５９】
【数１８】
2021507438.tif 000020
【０１６０】
矛盾が発生するケースをチェックすることにより、衝突を作り出す際に、テールにＸＹがあるゲートを削除出来る。これらのケースでは、デブリゲートが消えるからである。
【０１６１】
別の単純化は、二つのゲートを一つに結合できる場合である。ｈ（Ｇａ）＝ｈ（Ｇｂ）（ヘッドが同じビットライン）の二つのゲートであって、テールｔ（Ｇａ）及びｔ（Ｇｂ）を有するものについて考える。ｔ（Ｇａ、Ｇｂ）≡ｔ（Ｇａ）∩ｔ（Ｇｂ）が、二つのテールの交点を表し、ｔ（Ｇａ、Ｇｂ）≡（ｔ（Ｇａ）∪ｔ（Ｇｂ））￥（ｔ（Ｇａ）∩ｔ（Ｇｂ））が、二つのテールの交点の外の残りのビットを表すものとする。この場合、以下の簡略化が可能である。
【０１６２】
｜ｔ（Ｇａ、Ｇｂ）｜＝０の場合、二つのゲートはすべて同じビーズを持っているため、同一性が増加する（同じ制御ラインを持つすべての制御されたゲートは、縮退又は自己逆元である）。この場合、二つのゲートは回路から削除可能である。この簡略化は、図２７（ａ）に示され、ステップ２６０１及び２６０３で実施される。
【０１６３】
｜ｔ（Ｇａ、Ｇｂ）｜＝１の場合、二つのゲートは、一つを除いてすべて同じビーズを有する。したがって、一つのゲートに現れて他のゲートには現れないビーズｂ＊∈ｔ（Ｇａ、Ｇｂ）は一つだけである。これら二つのゲートは、下記数式１５から数式１７を用いて、一つに組み合わせることができる。
【０１６４】
【数１９】
2021507438.tif 000021
【０１６５】
つまり、結合ゲートのテールには、共通のビーズに加えて、同じビットアドレスだがビーズｂ＊のσをネゲートしたビーズｂ＄＝（ｉ（ｂ＊）、σ’（ｂ＊））が含まれる。この簡略化は、図２７（ｂ）及び図２７（ｄ）に示され、ステップ２６５３、加えて一部の実施形態では、ステップ２６０１及び２６０３で実施される。
【０１６６】
｜ｔ（Ｇａ、Ｇｂ）｜＝２であり、２つのビーズｂ１、ｂ２∈ｔ（ｇ１、ｇ２）が異なるゲートにあり、ｉ（ｂ１）＝ｉ（ｂ２）であった場合、２つのゲートを組み合わせることができる。なお、差集合には２つのビーズが含まれているため、これらのビーズが同じビットラインに作用する場合は、σ（ｂ１）≠σ（ｂ２）を有してなければならない（そうでなければ、それらは同じビーズとなり、差集合には含まれない）。これら二つのゲートは、下記数式１８から数式２０を用いて、一つに結合できる。
【０１６７】
【数２０】
2021507438.tif 000022
【０１６８】
ここではｉ（ｂ１）＝ｉ（ｂ２）及びσ（ｂ１）≠σ（ｂ２）なので、ｘｉ（ｂ１）▲直和▼ｘｉ（ｂ２）＝０及びσ（ｂ１）▲直和▼σ（ｂ１）＝１となることが分かる．したがって、２つのビーズｂ１及びｂ２を取り除くことで、これら２つのゲートは１つのゲートに結合できる。シングルゲートはより短いテールｔ（Ｇａ、Ｇｂ）を有する。この簡略化は図２７（ｃ）に示されている。
【０１６９】
いくつかの衝突は、デブリゲートを生成し、ここにはより長いテールを持つデブリゲートも含まれる。もちろん、サイズが＞３のデブリゲートは、サイズが３ビット以下の制御ｑビットゲートとして再構成可能である。二つのゲートの衝突について考える。一つはｑ１ビットを有し、もう一つはｑ２ビットを有している。二つのゲートが可換でない場合、それらの衝突によりデブリが残る。デブリを構成するゲートのビット数の上限は知ることができる。
【０１７０】
最初に、１つのゲート（Ｇａ）のヘッド又はターゲットビットが別のゲート（Ｇｂ）の制御ビットに当たるが、その逆はないという場合について考える。この場合、デブリには明らかにＧａ（１ビット）のヘッドとブール関数ＸＹのゲートとがあり、Ｇａのヘッドが当たったＧｂの制御ビットは除かれる。ＸＹにおける最大ビット数はｑ１−１＋ｑ２−２である。したがって、デブリにおける最大ビット数はｑｍａｘ＝ｑ１＋ｑ２−２である。これは、テールでのワンヘッド衝突であり、図２９（ａ）から図２９（ｄ）に様々なｑビット制御ゲートについて示されている。
【０１７１】
衝突が、１つのゲートのヘッドが他のゲートの制御ビットに当たるようなもの、又はその逆のようなものであれば、デブリにおけるビット数は、ブール関数ＸＹのビット数の合計、すなわちｑ１−２＋ｑ２−２（各ゲートから衝突に関係する２つのビットを差し引いた）と、２つの共通ビットである。したがって、再度ｑｍａｘ＝ｑ１＋ｑ２−２が得られる。
【０１７２】
なお、回路に１ビット及び２ビットのゲート（ｑ１、ｑ２≦２）しかない場合、デブリは最大でｑ１＋ｑ２−２≦２ビットのゲートを有することとなる。したがって、衝突によってより大きいゲートが生成されることはない（ただし、ゲート数は変わる可能性がある）。しかしながら、３ビットゲートが複数ある場合は、衝突によって４ビットゲートなどが生成される可能性はある。
【０１７３】
上記の衝突ルールを用いることで、ｑビット制御ゲートのリストに変換された一連の命令を難読化できる。左又はＬパーツ、中央又はＭパーツ、及び右又はＲパーツの３つで構成される回路を考える。準同型暗号化などの特定の適用では、回路をこれらの３つ、すなわち、バイナリ文字列を復号化する回路Ｌ＝Ｅ−１、適用したい写像を実施する回路Ｍ＝ｆ、及び状態を再暗号化する回路Ｒ＝Ｅ（同じキーを使用する場合）に自然に分割する方法がある。別の例は、１つの暗号化回路を別の暗号化回路に置き換えたい、例えばキーを変更したい場合である。この場合、自然な選択はＬ＝Ｅ−１、Ｍ＝φ（中央回路なし、又は一連のゲートが空）、及びＲ＝Ｅ’、すなわち新しい暗号化スキームである。最後に、上記二例のようなアプリオリ構造を持たない特定の回路の場合、簡単な選択を行ってよく、二カットで回路を分割し、結果として得た三つのパーツをＬ、Ｍ、Ｒとして定義する。
【０１７４】
回路を難読化する手順の例は、上記の制御ｑビットゲート衝突ルールに基づいて説明する。以下では、Ｌ、Ｍ、及びＲをゲートのリストと見なすことができ、大括弧［］が（パイソンプログラミング言語の場合と同様に）リストの区切り文字として用いられる。
１．Ｌの右端のゲート（ｇＬと呼ぶ）を取り出し、Ｌ’を当該ゲートがないリストＬとして定義する。同様に、Ｒの左端のゲート（ｇＲと呼ぶ）を取り出し、Ｒ’を当該ゲートがないリストＲとして定義する。
２．ｇＬを左から右に押しＭ＋［ｇＲ］にいれるか、それともｇＲを右から左に押して、［ｇＬ］＋Ｍに入れるかをランダム（５０％／５０％の確率で）に選択する。なお、下記では、選択された選択肢が右から左に押すことであったと仮定している（他のケースも同様）。
３．リストｓｉｄｅＡ＝［ｇＬ］＋Ｍ及びｓｉｄｅＢ＝［ｇＲ］を初期化する。
４．リストｓｉｄｅＡが空ではなく、リストｓｉｄｅＢのサイズとｓｉｄｅＡのサイズの合計が所定の長さＫ未満（Ｋゲートなど）である場合、次のように行う。まず、ｓｉｄｅＡの右端のゲートとｓｉｄｅＢの左端のゲートを飛び出させる。そして、それらを衝突させ、消滅しなければ、デブリをリストｓｉｄｅＢに置く（デブリをその左側に加える）。このステップは、当該ワイルループの２つの条件のいずれかに違反があるまで、繰り返し行われる。
５．Ｍ’＝ｓｉｄｅＡ＋ｓｉｄｅＢ（回路の新しい中央パーツ）をアセンブルする。
６．ＬとＲの両方が空でない限り、更新された三つＬ’→Ｌ、Ｍ’→Ｍ、Ｒ’→Ｒについて上記のステップを繰り返す。空であれば、回路Ｃｏｂｆ＝Ｌ＋Ｍ＋Ｒを戻す。
【０１７５】
難読化された回路Ｃｏｂｆを用いて、難読化ソース又はオブジェクトコード２５０を生成する。この難読化手順は、アルゴリズム１の疑似コードを難読化に用いて、そのサブルーチンであるアルゴリズム２で右に押し、アルゴリズム３で左に押すことで、実施できる。
【０１７６】
【数２１】
2021507438.tif 000023
【０１７７】
図３１は、一実施形態による、シンプルな写像のための難読化プログラムを生成する一連のステップを例示するブロック図である。この回路例では、ＬとＲはそれぞれ３つのゲートで構成され、Ｍは１つのゲートのみで構成されている。ワードサイズは５ビット（ｎ＝Ｎ＝５）である。このシンプルな例は、Ｌ＝Ｅ−１が復号化回路であり、Ｒ＝Ｅが暗号化回路であり、写像ｆがＭの単一ゲート（この場合はＣＮＯＴ）に対応するケースである考えられる。なお、暗号化回路と復号化回路が互いに逆イメージとなっていることに留意されたい。
【０１７８】
最初のステップ（図３１の３１０１）では、ゲート「ｃ」がゲート「ｄ」と衝突し（ワンヘッド衝突、図２９（ｂ）を参照）、ゲート「ｄ」の左側に移動し、デブリゲート「ｃ’」を残す。ゲート「ｃ」はゲート「ｃ−１」と衝突し、両方を打ち消す（図２７（ａ）を参照）。第二ステップ（３１０２）では、ゲート「ｂ−１」がゲート「ｃ’」と衝突し（ワンヘッド衝突、図２９（ｂ）を参照）、ゲート「ｃ’」の右側に移動し、デブリゲート「ｂ’」を残す。ゲート「ｂ−１」はゲート「ｄ」を通過し、デブリを残さずに（図２８（ａ）を参照）、ゲート「ｄ」の右側に移動する。ゲート「ｂ−１」はゲート「ｂ」と衝突し、両方を打ち消す（図２７（ａ）を参照）。第三ステップ（３１０３）では、ゲート「ａ」がゲート「ｂ’」を通過し、デブリを残さずに（図２８（ａ））、ゲート「ｂ’」の右側に移動する。同様に、ゲート「ａ」がゲート「ｃ’」を通過し、デブリを残さずに（図２８（ａ））、ゲート「ｃ’」の右側に移動する。ゲート「ａ」はゲート「ｄ」と衝突し（ワンヘッド衝突、図２９（ｄ）を参照）、ゲート「ｄ」の左側に移動し、デブリゲート「ａ’」を残す。第四ステップ（３１０４）では、隣接するゲート「ｃ’」及び「ａ’」が単一ゲート「ｅ」に単純化される（図２７（ｃ）を参照）。第五ステップ（３１０５）では、隣接するゲート「ｂ’」と「ｅ」が単一ゲート「ｆ」に単純化される（図２７（ｂ）を参照）。
【０１７９】
実施形態によっては、一般的な可逆３ビットゲートについて述べたように、暗号化データに作用する難読化コードは、難読化する必要のないプログラム全体のうちの一部である。これらの実施形態のいくつかでは、難読化コードは、難読化されない命令に埋め込まれる。
３．  計算ハードウェアの概要
【０１８０】
図３２は、本発明の実施形態を実装し得るコンピューターシステムを例示するブロック図である。本コンピューターシステム３２００は、バス３２１０などの通信機構を含む。これはコンピューターシステム３２００の他の内部コンポーネントと外部コンポーネントとの間で情報を受け渡しするためのものである。情報は、測定可能な現象の物理信号として表される。これは、典型的には電圧などであるが、実施形態によっては、磁気、電磁気、圧力、化学、分子原子及び量子相互作用といった現象も含む。例えば、北と南の磁場、又はゼロと非ゼロの電圧は、２進数（ビット）の２つの状態（０、１）を表す。他の現象は、より高い基数の桁を表すことができる。測定前の複数の同時量子状態の重ね合わせは、量子ビットを表す。一以上の桁のシーケンスは、文字の番号又はコードを表すために用いられるデジタルデータを構成する。実施形態によっては、アナログデータと呼ばれる情報は、特定範囲内の測定可能値のほぼ連続体で表される。本コンピューターシステム３２００又はその一部は、ここに記載される一又は複数の方法の一又は複数のステップを実行するための手段を構成する。
【０１８１】
２進数のシーケンスは、文字の数値又はコードを表すために用いられるデジタルデータを構成する。バス３２１０は、情報がバス３２１０に接続されたデバイス間で迅速に転送されるように、多くの情報の並列導体を含む。このバス３２１０には、情報を処理するための一又は複数のプロセッサ３２０２が接続される。このプロセッサ３２０２は、情報に対して一連の動作を実行する。これらの一連の動作には、バス３２１０からの情報の取り込みとバス３２１０への情報の配信が含まれる。また、これらの一連の動作には、通常、二以上の情報の比較、情報位置の移動、加算や乗算などによる二以上の情報の結合も含まれる。プロセッサ３２０２によって実行されるオペレーションシーケンスは、コンピューター命令を構成する。
【０１８２】
本コンピューターシステム３２００は、バス３２１０に接続されたメモリ３２０４も含む。このランダムアクセスメモリ（ＲＡＭ）又は他の動的記憶装置などのメモリ３２０４は、コンピューター命令などの情報を格納する。動的メモリにより、そこに格納された情報をコンピューターシステム３２００で変更可能である。また、ＲＡＭにより、メモリアドレスと呼ばれる場所に格納された情報を、隣接するアドレスの情報とは独立して格納及び取得できる。また、メモリ３２０４は、コンピューター命令の実行中に一時的な値を格納するためにも、プロセッサ３２０２によって使用される。また、本コンピューターシステム３２００は、このコンピューターシステム３２００によって変更されない命令を含む静的情報を格納するためにバス３２１０に接続された読み取り専用メモリ（ＲＯＭ）３２０６又は他の静的記憶装置を含む。また、命令などの情報を格納するための磁気ディスクや光ディスクなどの揮発性（持続性）記憶装置３２０８もバスに接続されており、これは本コンピューターシステム３２００の電源が切られた場合や停電の場合でも持続する。
【０１８３】
命令などの情報は、ユーザーによって操作される英数字キーを含むキーボード又はセンサーなどの外部入力デバイス３２１２からバス３２１０に提供され、プロセッサに使用される。センサーは、その周辺の状態を検出し、検出結果を、コンピューターシステム３２００で情報を表すために使用される信号と互換性のある信号に変換する。バス３２１０に接続された他の外部デバイスであって、主に人間とのインタラクションに使用されるものとしては、画像を表示するためのブラウン管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）などのディスプレイ装置３２１４、及びディスプレイ３２１４に表示される小さなカーソル画像の位置を制御したり、ディスプレイ３２１４に表示されるグラフィック要素に関連するコマンドを出したりするマウス、トラックボール、又はカーソル方向キーなどのポインティングデバイス３２１６がある。
【０１８４】
図示された実施形態では、特定用途向け集積回路（ＩＣ）３２２０などの専用ハードウェアがバス３２１０に接続される。専用ハードウェアは、プロセッサ３２０２によって実行されない動作を特定用途のために十分迅速に実行可能なように構成される。特定用途向けＩＣの例としては、ディスプレイ３２１４用の画像を生成するグラフィックアクセラレータカード、ネットワーク経由で送信されるメッセージを暗号化及び復号化する暗号化ボード、音声認識ＩＣ、ハードウェアにおいてより効率的に実施される複雑なオペレーションシーケンスを繰り返し実行するロボットアームや医療スキャン装置などの特別な外部デバイスへのインターフェースなどがある。
【０１８５】
コンピューターシステム３２００は、バス３２１０に接続された通信インターフェース３２７０の一又は複数のインスタンスも含む。通信インターフェース３２７０は、プリンタ、スキャナ、及び外部ディスクなどの自身のプロセッサで動作する様々な外部デバイスへの双方向通信結合を提供する。一般に、この接続は、プロセッサを備えたさまざまな外部デバイスが接続されているローカルネットワーク３２８０に接続されているネットワークリンク３２７８を用いて、行われる。例えば、通信インターフェース３２７０は、パーソナルコンピューター上のパラレルポート、シリアルポート、又はユニバーサルシリアルバス（ＵＳＢ）ポートであり得る。実施形態によっては、通信インターフェース３２７０は、対応するタイプの電話回線への情報通信接続を提供する統合サービスデジタルネットワーク（ＩＳＤＮ）カード又はデジタル加入者回線（ＤＳＬ）カード又は電話モデムである。また、実施形態によっては、通信インターフェース３２７０は、バス３２１０の信号を同軸ケーブルでの通信接続用の信号又は光ファイバーケーブルでの通信接続用の光信号に変換するケーブルモデムである。別の例として、通信インターフェース３２７０は、イーサネットなどの互換性のあるＬＡＮへのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実装可能である。電波、光波、赤外線波を含む、音波や電磁波などの搬送波は、ワイヤーやケーブルなしで空間を移動する。信号には、搬送波の振幅、周波数、位相、偏波、又は他の物理的性質の人工的な変化が含まれる。無線リンクの場合、通信インターフェース３２７０は、デジタルデータなどの情報ストリームを運ぶ赤外線信号及び光信号を含んだ電気、音響、又は電磁信号を送受信する。
【０１８６】
本明細書では、コンピューター可読媒体という用語は、実行命令などの情報をプロセッサ３２０２に提供することに関与する媒体を指すために用いられる。このような媒体は、不揮発性媒体、揮発性媒体、及び伝送媒体などの多くの形態をとることができるが、これらに限定されない。不揮発性媒体には、例えば、記憶装置３２０８などの光ディスク又は磁気ディスクが含まれる。揮発性媒体には、例えば、動的メモリ３２０４が含まれる。伝送媒体には、例えば、同軸ケーブル、銅線、光ファイバーケーブル、及び電波、光波、赤外線波を含む音波や電磁波などのワイヤーやケーブルなしで空間を移動するウェーブが含まれる。また、本明細書では、コンピューター可読記憶媒体という用語は、伝送媒体を除く、プロセッサ３２０２への情報提供に関与する媒体を指すために用いられる。
【０１８７】
コンピューター可読媒体の一般的な形態としては、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ又は他の磁気媒体、コンパクトディスクＲＯＭ（ＣＤ−ＲＯＭ）又はデジタルビデオディスク（ＤＶＤ）又は他の光学媒体、パンチカード又は紙テープ又は他の穴パターンを有する物理媒体、ＲＡＭ、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、ＦＬＡＳＨ−ＥＰＲＯＭ、フローティングアレイフラッシュメモリ、ＳＤＲＡＭ、その他のメモリチップ又はカートリッジ、搬送波、及びコンピューターが読み取り可能な他の媒体などがある。本明細書では、非一時的コンピューター可読記憶媒体という用語は、搬送波及び他の信号を除く、プロセッサ３２０２への情報提供に関与する媒体を指すために用いられる。
【０１８８】
一又は複数の有形メディアにエンコードされたロジックには、コンピューター可読記憶媒体、ＡＳＩＣ３２２０などの専用ハードウェア、又はその両方にかかるプロセッサ命令が含まれる。
【０１８９】
ネットワークリンク３２７８は、通常、一又は複数のネットワークを介して、情報を使用又は処理する他のデバイスへの情報通信を提供する。例えば、ネットワークリンク３２７８は、ローカルネットワーク３２８０を介して、ホストコンピューター３２８２やインターネットサービスプロバイダ（ＩＳＰ）によって操作される機器３２８４への接続を提供することができる。ＩＳＰ装置３２８４は、今では一般的にインターネット３２９０と呼ばれているネットワークの公的な世界規模のパケット交換通信ネットワークを介してデータ通信サービスを提供する。インターネットに接続されたサーバー３２９２と呼ばれるコンピューターは、インターネット経由で受信した情報に応答してサービスを提供する。例えば、サーバー３２９２は、ディスプレイ３２１４で表示するためのビデオデータの情報を提供する。場合によっては、ホスト３２８２、ローカルネットワーク３２８０、インターネットサービスプロバイダー３２８４、インターネット３２９０、及びサーバー３２９２のいくつかの組み合わせによって表されるリソースは、「クラウド」と呼ばれる。
【０１９０】
本発明は、本明細書に記載されている技術を実施するためのコンピューターシステム３２００の使用に関する。本発明の一実施形態によれば、これらの技術は、メモリ３２０４に含まれる一又は複数の命令の一又は複数のシーケンスを実行するプロセッサ３２０２に応答して、コンピューターシステム３２００により実行される。ソフトウェア及びプログラムコードとも呼ばれるこのような命令は、記憶装置３２０８など別のコンピューター可読媒体からメモリ３２０４に読み込まれてもよい。メモリ３２０４に含まれる命令シーケンスの実行によって、プロセッサ３２０２がここに記載の方法ステップを行う。代替実施形態では、特定用途向け集積回路３２２０などのハードウェアを、ソフトウェアの代わりに、又はソフトウェアと組み合わせて使用して、本発明を実施することができる。したがって、本発明の実施形態は、ハードウェアとソフトウェアの特定の組み合わせに限定されない。
【０１９１】
ネットワークリンク３２７８及び他のネットワークを介して通信インターフェース３２７０を通じて送信される信号は、コンピューターシステム３２００へ、又はコンピューターシステム３２００から情報を運ぶ。コンピューターシステム３２００は、プログラムコードなどの情報を、とりわけネットワーク３２８０、３２９０を介して、ネットワークリンク３２７８及び通信インターフェース３２７０を通じて送受信することができる。インターネット３２９０を使用する例では、サーバー３２９２は、コンピューター３２００から送信されたメッセージにより要求された特定のアプリケーションのためのプログラムコードを、インターネット３２９０、ＩＳＰ機器３２８４、ローカルネットワーク３２８０、及び通信インターフェース３２７０を介して送信する。受信されたコードは、受信時にプロセッサ３２０２により実行されてもいいし、後で実行するために記憶装置３２０８又は他の不揮発性記憶装置に格納されてもいいし、又はその両方でもよい。このようにして、コンピューターシステム３２００は、搬送波の信号という形でアプリケーションプログラムコードを取得することができる。
【０１９２】
様々な形態のコンピューター可読媒体が、一又は複数の命令シーケンス、データ、又はその両方のプロセッサ３２０２への搬送及び実行に関与し得る。例えば、命令及びデータは、最初に、ホスト３２８２などのリモートコンピュータの磁気ディスクで運ばれ得る。リモートコンピュータは、命令及びデータを、自身のダイナミックメモリにロードし、モデムを使用して電話回線を通じて送信する。コンピューターシステム３２００にローカル接続されているモデムは、電話回線で命令及びデータを受信し、赤外線送信機を使用して、ネットワークリンク３２７８として機能する赤外線搬送波の信号に変換する。通信インターフェース３２７０として機能する赤外線検出器は、赤外線信号で運ばれる命令とデータを受信し、当該命令及びデータを表す情報をバス３２１０に配する。バス３２１０はメモリ３２０４に情報を運ぶ。プロセッサ３２０２は、メモリ３２０４から命令を取得し、命令とともに送信されたデータの一部を用いて実行する。メモリ３２０４で受信された命令及びデータは、プロセッサ３２０２による実行の前又は後のいずれかに、任意選択で記憶装置３２０８に格納されてもよい。
【０１９３】
図３３は、本発明の実施形態を実装することができるチップセット３３００を示している。チップセット３３００は、本明細書に記載の方法の一又は複数のステップを実行するようにプログラムされており、例えば図３２に関連して説明されたプロセッサ及びメモリコンポーネントを、一又は複数の物理パッケージ（たとえば、チップ）に組み込んだ状態で含む。例として、物理パッケージには、物理的な強度、サイズの保護、及び／又は電気的相互作用の制限などの一又は複数の特性を提供するため、一又は複数の材料、コンポーネント、及び／又はワイヤーの構造アセンブリ（ベースボードなど）への配置が含まれる。特定の実施形態では、チップセットは単一のチップに実装できると考えられる。チップセット３３００又はその一部は、本明細書記載の方法の一又は複数のステップを実行するための手段を構成する。
【０１９４】
一実施形態では、チップセット３３００は、チップセット３３００のコンポーネント間で情報をやりとりするためのバス３３０１などの通信機構を含む。プロセッサ３３０３は、バス３３０１に接続され、例えば、メモリ３３０５に格納された命令を実行したり情報を処理したりする。このプロセッサ３３０３は、各コアが独立して実行するように構成された一又は複数の処理コアを含み得る。マルチコアプロセッサにより、単一の物理パッケージ内でマルチプロセッシングが可能となる。マルチコアプロセッサには、例えば、２個、４個、８個、又はそれ以上のプロセッシングコアが含まれる。あるいは、又はそれに加えて、プロセッサ３３０３は、バス３３０１を介して連動するように構成された一又は複数のマイクロプロセッサを含んでいてもよく、それにより命令の独立実行、パイプライン化、及びマルチスレッド化が可能となる。また、プロセッサ３３０３には、一又は複数のデジタル信号プロセッサ（ＤＳＰ）３３０７又は一又は複数の特定用途向け集積回路（ＡＳＩＣ）３３０９など、特定の処理機能及びタスクを実行するための一又は複数の特殊コンポーネントを伴わしてもよい。ＤＳＰ３３０７は、典型的には、プロセッサ３３０３から独立して実世界の信号（例えば、音）をリアルタイムで処理するように構成される。同様に、ＡＳＩＣ３３０９は、汎用プロセッサでは行うのが難しいような特殊機能を実行するように構成可能である。ここに記載される本発明の機能を実行するのに役立つ他の専用コンポーネントとしては、一又は複数のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）（図示せず）、一又は複数のコントローラ（図示せず）、又は一又は複数の他の専用コンピュータチップなどがある
【０１９５】
プロセッサ３３０３及び付随するコンポーネントは、バス３３０１を介してメモリ３３０５に接続可能である。メモリ３３０５は、本明細書に記載の方法の一又は複数のステップを行う実行可能命令を格納するための動的メモリ（例えば、ＲＡＭ、磁気ディスク、書き込み可能な光ディスクなど）及び静的メモリ（例えば、ＲＯＭ、ＣＤ−ＲＯＭなど）の両方を含む。また、メモリ３３０５は、本明細書に記載の方法の一又は複数のステップの実行に関連する、又はその実行によって生成されるデータを格納する。
４．変更形態
【０１９６】
本明細書において、本発明は、特定の実施形態を参照して説明されてきた。しかしながら、本発明の趣旨及び範囲から逸脱することなく、様々な修正及び変更を加えることが可能なのは明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的なものと見なされるべきである。本明細書及び特許請求の範囲を通して、文脈上他の意味に解すべき場合を除き、「備える」という語句及び「備えている」などの変形語句は、記載された項目、要素、ステップ、又はそれらのグループの包含を意味するが、他の項目、要素、ステップ、又はそれらのグループを除外するものではないと理解されたい。
【０１９７】
参考文献
［１］Ｒ．Ｌ．Ｒｉｖｅｓｔ，Ｌ．Ａｄｌｅｍａｎ，ａｎｄＭ．Ｌ．Ｄｅｒｔｏｕｚｏｓ，Ｏｎ  ｄａｔａ  ｂａｎｋ  ａｎｄ  ｐｒｉｖａｃｙ  ｈｏｍｏｍｏｒｐｈｉｓｍｓ（１９７８）．
［２］Ｅ．Ｆ．Ｂｒｉｃｋｅｌｌ  ａｎｄ  Ｙ．Ｙａｃｏｂｉ，Ｏｎ  ｐｒｉｖａｃｙ  ｈｏｍｏｍｏｒｐｈｉｓｍｓ，Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｔｈｅｏｒｙ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｏｆ  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｔｅｃｈｎｉｑｕｅｓ，１１７−２５（１９８７）．
［３］Ｃ．Ｇｅｎｔｒｙ，Ｆｕｌｌｙ  ｈｏｍｏｍｏｒｐｈｉｃ  ｅｎｃｒｙｐｔｉｏｎ  ｕｓｉｎｇ  ｉｄｅａｌ  ｌａｔｔｉｃｅｓ．ＡＣＭ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｔｈｅｏｒｙ  ｏｆ  Ｃｏｍｐｕｔａｔｉｏｎ（ＳＴＯＣ），１６９−１７８（２００９）．
［４］Ｋ．Ｌａｕｔｅｒ，Ｃａｎ  ｈｏｍｏｍｏｒｐｈｉｃ  ｅｎｃｒｙｐｔｉｏｎ  ｂｅ  ｐｒａｃｔｉｃａｌ．Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ３ｒｄ  ＡＣＭ  ｗｏｒｋｓｈｏｐ  ｏｎ  ｃｌｏｕｄ  ｃｏｍｐｕｔｉｎｇ  ｓｅｃｕｒｉｔｙ，１１３−１２４（２０１１）．
［５］Ｃ．Ｂ．Ｇｅｎｔｒｙ，Ｂｏｏｔｓｔｒａｐｐａｂｌｅ  Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  Ｍｅｔｈｏｄ，Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍ  ａｎｄ
Ａｐｐａｒａｔｕｓ．ＵＳ  Ｐａｔｅｎｔ  ８，５１５，０５８  Ｂ１（Ａｕｇｕｓｔ  ２０，２０１３）．
［６］Ｃ．Ｂ．Ｇｅｎｔｒｙ  ａｎｄ  Ｓ．Ｈａｌｅｖｉ，Ｅｆｆｉｃｉｅｎｔ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  Ｆｕｌｌｙ  Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ．ＵＳ  Ｐａｔｅｎｔ  ８，５６５，４３５  Ｂ２（Ｏｃｔｏｂｅｒ  ２２，２０１３）．
［７］Ｃ．Ｂ．Ｇｅｎｔｒｙ，Ｆｕｌｌｙ  Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  Ｍｅｔｈｏｄ  Ｂａｓｅｄ  ｏｎ  ａ  Ｂｏｏｔｓｔｒａｐｐａｂｌｅ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｃｈｅｍｅ，Ｃｏｍｐｕｔｅｒ  ａｎｄ  Ａｐｐａｒａｔｕｓ．ＵＳ  Ｐａｔｅｎｔ  ８，６３０，４２２  Ｂ２（Ｊａｎｕａｒｙ  １４，２０１４）．
［８］Ｃ．Ｂ．Ｇｅｎｔｒｙ，Ｓ．Ｈａｌｅｖｉ，Ｎ．Ｐ．Ｓｍａｒｔ，Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｖａｌｕａｔｉｏｎ  Ｉｎｃｌｕｄｉｎｇ  Ｋｅｙ  Ｓｗｉｔｃｈｉｎｇ，Ｍｏｄｕｌｕｓ  Ｓｗｉｔｃｈｉｎｇ，ａｎｄ  Ｄｙｎａｍｉｃａｌ  Ｎｏｉｓｅ  Ｍａｎａｇｅｍｅｎｔ．ＵＳ  Ｐａｔｅｎｔ  ９，２８１，９４１  Ｂ２（Ｍａｒｃｈ  ８，２０１６）．
［９］Ｃ．Ｂ．Ｇｅｎｔｒｙ，Ｓ．Ｈａｌｅｖｉ，Ｎ．Ｐ．Ｓｍａｒｔ，Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｖａｌｕａｔｉｏｎ  Ｉｎｃｌｕｄｉｎｇ  Ｋｅｙ  Ｓｗｉｔｃｈｉｎｇ，
Ｍｏｄｕｌｕｓ  Ｓｗｉｔｃｈｉｎｇ，ａｎｄ  Ｄｙｎａｍｉｃａｌ  Ｎｏｉｓｅ  Ｍａｎａｇｅｍｅｎｔ．ＵＳ  Ｐａｔｅｎｔ  ９，６０８，８１７  Ｂ２（Ｍａｒｃｈ  ２８，２０１７）．
［１０］Ｃ．Ｂ．Ｇｅｎｔｒｙ，Ｓ．Ｈａｌｅｖｉ，Ｎ．Ｐ．Ｓｍａｒｔ，Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｖａｌｕａｔｉｏｎ  Ｉｎｃｌｕｄｉｎｇ  Ｋｅｙ  Ｓｗｉｔｃｈｉｎｇ，Ｍｏｄｕｌｕｓ  Ｓｗｉｔｃｈｉｎｇ，ａｎｄ  Ｄｙｎａｍｉｃａｌ  Ｎｏｉｓｅ  Ｍａｎａｇｅｍｅｎｔ．ＵＳ  Ｐａｔｅｎｔ  ９，６２１，３４６  Ｂ２（Ａｐｒｉｌ  １１，２０１７）．
［１１］Ｊ．Ｊ．Ｌｏｆｔｕｓ，Ｍ．Ｎａｅｈｒｉｇ，Ｊ．Ｗ．Ｂｏｓ，Ｋ．Ｅ．Ｌａｕｔｅｒ，Ｍａｎａｇｅｄ  Ｓｅｃｕｒｅ  Ｃｏｍｐｕｔａｔｉｏｎｓ  ｏｎ  Ｅｎｃｒｙｐｔｅｄ  Ｄａｔａ．ＵＳ  Ｐａｔｅｎｔ  ９，３０６，７３８  Ｂ２（Ａｐｒｉｌ  ５，２０１６）．
［１２］Ｍ．Ｔａｍａｙｏ−Ｒｉｏｓ，Ｍｅｔｈｏｄ  ｆｏｒ  Ｆｕｌｌｙ  Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  Ｕｓｉｎｇ  Ｍｕｌｔｉｖａｒｉａｔｅ  Ｃｒｙｐｔｏｇｒａｐｈｙ．ＵＳ  Ｐａｔｅｎｔ  ９，３１３，０２８  Ｂ２（Ａｐｒｉｌ  １２，２０１６）．
［１３］Ａ．Ｋｉｐｎｉｓ  ａｎｄ  Ｅ．Ｈｉｂｓｈｏｏｓｈ，Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｈｏｍｏｍｏｒｐｈｉｃｌｙ  Ｒａｍｄｏｍｉｚｉｎｇ  ａｎ  Ｉｎｐｕｔ．ＵＳ  Ｐａｔｅｎｔ  ９，３５０，５４３  Ｂ２（Ｍａｙ  ２４，２０１６）．
［１４］Ｇ．Ｓａｌｄａｍｌｉ，Ｈｏｍｏｍｏｒｐｈｉｃ  Ｅｎｃｒｙｐｔｉｏｎ  ｉｎ  Ｃｏｍｐｕｔｉｎｇ  Ｓｙｓｔｅｍｓ  ａｎｄ  Ｅｎｖｉｒｏｎｍｅｎｔｓ．ＵＳ  Ｐａｔｅｎｔ  ９，４３６，８３５  Ｂ１（Ｓｅｐｔｅｍｂｅｒ  １６，２０１６）．
［１５］Ｄ．Ｃｏｐｐｅｒｓｍｉｔｈ  ａｎｄ  Ｅ．Ｇｒｏｓｓｍａｎ，Ｇｅｎｅｒａｔｏｒｓ  ｆｏｒ  ｃｅｒｔａｉｎ  ａｌｔｅｒｎａｔｉｎｇ  ｇｒｏｕｐｓ  ｗｉｔｈ  ａｐｐｌｉｃａｔｉｏｎｓ  ｔｏ  ｃｒｙｐｔｏｇｒａｐｈｙ．ＳＩＡＭ  Ｊ．Ａｐｐｌ．Ｍａｔｈ．２９（４），６２４−６２７（１９７５）．
［１６］Ａ．Ｐａｒｅｎｔ，Ｍ．Ｒｏｅｔｅｌｌｅｒ，ａｎｄ  Ｍ．Ｍｏｓｃａ，Ｉｍｐｒｏｖｅｄ  Ｒｅｖｅｒｓｉｂｌｅ  ａｎｄ  Ｃｉｒｃｕｉｔｓ  ｆｏｒ  Ｋａｒａｔｓｕｂａ−Ｂａｓｅｄ  Ｉｎｔｅｇｅｒ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ．ａｒＸｉｖ：１７０６．０３４１９（２０１７）．
［１７］Ｓ．Ｃｕｃｃａｒｏ，Ｔ．Ｇ．Ｄｒａｐｐｅｒ，Ｓ．Ａ．Ｋｕｔｉｎ，ａｎｄ  Ｄ．Ｐ．Ｍｏｕｌｔｏｎ，Ａ  Ｎｅｗ  Ｑｕａｎｔｕｍ  Ｒｉｐｐｌｅ−Ｃａｒｒｙ  Ａｄｄｉｔｉｏｎ  Ｃｉｒｃｕｉｔ．ａｒＸｉｖ：ｑｕａｎｔ−ｐｈ／０４１０１８４（２００４）．
［１８］Ｋ．Ｉｗａｍａ，Ｙ．Ｋａｍｂａｙａｓｈｉ，ａｎｄ  Ｓ．Ｙａｍａｓｈｉｔａ，Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  Ｒｕｌｅｓ  ｆｏｒ  Ｄｅｓｉｇｎｉｎｇ  ＣＮＯＴ−ｂａｓｅｄ  Ｑｕａｎｔｕｍ  Ｃｉｒｃｕｉｔｓ，ＤＡＣ２００２，ｐｐ４１９−４２４（Ｎｅｗ  Ｏｒｌｅａｎｓ，Ｌｏｕｉｓｉａｎａ，ＵＳＡ，２００２）．
【図１】
2021507438.tif 000024
【図２Ａ】
2021507438.tif 000025
【図２Ｂ】
2021507438.tif 000026
【図２Ｃ】
2021507438.tif 000027
【図２Ｄ】
2021507438.tif 000028
【図３】
2021507438.tif 000029
【図４】
2021507438.tif 000030
【図５】
2021507438.tif 000031
【図６】
2021507438.tif 000032
【図７】
2021507438.tif 000033
【図８】
2021507438.tif 000034
【図９】
2021507438.tif 000035
【図１０】
2021507438.tif 000036
【図１１】
2021507438.tif 000037
【図１２】
2021507438.tif 000038
【図１３Ａ】
2021507438.tif 000039
【図１３Ｂ】
2021507438.tif 000040
【図１４】
2021507438.tif 000041
【図１５】
2021507438.tif 000042
【図１６】
2021507438.tif 000043
【図１７】
2021507438.tif 000044
【図１８】
2021507438.tif 000045
【図１９】
2021507438.tif 000046
【図２０】
2021507438.tif 000047
【図２１】
2021507438.tif 000048
【図２２】
2021507438.tif 000049
【図２３】
2021507438.tif 000050
【図２４】
2021507438.tif 000051
【図２５】
2021507438.tif 000052
【図２６】
2021507438.tif 000053
【図２７】
2021507438.tif 000054
【図２８】
2021507438.tif 000055
【図２９】
2021507438.tif 000056
【図３０】
2021507438.tif 000057
【図３１】
2021507438.tif 000058
【図３２】
2021507438.tif 000059
【図３３】
2021507438.tif 000060
【国際調査報告】
2021507438.tif 000061