微软同态加密SEAL库的使用学习
https://github.com/microsoft/SEAL.git
一、编译
最近git有问题,最好翻墙,而且后面编译时候好像也要下点东西,如果不会改cmake的话,翻墙省不少功夫。。
我是直接在Clion中以cmake项目的方式打开的。
手动编译如下:
cmake -S . -B build cmake --build build sudo cmake --install build
二、SEAL库介绍
Microsoft SEAL提供了两种不同的同态加密方案,它们具有非常不同的属性。BFV方案允许在加密的整数上执行模运算。CKKS方案允许对加密的实数或复数进行加法和乘法,但只能得到近似的结果。在诸如汇总加密的真实数字、评估加密数据上的机器学习模型或计算加密位置的距离等应用程序中,ckk将是最佳选择。对于需要精确值的应用程序,BFV方案是惟一的选择。
1.BFV代码介绍
//较大的poly_modulus_degree使密文的大小更大,所有的操作都更慢,但允许更复杂的加密计算。 size_t poly_modulus_degree = 4096; parms.set_poly_modulus_degree(poly_modulus_degree); //更大的coeff_模数意味着更大的噪声预算,因此更加密的计算能力。coeff_modulus_degree确定了coeff_modul_modules总比特长度的上限 parms.set_coeff_modulus(CoeffModulus::BFVDefault(poly_modulus_degree)); //明文模量决定了明文数据类型的大小和乘法中噪声预算的消耗。 parms.set_plain_modulus(1024); //构建一个SEALContext对象了。这是一个繁重的类,它检查我们刚刚设置的参数的有效性和属性。 auto context = SEALContext::Create(parms);
这个库是基于公钥加密的方案,本来就是想找这个的,之前在github看tfhe的代码,是基于对称加密的,这个团队论文里写了,然而没实现emm。
KeyGenerator keygen(context);PublicKey public_key = keygen.public_key();SecretKey secret_key = keygen.secret_key();
然后就是通过evaluator计算器调用内部函数的过程了
evaluator.square(x_encrypted, x_sq_plus_one); //平方x_encrypted,刷新入x_sq_plus_one
Plaintext plain_one("1"); //添加明文 1
evaluator.add_plain_inplace(x_sq_plus_one, plain_one);
evaluator.add_plain(x_encrypted, plain_one, x_plus_one_sq); evaluator.square_inplace(x_plus_one_sq);
Plaintext plain_two("2");
evaluator.multiply_plain_inplace(x_sq_plus_one, plain_two);
evaluator.multiply(x_sq_plus_one, x_plus_one_sq, encrypted_result);
以上基本就是加和乘的常用操作了,最后还有就是要判断噪音消耗,噪声预算已经达到0,这意味着不能期望解密给出正确的结果
这个函数:
decryptor.invariant_noise_budget(encrypted_result)
解决办法:
“Relinearization”是一种将密文的大小乘回初始大小2的操作。因此,在下一次乘法之前对一个或两个输入密文进行再初始化,可以对噪声增长和性能产生巨大的积极影响,即使再初始化本身有很大的计算成本。只可能将大小为3的密文重新初始化为大小为2的密文,因此用户通常希望在每次乘法之后重新初始化,以将密文大小保持为2。
RelinKeys relin_keys; keygen.create_relin_keys(relin_keys);
evaluator.relinearize_inplace(x_squared, relin_keys);
微软同态加密SEAL库的使用学习相关推荐
- SEAL全同态加密开源库(七) rns剩余数系统-源码解析
SEAL全同态加密开源库(七) rns剩余数系统-源码解析 2021SC@SDUSC 2021-11-14 前言 这是SEAL开源库代码分析报告第六篇,本篇将分析util文件夹中的rns.h和rns. ...
- SEAL全同态加密开源库(八) rns源码解析(2)
SEAL全同态加密开源库(七) rns剩余数系统-源码解析 2021SC@SDUSC 2021-11-21 前言 这是SEAL开源库代码分析报告第七篇,本篇将继续分析util文件夹中的rns.h和rn ...
- bfv同态加密_微软同态加密库SEAL使用
近期刚接触SEAL库,本文记录该库的使用方法,具体的同态加密的原理不过多介绍,若有错误,请各位大佬批评指正. SEAL(Simple Encrypted Arithmetic Library)是微软开 ...
- SEAL全同态加密开源库(十二) CKKS-源码浅析
2021SC@SDUSC 2021-12-19 前言 前两篇我们讨论了SEAL对于BFV的实现.本篇开始我将开始讨论SEAL对于CKKS的实现. 照例我会先补充理论知识,然后分析源码native/ex ...
- 关于在Win11-Visual Studio 2022环境中安装MicrosoftSEAL4.0(新支持BGV方案的版本)同态加密运算库
下载.编译.安装 事先下载好Visual Studio 17 2022 在GitHub上下载SEAL-4.0.0.zip并解压或者使用Git克隆SEAL源文件夹, git clone https:// ...
- SEAL全同态加密开源库(十一) BFV-源码浅析(2)
2021SC@SDUSC 2021-12-12 前言 从本篇开始,接上一篇的BFV分析,这里我们继续分析BFV源码.争取本篇结束战斗. 与之前的工作相比,这些代码显得更具整体性,也能更好体现出SEAL ...
- 5、隐私计算--同态加密
目录 同态加密 同态加密研究进展 同态加密原理及方案 同态加密分类 HE方案安全性 同态加密与区块链 同态加密应用 全同态工程实现开源工具 参考推荐: 同态加密_federated的博客-CSDN博客 ...
- bfv同态加密_同态加密入门教程
在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持. 1.同态加密概述 同态加密改变了隐私保护的游戏规则,它允 ...
- bfv同态加密_同态加密简明教程
在这篇文章中,我们将了解同态加密的基本概念,介绍常用的同态加密开发库,学习同态加密应用开发的一般步骤,了解如何在Web应用中添加同态加密支持. 1.同态加密概述 同态加密改变了隐私保护的游戏规则,它允 ...
最新文章
- 王者荣耀活动精选 Blink 第三弹来袭!
- 计算机网络·详解TCP流量控制,拥塞控制,运输连接管理
- Oracle 应用短连接导致连接风暴
- 如果你跟夕小瑶恋爱了...(下)
- ASP.NET中的AJAX应用开发详解
- 图片保存到数据库以及从数据库中Load图片
- foxmail邮件加载失败重试_TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)...
- 【已解决】电脑更新系统之后,键盘失灵了怎么办?
- Git合并最近的commit
- 信息安全——密码学之DES介绍
- oracle10g无监听配置文件,关于监听配置文件listener.ora的问题
- android 选择银行类型,『自定义View实战』—— 银行种类选择器
- php的链接查询,php – 使用指向另一个查询的链接运行查询.
- DB2 SQL执行计划
- 【精益生产】108页PPT搞懂精益生产价值流分析图(VSM)
- 对于设计模式中七大原则的理解
- 终于懂得孤独是躲不开的单行道
- IDC:中国云计算市场超10亿 企业云火热
- Python OpenCV 实现对图片旋转矩形的裁剪
- 赚钱套路分享:降维打击,报团取暖的玩法
热门文章
- 普惠AI时代,抓住机遇奋力一搏
- Android Studio TCP客户端实现
- 火狐 附加组件 中无java_关于Win10系统上火狐浏览器附加组件找不到的解决方法...
- 7-8 金银铜牌 (15 分)
- 指定程序使用独立显卡
- Matlab:将Prt的txt文件转换成tif
- opencv安装配置测试
- 肉鸡进程linux,教菜鸟如何获得大量Linux肉鸡网站安全 -电脑资料
- 分众Q卡:免费领取的“维络卡” 基于此对SOLOMO模式的思考;
- Reddit CEO亲自诠释内容审核的无奈