在看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编码/解码的更多相关文章

  1. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...

  2. java中文乱码解决之道(五)-----java是如何编码解码的

    在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...

  3. java中文乱码解决之道(六)-----javaWeb中的编码解码

    在上篇博客中LZ介绍了前面两种场景(IO.内存)中的java编码解码操作,其实在这两种场景中我们只需要在编码解码过程中设置正确的编码解码方式一般而言是不会出现乱码的.对于我们从事java开发的人而言, ...

  4. Unicode编码解码在线转换工具

    // Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...

  5. .NET编码解码(HtmlEncode与HtmlEncode)

    编码代码: System.Web.HttpUtility.HtmlEncode("<a href=\"http://hovertree.com/\">何问起& ...

  6. sed处理url编码解码=== web日志的url处理

    URL 编码/解码方法(linux  shell实现),方法如下: 1.编码的两种方法: admin@~ 11:14:29>echo '手机' | tr -d '\n' | xxd -plain ...

  7. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  8. C++ Base64 编码 解码

    C++实现 base64 字符串编码解码(GCC编译). /** * @brief C++ base64 编解码 * @author wid * @date 2013-20-25 * * @note ...

  9. 理解netty对protocol buffers的编码解码

    一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...

随机推荐

  1. 基本的sql语法

    1. SELECT: 用于从数据库中选取数据 SELECT name,value FROM table_name 2.SELECT DISTINCT 语句用于返回唯一不同的值(去重) 3.WHERE ...

  2. 《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  3. FastDFS文件的上传和下载

    一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...

  4. Zookeeper绍二(分布式锁介)

    一.为什么会有分布式锁? 在多线程环境下,由于上下文的切换,数据可能出现不一致的情况或者数据被污染,我们需要保证数据安全,所以想到了加锁. 所谓的加锁机制呢,就是当一个线程访问该类的某个数据时,进行保 ...

  5. 【PTA】5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即“小时:分钟:秒”,当小时等于24小时,置为0。

    5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即"小时:分钟:秒",当小时等于24小时,置为0. #include <stdio.h> ...

  6. idea环境下SpringBoot Web应用引入JSP

    1. 环境 开发环境:idea2019.3 jkd版本:1.8 springboot版本:2.6.2 2. 引入JSP的步骤 2.1 新建工程,引入依赖 这里只是解析jsp,因此只需要引入spring ...

  7. day 11 算法的时间空间复杂度

    (1).有以下程序: 求输入的n值(除1和n)之外的所有因子之和. 分析:这里函数内的循环体i初值不能为零.%是表示"取余",0除以任何数都不会存在余数的,所有是余数为0. (2) ...

  8. Solon 开发,六、提取Bean的函数进行定制开发

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  9. DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | TORCH.AUTOGRAD

    torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练.在本节,你将会对autograd如何帮助神经网络训练的概念有所理解. 背景 神经网络(NNs)是在输入数据上执行的嵌 ...

  10. JQ的使用

    1.hello,word <script type="text/javascript" src="js/jquery-1.10.1.js">< ...