朱賀 徐靖 王貴萱
【摘 要】本文描述了一個基于P2P技術的安全內聯網即時通信系統的實現技術,企業用戶交互數據無需通過外部服務器傳輸,防止內部數據流入公網,最大限度保護內部數據安全,提高系統可靠性,滿足企業內部可性,安全便捷通信的需求。
【關鍵詞】P2P;NAT穿透;即時通信;行為識別
0 引言
當前企業員工間基本都是通過QQ、Skype等常見的商用軟件來進行溝通交流。但這些常見的基于C/S模型的即時通信軟件過分依賴于中心服務器,所有的數據均需經過外網服務器轉發,若服務器或互聯網鏈接出現問題,那么整個通信系統將無法正常工作。另外企業內部工作中的溝通交流會涉及商業機密,如果利用市面上的即時通信軟件進行傳輸,數據可能會以可破解的形式出現在相應軟件的服務器上,當服務器遭受攻擊,這些機密的數據就會被泄露,且絕大多數的傳統即時通信軟件采用的都是用戶名、密碼的登錄認證模式,這樣的認證方式很容易被攻擊,從而帶來不可估量的危害。因此,針對目前即時通信軟件在企業應用中表現出的種種不足,設計并實現一個企業級的內聯網安全通信系統是十分有必要的。
1 系統設計方案
本系統分為客戶端和服務端兩部分,采用P2P與C/S相結合的系統架構。服務端提供用戶登錄身份驗證,狀態通知(離線、上線等),信息查詢,數據存儲管理等功能。客戶端實現用戶數據的封裝、加密和發送,處理來自其他客戶端的文件傳輸請求,實現局域網內客戶端之間的快速文件傳輸,在離線數據傳輸的過程中,分擔服務器負擔,處理相應的中轉數據。
2 具體實現技術
2.1 NAT內網穿透
穿透模塊是通信的基礎模塊,系統中的 P2P 文件傳輸是網絡資源共享的重要方式之一,且只適合兩個在線用戶之間發起,主動發起用戶先發消息給被傳用戶,對方同意后接收,建立點對點連接。因此要在有 NAT 設備的環境中實現點對點通信,首先要解決的就是NAT穿透問題。根據 NAT 類型的探測的結果可以采取不同的穿透方案,在本系統中主要用到的就是UDP打洞和TCP打洞,它們的最終目的是將位于兩個不同子網中的兩個計算機連接起來。在進行穿透前會進行一個測試,判斷當前網絡環境是否需要穿透,首先用戶A向用戶B發送一條測試消息,若A能成功接收用戶B的反饋消息則A就可以直接連接B進行通信,否則需要進行NAT穿透。
2.2 安全登錄認證
傳統的即時通信軟件用戶的密碼是由用戶自己設定的。在登錄系統時輸入正確的密碼,計算機便認為操作者就是合法用戶。實際上,由于許多用戶為了防止忘記密碼,經常采用諸如生日、電話號碼等容易被猜測的字符串作為密碼,這樣很容易造成密碼泄漏。用戶名、密碼機制雖然在使用和部署上都非簡便,但從安全角度來說,并不是是一種安全的身份認證方式。而基于計算機輸入行為特征的認證方法,具有行為方式難以模仿,行為方式無需記憶,行為數據量大,行為密碼不具有明顯的特征等眾多優點。所以,在本系統中采用基于鼠標鍵盤行為方式分析的方法實現系統登錄的安全認證。
2.3 數據加密
目前主流的加密算法主要有對稱加密算法和非對稱加密算法。對稱加密算法資源消耗較小,但是對稱加密算法的密鑰需要通過直接復制或網絡傳輸的方式由發送方傳給接收方,同時無論加密還是解密都使用同一個密鑰,所以密鑰的管理和使用很不安全,如果密鑰泄露,則此密碼系統便被攻破。非對稱加密通過公鑰進行加密,用私鑰進行解密,不需要通過安全通道來傳輸密鑰,且能夠公開加密密鑰,僅需要保密解密密鑰,所以不存在密鑰管理問題。但是非對稱算法非常復雜,密鑰對的生成、數據的加解密都會消耗很多資源,對于企業即時通信系統來說采用非對稱加密算法加密密鑰信息是無法滿足其即時性需求的。因此,本軟件合對稱和非對稱加密算法的優點設計出了客戶端和服務器間數據傳輸的混合加密方案。
Server初始化后會通過非對稱算法生成公鑰和私鑰,當有Client和Server進行通信時,Server便會將Server的公鑰發送給Client。
Client在登錄或者注冊時,會先用非對稱算法生成公鑰和私鑰,然后將公鑰發送給Server,Server記錄下這個Client對應的公鑰。然后將這個公鑰廣播給所有在線的Client。某個Client在離線后,Server會將該Client對應的公鑰刪除。
如果ClientA要向ClientB發送信息,首先通過對稱加密生成密鑰key,然后在Server廣播的所有在線Client的公鑰中找到ClientB的公鑰,然后用這個公鑰加密密鑰key,然后將加密后的密鑰發送給ClientB,ClientB使用自己的私鑰解密,獲得ClientA和ClientB進行通信的密鑰key。之后ClientA和ClientB之間的通信都是用密鑰key進行加密和解密。
2.4 數據封裝
為了保證數據交換的方便、解析的高效以及加密解密的效率,本系統采用的數據封裝格式為(消息類型、用戶名、密碼、信息內容、日期、文件名)。將要進行傳輸的數據按照上述規則封裝之后,按照響應的加密方式進行加密,加密之后的數據為d,然后再對d進行MD5消息摘要,以保證通信數據的完整性,將MD5放在數據d的頭部,形成最終可以發送的數據d2,最后將數據d2發送出去。
收到數據后,首先將頭部的MD5數值取出,計算剩下部分的MD5是否和頭部的MD5數值相等,如果相等則數據發送完整,進行下一步的解析,否則認為數據發送失敗,丟棄這個數據包,并且向發送者發送反饋。
3 結束語
本系統采用C/S和P2P混合通信模型,在系統中的每個節點作為客戶端請求服務的同時,也可以作為服務端提供服務,大大減輕了對服務器的依賴。而且當服務器發生故障時整個通信系統不會立即癱瘓,內部通信依舊能進行。基于鼠標鍵盤行為方式分析的安全登錄認證機制解決了傳統用戶名/密碼模式易攻破易泄露的問題,大大提高了用戶賬號的安全性。另外,為進一步提高通信的安全性還引入了通信加密機制,使數據以密文的形式進行傳輸和儲存,最大限度的保證了整個系統的穩定性與安全性。
【參考文獻】
[1]郭曉靜.基于統計學的擊鍵序列身份認證算法研究與改進[J].北京郵電大學,2013.
[2]沈超,蔡忠閩,管曉宏,等.基于鼠標行為特征的用戶身份認證與監控[J].通信學報,2010(7).
[3]張偉欣,韓秀玲.TCP穿透NAT的P2P通信技術研究[J].計算機時代,2008(11).
[4]楊天路,劉宇宏,張文.P2P網絡技術原理與系統開發案例[M].北京:人民郵電出版社,2007.
[責任編輯:田吉捷]