更新會話密鑰
我有一個(應該)永遠不會關閉的系統,每 30 秒就有一次保持活動消息,並且正常流量變化很大,可能是幾 KB/秒,可能只不過是保持活動消息。
通常,當您開始新連接時會創建一個新密鑰,但由於我們的連接可能(應該)持續數週或數月,因此沒有標準的會話密鑰重新協商。
我的問題是生成新會話密鑰之間應該有多少時間?應該是每天午夜嗎?或者如果會話密鑰的協商始終在同一時間(或在設定的時間範圍之後),這會使系統易受攻擊。TLS對此有什麼幫助嗎?
為我們的場景
更新主密鑰有點棘手,我們可以通過轉到所有設備並手動設置來做到這一點,這是我們希望避免的。但是有時需要更新主密鑰,您應該多久更新一次?考慮到這將很難做到。
編輯
沒有 DH 或 ECDH,反正在第一個版本中也沒有。我正在嘗試推送它(和證書)。該公司遇到的一個問題是,我們假設 DH 和 ECDH 在我們的設備上需要很長時間(我們只有幾毫秒的時間可以使用(大約 10 到 15 毫秒)),而我還沒有研究 DH 和 ECDH 時間。在我們的 Renessas 控制器上(約 100 Mhz)
注意:除非另有說明,否則此答案將假定以下內容:
- “萬能鑰匙”是安全的。(不可提取,128 位+熵)
- 臨時 (EC-) Diffie-Hellman 可用且安全(密鑰不可提取,2048 位 DH / 256 位 ECDH 可用)
- 使用的隨機數生成器是安全的。(即不僅僅依賴於時間,例如它是一個加密安全的 RNG,它應該由一個好的 TLS 實現可用和使用)
現在答案:
如果上述幾點適用,您不必更新密鑰。
如果假設適用,所有密鑰都將是牢不可破的(至少十年)。
好吧,看起來你想要前向保密,為了得到這個,你可能想要不時地更新會話密鑰。如果可能的話,我建議在每次某種“動作”完成後更新會話密鑰。
如果您沒有類似“動作”或“大塊”的東西,您可能需要定期更新密鑰。如果上述假設適用於靜態間隔重新鍵入密鑰應該不是問題。作為間隔,我建議:“盡可能頻繁”,這可能會轉化為一小時到一天之間的時間。對於完全更新會話密鑰,TLS 確實具有稱為“重新協商”的功能。每當您需要新密鑰時,您都可以觸發這樣的握手。
關於更新主密鑰:
如果上述假設適用,您不必更新密鑰。如果您認為可能會提取密鑰,則更新密鑰很有趣。根據這有多容易,您可能希望經常而不是更少地更新。
如果您的設備是防篡改的,或者您正在使用臨時數據加密密鑰,我會說一年一次到十年一次是可以的。
如果您的設備計劃使用超過 50 年,您可能需要考慮使用 192 位密鑰。