Skip to content

密文检索:对称可搜索加密SWP方案的C++实现

Notifications You must be signed in to change notification settings

GoesM/Searchable-Encryption_fork

 
 

Repository files navigation

对原项目进行了复现,并将相关依赖已经上传

因此使用方法更加简单:

运行数据库后端:

chmod +x launch_server
./launch_server

运行前端查询:

chmod +x launch_client
./launch_client

感言

该项目真是优雅!太优雅了!

分割线之后为原文readme.md


SWP of Searchable Encryption

编程水平有限,代码可能比较丑。

1. 简介

本项目为毕业设计的一部分,实现一种可搜索加密方案。

选择SWP方案为主要思想,通过结合gRPCProtocBufRocksDB等第三方库来实现。

  • SWP方案来自于D.Song等人的Practical Techniques for Searches on Encrypted Data,为一种对称可搜索加密方案。

  • gRPC为Google开源的一个高性能、开源和通用的RPC框架。

  • ProtoBuf为Google开源的一种数据序列化的方案,具有高的转化效率,时间效率和空间效率,远超同类json,xml等。

  • RocksDB是一个来自FaceBook的可嵌入式的支持持久化的key-value存储系统,基于LevelDB改进而来。

2. 配置环境

操作系统版本:Deepin20.2

内核版本:5.10.18-amd64-desktop

第三方库

注意:第三方库版本尽可能一致

rocksdb版本:6.16.4

protobuf版本:3.14.0

gRPC版本:1.36.0

其中protocbufgrpc版本匹配即可

  • 2.1 RocksDB

    参考本人写的Ubuntu/Deepin上安装Rocksdb

  • 2.2 gRPC和protobuf

    由于gRPC的实现依赖protobuf,因此这两个库可以同时安装,且建议同时安装,即使用gRPC源码中包含的protobuf源码来编译安装。

    具体步骤如下:

    2.2.1 下载依赖和源码

    sudo apt-get install build-essential autoconf libtool pkg-config cmake
    git clone -b v1.36.0 https://github.com/grpc/grpc
    cd grpc
    git submodule update --init

    2.2.2 编译安装

    // 此步骤参考grpc/BUILDING.md
    mkdir -p cmake/build
    cd cmake/build
    cmake ../.. -DBUILD_SHARED_LIBS=ON
    make
    sudo make install

    正常情况下,protobuf作为子模块也已经安装成功,如果没有安装,则需要去third_party/protobuf路径下手动安装,安装方式如下:

    ./autogen.sh
    ./configure
    make
    sudo make install

    2.2.3 安装结果测试

    cd grpc/examples/cpp/helloworld
    make
    ./greeter_server
    ./greeter_client

    如果测试失败,查看报错信息,如果是缺少依赖,则多半因为子模块没能成功安装,前往third_party目录下手动安装缺少模块,安装方式与protobuf类似。

3. 目录结构

SWP-of-searchable-encryption
├── protoc/				# protocbuf相关目录
│	├── rpc.grpc.pb.cc		# 由rpc.protoc生成的grpc通讯接口源文件
│	├── rpc.grpc.pb.h		# 由rpc.protoc生成的grpc通讯接口头文件
│	├── rpc.grpc.pb.o		
│	├── rpc.pb.cc			# 由rpc.protoc生成的基本接口源文件
│	├── rpc.pb.h			# 由rpc.protoc生成的基本接口头文件
│	├── rpc.pb.o			
│	├── rpc.proto			# 使用protocbuf序列化的通讯信息内容
│	└── updateprotoc.sh		# 将rpc.proto生成接口的脚本
├── submodule/				# 工具类文件
│	├── encryption.cc		# 加密解密相关函数源文件
│	├── encryption.h		# 加密解密相关函数头文件
│	├── encryption.o		
│	├── tools.cc			# 工具函数源文件
│	├── tools.h			# 工具函数头文件
│	└── tools.o				
├── rocksdb-data/			# 服务器端数据库目录
├── client				# 客户端可执行文件
├── client.cc				# 客户端源文件
├── client.h				# 客户端头文件
├── client.o					
├── server				# 服务器端可执行文件
├── server.cc				# 服务器端源文件
├── server.h				# 服务器端头文件
├── server.o					
├── Makefile				# 编译server和client
└── README.md				# readme

4. 实现原理

因Github不支持渲染公式,实现原理部分迁至本人博客

About

密文检索:对称可搜索加密SWP方案的C++实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.1%
  • Makefile 1.5%
  • Shell 0.4%