谷蒙蒙, 葉展翔
(1.溫州職業技術學院, 浙江 溫州 325000; 2.溫州市網絡安全檢測與防護工程技術研究中心, 浙江 溫州 325000)
近年來,隨著互聯網、物聯網、云計算等新興科技的迅猛發展,網絡空間已成為人們生產生活的新家園。根據《中國互聯網發展情況統計報告》,截至2022 年底,中國網民人數達到10.67 億,互聯網普及率[1]達到75.6%。隨著各類互聯網新興技術在社會生活中的廣泛應用,人們對于各類電子設備的使用也越來越廣泛,每天都在產生大量的數據,包括電子郵件、在線聊天記錄、錄音和影像視頻等。文件的共享和安全傳輸為互聯網用戶數據安全提供了基礎。如今的數據安全產業逐步成為實現網絡強國與數字中國的重要組成以及中國式現代化的基礎支撐,數據安全建設已由“或有”轉變為“剛需”。
P2P(Peer to Peer)技術是數據共享的熱門技術之一。與傳統的C/S(Client/Server)模式相比,P2P 架構具有非中心化、健壯性、可擴展性、高性價比、負載均衡及隱私保護等優勢。P2P 技術主要應用在分布式計算、交互應用及文件功能三大場景。在基于P2P 的數據共享應用過程中,文件的接收者希望保證文件的完整性,管理員希望對文件內容做一定的審記,在保證文件安全傳輸的同時,也要防止數據在傳輸期間可能受到的攔截攻擊[2]。
國產商用密碼簡稱國密,是數據共享的“安全底座”。國密算法為人們提供了一個新的選擇,在必要的場合中替代那些國際主流算法,大規模推廣和采用國密算法將為國內重要的網絡基礎設施提供可靠的數據安全保障。文獻[3-4]將國密算法與國際上的典型同類算法進行比較發現,國密算法在安全性和實現效率方面都具有明顯的優勢。國密算法在具體應用和推廣中還存在不足?!吨腥A人民共和國密碼法》[5]于2020 年正式實施,從法律層面規范了國家商用密碼的應用和管理,這也為推廣和應用國密提供了必要的法律保障。本文使用多種國密算法,包括SM2、SM3、SM4 三種算法,設計一種混合加密方案,并應用到數據開放共享平臺中。
其中,SM2 是基于橢圓曲線多倍點運算單向函數的公鑰密碼算法,廣泛應用于信息系統身份鑒別、網絡通信密鑰交換、電子印章數字簽名,以及可信計算等領域[6-8]。密碼雜湊算法是三類基礎密碼算法之一,它可以將任意長度的消息壓縮成固定長度的摘要,主要用于數字簽名和數據完整性保護等[9-10]。SM4 分組密碼算法是一個選代分組密碼算法,主要用于數據加密[11-12]。
數據開放共享平臺為網絡中的各個節點提供文件管理及共享服務,需要滿足穩定性、可擴展性及負載均衡的P2P 應用等一般設計原則,在此基礎上,結合國密算法增加安全性要求,即平臺共享數據機密性、完整性和不可否認性。
1) 穩定性
要求平臺搭建的P2P 網絡能夠自動調整內部結構,適應網絡規模的變化。當有節點加入、離開或失效時,正在進行的查詢或數據傳輸不會受到影響。
2) 可擴展性
假設P2P 網絡中節點總數為N,可以自由地增加節點,沒有參數限定網絡節點的數量,要求網絡開銷隨著網絡規模的擴大,按O(logN)的復雜度增加,可以用于大型的網絡中。
3) 負載均衡
P2P 網絡中所有節點都參與數據共享全流程,并采用一致性哈希算法,保證網絡中所有節點以同等的概率分擔系統的負載,避免某些節點負載過重的情況。
4) 機密性
在數據傳輸前對數據進行加密處理,若傳輸過程中被第三方截獲,要求加密數據無法被破解。每個用戶都擁有一對SM2 非對稱密鑰。由于非對稱密鑰加密大文件的開銷過大,使用SM4 對稱密鑰進行文件加密,每一個文件傳輸進程均隨機產生一次對稱密鑰。
5) 完整性
數據傳輸過程中,要求確保數據不被未授權地篡改,即使篡改后也能夠迅速發現,使用SM3 算法對文件進行摘要并驗證。
6) 不可否認性
數據傳輸完成后,對數據的發送者身份進行認證,同時發送者不能否認自己發送數據的行為和數據的內容。
數據開放共享平臺的功能模塊如圖1 所示,包括對等網絡搭建、文件數據處理及輔助功能三類。對等網絡搭建模塊包括對等網絡的創建及網絡節點的加入/離開。文件數據處理模塊包括共享文件的關鍵字信息發布、搜索、刪除以及文件的點對點下載傳輸。輔助功能模塊主要是文件關鍵字的自動提取。

