我正在創建一個協議,它試圖爲以後「存儲」對稱密鑰會話。我存儲了三件事:session_id(public),symmetric_key(private)和counter/nonce(private)。每傳輸一次,session_id都會以明文傳輸,並用於查找symmetric_key。對稱密鑰用於解密數據。數據包含一個散列(sha256),用於驗證消息內容。然後,我從內容中提取nonce,並檢查它是否與存儲的nonce匹配。如果它是我增加存儲的隨機數1。否則,數據包是假的,我把它扔掉。目前,我使用nonce作爲symmetric_key的IV。這是一個錯誤嗎?我必須使用完全隨機的IV嗎?最後,如果我確實使用隨機IV,那麼我如何傳輸多次?我需要重新談判一個新的密鑰嗎?我正在使用mcrypt庫來執行此操作。如果我在協議中使用隨機數,IV是否仍然需要是隨機的?
爲了清楚起見,客戶端發送:[隨機數+數據+散列(數據+隨機數)]加密+ session_key可以
謝謝!
只是爲了澄清,你發送回服務器,會話ID,加密數據,以及未加密的內容的哈希值,其中包括現時? –
再次更新,你是對的,散列需要包含nonce。 – chacham15
你如何執行與客戶端的初始密鑰交換?理想情況下,我會建議通過SSL來完成,以避免任何意外問題。 –