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进行代替,可得: