当前位置: 首页 > news >正文

RLWE同态加密编码打包——系数打包

RLWE同态加密的明文域

RLWE的加密方案,如BGV、BFV,加密的对象,实际上是分圆多项式环上的一个整系数多项式。而我们在平时接触到的需要加密的数据,如图像或者工资,通常是一个数。所以,在使用RLWE同态加密时,需要将数转化为多项式,这就是同态加密的明文编码,或者叫做明文的打包。

打包并不是说将数直接映射到多项式就可以了,我们需要保持打包的同态性质,这样才能使得同态运算的结果保持真正的同态性质。本文主要介绍更适用于加密同态加密的打包方法,系数打包。也就是将剩余环 Z T \mathbb{Z}_T ZT中的元素映射到多项式环 Z T [ x ] / ( x N + 1 ) \mathbb{Z}_T[x]/(x^N+1) ZT[x]/(xN+1)上。

单系数打包

最朴素的思想就是,一个数对应于一个多项式。设需要加密的数为 a a a, 则,我们可以用 a a a构造一个多项式,使得打包是加法同态的。

  1. a a a作为多项式的一个系数,其他的系数随机生成。
  2. a a a切分到多个系数,剩余的系数使用随机数。

方法1

固定位置 i i i,构造的明文多项式的第 i i i个系数等于需要打包的明文 a a a

P = p 0 + p 1 x + p 2 x 2 + ⋯ + p i x i + ⋯ + p N − 1 x N − 1 P=p_0+p_1x+p_2x^2+\cdots+p_ix^i+\cdots+p_{N-1}x^{N-1} P=p0+p1x+p2x2++pixi++pN1xN1,其中 p i = a p_i=a pi=a.

接下来我们证明这种打包是加法同态的。
假设明文 b b b打包成的明文多项式为 Q = q 0 + q 1 x + q 2 x 2 + ⋯ + q i x i + ⋯ + p N − 1 x N − 1 Q=q_0+q_1x+q_2x^2+\cdots+q_ix^i+\cdots+p_{N-1}x^{N-1} Q=q0+q1x+q2x2++qixi++pN1xN1,其中 q i = b q_i=b qi=b.
那么 S = P + Q = ∑ j = 0 N − 1 ( p j + q j m o d T ) x j S=P+Q=\sum_{j=0}^{N-1}(p_j+q_j \mod T)x^j S=P+Q=j=0N1(pj+qjmodT)xj
加法并不会导致多项式的次数增加,所以 S S S的次数为 N − 1 N-1 N1.
所以 S S S的第 i i i个系数 s i ≡ a + b m o d T s_i\equiv a+b \mod T sia+bmodT.
也就是打包是加法同态的。

方法2

a a a切分成随机的 k k k份,然后将这 k k k份作为明文多项式的其中一部分系数。
a = a 0 + a 1 + ⋯ + a k − 1 m o d T a=a_0+a_1+\cdots+a_{k-1} \mod T a=a0+a1++ak1modT.
P = a 0 + a 1 x + ⋯ + a k − 1 x k − 1 + p k x k + p k + 1 x k + 1 + ⋯ + p N − 1 x N − 1 P=a_0+a_1x+\cdots+a_{k-1}x^{k-1}+p_kx^k+p_{k+1}x^{k+1}+\cdots+p_{N-1}x^{N-1} P=a0+a1x++ak1xk1+pkxk+pk+1xk+1++pN1xN1.
同样由于加法不会导致多项式次数增加,从而模 x N + 1 x^N+1 xN+1,所以这样的打包是加法同态的。

相比于方法1,这样打包可以使得当 T T T较小的时候,需要加密的数很大,而且需要的加法次数比较多的时候,能避免溢出,从而保持正确的结果。

SIMD系数打包

SIMD是单指令多数据(Single Instruction Multiple Data)的缩写。对应于打包,也就是将 d d d个数映射为一个多项式, d d d叫做打包的批次大小。SIMD系数打包是单系数打包的一般性推广,也就是单系数打包是打包批次为1时的SIMD打包。

设要加密的数据为 A = ( a 0 , a 1 , a 2 , ⋯ , a d − 1 ) A=(a_0,a_1,a_2,\cdots,a_{d-1}) A=(a0,a1,a2,,ad1),则 P = a 0 + a 1 x + a 2 x 2 + ⋯ + a d − 1 x d − 1 + p d x d + p d + 1 x d + 1 + ⋯ + p N − 1 x N − 1 P=a_0+a_1x+a_2x^2+\cdots+a_{d-1}x^{d-1}+p_dx^d+p_{d+1}x^{d+1}+\cdots +p_{N-1}x^{N-1} P=a0+a1x+a2x2++ad1xd1+pdxd+pd+1xd+1++pN1xN1
这样的打包方式,显然是加法同态的。

代码示例

在OpenFHE中实现了SIMD的系数打包,但是其效率并不是很高。
下面是一个怎么使用系数打包的例子。

/*
OpenFHE test code by zyf.
coefficient packing example of bgv.
*/
#include<iostream>
#include"openfhe.h"
//The functions or classes of OpenFHE are in the namespace lbcrypto
using namespace lbcrypto;
using namespace std;int main(){// set the parameters of bgvCCParams<CryptoContextBGVRNS> parameters;//plaintext modulusparameters.SetPlaintextModulus(536903681);//set the multiplication depthparameters.SetMultiplicativeDepth(4);CryptoContext<DCRTPoly> cryptoContext = GenCryptoContext(parameters);//enable the functions of scheme.cryptoContext->Enable(PKE);cryptoContext->Enable(LEVELEDSHE);//cryptoContext->Enable(ADVANCEDSHE);KeyPair<DCRTPoly> keyPair;//generate keykeyPair = cryptoContext->KeyGen();cryptoContext->EvalMultKeyGen(keyPair.secretKey);//cout<<"ring dimension "<<cryptoContext->GetCryptoParameters()->GetElementParams()->GetRingDimension()<<endl;//original datavector<int64_t> v1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};vector<int64_t> v2 = {-1, -2, -3, 1, 2, 3, 4, 5, 6, 7, 8, 9};//pack the original data to plaintext polynomialPlaintext p1,p2;p1=cryptoContext->MakeCoefPackedPlaintext(v1);p2=cryptoContext->MakeCoefPackedPlaintext(v2);//encryptionauto c1 = cryptoContext->Encrypt(keyPair.publicKey, p1);auto c2 = cryptoContext->Encrypt(keyPair.publicKey, p2);auto sum=c1+c2;//decryptionPlaintext ans_sum;cryptoContext->Decrypt(keyPair.secretKey,sum,&ans_sum);cout<<ans_sum<<endl;
}

相关文章:

RLWE同态加密编码打包——系数打包

RLWE同态加密的明文域 RLWE的加密方案&#xff0c;如BGV、BFV&#xff0c;加密的对象&#xff0c;实际上是分圆多项式环上的一个整系数多项式。而我们在平时接触到的需要加密的数据&#xff0c;如图像或者工资&#xff0c;通常是一个数。所以&#xff0c;在使用RLWE同态加密时…...

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…...

【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口

力扣题目链接 1. 暴力解法 这道题的暴力解法是两层嵌套for循环&#xff0c;第一层循环从 i 0 开始遍历至数组末尾&#xff0c;第二层循环从 j i 开始遍历至找到总和大于等于 target 的连续子数组&#xff0c;并将该连续子数组的长度与之前找到的子数组长度相比较&#xff0…...

MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径

依赖本人写的多平台编译器宏判断&#xff1a; C/C MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客 MACOS头文件依赖&#xff1a; #if defined(_MACOS) #include <libproc.h> #endif #include <mach-o/dyld.h> 只需要链接 libSystem.dylib 就行了&#…...

【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务

这篇文章&#xff0c;主要介绍如何通过Nginx服务器转发客户端的WebSocket接口到后端服务【知识星球】。 目录 一、Nginx配置WebSocket 1.1、Nginx配置内容 1.2、客户端请求地址 1.3、创建WebSocket测试工程 1.4、启动测试 1.5、WebSocket超时问题 1.5.1、设置超时时间 …...

关于高德地图及其APP获取地图数据的研究

刚过完春节没几天&#xff0c;有个客户提出要获取高德地图的数据。 我看了下&#xff0c;回复说&#xff1a;这不是很简单嘛&#xff0c;高德有公开的开放平台&#xff0c;有足够的API支持用户获取数据&#xff0c;开发自己基于高德数据库的应用。 客户回复说&#xff1a;他的要…...

【Python入门教程】Python实现鸡兔同笼

今天跟大家分享一下很久之前自己做的鸡兔同笼求解问题的小游戏&#xff0c;使用公式和基本的判断语句即可实现&#xff0c;可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路&#xff0c;例如应该套几层循环、分几个模块等等。然后在编码时可以先随意…...

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif...

物体检测-系列教程20:YOLOV5 源码解析10 (Model类前向传播、forward_once函数、_initialize_biases函数)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 14、Model类 14.2 前向传播 def forward(self, x, augmentFalse, profileFalse):if augm…...

贪吃蛇(C语言)步骤讲解

一&#xff1a;文章大概 使用C语言在windows环境的控制台中模拟实现经典小游戏 实现基本功能&#xff1a; 1.贪吃蛇地图绘制 2.蛇吃食物的功能&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右方向控制蛇的动作&#xff09; 3.蛇撞墙死亡 4.计算得分 5.蛇身加…...

MySQL 数据库表设计和优化

一、数据结构设计 正确的数据结构设计对数据库的性能是非常重要的。 在设计数据表时&#xff0c;尽量遵循一下几点&#xff1a; 将数据分解为合适的表&#xff0c;每个表都应该有清晰定义的目的&#xff0c;避免将过多的数据存储在单个表中。使用适当的数据类型来存储数据&…...

JavaScript进阶-高阶技巧

文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后&#xff0c;里面的属性值是简单数据类型直接拷贝值&#xff0c;如果属性值是引用数…...

C语言中“#“和“##“的用法

1. 前言 # &#xff1a;把宏参数变为一个字符串, ##&#xff1a;把两个宏参数贴合在一起. 2. 一般用法 #include<stdio.h> #define toString(str) #str //转字符串 #define conStr(a,b) (a##b)//连接 int main() { printf(toString(12345)): //输出字符串&q…...

Linux命令-clock命令(用于调整 RTC 时间)

说明 clock命令用于调整 RTC 时间。 RTC 是电脑内建的硬件时间&#xff0c;执行这项指令可以显示现在时刻&#xff0c;调整硬件时钟的时间&#xff0c;将系统时间设成与硬件时钟之时间一致&#xff0c;或是把系统时间回存到硬件时钟。 语法 clock [--adjust][--debug][--dir…...

编程笔记 Golang基础 045 math包

编程笔记 Golang基础 045 math包 一、math包主要功能常量&#xff1a;函数&#xff1a;数值运算&#xff1a;三角函数&#xff1a;对数函数&#xff1a;随机数相关&#xff1a; 二、示例代码一三、示例代码二小结 Go 语言的标准库 math 提供了一系列基础数学函数和常量&#xf…...

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统&#xff0c;在此环境下&#xff0c;各个任务可以在独立的节点上运行。它有助于提升资源利用率&#xff0c;增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…...

基于JAVA springboot+mybatis智慧生活分享平台设计和实现

基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…...

详细了解C++中的namespace命名空间

键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 目录 键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 一、命名空间的理解 二、&#xff1a;&#xff1a;作用域运算符 三、命名空间&#xff08;namespace&…...

#WEB前端(HTML属性)

1.实验&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开&#xff0c;blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…...

LeetCode---【和的操作】

目录 两数之和我的答案在b站up那里学到的【然后自己复写】 和为 K 的子数组在b站up那里学到的【然后自己复写】 三数之和在b站up那里学到的【然后自己复写】 两数相加【链表】我的半路答案&#xff1a;没有看到是链表在b站up那里学到的【复写失败后整理】 两数之和 我的答案 …...

ESP32以太网异步DNS服务器库:LwIP事件驱动与PHY硬件抽象

1. 项目概述AsyncDNSServer_ESP32_Ethernet是一款专为 ESP32 系列微控制器&#xff08;含 ESP32-S2/S3/C3&#xff09;设计的全异步 DNS 服务器库&#xff0c;面向基于 LwIP 协议栈、搭载 W5500、W6100 或 ENC28J60 以太网物理层芯片的嵌入式系统。该库并非从零构建&#xff0c…...

C# 面试高频题:装箱和拆箱是如何影响性能的?非

OCP原则 ocp指开闭原则&#xff0c;对扩展开放&#xff0c;对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程&#xff0c; 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

AI导出word排版

AI导出Word排版&#xff1a;从“生成内容”到“结构化交付”的最后一公里 在AIGC应用逐步进入生产环境后&#xff0c;一个被反复讨论的问题逐渐浮现&#xff1a; AI生成内容容易&#xff0c;但导出为可用的Word文档却很难。 这一问题不仅存在于个人创作者&#xff0c;也在企业文…...

【AI智能体实战】Dify与MCP服务深度集成:从零构建企业级智能问答系统

1. 为什么选择DifyMCP搭建企业级问答系统 最近两年&#xff0c;企业知识库智能化改造的需求呈现爆发式增长。我经手过的十几个项目中&#xff0c;客户普遍反映传统问答系统存在三个痛点&#xff1a;第一是模型效果不稳定&#xff0c;简单问题能回答但复杂业务逻辑就出错&#x…...

小红的图上加边【牛客tracker 每日一题】

小红的图上加边 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 网页链接 牛客tracker 牛客tracker & 每日一题&#xff0c;完成每日打卡&#xff0c;即可获得牛币。获得相应数量的牛币&#xff0c;能在【牛币兑换中心】&#xff0c;换取相应奖品&#xff01;助力每…...

S2-Pro数据库智能应用:基于自然语言的SQL生成与数据洞察

S2-Pro数据库智能应用&#xff1a;基于自然语言的SQL生成与数据洞察 1. 让数据库说人话的时代来了 "帮我查一下上个月销售额超过10万的产品有哪些&#xff1f;"——这样的需求&#xff0c;过去需要数据分析师写复杂的SQL查询语句&#xff0c;现在只需要对着S2-Pro说…...

USB运动控制五轴雕刻机系统完全开源资料:PCB生产支持,多版本C++源码,五轴联动与RTCP...

USB运动控制 (五轴雕刻机系统)全部开源 不保留任何关键技术&#xff0c;PCB可直接生产&#xff0c;C6.0源码&#xff0c;从13.7-18.2所有版本&#xff0c;本产品为可复制资料&#xff0c;支持五轴联动&#xff0c;支持RTCP算法&#xff0c;全部开源。1、为电子资料 2、PCB底板原…...

OpenClaw 大结局——接入个人微信厮

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow&#xff08;工作流&#xff09; 框架&#xff0c;用于编排和协调多个智能体&#xff08;Agent&#xff09;或处理组件的执行流程。 本课将以通俗易懂的方式&#xff0c;帮助你理解 MAF Workflow 的核心概念…...

Bilibili API评论接口实战指南:高效获取与处理用户互动数据

Bilibili API评论接口实战指南&#xff1a;高效获取与处理用户互动数据 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址&#xff1a;https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh…...

调音师专属工具箱:集成常用功能的一站式音频调校辅助软件(火山平台开发,免报毒)

温馨提示&#xff1a;文末有联系方式产品定位与核心价值 调音师工具箱是一款立足于一线音频工作者实际需求而研发的实用型辅助软件。 它并非通用型工具集合&#xff0c;而是深度聚焦调音场景&#xff0c;系统梳理并整合了频谱分析、电平监测、EQ预设管理、声场校准辅助等高频使…...