5 个不稳定版本
0.3.0 | 2023 年 5 月 19 日 |
---|---|
0.2.0 | 2023 年 4 月 21 日 |
0.1.3 | 2023 年 3 月 20 日 |
0.1.2 | 2022 年 8 月 12 日 |
0.1.1 | 2022 年 5 月 17 日 |
#457 in 密码学
33 每月下载量
用于 2 crates
8KB
CipherCore
CipherCore 是一个基于 安全多方计算 的用户友好型安全计算引擎。
要安装 CipherCore,运行以下命令之一
pip install ciphercore
-- 安装 CipherCore 计算图 API 的 Python 包装器cargo install ciphercore-base
-- 从源码构建和安装 CipherCore 编译器和其他 CLI 工具(需要 Cargo)docker pull ciphermodelabs/ciphercore:latest
-- 拉取包含 CipherCore 二进制分发的 Docker 镜像docker pull ciphermodelabs/runtime_example:latest
-- 拉取包含 CipherCore 运行时的 Docker 镜像(需要访问令牌,联系我们 请求访问)。
查看完整的 文档,其中包含教程、几个示例以及 CipherCore 的全面指南。
如果您有任何问题,或更普遍地想讨论 CipherCore,请 加入 Slack 社区。
五分钟简介
假设有三个当事人,Alice,Bob 和 Charlie,他们想执行以下计算
- Alice 和 Bob 各自有一个 32 位整数,分别为
x
和y
,这些整数是保密的。 - 查理想知道
x
是否大于y
,但关键的是,爱丽丝和鲍勃都不信任查理,彼此或其他任何一方泄露他们的秘密。
这是一个安全多方计算(SMPC)的一般问题的实例,其中几个方希望共同计算他们的输入的一些函数(在上面的情况下是比较)的方式,这样除了可以从输出中推断的信息外,不会向任何其他方泄露关于输入的信息。目前,CipherCore支持ABY3协议,该协议适用于三个参与者,是现有协议中最有效的一种。
首先,让我们将我们的问题表述为CipherCore计算图
import ciphercore as cc
c = cc.create_context()
with c:
g = c.create_graph()
with g:
x = g.input(cc.scalar_type(cc.INT32)) # Alice's input
y = g.input(cc.scalar_type(cc.INT32)) # Bob's input
output = x.a2b() > y.a2b() # Charlie's output
# (`a2b` converts integers into bits, which is necessary for comparisons)
output.set_as_output()
g.set_as_main()
print(c)
然后通过运行上面的脚本并重定向其输出到文件 a.json
来序列化它。
接下来,让我们使用CipherCore CLI编译器编译计算图,如下所示
ciphercore_compile a.json simple 0,1 2 > b.json
其中 0,1
表示输入属于参与者 0
(爱丽丝)和参与者 1
(鲍勃)。而 2
表示输出应向参与者 2
(查理)揭示。
文件 b.json
包含了我们比较问题的安全协议的 完整描述。我们可以通过以下方式运行检查工具来窥视它
ciphercore_inspect b.json
它输出了各种有用的统计数据,包括进行安全计算所需的网络回合数(在我们的案例中为45)和需要交换的总流量(233字节)。
为了检查安全协议的功能保持完好,让我们本地运行它。首先创建一个文件 inputs.json
,包含爱丽丝和鲍勃的输入
[
{"kind": "scalar", "type": "i32", "value": 32},
{"kind": "scalar", "type": "i32", "value": 12}
]
为了在输入32和12上评估安全协议,我们运行
ciphercore_evaluate b.json inputs.json
并正确得到
{"kind": "scalar", "type": "bit", "value": 1}
因为爱丽丝的数字大于鲍勃的。
然而,尽管比较的安全协议的描述完全包含在 b.json
中,但这只是协议的本地模拟。为了在网络中可靠且高效地执行实际各方之间的安全协议,需要一个CipherCore运行时,我们可根据要求提供。
上面的例子是一个玩具性的例子,但是可以使用CipherCore在大规模上进行机器学习训练、推理和分析。敬请期待!
依赖项
~1.6–2.7MB
~52K SLoC