#同态加密 #同态 #FHE #加密 #客户端密钥 #密钥

concrete-boolean

为 concrete FHE 库提供的同态布尔电路接口

3 个不稳定版本

0.2.1 2022年11月16日
0.2.0 2022年10月19日
0.1.0 2021年9月30日

#2408 in 密码学

40 每月下载量
用于 concrete

BSD-3-Clause-Clear 许可

94KB
2K SLoC

Concrete Boolean

这个库允许在加密位上执行布尔门。它允许在不受信任的服务器上执行布尔电路,因为电路的输入和输出都保持私密。数据实际上是在客户端加密后发送到服务器的。在服务器端,每项计算都是在密文上进行的。然而,服务器必须知道要评估的布尔电路。计算结束后,服务器将结果加密返回给用户。

快速示例

以下代码片段展示了如何生成密钥并同态运行一个小布尔电路。

use concrete_boolean::prelude::*;

fn main() {
   // We generate a set of client/server keys, using the default parameters:
   let (mut client_key, mut server_key) = gen_keys();

   // We use the client secret key to encrypt two messages:
   let ct_1 = client_key.encrypt(true);
   let ct_2 = client_key.encrypt(false);

   // We use the server public key to execute a boolean circuit:
   // if ((NOT ct_2) NAND (ct_1 AND ct_2)) then (NOT ct_2) else (ct_1 AND ct_2)
   let ct_3 = server_key.not(&ct_2);
   let ct_4 = server_key.and(&ct_1, &ct_2);
   let ct_5 = server_key.nand(&ct_3, &ct_4);
   let ct_6 = server_key.mux(&ct_5, &ct_3, &ct_4);

   // We use the client key to decrypt the output of the circuit:
   let output = client_key.decrypt(&ct_6);
   assert_eq!(output, true)
}

AVX512

在具有 avx512 指令集的 x86_64 CPU 上,可以使用带有 nightly-avx152 的夜间编译器编译以获得额外的加速。

cargo+nightly bench --功能nightly-avx512

GPU 后端

concrete-boolean 通过 concrete-cuda crate 支持 GPU 后端。可以通过将 --features=cuda 标志添加到编译命令来激活它。

许可证

此软件根据 BSD-3-Clause-Clear 许可证分发。如果您有任何问题,请通过 hello@zama.ai 联系我们。

依赖关系

~6.5MB
~127K SLoC