
MP-SPDZ
文章平均质量分 59
介绍MP-SDPZ开源库的知识
奔跑的梅花Lu
这个作者很懒,什么都没留下…
展开
-
安全多方计算之MP-SPDZ实例初探(一)
SPDZ是一个安全多方计算的开源库。里面包含了各种技术实现的安全多方计算,例如混淆电路、秘密分享、OT、同态。功能比较全,而且是持续维护的开源库。主体语言是python,众所周知,python是世界最好的语言。在此基础上定义了很多新的关于MPC的类和库,具体可查看用户手册。官方文档是:https://github.com/data61/MP-SPDZ 对spdz库进行了详细介绍,以及一些基础的安装编译命令官方源代码:https://github.com/data61/MP-SPDZ/release.原创 2021-04-20 17:08:54 · 20763 阅读 · 88 评论 -
MP-SPDZ开源库——while_do的研究
今天记录下一个spdz开源库里的while_do函数的用法测试版本0.3.0while_do函数的介绍:一句一句解释一下While-do loop. :函数是用来做while循环的。The decorator requires an initialization, :解释器需要一个初始化,可以理解为在这里为循环赋初始状态(值)and the loop body function must return a suitable input for condition.:loop body也是一个函原创 2022-03-16 19:08:19 · 1521 阅读 · 6 评论 -
MP-SPDZ开源库——杂项
使用flag:-OF filename 可以将print_ln内的输出输出到文件filename内。一些脚本内也可以添加flag:Scripts/run-online.sh test -OF Outfile ;flag -I 表示与命令行交互,也就是从命令行上获得输入;make编译:make arithmetic 编译算术电路,生成可执行文件(.x文件);make binary 编译逻辑电路,生成可执行文件(.x文件);make -party.x 可以单独编译某个具体的协议。生成依赖库: make l.原创 2022-03-14 11:20:01 · 1528 阅读 · 6 评论 -
Python 生成随机数
生成指定文件名的随机数# 生成随机数 # 指定数据类型:整数(1--100000)、浮点数(五位小数,1--100)# 指定数据量# 指定文件名import random,sysl = len(sys.argv)if(l == 4): form = sys.argv[1] filename = sys.argv[3] if(form == "int"): n = int(sys.argv[2]) fp = open(filename,"原创 2022-03-08 14:22:57 · 2077 阅读 · 0 评论 -
MP-SPDZ开源库——将结果输出到文件
mp-spdz测试版本:0.3.0使用到的测试程序:./Program/Source/test_sbitint.mpc首先对程序进行编译:./compile.py -B 32 test_sbitint输出:ubuntu@ubuntu:~/spdz030$ ./compile.py -B 32 test_sbitintDefault bit length: 32Default security parameter: 40Compiling file /home/ubuntu/gaoPENG/原创 2022-03-01 09:26:52 · 1502 阅读 · 5 评论 -
SPDZ开源库——基础OT的用法
最近研究了spdz源代码里的BaseOT.h 写了两个测试程序。原创 2022-02-09 17:03:23 · 1852 阅读 · 0 评论 -
利用spdz开源库的网络通信模块实现两端通信
利用spdz开源库的网络通信模块实现两端通信程序一共有两端,一个是客户端client.cpp,一个是服务器端server.cpp客户端代码:client.cpp#include <iostream>#include "mytools.hpp"#include "Networking/Player.h"#include "Tools/octetStream.h"#include "Tools/FlexBuffer.h"#include "Networking/sockets.h"原创 2021-12-16 16:59:49 · 1282 阅读 · 0 评论 -
SPDZ开源库——两台虚拟机之间进行MPC简单实例
我开了两台虚拟机ip分别为:192.168.115.129和192.168.115.130。以下虚拟机简称为129和130。实例代码:两方求和a = sfix.get_input_from(0)b = sfix.get_input_from(1)c = a+bprint_ln("%s",c.reveal())在两台机器上分别编译代码:./compile.py -B 32 test生成证书:Scripts/setup-ssl 2写入数据:自己写吧我使用的是姚氏混淆电原创 2021-07-30 17:02:48 · 1809 阅读 · 20 评论 -
SPDZ开源库——杂项
使用flag:-OF filename 可以将print_ln内的输出输出到文件filename内。原创 2021-07-21 14:34:56 · 598 阅读 · 0 评论 -
SPDZ开源库——设置浮点数的精度
开发过程中,发现sfloat类型的精度默认为6,也就是你输入一个浮点数,比如93807.6411869,他只能读入93807.6。解决办法:在程序的开头加上两句:print_float_prec(10)sfloat.vlen = 48原创 2021-07-16 09:47:04 · 912 阅读 · 2 评论 -
安全多方计算之SPDZ开源库——隐私集合求交实现
一个用SPDZ开源库实现的集合隐私求交程序:没用什么算法,只是单纯的遍历,时间复杂度O(n^2)特别慢。from util import if_elsefrom Compiler import typesfrom Compiler import mpc_mathprogram.bit_length = 128def compute_intersection(a, b): n = len(a) intersection = Array(n, sfix) is_match.原创 2021-05-27 09:21:05 · 2791 阅读 · 12 评论 -
安全多方计算之SPDZ开源库:ORAM
ORAM,Oblivious Random Access Machine。不经意随机存储。ORAM(Oblivious Random Access Machine,茫然随机访问机)是一种可以用来完全隐藏IO操作的数据访问模式的加密方案。访问模式是指IO操作访问文件的顺序、访问文件的频率、读写顺序等,当用户把数据存储在不可信的第三方时,即使数据是加密的,第三方仍能通过收集用户访问模式信息推断出用户隐私,在ORAM方案中,若两次访问序列长度相同,则其访问模式是相同的,使得第三方无法通过访问模式获取用户隐私。简单原创 2021-05-19 14:42:10 · 1220 阅读 · 1 评论 -
安全多方计算之SPDZ开源库:基于AES电路实现OPRF
1. OPRF:不经意伪随机函数Alice有一些输入,Bob有一个key。不经意PRF允许Alice将自己的输入与Bob的key结合经过一系列运算转变成相对应的数。在这个过程中,Alice不能知道Bob的key,Bob也不知道最后的结果F(key,x)。每一个输入xi都可以计算出一个不同于其他输入的数,这些数就可以被看作伪随机数。将AES算法转变成电路(Circuit)形式,通过混淆电路的两方安全计算就可以看作OPRF的实现。2.基于SPDZ的实现from circuit import原创 2021-05-19 13:36:52 · 2850 阅读 · 7 评论 -
SPDZ:sbits.get_input_from 无法读取十六进制数
1. 找到Processor文件夹下的FixInput.cpp,打开之后将第二个函数删掉,用下面的代码替换。template<>void FixInput_<bigint>::read(std::istream& in, const int* params){ if (*params == 0) { bigint x; in.unsetf(ios::basefield); in >> x;原创 2021-05-18 16:56:48 · 588 阅读 · 1 评论 -
MPC之SPDZ开源库安装过程中可能出现的错误
第一个错误:执行Scripts/tldr.sh时出现:错误原因:你下的源代码不对,他确实没有这个文件。解决办法: 办法1. 下载那个50多M的就没有这个问题。 下载链接:https://github.com/data61/MP-SPDZ/releases 下载那个tar.xz文件 办法2. 把这个文件拷贝到到对应文件夹内。至于这个文件去哪找,参考办法1.第二个错误:执行make -j 8 tldr时出现错误...原创 2021-05-11 15:09:00 · 2403 阅读 · 7 评论 -
安全多方计算之SPDZ开源库语法详解——library模块
This module defines functions directly available in high-level programs, in particularly providing flow control and output.、这个模块定义了一些特殊的基础操作,像for循环、while循环、if条件语句等。原创 2021-04-28 16:14:52 · 1833 阅读 · 3 评论 -
安全多方计算之SPDZ开源库语法详解——Array
安全类型:Array (Array accessible by public index.)1. __init__(length,value_type,address=None,debug=None,alloc=True)Parameters: length– compile-time integer (int) orNonefor unknown length value_type– basic type address– if given (reg...原创 2021-04-25 14:45:42 · 2185 阅读 · 10 评论 -
安全多方计算之SPDZ开源库语法详解——Sint
安全类型:sint(Secret integer in the protocol-specific domain.)1. __init__(val=None,size=None)Parameters: val– initialization (sint/cint/regint/int/cgf2n or list thereof) size– vector size (int), defaults to 1 or size of list a = sint(...原创 2021-04-23 15:12:48 · 2993 阅读 · 17 评论 -
安全多方计算之SPDZ库初探(四)
写了一个小程序:a = sfix(12)b = sfix(13)c = sfix.__eq__(a,b)print_ln("a: %s",a.reveal())print_ln("b: %s",b.reveal())print_ln("c: %s",c.reveal())主要想测试下__eq__()函数的用法。该函数主要用来比较两个数是否相等。相等返回1,不相等返回0。编译的时候没有问题:但是程序执行时出现如下错误:根据错误描述,程序编译时候没有指定环的比特数。于是.原创 2021-04-23 14:20:20 · 2007 阅读 · 11 评论 -
安全多方计算之SPDZ初探(三)
自己写了个冒泡排序练手。内容如下:from util import if_elsefrom Compiler import typesdef maopao(a): print_ln("hello: %s", a.reveal()) n = len(a) @for_range(n) def _(i): @for_range(n) def _(j): @if_((a[i] > a[j]).reveal()) def _(): # print_ln("!!原创 2021-04-23 10:58:44 · 2622 阅读 · 7 评论 -
安全多方计算之SPDZ初探(二)
介绍一个命令./emulate.x <program>可以用来执行编译好的程序。官方介绍如下:这个执行器是在明文下进行运算,并且输入必须要内定,不能从外部输入,可以用来跑测试样例。操作很方便。对于一个测试样例testgp.mpc首先编译程序:./compile.py testgp编译成功后直接执行:./emulate.x testgp就可以跑程序。...原创 2021-04-21 15:35:15 · 2601 阅读 · 2 评论