本發明涉及一種加密存儲方法,尤其涉及一種針對不可篡改文件的加密存儲方法。
背景技術:
現實生活中,我們總是會有很多的文件需要加密,公司的合同、員工信息、個人的隱私信息等。隨著越來越多的信息數字化,如何安全的存儲數字信息成為了現代社會的重中之重。一方面,分布式文件系統在解決了存儲容量、數據備份的同時也留下了數據安全方面的隱患。另一方面,加密算法的不斷演化,讓文件的安全性得到顯著提高。由于流行的加密服務器/客戶端模式,服務器的吞吐容量成為整個系統的瓶頸。如何在分布式的環境下提高驗證效率是十分關鍵的問題。
merkeltree是一種文件hash摘要的計算方法,最初是由ralfmerkle在1979提出的。它已經被運用在分布式賬本技術中用于驗證數據的完整性和可靠性。它的原理如附圖1所示:在最底層,和哈希列表一樣,我們把數據分成小的數據塊,有相應地哈希和它對應。但是往上走,并不是直接去運算根哈希,而是把相鄰的兩個哈希合并成一個字符串,然后運算這個字符串的哈希,這樣每兩個哈希就結婚生子,得到了一個“子哈希”。如果最底層的哈希總數是單數,那到最后必然出現一個單身哈希,這種情況就直接對它進行哈希運算,所以也能得到它的子哈希。于是往上推,依然是一樣的方式,可以得到數目更少的新一級哈希,最終必然形成一棵倒掛的樹,到了樹根的這個位置,這一代就剩下一個根哈希了,我們把它叫做merkleroot。merkle樹很適合適合用于大文件校驗,同時碰撞的幾率也低于md5。
技術實現要素:
本發明的目的在于提供一種針對不可篡改文件的加密存儲方法,旨在提高文件的安全性,在文件被惡意篡改之后能夠及時發現篡改,進而實現一定程度的防篡改。
本發明采用如下技術方案實現:
一種針對不可篡改文件的加密存儲方法,其特征在于,該方法包括如下步驟:1)在文件上傳階段,進行審核查詢,審核查詢的內容是要求系統中一定比例的用戶審核通過,文件才可以被上傳至分布式存儲系統;
2)在步驟1)中審核通過的文件被存儲在分布式集群中,文件被分片,分片的大小可以人工設定。
3)對文件的分片信息進行加密:通過加密模塊進行加密,該模塊中包含多個可選用的加密算法,如rsa。具體來說,審核文件的用戶都具有一對公、私鑰,系統采用mofn的形式確認權限,也就是說n個公鑰中有m個公鑰給出了配對的私鑰。在文件審核通過后,用戶對存儲路徑進行加密簽名,加密后的信息數據存放在文件管理節點上。
4)對步驟2)中的分片文件進行merkle樹的hash計算,將結果作為樹的葉子節點,然后每兩個葉子節點進行再次hash合并成一個父節點,一輪過后,再將父節點兩兩進行同樣的操作,每一輪最后落單的節點自動升級成為自己的父節點,最后得到一個樹根hashroot,所述樹根hashroot也就是該文件的信息指紋,一個分片的信息被微小改動都會導致樹根hashroot的偏差,這樣就可以方便的查看文件是否被篡改過。
5)將文件id和步驟4)中的樹根hashroot作為鍵值對存進內存數據庫中,日后在相關人員獲取文件后,可在本地計算hashroot,然后再根據id進行比對就可以判斷文件是否被篡改。
6)在取文件的階段,重復步驟1)中的權限查詢,然后根據在步驟2)中選用的加密算法進行解密獲取分片路徑,也就獲得了原文件。
進一步的,審核查詢的內容是要求系統中所有用戶的2/3審核通過,文件才可以被上傳至分布式存儲系統。
進一步的,在步驟3)中,所述加密模塊中包含rsa加密算法。
本發明的有益技術效果是:采用本發明對文件進行加密存儲,進一步提高了分布式文件存儲的可靠性,將文件丟失的風險分散到多節點、將文件管理的任務交給多個用戶,并且采用默克爾樹的結構簡要存儲分片信息,提高了系統對文件篡改的敏感性,能進一步滿足對安全性要求高的文件存儲要求。
附圖說明
圖1是分布式文件加密存儲的流程圖。
具體實施方式
通過下面對實施例的描述,將更加有助于公眾理解本發明,但不能也不應當將申請人所給出的具體的實施例視為對本發明技術方案的限制,任何對部件或技術特征的定義進行改變和/或對整體結構作形式的而非實質的變換都應視為本發明的技術方案所限定的保護范圍。
本發明主要是提供一種新的分布式加密防篡改存儲策略,從文件信息存儲以及采用一種信息指紋存儲來提高對被篡改數據的敏感性。同時,對文件的操作權限控制采用部分簽名的方式。
首先,將待加密文件上傳到分布式存儲系統上之前,需要進行一個用戶多簽名認證,也就是說將所有相關用戶的公鑰發送給系統,在文件入系統之前,向系統索要一定比例的用戶(默認設為所有用戶1/3)的私鑰,只有達到要求文件才可以被寫入系統,審核不通過則返回給用戶是否有問題需要修改或確認。這樣做的好處是減少了誤操作,避免了單個用戶的惡意行為。
其次,進入文件信息存儲階段,進入分布式文件存儲系統后,文件會被分為多個分片(分片大小默認為1kb),會被分散的存儲在多個獨立的節點上,采用分布式存儲的好處是文件容錯性更高。相較于其他方案中對整個文件加密,本發明采用對文件分片的路徑進行加密,這樣加密的數據量小很多,具體加密采用rsa加密算法,利用文件寫入時的提供私鑰的多個用戶的公鑰對數據進行多重加密,相對應的解密是需要相應的用戶進行多重解密,這樣的加密策略顯然會大幅提高文件的安全性。
最終,本發明引入了一種信息指紋的方法來二次確保文件的防篡改性,分片結束后,將具體的分片數據hash為20bits的數據,并將這些hash之后的數據作為merkle樹的葉子節點,接著逐層hash各葉子節點,最終構成一棵merkle樹。在該發明中,為了需要將該默克爾樹的根root1存下來,此處本方案將代表文件唯一性的id和默克爾樹的根作為鍵值對也就是本文件的信息指紋存儲進外部數據庫中。日后只要有一個分片遭到篡改,新的分片的默克爾樹根root2就會與原來的根root1千差萬別,以此保證文件不被篡改。
如圖1所示,本方案采用分布式存儲的方式,對存儲路徑采用部分簽名的方式進行加密,采用merklehash樹的方法獲得數據的信息指紋提高監測數據是否被篡改的效率。
首先,將所有相關用戶的公鑰發送給系統,需要被存儲的文件將由申請人發送給相關用戶審核。只有系統中一定比例的用戶(默認設為所有用戶2/3)審核通過了,文件才可以被寫入分布式存儲系統。這樣做的好處是減少了誤操作,避免了單個用戶的惡意行為。
其次,文件會被分為多個分片,每一片都會復制多個備份,然后存儲在獨立的節點上。文件分片大小默認為1kb。采用分布式存儲的好處是文件容錯性更高。系統的加密模塊將根據用戶的簽名信息對文件的分片信息進行加密。
分片結束后,將按照merkle樹計算hash值。每一片數據在hash完后作為merkle樹的葉節點,逐層進行hash計算最終構成一棵merkle樹。merkleroot將作為信息指紋存儲下來,此處本方案將代表文件唯一性的id和默克爾樹的根作為鍵值對存在內存數據庫中。日后,只要有一個分片遭到篡改,新的分片的merkleroot就會與原來的merkleroot千差萬別。相較于其他方案中對整個文件加密,本方案采用對文件分片的路徑進行加密,這樣加密的數據量小很多,具體加密采用rsa加密算法,利用文件寫入時的提供私鑰的多個用戶的公鑰對數據進行多重加密,相對應的解密是需要相應的用戶進行多重解密,這樣的加密策略顯然會大幅提高文件的安全性。
當然,本發明還可以有其他多種實施例,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員可以根據本發明做出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發明所附的權利要求的保護范圍。