# Cash的OXT方案
## 项目组织结构
文件夹tsets_bloom_filter: 用于存放保存有tsets的bloomfilter
文件夹output_keys: 用于存放密钥
文件夹testset: 测试数据集
文件夹lib: 存放jpbc相关的jar包
文件夹params: 存放双线性对参数的文件夹
Cash实验汇报.pptx: 向老师汇报的时候使用的ppt
Cash方案实现架构.pptx: 向老师汇报的时候使用的ppt
## 参考文献
Cash-Highly-scalable searchable symmetric encryption with Support for Boolean Queries.pdf
重点参考:3.2章
TSet的结构如下:
![TSet的结构](imgs/TSet的结构.png)
## 实现架构
![主要架构](imgs/主要架构.jpg)
注意:这里mysql和redis都是采用了长连接的形式,这主要是因为要源源不断地从redis中读数据,向mysql中写数据,频繁地打开关闭连接会导致性能的下降
```java
private static Connection conn; //连接
private static PreparedStatement pres; //PreparedStatement对象
static {
try {
conn = MysqlConnPool.getConnection();
System.out.println("数据库连接成功!!!");
} catch (Exception e) {
e.printStackTrace();
}
}
```
## 想要复现实验??
参考 如何复现实验.md
## 类的定义
## Cash的方案 与 WJF的方案的不同之处在于
1. 没有产生私钥
2. 没有产生公钥
3. 没有产生g1 g2 g3
## 对toyDB生成索引文件
```cmd
mvn test -Dtest=AlgorithmTest#EDBSetupOutputTest
```
## 对ciPing_0.txt 生成索引文件(由EDRM数据集生成的)
```cmd
mvn test -Dtest=AlgorithmTest#EDBSetupOutputTest2
```
## 对ciPing_0.txt 生成的索引文件(由enwiki数据集生成的)
```cmd
mvn test -Dtest=AlgorithmTest#EDBSetupOutputTest3
```
## 对前1000个关键词的记录生成索引文件(使用redis enwiki数据集生成的)
```cmd
mvn test -Dtest=AlgorithmTest#EDBSetupOutputTest4
```
实验结果:02:38 h
## 100次查询(由EDRM数据集生成的)
对索引ciPing_1.index进行查询,每次查询3个关键字,查询100次,然后求出平均值
```cmd
mvn test -Dtest=QueryTimeTest#t1
```
## 100次查询(由enwiki数据集生成的)
对索引ciPing_0.index进行查询,每次查询3个关键字,查询100次,然后求出平均值
```cmd
mvn test -Dtest=QueryTimeTest#t2
```
## 对比实验,对ciPing_64.txt生成索引文件
# 实验部分
### TSets和XSets
在设计数据库的时候需要考虑到搜索时的行为:
在搜索中,XSets中主要是做匹配,存储为字符串类型即可,测试下长度为311,分配400的长度
在搜索中,TSets中的stag也是为了做匹配,存储为字符串类型即可,测试下长度为74,分配100的长度
在搜索中,需要密文e 和 索引y,我们将其存储为blob类型,之后反序列化为ArrayList<t_item>对象
```sql
# 连接数据库
mysql -uroot -proot -P3306 -h10.170.32.244
CREATE DATABASE IF NOT EXISTS vsse DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use vsse
CREATE TABLE IF NOT EXISTS XSets(
xSet VARCHAR(400)
);
CREATE TABLE IF NOT EXISTS TSets(
stag VARCHAR(100),
t blob
)
```
保存数据的代码段如下 MySqlUtils#saveTSets
```java
//开始保存XSet
pres = conn.prepareStatement(sql_XSets);
for (int i = 0; i < task.getXSets().size(); i++) {
//pres.setString(1, task.getXSets().get(i).getElement().toString());
pres.addBatch(); //实现批量插入
}
pres.executeBatch();//批量插入到数据库中
//开始保存TSets
pres = conn.prepareStatement(sql_TSets);
pres.setString(1, task.getStag());
pres.setBytes(2, MyUtils.msg2Byte(task.getT()));
pres.execute();
if (pres != null)
pres.close();
```
### 密钥
本算法设计到的Master Key包括:
KI:用于生成索引y
Kz:用于生成索引y
Kx:用于生成索引x
Ks:用于生成加密文件名的密钥Ke
Kt:
g:双线性对的生成元
其他的密钥包括:
Ke:通过Ks 和 关键字的 随机映射得到
### 如何运行
```cmd
cd CashScheme
mvn clean
mvn compile
mvn exec:java -Dexec.mainClass="com.zhong.concurrent.BlockingQueueModel"
```
## 实验结果
2^16 = 65,536
2^17=131,072
2^18=262,144
2^19=524,288
2^20=1,048,576
2^21=2,097,152
2^22=4,194,304
## 4月3日
生成了540000个关键词时候,我将他停止了
*******
生成测试集合:王老师要求随机取100个关键词,然后记录各自的文件名的个数
使用python脚本生成:`F:\睿云实验室\王剑锋\关键词检索\第3阶段工作-搞数据\王老师-莫纳什大学-数据集\txts\getTestSet.py`
生成的思路:从原理上说,测试使用的关键词越散乱越好,我使用如下的方法获得测试关键词:
1. 获得文件夹F:\睿云实验室\王剑锋\关键词检索\第3阶段工作-搞数据\王老师-莫纳什大学-数据集\txts下的所有文件名,并生成一个list
2. 从第一步获得的list中随机选择一个文件
3. 从第二步获得的文件中随机选择一个关键词
******
将redis中的数据存储成txt格式
```bash
mvn test -Dtest=RedisWrapperTest#getRecordsTest2
```
redis中的数据dump.rdb的路径 `F:\睿云实验室\王剑锋\关键词检索\第3阶段工作-搞数据\王老师-莫纳什大学-数据集\redis\dump.rdb`
*******
搜索时间测试: 测试的结果是3个关键词使用了37.3 min
`mvn test -Dtest=SearchProtocol_Split_memory_Test#searchProtocolTest2`
时间太长了,我又打开Cash论文的实验部分看,发现人家的XSet是用BloomFilter实现的
将MySql中的表XSets中的数据写入到BloomFilter中
```bash
mvn test -Dtest=MySqlUtilsTest#getXSetsTest2
```
做了如下的更改:
1. 将搜索XSets的算法换成从BloomFilter中读取
2. 将要搜索的关键词的个数提供给服务器
单次查询
```bash
mvn test -Dtest=SearchProtocol_Split_memory_Test#searchProtocolTest3
```
100次查询
```bash
mvn test -Dtest=SearchProtocol_Split_memory_Test#searchProtocolTest4
```
在40W个关键词下的运行记录
```bash
100次查询需要 310966 ms
```
## 4月4日
```bash
2^16 = 65,536 100次查询需要 4032 ms
2^17=131,072 100次查询需要 6179 ms
2^18=262,144 100次查询需要 40601 ms
2^19=524,288 100次查询需要 70901 ms
2^20=1,048,576
2^21=2,097,152
2^22=4,194,304
```
复制MySql的表:
```sql
create table TSets_524288 select * from TSets limit 0,524288;
```
## 4月8日
已经处理了 2,174,391个关键词,应该考虑备份的问题了
恢复
```bash
mysql --default-character-set=utf8 -uroot -proot vsse < F:\睿云实验室\王剑锋\关键词检索\第6阶段\CashScheme\vsse_TSets.sql
```
备份
```bash
mysqldump -uroot -proot -h10.170.32.244 --default-character-set utf8 vsse TSets > /home/ruiyun/vsse_TSets.sql
mysqldump -uroot -proot -h10.170.32.244 --default-character-set utf8 vsse XSets > /home/ruiyun/vsse_XSets.sql
```
## 4月9日
多个规模的数据上的测试结果
```bash
mvn test -Dtest=SearchProtocol_Split_memory_Test#searchProtocolTest5
```
记住要更新XSets的BloomFilter
1. 将MySqlUtilsTest.java中的getXSetsTest2函数中的循环条件修改为2174000
2. 执行以下语句
```bash
mvn test -Dtest=MySqlUtilsTest#getXSetsTest2
```
其实搜索时间的长短和搜索策略有很大的影响:
1. 寻找到第一条数据就返回
2. 遍历整个TSets表
如果采用第一种策略,则搜索时间会受到测试数据集的影响
如果采用第二种策略,则影响搜索时间的唯一因素是TSets表的大小
第一种策略
```bash
TSets_65536 100次查询需要 5064 ms
TSets_131072 100次查询需要 6624 ms
TSets_262144 100次查询需要 7624 ms
TSets_524288 100次查询需要 110395 ms
TSets_1048576 100次查询需要 263341 ms
TSets_2097152 100次查询需要 427625 ms
```
第二种策略
```bash
TSets_65536 100次查询需要 7550 ms
TSets_131072 100次查询需要 26412 ms
TSets_262144 100次查询需要 49179 ms
TSets_524288 100次查询需要 280442 ms
TSets_1048576 100次查询需要 420282 ms
TSets_2097152 100次查询需要 650501 ms
```
查询表的大小
```sql
use information_
没有合适的资源?快使用搜索试试~ 我知道了~
CashScheme:对称可搜索加密,Cash的实现方案
共69个文件
java:31个
properties:13个
png:4个
需积分: 50 11 下载量 154 浏览量
2021-05-14
05:46:14
上传
评论 3
收藏 2.76MB ZIP 举报
温馨提示
Cash的OXT方案 项目组织结构 文件夹tsets_bloom_filter: 用于存放保存有tsets的bloomfilter 文件夹output_keys: 用于存放密钥 文件夹testset: 测试数据集 文件夹lib: 存放jpbc相关的jar包 文件夹params: 存放双线性对参数的文件夹 Cash实验汇报.pptx: 向老师汇报的时候使用的ppt Cash方案实现架构.pptx: 向老师汇报的时候使用的ppt 参考文献 Cash-Highly-scalable searchable symmetric encryption with Support for Boolean Queries.pdf 重点参考:3.2章 TSet的结构如下: 实现架构 注意:这里mysql和redis都是采用了长连接的形式,这主要是因为要源源不断地从redis中读数据,向mysql中写数据,频繁
资源推荐
资源详情
资源评论
收起资源包目录
CashScheme-master.zip (69个子文件)
CashScheme-master
README.MD 16KB
testset
testSet3.txt 761B
testSet2.txt 1KB
testSet.txt 118KB
src
main
java
com
zhong
rm
RedisWrapper.java 1KB
MysqlUtils.java 9KB
RedisPool.java 2KB
SerializableElement.java 2KB
concurrent
Task_material.java 504B
Material.java 163B
Model.java 618B
AbstractConsumer.java 397B
Consumer.java 162B
AbstractMaterial.java 398B
BlockingQueueModel.java 4KB
Producer.java 162B
Task.java 860B
AbstractProducer.java 399B
EDBSetup_keyUtils.java 2KB
utils
CryptoPrimitives.java 36KB
SerializationDemonstrator.java 2KB
MyUtils.java 5KB
XSets.java 505B
SearchProtocol_Split_memory.java 6KB
EDBSetup_split_memory.java 3KB
t_item.java 811B
MK.java 2KB
T_Sets_split_memory.java 3KB
test
java
com
zhong
rm
RedisWrapperTest.java 2KB
MySqlTest.java 4KB
MySqlUtilsTest.java 5KB
EDBSetup_split_memoryTest.java 2KB
BloomFilterTest.java 6KB
SearchProtocol_Split_memory_Test.java 21KB
EDBSetup_keyUtilsTest.java 264B
如何复现实验.md 3KB
Cash方案实现架构.pptx 974KB
Cash实验汇报.pdf 437KB
params
mm
ctl13
toy.properties 93B
small.properties 94B
extra.properties 97B
large.properties 95B
medium.properties 95B
curves
d159.properties 979B
a.properties 359B
f.properties 324B
d224.properties 1KB
d201.properties 1KB
e.properties 1KB
a1.properties 640B
g149.properties 1KB
Cash方案实现架构.pdf 588KB
pom.xml 7KB
imgs
TSet的结构.png 9KB
TSet的结构.svg 11KB
数据库E-R图.png 8KB
测试时间_方案2_实验结果.png 10KB
XSet的结构.jpg 25KB
XSet的结构.png 3KB
主要架构.jpg 167KB
TSet的结构.jpg 62KB
lib
jpbc-pbc-2.0.0.jar 38KB
jpbc-api-2.0.0.jar 7KB
jpbc-plaf-2.0.0.jar 247KB
Cash实验汇报.pptx 332KB
output_keys
allKeys - 副本.keys 485B
allKeys.keys 485B
CashScheme_Split_Memory.iml 2KB
Cash 完整版.pdf 500KB
共 69 条
- 1
资源评论
文清的男友
- 粉丝: 31
- 资源: 4654
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功