同态加密和SEAL库的介绍(一)简介

写在前面:

        最近在做同态相关的内容,这里记录下相关的知识点和所踩过的坑,希望对大家有帮助。预计分几篇来详细介绍,从概念简介到不同模式介绍,具体包括了每种模式的编解码和加解密以及他们性能的比对。
        虽然同态加密涉及了较多的密码学原理,但是Microsoft SEAL提供了一套开源的加密库,降低了我们的学习成本,使得实现一些同态下的计算变得简单。但是其使用规则有较多需要注意的地方,这里写出来和大家一起学习。
        本文的参考主要来自于官方的介绍,这里先贴一下链接,方便大家查找:
Microsoft SEAL: Fast and Easy-to-Use Homomorphic Encryption LibraryMicrosoft SEAL is an easy-to-use and powerful open-source homomorphic encryption library that enables running computations directly on encrypted data.icon-default.png?t=N7T8https://www.microsoft.com/en-us/research/project/microsoft-seal/

一、同态加密简介

1.1 引入

        大多数加密方案包括三个功能:密钥生成、加密和解密。

        对称密钥加密方案使用相同的密钥进行加密和解密;公钥加密方案分别使用公钥进行加密和密钥进行解密。
        因此,公钥加密方案允许任何知道公钥的人加密数据,但只有那些知道密钥的人才能解密和读取数据。对称密钥加密可以高效地加密大量数据,并实现安全的外包云存储。公钥加密是实现今天安全在线通信的基础概念,但通常比对称密钥加密效率低得多。

        虽然传统的对称和公钥加密可以用于安全存储和通信,但任何外包计算都必然需要在计算前移除这些加密层。因此,提供外包计算功能的云服务必须访问密钥,并实施访问控制策略以防止未经授权的员工访问这些密钥。

        即:在传统的云存储和计算解决方案中,云需要对客户数据有未加密的访问权限以进行计算,必然会将数据暴露给云操作员。数据隐私依赖于由云实施的访问控制策略,并由客户信任这些策略。

1.2 同态原理

        同态加密是一种密码学技术,允许对加密数据直接进行计算,而不需要解密数据。这种加密计算的结果仍然是加密的,只有用密钥(数据所有者)才能解密。

1.同态性质

        同态加密的核心特性是“同态性”。如果某个加密方案是同态的,它允许对加密数据进行某些操作,且解密操作的结果与对未加密数据进行同样操作的结果一致。例如,假设有两个数据 a 和 b,及其相应的加密形式E(a)E(b)。如果加法是同态的,那么:

E(a)+E(b)=E(a+b)

加密数据相加后再解密的结果与先解密再相加的结果相同

2.部分同态加密和全同态加密

  • 部分同态加密:仅支持一种运算(加法或乘法)的同态加密。例如,只支持加法的加密方案称为“加法同态加密”。
  • 全同态加密(FHE, Fully Homomorphic Encryption):支持任意运算(加法和乘法)的同态加密。这种加密方案最为通用但也最为复杂。

3.实际应用:

  • 云计算:企业将数据加密后上传到云端,云服务提供商可以在不解密数据的情况下对其进行处理,从而保护数据隐私。
  • 隐私保护的数据分析:在医学研究中,患者数据可以加密后供研究人员分析,确保患者隐私不会泄露。
  • 安全的投票系统:选票可以加密后进行计数,确保投票过程的隐私和安全。

        综上,同态加密并不是一种通用技术:只有某些计算可以在加密数据上进行。它还带有相当大的性能开销,因此在未加密数据上已经非常昂贵的计算在加密数据上可能不可行。
        此外,用同态加密加密的数据比未加密数据大很多倍,所以可能不适合用这种技术加密整个大型数据库。而是在严格隐私要求禁止未加密云计算的情况下,但计算本身相对轻量的场景中有意义。

1.3 同态加密示例

为了更好的理解,这里把运算过程简单的举个例子:

1.密钥生成:生成一个公钥和一个私钥,分别用于加密和解密。

(pk,sk)=KeyGen()

2.加密:用公钥加密两个数 a 和 b。

E(a)=Encrypt(pk,a), E(b)=Encrypt(pk,b)

3.同态操作:在加密状态下对这两个数进行加法运算。(乘法同理)

E(a+b)=E(a)+E(b)

4.解密:用私钥解密运算结果。

Decrypt(sk,E(a+b))=a+b

