在物联网设计中添加安全元件以构建从边缘到云的安全性

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

在设计和部署与公共互联网连接的任何系统时,网络安全仍然是普遍存在的一大难题。在物联网 (IoT) 领域,随着用户开始质疑连接设备是否能够安全地支持智能家居、智能工厂或智能城市方面的应用,安全问题显得尤其尖锐。然而,面对日益紧迫的交付日程,物联网设备开发人员经常感觉负担不起过多设备资源,更不能像过去那样,花费大量额外时间来实现有效安全解决方案所需的广泛功能组合。

半导体供应商提供了更易于部署的安全解决方案,帮助他们达到平衡。本文将讨论安全问题,然后介绍来自 NXP Semiconductors 的一个此类解决方案,也就是 EdgeLock SE050 安全元件 (SE)。然后,本文将向开发人员展示如何利用这个单芯片器件,在物联网设备中快速实现从边缘到云的安全性。

物联网安全问题

事实证明,安全保护不佳的物联网设备往往会成为网络攻击觊觎的目标。一旦受到破坏,设备可能泄漏机密用户数据,提供假冒设备身份所需的宝贵信息。黑客们还可能利用这些暴露设备来造成更大的破坏,更深入地渗透到网络中,入侵其他连接的设备、系统和企业资源。因此,受到破坏的物联网设备会波及到物联网层次结构的多个层,甚至在楼宇自动化、工业系统、交通运输和医疗设备等新兴应用中,还会威胁公共安全。

对于期望提供更高效物联网设计的开发人员而言,由于对更高性能和更低功耗的需求日益增长,已经成为主流趋势,安全性要求可能被视为多余的累赘。事实上,要实现有效的安全性,就必须满足不断增加的要求,以便缓解从边缘到云的安全威胁。

如果只是孤立地应用各种不同技术,即便是熟悉的技术(例如加密和身份验证),也不足以单独确保安全。物联网安全性需要建立在信任根之上,以便确保安全机制和协议受到保护,使其免受破坏。同时,安全方法越来越需要以更细的粒度来应用,不仅保护物联网设备之间的连接,还要保护各个物联网设计的元器件之间的连接。

NXP 的 EdgeLock SE050 安全元件专门用于提供一系列安全机制和协议,以便在物联网设备中构建从边缘到云的安全性。

稳健的安全解决方案

NXP 的 SE050 是一种用于物联网设备安全的交钥匙型解决方案,依托 NXP 在智能卡安全领域的丰富经验而构建,旨在为物联网设计提供硬件信任根。该器件将专用微控制器、安全凭据存储与基于 Java Card OpenPlatform (JCOP) 智能卡操作系统 (OS) 构建的软件堆栈组合在一起。SE050 操作平台经过独立认证,达到通用标准 (CC) 评估保证等级 (EAL) 增强 6 级 (EAL 6+) 的操作系统级别,可为高威胁环境中的工作提供罕见保证等级(图 1)。

SE050 平台提供罕见保证等级的示意图(点击放大)图 1:在经过认证的产品中,SE050 平台提供了罕见保证等级,达到 CC EAL 6+ 操作系统级别。(数据来源:Common Criteria)

专用的 NXP 物联网安全小程序经过优化,可在这个稳健的安全平台上运行,并使用内置的加密库来支持一组全面的加密算法,包括:

  • 使用高级加密标准 (AES) 和数据加密标准 (DES) 算法的对称加密
  • 使用 Rivest–Shamir–Adleman (RSA) 和椭圆曲线加密 (ECC) 算法的非对称加密,支持多个 ECC 曲线,包括美国国家标准与技术研究院 (NIST) 指定的标准曲线
  • 在生成信息验证代码 (MAC) 的过程中使用的多个哈希函数
  • 用于密码哈希、密钥协议、密钥增强等方法的多个密钥导出函数 (KDF) 算法

为了提高运行速度,SE050 器件集成了适用于高级加密标准 (AES)、数据加密标准 (DES)、基于属性的快速消息加密 (FAME) 技术的硬件加速器。