圖1 數據開放共享平臺的功能模塊
1) 對等網絡構建
用戶在使用共享服務前,可以掃描本機的IP 并指定一個默認端口號,組成URL,用其創建一個新的對等網絡,或者輸入已存在的對等網絡中某節點URL,與其進行連接,加入其所在對等網絡。用戶結束與其他節點的數據傳輸進程后,可以選擇退出對等網絡,退出后,用戶所有共享的信息將被刪除。
2) 數據處理
用戶輸入的文件關鍵字及文件路徑進行哈希運算后,組成<K,V>序偶對,根據特定算法存儲到某節點中,從而在沒有中心服務器的情況下,實現文件的共享。文件始終保存在用戶節點本地,文件共享過程中并沒有文件傳輸的過程。
用戶可以輸入想要搜索的關鍵字,將關鍵字進行哈希映射,在對等網絡中進行搜索,獲取文件所在節點標志符及文件路徑。已經共享文件可以由文件擁有者進行刪除操作,將文件相應的<K,V>序偶對從存儲它的節點上刪除。刪除前需要先判斷相關文件是否存在。
節點A通過共享文件搜索功能,獲取文件所在的節點B標志符及文件路徑,通過標志符中的IP 和端口號建立socket 連接,結合國密算法將安全文件傳輸到節點A。
3) 輔助功能——文件關鍵字提取
輔助功能模塊只針對文字類型的文件,主要包括txt、Word 等能夠提取文字的文件。提取文件內容中具有具體意義的名詞,在文件預處理和分詞處理的基礎上進一步提煉這些名詞,作為文件共享前的輔助功能。
數據開放共享平臺使用Chord 協議[13]進行P2P 組網。Chord 協議是一種高效、可擴展的完全分布結構化對等網[14]。Chord 網絡中的一個節點代表一個用戶,每個用戶都有一個唯一的m位節點標識符ID,由IP 地址和端口號哈希得到。所有節點根據標識符從小到大排列在一個邏輯的標識符環(Chord 環)上,每個節點都有一個邏輯上的前驅和后繼。
共享文件索引由一個序偶對<K,V>組成。其中,K表示關鍵字(如文件名、作者等屬性)的哈希值,V表示實際存儲該文件的節點標志符及路徑。所有這樣的序偶對構成了一張文件索引哈希表,輸入目標文件信息K,就能夠從中查詢到存儲該文件的目的節點信息。文件索引被哈希到Chord 環上,映射規則為:文件索引關鍵字K所對應的序偶對存儲在節點標識符等于K的節點上,若該節點不存在,則存儲在已存在的且緊跟在K后的節點上。Chord 環文件索引存儲示例如圖2 所示。

圖2 Chord 環文件索引存儲示例
圖2 中N代表節點,K代表文件關鍵字。按照映射規則,K為2 的序偶對本應存儲在節點N2上,但由于節點N2不存在,則存儲在標志符大于2 且離節點N2最近的節點N3上。同理,關鍵字7 和9 存儲在節點N10上,關鍵字11 存儲在節點N12上。當網絡拓撲發生動態變化時,上述映射規則依然要滿足。當節點N8進入Chord 環后,K為7 的序偶對要重新分配到節點N8上;當節點N3退出時,K為2 的序偶對將被存儲到節點N6上。
節點加入或退出對等網絡時,需要對網絡拓撲結構與資源共享存儲進行調整,具體流程如圖3 所示。
用戶節點加入對等網絡時,隨機生成一個SM2 密鑰對<P,S>,P表示公鑰,S表示私鑰,將節點標識符ID 和公鑰P組成鍵值對<ID,P>,添加到自己的文件索引哈希表中,公布在對等網絡中。私鑰則保存在節點本地,為后續數據加密、用戶驗證提供基礎。
用戶節點退出當前對等網絡時,刪除其公鑰信息所對應的鍵值對,同時將節點上存儲的共享信息移動到下一節點上。
文件共享發布、搜索、刪除的流程如圖4 所示。

圖4 文件共享發布、搜索、刪除流程
用戶節點共享發布文件時,在本地選擇文件,將文件的關鍵字哈希值H(kw)和文件所在節點路徑ID+path組成鍵值,根據Chord 算法映射原則,存儲到對等網絡中的某一節點上。
用戶節點搜索文件時,輸入要搜索的關鍵字,通過關鍵字哈希值在對等網絡中搜索鍵值對<H(kw), ID+path>,獲取相應文件的所在節點與路徑。
用戶刪除已共享的文件時,輸入文件關鍵字,通過關鍵字哈希值在對等網絡中進行搜索,并刪除共享信息<H(kw), ID+path>。
由于文件始終存放在本地,文件下載時需要文件擁有者和文件申請者之間建立TCP 連接。下載前,申請者需先通過搜索得到所需文件的節點與路徑。文件下載流程如圖5 所示。

圖5 數據安全傳輸流程
當節點B想要下載節點A上的文件F1,發送下載文件請求時,需要將文件F1路徑信息發送給節點A。
節點A接收到請求后,隨機生成SM4 密鑰K1作為文件密鑰對源文件進行加密處理,得到加密文件CF1,如公式(1)所示,保證文件的機密性。
由于文件加密采用一次一密的方式,文件密鑰需要和加密文件一起安全傳輸給對方。節點A在對等網絡中以節點B標識符為關鍵字進行搜索,得到B的公鑰PB,使用PB 對K1進行加密,得到加密密鑰CK1,如式(2)所示,實現文件密鑰的安全傳輸。
為了保證文件傳輸的完整性和不可抵賴性,節點A使用SM3 算法對文件進行摘要,并使用自己的SM2 私鑰SA 對摘要進行簽名,得到Sig1,公式如下:
節點A將加密文件CF1、文件密鑰密文CK1以及簽名同時發送給節點B。節點B收到后,首先使用自己的SM2 私 鑰SB 對CK1進 行 解 密,得 到 文 件 密 鑰K1,公 式如下:
其次,使用K1將CF1進行解密得到源文件F1,公式為:
節點B使用節點A的標志符在對等網絡中搜索節點A的SM2 公鑰PA,并用它對簽名Sig1 進行驗簽,得到文件摘要Sm3(F1),公式如下:
最后,節點B對解密得到的文件進行SM3 摘要計算,并與后得到的Sm3(F1)進行比較,若一致,說明文件確實由節點A發送且在傳輸過程中沒有被篡改。
本文設計了一種基于國密算法的P2P 數據開放共享平臺,使用Java 語言進行Windows 應用程序開發,并在多臺終端與虛擬機上進行安裝測試。與現有的FTP服務器、網盤等文件共享方式相比,所設計平臺不需要將共享文件上傳至中心服務器,而是將文件信息以鍵值對的形式存儲在文件索引哈希表中,共享的數據信息占用空間小,且能夠擺脫對中心服務器和數據庫的依賴。所有節點既是服務器也是客戶端,既能共享數據也可以參與存儲數據,達到負載均衡的效果,且節點數量不受限制,適用于大型網絡。由于P2P 平臺存在不可控的問題,平臺采用了一種混合SM2、SM3、SM4 算法的加密方式,在平臺文件傳輸過程中對數據安全進行把控。使用SM4 算法保障數據的機密性,使用SM2 算法保障文件密鑰的保密性和文件發送方的不可抵賴性,使用SM3 算法保障文件的完整性。本文平臺將P2P 技術與國密算法的優勢進一步融合,實現簡單,運維成本低,是一種可推廣的數據開放共享方式。