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)定制能力 ...
随机推荐
- 极简promise雏形
function Promise(fn) { var value = null, callbacks = []; //callbacks为数组,因为可能同时有很多个回调 this.then = fun ...
- 【记录一个问题】golang中的time.Now()非常慢
对一个代码做profile: 总函数调用 29.74s 20.25s 153: timestamp := time.Now().Unix() 这样的一行占了20.25秒. 我知道linux下 time ...
- golang中channel
1. Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication). 2. select package main im ...
- Go 命令行参数,JSON 序列化与反序列化
#### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化; 命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , ...
- 不难懂-----redux
一.flux的缺陷 因为dispatcher和Store可以有多个互相管理起来特别麻烦 二.什么是redux 其实redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 ...
- linux实时监控并实时备份数据(rsync)
目录 一:rsync实时监控备份流程 1.安装rsync(服务端 与 客服端)守护进程模式 2.修改配置文件(服务端) 3.解析配置内容 4.创建系统用户 5.创建密码文件 6.授权(必须授权为600 ...
- Hexo博客(Snail主题)搭建回顾概览
Hexo博客(Snail主题)搭建回顾概览 笔者搭建博客地址:https://saltyfishyjk.github.io 目录 Hexo博客(Snail主题)搭建回顾概览 Part 0 前言 写作背 ...
- 推荐的php安全配置选项
推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置.下面是一些显然应该用于生产服务器的: register_globals 设置为 offsafe_mode 设置为 offerror_re ...
- JAVA String介绍、常量池及String、StringBuilder和StringBuffer得区别. 以及8种基本类型的包装类和常量池得简单介绍
一.概述 String是代表字符串的类,本身是一个最终类,使用final修饰,不能被继承. 二.定义方式 方式一:直接赋值法 String str1 = "hello"; 方式 ...
- Nvicat for mysql连接腾讯云数据库TDSQL-C(原CynosDB)
连接步骤 1.打开腾讯云TDSQL-C(原CynosDB)集群详情中的中的集群连接外网地址,如下图 2.云数据库的账号密码在这里找,第一次不知道密码可以重置密码 3.以root账户为例,打开navic ...