mpc4j icon indicating copy to clipboard operation
mpc4j copied to clipboard

mpc4j-s2pc-pir--初始化编辑多项式分区及填充问题

Open Eileen2014 opened this issue 9 months ago • 3 comments

我有一个问题,就是partitionCount,是不是有多处不同含义的应用?哈希桶中每个桶分为partitionCount个,但是server端计算多项式返回的时候为什么也分区了?返回的数量是[partitionCount*密文数][多项式模数]?这个分区我不是很能理解

还有就是在布谷hash这一步实际上进行了两次的填充,如果在数据量很大的时候这两次填充很吃内存,是否能省略掉一次填充?

Eileen2014 avatar May 11 '24 07:05 Eileen2014

你好,partitionCount变量是每个分桶根据多项式的最高阶对分桶内元素进行分块后得到的分块数目。服务端在计算时需要对于每一个分块分别进行计算,因为服务端无法确定,如果某个元素属于交集集合时,该元素在哪个分块。 我没有太理解你说的布谷hash两次填充的意思,我理解布谷hash分桶数目是固定的,因此所要存储元素总量也是固定的。 不确定有没有解释清楚你的问题,如果还有疑惑,请随时与我们交流。

gengxu270998 avatar May 11 '24 07:05 gengxu270998

先说填充的问题就是在sortedHashBinEntries计算分区的时候进行了一次填充,我打印日志出来可以看出基本上每个分区都是不足最大分区数的,有的分区只有几个数据,但是仍然进行了填充(这里我其实有个疑问,去重的时候是对每个Item先分段只要有分段重复就分到第二区,这里的不是很清楚为啥),第二次填充在generateCompleteHashBin的最后一个循环中,这个填充数量也很大,比如有的桶只有1个分区,要和数量最大的桶(假设有3个分区)对齐,就要增加两个分区。

然后是第一个问题我先理解一下

Eileen2014 avatar May 11 '24 08:05 Eileen2014

去掉重复是因为在计算多项式f(x)时,相同的x要对应相同的y,否则无法差值计算出多项式系数。第二次分桶确实可以优化内存,我们实现时没有考虑这一块,也可以在多项式编码时,再对是空的元素取与客户端不等的值也可以。

gengxu270998 avatar May 11 '24 08:05 gengxu270998

感谢回答

Eileen2014 avatar May 27 '24 01:05 Eileen2014

我这里还有一个问题,就itemEncodedSlotSize是什么概念?我看到有两个地方用到了这个,一个是在布谷hash分partition的时候,会把一个数据分成itemEncodedSlotSize段,如果有任意一段在同一个partition中出现过就将这个数放到第二个partition。还有就是多项式计算的时候在计算多项式系数的时候每个数的fCoeffs的存储也是分成了itemEncodedSlotSize份,请问这两个地方的作用?

Eileen2014 avatar May 30 '24 01:05 Eileen2014

由于系数的比特长度只有20比特左右,需要用多个系数表示一个数据。itemEncodedSlotSize表示需要使用的系数个数。你提到的这两个地方是同一个意思,一个是服务端的操作,一个是客户端的操作。

gengxu270998 avatar May 30 '24 01:05 gengxu270998

感谢回复

Eileen2014 avatar Jul 09 '24 06:07 Eileen2014