为了保护在加密操作过程中使用的凭据,该器件提供了多达 50 KB 的安全用户闪存,并且预配置了根密钥,用于支持典型的物联网事务。开发人员若要创建高容量设计,还可以充分利用由 NXP 或授权第三方提供商安全配置的定制密钥和凭据。

例如,除了本身的嵌入式闪存之外,该器件还支持对随机存取存储器 (RAM) 的访问,以便存储公共证书,同时相关私钥保留在安全闪存中。此外,SE050 物联网小程序提供安全导入/导出功能,让开发人员能够安全地将密钥或任何数据存储在外部存储器中。但是,该器件使用存储器管理单元,仅允许物联网小程序访问存储器的不同部分,从而防止通过微控制器的未经授权访问。为了进一步防止篡改和复杂的旁道攻击,该器件还纳入多个逻辑和物理屏障,以便防御未经授权的访问。

但是,安全性的实质是允许访问授权的设备,同样还要设置屏障来防御未经授权的访问。

设备身份验证

SE050 充当物联网设备的信任根,它的加密机制和安全存储功能直接支持所需的安全连接,用于与授权远程主机(例如云服务器)进行通信。事实上,这些相同的功能还让开发人员能够在物联网层次结构的最低级别上,也就是在使用 SE050 安全元件构建的独立物联网设备之间,确保连接的真实性。

例如,使用与传统互联网身份验证类似的方法,智能物联网传感器能够自行向物联网控制器件进行身份验证。在这个过程中,首先传感器件将存储在 SE050 安全存储中的证书发送到控制器件。然后控制器件使用 SE050 加密功能来验证接收的证书。验证成功之后,控制器件将某个随机值(称为质询)发送回到传感器件。接下来,传感器件使用 SE050 安全元件,利用与先前发送到控制器件的同一证书相关联的私钥,对质询进行签名。由于签名的质询只能使用相关联公钥进行验证,因此控制器件可以确保传感器件最初发送的证书真正属于该器件所有。因此,控制器件能够可靠地对传感器件进行身份验证。

通过在同一过程中切换角色,控制器件能够向传感器进行反向的身份验证。

这种相互的身份验证过程对于构建受信任物联网网络至关重要,特别是随着更多中间层的出现,包括边缘计算设备。虽然这种相互的身份验证过程非常简单直观,但即便是简单的实现错误或协议的不同解释,也会导致严重的安全缺陷。特别是在资源紧张的物联网设计中,对安全存储以及快速执行复杂加密算法的需求,可能让可靠的实现变得更加复杂。通过将 SE050 添加到任何物联网设计中,开发人员能够实现一些关键的安全功能,例如相互身份验证,而不会影响整体的设计性能或安全性。

简单安全的集成

除了先进的功能之外,SE050 的另外一大优点是易于导入设计中。开发人员能够轻松地将该器件集成到物联网设计中,而只会对设计复杂性或占用空间产生很小的影响。这款 3 mm x 3 mm 器件可用作附加器件,提供了一组简单的串行接口(图 2)。

NXP 的 SE050 安全元件提供多个接口的示意图图 2:NXP 的 SE050 安全元件提供了多个接口,因而可用作 I2C 从接口,用于与主微控制器的连接,或者用作 I2C 主接口,用于与数字传感器的基于 ISO 7816 的连接,还可用作 ISO 14443 近场通讯 (NFC) 非接触式接口。(图片来源:NXP)

与主微控制器通信时,该器件充当 I2C 从接口。SE050 还可以充当 I2C 主接口,用于与其他串行器件(例如数字传感器)的基于 ISO 7816 的连接。该器件还支持用作 ISO 14443 NFC 非接触式连接的第三接口。

为了进行不同的连接,SE050 的物联网小程序会协调安全密钥和访问控制规则,以设置和管理每个连接的会话。