二、SEAL库简介

2.1 引入

        Microsoft SEAL(Simple Encrypted Arithmetic Library)是一个同态加密库,由微软开发,用于在加密数据上执行算术运算。该库旨在使同态加密变得更易于使用和集成,同时提供高性能和灵活性。数据隐私依赖于最先进的加密技术(数学),所有信息发布将由客户控制。

        SEAL 库允许在加密的整数或实数上执行加法和乘法。其他操作,如加密比较、排序或正则表达式,在大多数情况下使用此技术在加密数据上评估是不可行的。因此,只有程序中特定的隐私关键的云计算部分应使用 Microsoft SEAL 实现。(故要注意适用范围)

2.2 安装

先贴一下官方库链接:

GitHub - microsoft/SEAL: Microsoft SEAL is an easy-to-use and powerful homomorphic encryption library.Microsoft SEAL is an easy-to-use and powerful homomorphic encryption library. - microsoft/SEALicon-default.png?t=N7T8https://github.com/microsoft/SEAL在所有平台上,微软 SEAL 都使用 CMake 构建。先看要求:

这里简述一下构建步骤,当然具体问题还是看官方最新的说明好一些:

1.克隆代码库

git clone https://github.com/microsoft/SEAL.git
cd SEAL

2.构建库

cmake -S . -B build
cmake --build build

3.安装

  • 如果有root权限,可以选择全局安装:
cmake -S . -B build
cmake --build build
sudo cmake --install build
  • 也可以安装到特定地方,这里假设是 ~/mylibs/
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=~/mylibs
cmake --build build
sudo cmake --install build

 安装好后,大概包含这些文件:

2.3 官方示例

        在下载的文件中,包含了一些官方的示例,帮助用户理解基本概念和演示API功能,后续我也会基于这些例子给大家具体介绍。这些示例在 C++ 和 C# 中是相同的,并且分为几个源文件,分别位于 native/examples/(C++)和 dotnet/examples/(C#)目录中。包含:

C++C#描述
examples.cppExamples.cs示例运行程序
1_bfv_basics.cpp1_BFV_Basics.cs使用 BFV 方案的加密模运算
2_encoders.cpp2_Encoders.cs将更复杂的数据编码到 Microsoft SEAL 明文对象中
3_levels.cpp3_Levels.cs介绍“层次”的概念;使用 CKKS 方案的前提知识
4_bgv_basics.cpp4_BGV_Basics.cs使用 BGV 方案的加密模运算
5_ckks_basics.cpp5_CKKS_Basics.cs使用 CKKS 方案的加密实数运算
6_rotation.cpp6_Rotation.cs在 BFV 和 CKKS 方案中对加密向量执行循环旋转
7_serialization.cpp7_Serialization.cs在 Microsoft SEAL 中序列化对象
8_performance.cpp8_Performance.cs性能测试

2.4 三种模式简介

        Microsoft SEAL 提供了三种主要的同态加密方案:BFV、BGV 和 CKKS。每种方案都有其独特的特点和适用场景。这里简单做个介绍:

1. BFV(Brakerski/Fan-Vercauteren)方案

        BFV 方案是一种基于整数的同态加密方案,支持在加密数据上进行模运算。它允许对加密整数进行加法和乘法操作,结果仍然是加密的。BFV 方案使用大整数和多项式环上的数学运算来实现其同态性质。

  • 整数运算:适用于需要在加密整数上执行加法和乘法的场景。
  • 模运算:操作结果是在一个大整数模数下计算的,类似于有限域中的运算。
  • 适用性:适用于需要精确计算的应用,如加密投票系统和财务数据计算。

2. BGV(Brakerski-Gentry-Vaikuntanathan)方案

        BGV 方案也是一种基于多项式环的同态加密方案,与 BFV 类似。BGV 方案支持在加密数据上执行模运算,并且可以处理更复杂的操作。

  • 多项式运算:适用于在加密多项式上执行加法和乘法。
  • 模块化设计:支持灵活的参数选择,可以根据应用需求调整性能和安全性。
  • 适用性:适用于需要复杂多项式运算的应用,如加密搜索和过滤。

        BGV是较新的版本才可用,给出的论文在这里,大家也可以按需参考下:
https://eprint.iacr.org/2020/1481.pdficon-default.png?t=N7T8https://eprint.iacr.org/2020/1481.pdf3. CKKS(Cheon-Kim-Kim-Song)方案

        CKKS 方案是一种支持近似计算的同态加密方案,专为浮点数和复数运算设计。它允许在加密的实数或复数上执行加法和乘法,但结果是近似的。这种方案特别适合需要浮点数计算的应用,如机器学习和信号处理。

  • 浮点数运算:适用于需要在加密浮点数上执行加法和乘法的场景。
  • 近似计算:操作结果是近似的,非常适合需要大量浮点数运算的应用。
  • 适用性:适用于机器学习模型评估、数据聚合和加密数据分析。

        总结来说,三种加密方案各有其优势和适用场景,后面会对BFV和CKKS具体展开介绍。由于其性能差异巨大,故选择合适的加密方案和加密参数显得尤为重要。

2.5 总结

        将未加密计算转化为加密数据上的计算并不总是容易或直接的,例如,不可能在加密数据上进行分支。尽管微软 SEAL 的 API 并不复杂,但它本身有一个陡峭的学习曲线,需要用户理解许多同态加密特有的概念。
        即使用户能够编写和运行特定的计算,效率高低的实现之间的差异可能有几个数量级,新用户很难知道如何改进计算的性能。
        并且建议学习上面提到的示例,它们旨在为读者提供必要的同态加密概念背景。直接复用示例中的代码效果并不好,因为示例通常演示单个功能,未优化性能。如果不深入学习这些示例就编写 Microsoft SEAL 代码,必然会导致代码易受攻击、运行故障或极其缓慢。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11启动IIS服务配置成web服务器·

为什么要将本地配置为 Web 服务器? 在 Web 开发过程中,将本地配置为 Web 服务器有诸多好处: 实时预览: 修改代码后,无需每次都上传到远程服务器,即可在本地浏览器中实时查看效果。 离线开发: 无需依赖网络连接&#x…

R9000P 双系统安装 win11 和 ubuntu

网上了解到一堆关于 r9000p 安装较老的ubuntu系统,会有一堆问题 可能是电脑硬件比较新,较老的系统相关方面不兼容 那么干脆直接装新一点的系统 我安装了 Ubuntu 22.04 1 根据相关教程利用u盘制作系统盘 ultraISO 推荐使用清华源 速度快一点 https://…

AI资本泡沫要来了么?——Coatue EMW 2024会议摘要

引言 随着生成式人工智能的快速发展,科技领域正经历着一场前所未有的变革。然而,伴随这一热潮而来的,是关于AI资本泡沫的激烈讨论。历史上,每一次技术革命都带来了巨大机遇,同时也伴随着泡沫和风险。本文将通过Coatue…

企业级敏捷框架:业务驱动型敏捷与产品需求团队

本文介绍了一种新的企业级敏捷框架——业务驱动型敏捷(Business-driven Agile)与 PRT(Product Requirement Team),旨在解决传统敏捷方法中需求定义的瓶颈,从而提升产品价值并提高开发效率。原文: A new ent…

2024年史上最好用的10款项目管理软件有哪些?

项目管理行业发展趋势 随着信息技术的不断进步,项目管理也呈现出愈加智能化、自动化的发展趋势。无论是大型企业还是中小型公司,都亟需借助先进的项目管理工具,来实现对项目进度、资源、风险等各个环节的精细化管控。 然而在实际应用中&…

Git合并多笔提交为一笔

Git合并多笔提交为一笔 1. 背景 在实际项目开发中,我们会基于生产分支拉出很多需求分支,在需求分支开发完成后再将代码合到生产分支,但随着提交次数越来越多,我们在合到生产分支的时候就得一笔一笔的入库,特别麻烦&a…

Nacos-配置中心

1.为什么要使用配置中心&#xff1f; 2.常用的配置中心组件&#xff1f; 3.如何使用&#xff1f; 在配置中心创建配置文件 启动一个单列的nacos服务 点击发布 在微服务中使用 添加依赖 <!--nacso配置中心的依赖--><dependency><groupId>com.alibaba.cloud&l…

安卓Termux系统设备安装内网穿透工具实现远程使用SFTP传输文件

文章目录 前言1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 前言 本教程主要介绍如何在安卓 Termux 系统中使用 SFTP 文件传输&#xff0c;并结合cpolar内网穿透工具生成公网地址&#xff0c;轻松实现无公网IP环境远程传输&#xf…

