2013-11-10 22 views
0

我正在做一個關於密鑰交換的小報告,並且想問一下這個安全信息是否安全。c#AES密鑰交換senario:這將是安全的嗎?

首先,我將製作一個簡單的基於服務器端的即時聊天源。

它會發送一個類到服務器,該服務器由兩個字段組成:發件人ID和消息,它將被AES加密。服務器將通知其他客戶端。

每個客戶端將與服務器共享密鑰(使用Diffie-Hellman密鑰交換)。相比於其他客戶

每一個客戶都會有不同的密鑰,並且密鑰值將

存儲在每個客戶端和服務器端(server將保留所有的按鍵爲每個客戶端。)

我想問的第一件事是,這可能嗎?

二,它會安全嗎?

三,會有更聰明的方法來做出類似的效果嗎?

回答

2

不,它不安全,它不能保護自己免受中間人攻擊。

根據您在問題中給出的信息,客戶端無法驗證它是在與真實服務器通話,還是無法假裝成服務器。假服務器然後可以與假裝成客戶端的真實服務器交談。然後它可以攔截兩者之間的所有通信。

密鑰交換隻是防止竊聽,你必須用別的東西來驗證你偷偷說話的人真的是你認爲你說話的人。

+0

除了從證書頒發機構獲取密鑰之外,是否還有其他方法可以避免中間人攻擊? – March3

+0

您意識到您控制了客戶端和服務器,您不需要獲取公共CA.成爲你自己的私人CA,簽署服務器證書,將CA的公共證書頒發給客戶端,然後客戶端可以檢查服務器發送給他們的證書是否由私人CA簽署,證明服務器是「真正的「服務器,而不是冒用您的服務器的人(假設您保證CA的安全併爲您部署的每臺服務器使用新的證書,否則我只能反編譯服務器軟件的副本,而您又回到了告訴真正的服務器從一個假的)。 –