Lets assume the following setup:
A vendor manufactures IoT devices where each is able to generate an individual private/public key-pair. Only the public key is exposed, the private key is assumed to be secured inside the device. A database of those public keys is provided by the vendor and is transfered to each client out-of-band.
For each connection to a device the client:
- gets the ID of the target device
- looks up the public key
- encryptes a new symmetric key (e.g. AES) with the public key
- transfers it, the AES-encrypted data and an AES-encrypted MAC
- (further bidirectional data transfers)
Only the selected device can decrypt the symmetric key and thus the rest of the data. Data integrity is verifyed by the MAC.
An attack can happen anytime after the devices were deployed in the field, but please focus on the protocol. Physical side channal attacks or other modifications of the devices themselves should not be considered. The vendor is trusted. Client authentication is not needed.
What are the advantages of a TLS handshake compared to pre-shared public keys?
The simple public key database would be replaced with certificates signed by the vendor to authenticate the devices.
Perfect forward secrecy would be an advantage, other extra features of TLS (like cipher suite selection or session resumption) are not needed.