Secret-Sharing

條件布爾電路

  • November 19, 2022

經過多次搜尋後,我有兩個問題無法找到直接的答案。

(1) 我們可以使用 Garbled Circuit 對任意函式執行 2 方 MPC。為此,我們首先需要將函式轉換為布爾電路,然後對其進行亂碼。有沒有可用的工具可以將任意函式轉換為布爾電路?假設我想從給定的輸入中對三個數字進行排序。如何將此函式轉換為布爾電路?

(2) 條件語句在布爾電路中是如何工作的?我了解 mux 或 X 開關和 Y 開關操作可以完成簡單的操作,例如 if (c) swap(a,b) 可以完成。但是它在多個語句的情況下如何工作?

例如,我有三個數字 a、b、c。我要執行的操作如下所示:

func(a,b,c):
   if c == 1:
       c = a + b
       a = 2 * c
       b = 2 * a
   else
       a = 0
       b = 0

上面的函式在布爾電路中會是什麼樣子?如果可用,請給我參考。

謝謝。

假設我想從給定的輸入中對三個數字進行排序。如何將此函式轉換為布爾電路?

對於這個特定問題,有簡單的答案。使用電路(當人們想要並行排序時會出現)對數字進行排序的傳統方法是使用排序網路。對於非常小的輸入大小,最佳排序網路是已知的。一般來說,具有最佳漸近性 (AKS) 的排序網路並不是特別實用。相反,一個好的(一般)建議是Batcher Odd-Even Mergesort,它使用 $ O(n (\log n)^2) $ 比較,而且是深度 $ O((\log n)^2) $ 電路。

條件語句如何在布爾電路中工作?

主要答案是“他們很痛苦”。一般(條件)語句可以看作是計算某種形式的東西。

if val:
   C1(x1,...,xn)
else:
   C2(x1,...,xn)

在這裡,C1 和 C2 是較小的電路/功能/等等。無論如何,要使用電路計算此分支,首先可以通過編寫將其轉換為無分支

ytrue = C1(x1,...,xn)
yfalse = C2(x1,...,xn)
yreturn = (val and ytrue) or (not val and yfalse)

本質上,當 val 為真時,可以將其簡化為分支的第一部分。當 val 為假時,可以將其簡化為分支的第二部分。

原則上,將一些範圍廣泛的程序編譯成二進制電路應該是直截了當的。搜尋“MPC Circuit Compiler”可找到一些相關結果,即這篇論文,其中包括對先前文獻的一些討論。

引用自:https://crypto.stackexchange.com/questions/102857