基于Benes网络的SIMD同态密文任意重排

news2024/11/15 6:50:01

摘要

RLWE的密文使用了SIMD后极大的增加的同态加密的效率。同态加密通过加密一个向量,实现对明文的快速加法和乘法。然而,加密为一个密文的向量的内部元素之间,无法高效的操作。
如一个密文加密了 [ a , b , c ] [a,b,c] [a,b,c],想要计算 a + b a+b a+b并不是简单的。同态密文的重排指的是,在密文域将加密为同一个密文的向量进行置换重排。本文介绍Gentry等人在2012年提出的,基于Benes网络的明文重排方法。

同态加密的基本操作

基于RLWE的同态加密方案通常加密一整个向量,从而使得均摊的加密和运算时间大大降低,实现单指令多数据(SIMD)的加密。然而,加密一个向量使得向量内部元素的操作不灵活。于是,研究者们通过利用自同态和密文转化技术,提出了同态密文的旋转操作,增加了SIMD密文的灵活性。下面介绍基于RLWE的同态加密方案的基本运算。

SIMD向量加密

假设向量为 a = [ a 1 , a 2 , ⋯   , a n ] \mathbf{a}=[a_1,a_2,\cdots,a_n] a=[a1,a2,,an]表示 n n n维的向量, a i a_i ai表示其第 i i i个元素。

SIMD的密文,通常是将 a \mathbf{a} a作为一整个明文,加密为一个密文。我们使用 A \mathbf{A} A表示向量 a \mathbf{a} a的密文。同时,我们也说 A \mathbf{A} A有 n 个槽 (slot),第 i i i个槽中加密的数据为 a i a_i ai.

则同态加法得到的密文 A + B \mathbf{A}+\mathbf{B} A+B表示向量 [ a 1 + b 1 , a 2 + b 2 , ⋯   , a n + b n ] [a_1+b_1,a_2+b_2,\cdots,a_n+b_n] [a1+b1,a2+b2,,an+bn]的密文。

同态乘法得到的密文 A × B \mathbf{A}\times \mathbf{B} A×B则表示 [ a 1 × b 1 , a 2 × b 2 , ⋯   , a n × b n ] [a_1\times b_1,a_2\times b_2, \cdots, a_n \times b_n] [a1×b1,a2×b2,,an×bn]的密文。

旋转

SIMD的密文相对于其他的密文,多了一个旋转操作。通常说的旋转是指的向左循环旋转。比如密文 A \mathbf{A} A向左旋转 k k k 步,则结果为 [ a k + 1 , ⋯   , a n , a 1 , a 2 , ⋯   , a k ] [a_{k+1},\cdots,a_n,a_1,a_2,\cdots,a_k] [ak+1,,an,a1,a2,,ak].

向右旋转 k k k 步,也称为向左旋转 − k -k k 步。

提取

我们通过 0,1 掩膜向量和密文的乘积来提取出特定槽的密文。比如可以通过将 A \mathbf{A} A乘以 [ 0 , 0 , 1 , 0 , ⋯   , 0 , 1 ] [0,0,1,0,\cdots,0,1] [0,0,1,0,,0,1](即第3个和第 n n n个为1,其他全为0的明文向量),提取出 a 3 a_3 a3 a n a_n an的密文。

这里乘的密文向量,可以叫做选择向量。被选择的维度为1,其他维度为0的明文向量,可以根据需要提取出需要的密文。

基于Benes网络的SIMD密文重排

我在https://blog.csdn.net/watqw/article/details/142356306 中给出了如何利用Benes进行置换重排的方法。

构建一个Benes网络,根据需要重排的目标位置填充路由信息,然后使用同态加密的基本操作实现Benes交换网络。

每一层的交换,只需要常数次的旋转、提取和加法,就可以完成。

假设原来密文中的明文为 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] [1,2,3,4,5,6,7,8] [1,2,3,4,5,6,7,8],需要将其重排为向量 [ 2 , 6 , 5 , 8 , 4 , 7 , 1 , 3 ] [2,6,5,8,4,7,1,3] [2,6,5,8,4,7,1,3]的密文。

下图是一个已经填好路由信息的Benes网络。
路由信息
我们以第一次交换为例子,说明如何进行密文交换。

假设原始密文为 C 0 1 \mathbf{C_0^1} C01,其明文为 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] [1,2,3,4,5,6,7,8] [1,2,3,4,5,6,7,8].

C 0 1 \mathbf{C_0^1} C01向左旋转4步,得到 C 1 1 \mathbf{C_1^1} C11,其明文为 [ 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 ] [4,5,6,7,8,1,2,3,4] [4,5,6,7,8,1,2,3,4]

