3 ms·
Or think of it in this way... One-time pad is the simplest, yet secure symmetric encryption algorithm, i.e, you have a 128-byte plaintext, you can take a 128-b
by bcaa7f3a8bbc 8y ago
Or think of it in this way...
One-time pad is the simplest, yet secure symmetric encryption algorithm, i.e, you have a 128-byte plaintext, you can take a 128-byte random string from your one-time pad, XOR it with your plaintext to encrypt it. As long as the random string is not shorter than the plaintext and not reused, the encryption is information-theoretic secure.
However, an one-time pad is often too problematic to be practical. First, the one-time pad has a large size (it needs to be larger the entire plaintext you want to encrypt), which is difficult to be stored and shared securely, also, the one-time pad needs to be created from a physical process, which takes time.
But if you have an algorithm to generate random number, you can just initialize it with a random seed, then the it starts to produce random strings of indefinite length, which can be used to create an one-time pad. Since the RNG algorithm is deterministic, only the short seed is needed to be shared between Alice and Bob. Subsequently, they can create their own copies of the identical one-time pad by running the algorithm with the same random seed.
Now, the one-time pad encryption algorithm is still the same one, the only difference is the pad is generated from a software random number generator, instead of a true random process. Therefore, the security of the encryption is reduced to the security properties of the random number generator. If the RNG is completely unpredictable and cryptographically secure (aka CSPRNG), it would be as good as true random strings.
You can take the step further, wrap the CSPRNG and the XOR function in a blackbox, call the blackbox a "cipher", and call the random seed of this CSPRNG as the "key", you've just created a "stream cipher".
In other words, the core of a stream cipher is a CSPRNG, which is used as an approximation of one-time pad. Historically, RC4, and now ChaCha, is widely used for both purposes.
When the CSPRNG does not produce uniformly-distributed random strings, bad things happen. RC4 is weak because of the existence of multiple types of biases in its random stream, same bytes appear more often that others.
If you traveled 300 years back in time, the first thing you would need to work on is a CSPRNG. When you have one, a strong stream cipher naturally appears. Luckily, you can make a random number generator from various forms of common permutations, like a deck of cards. https://en.wikipedia.org/wiki/Solitaire_(cipher) https://en.wikipedia.org/wiki/Solitaire_(cipher) If you use this algorithm, your communication would be safe for 100 years, as the cryptanalysis tools required to exploit the bias didn't exist from that time. Or even better, use the LC4 cipher, https://news.ycombinator.com/item?id=16586257 https://news.ycombinator.com/item?id=16586257, which the random number generator can be obtained by making a simple toy.