Garbled-Circuits
如何在亂碼電路中安全地設置常數值?
假設有一些必須在電路內部設置的常數值。天真的方法是簡單地將所需的常數作為輸入傳遞給電路。但這似乎很浪費。
在亂碼電路中設置(即硬編碼)常量值的正確方法是什麼?
我假設這些硬編碼的常量是公開的(亂碼者和評估者都知道)。有幾個選項:
- 就像您建議的那樣,將常量視為電路的額外輸入。請注意,輸入線可以重複用於許多門,因此整個電路只需要一根
true
和false
線。大多數亂碼方案都not
免費支持門,所以你實際上只需要一根恆定的true
電線。此外,事實證明,您始終可以將true
線標籤視為全零字元串,而不會失去一般性。結合所有這些觀察結果,額外的恆定輸入線不會增加電路成本。- 通過電路傳播常數。例如,門
y=AND(x,true)
變為 justy=x
,這意味著您可以在用作輸入的任何下游門中替換y
線。門變為,您可以再次在用作輸入的門中向下游傳播。通過這樣做,您將看到硬編碼常數下游的許多門可以簡單地從電路中完全移除。這個過程與亂碼無關,只是簡化了基於硬編碼輸入的布爾電路。x``y``y=AND(x,false)``y=false``y=false``y
如果只有亂碼者知道常量,那麼目標是在隱藏這些常量的同時簡化電路/亂碼。
大多數亂碼方案(當然還有最先進的方案)都支持吸收自由
not
門的門,這意味著您可以以與亂碼門相同的成本對and(not(x),y)
, , … 門進行亂碼。事實上,這些亂七八糟的方案隱藏了這些門的存在。使用這個觀察,你仍然可以從上面做#1。如果您需要對門進行硬編碼,那麼您可以將單個輸入線輸入表單的門,同時隱藏它的存在(即隱藏門是否使用 a或進行硬編碼)。and(x,not(y))``and``not``y=and(x,false)``true``y=and(x,NOT(true))``not``true``false
但是,您可以通過使用半門結構中的“亂碼半門”做得更好。這使您可以在隱藏哪個是亂碼的同時隱藏一個
and(x,true)
或and(x,false)
門的亂碼,而成本僅為成熟門的一半and
。