《武汉工程大学学报》  2018年05期 575-579   出版日期:2018-12-27   ISSN:1674-2869   CN:42-1779/TQ
基于REST服务的文件分片保存方法及其实现


在互联网发达的今天,个人信息、商业机密等重要数据的泄露已经屡见不鲜[1-2]。发生数据泄露的主要原因是计算机系统缺乏有效的安全防护,很容易导致黑客、木马等的入侵[3-4]。随着云计算技术[5-6]的发展,云平台[7-8]变得越来越安全可靠。云平台是云服务的重要载体,它不仅能够保存用户的大量数据,而且提供用户应用程序的运行环境。用户把数据从自己的电脑转移到云平台存储是必然趋势[9]。REST服务是一种以资源为中心的架构[10],客户端程序使用HTTP协议的GET,PUT,POST,DELETE等4种基本方法访问REST服务[11]。主要的云平台都提供了自己的REST API[12-13],用户可以基于这些REST API开发自己的应用程序,并使用云平台提供的一些功能。传统的文件加密方法可以在一定程度上防止数据泄露,但理论上一个完整的加密文件是可以被破解的[14-15]。为了实现文件的安全存储及共享,提出基于REST服务的文件分片保存方法。该方法把一个文件分割成多个文件片,然后把这些文件片分别上传到公共云平台的不同位置,并能够根据用户的请求从云平台下载文件片进行文件的还原。同时通过角色的权限控制,保证了有相应权限的客户才能共享云平台上的文件。由于实现了文件的分片保存,即使一个文件片被盗,原有文件也不能被还原,进一步提高了文件存储的安全性。1 基于REST服务的文件分片保存方法基于REST服务和云平台的文件分片保存方法的结构如图1所示。图1 基于REST服务和云平台的文件分片保存的结构图Fig. 1 Structure diagram of file storing in pieces based on REST service and cloud platform该系统是一个多层结构,分为客户层、服务器层、云平台层。客户层主要指客户的应用程序。服务器层是自主实现的用于文件分片存储和角色控制的REST服务,包括对外公开的REST API及一些公共服务。云平台层指云计算厂商提供的云存储服务。客户程序调用文件存储REST API进行角色权限的确认、文件的分片及还原、权限设置以及元数据的管理等。文件片被保存到云平台的桶(Bucket)中。在进行文件分割时,需要指定分片数量(通过配置文件设置)。把文件分割成指定数量的文件片,并随机分配文件片在云平台中的保存路径。所有文件片被正确上传后,文件片的名称、大小,以及保存路径、传送状态等元信息被保存到数据库中。文件分片保存的流程如图2所示。图2 文件分片保存的流程图Fig. 2 Flowchart of storing file pieces对于云平台上的某个目录,针对不同角色设置不同权限。如表1中的权限设置示例,角色role A对目录/customer1有读写权限,角色role B对目录/customer1有读权限,角色role B对目录/customer2有写权限。管理人员根据实际需要,把用户按使用角色分组,按照角色的权限大小分别指定。运行在服务器中的文件存储REST服务分为两类:对外公开的REST服务和公共服务。这些REST服务的主要功能如表2所示。文件的分片信息、文件片在云平台的保存位置、以及文件和文件片的状态等元信息被保存在数据库中。数据库的表结构如图3所示。其中,表M_OBJECT中保存文件信息,表M_SHARE中保存文件片信息,表M_BUCKET中保存云平台的桶信息,表M_PATH中保存目录信息,表M_ROLE中保存角色信息,表M_PERMISSION中保存权限信息。基于REST服务的文件分片保存方法在安全性、接口、元信息的共享等方面具有如表3所示的一些特点。从安全性的角度考虑,该方法比传统的文件加密方法具有更高的安全性。2 文件分片存储REST服务的实现本节以文件分片上传保存服务和下载还原服务为例,描述REST服务的实现流程。云平台使用的是亚马逊的S3。2.1 文件分片保存服务服务PUTObject的功能是把文件分片后上传到云平台存储,其执行过程如图4所示的顺序图。1)客户端APP使用PUT方法调用PUTObject服务。传递的参数包括:Bucket_ID(文件保存的桶编号)、文件大小、文件类型、角色ID以及文件对象本身。2)服务PUTObject使用PUT方法调用文件分散控制器。传递的参数包括:Bucket_ID(文件保存的桶编号)、文件大小、文件类型、角色ID以及文件对象本身。3)文件分散控制器使用POST方法调用元数据管理服务,请求进行文件的分割处理。传递的参数包括:Bucket_ID(文件保存的桶编号)、文件大小、文件类型、角色ID以及文件对象的MD5值。另外,通过URL参数“assignment”指定请求类型。4)元数据管理服务确认角色具有相应权限后,进行文件的分割。同时,随机生成指定数量(分割的文件片数)的目录名,和文件片进行关联,最后把文件片信息返回给文件分散控制器。返回的文件片信息是一个数组,其大小是分割的文件片数。5)文件分散控制器使用PUT方法调用云平台的文件存储服务,把多个文件片同时上传到云平台保存。6)如果所有文件片上传成功,文件分散控制器使用POST方法调用元数据管理服务,把文件对象和文件分片的状态信息更新到数据库。7)以上处理过程中如果发生了错误,则返回错误消息给客户端。2.2 文件下载还原服务服务GETObject的功能是从云平台下载文件片并进行文件的还原,其执行过程如图5所示的顺序图。1)客户端APP使用GET方法调用GETObject服务。传递的参数包括:文件名、Bucket_ID(文件保存的桶编号)、角色ID。2)服务GETObject使用GET方法调用文件分散控制器。传递的参数包括:文件名、Bucket_ID(文件保存的桶编号)、角色ID。3)文件分散控制器使用GET方法调用元数据管理服务,获取文件片的相关元信息。传递的参数包括:文件名、Bucket_ID(文件保存的桶编号)、角色ID。另外,通过URL参数“location”指定请求类型。4)元数据管理服务确认角色具有相应权限后,把文件片信息返回给文件分散控制器。返回的文件片信息是一个数组,其大小是文件片数。5)文件分散控制器使用GET方法调用云平台的文件下载服务。6)如果所有文件片下载成功,文件分散控制器进行文件片的合并操作,并把合并后的文件返回给客户端。7)以上处理过程中如果发生了错误,则返回错误消息给客户端。3 结 语以上介绍了一种基于REST服务和云平台的文件分片安全存储方法,设计并实现了相关REST API,并以文件分片保存功能和文件下载还原功能为例,阐述了REST服务的实现方法及REST服务间的调用关系。与现有的文件加密方法相比,该方法不仅进一步提高了文件的安全性,而且客户端APP很容易使用REST API实现文件的共享