Suppose I have the privilege to being able to physically meet a person that I want to communicate with beforehand. Suppose the person and I have minimal trust --- it could be the first time we get to know each other. We just want to communicate. Suppose the physical meeting is not monitored (honestly, it doesn't matter for public keys to be monitored, and we assume at least our information to each other isn't altered) and we can both be sure of each other's identity. What are the best ways to exchange some information, like our public keys? We would like to take advantage of this physical secure channel to exchange information. Therefore, using something on the Internet, like a key server that is relatively unsafe is not considered.
A few obstacles:
- Because of the minimal trust, it's hard for us to give each other data digitally, especially not through a drive, for the sake of possible attacks.
- I thought of printing the key in some readable form on paper. But for a reasonably long key (2048 bits) with hex representation, that would require typing 128 characters. More characters are needed if some meta information about the key is included. (And somehow, GPG outputs thousands of characters when exporting public keys with
--armor.) That creates a large chance of mistyping some character.
I do have some basic knowledge in modern cryptography. If the other person also does, then maybe we could do a key exchange physically using some protocol. But one problem is that we may need to prepare for it before meeting up. And the reality is that I might want to exchange information with people whom I just met. That is, I'd like to consider both prepared and unprepared situations.
Besides, I assume that we will be very careful to check the information we give each other. For example, we will double-check each character before typing the key on our computers. It is still possible to make a mistake somewhere, but to take advantage of it, an attacker first has to predict which character we make a mistake (not easy to predict), and then predict which character we may mistype it to (much easier to predict).