## 7 Research Directions
### Software Update  
An IoT network includes heterogeneous smart devices from various manufacturers. Devices are installed with software with various security configurations. Installed software must be updated periodically with new security patches; however, it may not be possible to apply software updates to IoT devices because of the following properties of the IoT components:  
1. Smart devices can be configured such that they are only accessible from the local network. A user has to be co-located with a device in the same network to get access to it through the Gateway. In such scenarios, security updates cannot be applied directly as the devices are not connected to the Internet. 2. IoT operating systems may not have security modules to receive and integrate software updates and security patches. For instance, security updates cannot be applied to Contiki [32], RIoT [33], and TinyOS [178] operating systems, as they do not have software update methods. 3. There may have a significant communication overhead for delivering software updates over the lossy and limited-bandwidth networks, such as 6 LoWPAN [68] and Zigbee [69]. Software updates need to be sent in multiple fragments. Some of the fragments may need to be retransmitted because of the lossy networks. However, the networking protocols 6 LoWPAN and Zigbee do not provide a mechanism for retransmitting the missing fragments. An entire message has to be retransmitted when one or more fragments are lost. 4. Devices may not have enough memory to store software updates for verifying the authenticity and integrity of the updates. 5. Simultaneous software updates may need to be applied to the devices of an IoT system to maintain interoperability between these devices. A resource-efficient Software-Update-as-a-Service (SUaaS) can be designed to apply security updates to IoT devices that are located in the lossy networks and may not be connected to the Internet. We present an overview of the SUaaS in Figure 26. The SUaaS has two components: cloud and edge. The cloud component comprises three modules: arifactory, security, and distribution. The artifactory module stores the new version of the software or security patches. Device manufacturers and service providers publish software updates on the artifactory. The security module verifies the authenticity and integrity of the software to ensure that trusted publishers published the updates. The security module also performs static and dynamic code analysis to ensure that the published software does not contain signatures of the malicious codes, such as malware. The distribution module sends the software updates to the edge component. An Edge router located in the edge network acts as an edge component. The Edge router fragments software into multiple fragments that can fit in the MTU of the communication link. Next, the Edge router computes an aggregated signature for the fragments, avoiding appending a signature to every fragment and reducing the total number of bytes required to deliver over the lossy network. To this end, the Edge router multi-casts the fragments to the lossy network for simultaneous software update. A lightweight aggregated-signature verification scheme based on a Bloom filter [179] can be used such that resource-constrained devices can verify the authenticity and integrity of the individual piece of the software with minimal computation costs. In the conventional security method, the Edge router appends signatures with the fragments (\(F_{i}|Sig_{i}\)) and devices verify the signatures \(Sig_{i}\) after fragments. In the Bloom filter-based aggregated-signature, the Edge router computes hashes of the fragments (\(HASH(F_{i})\)) and sets the corresponding bits in the Bloom filter (\(BF_{x}\)), which is an array of X bits, according to the hash results. The Edge router only signs the \(BF_{x}\) as \(BF_{x}|Sig_{BF}\) and sends it to the devices. The devices only validate the \(Sig_{BF}\) and ensures that the corresponding bits of a hash of a fragment \(HASH(F_{i})\) is set in the \(BF_{x}\).