Yesterday in my class we learnt how to send a message from Alice to Bob with the achieved goals of confidentiality, integrity and authenticity. In order to have a better performance we use a hybrid method with a symmetric and an asymmetric key.
Alice's and Bob's private Keys are signed by a Certification Authority (CA) -> Authenticity
The goal of integrity is assured thanks to the hash:
h = hash(M)
Confidentiality is used assured thanks to the usage of a symmetric key only known to Alice and Bob which was exchanged thanks to their asymmetric keys.
This all results in the following message - which Alice sends to Bob:
# public keys
K_A_E = public_key_Alice
K_B_E = public_key_Bob
K_B_E and K_A_E are signed by a CA.
# private keys
K_A_D = private_key_Alice
M = "our secret message"
h = hash(M)
K_AB = the_symmetric_key
this results in the message:
{K_AB}**K_B_E {{h}**K_A_D, M}**K_AB
I don't understand why it is necessary to start the message with {K_AB}**K_B_E
.
* Why it is necessary to prepend the symmetric key K_AB
at the beginning of the message?
* Is this symmetric key added to every message sent between Alice and Bob?
* Our lecturer mentioned that this way of encryption is used in OpenPGP. So does OpenPGP create a new symmetric key for every message?