一种安全的云存储方案设计(未完整理中)

一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了。仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵。

这几年来,云产品层出不穷,但其安全性一直饱受诟病。这篇博文以数据隐私安全为核心,从用户需求着手,讨论云存储的安全实现问题。

因为设计问题较多,我将内容拆分为两篇,最终会得到一套较为安全且高效易用的云存储加密系统的完整设计,该系统具有以下特征:1 使用机器学习的技术进行图片内容标注和文本分类,最终实现图文混合检索功能;2 所有文档数据对云服务平台透明,加密解密过程在本地完成,全程保证用户数据安全;3 用户数据可以在不泄露明文和整体加密策略的前提下分享给其他用户;4 可以对云端的图片和数据在密文进行模糊查询;5 系统通过多次迭代返回,不断调整参数,优化搜索结果准确度。

系统设计总览

考虑到云服务商本身可能并不可信,同时防止黑客攻破云服务系统后数据泄露,数据明文不能静态存储于云端。系统在上传用户文件前将本地加密数据。因此用户将云端数据下载到本地时,最初得到的是密文数据。用户间进行数据分享时,直接分享云端存储的加密数据。

为实现加密数据的查询功能,系统设计了搜索操作模块。其核心是一个密文索引库。同样,出于安全考虑明文检索的操作放在本地完成。索引会在关键字加密后上传至云端,与云端索引完成合并。而在用户搜索时,系统采用密文对密文的查询,放在云端完成。系统支持模糊查询功能,搜索操作模块根据相似度排名返回加密后的相关文件信息,用户解密后选择下载。

系统检索前将对文档进行预处理,之后会使用机器学习的技术进行图片内容标注和文本分类,支持混合检索。在一些应用场景下,用户的待检索资料可能是手机拍摄的图文混合文档,本系统将使用 FastR-CNN 算法先对图片进行分割和标注,对其中的文字部分调用 OCR 接口文字识别,然后再进行图文混合检索。但是 OCR 识别的文字往往不够准确,这也就使得系统所支持的模糊查询功能更加重要。

虽然经过不同调试,系统的模糊查询结果已经较为优异,但是在密文基础上模糊查询效果远不如明文。本模型会在云端密文模糊查询的基础上,将匹配结果列表和对应文件的检索摘要下载本地,解密后进行本地的二次明文模糊查询得到最终结果。同时系统还将通过对比二次查询的差异,对首次密文模糊查询系统的参数进行反馈,其中包括削弱部分常见词根的权值。通过多次迭代学习最终达到提高模糊匹配精度的结果。

安全云存储加密管理框架设计

一种安全云存储方案设计(上)——基于二次加密的存储策略与加密图文混合检索

基于机器学习的图片标注和文本分类

一种安全云存储方案设计(上)——基于二次加密的存储策略与加密图文混合检索

密文索引上的的模糊查询

在文件上传前本地加密用户文件的云存储策略极大提升了用户数据安全性,但也丧失了大部分搜索特性。为了实现密文基础上的搜索功能,系统建立了一个索引系统。索引系统的设计兼顾数据的安全隐私和云系统的高效便捷。用户的本地客户端在加密上传文件的同时分析本地未加密的数据明文,筛选索引关键字加密后写入索引,并上传与云端索引合并。索引采用倒排结构。用户搜索下载文件时,客户端加密用户关键字,上传至云端索引系统,进行密文对密文的搜索。同时,系统通过使用 N-gram 分词技术,实现了模糊查询功能。

使用多个分析器分级检索文档信息

为了保证用户搜索时能命中欲获取文件,同时尽量减少索引数量以节约空间,系统采取了分级分析检索。为其加入不同分析器,对文档不同属性的内容使用不同的分析策略。对于文章的标题和摘要,力求完整保存原始内容,用户搜索其中包含的任意一个单词(甚至是单词的部分拼写),都能在搜索结果中找到想要的文件。但对于文章的正文,会过滤掉停用词等无实意内容,并按需要进行大小写一致化和动词时态统一等操作。对于文件的存储地址或是加密“盐”等信息,不进行分析检索操作。

模糊查询功能设计

模糊查询是指在输入不准确关键字的情况下依然能进行智能匹配。模糊的情况包括拼写不完整,如

单词 about 仅仅输入了 abou 或 bout;还包括拼写错误,如单词 search 错误拼成 saerch、serch、searlch。

模糊查询的经典算法是使用测量最短编辑距离的方法进行模糊度判断。但这需要在明文的基础上进行匹配才有意义,明文编辑距离为 1 的字符串加密后往往完全不同。

