資料儲存方法、裝置及設備
本說明書實施例涉及資訊技術領域,尤其涉及一種資料儲存方法、裝置及設備。
當前的用戶資料一般而言,儲存於雲端硬碟、PC或者手機端等等,用戶可以方便地存取或者讀取資料。
用戶儲存的資料中,很多經常是個人的隱私資料,例如身份資訊、社交資訊、業務資訊等等。在儲存資料時,一方面存在駭客的外部威脅,另一方面也有可能企業內部錯誤操作導致收集的用戶隱私資料外泄。每一次資料外泄都有可能關係到用戶的隱私,影響到用戶的核心利益。
基於此,需要一種更為安全的資料儲存方法。
針對現有資料儲存發生資料洩露對用戶隱私的侵犯問題,為實現更安全的資料儲存,保護用戶隱私,本說明書實施例提供更為安全的資料儲存方案。第一方面,本說明書實施例提供一種資料儲存方法,包括:
確定待儲存資料;
獲取隨機產生的子密鑰,採用該子密鑰對稱加密該待儲存資料,產生子鑰加密資料;
獲取基於用戶資訊產生的主密鑰,採用該主密鑰對稱加密該子密鑰,產生子鑰密文,其中,該用戶資訊包括用戶密碼或者用戶生物特徵資訊;
合併該子鑰加密資料和子鑰密文,產生雙層加密文件,並儲存。
第二方面,本說明書實施例提供一種基於上述雙層加密文件的解密方法,包括:
確定該雙層加密文件中所包含的子鑰加密資料和子鑰密文;
獲取用戶授權的主密鑰,使用該主密鑰解密該子鑰密文,產生子密鑰,其中,該主密鑰基於用戶資訊產生;
使用該產生的子密鑰解密該子鑰加密資料,產生可用的解密資料,以便用戶使用。
與第一方面的方法相對應的,本說明書實施例還提供一種資料儲存裝置,包括:
確定模組,確定待儲存資料;
子密鑰加密模組,獲取隨機產生的子密鑰,採用該子密鑰對稱加密該待儲存資料,產生子鑰加密資料;
主密鑰加密模組,獲取基於用戶資訊產生的主密鑰,採用該主密鑰對稱加密該子密鑰,產生子鑰密文,其中,該用戶資訊包括用戶密碼或者用戶生物特徵資訊;
合併模組,合併該子鑰加密資料和子鑰密文,產生雙層加密文件;
儲存模組,儲存該雙層加密文件。
與第二方面方法相對應的,本說明書實施例還提供一種基於前述雙層加密文件的解密裝置,包括:
確定模組,確定該雙層加密文件中所包含的子鑰加密資料和子鑰密文;
主密鑰解密模組,獲取用戶授權的主密鑰,使用該主密鑰解密該子鑰密文,產生子密鑰,其中,該主密鑰基於用戶資訊產生;
子密鑰解密模組,使用該產生的子密鑰解密該子鑰加密資料,產生可用的解密資料,以便用戶使用。
在資料儲存時,通過子密鑰多資料進行加密,同時採用主密鑰對子密鑰進行加密,從而合併形成雙層加密文件,每個雙層加密文件中包含有用於解密資料的子鑰密文,而用於解密子鑰密文的主密鑰則保存在用戶手中,形成獨立雙密鑰的加密方式,降低了資訊洩露的可能,有利於保護用戶隱私。
應當理解的是,以上的一般描述和後文的細節描述僅是示例性和解釋性的,並不能限制本說明書實施例。
此外,本說明書實施例中的任一實施例並不需要達到上述的全部效果。
為了使本領域技術人員更好地理解本說明書實施例中的技術方案,下面將結合本說明書實施例中的圖式,對本說明書實施例中的技術方案進行詳細地描述,顯然,所描述的實施例僅僅是本說明書的一部分實施例,而不是全部的實施例。基於本說明書中的實施例,本領域普通技術人員所獲得的所有其他實施例,都應當屬於保護的範圍。
以下結合圖式,詳細說明本說明書各實施例提供的技術方案。圖1是本說明書實施例提供的一種資料儲存方法的流程示意圖,如圖1所示,該流程具體包括如下步驟:
S101,確定待儲存資料。
在本說明書實施例中,待儲存資料可以是由用戶即時提供的;也可以是用戶已經上傳並儲存於指定的路徑下的文件,此處指定的路徑可以包括用戶設備本地的路徑,也可以是與用戶客戶端對接的服務端上的路徑。該資料可以包括音頻、視頻、文本、圖像(如圖片、動態圖片GIF等)等等各種形式的資料。
S103,獲取隨機產生的子密鑰,採用該子密鑰對稱加密該待儲存資料,產生子鑰加密資料。
子密鑰是預設加密演算法中的一種參數,子密鑰的形式為一個字串,在使用對稱加密演算法中,其長度一般為128位或者256位。
該加密演算法用於將待儲存資料由明文轉換為密文,產生子鑰加密資料,在本說明書實施例中,該加密演算法為對稱加密演算法。換言之,還可以基於該子密鑰,將產生的子鑰加密資料,轉換回待儲存資料的明文形式。
S105,獲取基於用戶資訊產生的主密鑰,採用該主密鑰對稱加密該子密鑰,產生子鑰密文,其中,該用戶資訊包括用戶密碼或者用戶生物特徵資訊。
在前述步驟中,以後解密時還需要用子密鑰。而此時的子密鑰也是處於明文狀態,因此,還可以對子密鑰進行對稱加密,產生子鑰密文。
具體而言,可以先採用預設的密鑰衍生函數(Key derivation function,KDF)基於用戶資訊產生主密鑰。然後再使用主密鑰加密該子密鑰得到子鑰密文。例如,可以基於DEs-based UNIX Crypt-function、FreeBSD MD5 crpty、PKCS#5 PBKDF2、GNU SHA-256/512 crypt、Windows NT LAN Manager(NTLM)hash或者Blowfish-based bcrypt等演算法加密產生主密鑰。對於主密鑰和子密鑰而言,二者均為密鑰衍生函數產生,所採用的衍生函數可以相同,也可以不同。
對於產生主密鑰的密鑰衍生函數而言,在輸入的參數相同時,則可以得到相同的主密鑰。因此,在需要再次使用主密鑰時,可以由用戶直接提供該主密鑰,或者,用戶再次提供同一用戶資訊,預設的密鑰衍生函數根據該同一用戶資訊產生同一主密鑰。
主密鑰應具有如下性質:其它用戶得到主密鑰的可能性很小。因此,在實際應用中,可以通過如下方式來保證其他用戶難以得到該主密鑰:產生的主密鑰由用戶執有,並儲存在只有該用戶可以到達的路徑或者文件中,例如,產生的主密鑰與其它資料是實體隔絕的;或者,產生的主密鑰不進行保存,只需用戶可以再次複現該主密鑰即可。此時,一種可實施的方式為,基於具有唯一性的用戶資訊產生主密鑰,其它用戶獲得該用戶資訊的可能性很小。例如,用戶的帳號密碼,或者用戶的生物特徵資訊等等。所述的生物特徵資訊可以包括指紋、聲紋、虹膜等等具有唯一性的生物特徵。在這種方式下,當需要再次使用該主密鑰時,則可以將上述具有唯一性的生物特徵作為參數,基於同樣的KDF函數產生同一主密鑰。
進一步地,在使用具有唯一性的用戶資訊產生主密鑰時,還可以加入一些其它變量作為密鑰衍生函數的參數。例如,加入用於提醒的助記詞作為變量,助記詞的形式可以是一個字元,或者一個單詞等等,在以後需要再次產生主密鑰時,獲取該助記詞以及用戶資訊產生主密鑰。或者,在第一次產生主密鑰時,加入隨機數作為變量,並且保存該隨機數至本地設備。在以後需要再次產生主密鑰時,獲取該隨機數和用戶資訊產生主密鑰。例如,主密鑰=KDF(用戶密碼+隨機數+助記詞)。
S107,合併該子鑰加密資料和子鑰密文,產生雙層加密文件,並儲存。
可以基於預設的合併方式,對子鑰加密資料和子鑰密文進行諸如拼接、插入等等操作,產生雙層加密文件,並儲存至用戶所指定的位置即可。在雙層加密文件中,二者的順序以及各式也無需限定,只需在獲得該加密文件中可以分別得到子鑰加密資料和子鑰密文即可。如圖2所示,圖2為本說明書實施例所涉及的一種整體架構示意圖。在該示意圖中,用戶通過自己的個人主密鑰將身份證資訊以雙層加密文件的形式進行了儲存。其中,圖中的H表示雙層加密文件的文件頭,該文件頭即為主密鑰對子密鑰加密後得到的子鑰密文。以及,在文件頭中,除子鑰密文以外,還可以包含其它的資訊,例如,還可以包含子密鑰對待儲存資料進行加密時所使用的加密演算法的名稱,用於提示。圖中,不同的加密文件由於採用不同的子密鑰進行了加密,因此,各文件頭也並不相同。在該示意圖中,用戶將資訊儲存至指定雲端硬碟,在實際應用中,儲存至用戶本地設備也是可行的。
本說明書實施例所提供的方案,在資料儲存時,通過子密鑰多資料進行加密,同時採用主密鑰對子密鑰進行加密,從而合併形成雙層加密文件,每個雙層加密文件中包含有用於解密資料的子鑰密文,而用於子鑰密文解密的主密鑰則保存在用戶手中,形成獨立雙密鑰的加密方式,降低了資訊洩露的可能,有利於保護用戶隱私。
在一種具體的實施方式下,當該待儲存資料為多個時,獲取隨機產生的子密鑰,包括:對每個待儲存資料,分別隨機獲取不同的多個子密鑰。例如,當用戶需要分別儲存自己的身份證、駕照、社交文件時。則每得到一個文件,就可以基於獲取文件的系統時間,產生一個隨機子密鑰。對不同的文件使用不同的子密鑰,可以進一步加強資料的安全性。
在一種具體的實施方式下,當該待儲存資料為多個時,還可以獲取同一基於用戶資訊產生的主密鑰;用該同一主密鑰分別對稱加密多個子密鑰,產生基於同一主鑰加密產生的多個子鑰密文,其中,子鑰密文和待儲存資料一一對應。使用同一主密鑰加密多個子密鑰的有利之處在於,便於用戶管理。例如,當用戶的雙層加密文件儲存在雲端時,則用戶可以通過一個主密鑰實現登錄、新增加密文件、刪除加密文件等等操作,來管理雲端的多個文件。並且,用戶還可以通過對第三方授權一個主密鑰來實現對多個加密文件的使用。
在一種具體的實施方式下,合併文件時,可以將子鑰加密資料和子鑰密文直接進行拼接,或者將一個文件插入進另一個文件。例如,將子鑰密文置於子鑰加密資料的頭部、尾部、或者指定偏移量的中間位置等等。在實際應用中,可以預先定義雙層加密文件的格式為“文件頭+文件體”,其中預設不超過一定長度的文件頭,將子鑰密文放置文件頭中,文件體則放置子鑰加密資料。從而,在需要解密的時候,可以對文件頭直接進行子鑰解密得到子鑰密文,方便解密和後續使用。
在基於上述方式產生雙層加密文件之後,在本說明書方案的第二方面,還提供基於上述雙層加密文件的解密方法,如圖3所示,圖3為本說明書實施例所提供的一種雙層加密文件的解密方法的流程示意圖,包括:
S301,確定該雙層加密文件中所包含的子鑰加密資料和子鑰密文;例如,直接從雙層加密文件的文件頭和文件體中分別讀取出子鑰加密資料和子鑰密文;
S303,獲取用戶授權的主密鑰,使用該主密鑰解密該子鑰密文,產生子密鑰,其中,該主密鑰基於用戶資訊產生,該用戶資訊與產生主密鑰的用戶資訊相同;
S305,使用該產生的子密鑰解密該子鑰加密資料,產生可用的解密資料,以便用戶使用。
由於在加密過程中採用的是對稱加密,因此在本說明書實施例中可以直接使用主密鑰和子密鑰進行對稱解密。在這種解密方法中,因為已經默認主密鑰是其它用戶基本不可能得到的,因此資料儲存方(例如,儲存資料的雲端)在接收到用主密鑰時,就可以執行解密。主密鑰的授權對象可以是用戶自己,例如,在用戶登錄帳號成功時即默認對自己授權成功。主密鑰的授權對象也可以是第三方,例如,用戶在使用某些第三方應用時,允許該第三方應用使用自己的主密鑰進行某些特定的權限操作,包括查詢、驗證等等。
本說明書實施例所提供的方案,可以在如下應用場景中實施:在用戶本地設備(可以包括智慧型手機、個人電腦、智慧型平板等等)中提供一種用於資料儲存方法的程式應用APP,用戶在該APP上建立帳號,該APP通過用戶的登錄密碼或者用戶的生物特徵(指紋、聲紋等)創建主密鑰。從而,該用戶使用登錄密碼或者生物特徵時,主密鑰被唯一確定,進而,用戶可以在APP所提供的界面中,通過在界面中拖拽、選定等操作,提供自己想要加密的文件。APP此時隨機產生一個用於加密的子密鑰,加密該文件。同時主密鑰加密該子密鑰得到子鑰密文,並且將子鑰密文置於頭部,產生加密雙層文件。APP中可以接收用戶的指令,確定儲存位置;或者,提供相應的位置設定選項,將加密雙層文件儲存至用戶事先選定的儲存位置。儲存位置可以是在用戶本地設備中,也可以在與該APP對接的服務端中。通過上述方式,用戶可以對自己的一些私密資訊(例如身份資訊、社交資訊)得以安全的保存。即使服務端發生了資料外泄,用戶的隱私也不會洩露出去。
在上述儲存方式下,若第三方需要查詢或者驗證用戶的一些私密資訊時,用戶可以通過主密鑰授權的方式,在需要驗證時向第三方提供主密鑰,這樣,第三方可以憑藉該主密鑰授權去向服務端請求,由服務端基於主密鑰對用戶的個人資訊進行解密,並執行該驗證。這樣,一方面用戶只需要通過一個主鑰就實現了對多個資料的管理;另一方面,用戶只需將個人資料以加密的形式儲存在服務端,而無需向第三方(實際中,第三方的數量是相當多的)提供自己的隱私資訊,避免了第三方對自己資料的洩露。
與第一方面對應的,本說明書實施例還提供一種資料儲存裝置,如圖4所示,圖4是本說明書實施例提供的一種資料儲存裝置的結構示意圖,該裝置包括:
確定模組401,確定待儲存資料;
子密鑰加密模組403,獲取隨機產生的子密鑰,採用該子密鑰對稱加密該待儲存資料,產生子鑰加密資料;
主密鑰加密模組405,獲取基於用戶資訊產生的主密鑰,採用該主密鑰對稱加密該子密鑰,產生子鑰密文,其中,該用戶資訊包括用戶密碼或者用戶生物特徵資訊;
合併模組407,合併該子鑰加密資料和子鑰密文,產生雙層加密文件;
儲存模組409,儲存該雙層加密文件。
進一步地,該主密鑰加密模組405,從用戶指定的路徑獲取根據用戶資訊預先產生的主密鑰;或者,獲取用戶資訊,採用預設的密鑰衍生函數基於該用戶資訊產生主密鑰。
進一步地,該子密鑰加密模組403,對每個待儲存資料,分別隨機獲取不同的多個子密鑰。
進一步地,該主密鑰加密模組405,獲取同一基於用戶資訊產生的主密鑰;採用該同一主密鑰分別對稱加密多個子密鑰,產生基於同一主鑰加密產生的多個子鑰密文,其中,子鑰密文和待儲存資料一一對應。
進一步地,該合併模組407,以該子鑰密文作為文件頭,合併該子鑰加密資料,產生文件頭不超過預設長度的雙層加密文件。
與第二方面對應的,本說明書實施例還提供一種雙層加密文件的解密裝置,如圖5所示,圖5是本說明書實施例提供的一種雙層加密文件的解密裝置的結構示意圖,包括:
確定模組501,確定該雙層加密文件中所包含的子鑰加密資料和子鑰密文;
主密鑰解密模組503,獲取用戶授權的主密鑰,使用該主密鑰解密該子鑰密文,產生子密鑰,其中,該主密鑰基於用戶資訊產生;
子密鑰解密模組505,使用該產生的子密鑰解密該子鑰加密資料,產生可用的解密資料,以便用戶使用。
本說明書實施例還提供一種電腦設備,其至少包括記憶體、處理器及儲存在記憶體上並可在處理器上運行的電腦程式,其中,處理器執行該程式時實現圖1所示的資料儲存方法。
圖6示出了本說明書實施例所提供的一種更為具體的計算設備硬體結構示意圖,該設備可以包括:處理器1010、記憶體1020、輸入/輸出介面1030、通信介面1040和匯流排1050。其中處理器1010、記憶體1020、輸入/輸出介面1030和通信介面1040通過匯流排1050實現彼此之間在設備內部的通信連接。
處理器1010可以採用通用的CPU(Central Processing Unit,中央處理器)、微處理器、應用專用積體電路(Application Specific Integrated Circuit,ASIC)、或者一個或多個積體電路等方式實現,用於執行相關程式,以實現本說明書實施例所提供的技術方案。
記憶體1020可以採用ROM(Read Only Memory,唯讀記憶體)、RAM(Random Access Memory,隨機存取記憶體)、靜態儲存設備,動態儲存設備等形式實現。記憶體1020可以儲存操作系統和其他應用程式,在通過軟體或者韌體來實現本說明書實施例所提供的技術方案時,相關的程式代碼保存在記憶體1020中,並由處理器1010來調用執行。
輸入/輸出介面1030用於連接輸入/輸出模組,以實現資訊輸入及輸出。輸入輸出/模組可以作為組件配置在設備中(圖中未示出),也可以外接於設備以提供相應功能。其中輸入設備可以包括鍵盤、滑鼠、觸控螢幕、麥克風、各類傳感器等,輸出設備可以包括顯示器、揚聲器、振動器、指示燈等。
通信介面1040用於連接通信模組(圖中未示出),以實現本設備與其他設備的通信交互。其中通信模組可以通過有線方式(例如USB、網路線等)實現通信,也可以通過無線方式(例如移動網路、WIFI、藍牙等)實現通信。
匯流排1050包括一通路,在設備的各個組件(例如處理器1010、記憶體1020、輸入/輸出介面1030和通信介面1040)之間傳輸資訊。
需要說明的是,儘管上述設備僅示出了處理器1010、記憶體1020、輸入/輸出介面1030、通信介面1040以及匯流排1050,但是在具體實施過程中,該設備還可以包括實現正常運行所必需的其他組件。此外,本領域的技術人員可以理解的是,上述設備中也可以僅包含實現本說明書實施例方案所必需的組件,而不必包含圖中所示的全部組件。
本說明書實施例還提供一種電腦可讀取儲存介質,其上儲存有電腦程式,該程式被處理器執行時實現圖1所示的資料儲存方法。
電腦可讀取介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀取指令、資料結構、程式的模組或其他資料。電腦的儲存介質的例子包括,但不限於相變內部記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可抹除可程式化唯讀記憶體(EEPROM)、快閃記憶體或其他內部記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶,磁帶磁磁碟儲存或其他磁性儲存設備或任何其他非傳輸介質,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀取介質不包括暫存電腦可讀取媒體(transitory media),如調變的資料信號和載波。
通過以上的實施方式的描述可知,本領域的技術人員可以清楚地瞭解到本說明書實施例可借助軟體加必需的通用硬體平台的方式來實現。基於這樣的理解,本說明書實施例的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟體產品的形式體現出來,該電腦軟體產品可以儲存在儲存介質中,如ROM/RAM、磁碟、光碟等,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)執行本說明書實施例各個實施例或者實施例的某些部分所述的方法。
上述實施例闡明的系統、方法、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、筆記型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放器、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
本說明書中的各個實施例均採用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於方法實施例而言,由於其基本相似於方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的方法實施例僅僅是示意性的,其中所述作為分離部件說明的模組可以是或者也可以不是實體上分開的,在實施本說明書實施例方案時可以把各模組的功能在同一個或多個軟體和/或硬體中實現。也可以根據實際的需要選擇其中的部分或者全部模組來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
以上所述僅是本說明書實施例的具體實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本說明書實施例原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本說明書實施例的保護範圍。
S101~S107:步驟
503:主密鑰解密模組
S301~S305:步驟
505:子密鑰解密模組
401:確定模組
1010:處理器
403:子密鑰加密模組
1020:記憶體
405:主密鑰加密模組
1030:輸入/輸出介面
407:合併模組
1040:通信介面
409:儲存模組
1050:匯流排
501:確定模組
為了更清楚地說明本說明書實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的圖式作簡單地介紹,顯而易見地,下面描述中的圖式僅僅是本說明書實施例中記載的一些實施例,對於本領域普通技術人員來講,還可以根據這些圖式獲得其他的圖式。
圖1是本說明書實施例提供的一種資料儲存方法的流程示意圖;
圖2為本說明書實施例所涉及的一種整體架構示意圖;
圖3為本說明書實施例所提供的一種雙層加密文件的解密方法的流程示意圖;
圖4是本說明書實施例提供的一種資料儲存裝置的結構示意圖;
圖5是本說明書實施例提供的一種雙層加密文件的解密裝置的結構示意圖;
圖6是用於配置本說明書實施例方法的一種設備的結構示意圖。