Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. [security] Introducing signing support to MySensors

[security] Introducing signing support to MySensors

Scheduled Pinned Locked Moved Development
security
491 Posts 48 Posters 334.0k Views 30 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AnticimexA Offline
    AnticimexA Offline
    Anticimex
    Contest Winner
    wrote on last edited by
    #175

    Ok, the problem is identified and @fleinze has provided a fix that resolves the issue which is now merged to the development branch.
    Thanks for finding the issue and fixing it!
    There is no change in the signing behavior as it is documented. Now gateway does as it is supposed to.

    Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

    1 Reply Last reply
    1
    • mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #176

      Great work @fleinze and @Anticimex !
      Reading this thread (yes, all of it) has made me ready to start configuring my nodes to use signing. Better start now, while my sensor network is still small :)

      1 Reply Last reply
      0
      • FotoFieberF Offline
        FotoFieberF Offline
        FotoFieber
        Hardware Contributor
        wrote on last edited by
        #177

        Compiling with the latest dev branch SecureActuator example

        #define MY_SIGNING_REQUEST_SIGNATURES

        I get following error:

        In file included from /Users/mm/Documents/Arduino165/libraries/MySensors/MySensor.h:157:0,
                         from SecureActuator.ino:58:
        /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp: In function 'void transportProcess()':
        /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp:92:10: error: 'MY_IS_GATEWAY' was not declared in this scope
            if ((!MY_IS_GATEWAY || DO_SIGN(sender)) &&
                  ^
        /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp:93:20: error: 'nc' was not declared in this scope
             destination == nc.nodeId &&
                            ^
        Fehler beim Kompilieren.```
        
        Is this a problem of the code or of my setup?
        AnticimexA 1 Reply Last reply
        0
        • FotoFieberF FotoFieber

          Compiling with the latest dev branch SecureActuator example

          #define MY_SIGNING_REQUEST_SIGNATURES

          I get following error:

          In file included from /Users/mm/Documents/Arduino165/libraries/MySensors/MySensor.h:157:0,
                           from SecureActuator.ino:58:
          /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp: In function 'void transportProcess()':
          /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp:92:10: error: 'MY_IS_GATEWAY' was not declared in this scope
              if ((!MY_IS_GATEWAY || DO_SIGN(sender)) &&
                    ^
          /Users/mm/Documents/Arduino165/libraries/MySensors/core/MyTransport.cpp:93:20: error: 'nc' was not declared in this scope
               destination == nc.nodeId &&
                              ^
          Fehler beim Kompilieren.```
          
          Is this a problem of the code or of my setup?
          AnticimexA Offline
          AnticimexA Offline
          Anticimex
          Contest Winner
          wrote on last edited by
          #178

          @FotoFieber @hek something related to the recent refactoring? I have not had the opportunity to evaluate the effects on signing myself.

          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

          1 Reply Last reply
          0
          • hekH Offline
            hekH Offline
            hek
            Admin
            wrote on last edited by
            #179

            @FotoFieber said:

            MY_SIGNING_REQUEST_SIGNATURES

            Let's see how Jenkins feels about this
            https://github.com/mysensors/Arduino/pull/231

            1 Reply Last reply
            0
            • A Offline
              A Offline
              Avamander
              wrote on last edited by
              #180

              @Anticimex Hello, I found this thread now. I'll ask a few more questions, sorry. This all seems really-really great.

              1. If someone wishes to use TMRh20's RF24Mesh instead of MySensors how would one sign the messages sent with that library? Is is even possible? What should be done to use that functionality?

              2. Also, as I understand it is possible to emulate the ATSHA204A, on what hardware is is possible (on Uno's ATMega too?)?

              3. Is it also possible to use whitelisting with RF24Mesh somehow?

              Again, sorry for any dumb questions and my poor English.

              AnticimexA 1 Reply Last reply
              0
              • A Avamander

                @Anticimex Hello, I found this thread now. I'll ask a few more questions, sorry. This all seems really-really great.

                1. If someone wishes to use TMRh20's RF24Mesh instead of MySensors how would one sign the messages sent with that library? Is is even possible? What should be done to use that functionality?

                2. Also, as I understand it is possible to emulate the ATSHA204A, on what hardware is is possible (on Uno's ATMega too?)?

                3. Is it also possible to use whitelisting with RF24Mesh somehow?

                Again, sorry for any dumb questions and my poor English.

                AnticimexA Offline
                AnticimexA Offline
                Anticimex
                Contest Winner
                wrote on last edited by
                #181

                @Avamander

                1. Signing as described in this post is specific to users of the MySensors library. I suppose you could use any rf backend you like but you will need to use the MySensors library to get the nonce exchange and such. Or manually port the signing specifics out from the MySensors library and integrate them into another library. It's all open source.
                2. The software emulated atsha signing backend (for MySensors) is compatible with any Arduino product.
                3. See 1.

                Lastly, there are no dumb questions, only dumb answers :)

                Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Silver978
                  wrote on last edited by
                  #182

                  Hello,

                  firstly, I must say that you're doing a great job and this section about security is very interesting.
                  Sorry, but I want to ask a question: as regards the whitelisting system, how can I add more nodes to the list of the trusted nodes of the gateway?
                  The part of code is this:

                  [...]
                  #ifdef MY_SECURE_NODE_WHITELISTING
                  whitelist_entry_t node_whitelist[] = {
                    { //I want to add nodes HERE:
                      .nodeId = 55, // Just some value, this need to be changed  to the NodeId of the trusted node
                      .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} } // This need to change to the serial of the trusted node
                  };
                  MySigningAtsha204 signer(true, 1, node_whitelist);  // Select ATSHA204A software signing backend with one entry in the whitelist
                  [...]
                  

                  but the gateway continue to fail the verification of the trusted nodes that I inserted.

                  To sum up, how can I add more nodeIDs and serials in addition to the number "55" presented in the example of the code?

                  Thank you very much in advance,
                  Silver978

                  AnticimexA 1 Reply Last reply
                  1
                  • S Silver978

                    Hello,

                    firstly, I must say that you're doing a great job and this section about security is very interesting.
                    Sorry, but I want to ask a question: as regards the whitelisting system, how can I add more nodes to the list of the trusted nodes of the gateway?
                    The part of code is this:

                    [...]
                    #ifdef MY_SECURE_NODE_WHITELISTING
                    whitelist_entry_t node_whitelist[] = {
                      { //I want to add nodes HERE:
                        .nodeId = 55, // Just some value, this need to be changed  to the NodeId of the trusted node
                        .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} } // This need to change to the serial of the trusted node
                    };
                    MySigningAtsha204 signer(true, 1, node_whitelist);  // Select ATSHA204A software signing backend with one entry in the whitelist
                    [...]
                    

                    but the gateway continue to fail the verification of the trusted nodes that I inserted.

                    To sum up, how can I add more nodeIDs and serials in addition to the number "55" presented in the example of the code?

                    Thank you very much in advance,
                    Silver978

                    AnticimexA Offline
                    AnticimexA Offline
                    Anticimex
                    Contest Winner
                    wrote on last edited by Anticimex
                    #183

                    @Silver978 Thanks!
                    Try something like this:

                    whitelist_entry_t node_whitelist[] = {
                      {
                        .nodeId = 55, // Just some value, this need to be changed  to the NodeId of the trusted node
                        .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} // This need to change to the serial of the trusted node
                      },
                      {
                        .nodeId = 56, // Just some value, this need to be changed  to the NodeId of the trusted node
                        .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} // This need to change to the serial of the trusted node
                      },
                      {
                        .nodeId = 57, // Just some value, this need to be changed  to the NodeId of the trusted node
                        .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} // This need to change to the serial of the trusted node
                      }
                    };
                    MySigningAtsha204 signer(true, 3, node_whitelist);  // Select ATSHA204A software signing backend with three entries in the whitelist
                    
                    

                    Note the changed argument in the constructor (3 and not 1)

                    Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                    1 Reply Last reply
                    1
                    • S Offline
                      S Offline
                      Silver978
                      wrote on last edited by
                      #184

                      @Anticimex I tried also this syntax but I haven't changed the argument of the signer, so that number indicates how many nodes the gateway must trust?
                      Thank you!

                      AnticimexA 1 Reply Last reply
                      0
                      • S Silver978

                        @Anticimex I tried also this syntax but I haven't changed the argument of the signer, so that number indicates how many nodes the gateway must trust?
                        Thank you!

                        AnticimexA Offline
                        AnticimexA Offline
                        Anticimex
                        Contest Winner
                        wrote on last edited by
                        #185

                        @Silver978 The number gives the number of entries in the whitelist the backend is expected to iterate over. Having a number for this allows the use of a potenitally very large whitelist but where "uninteresting" entries to this particular node can be ignored by having them last in the list and make sure the number does not cover those entries when searching the list.

                        Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          Silver978
                          wrote on last edited by
                          #186

                          @Anticimex Perfect, understood! Very good explanation and super-fast support, fantastic :)
                          Thank you very much again!

                          AnticimexA 1 Reply Last reply
                          0
                          • S Silver978

                            @Anticimex Perfect, understood! Very good explanation and super-fast support, fantastic :)
                            Thank you very much again!

                            AnticimexA Offline
                            AnticimexA Offline
                            Anticimex
                            Contest Winner
                            wrote on last edited by
                            #187

                            @Silver978 :+1:

                            Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                            1 Reply Last reply
                            0
                            • siodS Offline
                              siodS Offline
                              siod
                              wrote on last edited by siod
                              #188

                              I would like to add security to my sensor network as well so I am very glad I found your thread. Your explanation are very detailed but I´m a guy who needs more practical examples. For example I would like to know, where exactly I have to activate this. I am using an arduino as an MQTT to Ethernet gateway and Mosquitto running on a raspberry pi. So all I have to do is activate the soft version in Myconfig.h, if not already activated, set a serial, re-upload to my arduino gateway and that´s it? I guess the Nodes have to get flashed again to get the serials as well, right?

                              still learning...

                              AnticimexA 1 Reply Last reply
                              0
                              • siodS siod

                                I would like to add security to my sensor network as well so I am very glad I found your thread. Your explanation are very detailed but I´m a guy who needs more practical examples. For example I would like to know, where exactly I have to activate this. I am using an arduino as an MQTT to Ethernet gateway and Mosquitto running on a raspberry pi. So all I have to do is activate the soft version in Myconfig.h, if not already activated, set a serial, re-upload to my arduino gateway and that´s it? I guess the Nodes have to get flashed again to get the serials as well, right?

                                AnticimexA Offline
                                AnticimexA Offline
                                Anticimex
                                Contest Winner
                                wrote on last edited by
                                #189

                                @siod correct. You have to activate signing in both ends. The serial numbers you only need of you want to use whitelisting which is a bit more complex to set up. At the very least, for software signing, you need to enable it, have an unconnected analog pin on your boards, and set a hmac key.

                                Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                1 Reply Last reply
                                0
                                • AnticimexA Offline
                                  AnticimexA Offline
                                  Anticimex
                                  Contest Winner
                                  wrote on last edited by
                                  #190

                                  EDIT: Topic post updates with a documentation link for those using the development branch.

                                  Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                  1 Reply Last reply
                                  0
                                  • ahmedadelhosniA Offline
                                    ahmedadelhosniA Offline
                                    ahmedadelhosni
                                    wrote on last edited by
                                    #191

                                    Great topic as usual. I have a question please.

                                    You mentioned "Because it is pure-software however, it does not provide as good nonces (it uses the Arduino pseudo-random generator) and the HMAC key is stored in SW and is therefore readable if the memory is dumped. "

                                    Isn't this case also dangerous if the node which contains ATSHA chip was stolen ? The attacker will use the chip to be on the network ?

                                    Thanks.

                                    AnticimexA 1 Reply Last reply
                                    0
                                    • ahmedadelhosniA ahmedadelhosni

                                      Great topic as usual. I have a question please.

                                      You mentioned "Because it is pure-software however, it does not provide as good nonces (it uses the Arduino pseudo-random generator) and the HMAC key is stored in SW and is therefore readable if the memory is dumped. "

                                      Isn't this case also dangerous if the node which contains ATSHA chip was stolen ? The attacker will use the chip to be on the network ?

                                      Thanks.

                                      AnticimexA Offline
                                      AnticimexA Offline
                                      Anticimex
                                      Contest Winner
                                      wrote on last edited by
                                      #192

                                      @ahmedadelhosni thanks!
                                      Correct. That is why I also implemented whitelisting and node revocation. It's all described in the topic (and for development branch in doxygen, linked in the topic).

                                      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                      ahmedadelhosniA 1 Reply Last reply
                                      0
                                      • AnticimexA Anticimex

                                        @ahmedadelhosni thanks!
                                        Correct. That is why I also implemented whitelisting and node revocation. It's all described in the topic (and for development branch in doxygen, linked in the topic).

                                        ahmedadelhosniA Offline
                                        ahmedadelhosniA Offline
                                        ahmedadelhosni
                                        wrote on last edited by
                                        #193

                                        @Anticimex Thanks.

                                        So this gets me to my next question :)

                                        What I understood is that if I use whitelisting, I need to know the node ID of my sensor door to define it in the GW, correct ?
                                        I guess the below code is in the GW.

                                        whitelist_entry_t node_whitelist[] = {
                                          { .nodeId = 55, // Just some value, this need to be changed  to the NodeId of the trusted node
                                            .serial = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09} } // This need to change to the serial of the trusted node
                                        };
                                        

                                        another question, If I want to remove this node, do I have to reflash the GW and remove it ?

                                        1 Reply Last reply
                                        0
                                        • AnticimexA Offline
                                          AnticimexA Offline
                                          Anticimex
                                          Contest Winner
                                          wrote on last edited by
                                          #194

                                          Yes.

                                          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                          ahmedadelhosniA 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          17

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.0k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular