使用Microsoft SEAL能否仅对密文的指定槽位执行乘法运算
BFV方案BatchEncoder槽位操作问题解答
示例场景:在BFV方案中使用BatchEncoder时,第一个密文对应明文为[1,2,3,4,5,0,0,0……],第二个密文对应明文为[-1,-2,-3,-4,-5,-6,0,0……],二者相加后输出密文对应的明文为[0,0,0,0,0,-6,0……]。
问题1:仅获取密文前5个槽位的数值是否可实现,如何操作?
可以实现,根据使用场景可选两种操作方案:
- 无需保留密文态,仅需明文结果:直接对密文执行解密、BatchDecoder解码操作,得到全槽位的明文数组后,直接截取前5个元素即可,该方式算力消耗最低。
- 需要保留密文态(后续还要执行其他密文计算):先生成一个明文掩码,前5个槽位赋值为1,其余所有槽位赋值为0,将目标密文与该掩码明文执行
密文-明文乘法运算,得到的新密文仅前5个槽位保留原始值,其余槽位均为0。该操作不会提升密文计算深度,开销极低。
问题2:是否支持仅将两个密文各自的前5个槽位执行乘法运算?
可以支持,根据使用场景可选两种实现方案:
- 密文态下执行运算:先按问题1中提到的掩码方案,分别对两个原始密文做掩码处理,将两个密文非前5位的槽位全部清零,再执行常规的密文乘法运算即可。得到的结果密文只有前5个槽位是对应位置的乘法结果,其余槽位均为0,不会影响后续计算。
- 无需保留密文态:可直接将两个密文分别解密、解码,各自截取前5个元素执行明文乘法,若后续需要密文存储/计算,再将乘法结果重新编码加密为密文即可,该方案比全密文操作的算力开销小很多。
内容的提问来源于stack exchange,提问作者Nandini Malhotra
相关产品推荐
相关产品推荐

