I've taken an introductory cryptography course this semester. My inspiration for this project has been the TLS/SSL protocol, which negotiates a unique key for each session and encrypts the communication channel regardless of the data sent through it.
Aspects:
- Negotiating a different key for every exchange: Needs reliable duplex connectivity, hardware PRNG.
- Encryption: 128-bit / 256-bit AES
- Securing networks like 802.15.4 which also involve packet routing and are not exactly point-to-point.
- For the first prototype this may be a device sitting between the microcontroller and the RF transceiver that transparently encrypts and decrypts data so no large-scale changes to existing hardware would be needed.
- I think the nRF24L01s and RFM69s might be good candidates for initial prototypes.
Thanks to the comments on the project, I was directed to the Telehash library that pretty much covers these aspects. So I'm going to try to write a few good example scenarios of using Telehash with Arduino first, the idea being to make it easy to use E2E encryption.
The Deliverables:
- Level 1 - Getting Telehash to work over two Arduino and nRF24L01s.
- Level 2 - A library layer over the RF24 Arduino library for the nRF24L01, that handles the key negotiation and packet encryption transparently.
- Level 2 stretch - A SPI slave that shares the same command set as some of the popular RF modules (I'll start with the nRF24L01) and handles everything transparently. So no changes in user code.
I remember seeing that one. From what I understand, it's signed messages, not end-to-end encryption. The idea here is not just to sign messages but also ensure that it is encrypted in transit.
Signed + Encryption can also be done for extra security.
[EDIT: Read the section titled "Why encryption is not a part of this" on the forum post"]