Stream-Cipher
流密碼的密鑰必須有多長?
我正在觀看Christof Paar 的第 3 講(流密碼、隨機數和一個時間墊),也許它會在另一講中解釋,但是:
當他解釋 XOR 的工作原理時,在他給出的範例中,明文 X3.X2.X1 使用密鑰 S3.S2.S1 加密並變成密文 Y3.Y2.Y1。
因此,如果明文長 N 位……密鑰也必須長 N 位?
如果答案是否定的,它可以是任意數字……那不是分組密碼嗎?
如果答案是肯定的,發送端和接收端是否必須事先約定要傳輸的比特數?
如果這是隨機的(即事先未知),如果它必須與明文一樣長,他們怎麼知道使用什麼密鑰來加密和解密?
因此,如果明文長 N 位……密鑰也必須長 N 位?
讓我們逐點解釋:
- 對於流密碼,密鑰流必須是 N 位長;
- 對於 OTP,密鑰基本上就是密鑰流;
- 對於流密碼或分組密碼(在流模式,例如計數器模式中),密鑰通常在 128 到 256 位之間,被認為是安全的;
- 對於這些密碼,密鑰用於生成密鑰流。
我跳過了“明文感知”流密碼,因為它們不使用 XOR(直接)從密鑰和明文計算密文。
如果答案是否定的,它可以是任意數字……那不是分組密碼嗎?
分組密碼是一種將一個明文塊置換為密文塊(反之亦然)的密碼 - 使用密鑰選擇置換。您可以擁有任何大小的密鑰的分組密碼和流密碼。密鑰大小沒有定義某個東西是流密碼還是塊密碼。
如果答案是肯定的,發送端和接收端是否必須事先約定要傳輸的比特數?
答案是否定的,所以這使得這個問題無效。儘管如此:對於 OTP,您必須確保您知道密鑰流中的位置,當然您已經共享了足夠的密鑰位。對於流或分組密碼,您不需要事先知道要傳輸的比特數。但是,您應該為每條消息使用唯一的 IV 或隨機數。
如果這是隨機的(即事先未知),如果它必須與明文一樣長,他們怎麼知道使用什麼密鑰來加密和解密?
他們使用一種稱為“保持計數”的複雜技術 :) 是的,如果索引不同步,例如由於失去的消息,就會出現問題。