Compartir vía


Atestación de clave simétrica

En este artículo se describe el proceso de atestación de identidad al usar claves simétricas con el servicio Device Provisioning. La atestación de clave simétrica es un enfoque sencillo para autenticar un dispositivo con una instancia del servicio Device Provisioning. Este método de atestación representa una experiencia de "Hola mundo" para los desarrolladores que no estén familiarizados con el aprovisionamiento de dispositivos, o no tengan requisitos de seguridad estrictos. La atestación de dispositivo mediante un TPM o un certificado X.509 es más segura y se debe usar cuando los requisitos de seguridad son más estrictos.

Las inscripciones de claves simétricas ofrecen también una forma para que los dispositivos heredados con funcionalidad de seguridad limitada arranquen en la nube mediante Azure IoT.

Creación de una clave simétrica

De forma predeterminada, Device Provisioning Service crea nuevas claves simétricas con una longitud de 64 bytes cuando se crean nuevas inscripciones con la opción Generar claves simétricas automáticamente habilitada.

Screenshot that shows a new individual enrollment with the autogenerate keys option selected.

También puede proporcionar sus propias claves simétricas para las inscripciones deshabilitando esta opción. Las claves simétricas deben estar en formato Base 64 y tener una longitud de clave entre 16 bytes y 64 bytes.

Proceso de atestación detallado

La atestación de clave simétrica con el servicio de aprovisionamiento de dispositivos se realiza con los mismos tokens de seguridad que utilizan los centros de IoT para identificar los dispositivos. Estos tokens de seguridad son tokens de firma de acceso compartido (SAS).

Los tokens de SAS tienen una firma hash que se crea mediante la clave simétrica. Device Provisioning Service vuelve a crear la firma para comprobar si un token de seguridad presentado durante la atestación es auténtico o no.

Los tokens de SAS tendrán este formato:

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

Presentamos a continuación los componentes de cada token:

Valor Descripción
{signature} Una cadena de firma HMAC-SHA256. Para las inscripciones individuales, esta firma se genera mediante la clave simétrica (principal o secundaria) para realizar el hash. Para los grupos de inscripción, se usa una clave derivada de la clave de grupo de inscripción para realizar el hash. El hash se realiza en un mensaje del formulario: URL-encoded-resourceURI + "\n" + expiry. Importante: La clave debe descodificarse en base64 antes de usarse para realizar el cálculo HMAC-SHA256. Además, el resultado de la firma tiene que codificarse como URL.
{resourceURI} EL URI del punto de conexión de registro al que se puede acceder con este token, empezando por el identificador de ámbito para la instancia del servicio Device Provisioning. Por ejemplo: {Scope ID}/registrations/{Registration ID}
{expiry} Cadenas UTF8 para el número de segundos transcurridos desde el tiempo 00:00:00 UTC el 1 de enero de 1970.
{URL-encoded-resourceURI} Codificación de dirección URL en minúsculas del URI del recurso en minúsculas
{policyName} El nombre de la directiva de acceso compartido a la que hace referencia este token. El nombre de directiva que se usó cuando se aprovisionó con la atestación de clave simétrica es registration.

Para ver ejemplos de código que crea un token de SAS, consulte Tokens de SAS.

Inscripciones individuales con claves simétricas

Cuando un dispositivo se atesta con una inscripción individual, el dispositivo usa la clave simétrica que se define en la entrada de inscripción individual para crear la firma hash para el token de SAS.

Inscripción de grupos con claves simétricas

A diferencia de una inscripción individual, los dispositivos no usan directamente la clave simétrica de un grupo de inscripción cuando se aprovisionan. En cambio, los dispositivos que se aprovisionan a través de un grupo de inscripción lo hacen utilizando una clave de dispositivo derivada. La clave de dispositivo derivada es un hash del identificador de registro del dispositivo y se calcula mediante la clave simétrica del grupo de inscripción. A continuación, el dispositivo puede usar su clave de dispositivo derivada para firmar el token de SAS que usa para registrarse con DPS. Dado que el dispositivo envía su identificador de registro cuando se registra, DPS puede usar la clave simétrica del grupo de inscripción para volver a generar la clave de dispositivo derivada del dispositivo y comprobar la firma en el token de SAS.

En primer lugar, se define un identificador de registro único para cada dispositivo que se autentica a través de un grupo de inscripción. El id. de registro es una cadena que no distingue mayúsculas de minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos más caracteres especiales válidos: - . _ :. El último carácter debe ser alfanumérico o un guion ('-'). El identificador de registro debe ser un valor exclusivo que identifique al dispositivo. Por ejemplo, una dirección MAC o un número de serie disponibles para identificar de forma única un dispositivo. En ese caso, un identificador de registro puede estar formado por la dirección MAC y el número de serie de forma similar al siguiente:

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

Una vez que se ha definido un identificador de registro para el dispositivo, la clave simétrica para el grupo de inscripción se usa para calcular un hash HMAC-SHA256 del identificador de registro para generar una clave de dispositivo derivada. Algunos enfoques de ejemplo para calcular la clave de dispositivo derivada se indican en las pestañas siguientes.

La extensión de IoT para la CLI de Azure proporciona el comando compute-device-key para generar claves de dispositivo derivadas. Este comando se puede usar en sistemas Windows o Linux, en PowerShell o en un shell de Bash.

Reemplace el valor del argumento --key por la clave principal de su grupo de inscripción.

Reemplace el valor del argumento --registration-id por su identificador del registro.

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

Resultado de ejemplo:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

La clave del dispositivo resultante se usa para generar un token SAS que se usará para la atestación. A cada dispositivo en un grupo de inscripción se le requiere que realice la atestación usando un token de seguridad generado a partir de una única clave derivada. No se puede usar directamente la clave simétrica del grupo de inscripción para la atestación.

Instalación de la clave de dispositivo derivada

Lo ideal es que las claves de dispositivo se deriven e instalen en la fábrica. Este método garantiza que la clave de grupo no se incluirá nunca en ningún software implementado en el dispositivo. Cuando al dispositivo se le asigna una dirección MAC o un número de serie, la clave se puede derivar e insertar en el dispositivo de la forma en la que el fabricante la almacene.

Considere el siguiente diagrama que muestra una tabla de claves de dispositivo generadas en una fábrica aplicando un hash a cada identificador de registro de dispositivo con la clave de inscripción de grupo (K).

Diagram that shows device keys being assigned at a factory.

La identidad de cada dispositivo se representa mediante el identificador de registro y la clave de dispositivo derivada que se instala en fábrica. La clave de dispositivo nunca se copia en otra ubicación y la clave de grupo nunca se almacena en un dispositivo.

Si las claves de dispositivo no se instalan en la fábrica, se debe utilizar un módulo de seguridad de hardware (HSM) para almacenar de forma segura la identidad del dispositivo.

Pasos siguientes

Ahora que tiene un conocimiento de la atestación de clave simétrica, consulte los artículos siguientes para aprender más sobre el tema: