行业知识
OPENFHE库介绍
OpenFHE (原 PALISADE)
介绍
Duality Technologies 主导
- Duality Technologies 成立于 2016 年,总部位于美国马萨诸塞州剑桥市,由著名的密码专家和数据科学家联合创立。公司致力于研究大数据/云环境下的数据安全与隐私保护技术,为企业组织提供了一个安全的数字协作平台,目前在美国和以色列开展业务。目前获得了由 Team8 领导的 400 万美元投资。2019 年入选 RSA 大会的创新沙盒前十强,成为两家入选的数据安全公司之一(另一家是 Wirewheel 公司)
- Duality 使企业能够与他们的商业生态系统(客户、供应商和合作伙伴)安全地协作处理敏感数据。 通过实施隐私增强技术(PETs),Duality 实现了对加密数据的安全分析和人工智能,同时遵守数据隐私法规并保护宝贵的知识产权。领先的行业和政府组织与 Duality 合作,使其数据价值最大化,包括 DARPA、英特尔、丰业银行、甲骨文、IBM、世界经济论坛(WEF)等。
- PALISADE 库人员是联合创始人 +CTO,BGV 创始人(V)是首席密码学家
- 以及其他公司参与
OpenFHE(2022 年 7 月发布)
- OpenFHE,一个新的开源 FHE 软件库,**它结合了以前的 FHE 项目,如 PALISADE、HElib 和 HEAAN 的一些设计思想,并包括一些新的设计概念和思想。**主要的新设计特点可以归纳为以下几点。(1 从一开始就假设所有实现的 FHE 方案将支持引导和方案切换;(2)OpenFHE 使用标准的硬件抽象层(HAL)支持多种硬件加速后端;(3)OpenFHE 包括用户友好模式和编译器友好模式,前者所有维护操作,如模数切换、密钥切换和引导-平移,都由库自动调用,后者由外部编译器做出这些决定。
- OpenFHE 专为可用性和性能而设计,提供更简单的 API、模块化、跨平台支持和硬件加速器集成。OpenFHE 支持所有主要的 FHE 方案,包括 BGV、BFV、CKKS、DM (FHEW) 和 CGGI (TFHE) 方案。我们支持多种引导设计,并且我们在积极开发中拥有更高效的引导方案。
- OpenFHE 是 PALISADE 的后继者由 PALISADE、HElib、HEAAN 和 FHEW 库的(部分)作者设计。OpenFHE 软件库结合了从这些先前的 FHE 项目中选择的设计理念,并包含几个新的设计理念和理念。有关该设计的更多信息,
- OpenFHE 得到 DARPA 的慷慨支持。 OpenFHE 是一个社区驱动的开源项目,由不同的贡献者群体开发。OpenFHE 正式隶属于 NumFocus 稳定的开源软件项目。
同态加密支持
全同态加密(FHE)是一个强大的加密基元,可以在不接触到秘密密钥的情况下对加密数据进行计算。OpenFHE 是一个开源的 FHE 库,包括所有常见 FHE 方案的有效实现:
- 整数算术的 Brakerski/Fan-Vercauteren(BFV)方案
- 用于整数算术的 Brakerski-Gentry-Vaikuntanathan(BGV)方案
- 用于实数算术的 Cheon-Kim-Kim-Song(CKKS)方案(包括近似的引导)。
- 用于布尔电路评估的 Ducas-Micciancio(DM/FHEW)和 Chillotti-Gama-Georgieva-Izabachene(CGGI/TFHE)方案
OpenFHE 还包括以下 FHE 的多方扩展:
- BGV、BFV 和 CKKS 方案的阈值 FHE
- BGV、BFV 和 CKKS 方案的代理重加密
OpenFHE 实现了高效的剩余数系统 (RNS) 算法以实现高性能。
google 应用(FHE C++ Transpiler)
- 据 Duality 技术公司的新闻稿,谷歌已将其在 GitHub 上开源的使用 XLS SDK 开发的开源项目完全同态加密(FHE)转译器与领先的开源完全同态加密(fully homomorphic encryption)库 OpenFHE 合并。通过使加密知识更简单、更容易接近,开发者对 FHE 的采用将增加。
- 同态加密(FHE)转译器(FHE C++ Transpiler)2022.9.14 整合
- FHE C++ Transpiler 是一项开源技术,将允许任何 C++ 开发人员在不解密的情况下对加密数据进行转换。这个转译器将谷歌的 XLS 库与多个 FHE 后端**(目前是 TFHE 库和 OpenFHE 的 BinFHE 库)**连接起来。它将允许开发者(包括那些没有密码学专业知识的人)编写在加密数据上运行的代码,而不透露数据内容或计算结果。这个系统应该有助于为实用 FHE 系统的进一步发展奠定基础。
- 该系统目前只支持 Linux,并需要 GCC 第 9 版(或更高)和 Bazel 4.0.0。这目前是一个探索性的概念验证。虽然它可以在实践中部署,但 FHE-C++ 操作的运行时间可能太长,目前还不实用。该转置器严重依赖所选择的 FHE 库来保证安全。由于 OpenFHE 和 TFHE 库都比较新,还没有强大的被广泛接受的密码分析。因此,在将该系统的输出纳入实时生产部署之前,请注意这两个库中可能存在尚未发现的漏洞。
BinFHE(Bootstrapping in FHEW-like Cryptosystems)
https://eprint.iacr.org/2020/086.pdf
- 摘要
FHEW 和 TFHE 是完全同态加密 (FHE) 密码系统,可以在每次门评估后通过自举来评估加密数据上的任意布尔电路。 FHEW 密码系统最初是基于标准(环形、循环安全)LWE 假设设计的,其初始实现能够在不到 1 秒的时间内运行自举。 TFHE 密码系统使用了一些更强的假设,例如(环,循环安全)LWE 在具有二进制秘密分布的环上,并应用了一些其他优化来将引导运行时间减少到小于 0.1 秒。
我们提出了一个统一的框架,包括 FHEW 和 TFHE 密码系统的原始和扩展变体,并在开源的 PALISADE 格密码学库中使用模块化算术来实现它。我们的分析表明,这些密码系统之间的主要区别在于所使用的引导程序。FHEW 的 Alperin-Sherif-Peikert(AP)与 TFHE 的 Gama-Izabachene-Nguyen-Xie(GINX)。TFHE 的所有其他算法优化同样适用于两个密码系统。GINX 的引导方法必须使用二进制秘密,不能直接应用于其他秘密分布。在比较这两种方案的过程中,我们提出了一种简单、轻量级的方法,将 GINX 引导法(例如 TFHE 所采用的方法)扩展到三元均匀和高斯秘密分布,这些秘密分布包括在 HE 社区安全标准中。我们对不同秘密分布的 AP 和 GINX 引导方法的比较表明,TFHE/GINX 密码系统对二元和三元秘密提供了更好的性能,而 FHEW/AP 对高斯秘密更快。我们建议考虑基于三元和高斯秘密的 FHEW 和 TFHE 密码系统的变体,以便由 HE 社区进行标准化。
Benchmark
虚拟机运行(4 核 4gb 内存)
BGV
明文
// First plaintext vector is encoded std::vector vectorOfInts1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; Plaintext plaintext1 = cryptoContext->MakePackedPlaintext(vectorOfInts1); // The encoded vectors are encrypted std::stringstream s2; //Serial::Serialize(plaintext1, s1, SerType::BINARY); Serial::Serialize(ciphertext1, s2, SerType::BINARY); //std::cout CCParams std::cout std::cout std::cout 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}; std::vector1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}; std::vector1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0}; Plaintext plaintext1 = cc-MakePackedPlaintext(vectorOfInts1); Plaintext plaintext2 = cc-MakePackedPlaintext(vectorOfInts2); Plaintext plaintext3 = cc-MakePackedPlaintext(vectorOfInts3); // Encryption //加密 CiphertextciphertextAdd123}, kp1.secretKey); // partial decryption by second party //kp2用kp2私钥解密part2 auto ciphertextPartial2 = cc-MultipartyDecryptMain({ciphertextAdd123}, kp2.secretKey); // partial decryption by third party //kp3用kp3私钥解密part3 auto ciphertextPartial3 = cc-MultipartyDecryptMain({ciphertextAdd123}, kp3.secretKey); std::vector usint batchSize = 16; CCParamsevalMultFinal}); std::cout 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 0}; std::vector1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}; std::vector2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0}; Plaintext plaintext1 = cc-MakeCKKSPackedPlaintext(vectorOfInts1); Plaintext plaintext2 = cc-MakeCKKSPackedPlaintext(vectorOfInts2); Plaintext plaintext3 = cc-MakeCKKSPackedPlaintext(vectorOfInts3); // Encryption CiphertextciphertextAdd123}, kp1.secretKey); auto ciphertextPartial2 = cc-MultipartyDecryptMain({ciphertextAdd123}, kp2.secretKey); std::vectorciphertextMult}, kp1.secretKey); ciphertextPartial2 = cc-MultipartyDecryptMain({ciphertextMult}, kp2.secretKey); std::vectorciphertextEvalSum}, kp1.secretKey); ciphertextPartial2 = cc-MultipartyDecryptMain({ciphertextEvalSum}, kp2.secretKey); std::vector
- 摘要
- 以及其他公司参与
上一篇:亚马逊怎么登录服务器账号?
下一篇:怎么租京东的服务器?