KaTeX parse error: Expected 'EOF', got '}' at position 14: \mathbf[C_0^1}̲向右旋转4步,得到 C 2 1 \mathbf{C_2^1} C21,其明文为 [ 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 ] [4,5,6,7,8,1,2,3,4] [4,5,6,7,8,1,2,3,4]。注意,这里由于周期是8,所以 C 1 1 \mathbf{C_1^1} C11 C 2 1 \mathbf{C_2^1} C21的明文是相等的。

然后,根据路由信息,构造选择向量

C 0 1 \mathbf{C_0^1} C01的选择向量为 a 0 1 = [ 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 ] \mathbf{a}^1_0=[0,1,0,0,0,1,0,0] a01=[0,1,0,0,0,1,0,0]. 位置没有变化的维度为1,其他维度为0.

C 1 1 \mathbf{C_1^1} C11的选择向量为 a 1 1 = [ 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 ] \mathbf{a}^1_1=[1,0,1,1,0,0,0,0] a11=[1,0,1,1,0,0,0,0]. 向上交换的维度为1,其他为0.

C 2 1 \mathbf{C_2^1} C21的选择向量为 a 2 1 = [ 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 ] \mathbf{a}^1_2=[0,0,0,0,1,0,1,1] a21=[0,0,0,0,1,0,1,1]. 向下交换的维度为1,其他为0.

然后计算 C 0 2 = C 0 1 × a 0 1 + C 1 1 × a 1 1 + C 2 1 × a 2 1 \mathbf{C_0^2}=\mathbf{C_0^1}\times \mathbf{a}^1_0+ \mathbf{C_1^1}\times \mathbf{a}^1_1+ \mathbf{C_2^1}\times \mathbf{a}^1_2 C02=C01×a01+C11×a11+C21×a21.

每一层的计算开销都是一样的,需要2次旋转,3次乘法和2次加法。

由Benes网络的特性,只需要 2 log ⁡ ( n ) − 1 2\log(n)-1 2log(n)1层的交换,就可以得到任意重排后的密文。

参考文献

[1] Gentry, Craig, Shai Halevi, and Nigel P. Smart. “Fully homomorphic encryption with polylog overhead.” Annual International Conference on the Theory and Applications of Cryptographic Techniques. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13 vue3之内置组件keep-alive

内置组件keep-alive 有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。 开启keep-alive 生命周期的变化 初次进入时:…

使用express或koa或nginx部署history路由模式的单页面应用

使用hash模式会有#,影响美观,所以使用history模式会是个更好的选择。 前端项目打包上线部署,可以使用下面的方式部署history模式的项目,下面以 jyH5 为例 expressjs部署 express脚手架搭建的app.js中添加如下代码: …

大模型团队招人(校招):阿里巴巴智能信息,2025届春招来了!

阿里巴巴智能信息,2025届春招开始啦,欢迎有意向的优秀同学扫码投递。实习的内容也是大语言模型的核心方向Alignment,在这里有丰富的实验资源、良好的数据支持、优秀的师兄师姐带领你进入大模型的全新领域。内推直达:https://talen…

【Python】探索 Blinker:Python 进程内信号/事件分发系统

没人疼就去健身 ,练完浑身疼! 在现代软件开发中,事件驱动编程是一种非常强大的模式,它允许系统组件之间进行松散耦合的通信。Blinker 是一个 Python 库,提供了一个快速的进程内信号/事件分发系统,使得事件…

Double-Fetch漏洞检测工具的部署、使用与原理分析

文章目录 前言1、概述1.1、简介1.2、工作原理1.2.1、内核空间与用户空间的信息传递1.2.2、Double-Fetch漏洞产生的原因1.2.3、产生Double-Fetch漏洞的情况1.2.4、一个Double-Fetch漏洞示例1.2.5、Double-Fetch漏洞检测工具原理 1.3、模式匹配原理分析1.3.1、Coccinelle介绍1.3.…

AN7563PT数据手册学习笔记1

AN7563PT AN7563PT1 Overview2 Feature3 Block Diagram AN7563PT 1 Overview AN7563PT是一款高度集成的单芯片解决方案,适用于以太网网关应用。集成4个千兆以太网物理层、1个DDR4/DDR3控制器、1个USB3.0主机接口、1个USB2.0主机接口、2个PCIe Gen2单通道、1个VoIP…

什么是损失函数?常见的损失函数有哪些?

