同态加密和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. 这里的参数大小配置是相适应的,但是要想获得最优性能,还是应该根据自己的数据和算法,定制一个合理的噪声预算和算法顺序。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BSidesCF 2019]Kookie1

打开题目,看到 根据提示,账号:cookie。密码:monster。试一下登录,登陆成功 抓包看看信息 根据提示, 看一下返回包 账号要加username要改成admin,改一下试试 构造cookie 直接得到flag flag{c…

Redis远程字典服务器(3)——常用数据结构和单线程模型

目录 一,常用数据结构 1.0 前言 1.1 string 1.2 hash 1.3 list 1.4 set 1.5 zset 1.6 演示 二,关于单线程模型 2.1 关于Redis的单线程 2.2 Redis为什么快 一,常用数据结构 1.0 前言 Redis是采用键值对的方式来存储数据的&#…

探索算法系列 - 前缀和算法

目录 一维前缀和(原题链接) 二维前缀和(原题链接) 寻找数组的中心下标(原题链接) 除自身以外数组的乘积(原题链接) 和为 K 的子数组(原题链接) 和可被 …

Java—抽象类和接口 (´▽`)ノ

目录: 一、抽象类: 1、概念: 在面向对象中,所有对象都是由类来创建的,但是呢,并不是所有的类都用来创建类,如果一个类不能描述一个具体的对象,那么这个类就是抽象类。 可以看到,我们…

kotlin简介

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。 在Google I/O 2017…

嵌入式软件中状态机的几种操作

嵌入式软件中状态机的几种操作 1、状态机的术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完…

Animate软件基本概念:遮罩层和引导层

这里简单讲一下Animate软件中关于遮罩层和引导层的基本概念。 FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&…

Hadoop集群安装配置,spark集群安装配置

前提:准备3台linux服务器,并保证其网络可进行相互通信 假设三台机器IP分别为: 192.168.88.101 192.168.88.102 192.168.88.103一.配置三台服务器之间SSH免密登录,关闭防火墙,时间同步 三台服务器均执行以下1,2,3,4,5,6,8命令 1…

【MongoDB 】MongoDB 介绍及应用,设计到4个案例

MongoDB 介绍概述 基础概念 MongoDB 是非关系型数据库,也就是nosql,存储json数据格式会非常灵活,要比数据库mysql/MariaDB更好,同时也能为mysql/MariaDB分摊一部分的流量压力。 对于经常读写的数据他会存入内存,如此…

视频剪辑SDK,人脸美化与滤镜特效,焕发直播新活力

在数字化浪潮席卷全球的今天,直播已成为连接品牌与消费者、创作者与观众的重要桥梁。为了在激烈的直播竞争中脱颖而出,提供高质量、富有创意的直播内容成为关键。美摄科技,作为视频处理技术的先行者,携手其强大的视频剪辑SDK解决方…

2024年计算机类学术会议有哪些

随着科技的飞速发展,计算机科学与技术领域正以前所未有的速度进步,各类学术会议成为了交流最新研究成果、探讨前沿技术趋势的重要平台。2024年,全球范围内将举办多场计算机类学术会议,这些会议不仅汇聚了顶尖的专家学者&#xff0…

一六三、go多版本安装与切换

如何安装多版本 官方安装方法 参考链接 当已安装某个版本后,执行如下命令 go install golang.org/dl/go1.19.7latest go1.19.7 download执行第一行命令后,会在GOPATH中新增go1.19.7。执行第二行命令后,会在sdk目录下载完整的包。 通过sm…

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划(enterprise resource planning,ERP)是制造企业的核心管理软件。ERP系统的基本思想是以销定产,协同管控企业的产、供、销、人、财、物等资源,帮助企业按照销售订单,基于产品的制造…

gitlab-runner /var/run/docker.sock connect permission denied

usermod -aG docker gitlab-runner sudo service docker restart参考:https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3492

如何在 Android 手机/平板电脑上恢复误删除的 DCIM 文件夹

DCIM 文件夹是智能手机和平板电脑上最重要的文件夹之一。许多人报告说他们在 Android 设备上遇到了 DCIM 文件夹为空的问题。实际上,这种情况大多数情况下都会发生,当您意外从 Android 设备中删除 DCIM 文件夹或因病毒攻击、应用程序问题和意外格式化等原…

1-5 C语言 - 类型修饰符关键字const和volatile的概念及使用(超详细)

本节重点讲述类型修饰符关键字const和volatile的概念及使用,如果想详细了解关键字的同学点击下方链接进行跳转 1-1 C语言 - 关键字及其使用(数据类型)-CSDN博客 1-2 C语言 - 控制语句关键字-CSDN博客 1-3 C语言 - 控制语句的使用注意事项(这些绝对是您…

2024鸿蒙开发【面试题库】,转岗看这一篇就够了

鸿蒙面试浪潮来袭,你是否也想着利用这次机会去实现,跳槽涨薪的梦呢? 如果关注了华为鸿蒙的人应该知道:鸿蒙开发岗位需求飙升6倍! 可想而知该岗位前景多么广阔,为此就为大家整理些(鸿蒙HarmonyO…

springboot社区旧物回收系统-计算机毕业设计源码94813

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 社区旧物回收系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 社…

SQL面试题练习 —— 计算用户首单是即时单的比例

目录 1 题目2 建表语句3 题解 题目来源:美团。 1 题目 在外卖订单中,有时用户会指定订单的配送时间。现定义:如果用户下单日期与期望配送日期相同则认为是即时单,如果用户下单日期与期望配送时间不同则是预约单。每个用户下单时间…

gogs的安装和使用(docker)

1.docker安装gogs 1.1 拉取gogs镜像 docker pull gogs/gogs #也可改为自己需要的版本号 1.2 创建存储目录 mkdir /root/gogs 1.3 运行镜像 docker run --namegogs -d -p 10022:22 -p 13000:3000 -v /root/gogs:/data gogs/gogs 1.3.1 指令解析 --namegogs: 指定名称…