Earlier quoted context omitted.
I'm curious, if you use a stream cipher for file encryption how do you avoid the two-time pad problem?
You don't encrypt with the same key/nonce pair twice. All the secure block cipher modes have the same restriction; for instance, you can't CBC-encrypt multiple messages with the same key/IV.
Is this an "always bad" thing, or does it depend on the structure of the messages and what you require to keep secret?
For example, I've seen a system that provides for storing secret strings in a database that works as follows:
Given plaintext string P, it forms an intermediate string of the form H:P, where H is a cryptographic hash of P. It then encrypts H:P using AES in CBC mode with a fixed IV and key. The resulting ciphertext is stored in a row in the database. The row ID is then used as a token to represent P.
The block size of the hash is the same size as the AES block size.
It seems to me that this is functionally equivalent to this scheme, which does not use a fixed IV:
For plaintext string P, generate an IV by taking a hash of P, xoring that with a fixed constant, and run that through AES in ECB mode using our key. The result will be the IV. Then encrypt the string :P using AES in CBC mode with that IV and our key. Store the result in the database, and also store the IV.
I realize that two identical plaintext messages will result in identical ciphertext, but in this application that is OK. If the system is asked to store a string it has previously stored, we want to recognize that the string is already stored and use the same token to represent it as before.