在越来越安全的IoT环境中,IoT开发人员在应用程序生命周期的所有阶段都面临着对快速开发和更严格的安全性的相互冲突的需求。虽然许多新兴的解决方案都有加密的机制,但物联网的设计需要能够解决更广泛的安全威胁。
为了让它们这样做,IoT应用程序需要在设备级别上建立与安全启动和固件更新建立的信任关系。
本文将展示如何使用Microchip技术的单个安全设备,开发人员可以快速实现确保IoT应用程序安全所需的一系列安全机制。
对物联网安全的许多威胁
与任何嵌入式系统一样,IoT的设计面临着不断的威胁。当黑客们使用新的攻击时,开发人员会迅速关闭安全漏洞。在已部署的设备中,更新IoT固件的需要增加了安全性的潜在弱点。例如,即使使用简单的固件验证检查也会使软件暴露在外。在这种情况下,开发人员可能希望查询一些外部资源来进行验证,可能会发现用被黑代码替换固件的尝试。然而,即使是相对较新的黑客,也可以用无视这种验证检查的代码替换固件。
单独使用加密来锁定固件无法提供任何可靠的解决方案。甚至加密也会被攻击,比如选择密文攻击,黑客通过研究目标系统的解密过程来确定加密密钥。这些类型的攻击很难减轻,但是使用加密的身份验证被称为有效的防御。
然而,在构建资源受限的物联网设备时,使用传统的基于软件的安全方法的开发人员会面临额外的复杂性和性能问题。Microchip技术的CEC1702加密嵌入式控制器的可用性允许开发人员在开发过程中很少付出额外的努力来解决高度的安全性问题,并且对设计性能的影响很小。
全功能的单片机
旨在支持物联网的安全需求的不同性质,CEC1702结合手臂®皮质®-M4F处理器的外围设备,包括一个多通道模拟-数字转换器(ADC),uart,GPIOs,PWM输出,导致接口,一些计数器/定时器和多个I2C和SPI控制器(图1)。
微晶片技术CEC1702加密嵌入式控制器示意图
图1:微芯片技术CEC1702加密嵌入式控制器结合了高性能的ARM cortexm4f核心和通用外围设备,以及对身份验证和加密的专门支持。(图片来源:凯利讯半导体)
虽然该设备能够满足典型物联网设计的功能要求,但其特点在于其安全性能。CEC1702将安全存储和数据保护机制等基本安全特性与多个集成的加密引擎结合在一起。除了一个多用途的AES加密引擎外,该设备还包括一个crypto哈希引擎和公共密钥引擎,它为多个算法提供硬件支持,包括RSA、椭圆曲线diffie - hellman(ECDH)和椭圆曲线数字签名算法(ECDSA)等。由于硬件安全引擎可以比基于软件的方法执行加密算法的速度更快,因此开发人员可以在不影响应用程序性能的情况下使用强大的加密和身份验证。
在硬件设计水平上,开发人员可以使用CEC1702作为IoT设计中的独立MCU,或者通过其SPI连接将设备添加到现有的MCU基础设计中,并没有额外的努力。对于他们的IoT软件设计,开发人员可以使用CEC1702的加密和身份验证特性来实现IoT设备和云之间的安全通信。
除了为安全通信提供更传统的需求之外,该设备的安全机制还为更广泛的生命周期安全需求提供了关键的支持,包括预启动固件认证和安全固件更新。CEC1702具有认证固件的能力,它为建立信任的基础提供了硬件基础,这是连接系统(包括物联网)安全的核心。
安全启动
在一个典型的用于单片机物联网系统,通过SPI CEC1702将连接到外部闪存存储固件,主机单片机和CEC1702(图2)。当系统力量,CEC1702开始运行,保持主机单片机复位,直到进行身份验证的安全应用程序代码用于引导主机单片机。
微芯片CEC1702图
图2:通过一个共享SPI总线,Microchip CEC1702使用它的集成安全机制来确保主机应用程序处理器只运行经过验证的固件。(图片来源:凯利讯半导体)
信任的根是CEC1702的序列方法,用于安全启动所需的固件身份验证(图3)。当CEC1702启动时,它首先运行在工厂的ROM中加载的引导固件。由于这个ROM代码不能更改,所以引导过程中的第一步是建立在可信基础上的。尽管开发人员可以选择在不进行身份验证或加密的情况下加载应用程序固件,但是使用这些安全机制可以帮助您在引导过程结束时继续保持信任链。使用这些安全机制,CEC1702引导ROM代码对设计在CEC1702上运行的应用程序固件进行身份验证和解密。
在这一序列的最后一步中,CEC1702验证和解密了在主机MCU应用程序处理器上运行的应用程序固件。因为每个步骤都验证代码,所以在主机应用程序处理器上运行的最终代码映像是可信的,从而完成了信任的根。
Microchip CEC1702启动过程示意图(点击放大)
图3:CEC1702引导过程将验证检查应用到引导过程中的每一个步骤,以建立IoT安全性所需的信任根。(图片来源:凯利讯半导体)
在安全引导过程,CEC1702使用安全数据综合Efuse一次性可编程(OTP)内存来验证固件固件包中包含对信息(图4),进行身份验证,设备使用公钥Efuse举行验证固件信封的ECDSA签名中创建图像生成(在下面描述)。由于该签名是使用客户所持有的私钥创建的,所以此阶段的固件验证确保了固件源的合法性。
微芯片图像生成过程图
图4:映像生成过程将每个固件映像封装到需要对映像进行身份验证和解密的安全信息中。(图片来源:凯利讯半导体)
虽然图像加密是可选的,但是身份验证和加密的结合增加了前面提到的额外安全保护。当开发人员使用加密的固件时,CEC1702将使用ECDH密钥交换使用一个解密阶段的身份验证过程来创建解密密钥。
在此过程中,CEC1702使用了Efuse中包含的(不同的)私有密钥作为ECDH算法的一部分,以生成正确的解密密钥(图5)。
Microchip CEC1702的示意图处理ECDH密钥交换机制
图5:CEC1702使用嵌入的Efuse内存中的数据和通过固件镜像传输的数据,处理ECDH密钥交换机制。(图片来源:凯利讯半导体)
这里,设备结合NIST p - 256曲线发生器点(图5)Gx,Gy Efuse举行的私钥(图5)中的年代,Efuse举行和公钥(Rx和Ry术语在图4)嵌入式固件信封中派生的关键(图5)中的Kx用于终于解密固件图像。
这种方法的一个明显优势是,底层的椭圆曲线方法能够提供非常健壮的安全性和相对短的密钥。
快速发展
尽管CEC1702的安全机制非常复杂,但微晶片已经超出了它的范围,使得开发者可以相对容易地充分利用芯片的固件认证和加密功能。该公司的Efuse generator工具提供了一个简单的接口,用于指定ECDSA和ECDH密钥,并生成Efuse数据(图6)。
微晶片Efuse生成器软件的图像
图6:Microchip Efuse generator提供了一个简单的接口,用于创建用于身份验证和解密的相关安全数据的固件映像。(图片来源:凯利讯半导体)
对于硬件开发,Microchip Technology的SecureIoT1702(DM990012)演示板提供了一个简单的平台来启动硬件开发。除了按钮,led和一个小的LCD,电路板还包括了Microchip的SST26VF016 16 Mbit闪存设备,用于存储固件图像。除了用于串行flash编程的头文件,JTAG debug,以及其他的,该板还包括MikroBUS头,用于支持广泛的兼容硬件扩展板。
开发人员可以将一个微型芯片ATWINC1500 wi - fi clicker板连接到演示板上的MikroBUS扩展槽上,以快速将SecureIoT1702板连接到Microsoft Azure cloud(图7)。
Microchip SecureIoT1702演示板和ATWINC1500 wi - fi扩展图像
图7:开发人员可以使用Microchip SecureIoT1702演示板、ATWINC1500 wi - fi扩展和Microchip的SecureIoT1702软件包快速连接到Microsoft Azure cloud。(图片来源:凯利讯半导体)
SecureIoT1702演示板已经获得了微软的认可,它是一个带有骰子(设备身份合成引擎)硬件支持的Azure认证IoT设备。虽然超出了本文的讨论范围,但对于信任设备来说,骰子是一个新兴的标准,它指定一个安全启动过程,使用不同的验证阶段来构建信任的根(参见图3)。
使用Microchip的SecureIoT1702_Azure_IoT_build软件包,开发人员可以通过Azure的物联网中心快速将SecureIoT1702板连接到Azure cloud。与其他新兴的物联网平台产品一样,Azure IoT Hub提供了身份验证、设备注册等服务,以及其他需要将IoT硬件设备连接到Azure云的服务。该软件包将Azure IoT设备软件开发工具包C语言(SDK)与硬件驱动程序和mbedTLS全TLS(传输层安全)堆栈结合起来。
包中包含的示例软件包括一个预配置的根证书、X509证书和一个私有密匙,因此开发人员可以轻松地使用Azure云进行身份验证。如示例软件所示,开发人员只需调用几个调用来加载安全数据并开始发送IoT数据(清单1),使用这种基本的设计模式,开发人员可以扩展该委员会的功能,甚至开始使用CEC1702进行安全的无线更新技术。
/ *设置消息回调,这样我们就可以接收命令。* /
if(IoTHubClient_LL_SetMessageCallback)(iotHubClientHandle,ReceiveMessageCallback和receivecontext)!= IOTHUB_CLIENT_OK)
{
(空白)printf("错误:IoTHubClient_LL_SetMessageCallback ..........失败! \ r \ n”);
}
其他的
{
(空白)printf(" IoTHubClient_LL_SetMessageCallback…成功。\ r \ n”);
/ *现在我们已经准备好接收命令了,让我们发送一些消息* /
size_t迭代器= 0;
做
{
如果(迭代器< MESSAGE_COUNT)
{
sprintf_s(msgText,sizeof(msgText)," {\"deviceId\ ":\ "myFirstDevice\" \"windSpeed\ ":%。,avgWindSpeed +(rand()% 4 + 2);
如果(消息(迭代器)。messageHandle = IoTHubMessage_CreateFromByteArray((const unsigned char *)msgText,strlen(msgText))= = NULL
{
(空白)printf("错误:iotHubMessageHandle零! \ r \ n”);
}
其他的
{
MAP_HANDLE propMap;
消息(迭代器)。messageTrackingId =迭代器;
(迭代器).messageHandle propMap = IoTHubMessage_Properties(消息);
(空白)sprintf_s(propText sizeof(propText),“PropMsg_ %族”,迭代器);
if(Map_AddOrUpdate(propMap,PropName,propText)!= MAP_OK)
{
(空白)printf("错误:Map_AddOrUpdate失败! \ r \ n”);
}
如果(IoTHubClient_LL_SendEventAsync(iotHubClientHandle,消息(迭代器)。messageHandle SendConfirmationCallback,消息(iterator))!= IOTHUB_CLIENT_OK)
{
(空白)printf("错误:IoTHubClient_LL_SendEventAsync ..........失败! \ r \ n”);
}
其他的
{
(void)printf(“IoTHubClient_LL_SendEventAsync接受消息[% zu],用于传输到物联网中心。”\ r \ n”,迭代器);
}
}
}
IoTHubClient_LL_DoWork(iotHubClientHandle);
ThreadAPI_Sleep(1);
迭代器+ +;
}(g_continueRunning);
清单1:Microchip Azure IoT软件包包含了将SecureIoT1702连接到Azure云所需的所有软件,包括演示与Azure物联网中心的事务的示例软件。
结论
随着IoT向更多的应用程序扩展,不安全的物联网设备对IoT网络和应用程序构成了重大威胁。为了提高安全性,IoT开发人员需要使用安全方法来在IoT系统级建立信任的根。开发人员在使用常规安全方法时,没有显著增加设计复杂性和降低整体性能,因此面临相当大的挑战。
然而,使用Microchip CEC1702密码嵌入控制器,开发人员可以快速创建基于信任的IoT应用程序。