clever way to handle WiFi password updates for multiple IoT devices in the home?

05 Nov 2016

I'm working on an Arduino/mbed-based project that will be an aircraft noise monitor for deployment to residents near airports. The device may sit outside a home so I want it to connect to the Internet via WiFi. The WiFi shields I've seen so far require you to compile the WiFi network name/password into the binary. This means the device would stop "working" (reporting data) if the homeowner changed their WiFi password, as happens from time to time, until someone recompiled the binary with the new password and re-flashed the device. Has anyone come up with a clever solution for this problem?

Thinking to the future, the problem gets worse if you imagine a home with 10-20 IoT devices, each of which have the WiFi network name/password compiled into their binaries.

I've thought of the following ways to address this issue so far. All suggestions welcome!

1) When you deploy the device, ask the homeowner to commit to not change the WiFi network name or password as long as they want to keep using the device, and explain there will be a service fee if they want someone to come out and update the device with a new password. (Practical, but not ideal.)

2) Create multiple logical networks in the home, one that is used only for IoT applications with a long-lived, complex password. Have a separate logical WiFi network for use by humans, which you expect to change the password on more frequently. (e.g. when roommates/S.O.s move in/out, etc.)

3) Store the network name/password as data on the device. Build an input device and screen into the device so the user can trigger a "credential update" experience and input the new network name and password as needed. (Increases hardware cost of solution and the software development cost, but gives a way to solve the problem for a single device. Obviously, this approach doesn't scale well across multiple devices in the home long term.)

3a) Like #3, but create a single "password update device" that can attach to any IoT device that supports it, so you can use a single password update device to update the passwords on all the IoT devices in your home one by one when needed. Reduces hardware cost of each device but requires a standard for connection. This might be a USB port on the device that you'd hook up to a USB hub with a USB keyboard and LCD display attached to it. That way, incremental hardware price could be reduced to USB port for device and USB LCD display; user could use standard USB hub and keyboard.

4) Create a separate actual or logical WiFi network that has a single purpose: serving network name/password for the other general-purpose WiFi network to devices that can authenticate to the "password server." The password server has a stable network name and a stable, complex password that's compiled into each device's binary, and the device knows that if it can't connect to the general WiFi network after some timeout period it should connect to the dedicated password server network and fetch a fresh network name and password. The (very modest) security advantage here is that the dedicated "password server network" only serves passwords to devices within the home and doesn't provide Internet access directly, so you'd have to decode the network name and password (which could be obscured or encrypted in some way) to then get full Internet access. (I realize this is security overkill for a typical consumer home network, but I'm trying to think of long-term solutions for the problem in a world of many IoT devices in the home.)

5) Store the network name/password on a cheap USB flash drive. Have a USB port on each device to hold the drive. Update the data on the USB flash drives as needed. This at least saves you from having to recompile the binary for each device.

I expect that in the near term I'll just go with #1. Let me know if I'm missing a standard or clever solution for this problem!

08 Nov 2016

6) Another possibility would be to use Thread. Since few of the target users probably have Thread networks in their home today, I'd probably need to make a Thread-to-router gateway dongle (or something similar) part of the solution, but that would at least obviate the need to update passwords stored in individual devices!