同态加密:使用 PALISADE 库的矩阵向量乘法

Homomorphic encryption: Matrix Vector multiplication using PALISADE library

致所有他的专家:

我想用非常大的矩阵 (600000 x 55) 实现矩阵向量乘法。目前,我能够使用少量输入执行加法、乘法、InnerProduct 等操作。当我尝试对较大的输入应用这些操作时,我会收到类似 Invalid next size (normal) 或 运行 之类的错误,直到 os 终止进程(退出代码 9)。

您是否有任何 recommendations/examples 如何归档实现矩阵向量乘法或类似方法的有效方法? (使用 BFV 和 CKKS)。

PS:我正在使用 PALISADE 库,但如果您有更好的建议,如 SEAL 或 Helib,我也很乐意使用它们。

CKKS 在 PALISADE 中也可用,对于您的场景来说是一个更好的选择,因为它支持近似 (floating-point-like) 算法并且不需要高精度(大明文 modulus ). BFV 准确执行所有操作(mod 明文 modulus)。您将不得不使用非常大的明文 modulus 来确保您的结果不会环绕明文 modulus。随着深度的增加,情况会变得更糟,例如,两个链式乘法。

对于 matrix-vector 乘法,您可以使用 https://eprint.iacr.org/2019/223, https://eprint.iacr.org/2018/254, and the supplemental information of https://eprint.iacr.org/2020/563 中描述的技术。主要思想是选择正确的编码并利用 SIMD 打包。您将使用 power-of-two 向量大小,并且可以将矩阵打包为每个密文 64xY(多行)或每个密文每行的一部分,具体取决于哪个更有效。