ガーブルド回路は、信頼できる第三者の存在なしに、互いに信頼していない2者がそれぞれの秘密入力に基づいて関数を共同で評価できる、2者間セキュア計算を可能にする暗号プロトコルです。ガーブルド回路プロトコルでは、関数はブール回路として記述する必要があります。
ガーブルド回路の歴史は複雑です。ガーブルド回路の発明はアンドリュー・ヤオによるものとされています。ヤオはFOCS '86で論文[ 1 ]の口頭発表でこのアイデアを紹介しました。これは2003年にオデッド・ゴールドライヒによって文書化されました[ 2 ] 。この技術に関する最初の文書は、STOC '87でゴールドライヒ、ミカリ、 ウィグダーソンによって書かれました[ 3 ] 。 「ガーブルド回路」という用語は、STOC'90でビーバー、ミカリ、ロガウェイによって初めて使用されました[ 4 ] 。ヤオのミリオネア問題を解決するヤオのプロトコルは、安全な計算の初期の例でしたが、ガーブルド回路とは直接関係ありません。
難読回路プロトコルでは、秘匿転送を利用します。秘匿転送では、文字列は送信者と受信者の間で次のように転送されます。送信者は 2 つの文字列を持っています。そして受信者が選択するそして送信者は秘匿転送プロトコルにより、
受信者は知らないが、値、実際には受信者は、受信者が盲目的に選択しないようにエンコードしますつまり、もし偽の値をエンコードします。真の値をエンコードし、受信者がエンコードされた真の値を取得したい場合、受信者は。
オペレーター文字列連結演算子です。はビット単位のXOR演算です。kはセキュリティパラメータであり、鍵の長さを表します。80より大きい値が必要で、通常は128に設定されます。
このプロトコルは以下の6つのステップで構成されています。
小さな関数のブール回路は、手作業で生成できます。 2 入力のXOR ゲートとANDゲートで回路を作成するのが一般的です。 生成された回路の AND ゲートの数が最小であることが重要です (フリー XOR 最適化を参照)。論理合成技術を使用して、AND ゲートの数に関して最適化された回路を生成する方法があります。[ 5 ]ミリオネア問題の回路は、デジタル比較器回路 (減算器として動作し、キャリー フラグを出力する全加算器のチェーン) です。 全加算器回路は、 1 つのANDゲートといくつかのXORゲートのみを使用して実装できます。 これは、ミリオネア問題の回路の AND ゲートの総数が入力のビット幅に等しいことを意味します。


