我目前正在研究一個web API。我需要確保從客戶端發送到服務器的消息具有足夠的安全性(不能被修改,被攻擊者讀取並能夠識別客戶端)。我的加密郵件設計是否安全?
我在這裏有一個初步設計。它足夠安全嗎?
我決定利用PKI。即, 服務器和客戶端都有一組RSA公鑰和私鑰。 服務器還有一個數據庫來存儲客戶端ID和他們的公鑰。
在客戶端和服務器通信之前,他們使用diffie-hellman密鑰交換來建立會話密鑰。用在diffle-hellman中的「祕密」是私鑰。發送的消息將由發件人的私鑰加密。因此,接收者可以使用發件人的公鑰來識別發件人,並防止中間人攻擊。然後建立會話密鑰K.客戶端發送:客戶端ID,E(K,消息),H(K,E(消息),客戶端ID) 其中H()是SHA256的哈希函數。
當服務器收到消息時,它計算H(K,E(消息),ClientID)並將其與接收到的HMAC進行比較。如果他們是平等的,那麼這個信息應該是安全的。
我知道我的設計無法防止重播攻擊。但我現階段不考慮它。我的設計足夠安全嗎?任何評論將不勝感激。非常感謝!
你爲什麼要在這裏重新發明輪子?像SSL/TLS這樣的標準機制在這裏還不夠嗎? –
我只是努力工作和學習裏面的東西。 – KenLai
最好在http://crypto.stackexchange.com上提出這樣的問題 –