为了与主机进行通信,SE050 提供了基于会话的身份验证,旨在防止 I2C 命令和数据受到拦截,以及防止使用中间人攻击。要启动串行连接会话,开发人员可以使用用户 ID 进行身份验证,这些 ID 类似于密码或个人识别码 (PIN)。

对于某些应用而言,微控制器和 SE050 之间基于密码的基本身份验证不一定足够确保安全。对于关键应用,开发人员可能需要确保主微控制器和 SE050 安全元件之间的通信保持机密,以防御各种攻击手段,例如回放会话、发送乱序会话碎片、利用企图提取机密数据的黑客版本来替代加密算法。

安全总线事务

使用 SE050 安全元件,开发人员能够利用身份验证方法,在 SE050 和主机微控制器之间创建安全的通信通道。在这一方面,开发人员能够利用 SE050 IC 对安全通道协议 (SCP) SCP03 标准的支持。该标准广泛用于保护 Java Card 设备与主机之间的双向通信安全。

对于使用 SE050 安全元件构建的基于微控制器的设计,SCP03 协议的使用实质上在 I2C 总线会话身份验证过程中将 SE050 安全元件与主机微控制器绑定,进而允许在会话过程中使用已加密信息。对于 SCP03 协议内部的信息加密,首先使用 AES 算法来加密纯文本信息,然后为已加密信息生成 MAC。这种方法会发送已加密信息以及关联的 MAC,因而被称为“Encrypt-then-MAC”,它可以保护已加密信息,让接收器能够检测到消息的改动。

SE050 还为传感器数据提供某种方式的保护。因此,开发人员能够利用认证元数据,请求 SE050 增强对主机命令的响应,这些元数据包括唯一标识符、每个实例的随机值形式的新鲜度数据、时间戳和签名。在主机内部,软件能够检查从 SE050 接收的认证数据,以便针对连接到 SE050 I2C 主接口的传感器,验证其数据的来源和时效。

由于来自各个传感器的数据并入数据流中以传输到物联网层次结构,因此相关应用可以利用这些认证数据,识别可能表明传感器损坏、故障或受威胁的异常数据模式来源。通过 SCP03 主机会话和传感器数据认证,开发人员能够可靠安全地获取关键应用的必需传感器数据。

功能接口

与主机微控制器和 SE050 安全元件之间的所有交互相同,认证请求和响应也要流经通信堆栈,这些堆栈在适用于智能卡设备的功能接口标准 ISO 7816 中定义(图 3)。这个应用协议数据单元 (APDU) 标准定义了主机设备 (HD) 与安全元件之间信息交换的格式、内容和协议。

NXP 的 SE050 安全元件与主机设备之间的通信示意图图 3:NXP 的 SE050 安全元件和主机设备之间的通信是通过 ISO 7816 智能卡标准堆栈实现,该堆栈包括使用 ISO 7816 APDU 标准的应用级别请求和响应,由使用 ISO 7816-3 T=1 半双工协议的数据链路层通过 I2C 进行传输。(图片来源:NXP)

数据链路层基于 I2C 物理层构建,可将来自应用层的请求和响应分解为一个遵循 ISO 7816-3 T=1 over I2C 协议的事务序列,以便进行半双工通信。在该协议中,主机设备和安全元件上的数据链路层在事务序列中的每次传输之后都会等待确认。

例如,对于主机应用发出的读取请求,主机的数据链路层首先轮询安全元件,并且等待确认 (ACK) 响应,该响应指示安全元件准备进行发送(图 4)。

数据链路层处理主机设备请求的示意图图 4:数据链路层将主机设备请求(包括此处所示的读取请求)处理为一系列遵循 T=1 over I2C 协议的事务,从轮询循环开始以重复请求,直至收到确认 (ACK) 响应,该响应指示安全元件已经准备传输数据。(图片来源:NXP)

收到 ACK 准备就绪的响应之后,安全元件中的数据链路层以数据块传输序列的方式,将数据发送到主机,等待来自主机的数据链路层确认,以便进行每次数据块传输(图 5)。最终,完整的响应发送至主机应用。