アリス(ガーブラー)はこのステップでブール回路を暗号化して、ガーブルされた回路を取得します。アリスは、回路内の各ワイヤにラベルと呼ばれるランダムに生成された2つの文字列を割り当てます。1つはブール意味0、もう1つは1です。(ラベルはkビット長で、kはセキュリティパラメータであり、通常は128に設定されます。)次に、回路内のすべてのゲートに移動し、真理値表の0と1を対応するラベルに置き換えます。下の表は、2つの入力を持つANDゲートの真理値表を示しています。出力:
アリスは0と1を対応するラベルに置き換えた。
次に、真理値表の出力エントリを対応する2つの入力ラベルで暗号化します。暗号化された表は、難読化表と呼ばれます。これは、正しい2つの入力ラベルを持っている場合にのみ難読化表を復号できるようにするために行われます。以下の表では、は、二重鍵対称暗号化であり、は秘密鍵であり、Xは暗号化される値です(固定鍵ブロック暗号を参照)。
その後、アリスは行から出力値が特定できないように、テーブルをランダムに並べ替えます。このランダムな並べ替えにちなんで、プロトコルの名前である「garbled(ガーブルド)」が付けられました。
アリスは回路内のすべてのゲートについて計算された難読化テーブルをボブに送信する。ボブは難読化テーブルを開くために入力ラベルを必要とする。そこでアリスは自分の入力に対応するラベルを選択する。そしてそれらをボブに送信します。たとえば、アリスの入力がそして彼女は送る、、、、 そしてボブへ。ボブはアリスの意見について何も知ることはないだろう。なぜなら、ラベルはアリスによってランダムに生成され、ボブにはランダムな文字列のように見えるからです。
ボブは入力に対応するラベルも必要とします。彼は入力の各ビットに対して、非盲目的な転送によってラベルを受け取ります。たとえば、ボブの入力がボブはまずアリスのラベルの間そして2回に1回の無知な転送を通じて、彼は受け取るなどなど。無意識的な転送の後、アリスはボブの入力について何も知ることができず、ボブも他のラベルについて何も知ることができません。
データ転送後、ボブは判読不能なテーブルと入力ラベルを受け取ります。彼はすべてのゲートを一つずつ通過し、判読不能なテーブルの行を復号化しようと試みます。彼は各テーブルにつき1行を開き、対応する出力ラベルを取得することができました。、 どこ彼は出力ラベルに到達するまで評価を続けます。
評価後、ボブは出力ラベルを取得します。アリスは両方のラベルを持っているため、それがブール値にどう対応するかを知っている。そしてアリスがボブに情報を共有するか、ボブがアリスに結果を明らかにするかのどちらか、または両方が結果を知ることができる。
この最適化では、アリスはランダムなビットを生成し、各ワイヤの選択ビットと呼ばれる彼女はラベル0の最初のビットを設定します。にそしてラベル1の最初の部分、、 に(彼女はワイヤーについても同じことをする。すると彼女は、ランダムに順列する代わりに、入力の選択ビットに従って難読化されたテーブルをソートします。こうすることで、ボブは正しい行を見つけるためにテーブルの4行すべてをテストする必要がなくなります。なぜなら、各ワイヤラベルとともにポインタビットを受け取り、1回の試行で正しい行を見つけて復号化できるからです。これにより、評価負荷が4分の1に軽減されます。また、選択ビットはランダムに生成されるため、出力値に関する情報も一切明らかにされません。[ 6 ]
この最適化により、文字化けしたテーブルのサイズが 4 行から 3 行に縮小されます。ここでは、アリスはゲートの出力ワイヤのラベルをランダムに生成する代わりに、入力ラベルの関数を使用して生成します。アリスは、文字化けしたテーブルの最初のエントリがすべて 0 になり、送信する必要がなくなるように出力ラベルを生成します。[ 7 ]
この最適化では、アリスはグローバルな乱数 (k-1) ビット値を生成します。これは秘密にされている。入力ゲートの混乱中にそして彼女はラベルを生成するだけですそして他のラベルを次のように計算します。そしてこれらの値を使用して、XORゲートの出力ワイヤのラベルは入力線付き、設定されていますこの最適化におけるランダムオラクルモデルのセキュリティ証明は、Free-XOR論文で示されています。[ 8 ]
フリーXOR最適化は、難読化された回路プロトコルのデータ転送量(通信量)と暗号化・復号化回数(計算回数)が、ブール回路内のANDゲートの数のみに依存し、XORゲートの数には依存しないという重要な点を示唆している。したがって、同じ機能を表す2つのブール回路間では、ANDゲートの数が少ない方が優先される。
この方法により、SHA-2のような高コストな暗号学的ハッシュ関数ではなく、固定鍵AESを使用してANDゲートを効率的に難読化および評価できます。Free XORおよび行削減技術と互換性のあるこの難読化方式では、出力鍵は入力トークンで暗号化されていますそして暗号化機能を使用する、 どこ、は固定鍵ブロック暗号(例えば、AESでインスタンス化される)であり、は、ゲートごとに一意な番号(ゲート識別子など)で、tweakと呼ばれます。[ 9 ]
この最適化により、ANDゲートのガーブルテーブルのサイズが、行削減時の3行から2行に削減されます。これは、特定のクラスのガーブル技術の場合、ガーブルテーブルの行数の理論上の最小値であることが示されています。[ 10 ]
ガーブルド回路は、COTI V2のようなプライバシー保護暗号システムにおいて、マルチパーティ計算や機密スマートコントラクトを保護するために広く使用されています。COTI V2は、ガーブルド回路をマルチパーティ計算(MPC)と統合し、パブリックブロックチェーン上で機密トランザクションやプライベートデータ処理を可能にするイーサリアムレイヤー2プロトコルです。[ 11 ]
Yaoのガーブルド回路は、半正直な攻撃者に対して安全です。この種の攻撃者はプロトコルに従い、悪意のある行為は行いませんが、プロトコルで送信されるメッセージを精査することで、相手側の入力のプライバシーを侵害しようとします。
プロトコルから逸脱する悪意のある攻撃者に対してこのプロトコルを安全にすることはより困難です。悪意のある攻撃者に対してプロトコルを安全にするための最初の解決策の 1 つは、プロトコル中に悪意のある活動を防ぐためにゼロ知識証明を使用することです。 [ 12 ]長年、このアプローチは、その複雑さのオーバーヘッドのために、実用的な解決策というよりは理論的な解決策と考えられていました。しかし、わずかなオーバーヘッドで使用できることが示されています。[ 13 ]別のアプローチは、回路に複数の GC を使用し、そのサブセットの正しさを検証してから、残りを計算に使用することです。これは、ガーブラーが悪意のあるものであれば、検証フェーズ中に検出されることを期待してのことです。[ 14 ]別の解決策は、評価者がガーブリングされた回路を検証できるように、ガーブリング スキームを認証することです。[ 15 ] [ 16 ]