AN-7648: 如何利用MAXQ1065创建安全的AWS IoT Core连接
引言
近年来,智能设备数量井喷式增长。随着设计和功能日益复杂,智能设备中集成了大量实用特性,让我们的生活更加轻松便捷。互联网的普及,加上技术和通信能力的进步,使人们能够随时随地管理远程设备,而无需亲临设备现场。然而,随着越来越多的设备互联互通,数据操控、未经授权访问和安全漏洞的风险日益凸显。唯有建立安全可靠的环境,才能避免灾难性事件的发生。本文介绍了如何使用MAXQ1065和AWS IoT Core创建安全环境。文中阐述了如何生成所需的证书和密钥,说明了具体用法,并通过一个实际例子展示了基本安全连接和设置。本应用笔记中提及的MAXQ1065 SDK用于生成密钥、证书、设备初始化配置和测试。该SDK可通过申 请获取。
MAXQ1065特性
- 用于嵌入式设备安全防护的固定功能IC
-
安全功能
- (D)TLS 1.2,通用SP800-56r3 ECC DH密钥交换
- 通用密码工具箱,用于身份验证、机密性、证明唯一ID安全引导/安全更新
- 具有可配置时序的外部看门狗功能
- 复位输出(可选事件)
- 通过防篡改输入引脚(IN)进行上电防篡改检测
- 现场可升级
-
安全存储
- ChipDNA保护+芯片屏蔽,防篡改检测器
- 具有可定制安全属性的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°C/+105°C,1.8V/3.3V工作电压,100nA关断模式(**)
- 12引脚TDFN,3mm x 3mm,间距0.5mm
AWS IoT Core描述
AWS IoT Core是一个用于对物联网设备进行管理、身份验证和通信的平台。物联网设备直接或通过网关连接到AWS IoT Core服务器。通常使用TLS连接对服务器进行身份验证,而设备本身则通过JSON Web Token (JWT)协议进行身份验证。
基本原理
在物联网设备直接或通过网关与AWS IoT Core服务器建立连接之前,每个设备必须发起与AWS IoT Core服务器的传输层安全(TLS)会话。此TLS会话将创建一个共享对称密钥,从而实现对通信双方的身份验证,并确保通信的完整性与加密安全。此会话还向物联网设备提供保证,即确保其所连接的是一个合法服务器。
TLS会话建立后,服务器会使用JSON Web Token (JWT)协议安全地识别物联网设备。在相互身份验证完成后,常规HTTP或MQTT流量可通过已建立的TLS会话安全传输。
JWT身份验证依赖于客户定义的根证书和密钥对,分别称为JWT_CA证书和JWT密钥对。从服务器的角度看,物联网设备按“注册表”进行分组管理,每个注册表由其专属的JWT_CA证书定义。注册表中的所有设备都必须完成身份验证,方式是证明自身拥有由该注册表对应的JWT_CA私钥签发的JWT证书。每个设备都有专属的JWT密钥对和由注册表的JWT认证机构(JWT_CA)签发的相应JWT证书。
注:所有证书必须采用X.509 v3格式,并以隐私增强邮件(PEM)格式进行编码。PEM是一种将DER格式内容进行base64编码,并包裹在“BEGIN CERTIFICATE-----”与“-----END CERTIFICATE”标识之间的编码形式。JWT_CA私钥必须采用PEM格式,并至少以128位安全级别进行加密。读者需要参考PKCS#8等定义了私钥加密技术的标准,利用JWT_CA私钥可生成“有效”设备;因此,必须维护JWT_CA私钥的保密性,并严格控制其使用。
准备工作
继续之前,请参考AWS IoT Core文档 ,并按照教程"Managing things with the registry” 进行 操作。请完成教程中截至"Detach a principal from a thing."的全部步骤。
身份验证设置
创建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证书上传到AWS IoT Core注册表。
- 打开生成的证书文件‘cert_CA.pem’,并复制其内容。
- 转到AWS Console中的 IoT Core面板。
- 在Security(安全)下方,点击Certificates(证书)按钮。
- 点击 Add Certificate(添加证书)按钮,然后点击 Register certificates(注册证书)。
- 在Register certificates(注册证书)窗口中,点击CA is not registered with AWS IoTCA未在AWS IoT中注册)。点击Upload(上传)按钮,上传‘cert_CA.pem’,然后点击Register(注册)。
- 在Certificates(证书)页面中,点击所注册证书旁边的复选框以选择该证书。点击Actions (操作)下拉菜单,然后点击 Activate(激活)以激活证书。
- 证书已添加到注册表并激活。现在可利用该证书对采用MAXQ1065的物联网节点设备进 行身份验证。接下来,必须按照设备(MAXQ1065)初始化配置部分的详细说明,为 MAXQ1065配置设备专属证书。
设备(MAXQ1065)初始化配置
设备初始化配置过程会创建设备专属的密钥对,并使用JWT_CA私钥签发证书。
为了完成此过程,MAXQ1065 SDK包含‘init_tls_iot’脚本。此脚本针对下述过程中的每个后续步骤提供了示例。对于每个设备,‘init_tls_iot’脚本执行以下步骤:
- 在MAXQ1065中生成设备密钥对(JWT私钥和JWT公钥)。
- 读出生成的设备公钥。
- 使用JWT_CA私钥对生成的JWT公钥进行认证。
- 将设备JWT证书(csr_cert.pem)加载回设备(更具体地说,加载到MAXQ1065存储器中)。
现在,该物联网设备拥有自己的JWT身份验证密钥和相关证书。因此,AWS IoT Core服务器可对其进行身份验证。更具体地说,它属于由用于签发设备证书的根JWT_CA证书所定义的注册表。
下面的附加步骤包括将AWS IoT根证书加载到客户端设备中。这样一来,设备就能在TLS握手期间对AWS IoT Core服务器进行身份验证,确保其所连接的是官方AWS IoT服务器,而不是某个身份不明的服务器。这些步骤同样由‘init_tls_iot’脚本执行:
- 从以下地址获取Amazon Root CA 3: https://www.amazontrust.com/repository/AmazonRootCA3.pem
- 将Amazon Root CA 3加载到MAXQ1065存储器。
在AWS IoT Core上注册设备
每当客户端设备连接到AWS IoT Core服务器时,必须由服务器对其身份进行安全验证。通过将每个设备预先注册到AWS IoT注册表中,后续身份验证将变得更快速、更简单。实际上,每个设备的证书仅在注册时加载一次,写入到AWS IoT服务器注册表中。在该阶段,将使用注册表的JWT_CA证书对该设备的证书进行验证。AWS IoT Core服务器使用注册表的证书JWT_CA,验证来自客户端设备的JWT证书(证书存储在MAXQ1065中)是否是利用JWT_CA私钥签发的。然后,每当设备连接到IoT服务器时,便不再需要传输和验证其证书。服务器仅仅识别设备,确保它属于该注册表,并请求JWT身份验证以确认其身份。
每个设备需要通过以下步骤注册到AWS IoT Core服务器中。
- 将‘csr_cert.pem’上传到AWS IoT Core > Security > Certificates > Register certificates,如图6所示。.
- 使用AWS CloudShell将名为‘EXAMPLE_DEVICE’的设备添加到注册表中:
aws iot create-thing --thing-name EXAMPLE_DEVICEaws iot attach-thing-principal --thing-name EXAMPLE_DEVICE --principal arn:aws:iot:{Certificate ARN}
这里,以上命令行中提供的JWT设备证书(名为csr_cert.pem的文件)由AWS IoT Core使用之 前上传的JWT_CA证书进行验证。
运行设备
将设备连接到AWS IoT Core服务器的过程如下:
- 设备使用其本地Amazon根证书来验证AWS IoT Core服务器证书。
- 服务器将其证书发送给客户端(也称为设备)。
- 客户端使用先前在初始化配置阶段载入MAXQ1065中的Amazon根证书来验证服务器证书。该证书的验证发生在MAXQ1065内部。 MAXQ1065.
- 成功后,MAXQ1065会提取服务器公钥,并将其存储以备将来使用。
- 设备向AWS IoT Core服务器进行自我身份验证。
- 服务器创建一个新的ECDHE密钥对。
- 服务器使用其私钥对来自MAXQ1065的ECDHE公钥和随机数进行签名,并将签名后的ECDHE公钥发送回设备。
- 设备的MAXQ1065使用从服务器证书解码的服务器公钥,验证服务器传入数据的签名。服务器公钥在上一步中进行验证和解码,并存储在MAXQ1065中。
- 如果签名验证成功,服务器身份便得到确认,随后ECDHE公钥会保存在内部以供下一步使用。
- 执行ECDHE密钥交换。派生出会话密钥。
- MAXQ1065创建一个新的随机ECDHE密钥对。
- ECDHE私钥与经过身份验证的服务器的ECDHE公钥相结合。
- 此组合会在两端(设备和服务器)生成一个共享密文。该共享密文会进一步派生出AES会话密钥。
- 执行应用层安全策略。使用会话密钥来加密/解密数据包。
图20显示了会话建立后的TLS通信。当服务器向客户端发送消息(例如对请求的响应)时,服务器使用AES会话密钥对其消息进行加密和签名。
一旦客户端设备从服务器接收到TLS包,设备的主微控制器就会将TLS包输入到MAXQ1065中。MAXQ1065使用先前建立的会话密钥解密并验证TLS包,然后将其以明文形式返回给主微控制器。上述过程也适用于另一个方向的通信。
- 验证客户端身份。
TLS会话建立后,客户端设备会验证服务器身份,但服务器身份尚未被设备验证。执行此附加步骤是为了完成相互身份验证。
客户端设备会生成一个JWT,并使用其自己的JWT密钥对它进行签名。服务器随后使用客户端的JWT证书验证该已签名的令牌。以下是详细过程:
- 服务器向客户端发送一个质询(一个随机数)。
- 客户端使用MAXQ1065的JWT私钥对质询进行签名。
- 客户端返回签名和客户端JWT证书。
- 服务器使用JWT_CA证书来验证客户端的JWT证书,并从中获取客户端的公钥。
- 服务器使用来自客户端证书的可信公钥来验证质询的签名。
- 如果签名得到验证,则证明客户端确实拥有与其证书中公钥匹配的私钥。
有关JWT的更多信息,请访问https://jwt.io/。
配置选项
为了便于部署,ADI公司提供开箱即用的出厂安全编程服务。有关更多信息和最低要求,请联 系ADI公司的销售代表。
图24 显示了这一服务的通用流程。
结语
物联网设备往往处于无人看管的状态,或部署在非安全设施内,因此天然地暴露在攻击风险之中。攻击者更容易通过侵入式手段获取这些设备中的加密密钥。一旦掌握密钥,攻击者就能假冒设备身份,或替换其固件以创建僵尸网络,为发起大规模网络攻击奠定基础。
MAXQ1065安全加密协处理器能够为运行嵌入式系统或物联网应用的微控制器添加安全实现的加密功能和安全密钥存储,从而增强相连嵌入式系统的安全性。尤其值得强调的是,MAXQ1065 ChipDNA PUF技术实现了安全防护的指数级提升,能够有效抵御黑客通过侵入式手段或逆向工程对集成电路发起的攻击,严防机密凭据被非法提取。任何试图证明或观测ChipDNA运行情况的行为,都会改变底层电路的特性,从而确保用于保护物联网云基础设施连接凭据的唯一密钥不被发。MAXQ1065的其他特性支持在启用连接凭据之前强制验证设备固件,从而保证设备只有在运行合法固件的前提下,才能接入物联网云服务器。此外,数据加密密钥可保持锁定状态,直至设备正式投入使用。这一机制可有效杜绝敏感数据在制造和运输环节发生泄露的风险。
通过将密钥和证书预编程到MAXQ1065中,物联网设备可在接入云基础设施时瞬间激活,同时提升安全性。这样,物联网设备的制造过程可不依赖环境安全要求,因为预配置的MAXQ1065 IC已具备安全保障,连接凭据已安全锁定在其中。
MAXQ1065提高了攻击门槛,使得嵌入式设备能以合理的成本实现“可证明的安全性”。























