3个版本

0.1.1 2022年11月16日
0.1.0 2022年10月19日
0.1.0-beta.02022年7月6日

#2516 in 密码学

每月 29 次下载
用于 2 crates

BSD-3-Clause-Clear

500KB
8K SLoC

concrete Shortint

concrete-shortint 是一个基于 concrete-core 的Rust库,旨在提供一个提供“短整型”类型的抽象层。

“短整型”指的是通常小于8位且可以适应单个LWE密文的无符号整数。

此库的目标受众是具有密码学知识的人。

许可证

本软件根据BSD-3-Clause-Clear许可证分发。如有任何疑问,请联系我们:hello@zama.ai


lib.rs:

欢迎使用 concrete-shortint 文档!

描述

此库使得在加密短整型上执行模运算成为可能。

它允许在不受信任的服务器上执行整数电路,因为电路输入和输出都保持私密。

数据在客户端加密后发送到服务器。在服务器端,所有计算都在密文上执行。

但是,服务器必须知道要评估的整数电路。计算结束后,服务器将结果的加密返回给用户。

密钥

此crate公开两种密钥类型

  • [ClientKey] 用于加密和解密,必须保密;
  • 服务器端使用[ServerKey]执行同态运算,并且它旨在公开(客户端将其发送到服务器)。

快速示例

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

use concrete_shortint::{gen_keys, Parameters};

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

let msg1 = 1;
let msg2 = 0;

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

// We use the server public key to execute an integer circuit:
let ct_3 = server_key.unchecked_add(&ct_1, &ct_2);

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

依赖项

~6.5MB
~126K SLoC