I'm a software developer working with hardware devices that are deployed on the field. Every now and then, I would need to update the hardware's firmware (upgrades, patches, etc)
I'm thinking of now, implementing a secure channel to upgrade this firmware, and for some checking to be performed by the hardware before accepting this firmware.
I have a basic understanding on key exchange protocols, encryption ciphers, etc, and that's about it. I do not necesarily know how to apply them in the real world, so I was hoping I could get some help here.
The firmware upgrade would be performed through a custom software that runs on the PC written by me, over TCP/IP.
My main goals are
- prevent the firmware from being leaked to public as it contains our IP.
- prevent the hardware from running other firmwares other than firmware released by me.
What I do know, on a high level point of view is
- To encrypt (with a pre defined shared secret key) the firmware on the PC software, and send it over ot the firmware.
- Once the firmware receives this encrypted data, it will decrypt it with the pre defined shared secret key, and performs the upgrade
My questions are:
- Is defining a shared secret key secure in this aspect?
- Is there a "bread n butter" solution to achieve my requirements?