條件布爾電路
經過多次搜尋後,我有兩個問題無法找到直接的答案。
(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”可找到一些相關結果,即這篇論文,其中包括對先前文獻的一些討論。