Welcome to Unit 3.
In Units 1 and 2, we learned about symmetric ciphers and how to use them.
Symmetric ciphers assume that both parties have the same key.
The important property that makes them symmetric
is that the same key is used for encrypting and decrypting.
In some scenarios, this is okay.
When we talked about using symmetric ciphers to encrypt a file,
we could assume the same party is encrypting and decrypting the file,
so they can create and keep the key locally.
But when we talk about using symmetric ciphers for most applications
that involve more than 1 party, this is a big problem.
If Alice and Bob want to talk together,
they have to first agree on the secret key.
There has to be a way for Alice and Bob to
communicate that key without exposing it.
They can't send it over the insecure channel.
If they could send a secret key over an insecure channel, well,
they wouldn't need encryption at all.
In the early days, this was done by having a secret code book
that was physically distributed to the end points that were communicating.
With Colossus, this was the code book that had the keys for each day,
and that was physically distributed to the capitols where the Lorenz machines were.
With Enigma, this was physically distributed to all the ships,
and captains were under very strict orders to destroy those code books
any time their ship was in danger of being captured.
This was the most important thing to destroy on the ship
to make sure the enemy didn't capture the code book.
For most applications, especially any civil application in the day of internet,
distributing a physical code book or having 2 parties meet
in a secure place to exchange a key is not very practical.
What we want is some way to establish a secure key
or some way to enable 2 parties to communicate
that doesn't require that, so that's the main topic of this unit.
We're going to look at different ways that we could enable this kind of communication
without starting from advance where Alice and Bob have a shared key.
