OpenFHE Open-Source Fully Homomorphic Encryption Library

OpenFHE是一个开源的FHE库,融合了多种设计理念,支持Bootstrapping和schemeswitching,提供硬件加速,有用户和编译友好模式。它实现了主流FHE方案,包括整数、实数和布尔运算,以及多方扩展功能。文章详细介绍了库的设计特点、支持的加密方案、RNS变体、rescaling模式和Bootstrapping操作等。
摘要由CSDN通过智能技术生成

OpenFHE: Open-Source Fully Homomorphic Encryption Library

Abstract

OpenFHE是一个开源FHE库,它结合了其他流行FHE库的设计理念,并包含了一些新的设计概念和想法。

最主要的设计特点可以概述如下:

(1) 从一开始就假设所有已实现的FHE方案都将支持Bootstrapping操作和scheme switching操作。

(2) 支持硬件加速。

(3) OpenFHE包含两种模式 : 用户友好模式和编译友好模式。

1. Introduction

2. Cryptographic Capabilities

OpenFHE包含所有公开的FHE方案的实现,支持整数、实数和布尔算数。所有的方案均基于RLWE问题,且仅支持2的幂次方的分圆环。

且该库也支持多方扩展的同态加密,包括多密钥FHE和密钥共享FHE。OpenFHE在设计时假设实现的方案均支持自举,且可以进行方案间的切换。

2.1 FHE Schemes

主流的FHE包含有3类。

第一类支持有限域上的整数模算术,包括BGV和BFV。

第二类支持Boolean电路,包括DM和CGGI。

第三类支持实数运算,为CKKS。

其中BGV、BFV和CKKS三者公用同一个设计,称其为BGV-like。

2.1.1 BGV-like schemes

OpenFHE实现了BGV、BFV和CKKS。为了高效性,目前仅仅支持这些方案的RNS变体。RNS技术可以将这些方案采用的大整数分解到一系列小整数,例如机器支持的64-bit。

BGV scheme
BFV scheme
CKKS scheme

OpenFHE实现了CKKS方案的两种RNS变体(基于使用的不同的Rescaling,又可以进一步分为四种模式)。

(1) 第一种RNS变体,对于每一层密文均假设具有相同的缩放因子 2 p 2^p 2p,其中RNS模链中 q i ≈ 2 p q_i\approx 2^p qi2p(除了RNS模链中的第一个素数,该模数用于解密,不是计算模)。

支持此模式的论文有:

《A full rns variant of approximate homomorphic encryption》
《Optimizad homomorphic encryption solution for secure genome-wide association studies》

(2) 第二种RNS变体,对于每一层密文使用不同的缩放因子。

支持此模式的论文有:

《Approximate homomorphic encryption with reduced approximation error》


OpenFHE支持四种rescaling模式,如下:

(1) FIXEDMANUAL : 每一层的缩放因子不改变,且modulus switching 操作需要用户手动执行。

(2) FIXEDAUTO : 每一层的缩放因子不改变,除了第一次同态乘法外,其余每次同态乘法之前都会自动调用rescaling操作。

(3) FLEXIBLEAUTO : 每一层使用不同的缩放因子,除了第一次同态乘法外,其余每次同态乘法之前都会自动调用rescaling操作。

(4) FLEXIBLEAUTOEXT : 每一层使用不同的缩放因子,每次同态乘法前都会自动调用rescaling操作。

更多的细节可以查看论文《Approximate homomorphic encryption with reduced approximation error》。


在选择rescaling模式时,遵循以下原则:

(1) FLEXIBLEAUTOEXT模式下,对相同的参数可以提供更高的精度。但是对于更快的模式(FIXEDMANUAL 或 FIXEDAUTO)来说,在相同参数下,此模式的计算复杂性通常高1.5倍。

(2) FIEXIBLEAUTO模式,在相同参数下,比FLEXIBLEAUTOEXT提供的精度大概少3-4bit,但是更快了。

(3) FIXEDMANUAL和FIXEDAUTO模式,在相同参数,比FIEXIBLEAUTO提供的精度大概多3-4bit的额外精度损失,但计算复杂度较小。