安全元件以数据块序列的方式发送数据的示意图图 5:安全元件表示已准备好发送数据之后,将以数据块序列的方式发送数据响应,等待来自主机设备的确认,然后再发送序列中的下一个数据块。(图片来源:NXP)

软件实现

在应用层上,主机微控制器与 SE050 安全元件之间的交换是使用 ISO 7816 APDU 标准执行。对于 SE050,命令和响应的 APDU 基于在 ISO 7816-4 中定义的标记、长度、值 (TLV) 格式。每个 ADPU 至少包括一个类别 (CLA) 字节(所有 SE050 操作为固定值)、一个指令 (INS) 字节和两个参数(P1、P2)字节。数据请求和响应也可能包括其他字段,例如要读取的字节数 (Le)、数据字段的长度 (Lc) 和数据字段。

例如,主机应用的读取请求会使用一对 TLV,用以配置 SE050 I2C 接口和执行读取请求(清单 1)。如上文所述,主机数据链路层按照 T=1 协议,将此请求分解为一系列 I2C 总线事务。

复制 static smStatus_t i2cm_Read(     ex_sss_boot_ctx_t *pCtx, uint8_t *readbuf, uint32_t readLength) {     smStatus_t status;     TLV[0].type = kSE05x_I2CM_Configure;     TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS;     TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz;       TLV[1].type = kSE05x_I2CM_Read;     TLV[1].cmd.rd.readLength = readLength;     TLV[1].cmd.rd.rdBuf = readbuf;       status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 3);     return status; } 

清单 1:NXP 的 Plug & Trust 中间件包括源代码,演示 ISO 7816-4 TLV 格式在主机命令中的使用,例如这个对 NXP SE050 安全元件的基本读取命令。(代码来源:NXP)

如清单 1 中所示,代码使用简单 C 结构,对用于配置和读取请求的 TLV 进行编码。其中的每个 TLV 都使用 SE05x_I2CM_cmd_t 结构进行初始化(清单 2)。

