# XSCE **Repository Path**: geek_tony/XSCE ## Basic Information - **Project Name**: XSCE - **Description**: 基于MPC技术的隐私计算框架,提供各种常用算法。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2022-08-02 - **Last Updated**: 2022-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### [English](./README.md) # XSCE XDP全栈架构如下图所示,其中PCT技术层通过集成沙箱计算、可信计算、联邦学习和MPC等组件支持众多算法和应用。XSCE作为MPC组件集成在XDP系统中。 ![](./docs/img/xdp_arch.png) XSCE(XDP Secure Computing Engine)作为统一MPC框架提供最常用的MPC算法,易于被上层应用软件集成。XSCE总体架构如下图所示: ![](./docs/img/xsce_arch.png) 本次MPC开源PSI和PIR算法,未来几个月里会有更多算法开源。 #### 编译选项 - **编译** XSCE在Linux系统上测试通过,当前版本依赖于libOTe库,环境最低配置要求:Ubuntu 20, c++ 17, cmake 3.20, python3, 最少指令集要求: aes sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2 avx256 avx512f pclmul bmi2 adx mmx。 执行如下命令可编译libOTe和XSCE: ``` ./build.py libote xsce ``` `./build.py libote` 命令会编译libOTe库,并安装到`./third_party/libOTe_libs`路径下,XSCE的编译会依赖该路径下的库, 如果该路径下没有库,XSCE将依赖默认的系统路径 `/usr/local`下的库。 XSCE编译好的库包括:libtoolkits.a, libcommon.a, libPSI.a and libPIR.a, 这些库会放在源码下的`./lib`路径下, 同时可执行的示例程序pir/psi会编译到build/bin路径下:build/bin/pir, build/bin/psi。 - **安装** 编译好XSCE后,可以执行如下命令将XSCE包含的算法头文件、库文件安装到指定路径下,基于XSCE的二次开发可以通过该路径引用到相关头文件和库: ``` ./build.py install 安装头文件和库到默认路径/usr/local or ./build.py install=/xx/yy 安装头文件和库到指定路径: /xx/yy ``` - **容器** XSCE提供Dockerfile,执行如下命令可以自动构建一个Docker的镜像环境,该环境已编译、安装好XSCE二次开发环境,相关的头文件和库会部署到`/usr/local`路径。 ``` ./build.py docker=images ``` 构建好Docker镜像后,可以启动该Docker,可直接在该环境下做二次开发,也可以git clone XSCE源码,执行如下命令编译示例程序:`./build.py xsce`。 另外:默认情况下,未使用sudo权限,如果系统需要sudo才有权限,需要在./build.py命令后面添加 `sudo`选项。更多的编译选项可以使用`./build.py help`命令查看。 #### 示例 - **psi 示例** 编译完成后,在项目根目录下执行下面命令运行示例: ``` build/bin/psi ``` - **pir 示例** 编译完成后,在项目根目录下执行下面命令运行示例: ``` build/bin/pir or 1. 服务端: build/bin/pir -r 0 2. 客户端: build/bin/pir -r 1 ``` #### 算法设计 - **PSI** PSI 算法设计实现参考IACR 论文 “Private Set Intersection in the Internet Setting From Lightweight Oblivious PRF”: https://eprint.iacr.org/2020/729 - **PIR** PIR 算法实现原理如下: 输入输出:客户端(查询方)使用单个或多个id向服务端(数据方)查询,服务端提供多条文本数据(每个数据包含一个id), 算法过程: ``` 1)客户端用输入id值和服务端的id值进行PSI算法,仅客户端获得psi结果,通过psi结果客户端可以获取查询id对应服务端数据的索引; 2)服务端用随机密钥对每个文本数据进行加密,加密后的密文发送给查询端。服务端的随机密钥是在PSI算法过程中产生的oprf值,PSI算法能够保证客户端PSI算法过程中对于双方交集元素能够产生同样的oprf值; 3)客户端利用PSI算法过程中交集元素的oprf值密钥对查询id对应的密文进行解密得到查询结果。 ``` #### 开源协议 该项目采用apache 2.0开源协议。