姚云瀟,何成萬
武漢工程大學計算機科學與工程學院,湖北 武漢 430205
在互聯網發達的今天,個人信息、商業機密等重要數據的泄露已經屢見不鮮[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服務的文件分片保存方法。該方法把一個文件分割成多個文件片,然后把這些文件片分別上傳到公共云平臺的不同位置,并能夠根據用戶的請求從云平臺下載文件片進行文件的還原。同時通過角色的權限控制,保證了有相應權限的客戶才能共享云平臺上的文件。由于實現了文件的分片保存,即使一個文件片被盜,原有文件也不能被還原,進一步提高了文件存儲的安全性。
基于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有寫權限。管理人員根據實際需要,把用戶按使用角色分組,按照角色的權限大小分別指定。

表1 角色權限設置示例Tab.1 Examples of role privilege setting
運行在服務器中的文件存儲REST服務分為兩類:對外公開的REST服務和公共服務。這些REST服務的主要功能如表2所示。
文件的分片信息、文件片在云平臺的保存位置、以及文件和文件片的狀態等元信息被保存在數據庫中。數據庫的表結構如圖3所示。其中,表M_OBJECT中保存文件信息,表M_SHARE中保存文件片信息,表M_BUCKET中保存云平臺的桶信息,表M_PATH中保存目錄信息,表M_ROLE中保存角色信息,表M_PERMISSION中保存權限信息。
基于REST服務的文件分片保存方法在安全性、接口、元信息的共享等方面具有如表3所示的一些特點。從安全性的角度考慮,該方法比傳統的文件加密方法具有更高的安全性。

表2 系統包含的服務Tab.2 Services of system

圖3 云數據存儲的表結構圖Fig.3 Table structure of cloud data storage

表3 基于REST服務的文件分片保存的特點Tab.3 Characteristics of storing file pieces based on REST services
本節以文件分片上傳保存服務和下載還原服務為例,描述REST服務的實現流程。云平臺使用的是亞馬遜的S3。
服務PUTObject的功能是把文件分片后上傳到云平臺存儲,其執行過程如圖4所示的順序圖。
1)客戶端APP使用PUT方法調用PUTObject服務。傳遞的參數包括:Bucket_ID(文件保存的桶編號)、文件大小、文件類型、角色ID以及文件對象本身。
2)服務PUTObject使用PUT方法調用文件分散控制器。傳遞的參數包括:Bucket_ID(文件保存的桶編號)、文件大小、文件類型、角色ID以及文件對象本身。
3)文件分散控制器使用POST方法調用元數據管理服務,請求進行文件的分割處理。傳遞的參數包括:Bucket_ID(文件保存的桶編號)、文件大小、文件類型、角色ID以及文件對象的MD5值。另外,通過URL參數“assignment”指定請求類型。
4)元數據管理服務確認角色具有相應權限后,進行文件的分割。同時,隨機生成指定數量(分割的文件片數)的目錄名,和文件片進行關聯,最后把文件片信息返回給文件分散控制器。返回的文件片信息是一個數組,其大小是分割的文件片數。

圖4 服務PUTObject的順序圖Fig.4 Sequence diagram of PUTObject service
5)文件分散控制器使用PUT方法調用云平臺的文件存儲服務,把多個文件片同時上傳到云平臺保存。
6)如果所有文件片上傳成功,文件分散控制器使用POST方法調用元數據管理服務,把文件對象和文件分片的狀態信息更新到數據庫。
7)以上處理過程中如果發生了錯誤,則返回錯誤消息給客戶端。
服務GETObject的功能是從云平臺下載文件片并進行文件的還原,其執行過程如圖5所示的順序圖。

圖5 服務GETObject的順序圖Fig.5 Sequence diagram of GETObject service
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)以上處理過程中如果發生了錯誤,則返回錯誤消息給客戶端。
以上介紹了一種基于REST服務和云平臺的文件分片安全存儲方法,設計并實現了相關REST API,并以文件分片保存功能和文件下載還原功能為例,闡述了REST服務的實現方法及REST服務間的調用關系。與現有的文件加密方法相比,該方法不僅進一步提高了文件的安全性,而且客戶端APP很容易使用REST API實現文件的共享。