Tls

DTLS Change_Cipher 重傳是使用與原始時代相同的時代還是新時代?

  • May 29, 2017

DTLS 端點需要重新傳輸整個握手消息,以防超時。在超時事件之前,傳輸時期可以在記錄協議中改變。哪個時期用於重傳消息?舊的還是新的?

例如,在初始握手期間,客戶端發送一個包含 key_exchange、ChangeCipher 和 FINISHED 消息的航班。key_exchange,CCS 以 epoch=0 發送,FINISHED 以 epoch=1 發送。

假設 ChangeCipher 迷路了。

全飛行的重傳是否發生在epoch-1(這是最新的)?如果是這種情況,則對等方無法解碼航班。

或者

記錄的重傳是否發生在與原始記錄相同的時期,但使用了新的記錄協議序列號?在這種情況下,握手協議需要傳遞紀元資訊來記錄協議。還需要記錄協議來維護多個傳輸時期。

握手協議使用與第一次原始傳輸中使用的相同時期重新傳輸其消息。

DTLS1.2 RFC6347 第 4.1 節對此進行了提示。然而,重用同一時代的文本並不明確。

…在握手期間需要注意確保重傳的消息使用正確的紀元和密鑰材料…

對於 ChangeCipherSpec 失去的情況,在新的 epoch 中無法重傳。這樣做將導致 ChangeCipherSpec 接收者處於一種情況,即它無論如何都不需要解密它,因為它自己的接收端記錄層密碼狀態尚未使用新紀元的密鑰更新。

引用自:https://crypto.stackexchange.com/questions/47722