Stream-Cipher
尋求密鑰流作為重用密鑰的方式
為了減少密鑰交換的數量,我建議使用相同的密鑰流加密消息,方法是為單獨的消息選擇密鑰流中的後續位置。
即消息 $ M_1 $ 用第一個加密 $ |M_1| $ 密鑰流、消息的位 $ M_i $ 帶位 $ |M_1| + |M_2| + \dots + |M_{i-1}| $ 至 $ |M_1| + |M_2| + \dots + |M_{i}| $ 相同密鑰流的位。
**觀察:**這種方式,我看到它好像我加密了一條長消息 $ M_1+M_2 \dots + M_i $ 使用所述流密碼。
問題:這個觀察是否正確,因為
- 所有流密碼;
- 特別是任何特定的流密碼,比如 Salsa20 和 ChaCha20;
鑑於消息之間的時間間隔“很大”,並且新消息可能取決於不同的傳輸(可能是攻擊者)?
為了直接解決您的要點,是的,這將適用於僅生成僅依賴於鍵的序列的所有通用鍵流。然而,這些是一些現實世界的問題。
- 您的方案需要一對發送者和接收者之間的完美同步。否則,流位置將失去,因為這不是傳輸的一部分。
- 你特別提到了攻擊者。收到攻擊者消息將丟棄流位置,如果不仔細跟踪收到的字元數,您將永遠無法恢復它。也許那時還沒有。
- 類似地,除了一對發送者/接收者之外的任何東西都會使流位置恢復變得極其困難。從長遠來看,不可能/不切實際。
- Salsa20 /ChaCha20 通過使用將密鑰流重置到可辨識位置的隨機數來克服這個問題。
- 不交換鑰匙,新成員怎麼入黨?
密鑰交換是密碼學的一部分,並且得到了很好的解決。關鍵流定位是一個nonce的作用,並且討論得很好。