爲了學習目的,我創建了一個聊天應用程序,通過SSL/TLS完成連接,並且使用AES-CBC-256對消息進行加密,並且使用RSA- 2048。正確生成RSA + AES密鑰
AES密鑰是每個用戶每次會話隨機生成的(這意味着每個用戶每次會話都有一個密鑰),IV是隨機生成的(AesProvider.GenerateIV()
),每次傳入密鑰消息被創建(在發送之前)。
在RSA方面,我生成一個安全的隨機會話名稱來存儲在容器中生成的私鑰併發送公鑰。我也使用與AES中相同的模型(每個用戶每個會話一個密鑰對)。
我還應該聲明我正在使用HMAC-SHA512來散列消息併發送使用與AES密鑰/ Iv加密相同的公鑰加密的HMAC密鑰。由於我讀過它不需要經常重新生成,我打算每5000或10000次呼叫重新生成HMAC密鑰。
問題:
1)我應該只爲每個用戶創建一個RSA密鑰對,並將它用於所有會話,還是現在這樣好?
2)是否使用相同的AES密鑰,只有像上面解釋的那樣改變IV纔算安全?
這可能更好地通過https://security.stackexchange.com詢問。 – oleksii
@oleksii謝謝,https://security.stackexchange.com/questions/104810/properly-generating-rsaaes-keys –
此外,您可以使用Diffie-Hellman密鑰交換生成臨時會話密鑰,以實現完美的前向保密。 –