在越来越具有安全意识的物联网环境中,物联网开发人员面临着对应用程序生命周期所有阶段的快速开发和更严格安全性的看似相互冲突的需求。虽然许多新兴解决方案都带有加密机制,但物联网设计需要能够应对更广泛的安全威胁。
为了让他们这样做,物联网应用需要建立在根本上的基础之上。通过设备级别的安全启动和固件更新建立信任。
本文将展示如何使用Microchip Technology的单一安全设备,开发人员快速实施确保物联网应用安全所需的一系列安全机制。
物联网安全面临的诸多威胁
与任何嵌入式系统一样,物联网设计面临着不断的威胁。随着黑客采用新攻击,开发人员急于关闭安全漏洞。在已部署的设备中,更新物联网固件的需求增加了安全性方面的潜在弱点。例如,即使使用简单的固件验证检查也可以使软件暴露。在这种情况下,开发人员可能希望查询一些外部资源进行验证可能会尝试用黑客代码替换固件。然而,即使是相对新手的黑客也可以用忽略此类验证检查的代码替换固件。
单独使用加密来锁定固件提供无法确定的补救措施。甚至加密也可能会受到选择的密文攻击等攻击,黑客通过研究目标系统的解密过程来确定加密密钥。这些类型的攻击很难缓解,但加密认证的使用被认为是一种有效的防御措施。
然而,在构建资源受限的物联网设备时,开发人员使用传统的基于软件的安全方法面对增加的复杂性和性能问题。 Microchip Technology的CEC1702加密嵌入式控制器的可用性使开发人员能够在开发过程中轻松解决安全问题,并且对设计性能的影响最小。
全功能MCU
设计为了支持物联网安全要求的多样性,CEC1702将ARM ® Cortex ® -M4F处理器与一系列外设结合在一起,包括多通道模拟 - 数字转换器(ADC),UART,GPIO,PWM输出,LED接口,多个计数器/定时器,以及多个I 2 C和SPI控制器(图1)。
图1:Microchip Technology CEC1702加密嵌入式控制器将高性能ARM Cortex-M4F内核与通用外设相结合,并对认证提供专业支持和加密。 (图像来源:Microchip Technology)
虽然该器件可满足典型物联网设计的功能要求,但其独特之处在于其安全功能。 CEC1702将基本安全功能(如安全存储和数据保护机制)与多个集成加密引擎相结合。除了多用途AES加密引擎外,该设备还包括加密哈希引擎和公钥引擎,为多种算法提供硬件支持,包括RSA,椭圆曲线Diffie-Hellman(ECDH)和椭圆曲线数字签名算法(ECDSA)等等。由于硬件安全引擎可以执行比基于软件的方法快几个数量级的加密算法,因此开发人员可以在不影响应用程序性能的情况下采用强大的加密和身份验证。
在硬件设计层面,开发人员可以使用CEC1702作为IoT设计中的独立MCU,或通过其SPI连接将设备添加到现有的基于MCU的设计,而无需额外的工作。对于他们的物联网软件设计,开发人员可以使用CEC1702的加密和身份验证功能来实现物联网设备和云之间的安全通信。
除了满足更传统的安全通信需求外,该设备的安全机制还提供关键支持用于更广泛的生命周期安全要求,包括预启动固件身份验证和安全固件更新。凭借其对固件进行身份验证的能力,CEC1702为在连接系统(包括物联网)中构建安全核心的信任根提供了硬件基础。
安全启动
在典型的基于MCU的物联网系统中,CEC1702将通过SPI连接到存储固件的外部闪存,用于主机MCU和CEC1702(图2)。当系统上电时,CEC1702开始运行,使主机MCU保持复位状态,直到它验证用于引导主机MCU的应用程序代码的安全性。
图2:通过共享SPI总线,Microchip CEC1702使用其集成的安全机制来确保主机应用程序处理器仅运行经过验证的固件。 (图片来源:Microchip Technology)
信任的根源在于CEC1702的安全启动所需的固件认证顺序方法(图3)。当CEC1702上电时,它首先在工厂运行加载到ROM中的引导固件。由于无法更改此ROM代码,因此引导过程的第一步固有地建立在可信赖的基础之上。虽然开发人员可以选择在没有身份验证或加密的情况下加载应用程序固件,但使用这些安全机制有助于在启动过程结束时继续信任链。使用这些安全机制,CEC1702引导ROM代码对设计为在CEC1702上运行的应用程序固件进行身份验证和解密。
在此序列的最后一步中,CEC1702对设计为在主机上运行的应用程序固件进行身份验证和解密MCU应用处理器。由于代码在每个步骤都经过验证,因此在主机应用程序处理器上运行的最终代码映像是可信的,从而完成信任根。
图3:CEC1702引导过程将验证检查应用于引导过程中的每个步骤,以建立物联网安全所需的信任根。 (图像来源:Microchip Technology)
在安全启动过程中,CEC1702使用其集成的Efuse一次性可编程(OTP)存储器中保存的安全数据,根据固件包络中包含的信息验证固件(图4)。对于身份验证,设备使用Efuse中保存的公钥来验证在映像生成期间创建的固件信封的ECDSA签名(如下所述)。由于该签名是使用客户持有的私钥创建的,因此固件验证阶段可确保固件源的合法性。
图4:图像生成过程将每个固件映像包含验证和解密映像所需的安全信息。 (图像来源:Microchip Technology)
虽然图像加密是可选的,但如前所述,身份验证和加密的组合可以增加额外的安全保护。当开发人员使用加密固件时,CEC1702遵循身份验证过程,使用ECDH密钥交换创建解密密钥。
在此过程中,CEC1702使用包含在中的(不同)私钥。 Efuse作为生成正确解密密钥的ECDH算法的一部分(图5)。
图5:CEC1702使用其嵌入式Efuse存储器中保存的数据和使用固件映像传输的数据的组合来处理ECDH密钥交换机制。 (图像来源:Microchip Technology)
此处,器件结合了Efuse中保存的NIST P-256曲线发生器点(图5中的Gx,Gy),私钥( s ,在图5中,保存在Efuse中,并将公钥(图4中的Rx和Ry术语)嵌入固件包络中,以获得用于最终解密固件映像的密钥(图5中的Kx)。
这种方法的一个明显优势是底层椭圆曲线方法能够通过相对较短的密钥提供非常强大的安全性。
快速开发
尽管CEC1702的复杂性很高安全机制,Microchip已经竭尽全力使开发人员能够相对轻松地充分利用芯片的固件验证和加密功能。该公司的Efuse生成器工具提供了一个简单的界面,用于指定ECDSA和ECDH密钥并生成Efuse数据(图6)。生成后,开发人员可以使用任何JTAG编程器对CEC1702 Efuse OTP存储器进行编程。
图6:Microchip Efuse生成器提供了一个简单的创建界面具有用于认证和解密的相关安全数据的固件映像。 (图片来源:Microchip Technology)
对于硬件开发,Microchip Technology的SecureIoT1702(DM990012)演示板提供了一个简单的平台,可以快速启动硬件开发。除了按钮,LED和小型LCD外,该板还包含Microchip的SST26VF016 16 Mbit闪存器件,用于存储固件映像。除了用于串行闪存编程,JTAG调试等的接头外,该板还包括MikroBUS接头,用于支持各种兼容的硬件扩展板。
开发人员可以将Microchip ATWINC1500 Wi-Fi咔嗒板连接到演示板上的MikroBUS扩展插槽可快速将SecureIoT1702板连接到Microsoft Azure云(图7)。
图7:开发人员可以快速连接使用Microchip SecureIoT1702演示板,ATWINC1500 Wi-Fi扩展和Microchip的SecureIoT1702软件包访问Microsoft Azure云。 (图像来源:Microsoft Azure)
SecureIoT1702演示板已获得Microsoft的认可,是一款具有DICE(设备身份组合引擎)硬件支持的Azure认证物联网设备。虽然超出了本文的范围,但DICE是可信设备的新兴标准,它使用单独的验证阶段来指定安全启动过程,以构建信任根(参见图3)。
使用Microchip的SecureIoT1702_Azure_IoT_build软件包,开发人员可以通过Azure IoT Hub快速将SecureIoT1702板连接到Azure云。与其他新兴的物联网平台产品一样,Azure物联网中心提供诸如身份验证,设备注册以及将物联网硬件设备连接到Azure云所需的其他服务。该软件包将Azure IoT设备软件开发工具包C语言(SDK)与硬件驱动程序和mbedTLS完整TLS(传输层安全性)堆栈相结合。
软件包中包含的示例软件包括预配置的根目录证书,X509证书和私钥,以便开发人员可以轻松地使用Azure云进行身份验证。如示例软件所示,开发人员只需要进行一些调用即可加载安全数据并开始发送IoT数据(清单1)。使用这种基本设计模式,开发人员可以扩展电路板的功能,甚至可以开始使用CEC1702探索安全的无线更新技术。
复制
/*设置消息回叫,所以我们可以接收命令。 */
if(IoTHubClient_LL_SetMessageCallback(iotHubClientHandle,ReceiveMessageCallback,& receiveContext)!= IOTHUB_CLIENT_OK)
{
(void)printf(“ERROR:IoTHubClient_LL_SetMessageCallback。 ......... FAILED! r n“);
}
否则
{
( void)printf(“IoTHubClient_LL_SetMessageCallback ...成功。 r n”);
/*现在我们已准备好接收命令,让我们发送一些消息*/
size_t iterator = 0;
执行
{
if(iterator
{
< p> sprintf_s(msgText,sizeof(msgText),“{”deviceId “:”myFirstDevice “,”windSpeed “:%。2f}”,avgWindSpeed +(rand()%4 + 2));
if((messages [iterator] .messageHandle = IoTHubMessage_CreateFromByteArray((const unsigned char *)msgText,strlen(msgText)))== NULL)
{
< p>(void)printf(“ERROR:iotHubMessageHandle为NULL! r n”);
}
else
{
MAP_HANDLE propMap;
messages [iterator] .messageTrackingId = iterator;
propMap = IoTHubMessage_Properties(messages [iterator] ] .messageHandle);
(void)sprintf_s(propText,sizeof(propText),“PropMsg_%zu”,iterator);
if(Map_AddOrUpdate(propMap,“PropName”, propText)!= MAP_OK)
{
(void)printf(“错误:Map_AddOrUpdate失败! r n”);
}
if(IoTHubClient_LL_SendEventAsync(iotHubClientHandle,messages [iterator] .messageHandle,SendConfirmationCallback,&amp; messages [iterator])!= IOTHUB_CLIENT_OK)
{
(void)printf(“ERROR:IoTHubClient_LL_SendEventAsync .......... FAILED! r n”);
}
else
{
(void)printf(“IoTHubClient_LL_SendEventAsync接受消息[%zu]以传输到IoT Hub。 r n”,迭代器);
}
}
}
IoTHubClient_LL_DoWork(iotHubClientHandle);
ThreadAPI_Sleep( 1);
iterator ++;
} while(g_continueRunning);
清单1:Microchip Azure IoT软件包包括将SecureIoT1702连接到Azure云所需的所有软件,包括演示与Azure IoT Hub交易的示例软件。 (代码来源:Microchip Technology)
结论
随着物联网向更多应用扩展,物联网设备安全性差,对物联网网络和应用构成严重威胁。为了增强安全性,物联网开发人员需要采用能够在物联网系统级别建立信任根的安全方法。开发人员在使用传统安全方法时面临相当大的挑战,而不会显着增加设计复杂性并降低整体性能。
然而,使用Microchip CEC1702加密嵌入式控制器,开发人员可以快速创建基于坚定信任根的IoT应用程序
全部0条评论
快来发表一下你的评论吧 !