Hi I am a research student working on securing the communications in Controlled Area Networks (CANs), and I am using Arduinos to simulate one of these CANs.
My goal is to use HMAC to implement message authentication of packets, and the algorithm must be very fast (I was originally thinking of using FNV1a). However, there are no Arduino libraries for this (I found one, but it uses SHA which will most likely be too slow for CAN). I don't have a lot of practice with cryptography and hash algorithms, only usage of them.
So basically, I need help writing a FNV or FNV1a function in C. The message for input will be a key (obviously) concatenated with a string (char array). Also, I need the hash to be between 128 and 256 bits for sufficient security.
Just as a side note: A CAN message/packet looks like 7df#02010d and the actual data part, 010d (two bytes) is the char array I will be using. For example, as integers, the array for 010d would be {1, 13}.
--
I also know this message applies more to cryptography than Arduino, but I figured someone from this community might have more experience with my particular task, or even have/know of a library I can use that I hadn't found.
-Thanks
EDIT: I found this FNV1a implementation in C/C++ that might work. But I have not tested it yet.
-
HMAC = Hash-based Message Authentication CodeDave X– Dave X2016年06月16日 19:12:57 +00:00Commented Jun 16, 2016 at 19:12
1 Answer 1
I ended finding a Arduino library called Spritz which can be found here:
https://github.com/abderraouf-adjal/ArduinoSpritzCipher
Also, for anyone else who comes across this task, here is a very simple Hashed Message Authentication Code (HMAC) example I scrapped together:
https://github.com/zach-king/ArduinoStash/blob/master/src/Spritz_HMAC/Spritz_HMAC.ino
This library supports encryption as well, which is nice, but not needed in my case.
--EDIT--
The SpritzCipher library was actually too slow (about a 50% reduction in network speed) so I must try a different approach. I have found a MD5 library for Arduino which I will try next:
https://github.com/tzikis/ArduinoMD5
-
How did ArduinoMD5 implementation go?mixdev– mixdev2018年04月24日 17:30:58 +00:00Commented Apr 24, 2018 at 17:30
-
1@mixdev It's been a couple of years now so I don't remember the exact details of the performance, but I believe I did end up going with the MD5 implementation. MD5 was sufficient for speed and bit-length security for my purposes.Zach King– Zach King2018年04月24日 21:25:27 +00:00Commented Apr 24, 2018 at 21:25