你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

对称密钥证明

本文介绍将对称密钥与设备预配服务配合使用时的标识证明过程。 对称密钥证明是使用设备预配服务实例对设备进行身份验证的简单方法。 此证明方法为不熟悉设备预配或没有严格安全要求的开发人员提供一种"Hello world"式的初体验。 使用 TPMX.509 证书 的设备证明更安全,并且应该用于更严格的安全要求。

对称密钥注册还为具有有限安全功能的旧设备提供了一种方法,可通过 Azure IoT 启动云。

对称密钥创建

默认情况下,当使用“ 生成对称密钥”自动 启用选项创建新注册时,设备预配服务会创建长度为 64 字节的新对称密钥。

屏幕截图显示了一个已选择自动生成密钥选项的新单独注册。

还可以通过禁用此选项为注册提供自己的对称密钥。 对称密钥必须采用 Base 64 格式,并且密钥长度介于 16 字节和 64 字节之间。

详细证明过程

对称密钥证明在设备预配服务中使用 IoT 中心支持的相同 安全令牌 来标识设备。 这些安全令牌是共享访问签名(SAS)令牌。

SAS 令牌具有使用对称密钥创建的哈希 签名 。 设备预配服务会重新创建签名,以验证证明过程中显示的安全令牌是否真实。

SAS 令牌采用以下形式:

SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}

下面是每个令牌的组件:

价值 Description
{signature} HMAC-SHA256 签名字符串。 对于单个注册,此签名是使用对称密钥(主密钥或辅助密钥)来执行哈希生成的。 对于注册组,派生自注册组密钥的密钥用于执行哈希。 哈希在以下格式的消息上执行:URL-encoded-resourceURI + "\n" + expiry重要说明:在用于执行 HMAC-SHA256 计算之前,必须先从 base64 解码密钥。 此外,签名结果必须经过 URL 编码。
{resourceURI} 以设备预配服务实例的范围 ID 开头、可通过此令牌访问的注册终结点的 URI。 例如: {Scope ID}/registrations/{Registration ID}
{到期} 从纪元 1970 年 1 月 1日 00:00:00 UTC 时间至今秒数的 UTF8 字符串。
{URL-encoded-resourceURI} 小写资源 URI 的小写 URL 编码
{policyName} 此令牌引用的共享访问策略的名称。 使用对称密钥证明进行预配时使用的策略名称是 注册

有关创建 SAS 令牌的代码示例,请参阅 SAS 令牌结构

使用对称密钥进行个体注册

当设备通过单个注册进行证明时,设备将使用单个注册条目中定义的对称密钥为 SAS 令牌创建哈希签名。

使用对称密钥分组注册

与单个注册不同,设备预配时不会直接使用注册组的对称密钥。 相反,通过一个注册组配置的设备会使用派生的设备密钥。 派生的设备密钥是设备的注册 ID 的哈希,并使用注册组的对称密钥进行计算。 然后,设备可以使用其派生的设备密钥对用于向 DPS 注册的 SAS 令牌进行签名。 由于设备在注册时发送其注册 ID,DPS 可以使用注册组对称密钥重新生成设备的派生设备密钥,并在 SAS 令牌上验证签名。

首先,为每个通过注册组进行身份验证的设备定义唯一的注册 ID。 注册 ID 是字母数字字符的不区分大小写的字符串(最长为 128 个字符),以及有效的特殊字符: - . _ : 最后一个字符必须是字母数字或短划线 ('-')。 注册 ID 应是唯一标识设备的内容。 例如,可用于唯一标识设备的 MAC 地址或序列号。 在这种情况下,注册 ID 可以由 MAC 地址和序列号组成,类似于以下示例:

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

为设备定义注册 ID 后,注册组的对称密钥用于计算注册 ID 的 HMAC-SHA256 哈希,以生成派生的设备密钥。 以下选项卡中提供了计算派生设备密钥的一些示例方法。

Azure CLI 的 IoT 扩展提供 compute-device-key 用于生成派生设备密钥的命令。 此命令可用于 PowerShell 或 Bash shell 中基于 Windows 或 Linux 的系统。

--key 参数值替换为注册组中的主密钥

将参数值 --registration-id 替换为注册 ID。

az iot dps enrollment-group compute-device-key --key 8isrFI1sGsIlvvFSSFRiMfCNzv21fjbE/+ah/lSh3lF8e2YG1Te7w1KpZhJFFXJrqYKi9yegxkqIChbqOS9Egw== --registration-id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

示例结果:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

然后,生成的设备密钥用于生成用于证明的 SAS 令牌。 注册组中的每个设备都需要使用从唯一派生密钥生成的安全令牌进行证明。 注册组对称密钥不能直接用于证明。

安装派生的设备密钥

理想情况下,设备密钥派生并安装在工厂中。 此方法保证组密钥永远不会包含在部署到设备的任何软件中。 向设备分配 MAC 地址或序列号后,可以派生密钥,并将其注入到设备,而无论制造商选择以何种方式来存储它。

请考虑下图,该图显示了工厂中生成的设备密钥表,方法是使用组注册密钥(K)对每个设备注册 ID 进行哈希处理。

显示设备密钥在工厂被分配的示意图。

工厂中安装的注册 ID 和派生设备密钥表示每个设备的标识。 设备密钥永远不会复制到另一个位置,组密钥永远不会存储在设备上。

如果未在工厂中安装设备密钥,则应使用 硬件安全模块 (HSM)安全地存储设备标识。

后续步骤

了解对称密钥证明后,请查看以下文章了解详细信息: