5个不稳定发布
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.2 | 2022年8月12日 |
#1967 in 加密学
每月46次下载
用于 ciphercore-base
27KB
526 行
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
,这些数字是保密的。 - 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在大规模上进行机器学习训练、推理和分析。请保持关注!
依赖项
~1.5MB
~35K SLoC