复制 typedef struct _SE05x_I2CM_cmd {     SE05x_I2CM_TLV_type_t type;     SE05x_I2CM_INS_type_t cmd; } SE05x_I2CM_cmd_t;   typedef enum _SE05x_I2CM_TLV_type {     kSE05x_I2CM_None = 0,     kSE05x_I2CM_Configure,     //kSE05x_I2CM_Security,     kSE05x_I2CM_Write = 3,     kSE05x_I2CM_Read,     kSE05x_I2CM_StructuralIssue = 0xFF } SE05x_I2CM_TLV_type_t;   typedef union _SE05x_I2CM_INS_type {     SE05x_I2CM_configData_t cfg;     SE05x_I2CM_securityData_t sec;     SE05x_I2CM_writeData_t w;     SE05x_I2CM_readData_t rd;     SE05x_I2CM_structuralIssue_t issue; } SE05x_I2CM_INS_type_t;   typedef struct _SE05x_I2CM_readData {     uint16_t readLength;     SE05x_I2CM_status_t rdStatus;     /* Output.rdBuf will point to Host buffer */     uint8_t *rdBuf; } SE05x_I2CM_readData_t; 

清单 2:NXP 的 Plug & Trust 软件分发提供了用于定义请求类型(绿色高亮显示)和相关命令参数(蓝色高亮显示)的结构。(代码来源:NXP)

SE05x_I2CM_cmd_t 结构内部,type 成员是通过 C 枚举 SE05x_I2CM_TLV_type_t 定义的,它列出了可能的值,包括读取请求 ADPU (kSE05x_I2CM_Read) 的标准值 4。SE05x_I2CM_cmd_t 结构的 cmd 成员在结构的联合体中定义。在本例中,cmd 成员为 rd 结构,它又包括一些成员,指定请求数据长度 (readLength) 和目标缓冲器指针 (rdBuf)。

这组定义抽象为几行代码,设置清单 1 中的 TLV[1] 实例 type 成员,以指示读取请求 (kSE05x_I2CM_Read),并将 cmd 成员设置为所需的 readLengthreadBuf 缓冲器指针。

开发支持

为了简化软件开发,NXP 通过 Plug & Trust 中间件以及相关的库应用编程接口 (API),将与 SE050 安全元件的主机交互抽象化(图 6)。NXP 的 Plug & Trust 中间件分发包将中间件和 API 与一系列基于 mbed TLS、OpenSSL 和其他包构建的样例应用程序组合在一起。此外,通过基于 Python 的命令行界面 (CLI),开发人员能够在交互模式下使用 SE050 功能。

NXP 的 Plug & Trust 软件包示意图图 6:除了样例软件之外,NXP 的 Plug & Trust 软件包还包括中间件和相关的 API,可通过基于 ISO 7816 的堆栈将与 SE050 进行的交互细节抽象化,该堆栈包括 APDU 应用层、T=1 over I2C 数据链路层和 I2C 物理层。(图片来源:NXP)

除了 NXP 的 Plug & Trust 软件之外,开发人员还可使用 OM-SE050ARD 开发套件来快速评估 SE050,该开发套件将 SE050 安全元件和简单支持电路与多个针座组合在一起。OM-SE050ARD 板带有适用于外部 I2C 接口的连接器,提供对 SE050 引脚的直接访问,另外还包括 Arduino-R3 针座。开发人员使用 Arduino-R3 针座,能够轻松地将 OM-SE050ARD 板连接至多种开发板,包括 NXP 的 I.MX 6ULTRALITE 评估板和 NXP 的 FRDM-K64F 评估板。

开发人员使用受支持的评估板,能够快速地探索特定安全用例,可通过 Plug & Trust 软件样例以编程方式开发,或者通过基于 Python 的命令行界面以交互方式开发。在 Plug & Trust 软件分发的样例应用程序中,样例软件展示了通过 SE050 I2C 主接口读取传感器数据的完整过程。开发人员能够快速重新构建这个样例应用程序,以认证读取来取代传统的 I2C 读取。要使用认证读取,无需对清单 1 中所示的 TLV 设置进行更改。事实上,更改在很大程度上是将清单 1 中所示的 I2C 读取函数 Se05x_i2c_master_txn() 替换为认证读取版本 Se05x_i2c_master_attst_txn(),另外还替换相关的函数参数。

其他样例应用程序演示了从边缘至云的安全功能的最后步骤 – 身份验证以及与云服务的安全通信。在 Plug & Trust 软件样例中,开发人员可以找到分步说明,了解如何使用 SE050 来提供身份验证以及与公有云服务的安全连接,这些服务包括 Microsoft Azure、IBM Watson、Amazon Web Services (AWS) 和 Google Cloud Platform (GCP)。这些云连接样例的大部分工作是在相应云服务上创建账户,并且上传密钥和证书(也在样例例程中提供)。SE050 安全元件可处理开发人员在确保安全云连接时通常需要执行的很多繁重工作。

使用 NXP 的 Plug & Trust 软件堆栈并结合 NXP 开发板,开发人员能够快速地充分利用 SE050 安全元件对物联网设备边缘至云安全性的全面支持。

总结

安全保护不佳的物联网设备会让大量机密数据受到威胁,还可能成为窃取其他关联资源的入口。开发人员需要在安全的基础上构建物联网设计,而这个基础从设备延伸至云,并支持整个物联网设备生命周期。如本文所述,我们可以通过利用 NXP 提供的 SE050 来增强设计,从而实现这个目标。开发人员使用这种安全元件,能够满足对从边缘至云的更有效安全性的新兴要求。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Stephen Evanczuk

Stephen Evanczuk 拥有 20 多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不是在撰写技术和工程文章,就是在研究深度学习在识别和推荐系统方面的应用。

关于此出版商

DigiKey 北美编辑