#secure-computation #privacy-enhancing #data-sharing #secure-mpc #utilities

bin+lib ciphercore-base

CipherCore 的基础包:计算图 API、安全 MPC 编译器、图评估和检查的实用工具

6 个版本

0.3.1 2023 年 5 月 23 日
0.3.0 2023 年 5 月 19 日
0.2.0 2023 年 4 月 21 日
0.1.3 2023 年 3 月 20 日
0.1.1 2022 年 5 月 17 日

#283 in 密码学

Download history 13/week @ 2024-03-27 17/week @ 2024-04-03 1/week @ 2024-04-17

每月 72 次下载
ciphercore-adapters 中使用

Apache-2.0

2MB
43K SLoC

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,他们想要执行以下计算

  1. Alice和Bob各自有一个32位整数,分别是xy,这是保密的。
  2. Charlie想知道x是否大于y,但关键是Alice和Bob不相信Charlie,也不相信彼此或任何其他第三方会泄露他们的秘密。

这是安全多方计算(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)

并通过使用Python运行上述脚本并将其输出重定向到文件a.json来序列化它。

接下来,让我们使用CipherCore CLI编译器编译计算图,如下所示

ciphercore_compile a.json simple 0,1 2 > b.json

这里的0,1表示输入属于参与者0(Alice)和参与者1(Bob)。而2表示输出应该向参与者2(Charlie)公开。

文件b.json包含我们比较问题的安全协议的完整描述。我们可以通过以下方式运行检查工具来查看它

ciphercore_inspect b.json

它输出各种有用的统计数据,包括执行计算所需的安全网络轮数(在我们的案例中为45),以及需要交换的总流量(233字节)。

为了检查安全协议的功能保持完好,让我们在本地运行它。首先,创建一个包含Alice和Bob输入的文件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}

因为Alice的数字大于Bob的。

尽管比较的安全协议的描述完全包含在b.json中,但这只是协议的本地模拟。为了在网络上可靠且高效地执行实际参与者之间的安全协议,需要CipherCore运行时,我们可以根据要求提供。

上面的例子是一个玩具例子,但是可以使用CipherCore在大型规模上执行机器学习训练、推理和分析。敬请期待!

依赖关系

~13–26MB
~377K SLoC