MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification
Dependencies: MaximInterface mbed
The MAXREFDES143# is an Internet of Things (IoT) embedded security reference design, built to protect an industrial sensing node by means of authentication and notification to a web server. The hardware includes a peripheral module representing a protected sensor node monitoring operating temperature and remaining life of a filter (simulated through ambient light sensing) and an mbed shield representing a controller node responsible for monitoring one or more sensor nodes. The design is hierarchical with each controller node communicating data from connected sensor nodes to a web server that maintains a centralized log and dispatches notifications as necessary. The mbed shield contains a Wi-Fi module, a DS2465 coprocessor with 1-Wire® master function, an LCD, LEDs, and pushbuttons. The protected sensor node contains a DS28E15 authenticator, a DS7505 temperature sensor, and a MAX44009 light sensor. The mbed shield communicates to a web server by the onboard Wi-Fi module and to the protected sensor node with I2C and 1-Wire. The MAXREFDES143# is equipped with a standard shield connector for immediate testing using an mbed board such as the MAX32600MBED#. The simplicity of this design enables rapid integration into any star-topology IoT network requiring the heightened security with low overhead provided by the SHA-256 symmetric-key algorithm.
More information about the MAXREFDES143# is available on the Maxim Integrated website.
Revision 5:63232ef22abe, committed 2016-04-20
- Comitter:
- IanBenzMaxim
- Date:
- Wed Apr 20 20:13:33 2016 +0000
- Parent:
- 4:71d578d3af22
- Child:
- 6:b6bafd0a7013
- Commit message:
- Always give the user a chance to provision when an invalid sensor node is detected before retrying authentication.
Changed in this revision
| OneWire.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/OneWire.lib Wed Apr 20 09:49:25 2016 -0500 +++ b/OneWire.lib Wed Apr 20 20:13:33 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/Maxim-Integrated/code/OneWire/#43039aeca2ab +https://developer.mbed.org/teams/Maxim-Integrated/code/OneWire/#08384e63ee40
--- a/main.cpp Wed Apr 20 09:49:25 2016 -0500
+++ b/main.cpp Wed Apr 20 20:13:33 2016 +0000
@@ -95,6 +95,7 @@
static bool result = false;
static std::uint8_t consecutiveWebPostErrors = 0; ///< Account for a few network errors in case of flaky connection.
static Timer webPostTimer; ///< Software timer to track web posting interval.
+static Timer retryTimer; ///< Software timer to track authentication retries.
static void blinkLeds(unsigned int time_ms); ///< Invert LEDs for a given amount of time.
static bool buttonPressed(DigitalIn & button); ///< Checks if button is pressed (returns true) and waits for release.
@@ -300,36 +301,45 @@
break;
case SensorNodeNotAuthentic:
- // Wait for user to press Provision button
- if (buttonPressed(provisionButton))
+ // Wait for some time before retrying authentication
+ retryTimer.reset();
+ retryTimer.start();
+ do
{
- nextStatus = ProvisioningSensorNode;
- }
- // Try to authenticate and return to normal operation
- else if (webPostTimer.read_ms() >= webPostIntervalMs)
- {
- // Send event message to server
- result = webIntf.authPostHttpEvent(ds2465, InvalidSensorEvent, "", !useInvalidSecret);
- if (result)
+ // Wait for user to press Provision button
+ if (buttonPressed(provisionButton))
+ {
+ nextStatus = ProvisioningSensorNode;
+ break;
+ }
+ // Try to authenticate and return to normal operation
+ else if (webPostTimer.read_ms() >= webPostIntervalMs)
{
- // Reset timer count after logging complete
- webPostTimer.reset();
- consecutiveWebPostErrors = 0;
+ // Send event message to server
+ result = webIntf.authPostHttpEvent(ds2465, InvalidSensorEvent, "", !useInvalidSecret);
+ if (result)
+ {
+ // Reset timer count after logging complete
+ webPostTimer.reset();
+ consecutiveWebPostErrors = 0;
+
+ // Try to authenticate again
+ nextStatus = SensorNodeNeedsDetection;
+ }
+ else if (++consecutiveWebPostErrors < maxConsecutiveWebPostErrors)
+ {
+ // There was likely an error establishing a web connection
+ // Wait and try again
+ wait_ms(webPostRetryIntervalMs);
+ }
+ else
+ {
+ nextStatus = ControllerHardwareError;
+ break;
+ }
}
- else if (++consecutiveWebPostErrors < maxConsecutiveWebPostErrors)
- {
- // There was likely an error establishing a web connection
- // Wait and try again
- wait_ms(webPostRetryIntervalMs);
- }
- else
- {
- nextStatus = ControllerHardwareError;
- }
-
- // Try to authenticate again
- nextStatus = SensorNodeNeedsDetection;
- }
+ } while (retryTimer.read_ms() < webPostIntervalMs);
+ retryTimer.stop();
break;
case ControllerInitializationError:
MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification