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. Hardware
  3. Security OTA Sketch

Security OTA Sketch

Scheduled Pinned Locked Moved Hardware
19 Posts 2 Posters 84 Views 2 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.
  • AndurilA Offline
    AndurilA Offline
    Anduril
    wrote on last edited by
    #3

    ohh sorry, I was not completely clear: I will use RFM96 with DualOptiboot bootloader. I can upload the SecurityPersonalizer followed by the correct sketch. But it takes some effort, as I need to connect ISP/FTDI. Therefore I thought about compiling a hex file with DualOptibootloader, Personalizer sketch with running MySensors (not only core) and #define MY_OTA_FIRMWARE_FEATURE

    AnticimexA 1 Reply Last reply
    0
    • AndurilA Anduril

      ohh sorry, I was not completely clear: I will use RFM96 with DualOptiboot bootloader. I can upload the SecurityPersonalizer followed by the correct sketch. But it takes some effort, as I need to connect ISP/FTDI. Therefore I thought about compiling a hex file with DualOptibootloader, Personalizer sketch with running MySensors (not only core) and #define MY_OTA_FIRMWARE_FEATURE

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

      @Anduril that should be doable.

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

      1 Reply Last reply
      0
      • AndurilA Offline
        AndurilA Offline
        Anduril
        wrote on last edited by
        #5

        well I did a first test, without result. Maybe someone can help:
        I did run the Personalizer with #define GENERATE_KEYS_ATSHA204A and generated some keys. I added those to the #define MY_XXX_KEY and got a confirmation. But it seems to not start up the radio, there is no output in the node or the 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-2019 Sensnology AB
         * Full contributor list: https://github.com/mysensors/MySensors/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.
         *
         */
        /**
         * @ingroup MySigninggrp
         * @{
         * @file SecurityPersonalizer.ino
         * @brief Security personalization sketch
         *
         * REVISION HISTORY
         *  - See git log (git log libraries/MySensors/examples/SecurityPersonalizer/SecurityPersonalizer.ino)
         */
        
        /**
         * @example SecurityPersonalizer.ino
         * This sketch will personalize either none-volatile memory or ATSHA204A for security functions
         * available in the MySensors library.<br>
         * Details on personalization procedure is given in @ref personalization.<br>
         * This sketch will when executed without modifications also print a guided workflow on the UART.
         */
        
        #include "sha204_library.h"
        #include "sha204_lib_return_codes.h"
        /** @brief Make use of the MySensors framework without invoking the entire system */
        //#define MY_CORE_ONLY
        #define MY_RADIO_RFM69
        #define MY_OTA_FIRMWARE_FEATURE
        #define MY_BAUD_RATE      38400
        #include <MySensors.h>
        
        /************************************ User defined key data ***************************************/
        
        /** @brief The user-defined HMAC key to use unless @ref GENERATE_HMAC_KEY is set */
        #define MY_HMAC_KEY 0x01,0x02,0x03,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
        
        /** @brief The user-defined AES key to store in EEPROM unless @ref GENERATE_AES_KEY is set */
        #define MY_AES_KEY 0x06,0x07,0x08,0x09,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
        
        /** @brief The user-defined soft serial to use for soft signing unless @ref GENERATE_SOFT_SERIAL is set */
        #define MY_SOFT_SERIAL 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
        
        /***************************** Flags for guided personalization flow ******************************/
        
        /**
         * @def GENERATE_KEYS_ATSHA204A
         * @brief Default settings for generating keys using ATSHA204A
         *
         * @note The generated keys displayed in the serial log with this setting needs to be written down
         *       and transferred to all nodes this gateway will communicate with. This is mandatory for ALL
         *       nodes for encryption (AES key). For signing (HMAC key) it is only required for nodes that
         *       use signing. Typically you set the values for @ref MY_HMAC_KEY and @ref MY_AES_KEY.
         */
        //#define GENERATE_KEYS_ATSHA204A
        
        /**
         * @def GENERATE_KEYS_SOFT
         * @brief Default settings for generating keys using software
         *
         * @b Important<br>
         * You will need to ensure @ref MY_SIGNING_SOFT_RANDOMSEED_PIN is set to an unconnected analog pin
         * in order to provide entropy to the software RNG if your hardware has no HWRNG.
         *
         * @note The generated keys displayed in the serial log with this setting needs to be written down
         *       and transferred to all nodes this gateway will communicate with. This is mandatory for ALL
         *       nodes for encryption (AES key). For signing (HMAC key) it is only required for nodes that
         *       use signing. Typically you set the values for @ref MY_HMAC_KEY and @ref MY_AES_KEY.
         */
        //#define GENERATE_KEYS_SOFT
        
        /**
         * @def PERSONALIZE_ATSHA204A
         * @brief Default settings for personalizing an ATSHA204A
         *
         * It is assumed that you have updated @ref MY_HMAC_KEY and @ref MY_AES_KEY with the keys displayed
         * when executing this sketch with @ref GENERATE_KEYS_ATSHA204A or @ref GENERATE_KEYS_SOFT defined.
         */
        #define PERSONALIZE_ATSHA204A
        
        /**
         * @def PERSONALIZE_SOFT
         * @brief Default settings for personalizing EEPROM for software signing
         *
         * It is assumed that you have updated @ref MY_HMAC_KEY and @ref MY_AES_KEY with the keys displayed
         * when executing this sketch with @ref GENERATE_KEYS_ATSHA204A or @ref GENERATE_KEYS_SOFT defined.
         */
        //#define PERSONALIZE_SOFT
        
        /**
         * @def PERSONALIZE_SOFT_RANDOM_SERIAL
         * @brief This is an alternative to @ref PERSONALIZE_SOFT which will also store a randomly generated
         * serial to EEPROM in addition to the actions performed by @ref PERSONALIZE_SOFT. Take note of the
         * generated soft serial as it will be needed if you plan to use whitelisting. It should be
         * unique for each node.
         *
         * @note This is only needed for targets that lack unique device IDs. The sketch will inform you if
         *       there is a need for generating a random serial or not. Check the "Hardware security
         *       peripherals" listing. If a target has a unique device ID and a serial in EEPROM, the serial
         *       in EEPROM will be used. If erased (replaced with FF:es) the unique device ID will be used
         *       instead.
         */
        //#define PERSONALIZE_SOFT_RANDOM_SERIAL
        
        /*************************** The settings below are for advanced users ****************************/
        /**
         * @def USE_SOFT_SIGNING
         * @brief Uncomment this to generate keys by software and store them to EEPROM instead of ATSHA204A
         */
        //#define USE_SOFT_SIGNING
        
        /**
         * @def LOCK_ATSHA204A_CONFIGURATION
         * @brief Uncomment this to enable locking the ATSHA204A configuration zone
         *
         * It is still possible to change the key, and this also enable random key generation.
         * @warning BE AWARE THAT THIS PREVENTS ANY FUTURE CONFIGURATION CHANGE TO THE CHIP
         */
        //#define LOCK_ATSHA204A_CONFIGURATION
        
        /**
         * @def SKIP_UART_CONFIRMATION
         * @brief Uncomment this for boards that lack UART
         *
         * This will disable additional confirmation for actions that are non-reversible.
         *
         * @b Important<br> For ATSHA204A, no confirmation will be required for locking any zones with this
         * configuration! Also, if you generate keys on a board without UART, you have no way of determining
         * what the key is unless it is stored in EEPROM.
         */
        //#define SKIP_UART_CONFIRMATION
        
        /**
         * @def GENERATE_HMAC_KEY
         * @brief Uncomment this to generate a random HMAC key using ATSHA204A or software depending on
         *        @ref USE_SOFT_SIGNING
         * @note If not enabled, key defined by @ref MY_HMAC_KEY will be used instead.
         */
        //#define GENERATE_HMAC_KEY
        
        /**
         * @def STORE_HMAC_KEY
         * @brief Uncomment this to store HMAC key to ATSHA204A or EEPROM depending on @ref USE_SOFT_SIGNING
         */
        //#define STORE_HMAC_KEY
        
        /**
         * @def GENERATE_AES_KEY
         * @brief Uncomment this to generate a random AES key using ATSHA204A or software depending on
         * @ref USE_SOFT_SIGNING
         * @note If not enabled, key defined by @ref MY_AES_KEY will be used instead.
         */
        //#define GENERATE_AES_KEY
        
        /**
         * @def STORE_AES_KEY
         * @brief Uncomment this to store AES key to EEPROM
         */
        //#define STORE_AES_KEY
        
        /**
         * @def GENERATE_SOFT_SERIAL
         * @brief Uncomment this to generate a random serial number for software signing
         * @note If not enabled, serial defined by @ref MY_SOFT_SERIAL will be used instead.
         */
        //#define GENERATE_SOFT_SERIAL
        
        /**
         * @def STORE_SOFT_SERIAL
         * @brief Uncomment this to store the serial number to EEPROM
         */
        //#define STORE_SOFT_SERIAL
        
        /**
         * @def PRINT_DETAILED_ATSHA204A_CONFIG
         * @brief Uncomment to print the detailed ATSHA204A configuration
         */
        #define PRINT_DETAILED_ATSHA204A_CONFIG
        
        /**
         * @def RESET_EEPROM_PERSONALIZATION
         * @brief Uncomment to reset the personalization data in EEPROM to 0xFF:es
         */
        //#define RESET_EEPROM_PERSONALIZATION
        
        /********************* Guided mode flag configurations (don't change these) ***********************/
        #ifdef GENERATE_KEYS_ATSHA204A
        #define LOCK_ATSHA204A_CONFIGURATION // We have to lock configuration to enable random number generation
        #define GENERATE_HMAC_KEY // Generate random HMAC key
        #define GENERATE_AES_KEY // Generate random AES key
        #define SKIP_UART_CONFIRMATION // This is an automated mode
        #endif
        
        #ifdef GENERATE_KEYS_SOFT
        #define USE_SOFT_SIGNING // Use software backend
        #define GENERATE_HMAC_KEY // Generate random HMAC key
        #define GENERATE_AES_KEY // Generate random AES key
        #define SKIP_UART_CONFIRMATION // This is an automated mode
        #endif
        
        #ifdef PERSONALIZE_ATSHA204A
        #define LOCK_ATSHA204A_CONFIGURATION // We have to lock configuration to enable random number generation
        #define STORE_HMAC_KEY // Store the HMAC key
        #define STORE_AES_KEY // Store the AES key
        #define SKIP_UART_CONFIRMATION // This is an automated mode
        #endif
        
        #ifdef PERSONALIZE_SOFT_RANDOM_SERIAL
        #define GENERATE_SOFT_SERIAL // Generate a soft serial number
        #define PERSONALIZE_SOFT // Do the rest as PERSONALIZE_SOFT
        #endif
        
        #ifdef PERSONALIZE_SOFT
        #define USE_SOFT_SIGNING // Use software backend
        #define STORE_HMAC_KEY // Store the HMAC key
        #define STORE_AES_KEY // Store the AES key
        #define STORE_SOFT_SERIAL // Store the soft serial number
        #define SKIP_UART_CONFIRMATION // This is an automated mode
        #endif
        
        #if defined(GENERATE_HMAC_KEY) || defined(GENERATE_AES_KEY) || defined(GENERATE_SOFT_SERIAL)
        #define GENERATE_SOMETHING
        #endif
        
        #if defined(MY_LOCK_MCU)
        #undefine MY_LOCK_MCU  // The Sketch after SecurityPersonaliter should lock the MCU
        #endif
        
        /********************************** Preprocessor sanitychecks *************************************/
        #if defined(GENERATE_SOFT_SERIAL) && !defined(USE_SOFT_SIGNING)
        #error Cannot generate soft serial using ATSHA204A, use USE_SOFT_SINGING for this
        #endif
        #if defined(STORE_SOFT_SERIAL) && !defined(USE_SOFT_SIGNING)
        #error Cannot store soft serial to ATSHA204A, use USE_SOFT_SINGING for this
        #endif
        #if defined(PRINT_DETAILED_ATSHA204A_CONFIG) && defined(USE_SOFT_SIGNING)
        #error Cannot print ATSHA204A config using software signing flag, disable USE_SOFT_SINGING for this
        #endif
        #if defined(LOCK_ATSHA204A_CONFIGURATION) && defined(USE_SOFT_SIGNING)
        #error Cannot lock ATSHA204A config using software signing flag, disable USE_SOFT_SINGING for this
        #endif
        #ifdef GENERATE_KEYS_ATSHA204A
        #ifdef USE_SOFT_SIGNING
        #error You cannot select soft signing if you want to generate keys using ATSHA204A
        #endif
        #ifdef STORE_HMAC_KEY
        #error Disable STORE_SOFT_KEY, you should not store keys in this mode
        #endif
        #ifdef STORE_SOFT_SERIAL
        #error Disable STORE_SOFT_SERIAL, you should not store serial in this mode
        #endif
        #ifdef STORE_AES_KEY
        #error Disable STORE_AES_KEY, you should not store keys in this mode
        #endif
        #if defined(GENERATE_KEYS_SOFT) ||\
        		defined (PERSONALIZE_ATSHA204A) ||\
        		defined (PERSONALIZE_SOFT) ||\
        		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
        #error You can not enable GENERATE_KEYS_ATSHA204A together with other guided modes
        #endif
        #endif // GENERATE_KEYS_ATSHA204A
        #ifdef GENERATE_KEYS_SOFT
        #ifdef STORE_HMAC_KEY
        #error Disable STORE_SOFT_KEY, you should not store keys in this mode
        #endif
        #ifdef STORE_SOFT_SERIAL
        #error Disable STORE_SOFT_SERIAL, you should not store serial in this mode
        #endif
        #ifdef STORE_AES_KEY
        #error Disable STORE_AES_KEY, you should not store keys in this mode
        #endif
        #ifndef MY_SIGNING_SOFT_RANDOMSEED_PIN
        #error You have to set MY_SIGNING_SOFT_RANDOMSEED_PIN to a suitable value in this mode
        #endif
        #if defined(GENERATE_KEYS_ATSHA204A) ||\
        		defined (PERSONALIZE_ATSHA204A) ||\
        		defined (PERSONALIZE_SOFT) ||\
        		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
        #error You can not enable GENERATE_KEYS_SOFT together with other guided modes
        #endif
        #endif // GENERATE_KEYS_SOFT
        #ifdef PERSONALIZE_ATSHA204A
        #ifdef USE_SOFT_SIGNING
        #error You cannot select soft signing if you want to personalize an ATSHA204A
        #endif
        #if defined(GENERATE_KEYS_ATSHA204A) ||\
        		defined (GENERATE_KEYS_SOFT) ||\
        		defined (PERSONALIZE_SOFT) ||\
        		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
        #error You can not enable PERSONALIZE_ATSHA204A together with other guided modes
        #endif
        #ifdef RESET_EEPROM_PERSONALIZATION
        #error You cannot reset EEPROM personalization when personalizing a device
        #endif
        #endif // PERSONALIZE_ATSHA204A
        #ifdef PERSONALIZE_SOFT
        #if defined(GENERATE_KEYS_ATSHA204A) ||\
        		defined (GENERATE_KEYS_SOFT) ||\
        		defined (PERSONALIZE_ATSHA204A)
        #error You can not enable PERSONALIZE_SOFT together with other guided modes
        #endif
        #ifdef RESET_EEPROM_PERSONALIZATION
        #error You cannot reset EEPROM personalization when personalizing a device
        #endif
        #endif // PERSONALIZE_SOFT
        #ifdef PERSONALIZE_SOFT_RANDOM_SERIAL
        #if defined(GENERATE_KEYS_SOFT) ||\
        		defined (PERSONALIZE_ATSHA204A) ||\
        		defined (GENERATE_KEYS_ATSHA204A)
        #error You can only enable one of the guided modes at a time
        #endif
        #ifdef RESET_EEPROM_PERSONALIZATION
        #error You cannot reset EEPROM personalization when personalizing a device
        #endif
        #endif // PERSONALIZE_SOFT_RANDOM_SERIAL
        
        #if !defined(GENERATE_KEYS_ATSHA204A) &&\
        		!defined(GENERATE_KEYS_SOFT) &&\
        		!defined(PERSONALIZE_ATSHA204A) &&\
        		!defined(PERSONALIZE_SOFT) &&\
        		!defined(PERSONALIZE_SOFT_RANDOM_SERIAL) &&\
        		!defined(USE_SOFT_SIGNING) &&\
        		!defined(LOCK_ATSHA204A_CONFIGURATION) &&\
        		!defined(SKIP_UART_CONFIRMATION) &&\
        		!defined(GENERATE_HMAC_KEY) &&\
        		!defined(STORE_HMAC_KEY) &&\
        		!defined(GENERATE_SOFT_SERIAL) &&\
        		!defined(STORE_SOFT_SERIAL) &&\
        		!defined(GENERATE_AES_KEY) &&\
        		!defined(STORE_AES_KEY) &&\
        		!defined(PRINT_DETAILED_ATSHA204A_CONFIG) &&\
        		!defined(RESET_EEPROM_PERSONALIZATION)
        /** @brief Set when there are no config flags defined */
        #define NO_SETTINGS_DEFINED
        #endif
        
        #if defined(GENERATE_KEYS_ATSHA204A) ||\
        		defined(GENERATE_KEYS_SOFT) ||\
        		defined(PERSONALIZE_ATSHA204A) ||\
        		defined(PERSONALIZE_SOFT) ||\
        		defined(PERSONALIZE_SOFT_RANDOM_SERIAL)
        /** @brief Set when there is a guided mode flag defined */
        #define GUIDED_MODE
        #endif
        
        /************************************* Function declarations ***************************************/
        static void halt(bool success);
        #ifdef GENERATE_SOMETHING
        static bool generate_random_data(uint8_t* data, size_t sz);
        #endif
        static void generate_keys(void);
        static void store_keys(void);
        static void print_hex_buffer(uint8_t* data, size_t sz);
        static void print_c_friendly_hex_buffer(uint8_t* data, size_t sz);
        #ifdef STORE_HMAC_KEY
        static bool store_hmac_key_data(uint8_t* data, size_t sz);
        #endif
        #ifdef STORE_AES_KEY
        static bool store_aes_key_data(uint8_t* data, size_t sz);
        #endif
        #ifdef STORE_SOFT_SERIAL
        static bool store_soft_serial_data(uint8_t* data, size_t sz);
        #endif
        #ifndef USE_SOFT_SIGNING
        static void init_atsha204a_state(void);
        #ifdef LOCK_ATSHA204A_CONFIGURATION
        static void	lock_atsha204a_config(void);
        static uint16_t write_atsha204a_config_and_get_crc(void);
        #endif
        static bool get_atsha204a_serial(uint8_t* data);
        #ifdef STORE_HMAC_KEY
        static bool write_atsha204a_key(uint8_t* key);
        #endif
        #endif // not USE_SOFT_SIGNING
        static void print_greeting(void);
        static void print_ending(void);
        static void	probe_and_print_peripherals(void);
        static void print_eeprom_data(void);
        static void print_whitelisting_entry(void);
        #ifdef PRINT_DETAILED_ATSHA204A_CONFIG
        static void dump_detailed_atsha204a_configuration(void);
        #endif
        #ifdef RESET_EEPROM_PERSONALIZATION
        static void reset_eeprom(void);
        #endif
        static void write_eeprom_checksum(void);
        
        /**************************************** File local data *****************************************/
        #if defined(GENERATE_HMAC_KEY) || defined(STORE_HMAC_KEY)
        /** @brief The data to store as HAMC key in ATSHA204A or EEPROM */
        static uint8_t user_hmac_key[32] = {MY_HMAC_KEY};
        #endif
        
        #if defined(GENERATE_SOFT_SERIAL) || defined(STORE_SOFT_SERIAL)
        /** @brief The data to store as soft serial in EEPROM */
        static uint8_t user_soft_serial[9] = {MY_SOFT_SERIAL};
        #endif
        
        #if defined(GENERATE_AES_KEY) || defined(STORE_AES_KEY)
        /* @brief The data to store as AES key in EEPROM */
        static uint8_t user_aes_key[16] = {MY_AES_KEY};
        #endif
        
        #ifndef USE_SOFT_SIGNING
        const int sha204Pin = MY_SIGNING_ATSHA204_PIN; //!< The IO pin to use for ATSHA204A
        atsha204Class sha204(sha204Pin);
        static uint8_t tx_buffer[SHA204_CMD_SIZE_MAX];
        static uint8_t rx_buffer[SHA204_RSP_SIZE_MAX];
        static uint8_t ret_code;
        static uint8_t lockConfig = 0;
        static uint8_t lockValue = 0;
        #endif
        static bool has_device_unique_id = false;
        static const uint8_t reset_buffer[32] = {
        	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
        };
        
        /******************************************* Functions ********************************************/
        
        void presentation() {
          sendSketchInfo("Secure Startup","1.0");
        }
        
        /** @brief Sketch setup code (all personalization is done here as it is a run-once sketch) */
        void setup()
        {
        	// Delay startup a bit for serial consoles to catch up
        	uint32_t enter = hwMillis();
        	while (hwMillis() - enter < (uint32_t)500);
        #ifdef USE_SOFT_SIGNING
        	// initialize pseudo-RNG
        	hwRandomNumberInit();
        #endif
        
        	while(!Serial); // For USB enabled devices, wait for USB enumeration before continuing
        
        	print_greeting();
        
        #ifndef USE_SOFT_SIGNING
        	init_atsha204a_state();
        	// Lock configuration now if requested to enable RNG in ATSHA
        #ifdef LOCK_ATSHA204A_CONFIGURATION
        	lock_atsha204a_config();
        #endif
        #endif
        	// Generate the requested keys (if any)
        	generate_keys();
        
        #ifdef RESET_EEPROM_PERSONALIZATION
        	// If requested, reset EEPROM before storing keys
        	reset_eeprom();
        #endif
        
        	// Store the keys (if configured to do so)
        	store_keys();
        
        	// Write a checksum on the EEPROM data
        	write_eeprom_checksum();
        
        	// Print current EEPROM
        	print_eeprom_data();
        	print_whitelisting_entry();
        	Serial.println();
        
        	print_ending();
        	halt(true);
        }
        
        /** @brief Sketch execution code (unused) */
        void loop()
        {
          
        }
        
        [had to make it shorter, but I didn't change anything below here]
        

        node serial monitor:

        +------------------------------------------------------------------------------------+
        |                                  WHAT TO DO NEXT?                                  |
        +------------------------------------------------------------------------------------+
        | This device has now been personalized. Run this sketch with its current settings   |
        | on all the devices in your network that have security enabled.                     |
        +------------------------------------------------------------------------------------+
        
        +------------------------------------------------------------------------------------+
        |                                  Execution result                                  |
        +------------------------------------------------------------------------------------+
        | SUCCESS                                                                            |
        +------------------------------------------------------------------------------------+
        
        AnticimexA 1 Reply Last reply
        0
        • AndurilA Anduril

          well I did a first test, without result. Maybe someone can help:
          I did run the Personalizer with #define GENERATE_KEYS_ATSHA204A and generated some keys. I added those to the #define MY_XXX_KEY and got a confirmation. But it seems to not start up the radio, there is no output in the node or the 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-2019 Sensnology AB
           * Full contributor list: https://github.com/mysensors/MySensors/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.
           *
           */
          /**
           * @ingroup MySigninggrp
           * @{
           * @file SecurityPersonalizer.ino
           * @brief Security personalization sketch
           *
           * REVISION HISTORY
           *  - See git log (git log libraries/MySensors/examples/SecurityPersonalizer/SecurityPersonalizer.ino)
           */
          
          /**
           * @example SecurityPersonalizer.ino
           * This sketch will personalize either none-volatile memory or ATSHA204A for security functions
           * available in the MySensors library.<br>
           * Details on personalization procedure is given in @ref personalization.<br>
           * This sketch will when executed without modifications also print a guided workflow on the UART.
           */
          
          #include "sha204_library.h"
          #include "sha204_lib_return_codes.h"
          /** @brief Make use of the MySensors framework without invoking the entire system */
          //#define MY_CORE_ONLY
          #define MY_RADIO_RFM69
          #define MY_OTA_FIRMWARE_FEATURE
          #define MY_BAUD_RATE      38400
          #include <MySensors.h>
          
          /************************************ User defined key data ***************************************/
          
          /** @brief The user-defined HMAC key to use unless @ref GENERATE_HMAC_KEY is set */
          #define MY_HMAC_KEY 0x01,0x02,0x03,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
          
          /** @brief The user-defined AES key to store in EEPROM unless @ref GENERATE_AES_KEY is set */
          #define MY_AES_KEY 0x06,0x07,0x08,0x09,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
          
          /** @brief The user-defined soft serial to use for soft signing unless @ref GENERATE_SOFT_SERIAL is set */
          #define MY_SOFT_SERIAL 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
          
          /***************************** Flags for guided personalization flow ******************************/
          
          /**
           * @def GENERATE_KEYS_ATSHA204A
           * @brief Default settings for generating keys using ATSHA204A
           *
           * @note The generated keys displayed in the serial log with this setting needs to be written down
           *       and transferred to all nodes this gateway will communicate with. This is mandatory for ALL
           *       nodes for encryption (AES key). For signing (HMAC key) it is only required for nodes that
           *       use signing. Typically you set the values for @ref MY_HMAC_KEY and @ref MY_AES_KEY.
           */
          //#define GENERATE_KEYS_ATSHA204A
          
          /**
           * @def GENERATE_KEYS_SOFT
           * @brief Default settings for generating keys using software
           *
           * @b Important<br>
           * You will need to ensure @ref MY_SIGNING_SOFT_RANDOMSEED_PIN is set to an unconnected analog pin
           * in order to provide entropy to the software RNG if your hardware has no HWRNG.
           *
           * @note The generated keys displayed in the serial log with this setting needs to be written down
           *       and transferred to all nodes this gateway will communicate with. This is mandatory for ALL
           *       nodes for encryption (AES key). For signing (HMAC key) it is only required for nodes that
           *       use signing. Typically you set the values for @ref MY_HMAC_KEY and @ref MY_AES_KEY.
           */
          //#define GENERATE_KEYS_SOFT
          
          /**
           * @def PERSONALIZE_ATSHA204A
           * @brief Default settings for personalizing an ATSHA204A
           *
           * It is assumed that you have updated @ref MY_HMAC_KEY and @ref MY_AES_KEY with the keys displayed
           * when executing this sketch with @ref GENERATE_KEYS_ATSHA204A or @ref GENERATE_KEYS_SOFT defined.
           */
          #define PERSONALIZE_ATSHA204A
          
          /**
           * @def PERSONALIZE_SOFT
           * @brief Default settings for personalizing EEPROM for software signing
           *
           * It is assumed that you have updated @ref MY_HMAC_KEY and @ref MY_AES_KEY with the keys displayed
           * when executing this sketch with @ref GENERATE_KEYS_ATSHA204A or @ref GENERATE_KEYS_SOFT defined.
           */
          //#define PERSONALIZE_SOFT
          
          /**
           * @def PERSONALIZE_SOFT_RANDOM_SERIAL
           * @brief This is an alternative to @ref PERSONALIZE_SOFT which will also store a randomly generated
           * serial to EEPROM in addition to the actions performed by @ref PERSONALIZE_SOFT. Take note of the
           * generated soft serial as it will be needed if you plan to use whitelisting. It should be
           * unique for each node.
           *
           * @note This is only needed for targets that lack unique device IDs. The sketch will inform you if
           *       there is a need for generating a random serial or not. Check the "Hardware security
           *       peripherals" listing. If a target has a unique device ID and a serial in EEPROM, the serial
           *       in EEPROM will be used. If erased (replaced with FF:es) the unique device ID will be used
           *       instead.
           */
          //#define PERSONALIZE_SOFT_RANDOM_SERIAL
          
          /*************************** The settings below are for advanced users ****************************/
          /**
           * @def USE_SOFT_SIGNING
           * @brief Uncomment this to generate keys by software and store them to EEPROM instead of ATSHA204A
           */
          //#define USE_SOFT_SIGNING
          
          /**
           * @def LOCK_ATSHA204A_CONFIGURATION
           * @brief Uncomment this to enable locking the ATSHA204A configuration zone
           *
           * It is still possible to change the key, and this also enable random key generation.
           * @warning BE AWARE THAT THIS PREVENTS ANY FUTURE CONFIGURATION CHANGE TO THE CHIP
           */
          //#define LOCK_ATSHA204A_CONFIGURATION
          
          /**
           * @def SKIP_UART_CONFIRMATION
           * @brief Uncomment this for boards that lack UART
           *
           * This will disable additional confirmation for actions that are non-reversible.
           *
           * @b Important<br> For ATSHA204A, no confirmation will be required for locking any zones with this
           * configuration! Also, if you generate keys on a board without UART, you have no way of determining
           * what the key is unless it is stored in EEPROM.
           */
          //#define SKIP_UART_CONFIRMATION
          
          /**
           * @def GENERATE_HMAC_KEY
           * @brief Uncomment this to generate a random HMAC key using ATSHA204A or software depending on
           *        @ref USE_SOFT_SIGNING
           * @note If not enabled, key defined by @ref MY_HMAC_KEY will be used instead.
           */
          //#define GENERATE_HMAC_KEY
          
          /**
           * @def STORE_HMAC_KEY
           * @brief Uncomment this to store HMAC key to ATSHA204A or EEPROM depending on @ref USE_SOFT_SIGNING
           */
          //#define STORE_HMAC_KEY
          
          /**
           * @def GENERATE_AES_KEY
           * @brief Uncomment this to generate a random AES key using ATSHA204A or software depending on
           * @ref USE_SOFT_SIGNING
           * @note If not enabled, key defined by @ref MY_AES_KEY will be used instead.
           */
          //#define GENERATE_AES_KEY
          
          /**
           * @def STORE_AES_KEY
           * @brief Uncomment this to store AES key to EEPROM
           */
          //#define STORE_AES_KEY
          
          /**
           * @def GENERATE_SOFT_SERIAL
           * @brief Uncomment this to generate a random serial number for software signing
           * @note If not enabled, serial defined by @ref MY_SOFT_SERIAL will be used instead.
           */
          //#define GENERATE_SOFT_SERIAL
          
          /**
           * @def STORE_SOFT_SERIAL
           * @brief Uncomment this to store the serial number to EEPROM
           */
          //#define STORE_SOFT_SERIAL
          
          /**
           * @def PRINT_DETAILED_ATSHA204A_CONFIG
           * @brief Uncomment to print the detailed ATSHA204A configuration
           */
          #define PRINT_DETAILED_ATSHA204A_CONFIG
          
          /**
           * @def RESET_EEPROM_PERSONALIZATION
           * @brief Uncomment to reset the personalization data in EEPROM to 0xFF:es
           */
          //#define RESET_EEPROM_PERSONALIZATION
          
          /********************* Guided mode flag configurations (don't change these) ***********************/
          #ifdef GENERATE_KEYS_ATSHA204A
          #define LOCK_ATSHA204A_CONFIGURATION // We have to lock configuration to enable random number generation
          #define GENERATE_HMAC_KEY // Generate random HMAC key
          #define GENERATE_AES_KEY // Generate random AES key
          #define SKIP_UART_CONFIRMATION // This is an automated mode
          #endif
          
          #ifdef GENERATE_KEYS_SOFT
          #define USE_SOFT_SIGNING // Use software backend
          #define GENERATE_HMAC_KEY // Generate random HMAC key
          #define GENERATE_AES_KEY // Generate random AES key
          #define SKIP_UART_CONFIRMATION // This is an automated mode
          #endif
          
          #ifdef PERSONALIZE_ATSHA204A
          #define LOCK_ATSHA204A_CONFIGURATION // We have to lock configuration to enable random number generation
          #define STORE_HMAC_KEY // Store the HMAC key
          #define STORE_AES_KEY // Store the AES key
          #define SKIP_UART_CONFIRMATION // This is an automated mode
          #endif
          
          #ifdef PERSONALIZE_SOFT_RANDOM_SERIAL
          #define GENERATE_SOFT_SERIAL // Generate a soft serial number
          #define PERSONALIZE_SOFT // Do the rest as PERSONALIZE_SOFT
          #endif
          
          #ifdef PERSONALIZE_SOFT
          #define USE_SOFT_SIGNING // Use software backend
          #define STORE_HMAC_KEY // Store the HMAC key
          #define STORE_AES_KEY // Store the AES key
          #define STORE_SOFT_SERIAL // Store the soft serial number
          #define SKIP_UART_CONFIRMATION // This is an automated mode
          #endif
          
          #if defined(GENERATE_HMAC_KEY) || defined(GENERATE_AES_KEY) || defined(GENERATE_SOFT_SERIAL)
          #define GENERATE_SOMETHING
          #endif
          
          #if defined(MY_LOCK_MCU)
          #undefine MY_LOCK_MCU  // The Sketch after SecurityPersonaliter should lock the MCU
          #endif
          
          /********************************** Preprocessor sanitychecks *************************************/
          #if defined(GENERATE_SOFT_SERIAL) && !defined(USE_SOFT_SIGNING)
          #error Cannot generate soft serial using ATSHA204A, use USE_SOFT_SINGING for this
          #endif
          #if defined(STORE_SOFT_SERIAL) && !defined(USE_SOFT_SIGNING)
          #error Cannot store soft serial to ATSHA204A, use USE_SOFT_SINGING for this
          #endif
          #if defined(PRINT_DETAILED_ATSHA204A_CONFIG) && defined(USE_SOFT_SIGNING)
          #error Cannot print ATSHA204A config using software signing flag, disable USE_SOFT_SINGING for this
          #endif
          #if defined(LOCK_ATSHA204A_CONFIGURATION) && defined(USE_SOFT_SIGNING)
          #error Cannot lock ATSHA204A config using software signing flag, disable USE_SOFT_SINGING for this
          #endif
          #ifdef GENERATE_KEYS_ATSHA204A
          #ifdef USE_SOFT_SIGNING
          #error You cannot select soft signing if you want to generate keys using ATSHA204A
          #endif
          #ifdef STORE_HMAC_KEY
          #error Disable STORE_SOFT_KEY, you should not store keys in this mode
          #endif
          #ifdef STORE_SOFT_SERIAL
          #error Disable STORE_SOFT_SERIAL, you should not store serial in this mode
          #endif
          #ifdef STORE_AES_KEY
          #error Disable STORE_AES_KEY, you should not store keys in this mode
          #endif
          #if defined(GENERATE_KEYS_SOFT) ||\
          		defined (PERSONALIZE_ATSHA204A) ||\
          		defined (PERSONALIZE_SOFT) ||\
          		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
          #error You can not enable GENERATE_KEYS_ATSHA204A together with other guided modes
          #endif
          #endif // GENERATE_KEYS_ATSHA204A
          #ifdef GENERATE_KEYS_SOFT
          #ifdef STORE_HMAC_KEY
          #error Disable STORE_SOFT_KEY, you should not store keys in this mode
          #endif
          #ifdef STORE_SOFT_SERIAL
          #error Disable STORE_SOFT_SERIAL, you should not store serial in this mode
          #endif
          #ifdef STORE_AES_KEY
          #error Disable STORE_AES_KEY, you should not store keys in this mode
          #endif
          #ifndef MY_SIGNING_SOFT_RANDOMSEED_PIN
          #error You have to set MY_SIGNING_SOFT_RANDOMSEED_PIN to a suitable value in this mode
          #endif
          #if defined(GENERATE_KEYS_ATSHA204A) ||\
          		defined (PERSONALIZE_ATSHA204A) ||\
          		defined (PERSONALIZE_SOFT) ||\
          		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
          #error You can not enable GENERATE_KEYS_SOFT together with other guided modes
          #endif
          #endif // GENERATE_KEYS_SOFT
          #ifdef PERSONALIZE_ATSHA204A
          #ifdef USE_SOFT_SIGNING
          #error You cannot select soft signing if you want to personalize an ATSHA204A
          #endif
          #if defined(GENERATE_KEYS_ATSHA204A) ||\
          		defined (GENERATE_KEYS_SOFT) ||\
          		defined (PERSONALIZE_SOFT) ||\
          		defined (PERSONALIZE_SOFT_RANDOM_SERIAL)
          #error You can not enable PERSONALIZE_ATSHA204A together with other guided modes
          #endif
          #ifdef RESET_EEPROM_PERSONALIZATION
          #error You cannot reset EEPROM personalization when personalizing a device
          #endif
          #endif // PERSONALIZE_ATSHA204A
          #ifdef PERSONALIZE_SOFT
          #if defined(GENERATE_KEYS_ATSHA204A) ||\
          		defined (GENERATE_KEYS_SOFT) ||\
          		defined (PERSONALIZE_ATSHA204A)
          #error You can not enable PERSONALIZE_SOFT together with other guided modes
          #endif
          #ifdef RESET_EEPROM_PERSONALIZATION
          #error You cannot reset EEPROM personalization when personalizing a device
          #endif
          #endif // PERSONALIZE_SOFT
          #ifdef PERSONALIZE_SOFT_RANDOM_SERIAL
          #if defined(GENERATE_KEYS_SOFT) ||\
          		defined (PERSONALIZE_ATSHA204A) ||\
          		defined (GENERATE_KEYS_ATSHA204A)
          #error You can only enable one of the guided modes at a time
          #endif
          #ifdef RESET_EEPROM_PERSONALIZATION
          #error You cannot reset EEPROM personalization when personalizing a device
          #endif
          #endif // PERSONALIZE_SOFT_RANDOM_SERIAL
          
          #if !defined(GENERATE_KEYS_ATSHA204A) &&\
          		!defined(GENERATE_KEYS_SOFT) &&\
          		!defined(PERSONALIZE_ATSHA204A) &&\
          		!defined(PERSONALIZE_SOFT) &&\
          		!defined(PERSONALIZE_SOFT_RANDOM_SERIAL) &&\
          		!defined(USE_SOFT_SIGNING) &&\
          		!defined(LOCK_ATSHA204A_CONFIGURATION) &&\
          		!defined(SKIP_UART_CONFIRMATION) &&\
          		!defined(GENERATE_HMAC_KEY) &&\
          		!defined(STORE_HMAC_KEY) &&\
          		!defined(GENERATE_SOFT_SERIAL) &&\
          		!defined(STORE_SOFT_SERIAL) &&\
          		!defined(GENERATE_AES_KEY) &&\
          		!defined(STORE_AES_KEY) &&\
          		!defined(PRINT_DETAILED_ATSHA204A_CONFIG) &&\
          		!defined(RESET_EEPROM_PERSONALIZATION)
          /** @brief Set when there are no config flags defined */
          #define NO_SETTINGS_DEFINED
          #endif
          
          #if defined(GENERATE_KEYS_ATSHA204A) ||\
          		defined(GENERATE_KEYS_SOFT) ||\
          		defined(PERSONALIZE_ATSHA204A) ||\
          		defined(PERSONALIZE_SOFT) ||\
          		defined(PERSONALIZE_SOFT_RANDOM_SERIAL)
          /** @brief Set when there is a guided mode flag defined */
          #define GUIDED_MODE
          #endif
          
          /************************************* Function declarations ***************************************/
          static void halt(bool success);
          #ifdef GENERATE_SOMETHING
          static bool generate_random_data(uint8_t* data, size_t sz);
          #endif
          static void generate_keys(void);
          static void store_keys(void);
          static void print_hex_buffer(uint8_t* data, size_t sz);
          static void print_c_friendly_hex_buffer(uint8_t* data, size_t sz);
          #ifdef STORE_HMAC_KEY
          static bool store_hmac_key_data(uint8_t* data, size_t sz);
          #endif
          #ifdef STORE_AES_KEY
          static bool store_aes_key_data(uint8_t* data, size_t sz);
          #endif
          #ifdef STORE_SOFT_SERIAL
          static bool store_soft_serial_data(uint8_t* data, size_t sz);
          #endif
          #ifndef USE_SOFT_SIGNING
          static void init_atsha204a_state(void);
          #ifdef LOCK_ATSHA204A_CONFIGURATION
          static void	lock_atsha204a_config(void);
          static uint16_t write_atsha204a_config_and_get_crc(void);
          #endif
          static bool get_atsha204a_serial(uint8_t* data);
          #ifdef STORE_HMAC_KEY
          static bool write_atsha204a_key(uint8_t* key);
          #endif
          #endif // not USE_SOFT_SIGNING
          static void print_greeting(void);
          static void print_ending(void);
          static void	probe_and_print_peripherals(void);
          static void print_eeprom_data(void);
          static void print_whitelisting_entry(void);
          #ifdef PRINT_DETAILED_ATSHA204A_CONFIG
          static void dump_detailed_atsha204a_configuration(void);
          #endif
          #ifdef RESET_EEPROM_PERSONALIZATION
          static void reset_eeprom(void);
          #endif
          static void write_eeprom_checksum(void);
          
          /**************************************** File local data *****************************************/
          #if defined(GENERATE_HMAC_KEY) || defined(STORE_HMAC_KEY)
          /** @brief The data to store as HAMC key in ATSHA204A or EEPROM */
          static uint8_t user_hmac_key[32] = {MY_HMAC_KEY};
          #endif
          
          #if defined(GENERATE_SOFT_SERIAL) || defined(STORE_SOFT_SERIAL)
          /** @brief The data to store as soft serial in EEPROM */
          static uint8_t user_soft_serial[9] = {MY_SOFT_SERIAL};
          #endif
          
          #if defined(GENERATE_AES_KEY) || defined(STORE_AES_KEY)
          /* @brief The data to store as AES key in EEPROM */
          static uint8_t user_aes_key[16] = {MY_AES_KEY};
          #endif
          
          #ifndef USE_SOFT_SIGNING
          const int sha204Pin = MY_SIGNING_ATSHA204_PIN; //!< The IO pin to use for ATSHA204A
          atsha204Class sha204(sha204Pin);
          static uint8_t tx_buffer[SHA204_CMD_SIZE_MAX];
          static uint8_t rx_buffer[SHA204_RSP_SIZE_MAX];
          static uint8_t ret_code;
          static uint8_t lockConfig = 0;
          static uint8_t lockValue = 0;
          #endif
          static bool has_device_unique_id = false;
          static const uint8_t reset_buffer[32] = {
          	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
          	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
          	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
          	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
          };
          
          /******************************************* Functions ********************************************/
          
          void presentation() {
            sendSketchInfo("Secure Startup","1.0");
          }
          
          /** @brief Sketch setup code (all personalization is done here as it is a run-once sketch) */
          void setup()
          {
          	// Delay startup a bit for serial consoles to catch up
          	uint32_t enter = hwMillis();
          	while (hwMillis() - enter < (uint32_t)500);
          #ifdef USE_SOFT_SIGNING
          	// initialize pseudo-RNG
          	hwRandomNumberInit();
          #endif
          
          	while(!Serial); // For USB enabled devices, wait for USB enumeration before continuing
          
          	print_greeting();
          
          #ifndef USE_SOFT_SIGNING
          	init_atsha204a_state();
          	// Lock configuration now if requested to enable RNG in ATSHA
          #ifdef LOCK_ATSHA204A_CONFIGURATION
          	lock_atsha204a_config();
          #endif
          #endif
          	// Generate the requested keys (if any)
          	generate_keys();
          
          #ifdef RESET_EEPROM_PERSONALIZATION
          	// If requested, reset EEPROM before storing keys
          	reset_eeprom();
          #endif
          
          	// Store the keys (if configured to do so)
          	store_keys();
          
          	// Write a checksum on the EEPROM data
          	write_eeprom_checksum();
          
          	// Print current EEPROM
          	print_eeprom_data();
          	print_whitelisting_entry();
          	Serial.println();
          
          	print_ending();
          	halt(true);
          }
          
          /** @brief Sketch execution code (unused) */
          void loop()
          {
            
          }
          
          [had to make it shorter, but I didn't change anything below here]
          

          node serial monitor:

          +------------------------------------------------------------------------------------+
          |                                  WHAT TO DO NEXT?                                  |
          +------------------------------------------------------------------------------------+
          | This device has now been personalized. Run this sketch with its current settings   |
          | on all the devices in your network that have security enabled.                     |
          +------------------------------------------------------------------------------------+
          
          +------------------------------------------------------------------------------------+
          |                                  Execution result                                  |
          +------------------------------------------------------------------------------------+
          | SUCCESS                                                                            |
          +------------------------------------------------------------------------------------+
          
          AnticimexA Offline
          AnticimexA Offline
          Anticimex
          Contest Winner
          wrote on last edited by
          #6

          @Anduril There should not be anytning preventing radio startup when you have personalized a device. Have you looked at the debug output of the node/gateway, and tried with security disabled? Also, remember that the personalization has to be done on all devices that use secure communication, and if you use encryption, all devices in the entire network.

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

          1 Reply Last reply
          0
          • AndurilA Offline
            AndurilA Offline
            Anduril
            wrote on last edited by
            #7

            I have not yet enabled signing or encryption on the node that was running the personalizer with radio activated. Therefor I would expect it to give serial output mysensors started, find parent and so on. Nothing on the output after that security Execution result SUCCESS
            The gateway also has no security activated for now, as this node was the first one to test the personalizer with radio and OTA

            AnticimexA 1 Reply Last reply
            0
            • AndurilA Anduril

              I have not yet enabled signing or encryption on the node that was running the personalizer with radio activated. Therefor I would expect it to give serial output mysensors started, find parent and so on. Nothing on the output after that security Execution result SUCCESS
              The gateway also has no security activated for now, as this node was the first one to test the personalizer with radio and OTA

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

              @Anduril I believe the setup() function is hijacked by the personalizer so radio is not initialized properly, nor is the library.

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

              1 Reply Last reply
              0
              • AndurilA Offline
                AndurilA Offline
                Anduril
                wrote on last edited by
                #9

                that might be true... so it's kind of impossible I think to merge those.
                So I have to first upload the personalizer and directly after that the sketch with security enabled and OTA. Is the personalizer sketch the only way to find out its serial for whitelisting? Maybe I need this feature down the road so it's good to know how to get it later

                AnticimexA 1 Reply Last reply
                0
                • AndurilA Anduril

                  that might be true... so it's kind of impossible I think to merge those.
                  So I have to first upload the personalizer and directly after that the sketch with security enabled and OTA. Is the personalizer sketch the only way to find out its serial for whitelisting? Maybe I need this feature down the road so it's good to know how to get it later

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

                  @Anduril well, you can always rewrite the personalizer to not use a setup() function.

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

                  1 Reply Last reply
                  0
                  • AndurilA Offline
                    AndurilA Offline
                    Anduril
                    wrote on last edited by
                    #11

                    I think that's a little beyond my skills :-)

                    1 Reply Last reply
                    0
                    • AndurilA Offline
                      AndurilA Offline
                      Anduril
                      wrote on last edited by
                      #12

                      @Anticimex still the question: is there a way to find out a nodes whitelist serial later?

                      AnticimexA 1 Reply Last reply
                      0
                      • AndurilA Anduril

                        @Anticimex still the question: is there a way to find out a nodes whitelist serial later?

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

                        @Anduril that depend on your backend. For software signing the serial is stored in eeprom. For atsha204a it is only readable from the device itself.

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

                        1 Reply Last reply
                        0
                        • AndurilA Offline
                          AndurilA Offline
                          Anduril
                          wrote on last edited by
                          #14

                          that's sad.
                          Maybe it would be possible to write a sketch to read out the atsha serial and transmit it via mysensors... I will be looking into this further when in need of whitelisting. Until then I will just leave it as it is and only use signing and maybe encryption.

                          AnticimexA 1 Reply Last reply
                          0
                          • AndurilA Anduril

                            that's sad.
                            Maybe it would be possible to write a sketch to read out the atsha serial and transmit it via mysensors... I will be looking into this further when in need of whitelisting. Until then I will just leave it as it is and only use signing and maybe encryption.

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

                            @Anduril I'd prefer not as the serial is also considered a semi-secret to maintain the integrity of the security infrastructure. It should not be thrown around the network unprotected.

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

                            1 Reply Last reply
                            0
                            • AndurilA Offline
                              AndurilA Offline
                              Anduril
                              wrote on last edited by
                              #16

                              I understand that. Two questions:
                              what about updating via OTA with whitelisting enabled? Everyone could sniff the new hexfile and read the serial of the whitelisted node, correct?
                              what about activating encryption? Would that prevent both of these cases? No one could read the hexfile or the send serial without knowing the AES key before.

                              AnticimexA 1 Reply Last reply
                              0
                              • AndurilA Anduril

                                I understand that. Two questions:
                                what about updating via OTA with whitelisting enabled? Everyone could sniff the new hexfile and read the serial of the whitelisted node, correct?
                                what about activating encryption? Would that prevent both of these cases? No one could read the hexfile or the send serial without knowing the AES key before.

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

                                @Anduril if encrypted the data "cannot" be decoded. The serial is not stored in any firmware. The only exception being a personalizer sketch that will personalize for software signing.
                                For atsha204a based signing, serial is never stored in sketch, only in runtime.

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

                                1 Reply Last reply
                                0
                                • AndurilA Offline
                                  AndurilA Offline
                                  Anduril
                                  wrote on last edited by
                                  #18

                                  Just in the rare case I want to use it later (and I have encryption enabled in the whole mysensors network) I could theoretically write a sketch inspired by the personalizer to read the serial and send this as a payload to the gateway without anyone out there able to read.

                                  AnticimexA 1 Reply Last reply
                                  0
                                  • AndurilA Anduril

                                    Just in the rare case I want to use it later (and I have encryption enabled in the whole mysensors network) I could theoretically write a sketch inspired by the personalizer to read the serial and send this as a payload to the gateway without anyone out there able to read.

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

                                    @Anduril Well, its all opensource, so you are free to do whatever you want. Just remember that if you are starting to alter the behaviour and use of the security infrastructure, you could potentially compromise it for yourself and those that use your code.

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

                                    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.1k

                                    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