MAXQ1065为嵌入式器件安全协处理器,提供信任根、相互认证、数据机密性和完整性、安全启动、安全固件更新以及通用密钥交换和批量加密或完整TLS支持的安全通信等加密功能。 Google IoT Core是一个物联网设备管理系统,允许用户连接,管理和接收来自远程连接设备的数据。Google IoT Core提供了管理远程连接设备所需的接口。
介绍
在过去几年中,智能设备的数量呈指数级增长。它们的设计和功能的复杂性提供了许多简化我们生活的功能。互联网的便捷访问以及技术和通信的进步为随时随地管理远程设备打开了大门,而无需亲自出现在设备位置。但是,随着越来越多的设备相互连接,预计会出现数据操纵、未经授权的访问和安全漏洞的风险。需要一个安全的环境来避免灾难性事件。本文介绍如何使用MAXQ1065和Google IoT Core创建安全环境,并说明如何生成所需的证书和密钥,描述它们的用法,并提供基本安全连接和设置的真实示例。本应用笔记引用MAXQ1065 SDK,用于生成密钥、证书、器件配置和测试。SDK 可应要求提供。
MAXQ1065特性
- 用于嵌入式设备安全的固定功能IC
- 安全功能
- 安全存储
- 芯片DNA保护+芯片屏蔽,篡改检测器
- 8KB 动态文件系统(10K 周期),具有可自定义的安全属性
- 安全密钥管理和生命周期,x.509 支持
- 硬件加密引擎
- SHA-2-256
- ECC (NIST P-256)*: ECDSA, ECDH
- AES-128/256 (GCM, CBC, ECB, CCM)
- NIST SP800-90A/B/C 就绪 TRNG
- 10MHz SPI 从机,带安全通道
- -40/+105°C,1.8V/3.3V 工作电压,100nA 关断模式 (**)
- 12-TDFN 3 × 3mm 间距 0.5mm
谷歌物联网核心描述
Google IoT Core是一个物联网设备管理,身份验证和通信设施。物联网节点设备(直接或通过网关)连接到谷歌物联网核心版服务器。通常,会建立TLS连接以验证Google IoT Core服务器。这些设备使用JSON Web Token(JWT)协议进行身份验证。
基本
物联网设备(直接或通过网关)连接到 Google IoT Core 服务器。在允许与 Google IoT Core 连接之前,每个设备都需要与 Google IoT Core 服务器建立传输层安全性 (TLS) 会话。此 TLS 会话建立为通信的身份验证、完整性和加密创建共享对称密钥,并向 IoT 设备保证其连接到合法服务器。此外,一旦启动 TLS 会话,服务器还可以使用 JWT 协议安全地识别物联网设备。发生此安全相互身份验证后,常规 HTTP 或 MQTT 流量可以流经已建立的 TLS 会话。
图1.基本物联网连接。
JWT 身份验证依赖于客户定义的根证书和密钥对(JWT_CA证书和 JWT 密钥对)。从服务器的角度来看,物联网设备被分组到所谓的“注册表”中,每个注册表都由其自己的JWT_CA证书定义。属于注册表的所有设备都必须通过证明由注册表附加的 JWT_CA 私钥颁发的 JWT 证书的所有权来确认其身份。每个设备都有自己的 JWT 密钥对,以及 JWT 证书颁发机构颁发的 JWT 证书JWT_CA。
注意: 所有证书必须采用 X.509 v3 格式,以隐私增强邮件 (PEM) 格式编码,这是一种编码为 base64 的 DER 格式,并包装在-----BEGIN CERTIFICATE-----和 -----END 证书-----分隔符之间。JWT_CA私钥必须采用 PEM 格式,并至少使用 128 位安全性进行加密。读者需要参考定义私钥加密技术的标准,例如 PKCS#8。私钥JWT_CA允许生成“有效”设备;因此,必须保密并严格控制其使用。
图2.设备注册表的视图。
制备
在继续之前,请参阅 https://cloud.google.com/iot/docs/create-device-registry 并按照教程“创建 IoT 核心版设备注册表”进行操作,然后继续执行步骤“创建 设备注册表 ”(随附)。
身份验证设置
创建附加到注册表的JWT_CA根证书(和私钥)。MAXQ1065 SDK包括make_ca_cert脚本,用于生成该序列所需的自签名证书和密钥。
所需步骤
-
执行“make_ca_cert”脚本:
- 它会生成JWT_CA私钥并将其保存到文件“cert privkey_server_ECDSA_secp256r1_secp256r1.pem”中。稍后用于颁发存储在MAXQ1065存储器中的器件专用证书。
- 它还使用生成的JWT_CA私钥将自签名 x509 JWT_CA 证书生成到文件“cert_CA.pem”中。
-
将生成的JWT_CA证书上传到 Google IoT Core 注册表。
-
打开生成的证书文件“cert_CA.pem”并复制其内容。
图3.生成的证书注册表。
图4.证书内容。-
转到Google Cloud进入“IoT Core”面板。
图 5.谷歌物联网核心。
-
选择正确的注册表。
图6.注册表。
-
在所选注册表下,单击“ CA 证书 ”下拉菜单。
图7.上传 CA 证书。
-
单击添加证书按钮。
图8.插入证书。
-
在“添加 CA 证书”窗口的 “证书值 ”框中,粘贴文件“cert_CA.pem”中的内容,然后单击“ ADD ”。
图9.粘贴证书。
-
证书被添加到注册表中,用于验证采用MAXQ1065的物联网节点设备。现在,MAXQ1065必须配置器件专用证书。有关更多详细信息,请参阅配置器件(MAXQ1065)部分。
图 10.证书已加载。
-
配置器件 (MAXQ1065)
设备预配创建设备特定的密钥对,并使用JWT_CA私钥颁发其证书。
为了实现这一过程,MAXQ1065 SDK包含init_tls_googleiot脚本。此脚本提供了每个后续步骤的示例。这是过程。对于每个设备,“ init_tls_googleiot ”脚本执行以下步骤:
-
在MAXQ1065中生成器件密钥对(JWT私钥和JWT公钥)。
-
读出生成的设备公钥。
图 11.生成公钥。
-
使用JWT_CA私钥认证生成的 JWT 公钥。
-
将器件JWT证书(csr_cert.pem)加载回器件(更具体地说,加载到MAXQ1065存储器中)。
图 12.加载 JWT 证书。
现在,IoT 设备具有自己的 JWT 身份验证密钥和关联的证书。因此,它可以由Google IoT核心服务器进行身份验证,更具体地说,它属于由用于颁发设备证书的根JWT_CA证书定义的注册表。
下面的其他步骤包括将Google IoT根证书加载到客户端设备中,这允许设备在TLS握手期间对Google IoT核心服务器进行身份验证,并确保它连接到真实的Google IoT服务器,而不是未知服务器。这些步骤也由同一个“ init_tls_googleiot ”脚本执行:
-
获取 Google IoT TLS 根证书 (GTS LTSR 证书) 或证书 GS 根 R4 作为备份:
-
将谷歌物联网TLS根证书加载到MAXQ1065内存中。
图 13.加载谷歌物联网TLS根证书。
在谷歌物联网核心版上注册设备
每次客户端设备连接到 Google IoT 核心服务器时,其身份都必须由服务器安全地验证。通过将每个设备预先注册到Google IoT注册表中,进一步的身份验证变得更快,更简单。事实上,每个设备的证书在注册时都会加载到谷歌物联网服务器注册表中一次。在该阶段,使用注册表的JWT_CA证书对设备的证书进行验证。谷歌物联网核心服务器使用注册表的证书JWT_CA来验证来自客户端设备的JWT证书(证书存储在MAXQ1065中)是否确实是用JWT_CA私钥颁发的。然后,每当设备连接到物联网服务器时,都不需要进一步传输和验证其证书。服务器只是识别设备,确保它属于注册表,并请求 JWT 身份验证以确认其身份。
每个设备都需要按照此过程注册到Google IoT Core服务器中。
使用Google IoT GCP控制台将名为“EXAMPLE_DEVICE”的设备添加到注册表中:gcloud 物联网设备创建EXAMPLE_DEVICE --project=maximiot-224510 --region=us-central1 --registry=my-registry --public-key path=csr_cert.pem,type=es256-x509-pem
在这里,上面命令行中提供的 JWT 设备证书(文件名为 csr_cert.pem)由 Google IoT 使用之前上传的JWT_CA证书进行验证。
图 14.开发工具包加载证书。
图 15.在谷歌物联网核心上注册设备。
运行设备
将设备连接到Google IoT Core服务器遵循以下过程:
-
设备使用其本地Google IoT TLS根证书验证Google IoT Core服务器证书。
图 16.验证服务器证书。-
服务器将其证书发送到客户端(也称为设备)。
-
客户端使用先前在配置阶段加载到MAXQ1065中的Google IoT TLS根证书来验证服务器证书。该证书的验证在MAXQ1065中进行。
-
MAXQ1065在成功时提取服务器公钥并存储以备将来使用。
图 17.验证服务器证书序列。
-
-
设备向谷歌物联网核心服务器验证自身。
图 18.对服务器进行身份验证。-
服务器创建新的 ECDHE 密钥对。
-
服务器使用服务器私钥对ECDHE公钥和来自MAXQ1065的随机数进行签名,并将签名的ECDHE公钥发送回器件。
-
器件的MAXQ1065使用从服务器证书解码的服务器公钥来验证来自服务器的传入数据的签名。服务器公钥在上一步中经过验证和解码,并存储在MAXQ1065中。
-
如果签名经过验证,则证明服务器的身份,然后ECDHE公钥在内部保留以备下一步使用。
图 19.对服务器序列进行身份验证。
-
-
执行 ECDHE 密钥交换。派生会话密钥。
图 20.执行 ECDHE 和派生会话密钥。-
MAXQ1065创建一个新的随机ECDHE密钥对。
-
私有 ECDHE 密钥与经过身份验证的服务器的 ECDHE 公钥相结合。
-
该组合在两端(设备和服务器)上提供共享密钥。共享密钥进一步派生到 AES 会话密钥中。
图 21.执行 ECDHE 派生会话密钥序列。
-
-
执行应用层安全性。使用会话密钥加密/解密包。
图 22.加密/解密。
图 23 显示了建立会话后的 TLS 通信。当服务器向客户端发送消息(例如,对请求的响应)时,服务器使用 AES 会话密钥对其消息进行加密和签名。
客户端设备一旦从服务器接收到TLS数据包,器件的主微控制器将TLS数据包输入MAXQ1065。MAXQ1065使用先前建立的会话密钥解密并验证TLS数据包,并以明文形式返回给主微控制器。相同的过程应用于另一个通信方向。
图 23.加密/解密序列。
-
对客户端进行身份验证。
图 24.对客户端进行身份验证。
建立 TLS 会话后,客户端设备对服务器进行身份验证,但设备尚未对服务器进行身份验证。执行此附加步骤以完成相互身份验证。
- 服务器向客户端发送质询(随机数)。
- 客户端使用MAXQ1065使用其JWT私钥对质询进行签名。
- 客户端发回签名和客户端 JWT 证书。
- 服务器使用 JWT_CA 证书验证客户端的 JWT 证书,并从中获取客户端的公钥。
- 服务器使用客户端证书中的可信公钥验证质询的签名。
- 如果签名经过验证,则证明客户端实际拥有与其证书存在的公钥匹配的私钥。
有关 JWT 的更多信息,请参阅 https://jwt.io/。
图 25.对客户端序列进行身份验证。
用户可以使用“google_iot”文件夹中提供的SDK示例执行上述整个过程:
./iot_core_mqtt_client -p maximiot-224510 -d projects/maximiot-224510/locations/us-central1/registries/my-registry/devices/EXAMPLE_DEVICE -t /devices/EXAMPLE_DEVICE/state
预配选项
为了便于部署,ADI提供开箱即用的工厂安全编程服务。有关更多信息和最低要求,请联系ADI销售代表。
图 26 显示了此服务的常见流程。
图 26.ADI安全编程服务流程。
结论
物联网设备本质上暴露给攻击者,因为它们可能无人看管或未部署在安全设施中。它使攻击者更容易进行侵入性攻击,以试图从这些设备获取加密密钥。获取密钥允许攻击者模拟设备或替换其固件以创建僵尸网络,这可能是对网络进行大规模攻击的构建块。
MAXQ1065安全加密协处理器通过为运行嵌入式系统或物联网应用的任何微控制器添加安全实现的加密功能和安全密钥存储,增强了连接嵌入式系统的安全性。特别是,MAXQ1065 ChipDNA PUF技术对黑客在集成电路上提取凭据的侵入性和逆向工程攻击的防护能力呈指数级增长。任何证明或观察ChipDNA操作的尝试都会修改底层电路特性,从而阻止发现保护物联网云基础设施连接凭据的唯一机密。MAXQ1065的附加功能可以在连接凭证可供使用之前进行强制性的设备固件验证,从而保证设备在连接到物联网云服务器之前运行合法固件。同样,数据加密密钥可能会被锁定,直到设备实际部署到现场,从而在制造和运输阶段保护敏感数据。
另外,将密钥和证书预编程到MAXQ1065中,使得物联网设备可以即时地进一步注册到云基础设施中,甚至更加安全。物联网器件可以在没有环境安全要求的情况下制造,但预先配置的MAXQ1065 IC已经安全,连接凭证被锁定。
MAXQ1065提高了攻击者的标准,允许以合理的成本在嵌入式设备中实现可证明的安全性。
审核编辑:郭婷
-
微控制器
+关注
关注
48文章
7551浏览量
151399 -
集成电路
+关注
关注
5388文章
11544浏览量
361776 -
嵌入式
+关注
关注
5082文章
19118浏览量
305047
发布评论请先 登录
相关推荐
评论