PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。

全同态加密(Fully Homomorphic Encryption,FHE)中经常提到的一个术语是“自举”(Bootstrapping)。任何读过FHE初级材料的人都知道,自举是FHE方案中最复杂和计算密集的组成部分。然而,除了在领域内工作的密码学家之外,很少有人真正理解自举操作是什么,以及存在各种不同的自举方法,每种方法都有其自己的权衡考虑。本文将揭开自举概念的神秘面纱,纠正该领域常见的误解,并比较常见FHE方案中的自举方法。

全同态加密的概念最早由Rivest、Adleman和Dertouzos于1978年首次提出,并提出了以下问题:“是否可能具有一种带有大量操作的隐私同态,其安全性非常高?”

然而,这个问题在30年内都没有得到解决,直到2008年底,斯坦福大学的博士生克雷格·根特里(Craig Gentry)提出了第一个全同态加密方案。这不仅是密码学领域的重大突破,还是理论计算机科学领域的突破;而自举操作则是它的关键组成部分。

现在,让我们来回答三个基本问题来介绍自举操作:“它是什么?”,“为什么需要它?”以及“它是如何工作的?”

什么是自举操作?

首先,让我们看一下牛津词典对自举(bootstrap)的定义:“通过自己的靴带将自己拉起”。当我们说一个HE方案是可自举的时,这意味着它可以在至少进行一项额外操作的同时,同态地评估自己的解密过程。

如图所示,在经典意义上评估解密过程需要一个密文和一个秘密密钥作为输入,并确保输出明文。然而,在FHE中,我们处理的是解密过程的同态评估,即自举操作,它使用了一个加密的秘密密钥和一个密文来生成一个“等效”的密文,我们可以进一步进行计算。加密的秘密密钥,也称为自举密钥或刷新密钥,是由秘密密钥持有者作为公钥材料的一部分提供的。

为社么在FHE中使用自举操作?

所有常见的FHE方案都基于嘈杂的加密(噪音是保证新加密安全性的因素),在其中进行同态操作会增加噪音幅度并降低密文的质量,即计算预算。自举操作的主要用途是将一个用尽的密文转换为“等效”的刷新密文。用尽的密文包含高噪音,无法进一步操作,而刷新的密文可以支持进一步的同态操作。自举操作的次要目的是在自举操作期间对加密消息评估函数。在这种情况下,自举操作的输出密文加密了明文消息的函数,而不仅仅是消息本身,除了减小输入密文的噪音。这种形式的自举操作被称为功能性或可编程自举操作。

自举操作在FHE中的作用

在FHE中的作用是验证加密方案的正确性。常见的自举方法遵循Craig Gentry引入的相同框架,即对自己的解密过程进行同态计算。然而,FHE方案中的自举机制在不同的方案之间有所不同。在我们的白皮书中,我们描述了DM(FHEW)/ CGGI(TFHE),CKKS和BGV/BFV FHE方案中的自举机制,突出了各种方法之间的主要区别,并基于OpenFHE库的计时实验结果和同行评议科学文献报告评估了它们的性能。

基于这一分析,我们提供了一些实践指南。请注意,截至撰写本文前,OpenFHE已经包括了CKKS、DM和CGGI方案的自举实现。BFV/BGV的自举实现目前正在开发中,并将包含在未来的OpenFHE版本中。

实践指南

我们总结了我们对CGGI、CKKS和BGV方案的自举性能分析,有关性能结果的更详细分析可在白皮书中找到。之所以选择CGGI而不是DM,是因为对于均匀三元秘密分布的典型安全设置,CGGI比DM稍快。BGV和BFV自举的复杂性非常相似,因此只需考虑BGV即可。在使用OpenFHE中的CGGI和CKKS实现运行实验后,对于BGV,我们使用了报告的结果,也就是安全参数的选择与128位安全级别相对应。

建议和总结

经过详细的实验,对于不同的自举操作进行建议总结:

  • 当密文包含大量槽位(超过100个)和/或需要更高精度(超过3-8位)时,CKKS自举操作性能最佳。

  • 当槽位数量较少(最多100个)且需要低精度(最多3-8位)时,DM/CGGI自举操作更有效率。

  • DM/CGGI自举操作可以用于高效地评估小整数上的任意函数(使用查找表),而CKKS可以评估相对平滑的函数(使用多项式,如切比雪夫插值)。

  • BGV/BFV自举操作在槽位摊销时间上略快于DM/CGGI,但比CKKS慢。但是,BGV自举操作不支持本来就具有任意函数评估的功能。

  • 硬件加速可以应用于所有这些自举方法,可用的文献表明,对于所有这些方法,预期的加速速度应该相似。在更高层次上,我们可以使用以上的见解来制定关于每个FHE方案何时最有用的建议:

  • CKKS对于处理实数的应用效率最高,实际上通常以浮点数表示。因此,CKKS是许多实际机器学习问题的最佳选择,如逻辑回归训练、卷积神经网络推断和统计计算等。

  • DM和CGGI(也称为FHEW和TFHE)是需要在小整数上进行任意函数评估的应用的最佳选择。一个常见示例是评估布尔电路。另一个示例是某些模型的机器学习推断。

  • BGV和BFV通常用于处理大量小整数的应用。常见示例包括私人信息检索和私人集合交集,这些应用经常用于安全数据库查询应用程序。

