当前位置:   article > 正文

同态加密和SEAL库的介绍(八)性能_同态加密算法 性能

同态加密算法 性能

        本篇会对比三种加密方案,同时每种方案配置三种参数。即九种情况下的各个操作的性能差异,为大家选择合适的方案和合适的参数提供参考。表格中所有时长的单位均为微妙,即 1 \, s = 10^6 \, microsecond 。
        当然数据量比较大,为了方便大家查找,按照不同级别标题进行了区分,便于跳转。

注意

        本篇所写的测试数据仅具有相对意义(即不同性能的计算机跑出来时长有差异),不能简单的作为衡量标准。同时,不同的加密参数导致的性能差异较大,加密的数据不同也会影响操作的性能,所以具体情况还是要自己进行实验。
        示例中所有操作,均为执行了十次后取的平均值。并且主要会对比不同方案,不同 poly_modulus_degree 下的性能差异,但是 coeff_modulus 的设置也是适当匹配 poly_modulus_degree 大小的。即不同参数设置差异较大,变量不是唯一的。

一、加密参数展示

1.1 三种 BFV 方案参数

1.2 三种 BGV 方案参数

1.3 三种 CKKS 方案参数

二、产生密钥效能对比

        不同例子中,密钥产生的时长首先是需要考虑的。尤其是Galois密钥,可能会占用大量内存,这在受限系统中可能是个问题,应该尝试一些更大的测试运行,并观察它们对内存池分配大小的影响。
        下面比较时长差异较大的 relinearization keys 和 Galois keys。

2.1 relinearization keys

4096819216384
BFV22359131629880082
BGV24174144649977182
CKKS23205135087893252

2.2 Galois keys

4096819216384
BFV471257322943123322354
BGV517306359257625117895
CKKS478956314280623158120

三、编解码

编码这里 BFV 和 BGV 采用的都是 Batch Encoder,CKKS采用的是CKKSEncoder。

3.1 编码

4096819216384
BFV56211982513
BGV55112262687
CKKS39701109735688

3.2 解码

4096819216384
BFV69412172591
BGV60412192683
CKKS68402339186703

四、加解密

4.1 加密

4096819216384
BFV2880790978325499
BGV33401111285398689
CKKS2639482988297074

4.2 解密

4096819216384
BFV815528594111851
BGV58872164583201
CKKS2234818534076

五、加法

        加法这里只统计了密文加密文的加法函数,因为和明文加密文函数的差异不大,并且和乘法相比,加法时间更短,也基本没有噪声损失。故选择算法时,尽量用加法来减少乘法次数。

4096819216384
BFV1907764831280
BGV1992776030592
CKKS1976785030895

六、乘法

5.1 明文乘密文

4096819216384
BFV785932869142946
BGV39701589463479
CKKS2254866834371

5.2 密文乘密文

4096819216384
BFV1056313921501626688
BGV54892152685366
CKKS54202182986503

5.3 平方

4096819216384
BFV731872729061137618
BGV46461731968582
CKKS43421713368566

七、旋转

6.1 行旋转 - 一步

4096819216384
BFV21078111939718794
BGV28039138755791834
CKKS22252117407726842

6.2 行旋转 - 随机步长

        这里用随机函数,生成一个步数,旋转记录时长,即十次旋转的都不同,最后取平均。当然只是为了比对单步的行旋转,说明多步需要更多的时间。 

4096819216384
BFV863873907852855098
BGV1160925369963550023
CKKS833905173973339613

6.3 列旋转

4096819216384
BFV211123907852855098
BGV27963137158789150

八、重新线性化

4096819216384
BFV21106111579715234
BGV27121134387775288
CKKS21871115797726314

九、Rescale

因为 rescale 操作只在CKKS方案中进行,这里虽然不比较,但是列出来供大家参考:

4096819216384
CKKS37131901779439

十、总结

这里简单总结几点我发现的规律:

  1. 同一方案下,操作的时长并不是跟着 poly_modulus_degree 的倍数,成倍数增长,故槽的数量大了,虽然一次能处理的数据更多,时间代价会更大
  2. CKKS 和 BFV 方案相比,编解码时间长了,但是乘法时间更短,尤其是密文乘密文;
  3. 直接旋转 n步长 的时间是快于一次转一个转 n次的;
  4. 密文乘密文 的时间成本要明显大于 明文乘密文,故尽量采用明文乘法;
  5. 重新线性化的时间成本并不低,虽然减少了密文长度,但是其代价也是要纳入考量的;
  6. 这里的参数大小配置是相适应的,但是要想获得最优性能,还是应该根据自己的数据和算法,定制一个合理的噪声预算和算法顺序。

        总结就是,用同态加密实现功能不难,但是在保证正确性的前提下提高效能是个要具体情况具体设计的问题,需要花功夫花时间取钻研的。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号