且如果是FHE专家使用FIXEDMANUAL将会得到比FIXEDAUTO更好的性能。

(4) AUTO 模式币FIXEDMANUAL模式更容易使用,因为所有的rescaling操作均由OpenFHE自动完成。

(5) 如果我们的目标是在相同的精度下,最小化模数Q,那么FLEXIBLEAUTOEXT模式是最好的选择。 在某些情况下,在相同的安全级别下,Q的减小也可以约减ring的维度,从而产生更好的性能。


另外,OpenFHE默认使用的模式是FLEXIBLEAUTOEXT。

2.1.2 DM-like schemes

2.2 Multiparty Extensions

OpenFHE还支持BGV、BFV和CKKS的多方扩展,包括有threshold FHE和Proxy ReEncryption。

2.5 Bootstrapping

我们期待OpenFHE可以支持对所有FHE方案进行Bootstrapping操作。Bootstrapping对于单一方案实现任意的计算是必要的,且对于不同方案之间的切换也是必要的。

当前OpenFHE中核心FHE方案的Bootstrapping操作介绍如下:

(1) 用于DM和CGGI方案的Bootstrapping采用如下论文中描述的设计:《Bootstrapping in FHEW-like cryptosystems》,用于LMKCDEY方案的Bootstrapping采用如下论文中描述的设计: 《Efficient FHEW bootstrapping with small evaluation keys, and applications to threshold homomorphic encryption》。

(2) CKKS方案的RNS版本的Bootstrapping使用如下论文的设计:

《Bootstrapping precision beyond the limit》

《Efficient bootstrapping for approximate homomorphic encryption with non-sparse keys》

《Improved bootstrapping for approximate homomorphic encryption》

《Bootstrapping for approximate homomorphic encryption》

(3) BGV暂时没实现Bootstrapping。

(4) BFV暂时没实现Bootstrapping。

(5) OpenFHE还支持CKKS多方版本的交互式Bootstrapping,见论文:

《Collaborative privacy-preserving analysis of oncological data using multiparty homomorphic encryption》

2.6 Noise Estimation

2.7 Scheme Switching

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Homomorphic Encryption-based PIR(Private Information Retrieval)算法是一种保护隐私的数据检索算法。它通过将数据分散储存在多个不同的数据库中,使得单个数据库无法得到完整的数据,进而保证数据的安全性和隐私性。 以下是一个使用Python实现Homomorphic Encryption-based PIR算法的示例代码: ```python import random from phe import paillier # 初始化密钥 public_key, private_key = paillier.generate_paillier_keypair() # 定义数据集 data_set = [random.randint(0, 100) for _ in range(10)] # 对数据集进行加密 encrypted_data_set = [public_key.encrypt(x) for x in data_set] # 随机选择一个数据项进行查询 index = random.randint(0, len(encrypted_data_set) - 1) # 生成查询向量 query_vector = [public_key.encrypt(0) for _ in range(len(encrypted_data_set))] query_vector[index] = public_key.encrypt(1) # 对查询向量进行加密 encrypted_query_vector = [private_key.raw_encrypt(x) for x in query_vector] # 对加密后的查询向量和数据集进行点乘操作 result = sum([encrypted_data_set[i] * encrypted_query_vector[i] for i in range(len(encrypted_data_set))]) # 解密查询结果 decrypted_result = private_key.decrypt(result) print("查询结果:", decrypted_result) ``` 在这个示例中,我们使用了Python的PHE库来实现Paillier公钥加密算法,并且使用随机生成的数据集进行演示。我们首先生成Paillier加密算法的公钥和私钥,然后对数据集中每个数据项进行加密。接着,我们随机选择一个数据项进行查询,并生成一个查询向量进行加密。最后,我们对加密后的查询向量和数据集进行点乘操作,得到查询结果,并使用Paillier私钥进行解密,得到最终的查询结果。 需要注意的是,这个示例只是一个简单的演示,实际应用中需要根据具体的需求进行适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值