许多应用可能需要处理大问题规模(CKKS效果好)和任意函数评估(CGGI效果好),例如,决策树训练。在这种情况下,从CKKS切换到CGGI方案,然后再切换回来可能是有益的。OpenFHE团队目前正在向库中添加这种功能,并将在2023年提供。

原文地址:Bootstrapping in Fully Homomorphic Encryption (FHE)

原文作者:Yuriy Polyakov and Ahmad Al Badawi

翻译 & 整理:开放隐私计算 & PrimiHub

什么是全同态加密(FHE)中的自举(Bootstrapping)?的更多相关文章

  1. 同态加密-Homomorphic encryption

    同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...

  2. 【云安全与同态加密_调研分析(8)】同态加密技术及其应用分析——By Me

    ◆同态加密技术(Homomorphic Encryption, HE)及其应用◆ ◆加密方案◆ ◆应用领域◆ ◆厂商◆ ◆同态加密现有产品形态和工程实现◆ ◆参考链接◆ ◆备注(其他参考信息)◆ 同态 ...

  3. 同态加密与 Paillier/RSA

    本文作者: wdxtub 本文链接: http://wdxtub.com/flt/flt-03/2020/12/02/ 白话同态加密 虽然同态加密即使现在听起来也很陌生,但是其实这个概念来自 1978 ...

  4. android全磁盘加密

    android 全磁盘加密 什么是全磁盘加密? 全磁盘加密是使用一个密钥来为android设备上全部的用户数据加密的过程.一旦设备被加密,全部的用户创建的数据都将会在提交的磁盘之前自己主动加密,在读取 ...

  5. Paillier同态加密的介绍以及c++实现

    我们先来简短认识一下Paillier同态加密算法: 如果就这么按照定义来用最简朴的c++程序写 就像这样: #include <iostream> #include <math.h& ...

  6. node.js+react全栈实践-Form中按照指定路径上传文件并

    书接上回,讲到“使用同一个新增弹框”中有未解决的问题,比如复杂的字段,文件,图片上传,这一篇就解决文件上传的问题.这里的场景是在新增弹出框中要上传一个图片,并且这个上传组件放在一个Form中,和其他文 ...

  7. Paillier同态加密实现

    一.C++(该方案只实现了加密以及解密) 1.git clone https://github.com/klei0229/paillier.git 2.下载GMP与NTL包: 下载版本以及操作参见ht ...

  8. 【云安全与同态加密_调研分析(7)】安全技术在云计算中的安全应用分析——By Me

                                                                   我司安全技术在云计算中的安全应用分析 1. 基于云计算参考模型,分析我司安 ...

  9. .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压

    以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  10. Linux学习66 运维安全-通信加密和解密技术入门

    一.Linux Service and Security 1.OpenSSL(ssl/tls)协议 2.OpenSSH(ssh)协议 3.bind(dns) 4.web(http):httpd(apa ...

随机推荐

  1. Go 获取 IP 地址

    1. 获取本地IP地址 使用 net 包可以获取本地机器的 IP 地址.以下是一个获取本地 IP 地址的简单示例: package main import ( "fmt" &quo ...

  2. python原生数据类型(上)

    # 查看数据 print('hello world') # 查看数据类型 type('hello world') hello world str 1 数据类型定义 1.1 不可变数据类型 # 数值 # ...

  3. [ABC263G] Erasing Prime Pairs

    Problem Statement There are integers with $N$ different values written on a blackboard. The $i$-th v ...

  4. 在 Sealos 中使用区块链技术实现统一支付系统

    拿着区块链技术不一定是去发币,很多业务系统也适合用这些技术,比如做个统一支付系统,积分系统等,可以做为一家公司的金融基础设施,或支付中台.拿链的技术去做有很多好处: 高可用,自带多区域高一致性的能力, ...

  5. 【matlab混沌理论】1.2.洛伦兹吸引子

    ​Lorenz洛伦兹吸引子定义洛伦兹函数组后,通过ode45函数求解此微分方程方程. input: % Lorenz函数的洛伦兹吸引子 % 2.定义模型参数 sigma = 10; beta = 8/ ...

  6. Educational Codeforces Round 26 Problem C

    C. Two Seals time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. lottie 动画在 vue 中的使用

    前言 最近我所负责的项目中,我采用了动画效果,并开始使用 gif 来实现.然而,在实践过程中,我发现 gif 格式的动画在 git 中出现了明显的锯齿感,这让我非常困扰.为了追求更完美的表现效果,我最 ...

  8. hystrix的熔断降级

    hystrix的熔断降级 结合Feign使用 1.A服务通过B服务的唯-标识,从Nacos获取到可调用列表. 2.使用feigh中的Http发起远程请求. 3.超过默认配置的时限,抛出异常,结束该线程 ...

  9. Unreal学习笔记1-打印输出

    1. 概述 相比各种打断点调试的办法,还是更习惯使用打印输出来进行调试. 2. 详论 2.1. 代码 这里写了三个函数:分别是输出到屏幕,输出到警告日志,输出错误日志. Output.h: #prag ...

  10. 大地经纬度坐标系与Web墨卡托坐标系的转换

    目录 1. 概述 2. 实现 3. 参考 1. 概述 我在<大地经纬度坐标与地心地固坐标的的转换>这篇文章中已经论述了大地坐标系/地理坐标系的概念,简单来说就是由经度.纬度以及高程(BLH ...