损失函数 什么是损失函数?损失函数作用如何设计损失函数常见的损失函数有哪些? 什么是损失函数? 损失函数(Loss Function),也称为误差函数,是机器学习和深度学习中的一个重要概念。它用于衡量模…

光伏设计软件的基本功能

一、屋顶绘制 光伏设计软件的首要功能是屋顶绘制。通过直观易用的界面,可以轻松绘制出建筑物的屋顶轮廓、结构细节等基本信息。软件支持多种屋顶类型的绘制,并允许用户自定义屋顶尺寸和形状。 二、参照物、障碍物放置 在光伏系统设计中,参照…

2024考研数学真题解析-数二:

第一类间断点:可去间断点,跳跃间断点。 幂指函数x的取值范围是x>0。 接着分母不能为0推出x1,x2是间断点,由幂指函数x>0可知,x0也是间断点。 先求x0处的极限,这里没有必要求0左右两边的极限&#xff0…

如何下载旧版本app或者旧版本的电脑软件?下载旧版本手机app和电脑软件的方法

下载旧版本软件的方法介绍,下面以下载旧版本剪映为例:

Java标识符、关键字和保留字

Java中的标识符、关键字和保留字 标识符概念标识符命名规则(必须遵守)标识符命名规范(更加专业)关键字保留字 标识符概念 1.Java对各种变量、方法和类等命名时使用的字符序列称为标识符。 2.凡是自己可以起名字的地方都叫标识符 …

鸿蒙生态应用

鸿蒙生态应用开发核心概念 HarmonyOS 应用:使用 HarmonyOS SDK 开发的应用程序,能够在华为终端设备 (如:手机、平板等)上运行,其有两种形态: ⚫ 传统方式的需要安装的 App。 ⚫ 轻量级&#xf…

ABAP 一步一步教你添加ALV界面菜单功能按钮

ABAP 一步一步教你添加菜单功能按钮。 程序里面找到这个组件小按钮 就可以看到GUI状态了。 在修改GUI STATUS 是如果要添加一个功能按钮,必须先创建一个功能键(具体参照下方),之后再在应用程序工具栏输入该功能键的功能码否则报…

(c++)线程的创建、互斥锁的使用、线程数组

1.创建10个线程,每个线程都做10万次全局变量num1操作,然后输出这个全局变量,预想结果应该是100万。但是线程可能在cpu分配的一个时间片中做不完10万次1的操作,这时候cpu会被其他线程抢占,由于num1不是一个原子操作&…

MySQL的缓存策略

目录 一、MySQL 缓存方案用来干什么 二、提升MySQL访问性能的方式 1、读写分离(MySQL的主从复制) 2、连接池 3、异步连接 三、缓存方案是怎么解决的 1、缓存与MySQL一致性状态分析 2、制定热点数据的读写策略 四、缓存方案问题的解决方法 1、缓…

Python画笔案例-055 绘制七彩浪花

1、绘制七彩浪花 通过 python 的turtle 库绘制 七彩浪花,如下图: 2、实现代码 绘制七彩浪花,以下为实现代码: """七彩浪花.py """ import turtlecs [red,orange,yellow,green,cyan,blue,magenta]…

网络流之最大流(EK 模板)

EK的时间复杂度是O( )。 EK 算法 和 dinic 算法的区别是 :EK是通过 bfs 找到一条增广流,然后累加,循环此步骤直到 bfs 找不到增广流;而 dinic 算法 是通过 bfs 分层找到一条增广流,然后通过 dfs 跑完 当前分层图中所…

Redis基本命令详解

1. 基本命令 命令不区分大小写,而key是区分大小写的 # select 数据库间的切换 数据库共计16个 127.0.0.1:6379> select 1# dbsize 返回当前数据库的 key 的数量 127.0.0.1:6379[1]> dbsize# keys * 查看数据库所有的key 127.0.0.1:6379[1]> keys *# fl…

[Spring]Spring MVC 请求和响应及用到的注解

文章目录 一. Maven二. SpringBoot三. Spring MVC四. MVC注解1. RequestMapping2. RequestParam3. PathVariable4. RequestPart5. CookieValue6. SessionAttribute7. RequestHeader8. RestController9. ResponseBody 五. 请求六. 响应 一. Maven Maven是⼀个项⽬管理⼯具。基于…

qwen2.5 vllm推理;openai function call调用中文离线agents使用

参考: https://qwenlm.github.io/zh/blog/qwen2.5/ https://qwen.readthedocs.io/zh-cn/latest/framework/function_call.html#vllm 安装: pip install -U vllm -i https://pypi.tuna.tsinghua.edu.cn/simplevllm-0.6.1.post2 运行:</