alibaba-edu / mpc4j

Apache License 2.0
211 stars 42 forks source link

关于SKE-PSU跑的很慢 #46

Closed sycamoreeeee closed 1 week ago

sycamoreeeee commented 1 week ago

开发者您好,我在测试ZCL22 PSU的unit test的时候,发现SKE-PSU在运行速度上非常慢,与论文中报告的数据相差很多,比如集合大小2^14时 PKE约为9s,SKE约为57s,GMR为1.7s。我想请问这是什么原因? 我使用的版本是v1.1.1,CPU是2.9GHz。

liuweiran900217 commented 1 week ago

主要原因是SKE-PSU最慢的地方在于布尔三元组生成。如果能在offline阶段生成并缓存布尔三元组,则在线阶段就会很快。会议版本的论文里也说明了“In SKE-PSU, we assume a commonly used setting where Boolean multiplication triples are pre-computed offline and stored locally in a temporary file.”

USENIX Security 2023的代码版本为v1.0.4,那个版本支持offline(或者说init)阶段一口气把所有的布尔三元组都计算完并缓存到文件里。因为后续研究里面我们发现,通用协议里面布尔三元组的需求量甚至可能会超过int的表示范围,因此后续版本我们把“缓存到文件”这个操作隐藏了起来。如果想复现这个结果,一种简单的方法是使用Trusted Dealer模式。mpc4j-s2pc-pso的test里面有一个PsuAidTest演示了实现方法。不过,我们目前还没有在main里面增加这部分代码,你需要在main里面加一些代码,允许启动一个辅助方。

liuweiran900217 commented 1 week ago

full version版本论文的附录G4提供了布尔三元组生成的时间,我理解你报告的总时间和G4里面列出的时间加上online的时间比较接近。

sycamoreeeee commented 1 week ago

感谢刘博士的详尽解答,我在Z2c的Bea91里看到了每次and都会在线调用一次Z2Triple triple = mtgSender.generate(bitNum),我理解这一部分的时间的总和应该就是原论文中放到离线阶段2PC生成的时间,再次感谢 : )