項目描述:
已經和組員完成安全數據傳輸平台項目有好一會了,最近也比較忙,所以抽周末一上午的時間來寫這篇博客。
首先先提我們的項目——安全數據傳輸平台。
一句話概括我們要解決的社會痛點:基於用戶互相通信間上安全的需求,通過對稱密鑰給信息包上安全。
我們要解決的需求有:1.用戶服務器與用戶客戶端一對一通信上安全的需求。
2.用戶服務器與多個用戶客戶端通信過程中,利用不同密鑰分別上安全的需求。
3.用戶服務器集群能在某一用戶服務器崩潰的情況下,完成處理與其通信客戶端保存繼續正常通信的需求。
4.用戶客戶端下存在級聯,客戶端級聯的客戶端主機 需要與 客戶端通信上安全的需求。
5.密鑰的分配,密鑰的定時更新,密鑰更新時用戶通信保持正常和穩定。
6.機器崩潰時用戶可以手動協商密鑰。
而我的任務就是完成我們項目組件中:Linux下搭建密鑰協商服務器與Linux與Windows密鑰協商客戶端以及共享內存設置部分。
今天博客的內容主要圍繞密鑰的生成與分配展開,涉及到的知識點有——ASN.1 DER編碼規則,socket。
提出疑問:
《計算機網絡》(謝希仁)里就有提及,對稱性密鑰的實現有兩大難點:
1.如果有n個用戶,每個用戶都渴望和剩下n-1個用戶建立連接,那么就一共要分配n(n-1)/2個密鑰,這就是一個很典型的n^2問題。
2.網絡環境是復雜又不安全的,所以密鑰的分配也是一個很大的問題。
解決疑難:
針對第一個問題,因為我們的測試環境下用戶並不是很多,完全可以用四位數字來概括所有用戶。將來如果真的存在這種需求,那么就要利用多個密鑰,以一個主密鑰和多個副密鑰來加密 和 解密用戶的信息包,這樣其實多個用戶可以共用的密鑰時一樣的,只是他們加密與解密的副密鑰次序有了差別。
我們項目制作過程中最主要遇到的還是密鑰分配的問題,我們的大致思路是:由用戶1生成一個隨機數並發送給用戶2,然后再由用戶2生成一個隨機數並發送,雙方通過協商生成一個密鑰,並將其存入數據庫(同時在數據庫中完成注冊),要記住一個宗旨:密鑰的分配過程一定不可以涉及網絡。
以上,就要涉及到我的任務:密鑰協商服務器和密鑰協商客戶端的涉及!
當然,涉及密鑰協商服務器和密鑰協商客戶端並沒有設計兩個socket,一個connect一個accept這么簡單。
我們首先要注意一個問題:如果用戶雙方系統不一致怎么辦???64位系統的數據到32位系統是否就會出現信息丟失。
所以要引入今日重點——報文規則。
今日重點:
我在這里着重介紹幾個著名的報文規則:
1.HTTP與HTML
HTTP就是我們著名的超文本傳輸協議,迄今為止用的最廣泛的網絡協議。HTML即為文本標記語言,HTML是一種規范,一種標准,它通過標記符號來標記要顯示的網頁中的各個部分。HTML在HTTP上運行,通過HTTP也可以傳輸圖片,影像,數據等內容。
2.XML
XML為可擴充標注語言,由SGML所精簡而來的一種通用標注語言,現在XML被廣泛用於四方面:1.應用於具有不同復雜格式的不同數據源間的交互。2.應用於大量運算負荷分布在客戶端的情況,用戶可以根據自己的需求選擇和制作不同的應用程序以處理數據,而服務器只需發出同一個XML文件。3.應用於將同一數據以不同的形式表現出來。4.應用於網絡代理對所取得的信息進行編輯、增減以適應個人用戶的需要,形成具有個人特色的數據文件。
XML可以很好的滿足我們的需求,因為我們傳遞的密鑰協商信息包實際上就是一個結構體,里面包含了不同的數據類型,當然XML也有其局限性,它增加了信息包的內容,為了正確的傳輸和信息交互犧牲了一定的空間。
3.JSON
JSON是一種輕量級的數據交換格式。它並不是編程語言,其語法只支持字符串、數值、布爾值與NULL以及在此基礎上的對象和數組。其讀寫成本低,極其適合互聯網上的數據傳遞。
JSON采用與編程無關的文本格式,只要該語言按JSON規則,就可以解析數據,跨平台無阻礙。
JSON的語法實際上就是以鍵值對的形式存放數據,鍵值對間以‘,’相隔,鍵與值之間以‘:’相隔。
4.用戶自定義
這個往往應用於公司內部,因為報文的復雜而且繁雜,所以需要自定義報文規則,針對win和Linux平台內存規則的不同,還有指針內部資源的獲取,還有大小端字節序的不一致,綜合考慮,自定義報文規則不失為一種明智的抉擇。
5.ASN.1 DER編碼規則。
ASN.1抽象語法標記,ASN.1可以理解成一個標准,描述了如何對一個數據進行表示、編碼、傳輸和解碼。它提供了一整套正規的格式用於描述數據對象的結構。
DER為ASN.1標准下的其中一種編碼規則,表示識別名編碼規則。
ASN.1提供了一些基本的預定義數據類型:
https://baike.baidu.com/item/ASN.1/498523
這里我調用了ITCAST的DER編解碼庫和日志打印庫(windows下運行要屏蔽日志打印頭文件)。
以下是其githup地址:
https://github.com/gitsshylalala/DER.git