比特或
上次的科普介绍了共享随机数和比特分享,通过共享随机数来实现比特分享,再通过比特分享来实现本次要介绍的比特串比较。
在介绍比特比较之前先简单介绍一下比特的或。比特异或的实现方法较为简单,利用之前介绍过的2下Shamir共享机制的加法就能实现。而比特或则无法直接通过Shamir共享机制的加法或者乘法实现。
注意之前介绍过,在算数电路上实现乘法和加法即可实现任意函数,而在布尔电路上实现异或和与即可实现任意函数。安全多方计算就是为了在保护隐私信息下共同计算目标函数,如果把比特与通过使用加法和乘法的函数表示,那么即可通过加法和乘法实现与门的功能。
思考一下与的特点,当多个比特相或时,其中只要有一个比特的值为1,或的结果就是1,因此可以统计出现1的个数,只要超过0次,最后的值就为1。可以设计出这样一个函数:若函数有个输入,分别为1,…,,则让\( g=1+\sum{_{i=1}^{l}} x_{i} \),让实现与的函数为(1,…,):
将\( g=1+\sum{_{i=1}^{l}} x_{i} \),是因为当\( \sum{_{i=1}^{l}} x_{i}=0 \)时会泄露信息。回忆一下,在Shamir秘密分享机制中,当秘密分享函数的输入为0时,得到的就是秘密,因此需要避免输入为0。让\( g=1+\sum{_{i=1}^{l}} x_{i} \)可以使得函数()的定义域从[0,]变为[1,+1],从而避免出现输入为0的情况。()的具体实现则可通过有个未知系数的方程,个方程解个未知数即可,即(1)=0,(2)=⋯=(+1)=1。把\( g=1+\sum{_{i=1}^{l}} x_{i} \)和()映射到Shamir秘密共享机制上,加法和乘法对应Shamir中的加和乘,即可实现在共享的比特上的或计算。
比特比较(Bitwise Compare)
具体要介绍的比较为小于,即如果比特串<,则得到的结果为1,如果>,则得到的结果为0。假设有两个比特长的比特串和,分别为\( =_0_1⋯_{-1}和=_0_1⋯_{-1} \),首先将比特串和按比特进行异或,得到比特串\( =_0⋯_{-1} \),其中\( _=_\oplus_,0≤≤−1 \)。再计算比特串\( =_0⋯_{-1} \),其中\( d_{j}=\vee_{i=0}^{j} c_{i},0≤≤−1 \),即比特串的第位比特是比特串从高位起前位比特的或。
比如,如果比特串=100 101 ,比特串=101 011,比特串为比特串和按位异或的结果,比特串=001 110,比特串\( d=d_0...d_{l-1} , d_0=c_0 , d_1=c0 \vee c1 , d2=c_0 \vee c_1 \vee c_2 , d_{l-1}=c_0 \vee c_1 \vee... \vee c_{l-1} \),可以得到比特串=001 111。比特串的第位比特是比特串从高位起前位比特的或,可以观察到当比特串中某个比特是整个比特串中第一位为1的时候,比特串从那位起之后都为1。如以上举的例子中,3为比特串中第一个出现1的比特,则比特串的3以及3之后都为1,之前都为0。
再接着让\( _=_{-1}−_ \), 1≤≤−1, 0=0,因此可以得到比特串,在上面这个例子中,得到的比特串=001 000,即比特串会保留比特串中第一位出现1的那位,其余位均为0。
最后,计算\( \sum{_{i=0}^{l}} d_{i}.b_{i} \)即为最后的结果,在上面这个例子中结果为1,和比特串<相符合。
它所使用的原理是,如果比特串>,那么比特串中第一位1出现的一定比比特串中的第一位1要早,否则比特串就小于等于比特串。
将比特串和按位进行异或得到后,比特串中第一位1出现的位置就是比特串和中最早的第一位1出现的位置。那么如果比特串中第一位1出现的位置和中最早的第一位1出现的位置相同,就说明>。而接下去做的步骤就是为了证明比特串中第一位1出现的位置和中最早的第一位1出现的位置是否相同。在上面的例子中,用橘色表示1,蓝色表示0,则、、为:
比特串是从第一位1出现起,之后都为1。比特串是除了第一位1出现的位置为1,其余位都为0。即成功将中第一位出现1的位置提取了出来。在上面的例子中,和用图形表示为:
现在比特串中1的位置即为中第一位出现1的位置,将和进行按位与,如果第一位出现1的位置和中1的位置相同,那么该位按位与的结果就是1,其余位均为0,所有位相与结果之和就是1。反之,第一位出现1的位置和中1的位置不同,则为0。
将上述比较方式中的, 的各个比特都采用比特分享的方式进行分享,后续的「异或」以及「或」操作都采用我们之前介绍过的对子秘密的「比特异或」和「比特或」操作,即可实现对,的多方比较,且不向任何参与者泄露,的具体值。