Having an issue with message signing.



  • Hello again

    I am having an issue with message signing. I have begun to expand my mysensors devices to include some actuators and sensors I want to secure. I have tried to get this to work, but keep hitting a wall.

    Here;s my set up for my testing. My mega Ethernet gateway with software backed signing enabled, and my Uno set up as a mock relay actuator with software backed signing enabled. If I set up MY_SIGNING_SIMPLE_PASSWD "blahblahblah", everything works great. As soon as thats disabled...nothing wants to talk to each other.

    How I have programmed the devices. On the gateway I ran the personalizer sketch and generated the HMAC and AES keys. I copied that info into the proper sections, disabled generate keys and enabled personalize soft. I then ran the personalizer on both the gateway and the node and received a "Succes" message.

    This is my gateway sketch.

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * REVISION HISTORY
     * Version 1.0 - Henrik EKblad
     * Contribution by a-lurker and Anticimex,
     * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
     * Contribution by Tomas Hozza <thozza@gmail.com>
     *
     *
     * DESCRIPTION
     * The EthernetGateway sends data received from sensors to the ethernet link.
     * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
     *
     * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
     *
     * LED purposes:
     * - To use the feature, uncomment MY_DEFAULT_xxx_LED_PIN in the sketch below
     * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
     * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
     * - ERR (red) - fast blink on error during transmission error or recieve crc error
     *
     * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
     *
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    #define MY_DEBUG_VERBOSE_SIGNING
    
    // Enable and select radio type attached
    #define MY_RADIO_RF24
    
    // Enable gateway ethernet module type
    #define MY_GATEWAY_W5100
    
    // W5100 Ethernet module SPI enable (optional if using a shield/module that manages SPI_EN signal)
    //#define MY_W5100_SPI_EN 4
    
    // Enable Soft SPI for NRF radio (note different radio wiring is required)
    // The W5100 ethernet module seems to have a hard time co-operate with
    // radio on the same spi bus.
    #if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
    #define MY_SOFTSPI
    #define MY_SOFT_SPI_SCK_PIN 14
    #define MY_SOFT_SPI_MISO_PIN 16
    #define MY_SOFT_SPI_MOSI_PIN 15
    #endif
    
    // When W5100 is connected we have to move CE/CSN pins for NRF radio
    #ifndef MY_RF24_CE_PIN
    #define MY_RF24_CE_PIN 5
    #endif
    #ifndef MY_RF24_CS_PIN
    #define MY_RF24_CS_PIN 6
    #endif
    
    // Enable UDP communication
    //#define MY_USE_UDP  // If using UDP you need to set MY_CONTROLLER_IP_ADDRESS below
    
    // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
    #define MY_IP_ADDRESS 192,168,1,69
    
    // If using static ip you can define Gateway and Subnet address as well
    #define MY_IP_GATEWAY_ADDRESS 192,168,1,1
    #define MY_IP_SUBNET_ADDRESS 255,255,255,0
    
    // Renewal period if using DHCP
    //#define MY_IP_RENEWAL_INTERVAL 60000
    
    // The port to keep open on node server mode / or port to contact in client mode
    #define MY_PORT 5003//
    
    // Controller ip address. Enables client mode (default is "server" mode).
    // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
    //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 254
    
    // The MAC address can be anything you want but should be unique on your network.
    // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
    // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
    #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    
    // Set LOW transmit power level as default, if you have an amplified NRF-module and
    // power your radio separately with a good regulator you can turn up PA level.
    #define MY_RF24_PA_LEVEL RF24_PA_MAX
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    #define MY_INCLUSION_BUTTON_FEATURE
    // Set inclusion mode duration (in seconds)
    #define MY_INCLUSION_MODE_DURATION 90
    
    // Digital pin used for inclusion mode button
    #define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Inverses the behavior of leds
    #define MY_WITH_LEDS_BLINKING_INVERSE
    
    // Flash leds on rx/tx/err
    // Uncomment to override default HW configurations
    #define MY_DEFAULT_ERR_LED_PIN 40  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  42  // Receive led pin
    #define MY_DEFAULT_TX_LED_PIN  44  // Transmit led pin
    
    #if defined(MY_USE_UDP)
    #include <EthernetUdp.h>
    #endif
    
    #define MY_SIGNING_SOFT
    #define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
    #define MY_SIGNING_SIMPLE_PASSWD "MyEmmaBemma2015" 
    #define MY_SIGNING_WEAK_SECURITY
    
    #include <Ethernet.h>
    #include <MyConfig.h>
    #include <MySensors.h>
    
    void setup()
    {
        // Setup locally attached sensors
    }
    
    void presentation()
    {
        // Present locally attached sensors here
    }
    
    void loop()
    {
        // Send locally attached sensors data here
    }
    

    When I run the gateway I get the following message in the serial monitor

    8732 TSF:MSG:BC
    8734 TSF:MSG:FPAR REQ,ID=22
    8736 TSF:CKU:OK,FCTRL
    8738 TSF:MSG:GWL OK
    9288 SGN:SKP:MSG CMD=3,TYPE=8
    9293 TSF:MSG:SEND,0-0-22-22,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
    9300 TSF:MSG:READ,6-6-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1
    9306 TSF:MSG:PINGED,ID=6,HP=1
    9308 SGN:SGN:NREQ=6
    9312 TSF:MSG:SEND,0-0-6-6,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1
    10048 TSF:MSG:READ,6-6-0,s=3,c=1,t=1,pt=7,l=5,sg=0:53.3
    10778 TSF:MSG:READ,22-22-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1
    10783 TSF:MSG:PINGED,ID=22,HP=1
    10786 SGN:SKP:MSG CMD=3,TYPE=25
    10791 TSF:MSG:SEND,0-0-22-22,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1
    10813 TSF:MSG:READ,22-22-0,s=255,c=3,t=15,pt=6,l=2,sg=0:0101
    10819 SGN:PRE:SGN REQ,FROM=22
    10822 SGN:PRE:SGN NREQ,TO=22
    10824 SGN:PRE:WHI NREQ,TO=22
    10827 SGN:SKP:MSG CMD=3,TYPE=15
    10834 TSF:MSG:SEND,0-0-22-22,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
    10842 SGN:PRE:XMT,TO=22
    10846 TSF:MSG:READ,22-22-0,s=255,c=0,t=17,pt=0,l=5,sg=0:2.3.0
    10856 TSF:MSG:READ,22-22-0,s=255,c=3,t=6,pt=1,l=1,sg=0:0
    12869 TSF:MSG:READ,22-22-0,s=255,c=3,t=11,pt=0,l=5,sg=0:Relay
    12879 TSF:MSG:READ,22-22-0,s=255,c=3,t=12,pt=0,l=3,sg=0:2.0
    12890 TSF:MSG:READ,22-22-0,s=1,c=0,t=3,pt=0,l=0,sg=0:
    12901 TSF:MSG:READ,22-22-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2
    12906 SGN:SKP:MSG CMD=3,TYPE=16
    12913 TSF:MSG:SEND,0-0-22-22,s=255,c=3,t=16,pt=0,l=0,sg=0,ft=0,st=OK:
    12919 SGN:SGN:NCE REQ,TO=22
    12940 TSF:MSG:READ,22-22-0,s=255,c=3,t=17,pt=6,l=25,sg=0:<NONCE>
    12946 SGN:NCE:FROM=22
    12948 SGN:BND:NONCE=B8E06B367486872EC1CE2CADBF969CAAE127BADED76DF0095DAAAAAAAAAAAAAA
    13035 SGN:BND:HMAC=0699DD1F9CE2830EC9F09D858D8AB9627DDA55AFBE587C1115A95C962E0AFFF1
    13043 SGN:SGN:SGN
    13048 TSF:MSG:SEND,0-0-22-22,s=255,c=3,t=27,pt=1,l=1,sg=1,ft=0,st=OK:1
    

    Here is my node sketch

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * REVISION HISTORY
     **** Dave Version 1
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    #define MY_DEBUG_VERBOSE_SIGNING
    
    // Enable and select radio type attached
    #define MY_RADIO_RF24
    //#define MY_RADIO_NRF5_ESB
    //#define MY_RADIO_RFM69
    //#define MY_RADIO_RFM95
    
    // Enable repeater functionality for this node
    //#define MY_REPEATER_FEATURE
    
    // Inverses the behavior of leds
    #define MY_WITH_LEDS_BLINKING_INVERSE
    
    // Flash leds on rx/tx/err
    // Uncomment to override default HW configurations
    #define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  5  // Receive led pin
    #define MY_DEFAULT_TX_LED_PIN  6  // the PCB, on board LED
    
    #define MY_NODE_ID 22
    
    // Select soft/hardware signing method
    #define MY_SIGNING_SOFT  //SOFTWARE BASED
    //#define MY_SIGNING_ATSHA204 //HARDWARE BASED
    
    #define MY_SIGNING_REQUEST_SIGNATURES
    
    //Hardware configuration for signing services
    #define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
    //#define MY_SIGNING_ATSHA204_PIN A3
    
    #define MY_SIGNING_SIMPLE_PASSWD "MyEmmaBemma2015"
    
    #include <MyConfig.h>
    #include <MySensors.h>
    #include <SPI.h>
    
    #define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 1// Total number of attached relays
    #define RELAY_ON 1  // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
    
    
    void before()
    {
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
            // Then set relay pins in output mode
            pinMode(pin, OUTPUT);
            // Set relay to last known state (using eeprom storage)
            digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
    }
    
    void setup()
    {
    
    }
    
    void presentation()
    {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Relay", "2.0");
    
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
            // Register all sensors to gw (they will be created as child devices)
            present(sensor, S_BINARY);
        }
    }
    
    
    void loop()
    {
    
    }
    
    void receive(const MyMessage &message)
    {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_STATUS) {
            // Change relay state
            digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
            // Store state in eeprom
            saveState(message.sensor, message.getBool());
            // Write some debug info
            Serial.print("Incoming change for sensor:");
            Serial.print(message.sensor);
            Serial.print(", New status: ");
            Serial.println(message.getBool());
        }
    }
    

    And this is the serial monitor output.

    |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
    | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
    | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
    |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
            |___/                      2.3.0
    
    16 MCO:BGN:INIT NODE,CP=RNNNAS--,VER=2.3.0
    25 MCO:BGN:BFR
    50 !SGN:PER:TAMPERED
    86 SGN:INI:BND OK
    87 TSM:INIT
    88 TSF:WUR:MS=0
    95 TSM:INIT:TSP OK
    97 TSM:INIT:STATID=22
    102 TSF:SID:OK,ID=22
    104 TSM:FPAR
    105 SGN:SGN:NREQ=255
    142 TSF:MSG:SEND,22-22-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    954 TSF:MSG:READ,0-0-22,s=255,c=3,t=8,pt=1,l=1,sg=0:0
    959 SGN:SKP:MSG CMD=3,TYPE=8
    962 TSF:MSG:FPAR OK,ID=0,D=1
    988 TSF:MSG:READ,6-6-22,s=255,c=3,t=8,pt=1,l=1,sg=0:1
    992 SGN:SKP:MSG CMD=3,TYPE=8
    1762 TSF:MSG:READ,1-1-22,s=255,c=3,t=8,pt=1,l=1,sg=0:1
    1767 SGN:SKP:MSG CMD=3,TYPE=8
    2150 TSM:FPAR:OK
    2151 TSM:ID
    2152 TSM:ID:OK
    2154 TSM:UPL
    2155 SGN:SGN:NREQ=0
    2161 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
    2176 TSF:MSG:READ,0-0-22,s=255,c=3,t=25,pt=1,l=1,sg=0:1
    2181 SGN:SKP:MSG CMD=3,TYPE=25
    2184 TSF:MSG:PONG RECV,HP=1
    2187 TSM:UPL:OK
    2188 TSM:READY:ID=22,PAR=0,DIS=1
    2191 SGN:PRE:SGN REQ
    2193 SGN:PRE:WHI NREQ
    2195 SGN:SGN:NREQ=0
    2198 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0101
    2205 SGN:PRE:XMT,TO=0
    2207 SGN:PRE:WAIT GW
    2217 TSF:MSG:READ,0-0-22,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    2223 SGN:SKP:MSG CMD=3,TYPE=15
    2226 SGN:SGN:NREQ=0
    2230 TSF:MSG:SEND,22-22-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.0
    2236 SGN:SGN:NREQ=0
    2242 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
    4248 SGN:SGN:NREQ=0
    4253 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=11,pt=0,l=5,sg=0,ft=0,st=OK:Relay
    4260 SGN:SGN:NREQ=0
    4264 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:2.0
    4271 SGN:SGN:NREQ=0
    4277 TSF:MSG:SEND,22-22-0-0,s=1,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4283 MCO:REG:REQ
    4284 SGN:SGN:NREQ=0
    4290 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
    4297 TSF:MSG:READ,0-0-22,s=255,c=3,t=16,pt=0,l=0,sg=0:
    4302 SGN:SKP:MSG CMD=3,TYPE=16
    4320 SGN:SGN:NREQ=0
    4327 TSF:MSG:SEND,22-22-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE>
    4334 SGN:NCE:XMT,TO=22
    4468 TSF:MSG:READ,0-0-22,s=255,c=3,t=27,pt=1,l=1,sg=1:1
    4473 !SGN:VER:STATE
    4475 !TSF:MSG:SIGN VERIFY FAIL
    4477 MCO:BGN:STP
    4480 MCO:BGN:INIT OK,TSP=1
    

    What am I missing here?


 

302
Online

7.7k
Users

8.6k
Topics

92.3k
Posts