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

news2024/9/25 23:14:19

写在前面:

        最近在做同态相关的内容,这里记录下相关的知识点和所踩过的坑,希望对大家有帮助。预计分几篇来详细介绍,从概念简介到不同模式介绍,具体包括了每种模式的编解码和加解密以及他们性能的比对。
        虽然同态加密涉及了较多的密码学原理,但是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.coloradmin.cn/o/1992799.html

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

相关文章

MySQL 8.0新特性

文章目录 一. 账户与安全1. 查看用户信息2. 用户权限管理范围3. 用户创建和授权1) 创建并授权用户2)登录zhp,密码zhp.1221。验证数据库权限3)查看用户权限4)撤销用户权限5)用户重命名&修改密码6&#x…

端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本

使用 AWSCLI 启动、运行和关闭 AWS 服务器 添加图片注释,不超过 140 字(可选) 欢迎来到雲闪世界。我们开发了两个 Python 脚本;一个用于为我们获取数据,另一个用于使用 sklearn 的决策树分类器处理数据。然后&#xf…

NAT、服务代理、内网穿透

文章目录 NAT技术NAT IP转换过程NATPNAT的优点NAT的缺点 代理服务器正向代理反向代理 内网穿透和内网打洞内网穿透内网穿透 NAT技术 NAT技术即网络地址转换技术。用于将私有IP地址转换为公共IP地址,以便在互联网或其他外部网络中通信。为了解决IPv4协议下IP地址不足…

【Nacos无压力源码领读】(三) Nacos 配置中心与热更新原理详解超详细解读

本文将从 Nacos 配置中心的基本使用入手, 详细介绍 Nacos 客户端发布配置, 拉取配置, 订阅配置的过程以及服务器对应的处理过程; 配置订阅以及热更新原理相关的部分, 我看了主流的博客网站, 绝对没有比这更详细的讲解; 如果在阅读过程中对文中提到的 SpringBoot 启动过程以及…

交叉编译nginx1.20.0

一、说明 简略写一下过程,仅用于参考,建议与其他交叉编译教程一起看,检查是否有遗漏的问题。 二、源码修改 1、auto/cc/name vi auto/cc/name 注释 21 行 exit 1。 2、auto/types/sizeof vi auto/types/sizeof 将 15 行处的” ngx_size”…

数字图像处理(理论篇)专栏介绍

专栏导读 数字图像处理是计算机视觉领域的基石,它涉及到图像的获取、表示、处理和分析等多个方面。本专栏将通过一系列精心挑选的实战案例,引导读者从基础概念到高级技术,逐步深入学习数字图像处理的各个方面。 专栏目录 数字图像处理 第一…

离线+树状数组,ABC253 F - Operations on a Matrix

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Operations on a Matrix 二、解题报告 1、思路分析 我们通过差分树状数组,可以轻松解决操作1 操作3我们也可以通过树状数组来获取对应列的值 关键是操作2会对操作3造成影响 所以我们先对…

你了解堆和栈的由来吗?

人们提出内存中堆和栈这两个概念,肯定是要解决当时所遇到的问题,不会为了提出概念而提概念。堆和栈都是为了解决一些问题而发展出来的结果,并没有任何的高深之处。 要搞懂堆和栈的概念是如何来的,就需要从计算机诞生时说起了。 …

UE中的运行时Mesh - 学习笔记

UE中的运行时Mesh Runtime Mesh 广泛应用于仿真、游戏及医疗等相关应用领域。 运行时Mesh可以摆脱UE编辑器的依赖,独立开发相对独立的应用程序。 应用示例 地质领域: 模型编辑修改:膨胀 导入、材质设置、补洞及简化: mar…

【Java】韩顺平Java学习笔记 第23章 反射

文章目录 需求和快速入门反射原理反射相关主要类反射的优点和缺点及其优化Class类Class类常用方法获取Class类对象的六种方式有Class对象的类型 类加载动态加载和静态加载类加载时机类加载流程图类加载五个阶段加载阶段连接阶段-验证连接阶段-准备连接阶段-解析总结Initializat…

【Bug记录】operator->返回类型错误导致operator->调用不了

项目场景: 模拟list,出现operator->调用不了的情况,这是什么情况呢??? 问题描述 这里我是明确写了operator->函数的: 但是却有下面报错: 原因分析: 这里有…

python判断和循环语句

python判断语句 1、单个条件判断 if 条件:满足条件要做的事情1满足条件要做的事情2 else:不满足条件要做的事情3不满足条件要做的事情2 2、多个条件判断(满足条件1就不会判断条件2) else可以省略不写 if 条件1:满足条件1要做的事情a满足条件1要做的事…

JavaEE从入门到起飞 (三) ~AOP

晚上好,愿这深深的夜色给你带来安宁,让温馨的夜晚抚平你一天的疲惫,美好的梦想在这个寂静的夜晚悄悄成长。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 了解面向切面编程(AOP&#xf…

牛客网每日刷题之 HJ99.自守数(C++)

在不断学习的过程中也不能忘记了基础知识的巩固,在学习新的知识后要学会去举一反三,前不久我刚刚了解了一些关于 string 类的知识,对牛客网的 自守数 有了新的解题思路,让我们一起看看这道题吧 思路解析 a. 整数方法 1. 首先我们知…

C++(2):λ表达式,类函数重载

λ表达式 [&]捕获前面所有 [i] j闭包函数内访问不了,在函数内i只能用不能改 [&I,j] i在函数内可改j不行 未捕获可以充当函数指针使用 new,delete和malloc,free区别 new会调构造函数 malloc不会,delete会调析构函数free不会malloc调用需要强转…

从混沌到秩序:一本书教你掌握互联网内容审核与信息安全的密钥

随着互联网技术的迅猛发展,视频、图片、文字等多媒体内容以前所未有的速度在全球范围内传播与分享,极大地丰富了人们的信息获取渠道和娱乐生活方式。然而,这一繁荣景象背后,也隐藏着内容安全、版权侵犯、虚假信息传播、不良内容泛…

公司邮箱办理流程复杂吗?三步快速开通公司邮箱

对于许多企业而言, 开通公司邮箱是一项重要的基础建设工作。但是, 很多企业主可能会担心这一过程是否过于繁琐。实际上, 只需要注册、设置域名和邮箱, 以及开始使用这三个步骤。本文将为您介绍如何通过Zoho邮箱快速完成公司邮箱的开通。 Zoho邮箱因其卓越的服务质量和可靠性, …

数据传输为什么占用空间变大了

最近在做数据备份,很尴尬的是,不到3T的数据,用一个4T的硬盘拷贝中转到存储服务器上发现放不下。特别是以小文件为主的标注文件的文件夹,几十M几百M变成几十G或者100多G的空间占用。下面是几张图。 ​ ​ ​ 服务器之间拷贝占用空间…

Linux初启征程指南:攻克常见系统指令与权限初理解

有时候觉得,电脑就像一个高贵冷艳的妹纸。 400,是她冷冰冰地说:“我听不懂你在说什么”; 401,是她无情地转身:“我不认识你,别说那些奇怪的话”; 403,是她残酷的拒绝&…

Mysql-窗口函数二

文章目录 1. 前百分之N的问题 排名 row_number1.1 需求1.2 准备工作1.3 分析1.4 实现 2. 前百分之N的问题 ntile2.1 介绍2.2 语法2.2.1 示例2.2.2 结果示例2.2.3 注意事项 2.3 需求2.4 分析2.5 实现 3. 前百分之N的问题 百分比 PERCENT_RANK3.1 语法3.1.1 示例3.1.2 注意事项 3…