本系统使用 N-gram 分词机制进行模糊查询。N-gram 分词把字符串切分成多个连续的 N 个字母组成的子字符串,例如 abstract 的 3-gram 集合{abs,bst,str,tra,rac,act}。引入这种机制后,创建索引时将把索引再次拆分成 N-gram 后分别加密。搜索时,关键字使用同样的方法拆分后加密上传,进行多次密文对密文的匹配。

索引创建

整个索引功能基于 Lucene 实现,使用 JAVA 语言二次开发。本地创建索引的过程:首先,对上传的文件进行处理,格式化其中的文档,以供检索程序分析。创建索引库 Directory 对

象,选择适当分析器。接着,以 Directory、Analyzer 对象为参数,创建 IndexWriter 对象。然后,为每个预上传文件创建 Document 实例,并抽象格式化的文档的各类属性作为 Field 实例添加进 Document,其中包括数据的云端存储地址信息和二次加密时用到的“盐”。将 Document 实例添加进 Directory。最后启动 IndexWriter 实例,完成本地检索工作,上传云端合并索引。

Lucene 自带的分析器并不支持索引值加密。因此自建 SafeNGramAnalyzer,在分此前引入一些特殊符号,将提高最后的模糊搜索效果。如 excited 分词前将处理为 d*excited#e 再 NGram 分词。另外词性为数字、邮件地址缩写等词不进行分词处理。

加密上传文件的完整流程

1)首先用户登陆客户端,确认上传一批文件。

2)按需分割文件为数据块,在本地进行安全加密,并向云服务器申请云端存储地址。

3)分级检索文件明文,关键字进行分词加密后作为索引值。索引对象为加密后的数据块,索引信息包含其云端存储地址和二次加密使用的“盐”。

4)上传加密后的数据和索引。

5)在云端进行索引的合并操作。

搜索解密文件的完整流程

1)首先用户在客户端输入关键字,分词加密后上传至云端,由云服务器索引进行多组密文匹配。

2)服务器依照相似度返回搜索结果,客户端解密部分索引内容,用户确认需要的文件。

3)从索引结果中获得该文件下载地址和“盐”。客户端下载密文数据。

4)用新获取的“盐”和用户的数据加密口令,从以 PBKDF2 算法为核心的密钥生成程序中导出二次加密时使用的密钥,解密下载数据,获取初次加密信息。

5)根据初次加密的信息,解密获得最终文件,并按需合并。

模糊搜索测试

系统实现了对密文索引值的模糊查询。被模糊匹配到的文件能根据相似度排序。多次测试,实验效

果理想。

测试使用拼写错误的关键字“Addriss”搜索约 200 份上传文件,获得 4 个相似匹配结果,其中三个

为包含正确拼写“address”的文档,若使用传统编辑距离算法获得的的编辑距离是 1(越小越相似),

本系统相似评分约为 0.226(越大越相似)。另外获得一个包含关键字“iAd”的结果,编辑距离为 6,

本系统相似评分 0.003,可按需过滤掉。

各种模糊匹配算法比较

算法名称 传统编辑距离算法 加入通配符的改进编辑距离算法 本 系 统 采 用 的N-gram 改进算法
密文匹配支持 不支持 支持 支持
匹配复杂度 最低 一般 一般
单位关键字所需索引数量 (NULL) 依设定的相似度阈值增加,超过阈值结果无法获取 依据期望的搜索结果和排序的准确度而增加
单个索引利用率 (NULL) 较低 较高
模糊匹配体验 最好 较差 一般

排序参数的迭代学习与伪相关反馈

通过合理的参数设置,特别是对评分排序参数的权值的设置,系统的模糊查询体验较为良好,但是在密文基础上模糊查询效果远不如基于明文的模糊搜索。由上表也可以看出,如果可以拿到索引明文,直接计算编辑适量距离的方法以及它的一系列改进衍生算法能够又好又快地实现模糊匹配。由此,本模型会在云端密文模糊查询的基础上,将匹配结果列表和对应文件的检索摘要下载本地,解密后进行本地的二次明文模糊查询得到最终结果。由于二次明文检索的仅仅是需要重新检索的摘要信息(Document 对象的部分 Field 域,非文档本身),下载的数据量是可控的,且算法效率较高。二次建索引以及搜索的时间也是几乎可以忽略的。

同时系统还将通过对比二次查询的差异,对首次密文模糊查询系统的参数进行反馈。不同于用户对结果进行标注的反馈方式,本系统的反馈方式是自动完成的,直接比较两次搜索结果的差异。在第一次模糊查询中得分较高,而明文查询时排名靠后的文档,所包含的第一次索引关键字将被降权。通过多次迭代学习最终达到提高模糊匹配精度的结果。


