From what I've read about Feistel ciphers, I can understand that within each block, there is both confusion and diffusion. But it is unclear to me how a Feistel cipher permutates among blocks of data. If a message is longer than the block length, how would changing one part of the message affect the encryption of other parts of the message? If L1 and R1 are considered one block, how would they affect the next blocks or the previous blocks of the message?
1 Answer
If a message is longer than the block length, how would changing one part of the message affect the encryption of other parts of the message?
That really doesn't depend on the block cipher in use, which may be a feistel cipher like DES or a SP network like AES, but on the mode of operation.
Now the answer to this really depends on the actual mode chosen. Note anyways: The encryption process is never message dependent, only the encryption result shows observable differences between the modes.
- If you use CTR or OFB, then any change in the message bits will only affect the corresponding ciphertext bits and no other. The same applies for all modes using CTR internally (e.g. nearly all authenticated encryption modes).
- For CBC, this will scramble the current block and thus also scramble the "encoded message" for the next block and thus a message change is fully propagating until the last block in a randomized fashion starting at the block of change (this also makes CBC somewhat suitable as a message authentication code aka CBC-MAC).
- As for CFB, it's similar to CBC. A change in the plaintext will propagate infinitely, as this will change the current ciphertext block and thus the "xor-pad" for the next block.
- ECB (which you really shouldn't use) behaves much like CTR and OFB in this regard, with a change in the plaintext influencing the ciphertext at block-level granularity instead of bit-level.
If L1 and R1 are considered one block, how would they affect the next blocks or the previous blocks of the message?
This is not well-known or -defined usage of feistel networks. However, you either create a larger block cipher this way and thus "moving" the problem of the mode to a higher granularity or you're defining some sort of mode operating on two blocks of data at once, like $C_1||C_2=E_K(P_0,P_1)||E_K(P_1,P_2)$ which would suffer from similar problems as ECB but at a higher granularity level (e.g. you can detect when a pattern of three blocks repeats).