首页 理论教育云存储缓存系统设计-安全云技术剖析

云存储缓存系统设计-安全云技术剖析

【摘要】:同时为了提高访问第三方云存储空间的效率,本系统将常用的文件在本地预留一份作为缓存。进行文件下载时,会先由缓存系统检查文件是否存在本地的服务器,若不存在,将会从DropBox上下载文件至本地服务器。所有的缓存文件都会记录于数据库内的缓存数据表中,缓存数据表内设置两个字段,Fileid与Counter。

本系统[22]着眼于对用户上传的文件进行加密,即存储在云端服务器上的文件都是加密文件,没有用户提供的解密密钥将无法解密。同时为了提高访问第三方云存储空间的效率,本系统将常用的文件在本地预留一份作为缓存。

1.系统概述

本系统的核心是将文件做加解密处理。当客户端上传文件时,运用对称密钥AES算法对文件进行加密,将加密后的文件存放在云存储服务器上,这样就保证客户文件的相对安全性。当客户端从服务器下载文件时,将服务器上加密过的文件传给它,客户端通过对称密钥技术将密文还原,展现给用户解密后的文件,即原始文件。

本系统所要完成的功能,是使用者通过浏览器对云端的个人存储空间进行上传、下载和删除等操作。

系统主要由两大部分组成,一部分在本地的局域网络内;另一部分是通过互联网连接云端存储空间。在局域网络内,用户可通过个人计算机、平板电脑等装置通过浏览器进行操作,操作完成后,本地服务器会依照情况决定是否修改云端存储空间的内容。比如上传时,则将上传至本地服务器的文件也上传至云端存储空间。

2.上传及加密

客户端在上传文件时的操作流程大致如下:

首先通过HTML5的API去读取拟上传文件的内容,然后对拟上传文件的内容执行加密算法将文件加密,在加密完成以后再把文件保存在传输区域。传输区域是通过XMLHttpRequest和服务器进行沟通并进行传输文件的地方。在上传文件时,系统首先将文件分割成若干个小块,然后在进行文件内容读取、加密和传输时,操作的对象都是由文件分割出来的小块。每个小块的大小可以设定,这样做可以避免在大文件传送时,Web服务器端因为没有开启大文件设置,而无法进行传输。即无论读取、加密或传输都是一次对一个小块进行处理,等到所有的块都处理完毕,才会结束相应操作的执行。

3.下载及解密

客户端在下传文件时的操作流程大致如下:

在下载文件时,为了方便用户看到目前的进度,先通过XMLHttpRequest和服务器进行沟通并获取加密过的文件内容,然后再通过HTML5的API去读取文件内容,接着将文件进行解密,每一个块解密完成后会通过HTML5的API将内容附加到一个临时文件。当所有块解密完成以后,会模拟使用者单击下载的动作,跳出一个窗口让用户选择要将文件存放的位置,之后便会将临时文件移动至用户要求的位置。

总的来讲,下载过程包含以下步骤:从云储存服务器(如DropBox)下载文件、用文件密钥解密和读取文件内容、解密文件内容、附加至临时文件、完成下载文件。

进行文件下载时,会先由缓存系统检查文件是否存在本地的服务器,若不存在,将会从DropBox上下载文件至本地服务器。在进行文件解密前,客户端会先从服务器上获取AES密钥和初始化向量才能够解密文件,从服务器取得这一组密钥以后,因为密钥使用RSA加密,所以在客户端上需要先将密钥RSA解密。(www.chuimin.cn)

读取部分与上传文档的读取部分类似,将内容读取之后再送去解密。解密文件时,则是在客户端上利用AES解密算法来解密,因此除了AES密钥以外,还需要一个初始化向量,所以下载流程会先从服务器读取,读完以后再通过使用者的RSA私密钥将二者解密。

关于附加文件的流程:由于需要把所有的文件块都附加到一个临时文件,因此需要等所有区块都解密完后,才会将此临时文件发送给使用者。

关于完成下载文件的处理:首先获取块的URL,然后对网页上事先设计好的超链接组件进行修改。即先修改超链接下载的文档名,再将超链接的URL修改为块的URL,修改完成以后去模拟单击超链接的动作,如此就会在用户的窗口上出现与平常下载文件一样的画面。

4.分享文档

用户可以选择将文档分享给其他使用者,而在分享文档时,遇到的第一个问题是所有上传至服务器的文档都是经过加密的,被分享者即使可以把分享者的文档下载,也无法使用。但是,每个用户在上传文档时,系统会自动将AES密钥一起上传至服务器。第二个问题是为了确保系统没有解密用户文档的权限,必须在上传AES密钥前,先将AES密钥用RSA加密,如此一来,被分享者就算获取文档的AES密钥也无法解开,更无法去解密文档。

因此,系统设置一个特定机制来处理上述两个问题。使用者在分享文档时,会先从服务器索取欲分享文档的AES密钥,以及被分享者的RSA公共密钥,取得这两者之后,系统会用分享者的RSA私有密钥将文档的AES密钥解开,解开之后再利用被分享者的RSA公共密钥将把解密后的AES密钥加密,最后再将加密过后的AES密钥上传服务器。

5.缓存系统

由于用户与本地服务器通常位于同一个局域网,所以传输速度不会受到外部联机的影响。若只将文档存放在远程的DropBox,则整个系统的速度会受到外部联机的影响。为了提升存取的性能,系统除了在DropBox上存有使用者的文档以外,也在本地服务器上设置一个缓存系统,该缓存系统会在本地服务器内存放使用者的常用部分文档,传输速度不会受到对外联机至DropBox的速度所限制,可以大幅提升访问速度。

缓存系统默认让每个用户可以在本地服务器上保留若干个文档(如10个),当使用者超过10个文档时,缓存系统会通过最近最少使用页面置换算法(LRU)将最不常被使用的文档移出服务器,并且用新的文档进行替代。所有的缓存文件都会记录于数据库内的缓存数据表中,缓存数据表内设置两个字段,Fileid与Counter。Fileid是代表哪个文档,而Counter为时间戳,代表上次使用缓存的时间。缓存的替换通常发生在使用者上传或下载文档并且缓存空间满的时候。第一种情况,上传文档且缓存空间满时,系统会先在缓存数据表中寻找该使用者现有Counter的最小值,即取出时间戳为最久以前的,将其以新上传的文档取代,并将新上传文档的Counter设为当前时间的时间戳。第二种情况是下载时,由于系统内的所有下载要求都会先经过缓存系统,这时候缓存系统会先寻找要求的文档是否存在于服务器内,若存在则为缓存命中,会先更新缓存数据表内该文档的Counter为当前的时间戳,若不存在则为缓存失效,同样会找出缓存数据表该使用者现有其Counter的最小值,接着联机至DropBox将要求的文档下载下来并把该文档替换掉,同时将Counter设为当前的时间戳。

6.任务调度

在客户端上还有一个任务调度模块,用户所有上传及下载的任务都会通过任务调度模块,任务调度采用队列保证上传和下载的执行顺序,在用户要进行上传或下载时,会先创建一个作业(Job),然后送进作业队列(JobQueue)里的等待队列(WaitingQueue)去等待被执行,运行队列(RunningQueue)内的任务数量,即执行中的Job数量小于传输数量限制时,则会从WaitingQueue取出第一个Job来执行,并且将该Job从WaitingQueue移出放入至RunningQueue里面。当Job执行完毕时,则会将该Job从RunningQueue里移除,如此才能让下一个Job开始执行。

关于更多的实现细节,读者可以阅读参考文献[22]。