Kolesnikov的門估值秘密共享方案(Gate Evaluation Secret Sharing,GESS)是高效的資訊理論安全的亂碼電路方案。
對於一個門G來說,輸入線為?1,?2輸出線?3,其真值表一共就四種可能性:
在GESS方案中,每條導線的輸入都是子秘密,子秘密由秘密共享方案產生,所有的輸出是秘密分享方案中將要被分享的秘密。
使用者?1生成導線標籤:
(?10,?11),(?20,?21)。???, ?∈{1,2},?∈{0,1}
對應導線??輸入為?的情況。因此一共可能的輸入情況有四種,導線?3也有四種輸出記為?00,?01,?10,?11。
首先GESS生成兩個隨機數?0, ?1,讓?10對應的加密值為?0,讓?11對應的加密值為?1。當導線?1輸入為0時,對應於?10,導線?2也有兩種輸入的可能,分別為0和1,對應兩個導線?3的輸出。
同理如果確定了導線?2的輸入如為?20,根據導線?1的不同輸入0和1,也只會有兩種輸出可能?00和?10(注意這裡?00和?01只代表輸出可能,實際根據具體的門?,?00和?01的具體值可能相 等也可能不等)。
GESS將導線?1的兩種輸入可能?10和?11與輸出可能相繫結,作為?2的輸入。即把?00⨁?0∥?10⨁?1作為?20的加密值,把?01⨁?0∥?11⨁?1作為?21的加密值,∥符號表示連線。如當輸入導線?2的輸入為0,則導線?2的加密值為?00⨁?0∥?10⨁?1,導線?1輸入有兩種可能,當導線?1輸入為0時,?1的加密值為?0,?0可以與導線?2的加密值前半部分?00⨁?0相異或,解密出?00,正是?1和?2輸入為0,0時的輸出。當導線?1的輸入為1時,?1的加密值為?1,?1可以與導線?2的加密值後半部分?10⨁?1相異或,解密出?10,正是?1,?2的輸入為1,0時?3的輸出。當輸入導線?2的輸入為1時同理。
可以把表的行按?2的輸入值重新排序:
因為電路計算時?1對應的是加密值?0和?1,為了標識出解密?2的加密值時需要使用的是哪個部分,需要對?0和?1附加一個指標位元?,用來告知重構各個 子秘密的參與者使用?2的哪一部分進行解密,可以實現約定當指標位元?=0時,使用?2的左半部分,當?=1時,使用?2的右半部分。
為了掩蓋各個資料塊的順序,再產生一個隨機的翻轉位元?,用於打亂資料塊的順序。如當?=0時,保持原來順序,當?=1時,將一二兩行和三四兩行進行對調。
GESS在密文狀態下對門G進行求值,輸出導線的加密值是與兩條輸入導線的加密值所關聯,可以逐門進行秘密分享,不需要在電路求值過程中解碼出中間明文值。
對於GESS方案來說,導線?2的輸入長度是?1長度的兩倍,當電路深度增加時,導線的輸入會越來越長。為了降低輸入長度,可以根據OR門和AND門的特性進行最佳化。先觀察與門的真值表,如下圖所示:
可以看到與門的輸出導線?3的結果中有三個相同,即?00=?01=?10。
因此導線?2對應的加密值有多行的值相同,統一用?00代替,可以得到:
可以看到當導線?2的輸入的左側都相等,因此?2的輸入左側只需要一?0⨁?00即可,以此來降低資料量。同理,對於或門也可以進行類似的替代,以降低資料量。OR門的真值表如下圖所示:
可以觀察到在真值表中,OR門輸出導線?3有三行都相同,即?01=?10=?11:
統一使用?01進行代替,可得:
可以看到當導線?2的輸入右側部分只需要一組?1⨁?01,可以直接使用一組?1⨁?01來作為導線?2的右側輸入,以此來降低資料量。