转载请注明 作者 Arthur_Qin(禾众) 及文章地址 http://www.cnblogs.com/arthurqin/p/6307153.html

一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询的更多相关文章

  1. Apache Solr采用Java开发、基于Lucene的全文搜索服务器

    http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...

  2. 混合云存储组合拳:基于云存储网关与混合云备份的OSS数据备份方案

    前言 阿里云对象存储(OSS)用户众多.很多用户因为业务或者合规性需求,需要对OSS内的数据做备份,无论是线上备份,还是线下备份.用户可以选择使用OSS的开放API,按照业务需求,做数据的备份,也可以 ...

  3. 基于 Lucene 的桌面文件搜索

    开源2010年,自己在学习 Lucene 时开发的一款桌面文件搜索工具,这么多年过去了,代码一直静静存放在自己的硬盘上,与其让其沉睡,不如分享出来. 这款工具带有明显的模仿 Everything 的痕 ...

  4. 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

    前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了S ...

  5. QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

    FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...

  6. 基于python3在nose测试框架的基础上添加测试数据驱动工具

    [本文出自天外归云的博客园] Python3下一些nose插件经过2to3的转换后失效了 Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关 ...

  7. WordPress腾讯云存储搭建教程,完美解决

    写在前面的话: 为什么会有今天的话题:WordPress+腾讯云存储? 因为博主不想使用七牛云,也不想使用又拍云,所以才有了今天的话题. 在使用腾讯云存储的过程中是很不顺利的,万幸的是现在终于完美融合 ...

  8. 微信小程序云开发-云存储的应用-识别身份证(正面和反面)

    一.准备工作 1.创建云函数identify 2.云函数identify中index.js代码 1 // 云函数入口文件 2 const cloud = require('wx-server-sdk' ...

  9. 微信小程序云开发-云存储-上传文件(图片/视频)到云存储 精简代码

    说明 图片/视频这类文件是从客户端会话选择文件. 一.wxml文件添加if切换显示 <!--上传文件到云存储--> <button bindtap="chooseImg&q ...

随机推荐

  1. TELNET终端类型选项

    转:http://www.cnpaf.net/Class/Telnet/200408/5.html 1. 命令名称及编号TERMINAL-TYPE242.命令含义IACWILLTERMINAL-TYP ...

  2. 【spring boot】4.spring boot配置多环境资源文件

    一个spring boot 项目在开发环境.测试环境.生产环境下,好多的配置都是不尽相同的.所以配置多分的资源文件,仅仅在部署在不同环境的时候,选择激活不同的资源文件就可以实现多环境的部署. 项目结构 ...

  3. OpenGL ES2.0编程三步曲 -转

    原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...

  4. ylbtech-LanguageSamples-ConditionalMethods(条件方法)

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-ConditionalMethods(条件方法) 1.A,示例(Sample) 返回顶部 ...

  5. OpenGL实现多层绘制(Layered Rendering) [转]

    http://blog.csdn.net/u010462297/article/details/50589991 引言 在某些情况下会需要用到多层绘制.FBO下有多个颜色挂接点(Color Attac ...

  6. javascript 正则表达式判断只能是中文、英文或者中文加英文

    var reglx =/^[\u4e00-\u9fa5a-zA-Z]+$/ 这个是至少有一个中文或者英文 var reglx =/^[\u4e00-\u9fa5a-zA-Z]*$/ 这个是0个以上的中 ...

  7. 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现

    非常早曾经就把圆点博士的程序从STM32F103移植到STM32F4_Discovery (STM32F407), battery.陀螺仪和PWM电机控制的程序都已经測试完成,执行有一段时间,正常.以 ...

  8. 1364:Field 'sex' doesn't have a default value [ SQL语句 ]

    1364:Field 'sex' doesn't have a default value [ SQL语句 ]   错误解决方法: 关闭MySQL的strict mode的具体做法: 找到MySQL目 ...

  9. 虚拟机实现https网络设置

    现在很多网站使用的都是https协议,想在自己的电脑上实现下, 由于自己的电脑是win10,我总是觉得在windows上布置环境不如在linux上稳定,所以在电脑上安装了虚拟机,cento系统 . 上 ...

  10. left与margin-left区别

    left,right,top,bottom仅对于position:relative|absolute|fixed的元素有意义. <!DOCTYPE html PUBLIC "-//W3 ...