首页 > 解决方案 > 如何安全地自动将多个设备连接到 IoT Central?

问题描述

我正在尝试将多个设备(200 多个)安全地连接到 Microsoft Azure IoT Central。我有一个运行 api 19 的 android 应用程序,它通过 https 将单个设备连接到 IoT Central。

我正在关注SaS 组注册教程

我知道我需要一个连接字符串来连接到 IoT Central,它由底层 IoT 中心名称、设备主键和设备 ID(可以是设备 imei 或可以自动生成的东西)组成。

但是,为每个设备插入主键需要为 200 多个设备修改应用程序。

为了自动生成设备主键,可以通过运行从 SAS-IoT-Devices 组主密钥派生:或者在我的情况下使用带有代码az iot central device compute-device-key --primary-key <enrollment group primary key> --device-id <device ID>的 android studio :

public static byte[] ComputeDerivedSymmetricKey(String masterKey, String registrationId) throws InvalidKeyException, NoSuchAlgorithmException
{
    byte[] masterKeyBytes = com.microsoft.azure.sdk.iot.deps.util.Base64.decodeBase64Local(masterKey.getBytes(StandardCharsets.UTF_8));
    SecretKeySpec secretKey = new SecretKeySpec(masterKeyBytes, HMAC_SHA256);
    Mac hMacSha256 = Mac.getInstance(HMAC_SHA256);
    hMacSha256.init(secretKey);
    return com.microsoft.azure.sdk.iot.deps.util.Base64.encodeBase64Local(hMacSha256.doFinal(registrationId.getBytes()));
}

但这会将主密钥暴露给所有可能导致严重数据泄露的设备。

我想知道如何在不修改应用程序 200 多次的情况下安全地生成连接字符串?(将主密钥存储在硬件安全模块中并不是真正的选择)

非常感谢!

标签: azureandroid-studioazure-iot-hubazure-iot-sdkazure-iot-central

解决方案


在没有唯一的硬件信任根的情况下,您的安全态势总是相对较弱。

一种选择是在 Azure 服务中生成设备特定密钥,例如 Azure Function,它可以使用存储在 Azure Key Vault 中的主密钥。android 应用程序仍需要使用函数证明其唯一身份并请求设备特定身份。这将避免在应用程序中使用通用主密钥。

如果您可以选择利用 Android 上的唯一 ID,例如 FID ( https://developer.android.com/training/articles/user-data-ids ),它可用于通过该功能证明应用程序身份.

其他选项是为每个设备生成密钥对并使用它来创建 CSR,获取设备特定的 X509。它将增加更多复杂性,并且仍然需要引导证明机制。


推荐阅读