科研课堂的大作业,是一个基于gRPC通信实现的具有一定加密功能的联邦数据库
可以对指定数据进行最近邻查询(NearestQuery),反向最近邻查询(AntiNearestQuery),加密最近邻查询(EncryptedNearestQuery)
基于Flutter框架进行搭建, 采用Dart语言配置gRPC与后端进行通信
详情请见前端仓库FederatedDatabase-Flutter
前后端通信定义的消息见federation.proto
目前前端支持将查询结果渲染为动态散点图
后端要求实现FederationServer.py,DatabaseServer.py两个程序
分别实现联邦数据库的服务端以及每个独立的数据库本体
客户端使用gRPC服务发送查询的数据请求,服务端接收后发送查询操作给服务端管控下的数据库,
在此过程中可选择使用同态加密算法,由此防止因泄露数据过多导致的安全性降低
服务端最后再将结果返回给客户
需要配置Dart和Flutter的SDK以配置前端的开发环境
为了方便我们在文件夹中提供了windows系统的.exe安装包
可以直接下载安装无需从源码层面编译
编译命令
flutter build windows运行前安装grpcio,tenseal等软件包进行开发
pip install grpcio grpcio-tools tenseal numpy运行DatabaseServer.py,FederationQuery.py启动服务端
python DatabaseServer.py FederationQuery.py运行FederationTest.py
python FederationTest.pyFederationTest.py提供了三种查询的样例,若直接运行会有以下输出
Query Type: Nearest, X:150, Y:150, QueryNum:10
User at (151, 149) from Database 1
User at (147, 150) from Database 2
User at (145, 150) from Database 2
User at (145, 148) from Database 2
User at (156, 152) from Database 2
User at (155, 145) from Database 2
User at (144, 145) from Database 2
User at (146, 151) from Database 3
User at (153, 153) from Database 3
User at (149, 143) from Database 3
程序运行时间: 0.012938 秒
Query Type: AntiNearest, X:150, Y:50
User at (151, 49) from Database 1
User at (150, 51) from Database 3
程序运行时间: 3.866848 秒
Query Type: EncryptedNearest, X:150, Y:150, QueryNum:10
User at (151, 149) from Database 1
User at (147, 150) from Database 2
User at (145, 150) from Database 2
User at (145, 148) from Database 2
User at (156, 152) from Database 2
User at (155, 145) from Database 2
User at (144, 145) from Database 2
User at (146, 151) from Database 3
User at (153, 153) from Database 3
User at (149, 143) from Database 3
程序运行时间: 38.096181 秒
PS:运行时间会略有不同
这里更推荐使用配套的前端程序进行查询
查询界面
查询结果
数据图表


