SIMD编码/解码
在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码、打包、SIMD到底有什么关系?
编码
在CKKS方案中,因为明文空间在复数域上,简单的说一个明文就是一个复数向量,那么CKKS是基于RLWE问题,计算是在环上,也就是整数多项式上,所以在加密之前需要进行编码,将一个复数向量编码成一个整数多项式,然后在加密,进而计算。
那如何将一个复数向量编码为了整数多项式?
具体细节请参考:CKKS Part2: CKKS的编码和解码
BGV和BFV方案同样也是,都是基于RLWE问题,计算是在环上,不同的是他们的明文空间在整数域上,所以也需要编码,将其转化为一个整数多项式。
简单点说,CKKS中的编码:
1、首先通过一个映射,将复数向量转成实数多项式
2、然后通过放大实数多项式的系数,然后取整的操作,实现了实数多项式转整数多项式
新的编码技术
由于已知的全同态加密方案一般不支持对有理数进行加密,因而本文需要建立连接有理数与整数的纽带。在不影响有理数精度的情况下,最简单的方法是将有理数乘以一个固定数 B 的幂,例如 \(B^2\),其中 \(B ≥ 2\)。接着,再对处理后的有理数进行加密和同态运算。最后,将解密结果除以 B 的幂即可得到正确运算结果。然而,每经过一次乘法同态则需要一次对解密结果除以 B 的幂操作。
这里和CKKS编码很像,要乘以一个缩放因子,放大有理数;然后进行一次乘法同态后,缩放因子变大,所以每进行一次乘法同态就需要除于一次B的幂,和CKKS中的rescaling(重缩放)很像啊
这里【1】给出了一种新的编码技术,可以将一个有理数编码为环上元素
batch技术
也就是打包技术,从编码上看,就是将一个向量打包为一个多项式,多项式之间的计算,就是向量之间的计算。能加快计算速度,提升效率!
待补充.....
SIMD编码
SIMD(Simple Instruction Multiple Data)直接翻译是“单指令多数据”,网上搜索出来的大都是关于SIMD指令集,说该指令集支持向量化的数据并行,一个指令可以同时操作多个数据。听起来有那个打包的意思,但这是指令集,和编码有什么关系呢?
丢一个SIMD指令集在这,可以看看:
都说使用SIMD技术,可以提升效率,那SIMD到底是什么呢?
SIMD的发展
Smart 与 Vercauteren [18] 首次利用 SIMD技术将单比特的全同态加密方案扩展为多比特的全同态加密方案,实现了对消息的并行处理。遗憾的是该方案要求主理想范数为素数,使得算法的密钥生成过程过于复杂。2011 年,Gentry 和 Halevi [19] 提出一种运算速度更快的密钥生成算法,该算法抛弃了主理想范数为素数的假设。Scholl 和 Smart [20] 将文献 [19] 的快速密钥生成算法由 2 次幂分圆域扩展到任意分圆域,其算法效率为原先方案的两倍。2014 年,Smart等人 [21] 进一步对文献 [18] 的密钥生成算法进行优化,并介绍了如何进行参数设置以适用 SIMD 技术。
SIMD
大多数全同态加密方案的明文空间为 2。当明文消息很大时,将导致消息的编码时
间、加密时间及密文解密时间过长。为提高同态运算效率,可以利用 SIMD 技术 [21]
将多个小明文编码-加密成一个密文。
待补充......
参考
【1 】Manual for using homomorphic encryption for bioinformatics
【18】 Fully homomorphic encryption with relatively small key and ciphertext
sizes
【19】Implementing Gentry’s fully-homomorphic encryption scheme
【20】Improved key generation for Gentry’s fully homomorphic encryption
scheme
【21】Fully homomorphic SIMD operations
SIMD编码/解码的更多相关文章
- C# base 64图片编码解码
使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- java中文乱码解决之道(六)-----javaWeb中的编码解码
在上篇博客中LZ介绍了前面两种场景(IO.内存)中的java编码解码操作,其实在这两种场景中我们只需要在编码解码过程中设置正确的编码解码方式一般而言是不会出现乱码的.对于我们从事java开发的人而言, ...
- Unicode编码解码在线转换工具
// Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...
- .NET编码解码(HtmlEncode与HtmlEncode)
编码代码: System.Web.HttpUtility.HtmlEncode("<a href=\"http://hovertree.com/\">何问起& ...
- sed处理url编码解码=== web日志的url处理
URL 编码/解码方法(linux shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...
- ASP.NET中Url编码解码
今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...
- C++ Base64 编码 解码
C++实现 base64 字符串编码解码(GCC编译). /** * @brief C++ base64 编解码 * @author wid * @date 2013-20-25 * * @note ...
- 理解netty对protocol buffers的编码解码
一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...
随机推荐
- Kong 微服务网关在 Kubernetes 的实践
来源:分布式实验室译者:qianghaohao本文主要介绍将 Kong 微服务网关作为 Kubernetes (https://www.alauda.cn)集群统一入口的最佳实践,之前写过一篇文章使用 ...
- WEB开发的相关知识(Tomcat)
Internet上供外界访问的Web资源分为 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访 ...
- [STM32F10x] 使用printf函数进行串口调试问题
硬件:STM32F103C8T6 平台:Keil ARM-MDk V5.11 利用printf函数通过串口(USART)进行调试时遇到的一个问题: printf("Hello, Mini-M ...
- MySQL的学习记录 DAY03~
小记:昨天打了新冠加强针,今天开始拉肚子,嗓子疼,超级难受~
- 浅谈MySQL同步到ElasticSearch的几种方式及其优缺点
同步双写 优点:业务逻辑简单. 缺点: 硬编码,有需要写入mysql的地方都需要添加写入ES的代码: 业务强耦合: 存在双写失败丢数据风险: 性能较差:本来mysql的性能不是很高,再加一个ES,系统 ...
- golang中的udp编程
1. udp server package main import ( "fmt" "net" ) func main() { // udp server li ...
- 文本图Tranformer在文本分类中的应用
原创作者 | 苏菲 论文来源: https://aclanthology.org/2020.emnlp-main.668/ 论文题目: Text Graph Transformer for Docum ...
- 正向代理 、反向代理, 和 Linux系统配置nginx。
一.正向代理和反向代理的简单介绍. 2.代理 中间商,赚差价 在没有代理的时候: 茅台酒厂--->生产了一批酒--->通过物流发送到客户的家中/客户直接到酒厂购买酒--->突然有一个 ...
- Git refusing to merge unrelated histories (拒绝合并不相关仓库)
感谢原文作者:lindexi_gd 原文链接:https://blog.csdn.net/lindexi_gd/article/details/52554159 本文讲的是把git在最新2.9.2,合 ...
- 导出SQL语句
转载请注明来源:https://www.cnblogs.com/hookjc/ if(!($db_conn=mysql_connect($db_server,$db_name,$db_pass))){ ...