目前正在尝试使用PALISADE 库进行同态加密。
我想在大型加密输入上应用简单的运算,例如加法和乘法。例如输入A[3200]
和输入B[4096]
两个向量/int值数组都被加密。有了这两个输入Enc(A)
,Enc(B)
我想应用一个乘法:
EvalMult(Enc(A[0]), Enc(B[42]))
*0 and 42 denoting the indexes of the corresponding inputs
** no SIMD needed
就我而言,上述要求的实现可以通过两种不同的方式解决:
将输入打包在单个密文(类似 SIMD)中,对于我可以用来
EvalIndexAt()
从加密输入中获取正确值的操作。分别加密来自 A 和 B 的每个值。
我不太确定所描述的解决方案在效率方面是最好的。第一种方法的主要优点是整个输入只需要一个加密过程,但这也带来了缺点,即我总是必须使用该 EvalAtIndex()
方法访问正确的元素,并且输入越大,获取的计算越慢EvalAtIndexKeyGen()
。(至少在我的机器上)
第二种方法似乎更合适,因为EvalAtIndex()
不需要,但它带来了单独加密每个值的成本,这需要相当长的时间。
有什么想法建议吗?