SQLiteStudio 连接sqlite3数据库(真机数据库可视化调试)

SQLiteStudio安装 官网链接&#xff1a;https://sqlitestudio.pl/ 下载后&#xff0c;直接按部就班&#xff0c;打开即可使用 用户手册&#xff08;工具如何使用直接看这份就可以了&#xff09;&#xff1a;https://github.com/pawelsalawa/sqlitestudio/wiki/User_Manual 其…

网安新声 | 微软蓝屏事件安全启示录

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 2024年7月19日&#xff0c;微软发…

node中path模块处理路径以及path模块的方法的使用

1.案例代码 // 1.导入fs模块&#xff0c;来操作文件 const fs require(fs) const path require(path)// 2.path.join():拼接文件路径 console.log(path.join(F:,/kanno,临时文件/7.31,/image,../,成绩.txt)); const filePath path.join(/files,成绩.txt) console.log("…

Unity Addressables bundle依赖查看和资源重复查看工具

在开发的过程有时候想要知道addressables 打包出来bundles的依赖关系&#xff0c;以及资源的重复情况。直接通过自带的addressables工具查看有点困难。这里分享一个github上的开源工具。名称为UnityAddressablesBuildLayoutExplorer。该工具可以帮助查看所有文件的依赖情况&…

AI在医学领域:使用眼底图像和基线屈光数据来定量预测近视

关键词&#xff1a;深度学习、近视预测、早期干预、屈光数据 儿童近视已经成为一个全球性的重大健康议题。其发病率持续攀升&#xff0c;且有可能演变成严重且不可逆转的状况&#xff0c;这不仅对家庭幸福构成威胁&#xff0c;还带来巨大的经济负担。当前的研究着重指出&#x…

LeetCode Hard|【460. LFU 缓存】

力扣题目链接 LFU全称是最不经常使用算法&#xff08;Least Frequently Used&#xff09;&#xff0c;LFU算法的基本思想和所有的缓存算法一样&#xff0c;一定时期内被访问次数最少的页&#xff0c;在将来被访问到的几率也是最小的。 相较于 LRU 算法&#xff0c;LFU 更加注重…

什么是云原生?(一)

1. 前言 停下手头的工作&#xff0c;让你的同事定义“云原生”一词。你很可能会得到几个不同的答案。 1.1 让我们从一个简单的定义开始&#xff1a; 云原生架构和技术是一种设计、构建和操作在云中构建并充分利用云计算模型的工作负载的方法。 1.2 云原生计算基金会给出了官方…

简单的 CompletableFuture学习笔记

简单的 CompletableFuture学习笔记 这里记录一下自己学习的内容&#xff0c;简单记录一下方便后续学习&#xff0c;内容部分参考 CompletableFuture学习博客 1. CompletableFuture简介 在api接口调用时间过长&#xff0c;调用过多外围接口时&#xff0c;为了提升性能&#x…

Android 12系统源码_多屏幕(一)多屏幕设备显示Activity

前言 分屏&#xff1a;是指一个屏幕分出多个窗口&#xff0c;分别显示不同应用的界面&#xff0c;这在当前的手机设备中很常见。多屏&#xff1a;是指一个设备存在多个屏幕&#xff0c;这些可能是虚拟屏幕或者实体硬件屏幕&#xff0c;不同的应用同时显示在不同的屏幕中&#…

SpringBoot多数据源事务处理

多数据源时,一般会配置多个事务管理器 Spring编程式 第二种方式 不可能去同一个方法上写两个事务注解 不允许 SpringBoot 2.6.0之后禁止自己注入自己 本来可以自己注入自己去调用 (为什么要自己注入自己调用,AOP代理,类不是自己写的类) 最简单方式 引入 <dependency&…

【极速前进】20240706-24240714:用于Agent的树搜、理解LLM的语种困惑、事实知识抽取微调、Quiet-STaR

相关博客 【极速前进】20240706-24240714&#xff1a;用于Agent的树搜、理解LLM的语种困惑、事实知识抽取微调、Quiet-STaR 【极速前进】20240615-20240623&#xff1a;Zipper融合模态、VideoLLM视频理解、WebAgent可以自我改善、Nemotron-4、AnyGPT统一模态 【极速前进】20240…

【秋招突围】2024届校招-拼多多笔试题-第一套

🍭 大家好这里是 大厂笔试突围,一起备战秋招笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🌻 听说本周PDD的笔…