设备更新安全模型

IoT 中心设备更新提供了一种安全的方法,可用于将设备固件、映像和应用程序的更新部署到 IoT 设备。 该工作流提供了一个端到端安全通道,其中包含一个完整的监管链模型,设备可使用该模型来证明更新受信任、未经修改和有意设计。

设备更新工作流中的每个步骤都通过各种安全功能和过程进行保护,以确保管道中的每个步骤都安全移交到下一个步骤。 设备更新代理参考代码可识别并正确管理任何非法更新请求。 参考代理还会检查每个下载,以确保内容受信任、未经修改,且属于意向性内容。

摘要

当更新导入设备更新实例时,服务会上传并检查更新二进制文件,以确保这些更新文件未被恶意用户修改或交换。 验证完成后,设备更新服务将生成包含导入清单和其他元数据的文件哈希的内部更新清单。 然后,设备更新服务对此更新清单进行签名。

导入服务并存储在 Azure 中后,Azure 存储服务会自动对更新二进制文件和关联的客户元数据进行加密。 设备更新服务不会自动提供额外的加密,但允许开发人员在内容到达设备更新服务之前自行对内容进行加密。

将更新从设备更新服务部署到设备时,会通过受保护的 IoT 中心通道将已签名的消息发送到设备。 请求的签名由设备更新代理验证为真实。

生成的任何二进制下载将通过验证更新清单签名来进行保护。 更新清单包含二进制文件哈希,因此,清单被信任后,设备更新代理即信任这些哈希,并将其与二进制文件进行匹配。 下载并验证更新二进制文件后,它将移交给设备上的安装程序。

实现细节

为了确保设备更新服务向下扩展到简单、低性能的设备,安全模型使用原始非对称密钥和原始签名。 它们使用基于 JSON 的格式,如 JSON Web 令牌和 JSON Web 密钥。

通过更新清单来保障更新内容

使用两个签名来验证更新清单。 使用由“签名”密钥和“根”密钥组成的结构创建签名。

设备更新代理具有用于所有与设备更新兼容的设备的嵌入式公钥。 这些公钥是“根”密钥。 相应的私钥由Microsoft控制。

Microsoft 还会生成一个公钥/私钥对,其未包含在设备更新代理中或存储在设备上。 此密钥是“签名”密钥。

将更新导入到 IoT 中心的设备更新中,并且更新清单由服务生成时,服务将使用签名密钥对清单进行签名,并包括签名密钥本身,该密钥由根密钥签名。 将更新清单发送到设备时,设备更新代理会收到以下签名数据:

  1. 签名值本身。
  2. 用于生成 #1 的算法。
  3. 用于生成 #1 的签名密钥的公钥信息。
  4. #3 中的公共签名密钥的签名。
  5. 用于生成 #3 的根密钥的公钥 ID。
  6. 用于生成 #4 的算法。

设备更新代理使用上面定义的信息来验证公钥的签名是否由根密钥签名。 然后,设备更新代理会验证是否已通过签名密钥对更新清单签名进行签名。 如果所有签名都正确,则设备更新代理信任更新清单。 由于更新清单包含对应于更新文件本身的文件哈希,因此,如果哈希匹配,则更新文件也会受信任。

使用根密钥和签名密钥,Microsoft 可以定期滚动更新签名密钥,这是最佳安全做法。

JSON Web 签名 (JWS)

updateManifestSignature 用于确保 updateManifest 中包含的信息未被篡改。 updateManifestSignature 使用带有 JSON Web 密钥的 JSON Web 签名生成,用于进行来源验证。 签名是一个 Base64Url 编码字符串,包含三个部分,以“.”分隔。 有关分析和验证 JSON 密钥和令牌的信息,请参阅 jws_util.h 帮助器方法

JSON Web 签名是一种广泛使用的建议 IETF 标准,用于使用基于 JSON 的数据结构对内容进行签名。 这是一种通过验证数据签名确保数据完整性的方法。 可以在 JSON Web 签名 (JWS) RFC 7515 中找到更多信息。

JSON Web 令牌

JSON Web 令牌是一种开放的行业标准方法,可用于在两方之间安全表示声明。

根密钥

每个设备更新设备必须包含一组根密钥。 对于 Device Update 的所有签名,这些密钥是信任的根源。 任何签名都必须通过其中一个根密钥进行链接,才能被视为合法。

根密钥集会随时间而改变,因为为了安全起见,需要定期轮换签名密钥。 因此,设备更新代理软件需要按设备更新团队指定的时间间隔使用最新的根密钥集进行更新。

签名

所有签名都附带由根密钥之一签名的签名(公钥)。 该签名标识了用于签署签名密钥的根密钥。

设备更新代理必须首先验证签名密钥(公钥)的签名是否正确和有效,并确认此签名由已批准的根密钥之一进行签署。 成功验证签名密钥后,可以使用现在受信任的签名公钥来验证签名本身。

签名密钥的轮换频率远高于根密钥,因此可以预期会有由各种不同签名密钥签署的消息。

吊销签名密钥由设备更新服务管理,因此用户不应尝试缓存签名密钥。 始终使用签名附带的签名密钥。

保护设备

务必确保设备上的设备更新相关安全资产得到适当的保护。 需要防止根密钥等资产被修改。 有多种方法可以保护根密钥,例如使用安全设备(TPM、SGX、HSM、其他安全设备),或者如同目前在参考实现中所做的那样,在设备更新代理中对其进行硬编码。 后者要求对设备更新代理代码进行数字签名,并且系统的代码完整性支持能够防范代理代码的恶意修改。

可以保证其他安全措施,例如确保以安全的方式执行从组件到组件的移交。 例如,注册特定的独立帐户以运行各种组件,并将基于网络的通信(例如 REST API 调用)限制为 localhost。

后续步骤

了解设备更新如何使用 Azure 基于角色的访问控制